<?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>220109</bug_id>
          
          <creation_ts>2020-12-22 16:45:00 -0800</creation_ts>
          <short_desc>Remove non-inclusive language from JetStream 2.0</short_desc>
          <delta_ts>2021-01-03 10:43:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>213092</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jbedard</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1716408</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2020-12-22 16:45:00 -0800</bug_when>
    <thetext>Running &apos;report-non-inclusive-language --verbose&apos; inside Websites/browserbench.org/JetStream2.0/ finds a number of non-inclusive terms that we should remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716410</commentid>
    <comment_count>1</comment_count>
      <attachid>416698</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2020-12-22 16:49:04 -0800</bug_when>
    <thetext>Created attachment 416698
Patch

Here&apos;s an attempt. I&apos;m not sure how to tell if this breaks things other than running JetStream locally. It ran with and without this change, and the result was similar but slightly better with the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716546</commentid>
    <comment_count>2</comment_count>
      <attachid>416738</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2020-12-23 21:15:30 -0800</bug_when>
    <thetext>Created attachment 416738
Patch

Not sure why this patch is so angry, trying again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716604</commentid>
    <comment_count>3</comment_count>
      <attachid>416738</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-12-25 10:42:46 -0800</bug_when>
    <thetext>Comment on attachment 416738
Patch

rs=me! (Assuming the bots get less angry eventually). Thanks for continuing to push this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716827</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-29 16:45:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/72730133&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717017</commentid>
    <comment_count>5</comment_count>
      <attachid>416901</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-02 15:00:15 -0800</bug_when>
    <thetext>Created attachment 416901
Patch

Thanks Sam! Trying again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717018</commentid>
    <comment_count>6</comment_count>
      <attachid>416902</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-02 15:05:59 -0800</bug_when>
    <thetext>Created attachment 416902
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717019</commentid>
    <comment_count>7</comment_count>
      <attachid>416903</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-02 15:10:07 -0800</bug_when>
    <thetext>Created attachment 416903
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717020</commentid>
    <comment_count>8</comment_count>
      <attachid>416904</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2021-01-02 15:11:48 -0800</bug_when>
    <thetext>Created attachment 416904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717042</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-03 10:43:52 -0800</bug_when>
    <thetext>Committed r271126: &lt;https://trac.webkit.org/changeset/271126&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 416904.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416698</attachid>
            <date>2020-12-22 16:49:04 -0800</date>
            <delta_ts>2020-12-23 21:15:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>1395531</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzEwNjgpCisr
KyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE4IEBACisyMDIwLTEyLTIyICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4K
KworICAgICAgICBSZW1vdmUgbm9uLWluY2x1c2l2ZSBsYW5ndWFnZSBmcm9tIEpldFN0cmVhbSAy
LjAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDEw
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0
U3RyZWFtMi4wL0pldFN0cmVhbURyaXZlci5qczoKKyAgICAgICAgKiBKZXRTdHJlYW0yLjAvY29k
ZS1sb2FkL2luc3BlY3Rvci1wYXlsb2FkLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5v
ZGUuV2ViSW5zcGVjdG9yLlJlc291cmNlLldlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcu
cHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLnN0eWxlRm9ybWF0dGVyKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLldlYkluc3BlY3Rvci5SZXNvdXJjZS5XZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1YnN0aXR1
dGlvblN0cmluZy5pc0FsbG93bGlzdGVkUHJvcGVydHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkRPTU5vZGUuV2ViSW5zcGVjdG9yLlJlc291cmNlLldlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZVZpZXcucHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLmlzV2hpdGVsaXN0
ZWRQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICogSmV0U3RyZWFtMi4wL3dlYi10b29saW5n
LWJlbmNobWFyay9icm93c2VyLmpzOgorICAgICAgICAqIEpldFN0cmVhbTIuMC93ZWItdG9vbGlu
Zy1iZW5jaG1hcmsvY2xpLmpzOgorCiAyMDE5LTA5LTE4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gVXBkYXRlIGRlbW9zIHRvIHdv
cmsgb24gU1RQIDkyCkluZGV4OiBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIu
MC9jb2RlLWxvYWQvaW5zcGVjdG9yLXBheWxvYWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMv
YnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvY29kZS1sb2FkL2luc3BlY3Rvci1wYXlsb2Fk
LmpzCShyZXZpc2lvbiAyNzEwNjcpCisrKyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0
cmVhbTIuMC9jb2RlLWxvYWQvaW5zcGVjdG9yLXBheWxvYWQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTU4MDksOSArNTgwOSw5IEBAIGZ1bmN0aW9uIGZsb2F0Rm9ybWF0dGVyKG9iaix0b2tlbikKIGZ1
bmN0aW9uIGludGVnZXJGb3JtYXR0ZXIob2JqKQoge2xldCB2YWx1ZT10eXBlb2Ygb2JqLnZhbHVl
PT09Im51bWJlciI/b2JqLnZhbHVlOm9iai5kZXNjcmlwdGlvbjtyZXR1cm4gU3RyaW5nLnN0YW5k
YXJkRm9ybWF0dGVycy5kKHZhbHVlKTt9CiB2YXIgY3VycmVudFN0eWxlPW51bGw7ZnVuY3Rpb24g
c3R5bGVGb3JtYXR0ZXIob2JqKQote2N1cnJlbnRTdHlsZT17fTt2YXIgYnVmZmVyPWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtidWZmZXIuc2V0QXR0cmlidXRlKCJzdHlsZSIsb2JqLmRl
c2NyaXB0aW9uKTtmb3IodmFyIGk9MDtpPGJ1ZmZlci5zdHlsZS5sZW5ndGg7aSsrKXt2YXIgcHJv
cGVydHk9YnVmZmVyLnN0eWxlW2ldO2lmKGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkp
Cit7Y3VycmVudFN0eWxlPXt9O3ZhciBidWZmZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpO2J1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIixvYmouZGVzY3JpcHRpb24pO2Zvcih2YXIg
aT0wO2k8YnVmZmVyLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBwcm9wZXJ0eT1idWZmZXIuc3R5bGVb
aV07aWYoaXNBbGxvd2xpc3RlZFByb3BlcnR5KHByb3BlcnR5KSkKIGN1cnJlbnRTdHlsZVtwcm9w
ZXJ0eV09YnVmZmVyLnN0eWxlW3Byb3BlcnR5XTt9fQotZnVuY3Rpb24gaXNXaGl0ZWxpc3RlZFBy
b3BlcnR5KHByb3BlcnR5KQorZnVuY3Rpb24gaXNBbGxvd2xpc3RlZFByb3BlcnR5KHByb3BlcnR5
KQoge2Zvcih2YXIgcHJlZml4IG9mWyJiYWNrZ3JvdW5kIiwiYm9yZGVyIiwiY29sb3IiLCJmb250
IiwibGluZSIsIm1hcmdpbiIsInBhZGRpbmciLCJ0ZXh0Il0pe2lmKHByb3BlcnR5LnN0YXJ0c1dp
dGgocHJlZml4KXx8cHJvcGVydHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iK3ByZWZpeCkpCiByZXR1
cm4gdHJ1ZTt9CiByZXR1cm4gZmFsc2U7fQpJbmRleDogV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9KZXRTdHJlYW0yLjAvd2ViLXRvb2xpbmctYmVuY2htYXJrL2Jyb3dzZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvd2ViLXRvb2xpbmct
YmVuY2htYXJrL2Jyb3dzZXIuanMJKHJldmlzaW9uIDI3MTA2NykKKysrIFdlYnNpdGVzL2Jyb3dz
ZXJiZW5jaC5vcmcvSmV0U3RyZWFtMi4wL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2VyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDM4OCwxNSArMTAzODgsMTUgQEAgdHJhdmVyc2UucmVtb3Zl
UHJvcGVydGllcyA9IGZ1bmN0aW9uICh0cgogICByZXR1cm4gdHJlZTsKIH07CiAKLWZ1bmN0aW9u
IGhhc0JsYWNrbGlzdGVkVHlwZShwYXRoLCBzdGF0ZSkgeworZnVuY3Rpb24gaGFzQmxvY2tsaXN0
ZWRUeXBlKHBhdGgsIHN0YXRlKSB7CiAgIGlmIChwYXRoLm5vZGUudHlwZSA9PT0gc3RhdGUudHlw
ZSkgewogICAgIHN0YXRlLmhhcyA9IHRydWU7CiAgICAgcGF0aC5zdG9wKCk7CiAgIH0KIH0KIAot
dHJhdmVyc2UuaGFzVHlwZSA9IGZ1bmN0aW9uICh0cmVlLCBzY29wZSwgdHlwZSwgYmxhY2tsaXN0
VHlwZXMpIHsKLSAgaWYgKCgwLCBfaW5jbHVkZXMyLmRlZmF1bHQpKGJsYWNrbGlzdFR5cGVzLCB0
cmVlLnR5cGUpKSByZXR1cm4gZmFsc2U7Cit0cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRy
ZWUsIHNjb3BlLCB0eXBlLCBibG9ja2xpc3RUeXBlcykgeworICBpZiAoKDAsIF9pbmNsdWRlczIu
ZGVmYXVsdCkoYmxvY2tsaXN0VHlwZXMsIHRyZWUudHlwZSkpIHJldHVybiBmYWxzZTsKIAogICBp
ZiAodHJlZS50eXBlID09PSB0eXBlKSByZXR1cm4gdHJ1ZTsKIApAQCAtMTA0MDYsOCArMTA0MDYs
OCBAQCB0cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlCiAgIH07CiAKICAg
dHJhdmVyc2UodHJlZSwgewotICAgIGJsYWNrbGlzdDogYmxhY2tsaXN0VHlwZXMsCi0gICAgZW50
ZXI6IGhhc0JsYWNrbGlzdGVkVHlwZQorICAgIGJsb2NrbGlzdDogYmxvY2tsaXN0VHlwZXMsCisg
ICAgZW50ZXI6IGhhc0Jsb2NrbGlzdGVkVHlwZQogICB9LCBzY29wZSwgc3RhdGUpOwogCiAgIHJl
dHVybiBzdGF0ZS5oYXM7CkBAIC0zNjk3Myw3ICszNjk3Myw3IEBAIGZ1bmN0aW9uIFR5cGVkQXJy
YXlTcGVjaWVzQ3JlYXRlKHJlYWxtLCAKIHZhciBwcm9taXNlRXhpc3RzID0gdHlwZW9mIFByb21p
c2UgPT09ICdmdW5jdGlvbic7CiAKIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovCi12YXIg
Z2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnID8gc2VsZiA6IGdsb2JhbDsg
Ly8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibGFja2xpc3QKK3ZhciBnbG9iYWxPYmplY3QgPSB0
eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDogZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJs
ZS1saW5lIGlkLWJsb2NrbGlzdAogCiB2YXIgc3ltYm9sRXhpc3RzID0gdHlwZW9mIFN5bWJvbCAh
PT0gJ3VuZGVmaW5lZCc7CiB2YXIgbWFwRXhpc3RzID0gdHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5l
ZCc7CkBAIC0xMTM1ODcsNyArMTEzNTg3LDcgQEAgbW9kdWxlLmV4cG9ydHMgPSAie1widmVyc2lv
blwiOjMsXCJzb3VyYwogLyogNDA1ICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
KSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8qIE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFt
ZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAo
YykgMjAwNi0yMDE3IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL21vb3Rvb2xzLm5ldC8pLiov
IFxuLyohXG5XZWIgQnVpbGQ6IGh0dHBzOi8vbW9vdG9vbHMubmV0L2NvcmUvYnVpbGRlci9lNDI2
YTlhZTcxNjdjNTgwN2IxNzNkNWRlZmY2NzNmY1xuKi9cbi8qXG4tLS1cblxubmFtZTogQ29yZVxu
XG5kZXNjcmlwdGlvbjogVGhlIGhlYXJ0IG9mIE1vb1Rvb2xzLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJp
byBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuXG5cbmF1dGhvcnM6IFRo
ZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0dHA6Ly9tb290b29scy5uZXQvZGV2ZWxvcGVy
cy8pXG5cbmluc3BpcmF0aW9uOlxuICAtIENsYXNzIGltcGxlbWVudGF0aW9uIGluc3BpcmVkIGJ5
IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIwMDYvMDMvYmFzZS8p
IENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2FyZHMsIFtHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9sZ3BsLWxpY2Vuc2Uu
cGhwKVxuICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBpbnNwaXJlZCBieSBbUHJvdG90eXBlLmpzXSho
dHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBTYW0gU3RlcGhl
bnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxp
Y2Vuc2UucGhwKVxuXG5wcm92aWRlczogW0NvcmUsIE1vb1Rvb2xzLCBUeXBlLCB0eXBlT2YsIGlu
c3RhbmNlT2YsIE5hdGl2ZV1cblxuLi4uXG4qL1xuLyohIE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlw
dCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmlnaHQ6IENvcHly
aWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20v
a2FtaWNhbmUvKS4qL1xuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuTW9vVG9vbHMgPSB7XG5cdHZlcnNp
b246ICcxLjYuMCcsXG5cdGJ1aWxkOiAnNTI5NDIyODcyYWRmZmY0MDFiOTAxYjhiNmM3Y2E1MTE0
ZWU5NWUyYidcbn07XG5cbi8vIHR5cGVPZiwgaW5zdGFuY2VPZlxuXG52YXIgdHlwZU9mID0gdGhp
cy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuICdu
dWxsJztcblx0aWYgKGl0ZW0uJGZhbWlseSAhPSBudWxsKSByZXR1cm4gaXRlbS4kZmFtaWx5KCk7
XG5cblx0aWYgKGl0ZW0ubm9kZU5hbWUpe1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDEpIHJl
dHVybiAnZWxlbWVudCc7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0gMykgcmV0dXJuICgvXFxT
LykudGVzdChpdGVtLm5vZGVWYWx1ZSkgPyAndGV4dG5vZGUnIDogJ3doaXRlc3BhY2UnO1xuXHR9
IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyl7XG5cdFx0aWYgKCdjYWxs
ZWUnIGluIGl0ZW0pIHJldHVybiAnYXJndW1lbnRzJztcblx0XHRpZiAoJ2l0ZW0nIGluIGl0ZW0p
IHJldHVybiAnY29sbGVjdGlvbic7XG5cdH1cblxuXHRyZXR1cm4gdHlwZW9mIGl0ZW07XG59O1xu
XG52YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFuY2VPZiA9IGZ1bmN0aW9uKGl0ZW0sIG9iamVj
dCl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBmYWxzZTtcblx0dmFyIGNvbnN0cnVjdG9y
ID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5jb25zdHJ1Y3Rvcjtcblx0d2hpbGUgKGNvbnN0
cnVjdG9yKXtcblx0XHRpZiAoY29uc3RydWN0b3IgPT09IG9iamVjdCkgcmV0dXJuIHRydWU7XG5c
dFx0Y29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5wYXJlbnQ7XG5cdH1cblx0Lyo8bHRJRTg+Ki9c
blx0aWYgKCFpdGVtLmhhc093blByb3BlcnR5KSByZXR1cm4gZmFsc2U7XG5cdC8qPC9sdElFOD4q
L1xuXHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVjdDtcbn07XG5cbnZhciBoYXNPd25Qcm9w
ZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qPGx0SUU4PiovXG52
YXIgZW51bWVyYWJsZXMgPSB0cnVlO1xuZm9yICh2YXIgaSBpbiB7dG9TdHJpbmc6IDF9KSBlbnVt
ZXJhYmxlcyA9IG51bGw7XG5pZiAoZW51bWVyYWJsZXMpIGVudW1lcmFibGVzID0gWydoYXNPd25Q
cm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFi
bGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAnY29uc3RydWN0b3InXTtcbmZ1bmN0
aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmplY3QsIGZuLCBiaW5kKXtcblx0aWYg
KGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51bWVyYWJsZXMubGVuZ3RoOyBpLS07KXtcblx0
XHR2YXIgayA9IGVudW1lcmFibGVzW2ldO1xuXHRcdC8vIHNpZ25hdHVyZSBoYXMga2V5LXZhbHVl
LCBzbyBvdmVybG9hZFNldHRlciBjYW4gZGlyZWN0bHkgcGFzcyB0aGVcblx0XHQvLyBtZXRob2Qg
ZnVuY3Rpb24sIHdpdGhvdXQgc3dhcHBpbmcgYXJndW1lbnRzLlxuXHRcdGlmIChoYXNPd25Qcm9w
ZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwoYmluZCwgaywgb2JqZWN0W2tdKTtcblx0fVxu
fVxuLyo8L2x0SUU4PiovXG5cbi8vIEZ1bmN0aW9uIG92ZXJsb2FkaW5nXG5cbnZhciBGdW5jdGlv
biA9IHRoaXMuRnVuY3Rpb247XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9hZFNldHRlciA9
IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0
aW9uKGEsIGIpe1xuXHRcdGlmIChhID09IG51bGwpIHJldHVybiB0aGlzO1xuXHRcdGlmICh1c2VQ
bHVyYWwgfHwgdHlwZW9mIGEgIT0gJ3N0cmluZycpe1xuXHRcdFx0Zm9yICh2YXIgayBpbiBhKSBz
ZWxmLmNhbGwodGhpcywgaywgYVtrXSk7XG5cdFx0XHQvKjxsdElFOD4qL1xuXHRcdFx0Zm9yRWFj
aE9iamVjdEVudW1iZXJhYmxlS2V5KGEsIHNlbGYsIHRoaXMpO1xuXHRcdFx0Lyo8L2x0SUU4Piov
XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuY2FsbCh0aGlzLCBhLCBiKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRHZXR0
ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBm
dW5jdGlvbihhKXtcblx0XHR2YXIgYXJncywgcmVzdWx0O1xuXHRcdGlmICh0eXBlb2YgYSAhPSAn
c3RyaW5nJykgYXJncyA9IGE7XG5cdFx0ZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGFy
Z3MgPSBhcmd1bWVudHM7XG5cdFx0ZWxzZSBpZiAodXNlUGx1cmFsKSBhcmdzID0gW2FdO1xuXHRc
dGlmIChhcmdzKXtcblx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkg
PCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJnc1tpXV0gPSBzZWxmLmNhbGwodGhpcywgYXJn
c1tpXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IHNlbGYuY2FsbCh0aGlzLCBhKTtc
blx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlw
ZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpc1trZXldID0gdmFsdWU7XG59
Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5pbXBsZW1lbnQgPSBmdW5j
dGlvbihrZXksIHZhbHVlKXtcblx0dGhpcy5wcm90b3R5cGVba2V5XSA9IHZhbHVlO1xufS5vdmVy
bG9hZFNldHRlcigpO1xuXG4vLyBGcm9tXG5cbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5z
bGljZTtcblxuQXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBu
dWxsKSByZXR1cm4gW107XG5cdHJldHVybiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkgJiYgdHlw
ZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVPZihpdGVtKSA9PSAnYXJyYXknKSA/IGl0ZW0g
OiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dO1xufTtcblxuRnVuY3Rpb24uY29udmVydCA9IGZ1
bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSAnZnVuY3Rpb24nKSA/IGl0
ZW0gOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBpdGVtO1xuXHR9O1xufTtcblxuXG5OdW1iZXIu
Y29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgbnVtYmVyID0gcGFyc2VGbG9hdChpdGVt
KTtcblx0cmV0dXJuIGlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiBudWxsO1xufTtcblxuU3Ry
aW5nLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIGl0ZW0gKyAnJztcbn07XG5c
blxuXG5GdW5jdGlvbi5mcm9tID0gRnVuY3Rpb24uY29udmVydDtcbk51bWJlci5mcm9tID0gTnVt
YmVyLmNvbnZlcnQ7XG5TdHJpbmcuZnJvbSA9IFN0cmluZy5jb252ZXJ0O1xuXG4vLyBoaWRlLCBw
cm90ZWN0XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0aGlkZTogZnVuY3Rpb24oKXtcblx0
XHR0aGlzLiRoaWRkZW4gPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByb3Rl
Y3Q6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kcHJvdGVjdGVkID0gdHJ1ZTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fVxuXG59KTtcblxuLy8gVHlwZVxuXG52YXIgVHlwZSA9IHRoaXMuVHlwZSA9IGZ1
bmN0aW9uKG5hbWUsIG9iamVjdCl7XG5cdGlmIChuYW1lKXtcblx0XHR2YXIgbG93ZXIgPSBuYW1l
LnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHR5cGVDaGVjayA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRc
dFx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gbG93ZXIpO1xuXHRcdH07XG5cblx0XHRUeXBlWydp
cycgKyBuYW1lXSA9IHR5cGVDaGVjaztcblx0XHRpZiAob2JqZWN0ICE9IG51bGwpe1xuXHRcdFx0
b2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0gKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHJldHVybiBs
b3dlcjtcblx0XHRcdH0pLmhpZGUoKTtcblx0XHRcdFxuXHRcdH1cblx0fVxuXG5cdGlmIChvYmpl
Y3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0b2JqZWN0LmV4dGVuZCh0aGlzKTtcblx0b2Jq
ZWN0LiRjb25zdHJ1Y3RvciA9IFR5cGU7XG5cdG9iamVjdC5wcm90b3R5cGUuJGNvbnN0cnVjdG9y
ID0gb2JqZWN0O1xuXG5cdHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIgdG9TdHJpbmcgPSBPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5UeXBlLmlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uKGl0
ZW0pe1xuXHRyZXR1cm4gKGl0ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251
bWJlcicgJiYgdG9TdHJpbmcuY2FsbChpdGVtKSAhPSAnW29iamVjdCBGdW5jdGlvbl0nICk7XG59
O1xuXG52YXIgaG9va3MgPSB7fTtcblxudmFyIGhvb2tzT2YgPSBmdW5jdGlvbihvYmplY3Qpe1xu
XHR2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90eXBlKTtcblx0cmV0dXJuIGhvb2tzW3R5
cGVdIHx8IChob29rc1t0eXBlXSA9IFtdKTtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlv
bihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47
XG5cblx0dmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8
IGhvb2tzLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgaG9vayA9IGhvb2tzW2ldO1xuXHRcdGlmICh0
eXBlT2YoaG9vaykgPT0gJ3R5cGUnKSBpbXBsZW1lbnQuY2FsbChob29rLCBuYW1lLCBtZXRob2Qp
O1xuXHRcdGVsc2UgaG9vay5jYWxsKHRoaXMsIG5hbWUsIG1ldGhvZCk7XG5cdH1cblxuXHR2YXIg
cHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTtcblx0aWYgKHByZXZpb3VzID09IG51bGwg
fHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXMucHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xu
XG5cdGlmICh0aGlzW25hbWVdID09IG51bGwgJiYgdHlwZU9mKG1ldGhvZCkgPT0gJ2Z1bmN0aW9u
JykgZXh0ZW5kLmNhbGwodGhpcywgbmFtZSwgZnVuY3Rpb24oaXRlbSl7XG5cdFx0cmV0dXJuIG1l
dGhvZC5hcHBseShpdGVtLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHR9KTtcbn07XG5c
bnZhciBleHRlbmQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1l
dGhvZC4kaGlkZGVuKSByZXR1cm47XG5cdHZhciBwcmV2aW91cyA9IHRoaXNbbmFtZV07XG5cdGlm
IChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVkKSB0aGlzW25hbWVdID0g
bWV0aG9kO1xufTtcblxuVHlwZS5pbXBsZW1lbnQoe1xuXG5cdGltcGxlbWVudDogaW1wbGVtZW50
Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0ZXh0ZW5kOiBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKSxc
blxuXHRhbGlhczogZnVuY3Rpb24obmFtZSwgZXhpc3Rpbmcpe1xuXHRcdGltcGxlbWVudC5jYWxs
KHRoaXMsIG5hbWUsIHRoaXMucHJvdG90eXBlW2V4aXN0aW5nXSk7XG5cdH0ub3ZlcmxvYWRTZXR0
ZXIoKSxcblxuXHRtaXJyb3I6IGZ1bmN0aW9uKGhvb2spe1xuXHRcdGhvb2tzT2YodGhpcykucHVz
aChob29rKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxubmV3IFR5cGUoJ1R5cGUn
LCBUeXBlKTtcblxuLy8gRGVmYXVsdCBUeXBlc1xuXG52YXIgZm9yY2UgPSBmdW5jdGlvbihuYW1l
LCBvYmplY3QsIG1ldGhvZHMpe1xuXHR2YXIgaXNUeXBlID0gKG9iamVjdCAhPSBPYmplY3QpLFxu
XHRcdHByb3RvdHlwZSA9IG9iamVjdC5wcm90b3R5cGU7XG5cblx0aWYgKGlzVHlwZSkgb2JqZWN0
ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTtcblxuXHRmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhv
ZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHR2YXIga2V5ID0gbWV0aG9kc1tpXSxcblx0XHRc
dGdlbmVyaWMgPSBvYmplY3Rba2V5XSxcblx0XHRcdHByb3RvID0gcHJvdG90eXBlW2tleV07XG5c
blx0XHRpZiAoZ2VuZXJpYykgZ2VuZXJpYy5wcm90ZWN0KCk7XG5cdFx0aWYgKGlzVHlwZSAmJiBw
cm90bykgb2JqZWN0LmltcGxlbWVudChrZXksIHByb3RvLnByb3RlY3QoKSk7XG5cdH1cblxuXHRp
ZiAoaXNUeXBlKXtcblx0XHR2YXIgbWV0aG9kc0VudW1lcmFibGUgPSBwcm90b3R5cGUucHJvcGVy
dHlJc0VudW1lcmFibGUobWV0aG9kc1swXSk7XG5cdFx0b2JqZWN0LmZvckVhY2hNZXRob2QgPSBm
dW5jdGlvbihmbil7XG5cdFx0XHRpZiAoIW1ldGhvZHNFbnVtZXJhYmxlKSBmb3IgKHZhciBpID0g
MCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdFx0Zm4uY2FsbChwcm90
b3R5cGUsIHByb3RvdHlwZVttZXRob2RzW2ldXSwgbWV0aG9kc1tpXSk7XG5cdFx0XHR9XG5cdFx0
XHRmb3IgKHZhciBrZXkgaW4gcHJvdG90eXBlKSBmbi5jYWxsKHByb3RvdHlwZSwgcHJvdG90eXBl
W2tleV0sIGtleSk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBmb3JjZTtcbn07XG5cbmZvcmNl
KCdTdHJpbmcnLCBTdHJpbmcsIFtcblx0J2NoYXJBdCcsICdjaGFyQ29kZUF0JywgJ2NvbmNhdCcs
ICdjb250YWlucycsICdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ21hdGNoJywgJ3F1b3RlJywg
J3JlcGxhY2UnLCAnc2VhcmNoJyxcblx0J3NsaWNlJywgJ3NwbGl0JywgJ3N1YnN0cicsICdzdWJz
dHJpbmcnLCAndHJpbScsICd0b0xvd2VyQ2FzZScsICd0b1VwcGVyQ2FzZSdcbl0pKCdBcnJheScs
IEFycmF5LCBbXG5cdCdwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAn
c3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnLFxuXHQnaW5kZXhP
ZicsICdsYXN0SW5kZXhPZicsICdmaWx0ZXInLCAnZm9yRWFjaCcsICdldmVyeScsICdtYXAnLCAn
c29tZScsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAnY29udGFpbnMnXG5dKSgnTnVtYmVyJywg
TnVtYmVyLCBbXG5cdCd0b0V4cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAndG9Mb2NhbGVTdHJpbmcn
LCAndG9QcmVjaXNpb24nXG5dKSgnRnVuY3Rpb24nLCBGdW5jdGlvbiwgW1xuXHQnYXBwbHknLCAn
Y2FsbCcsICdiaW5kJ1xuXSkoJ1JlZ0V4cCcsIFJlZ0V4cCwgW1xuXHQnZXhlYycsICd0ZXN0J1xu
XSkoJ09iamVjdCcsIE9iamVjdCwgW1xuXHQnY3JlYXRlJywgJ2RlZmluZVByb3BlcnR5JywgJ2Rl
ZmluZVByb3BlcnRpZXMnLCAna2V5cycsXG5cdCdnZXRQcm90b3R5cGVPZicsICdnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsXG5cdCdwcmV2ZW50RXh0ZW5z
aW9ucycsICdpc0V4dGVuc2libGUnLCAnc2VhbCcsICdpc1NlYWxlZCcsICdmcmVlemUnLCAnaXNG
cm96ZW4nXG5dKSgnRGF0ZScsIERhdGUsIFsnbm93J10pO1xuXG5PYmplY3QuZXh0ZW5kID0gZXh0
ZW5kLm92ZXJsb2FkU2V0dGVyKCk7XG5cbkRhdGUuZXh0ZW5kKCdub3cnLCBmdW5jdGlvbigpe1xu
XHRyZXR1cm4gKyhuZXcgRGF0ZSk7XG59KTtcblxubmV3IFR5cGUoJ0Jvb2xlYW4nLCBCb29sZWFu
KTtcblxuLy8gZml4ZXMgTmFOIHJldHVybmluZyBhcyBOdW1iZXJcblxuTnVtYmVyLnByb3RvdHlw
ZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXtcblx0cmV0dXJuIGlzRmluaXRlKHRoaXMpID8gJ251bWJl
cicgOiAnbnVsbCc7XG59LmhpZGUoKTtcblxuLy8gTnVtYmVyLnJhbmRvbVxuXG5OdW1iZXIuZXh0
ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1heCl7XG5cdHJldHVybiBNYXRoLmZsb29yKE1h
dGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xufSk7XG5cbi8vIGZvckVhY2gs
IGVhY2gsIGtleXNcblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1PiovXG5cdGZvckVh
Y2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVu
Z3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIGZuLmNhbGwoYmluZCwgdGhp
c1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGVhY2g6IGZ1
bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRBcnJheS5mb3JFYWNoKHRoaXMsIGZuLCBiaW5kKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0a2V5czog
ZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIga2V5cyA9IFtdO1xuXHRcdGZvciAodmFyIGsgaW4g
b2JqZWN0KXtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGtleXMu
cHVzaChrKTtcblx0XHR9XG5cdFx0Lyo8bHRJRTg+Ki9cblx0XHRmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkob2JqZWN0LCBmdW5jdGlvbihrKXtcblx0XHRcdGtleXMucHVzaChrKTtcblx0XHR9
KTtcblx0XHQvKjwvbHRJRTg+Ki9cblx0XHRyZXR1cm4ga2V5cztcblx0fSxcblxuXHRmb3JFYWNo
OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHRPYmplY3Qua2V5cyhvYmplY3QpLmZv
ckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtl
eSwgb2JqZWN0KTtcblx0XHR9KTtcblx0fVxuXG59KTtcblxuT2JqZWN0LmVhY2ggPSBPYmplY3Qu
Zm9yRWFjaDtcblxuXG4vLyBBcnJheSAmIE9iamVjdCBjbG9uaW5nLCBPYmplY3QgbWVyZ2luZyBh
bmQgYXBwZW5kaW5nXG5cbnZhciBjbG9uZU9mID0gZnVuY3Rpb24oaXRlbSl7XG5cdHN3aXRjaCAo
dHlwZU9mKGl0ZW0pKXtcblx0XHRjYXNlICdhcnJheSc6IHJldHVybiBpdGVtLmNsb25lKCk7XG5c
dFx0Y2FzZSAnb2JqZWN0JzogcmV0dXJuIE9iamVjdC5jbG9uZShpdGVtKTtcblx0XHRkZWZhdWx0
OiByZXR1cm4gaXRlbTtcblx0fVxufTtcblxuQXJyYXkuaW1wbGVtZW50KCdjbG9uZScsIGZ1bmN0
aW9uKCl7XG5cdHZhciBpID0gdGhpcy5sZW5ndGgsIGNsb25lID0gbmV3IEFycmF5KGkpO1xuXHR3
aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2YodGhpc1tpXSk7XG5cdHJldHVybiBjbG9uZTtc
bn0pO1xuXG52YXIgbWVyZ2VPbmUgPSBmdW5jdGlvbihzb3VyY2UsIGtleSwgY3VycmVudCl7XG5c
dHN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXtcblx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0aWYg
KHR5cGVPZihzb3VyY2Vba2V5XSkgPT0gJ29iamVjdCcpIE9iamVjdC5tZXJnZShzb3VyY2Vba2V5
XSwgY3VycmVudCk7XG5cdFx0XHRlbHNlIHNvdXJjZVtrZXldID0gT2JqZWN0LmNsb25lKGN1cnJl
bnQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXknOiBzb3VyY2Vba2V5XSA9IGN1cnJl
bnQuY2xvbmUoKTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogc291cmNlW2tleV0gPSBjdXJyZW50O1xu
XHR9XG5cdHJldHVybiBzb3VyY2U7XG59O1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRtZXJnZTog
ZnVuY3Rpb24oc291cmNlLCBrLCB2KXtcblx0XHRpZiAodHlwZU9mKGspID09ICdzdHJpbmcnKSBy
ZXR1cm4gbWVyZ2VPbmUoc291cmNlLCBrLCB2KTtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFy
Z3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIG9iamVjdCA9IGFyZ3VtZW50
c1tpXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1lcmdlT25lKHNvdXJjZSwga2V5
LCBvYmplY3Rba2V5XSk7XG5cdFx0fVxuXHRcdHJldHVybiBzb3VyY2U7XG5cdH0sXG5cblx0Y2xv
bmU6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGNsb25lID0ge307XG5cdFx0Zm9yICh2YXIg
a2V5IGluIG9iamVjdCkgY2xvbmVba2V5XSA9IGNsb25lT2Yob2JqZWN0W2tleV0pO1xuXHRcdHJl
dHVybiBjbG9uZTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKG9yaWdpbmFsKXtcblx0XHRm
b3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
dmFyIGV4dGVuZGVkID0gYXJndW1lbnRzW2ldIHx8IHt9O1xuXHRcdFx0Zm9yICh2YXIga2V5IGlu
IGV4dGVuZGVkKSBvcmlnaW5hbFtrZXldID0gZXh0ZW5kZWRba2V5XTtcblx0XHR9XG5cdFx0cmV0
dXJuIG9yaWdpbmFsO1xuXHR9XG5cbn0pO1xuXG4vLyBPYmplY3QtbGVzcyB0eXBlc1xuXG5bJ09i
amVjdCcsICdXaGl0ZVNwYWNlJywgJ1RleHROb2RlJywgJ0NvbGxlY3Rpb24nLCAnQXJndW1lbnRz
J10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0bmV3IFR5cGUobmFtZSk7XG59KTtcblxuLy8gVW5p
cXVlIElEXG5cbnZhciBVSUQgPSBEYXRlLm5vdygpO1xuXG5TdHJpbmcuZXh0ZW5kKCd1bmlxdWVJ
RCcsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiAoVUlEKyspLnRvU3RyaW5nKDM2KTtcbn0pO1xuXG5c
blxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBBcnJheVxuXG5kZXNjcmlwdGlvbjogQ29udGFp
bnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gsIGNvbnRhaW5zLCBhbmQgZXJhc2UuXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1R5cGVdXG5cbnByb3ZpZGVz
OiBBcnJheVxuXG4uLi5cbiovXG5cbkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xu
XHRldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChpIGluIHRoaXMpICYmICFm
bi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRc
dHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRc
dHZhciByZXN1bHRzID0gW107XG5cdFx0Zm9yICh2YXIgdmFsdWUsIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspIGlmIChpIGluIHRoaXMpe1xuXHRcdFx0dmFsdWUgPSB0
aGlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGksIHRoaXMpKSByZXN1bHRz
LnB1c2godmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRpbmRl
eE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGgg
Pj4+IDA7XG5cdFx0Zm9yICh2YXIgaSA9IChmcm9tIDwgMCkgPyBNYXRoLm1heCgwLCBsZW5ndGgg
KyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ld
ID09PSBpdGVtKSByZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdG1h
cDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4g
MCwgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSByZXN1bHRzW2ldID0gZm4uY2FsbChiaW5k
LCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5c
blx0c29tZTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChpIGluIHRoaXMpICYmIGZu
LmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0
ZW0gIT0gbnVsbDtcblx0XHR9KTtcblx0fSxcblxuXHRpbnZva2U6IGZ1bmN0aW9uKG1ldGhvZE5h
bWUpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKTtcblx0XHRyZXR1
cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbVttZXRob2ROYW1l
XS5hcHBseShpdGVtLCBhcmdzKTtcblx0XHR9KTtcblx0fSxcblxuXHRhc3NvY2lhdGU6IGZ1bmN0
aW9uKGtleXMpe1xuXHRcdHZhciBvYmogPSB7fSwgbGVuZ3RoID0gTWF0aC5taW4odGhpcy5sZW5n
dGgsIGtleXMubGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBv
Ympba2V5c1tpXV0gPSB0aGlzW2ldO1xuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0bGluazog
ZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4g
b2JqZWN0KXtcblx0XHRcdFx0aWYgKG9iamVjdFtrZXldKHRoaXNbaV0pKXtcblx0XHRcdFx0XHRy
ZXN1bHRba2V5XSA9IHRoaXNbaV07XG5cdFx0XHRcdFx0ZGVsZXRlIG9iamVjdFtrZXldO1xuXHRc
dFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1
bHQ7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHJldHVy
biB0aGlzLmluZGV4T2YoaXRlbSwgZnJvbSkgIT0gLTE7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5j
dGlvbihhcnJheSl7XG5cdFx0dGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFycmF5KTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhp
cy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIDogbnVsbDtcblx0fSxcblxuXHRnZXRS
YW5kb206IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0aGlzW051bWJl
ci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0gOiBudWxsO1xuXHR9LFxuXG5cdGluY2x1ZGU6
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICghdGhpcy5jb250YWlucyhpdGVtKSkgdGhpcy5wdXNo
KGl0ZW0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbWJpbmU6IGZ1bmN0aW9uKGFy
cmF5KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykg
dGhpcy5pbmNsdWRlKGFycmF5W2ldKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlcmFz
ZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0Zm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS07KXtc
blx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSB0aGlzLnNwbGljZShpLCAxKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5s
ZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZsYXR0ZW46IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVPZih0aGlzW2ldKTtcblx0
XHRcdGlmICh0eXBlID09ICdudWxsJykgY29udGludWU7XG5cdFx0XHRhcnJheSA9IGFycmF5LmNv
bmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ2NvbGxlY3Rpb24nIHx8IHR5cGUgPT0g
J2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlzW2ldLCBBcnJheSkpID8gQXJyYXkuZmxhdHRl
bih0aGlzW2ldKSA6IHRoaXNbaV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXk7XG5cdH0sXG5c
blx0cGljazogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3Ro
OyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldICE9IG51bGwpIHJldHVybiB0aGlzW2ld
O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24o
YXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCAhPSAzKSByZXR1cm4gbnVsbDtcblx0XHR2YXIg
cmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA9
PSAxKSB2YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTYpO1xu
XHRcdH0pO1xuXHRcdHJldHVybiAoYXJyYXkpID8gcmdiIDogJ3JnYignICsgcmdiICsgJyknO1xu
XHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3Ro
IDwgMykgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRoaXMubGVuZ3RoID09IDQgJiYgdGhpc1szXSA9
PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3BhcmVudCc7XG5cdFx0dmFyIGhleCA9IFtdO1xu
XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKXtcblx0XHRcdHZhciBiaXQgPSAodGhpc1tp
XSAtIDApLnRvU3RyaW5nKDE2KTtcblx0XHRcdGhleC5wdXNoKChiaXQubGVuZ3RoID09IDEpID8g
JzAnICsgYml0IDogYml0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhcnJheSkgPyBoZXggOiAnIycg
KyBoZXguam9pbignJyk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ1bmN0
aW9uXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBGdW5jdGlvbiBQcm90b3R5cGVzIGxpa2UgY3Jl
YXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogRnVuY3Rpb25cblxuLi4uXG4qL1xuXG5G
dW5jdGlvbi5leHRlbmQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIg
aSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHRyeSB7XG5c
dFx0XHRcdHJldHVybiBhcmd1bWVudHNbaV0oKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblx0XHR9
XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxufSk7XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5c
blx0YXR0ZW1wdDogZnVuY3Rpb24oYXJncywgYmluZCl7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVy
biB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZlcnQoYXJncykpO1xuXHRcdH0gY2F0Y2ggKGUp
e31cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdC8qPCFFUzUtYmluZD4qL1xuXHRiaW5k
OiBmdW5jdGlvbih0aGF0KXtcblx0XHR2YXIgc2VsZiA9IHRoaXMsXG5cdFx0XHRhcmdzID0gYXJn
dW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpIDogbnVsbCxcblx0
XHRcdEYgPSBmdW5jdGlvbigpe307XG5cblx0XHR2YXIgYm91bmQgPSBmdW5jdGlvbigpe1xuXHRc
dFx0dmFyIGNvbnRleHQgPSB0aGF0LCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0
aWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCl7XG5cdFx0XHRcdEYucHJvdG90eXBlID0gc2VsZi5w
cm90b3R5cGU7XG5cdFx0XHRcdGNvbnRleHQgPSBuZXcgRjtcblx0XHRcdH1cblx0XHRcdHZhciBy
ZXN1bHQgPSAoIWFyZ3MgJiYgIWxlbmd0aClcblx0XHRcdFx0PyBzZWxmLmNhbGwoY29udGV4dClc
blx0XHRcdFx0OiBzZWxmLmFwcGx5KGNvbnRleHQsIGFyZ3MgJiYgbGVuZ3RoID8gYXJncy5jb25j
YXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0XHRy
ZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0IDogY29udGV4dDtcblx0XHR9O1xuXHRcdHJl
dHVybiBib3VuZDtcblx0fSxcblx0Lyo8LyFFUzUtYmluZD4qL1xuXG5cdHBhc3M6IGZ1bmN0aW9u
KGFyZ3MsIGJpbmQpe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRpZiAoYXJncyAhPSBudWxs
KSBhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRyZXR1cm4gZnVuY3Rpb24oKXtcblx0
XHRcdHJldHVybiBzZWxmLmFwcGx5KGJpbmQsIGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0XHR9O1xu
XHR9LFxuXG5cdGRlbGF5OiBmdW5jdGlvbihkZWxheSwgYmluZCwgYXJncyl7XG5cdFx0cmV0dXJu
IHNldFRpbWVvdXQodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwg
ZGVsYXkpO1xuXHR9LFxuXG5cdHBlcmlvZGljYWw6IGZ1bmN0aW9uKHBlcmlvZGljYWwsIGJpbmQs
IGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRJbnRlcnZhbCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/
IFtdIDogYXJncyksIGJpbmQpLCBwZXJpb2RpY2FsKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4t
LS1cblxubmFtZTogTnVtYmVyXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBOdW1iZXIgUHJvdG90
eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMsIGFuZCBjZWlsLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IE51bWJlclxuXG4u
Li5cbiovXG5cbk51bWJlci5pbXBsZW1lbnQoe1xuXG5cdGxpbWl0OiBmdW5jdGlvbihtaW4sIG1h
eCl7XG5cdFx0cmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB0aGlzKSk7XG5cdH0s
XG5cblx0cm91bmQ6IGZ1bmN0aW9uKHByZWNpc2lvbil7XG5cdFx0cHJlY2lzaW9uID0gTWF0aC5w
b3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVkKHByZWNpc2lvbiA8IDAgPyAtcHJlY2lzaW9u
IDogMCk7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQodGhpcyAqIHByZWNpc2lvbikgLyBwcmVjaXNp
b247XG5cdH0sXG5cblx0dGltZXM6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChiaW5kLCBpLCB0aGlzKTtcblx0fSxcblxuXHR0
b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxu
XG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFz
ZSB8fCAxMCk7XG5cdH1cblxufSk7XG5cbk51bWJlci5hbGlhcygnZWFjaCcsICd0aW1lcycpO1xu
XG4oZnVuY3Rpb24obWF0aCl7XG5cbnZhciBtZXRob2RzID0ge307XG5cbm1hdGguZWFjaChmdW5j
dGlvbihuYW1lKXtcblx0aWYgKCFOdW1iZXJbbmFtZV0pIG1ldGhvZHNbbmFtZV0gPSBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiBNYXRoW25hbWVdLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoQXJy
YXkuY29udmVydChhcmd1bWVudHMpKSk7XG5cdH07XG59KTtcblxuTnVtYmVyLmltcGxlbWVudCht
ZXRob2RzKTtcblxufSkoWydhYnMnLCAnYWNvcycsICdhc2luJywgJ2F0YW4nLCAnYXRhbjInLCAn
Y2VpbCcsICdjb3MnLCAnZXhwJywgJ2Zsb29yJywgJ2xvZycsICdtYXgnLCAnbWluJywgJ3Bvdycs
ICdzaW4nLCAnc3FydCcsICd0YW4nXSk7XG5cbi8qXG4tLS1cblxubmFtZTogU3RyaW5nXG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJvdG90eXBlcyBsaWtlIGNhbWVsQ2FzZSwgY2Fw
aXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IFtUeXBlLCBBcnJheV1cblxucHJvdmlkZXM6IFN0cmluZ1xuXG4uLi5cbiov
XG5cblN0cmluZy5pbXBsZW1lbnQoe1xuXG5cdC8vPCFFUzY+XG5cdGNvbnRhaW5zOiBmdW5jdGlv
bihzdHJpbmcsIGluZGV4KXtcblx0XHRyZXR1cm4gKGluZGV4ID8gU3RyaW5nKHRoaXMpLnNsaWNl
KGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhPZihzdHJpbmcpID4gLTE7XG5cdH0sXG5cdC8v
PC8hRVM2PlxuXG5cdHRlc3Q6IGZ1bmN0aW9uKHJlZ2V4LCBwYXJhbXMpe1xuXHRcdHJldHVybiAo
KHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8gcmVnZXggOiBuZXcgUmVnRXhwKCcnICsgcmVn
ZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7XG5cdH0sXG5cblx0dHJpbTogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblx0fSxc
blxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2Uo
L1xccysvZywgJyAnKS50cmltKCk7XG5cdH0sXG5cblx0Y2FtZWxDYXNlOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvLVxcRC9nLCBmdW5jdGlvbihtYXRjaCl7
XG5cdFx0XHRyZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0aHlwaGVuYXRlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcyku
cmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuICgnLScgKyBt
YXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0Y2FwaXRh
bGl6ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xcYlth
LXpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC50b1VwcGVyQ2FzZSgp
O1xuXHRcdH0pO1xuXHR9LFxuXG5cdGVzY2FwZVJlZ0V4cDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdKS9nLCAn
XFxcXCQxJyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBw
YXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5j
dGlvbihhcnJheSl7XG5cdFx0dmFyIGhleCA9IFN0cmluZyh0aGlzKS5tYXRjaCgvXiM/KFxcd3sx
LDJ9KShcXHd7MSwyfSkoXFx3ezEsMn0pJC8pO1xuXHRcdHJldHVybiAoaGV4KSA/IGhleC5zbGlj
ZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlv
bihhcnJheSl7XG5cdFx0dmFyIHJnYiA9IFN0cmluZyh0aGlzKS5tYXRjaCgvXFxkezEsM30vZyk7
XG5cdFx0cmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSGV4KGFycmF5KSA6IG51bGw7XG5cdH0sXG5c
blx0c3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdleHApe1xuXHRcdHJldHVybiBTdHJp
bmcodGhpcykucmVwbGFjZShyZWdleHAgfHwgKC9cXFxcP1xceyhbXnt9XSspXFx9L2cpLCBmdW5j
dGlvbihtYXRjaCwgbmFtZSl7XG5cdFx0XHRpZiAobWF0Y2guY2hhckF0KDApID09ICdcXFxcJykg
cmV0dXJuIG1hdGNoLnNsaWNlKDEpO1xuXHRcdFx0cmV0dXJuIChvYmplY3RbbmFtZV0gIT0gbnVs
bCkgPyBvYmplY3RbbmFtZV0gOiAnJztcblx0XHR9KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4t
LS1cblxubmFtZTogQnJvd3NlclxuXG5kZXNjcmlwdGlvbjogVGhlIEJyb3dzZXIgT2JqZWN0LiBD
b250YWlucyBCcm93c2VyIGluaXRpYWxpemF0aW9uLCBXaW5kb3cgYW5kIERvY3VtZW50LCBhbmQg
dGhlIEJyb3dzZXIgSGFzaC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBbQXJyYXksIEZ1bmN0aW9uLCBOdW1iZXIsIFN0cmluZ11cblxucHJvdmlkZXM6IFtCcm93
c2VyLCBXaW5kb3csIERvY3VtZW50XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
ZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xudmFyIHdpbmRvdyA9IGRvY3VtZW50LndpbmRvdyA9
IHRoaXM7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKHVhLCBwbGF0Zm9ybSl7XG5cdHVhID0gdWEu
dG9Mb3dlckNhc2UoKTtcblx0cGxhdGZvcm0gPSAocGxhdGZvcm0gPyBwbGF0Zm9ybS50b0xvd2Vy
Q2FzZSgpIDogJycpO1xuXG5cdC8vIGNocm9tZSBpcyBpbmNsdWRlZCBpbiB0aGUgZWRnZSBVQSwg
c28gbmVlZCB0byBjaGVjayBmb3IgZWRnZSBmaXJzdCxcblx0Ly8gYmVmb3JlIGNoZWNraW5nIGlm
IGl0J3MgY2hyb21lLlxuXHR2YXIgVUEgPSB1YS5tYXRjaCgvKGVkZ2UpW1xcc1xcLzpdKFtcXHdc
XGRcXC5dKykvKTtcblx0aWYgKCFVQSl7XG5cdFx0VUEgPSB1YS5tYXRjaCgvKG9wZXJhfGllfGZp
cmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVyc2lvbilbXFxzXFwvOl0oW1xcd1xcZFxcLl0r
KT8uKj8oc2FmYXJpfCg/OnJ2W1xcc1xcLzpdfHZlcnNpb25bXFxzXFwvOl0pKFtcXHdcXGRcXC5d
Kyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXTtcblx0fVxuXG5cdGlmIChVQVsxXSA9PSAn
dHJpZGVudCcpe1xuXHRcdFVBWzFdID0gJ2llJztcblx0XHRpZiAoVUFbNF0pIFVBWzJdID0gVUFb
NF07XG5cdH0gZWxzZSBpZiAoVUFbMV0gPT0gJ2NyaW9zJyl7XG5cdFx0VUFbMV0gPSAnY2hyb21l
Jztcblx0fVxuXG5cdHBsYXRmb3JtID0gdWEubWF0Y2goL2lwKD86YWR8b2R8aG9uZSkvKSA/ICdp
b3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRyb2lkKS8pIHx8IHVhLm1hdGNoKC9tYWN8d2lu
fGxpbnV4LykgfHwgWydvdGhlciddKVswXTtcblx0aWYgKHBsYXRmb3JtID09ICd3aW4nKSBwbGF0
Zm9ybSA9ICd3aW5kb3dzJztcblxuXHRyZXR1cm4ge1xuXHRcdGV4dGVuZDogRnVuY3Rpb24ucHJv
dG90eXBlLmV4dGVuZCxcblx0XHRuYW1lOiAoVUFbMV0gPT0gJ3ZlcnNpb24nKSA/IFVBWzNdIDog
VUFbMV0sXG5cdFx0dmVyc2lvbjogcGFyc2VGbG9hdCgoVUFbMV0gPT0gJ29wZXJhJyAmJiBVQVs0
XSkgPyBVQVs0XSA6IFVBWzJdKSxcblx0XHRwbGF0Zm9ybTogcGxhdGZvcm1cblx0fTtcbn07XG5c
bnZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0gcGFyc2UobmF2aWdhdG9yLnVzZXJBZ2VudCwg
bmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuaWYgKEJyb3dzZXIubmFtZSA9PSAnaWUnICYmIGRvY3Vt
ZW50LmRvY3VtZW50TW9kZSl7XG5cdEJyb3dzZXIudmVyc2lvbiA9IGRvY3VtZW50LmRvY3VtZW50
TW9kZTtcbn1cblxuQnJvd3Nlci5leHRlbmQoe1xuXHRGZWF0dXJlczoge1xuXHRcdHhwYXRoOiAh
IShkb2N1bWVudC5ldmFsdWF0ZSksXG5cdFx0YWlyOiAhISh3aW5kb3cucnVudGltZSksXG5cdFx0
cXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpLFxuXHRcdGpzb246ICEhKHdpbmRvdy5K
U09OKVxuXHR9LFxuXHRwYXJzZVVBOiBwYXJzZVxufSk7XG5cblxuXG4vLyBSZXF1ZXN0XG5cbkJy
b3dzZXIuUmVxdWVzdCA9IChmdW5jdGlvbigpe1xuXG5cdHZhciBYTUxIVFRQID0gZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdH07XG5cblx0dmFyIE1TWE1M
MiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNU1hNTDIuWE1M
SFRUUCcpO1xuXHR9O1xuXG5cdHZhciBNU1hNTCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5l
dyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHJldHVybiBG
dW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0WE1MSFRUUCgpO1xuXHRcdHJldHVybiBY
TUxIVFRQO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MMigpO1xuXHRcdHJldHVybiBNU1hN
TDI7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwoKTtcblx0XHRyZXR1cm4gTVNYTUw7XG5c
dH0pO1xuXG59KSgpO1xuXG5Ccm93c2VyLkZlYXR1cmVzLnhociA9ICEhKEJyb3dzZXIuUmVxdWVz
dCk7XG5cblxuXG4vLyBTdHJpbmcgc2NyaXB0c1xuXG5Ccm93c2VyLmV4ZWMgPSBmdW5jdGlvbih0
ZXh0KXtcblx0aWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcblx0aWYgKHdpbmRvdy5leGVjU2NyaXB0
KXtcblx0XHR3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc2Ny
aXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnNldEF0
dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRzY3JpcHQudGV4dCA9IHRl
eHQ7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXHRcdGRvY3VtZW50
LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0fVxuXHRyZXR1cm4gdGV4dDtcbn07XG5cblN0
cmluZy5pbXBsZW1lbnQoJ3N0cmlwU2NyaXB0cycsIGZ1bmN0aW9uKGV4ZWMpe1xuXHR2YXIgc2Ny
aXB0cyA9ICcnO1xuXHR2YXIgdGV4dCA9IHRoaXMucmVwbGFjZSgvPHNjcmlwdFtePl0qPihbXFxz
XFxTXSo/KTxcXC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUpe1xuXHRcdHNjcmlwdHMg
Kz0gY29kZSArICdcXG4nO1xuXHRcdHJldHVybiAnJztcblx0fSk7XG5cdGlmIChleGVjID09PSB0
cnVlKSBCcm93c2VyLmV4ZWMoc2NyaXB0cyk7XG5cdGVsc2UgaWYgKHR5cGVPZihleGVjKSA9PSAn
ZnVuY3Rpb24nKSBleGVjKHNjcmlwdHMsIHRleHQpO1xuXHRyZXR1cm4gdGV4dDtcbn0pO1xuXG4v
LyBXaW5kb3csIERvY3VtZW50XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0RG9jdW1lbnQ6IHRoaXMu
RG9jdW1lbnQsXG5cdFdpbmRvdzogdGhpcy5XaW5kb3csXG5cdEVsZW1lbnQ6IHRoaXMuRWxlbWVu
dCxcblx0RXZlbnQ6IHRoaXMuRXZlbnRcbn0pO1xuXG50aGlzLldpbmRvdyA9IHRoaXMuJGNvbnN0
cnVjdG9yID0gbmV3IFR5cGUoJ1dpbmRvdycsIGZ1bmN0aW9uKCl7fSk7XG5cbnRoaXMuJGZhbWls
eSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ3dpbmRvdycpLmhpZGUoKTtcblxuV2luZG93Lm1pcnJvcihm
dW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHR3aW5kb3dbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxu
dGhpcy5Eb2N1bWVudCA9IGRvY3VtZW50LiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdEb2N1bWVu
dCcsIGZ1bmN0aW9uKCl7fSk7XG5cbmRvY3VtZW50LiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0
KCdkb2N1bWVudCcpLmhpZGUoKTtcblxuRG9jdW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1l
dGhvZCl7XG5cdGRvY3VtZW50W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbmRvY3VtZW50Lmh0bWwg
PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5pZiAoIWRvY3VtZW50LmhlYWQpIGRvY3VtZW50
LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuXG5pZiAo
ZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7XG5cdGRvY3VtZW50LmV4ZWNDb21tYW5kKCdCYWNr
Z3JvdW5kSW1hZ2VDYWNoZScsIGZhbHNlLCB0cnVlKTtcbn0gY2F0Y2ggKGUpe31cblxuLyo8bHRJ
RTk+Ki9cbmlmICh0aGlzLmF0dGFjaEV2ZW50ICYmICF0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xu
XHR2YXIgdW5sb2FkRXZlbnQgPSBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZGV0YWNoRXZlbnQoJ29u
dW5sb2FkJywgdW5sb2FkRXZlbnQpO1xuXHRcdGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5odG1s
ID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDtcblx0XHR3aW5kb3cgPSB0aGlzLldpbmRvdyA9IGRv
Y3VtZW50ID0gbnVsbDtcblx0fTtcblx0dGhpcy5hdHRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxv
YWRFdmVudCk7XG59XG5cbi8vIElFIGZhaWxzIG9uIGNvbGxlY3Rpb25zIGFuZCA8c2VsZWN0Pi5v
cHRpb25zIChyZWZlcnMgdG8gPHNlbGVjdD4pXG52YXIgYXJyYXlGcm9tID0gQXJyYXkuY29udmVy
dDtcbnRyeSB7XG5cdGFycmF5RnJvbShkb2N1bWVudC5odG1sLmNoaWxkTm9kZXMpO1xufSBjYXRj
aCAoZSl7XG5cdEFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRpZiAodHlwZW9m
IGl0ZW0gIT0gJ3N0cmluZycgJiYgVHlwZS5pc0VudW1lcmFibGUoaXRlbSkgJiYgdHlwZU9mKGl0
ZW0pICE9ICdhcnJheScpe1xuXHRcdFx0dmFyIGkgPSBpdGVtLmxlbmd0aCwgYXJyYXkgPSBuZXcg
QXJyYXkoaSk7XG5cdFx0XHR3aGlsZSAoaS0tKSBhcnJheVtpXSA9IGl0ZW1baV07XG5cdFx0XHRy
ZXR1cm4gYXJyYXk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheUZyb20oaXRlbSk7XG5cdH07XG5c
blx0dmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSxcblx0XHRzbGljZSA9IHByb3RvdHlw
ZS5zbGljZTtcblx0Wydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAn
c3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXS5lYWNoKGZ1bmN0
aW9uKG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSBwcm90b3R5cGVbbmFtZV07XG5cdFx0QXJyYXlb
bmFtZV0gPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBtZXRob2QuYXBwbHkoQXJyYXku
Y29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0XHR9O1xuXHR9KTtc
bn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzc1xu
XG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9uIGZvciBlYXNpbHkgY3Jl
YXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGluZyByZXVzYWJsZSBDbGFzc2VzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtBcnJheSwgU3RyaW5nLCBG
dW5jdGlvbiwgTnVtYmVyXVxuXG5wcm92aWRlczogQ2xhc3NcblxuLi4uXG4qL1xuXG4oZnVuY3Rp
b24oKXtcblxudmFyIENsYXNzID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBlKCdDbGFzcycsIGZ1bmN0
aW9uKHBhcmFtcyl7XG5cdGlmIChpbnN0YW5jZU9mKHBhcmFtcywgRnVuY3Rpb24pKSBwYXJhbXMg
PSB7aW5pdGlhbGl6ZTogcGFyYW1zfTtcblxuXHR2YXIgbmV3Q2xhc3MgPSBmdW5jdGlvbigpe1xu
XHRcdHJlc2V0KHRoaXMpO1xuXHRcdGlmIChuZXdDbGFzcy4kcHJvdG90eXBpbmcpIHJldHVybiB0
aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IG51bGw7XG5cdFx0dGhpcy4kZmFtaWx5ID0gbnVsbDtc
blx0XHR2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXplKSA/IHRoaXMuaW5pdGlhbGl6ZS5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcztcblx0XHR0aGlzLiRjYWxsZXIgPSB0aGlzLmNhbGxl
ciA9IG51bGw7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LmV4dGVuZCh0aGlzKS5pbXBsZW1lbnQo
cGFyYW1zKTtcblxuXHRuZXdDbGFzcy4kY29uc3RydWN0b3IgPSBDbGFzcztcblx0bmV3Q2xhc3Mu
cHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG5ld0NsYXNzO1xuXHRuZXdDbGFzcy5wcm90b3R5cGUu
cGFyZW50ID0gcGFyZW50O1xuXG5cdHJldHVybiBuZXdDbGFzcztcbn0pO1xuXG52YXIgcGFyZW50
ID0gZnVuY3Rpb24oKXtcblx0aWYgKCF0aGlzLiRjYWxsZXIpIHRocm93IG5ldyBFcnJvcignVGhl
IG1ldGhvZCBcInBhcmVudFwiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdHZhciBuYW1lID0gdGhp
cy4kY2FsbGVyLiRuYW1lLFxuXHRcdHBhcmVudCA9IHRoaXMuJGNhbGxlci4kb3duZXIucGFyZW50
LFxuXHRcdHByZXZpb3VzID0gKHBhcmVudCkgPyBwYXJlbnQucHJvdG90eXBlW25hbWVdIDogbnVs
bDtcblx0aWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIG5h
bWUgKyAnXCIgaGFzIG5vIHBhcmVudC4nKTtcblx0cmV0dXJuIHByZXZpb3VzLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7XG59O1xuXG52YXIgcmVzZXQgPSBmdW5jdGlvbihvYmplY3Qpe1xuXHRmb3Ig
KHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHR2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRz
d2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdFx0dmFy
IEYgPSBmdW5jdGlvbigpe307XG5cdFx0XHRcdEYucHJvdG90eXBlID0gdmFsdWU7XG5cdFx0XHRc
dG9iamVjdFtrZXldID0gcmVzZXQobmV3IEYpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2Ug
J2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5jbG9uZSgpOyBicmVhaztcblx0XHR9XG5cdH1c
blx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB3cmFwID0gZnVuY3Rpb24oc2VsZiwga2V5LCBt
ZXRob2Qpe1xuXHRpZiAobWV0aG9kLiRvcmlnaW4pIG1ldGhvZCA9IG1ldGhvZC4kb3JpZ2luO1xu
XHR2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKG1ldGhvZC4kcHJvdGVjdGVkICYm
IHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsg
a2V5ICsgJ1wiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdFx0dmFyIGNhbGxlciA9IHRoaXMuY2Fs
bGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyO1xuXHRcdHRoaXMuY2FsbGVyID0gY3VycmVudDsg
dGhpcy4kY2FsbGVyID0gd3JhcHBlcjtcblx0XHR2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7XG5cdFx0dGhpcy4kY2FsbGVyID0gY3VycmVudDsgdGhpcy5jYWxsZXIg
PSBjYWxsZXI7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fS5leHRlbmQoeyRvd25lcjogc2VsZiwg
JG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7XG5cdHJldHVybiB3cmFwcGVyO1xufTtcblxu
dmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIHJldGFpbil7XG5cdGlmIChDbGFz
cy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcblx0XHR2YWx1ZSA9IENsYXNzLk11dGF0
b3JzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVy
biB0aGlzO1xuXHR9XG5cblx0aWYgKHR5cGVPZih2YWx1ZSkgPT0gJ2Z1bmN0aW9uJyl7XG5cdFx0
aWYgKHZhbHVlLiRoaWRkZW4pIHJldHVybiB0aGlzO1xuXHRcdHRoaXMucHJvdG90eXBlW2tleV0g
PSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlzLCBrZXksIHZhbHVlKTtcblx0fSBlbHNlIHtc
blx0XHRPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5cGUsIGtleSwgdmFsdWUpO1xuXHR9XG5cblx0
cmV0dXJuIHRoaXM7XG59O1xuXG52YXIgZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbihrbGFzcyl7XG5c
dGtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7XG5cdHZhciBwcm90byA9IG5ldyBrbGFzcztcblx0
ZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZztcblx0cmV0dXJuIHByb3RvO1xufTtcblxuQ2xhc3Mu
aW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSk7XG5cbkNs
YXNzLk11dGF0b3JzID0ge1xuXG5cdEV4dGVuZHM6IGZ1bmN0aW9uKHBhcmVudCl7XG5cdFx0dGhp
cy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5wcm90b3R5cGUgPSBnZXRJbnN0YW5jZShwYXJl
bnQpO1xuXHR9LFxuXG5cdEltcGxlbWVudHM6IGZ1bmN0aW9uKGl0ZW1zKXtcblx0XHRBcnJheS5j
b252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0dmFyIGluc3RhbmNlID0g
bmV3IGl0ZW07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gaW5zdGFuY2UpIGltcGxlbWVudC5jYWxs
KHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1ZSk7XG5cdFx0fSwgdGhpcyk7XG5cdH1cbn07
XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuRXh0cmFzXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5
b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4ZWN1dGlvbiBvZiBtYW55IGNvbW1vbiB0YXNr
cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5w
cm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4sIEV2ZW50cywgT3B0aW9uc11cblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudGhpcy5DaGFpbiA9IG5ldyBDbGFzcyh7XG5cblx0JGNoYWlu
OiBbXSxcblxuXHRjaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFpbi5hcHBlbmQoQXJy
YXkuZmxhdHRlbihhcmd1bWVudHMpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYWxs
Q2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLiRjaGFpbi5sZW5ndGgpID8gdGhp
cy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogZmFsc2U7XG5cdH0sXG5c
blx0Y2xlYXJDaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFpbi5lbXB0eSgpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgcmVtb3ZlT24gPSBmdW5jdGlvbihzdHJp
bmcpe1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15vbihbQS1aXSkvLCBmdW5jdGlvbihmdWxs
LCBmaXJzdCl7XG5cdFx0cmV0dXJuIGZpcnN0LnRvTG93ZXJDYXNlKCk7XG5cdH0pO1xufTtcblxu
dGhpcy5FdmVudHMgPSBuZXcgQ2xhc3Moe1xuXG5cdCRldmVudHM6IHt9LFxuXG5cdGFkZEV2ZW50
OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBl
KTtcblxuXHRcdFxuXG5cdFx0dGhpcy4kZXZlbnRzW3R5cGVdID0gKHRoaXMuJGV2ZW50c1t0eXBl
XSB8fCBbXSkuaW5jbHVkZShmbik7XG5cdFx0aWYgKGludGVybmFsKSBmbi5pbnRlcm5hbCA9IHRy
dWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVu
dHMpe1xuXHRcdGZvciAodmFyIHR5cGUgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KHR5cGUsIGV2
ZW50c1t0eXBlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5j
dGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRc
dHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0aWYgKCFldmVudHMpIHJldHVy
biB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdGV2ZW50cy5lYWNo
KGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFy
Z3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4p
e1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZl
bnRzW3R5cGVdO1xuXHRcdGlmIChldmVudHMgJiYgIWZuLmludGVybmFsKXtcblx0XHRcdHZhciBp
bmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTtcblx0XHRcdGlmIChpbmRleCAhPSAtMSkgZGVsZXRl
IGV2ZW50c1tpbmRleF07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92
ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRpZiAodHlwZU9m
KGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50cykgdGhpcy5y
ZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0
fVxuXHRcdGlmIChldmVudHMpIGV2ZW50cyA9IHJlbW92ZU9uKGV2ZW50cyk7XG5cdFx0Zm9yICh0
eXBlIGluIHRoaXMuJGV2ZW50cyl7XG5cdFx0XHRpZiAoZXZlbnRzICYmIGV2ZW50cyAhPSB0eXBl
KSBjb250aW51ZTtcblx0XHRcdHZhciBmbnMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0XHRm
b3IgKHZhciBpID0gZm5zLmxlbmd0aDsgaS0tOykgaWYgKGkgaW4gZm5zKXtcblx0XHRcdFx0dGhp
cy5yZW1vdmVFdmVudCh0eXBlLCBmbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4g
dGhpcztcblx0fVxuXG59KTtcblxudGhpcy5PcHRpb25zID0gbmV3IENsYXNzKHtcblxuXHRzZXRP
cHRpb25zOiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gT2Jq
ZWN0Lm1lcmdlLmFwcGx5KG51bGwsIFt7fSwgdGhpcy5vcHRpb25zXS5hcHBlbmQoYXJndW1lbnRz
KSk7XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnQpIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKXtc
blx0XHRcdGlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAhPSAnZnVuY3Rpb24nIHx8ICEoL15v
bltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTtcblx0XHRcdHRoaXMuYWRkRXZlbnQob3B0
aW9uLCBvcHRpb25zW29wdGlvbl0pO1xuXHRcdFx0ZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTtcblx0
XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxu
bmFtZTogQ2xhc3MuVGhlbmFibGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEgVXRpbGl0eSBD
bGFzcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3duIENsYXNzZXMgdG8gbWFr
ZSB0aGVtIFwidGhlbmFibGVcIi5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLlRoZW5hYmxlXVxuXG4uLi5cbiovXG5c
bihmdW5jdGlvbigpe1xuXG52YXIgU1RBVEVfUEVORElORyA9IDAsXG5cdFNUQVRFX0ZVTEZJTExF
RCA9IDEsXG5cdFNUQVRFX1JFSkVDVEVEID0gMjtcblxudmFyIFRoZW5hYmxlID0gQ2xhc3MuVGhl
bmFibGUgPSBuZXcgQ2xhc3Moe1xuXG5cdCR0aGVuYWJsZVN0YXRlOiBTVEFURV9QRU5ESU5HLFxu
XHQkdGhlbmFibGVSZXN1bHQ6IG51bGwsXG5cdCR0aGVuYWJsZVJlYWN0aW9uczogW10sXG5cblx0
cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHJlc29sdmUodGhpcywgdmFsdWUpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRy
ZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRUaGVu
YWJsZVN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHN3aXRjaCAodGhpcy4kdGhlbmFibGVTdGF0ZSl7
XG5cdFx0XHRjYXNlIFNUQVRFX1BFTkRJTkc6XG5cdFx0XHRcdHJldHVybiAncGVuZGluZyc7XG5c
blx0XHRcdGNhc2UgU1RBVEVfRlVMRklMTEVEOlxuXHRcdFx0XHRyZXR1cm4gJ2Z1bGZpbGxlZCc7
XG5cblx0XHRcdGNhc2UgU1RBVEVfUkVKRUNURUQ6XG5cdFx0XHRcdHJldHVybiAncmVqZWN0ZWQn
O1xuXHRcdH1cblx0fSxcblxuXHRyZXNldFRoZW5hYmxlOiBmdW5jdGlvbihyZWFzb24pe1xuXHRc
dHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXtcblx0
XHRpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAnZnVuY3Rpb24nKSBvbkZ1bGZpbGxlZCA9ICdJ
ZGVudGl0eSc7XG5cdFx0aWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAnZnVuY3Rpb24nKSBvblJl
amVjdGVkID0gJ1Rocm93ZXInO1xuXG5cdFx0dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7
XG5cblx0XHR0aGlzLiR0aGVuYWJsZVJlYWN0aW9ucy5wdXNoKHtcblx0XHRcdHRoZW5hYmxlOiB0
aGVuYWJsZSxcblx0XHRcdGZ1bGZpbGxIYW5kbGVyOiBvbkZ1bGZpbGxlZCxcblx0XHRcdHJlamVj
dEhhbmRsZXI6IG9uUmVqZWN0ZWRcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLiR0aGVuYWJsZVN0
YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHRcdHJlYWN0KHRoaXMpO1xuXHRcdH1cblxuXHRc
dHJldHVybiB0aGVuYWJsZTtcblx0fSxcblxuXHQnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVk
KXtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xuXHR9XG5cbn0pO1xu
XG5UaGVuYWJsZS5leHRlbmQoe1xuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFy
IHRoZW5hYmxlO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRoZW5hYmxlKXtcblx0XHRcdHRo
ZW5hYmxlID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoZW5hYmxlID0gbmV3IFRoZW5h
YmxlKCk7XG5cdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGVuYWJsZTtcblx0fSxcblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHZhciB0
aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtc
blx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH1cbn0pO1xuXG4vLyBQcml2YXRlIGZ1bmN0aW9uc1xu
XG5mdW5jdGlvbiByZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhl
bmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0aWYgKHRoZW5hYmxlID09PSB2YWx1
ZSl7XG5cdFx0XHRyZWplY3QodGhlbmFibGUsIG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHJlc29s
dmUgYSB0aGVuYWJsZSB3aXRoIGl0c2VsZi4nKSk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiAo
dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicp
KXtcblx0XHRcdHZhciB0aGVuO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhlbiA9IHZhbHVlLnRo
ZW47XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QodGhlbmFibGUs
IGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlv
bicpe1xuXHRcdFx0XHR2YXIgcmVzb2x2ZWQgPSBmYWxzZTtcblx0XHRcdFx0ZGVmZXIoZnVuY3Rp
b24oKXtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRc
dFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24obmV4dFZhbHVlKXtcblx0XHRcdFx0
XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1
ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodGhlbmFibGUsIG5leHRWYWx1ZSk7XG5cdFx0
XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihy
ZWFzb24pe1xuXHRcdFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRc
dFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBy
ZWFzb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0
KTtcblx0XHRcdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRcdFx0aWYgKCFyZXNv
bHZlZCl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0cmVq
ZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0
XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1
ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVl
KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpe1xu
XHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRo
ZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVlO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0
YXRlID0gU1RBVEVfRlVMRklMTEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5c
bmZ1bmN0aW9uIHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVu
YWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1
bHQgPSByZWFzb247XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9SRUpFQ1RF
RDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZXNldCh0aGVu
YWJsZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7
XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gbnVsbDtcblx0XHR0aGVuYWJsZS4kdGhl
bmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVhY3QodGhl
bmFibGUpe1xuXHR2YXIgc3RhdGUgPSB0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSxcblx0XHRyZXN1
bHQgPSB0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQsXG5cdFx0cmVhY3Rpb25zID0gdGhlbmFibGUu
JHRoZW5hYmxlUmVhY3Rpb25zLFxuXHRcdHR5cGU7XG5cblx0aWYgKHN0YXRlID09PSBTVEFURV9G
VUxGSUxMRUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5
cGUgPSAnZnVsZmlsbEhhbmRsZXInO1xuXHR9IGVsc2UgaWYgKHN0YXRlID09IFNUQVRFX1JFSkVD
VEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0g
J3JlamVjdEhhbmRsZXInO1xuXHR9XG5cblx0aWYgKHR5cGUpe1xuXHRcdGRlZmVyKGhhbmRsZS5w
YXNzKFtyZXN1bHQsIHJlYWN0aW9ucywgdHlwZV0pKTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5k
bGUocmVzdWx0LCByZWFjdGlvbnMsIHR5cGUpe1xuXHRmb3IgKHZhciBpID0gMCwgbCA9IHJlYWN0
aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpe1xuXHRcdHZhciByZWFjdGlvbiA9IHJlYWN0aW9uc1tp
XSxcblx0XHRcdGhhbmRsZXIgPSByZWFjdGlvblt0eXBlXTtcblxuXHRcdGlmIChoYW5kbGVyID09
PSAnSWRlbnRpdHknKXtcblx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7
XG5cdFx0fSBlbHNlIGlmIChoYW5kbGVyID09PSAnVGhyb3dlcicpe1xuXHRcdFx0cmVqZWN0KHJl
YWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0cnkge1xuXHRc
dFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCBoYW5kbGVyKHJlc3VsdCkpO1xuXHRcdFx0
fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCBl
eGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG52YXIgZGVmZXI7XG5pZiAodHlw
ZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09
PSAnZnVuY3Rpb24nKXtcblx0ZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNrO1xufSBlbHNlIGlmICh0
eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyl7XG5cdGRlZmVyID0gc2V0SW1tZWRp
YXRlO1xufSBlbHNlIHtcblx0ZGVmZXIgPSBmdW5jdGlvbihmbil7XG5cdFx0c2V0VGltZW91dChm
biwgMCk7XG5cdH07XG59XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogT2JqZWN0XG5cbmRl
c2NyaXB0aW9uOiBPYmplY3QgZ2VuZXJpYyBtZXRob2RzXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogW09iamVjdCwgSGFzaF1cblxu
Li4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0c3Vic2V0OiBm
dW5jdGlvbihvYmplY3QsIGtleXMpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0Zm9yICh2
YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtl
eXNbaV07XG5cdFx0XHRpZiAoayBpbiBvYmplY3QpIHJlc3VsdHNba10gPSBvYmplY3Rba107XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24ob2JqZWN0
LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVj
dC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsr
KXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0cmVzdWx0c1trZXldID0gZm4uY2Fs
bChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVz
dWx0cztcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRc
dHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xu
XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5
ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQs
IHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNba2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRldmVyeTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmlu
ZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkg
PSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0
XHRcdGlmICghZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIGZhbHNlO1xu
XHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRzb21lOiBmdW5jdGlvbihvYmplY3Qs
IGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlz
W2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiB0
cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0dmFsdWVzOiBmdW5jdGlv
bihvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5r
ZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtc
blx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRcdHZhbHVlcy5wdXNoKG9iamVjdFtrXSk7XG5c
dFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0Z2V0TGVuZ3RoOiBmdW5jdGlvbihv
YmplY3Qpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aDtcblx0fSxcblxu
XHRrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qu
a2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7
XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChvYmplY3Rba2V5XSA9PT0gdmFs
dWUpIHJldHVybiBrZXk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGNvbnRh
aW5zOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHRyZXR1cm4gT2JqZWN0LmtleU9mKG9i
amVjdCwgdmFsdWUpICE9IG51bGw7XG5cdH0sXG5cblx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24o
b2JqZWN0LCBiYXNlKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblxuXHRcdE9iamVjdC5l
YWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRpZiAoYmFzZSkga2V5ID0g
YmFzZSArICdbJyArIGtleSArICddJztcblx0XHRcdHZhciByZXN1bHQ7XG5cdFx0XHRzd2l0Y2gg
KHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0XHRjYXNlICdvYmplY3QnOiByZXN1bHQgPSBPYmplY3Qu
dG9RdWVyeVN0cmluZyh2YWx1ZSwga2V5KTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2FycmF5Jzpc
blx0XHRcdFx0XHR2YXIgcXMgPSB7fTtcblx0XHRcdFx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKHZh
bCwgaSl7XG5cdFx0XHRcdFx0XHRxc1tpXSA9IHZhbDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0
XHRyZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyhxcywga2V5KTtcblx0XHRcdFx0XHRicmVh
aztcblx0XHRcdFx0ZGVmYXVsdDogcmVzdWx0ID0ga2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9u
ZW50KHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSBxdWVyeVN0cmlu
Zy5wdXNoKHJlc3VsdCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbign
JicpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG5cblxuLypcbi0tLVxubmFtZTogU2xpY2suUGFy
c2VyXG5kZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBDU1MzIFNlbGVjdG9yIHBhcnNlclxucHJvdmlk
ZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZhciBwYXJzZWQs
XG5cdHNlcGFyYXRvckluZGV4LFxuXHRjb21iaW5hdG9ySW5kZXgsXG5cdHJldmVyc2VkLFxuXHRj
YWNoZSA9IHt9LFxuXHRyZXZlcnNlQ2FjaGUgPSB7fSxcblx0cmVVbmVzY2FwZSA9IC9cXFxcL2c7
XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGlzUmV2ZXJzZWQpe1xuXHRpZiAo
ZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0aWYgKGV4cHJlc3Npb24uU2xpY2sg
PT09IHRydWUpIHJldHVybiBleHByZXNzaW9uO1xuXHRleHByZXNzaW9uID0gKCcnICsgZXhwcmVz
c2lvbikucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHRyZXZlcnNlZCA9ICEhaXNSZXZl
cnNlZDtcblx0dmFyIGN1cnJlbnRDYWNoZSA9IChyZXZlcnNlZCkgPyByZXZlcnNlQ2FjaGUgOiBj
YWNoZTtcblx0aWYgKGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXSkgcmV0dXJuIGN1cnJlbnRDYWNo
ZVtleHByZXNzaW9uXTtcblx0cGFyc2VkID0ge1xuXHRcdFNsaWNrOiB0cnVlLFxuXHRcdGV4cHJl
c3Npb25zOiBbXSxcblx0XHRyYXc6IGV4cHJlc3Npb24sXG5cdFx0cmV2ZXJzZTogZnVuY3Rpb24o
KXtcblx0XHRcdHJldHVybiBwYXJzZSh0aGlzLnJhdywgdHJ1ZSk7XG5cdFx0fVxuXHR9O1xuXHRz
ZXBhcmF0b3JJbmRleCA9IC0xO1xuXHR3aGlsZSAoZXhwcmVzc2lvbiAhPSAoZXhwcmVzc2lvbiA9
IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNlcikpKTtcblx0cGFyc2VkLmxlbmd0aCA9
IHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGg7XG5cdHJldHVybiBjdXJyZW50Q2FjaGVbcGFyc2Vk
LnJhd10gPSAocmV2ZXJzZWQpID8gcmV2ZXJzZShwYXJzZWQpIDogcGFyc2VkO1xufTtcblxudmFy
IHJldmVyc2VDb21iaW5hdG9yID0gZnVuY3Rpb24oY29tYmluYXRvcil7XG5cdGlmIChjb21iaW5h
dG9yID09PSAnIScpIHJldHVybiAnICc7XG5cdGVsc2UgaWYgKGNvbWJpbmF0b3IgPT09ICcgJykg
cmV0dXJuICchJztcblx0ZWxzZSBpZiAoKC9eIS8pLnRlc3QoY29tYmluYXRvcikpIHJldHVybiBj
b21iaW5hdG9yLnJlcGxhY2UoL14hLywgJycpO1xuXHRlbHNlIHJldHVybiAnIScgKyBjb21iaW5h
dG9yO1xufTtcblxudmFyIHJldmVyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0dmFyIGV4
cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IDA7IGkg
PCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGV4cCA9IGV4cHJlc3Npb25zW2ld
O1xuXHRcdHZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAnKicsIGNvbWJpbmF0b3I6IHJldmVy
c2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07XG5cblx0XHRmb3IgKHZhciBqID0gMDsg
aiA8IGV4cC5sZW5ndGg7IGorKyl7XG5cdFx0XHR2YXIgY2V4cCA9IGV4cFtqXTtcblx0XHRcdGlm
ICghY2V4cC5yZXZlcnNlQ29tYmluYXRvcikgY2V4cC5yZXZlcnNlQ29tYmluYXRvciA9ICcgJztc
blx0XHRcdGNleHAuY29tYmluYXRvciA9IGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0XHRk
ZWxldGUgY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHR9XG5cblx0XHRleHAucmV2ZXJzZSgp
LnB1c2gobGFzdCk7XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG52YXIgZXNjYXBl
UmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKXsvLyBDcmVkaXQ6IFhSZWdFeHAgMC42LjEgKGMpIDIw
MDctMjAwOCBTdGV2ZW4gTGV2aXRoYW4gPGh0dHA6Ly9zdGV2ZW5sZXZpdGhhbi5jb20vcmVnZXgv
eHJlZ2V4cC8+IE1JVCBMaWNlbnNlXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvWy1bXFxde30o
KSorPy5cXFxcXiR8LCNcXHNdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRyZXR1cm4gJ1xcXFwn
ICsgbWF0Y2g7XG5cdH0pO1xufTtcblxudmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoXG4vKlxuIyEv
dXNyL2Jpbi9lbnYgcnVieVxucHV0cyBcIlxcdFxcdFwiICsgREFUQS5yZWFkLmdzdWIoL1xcKFxc
P3hcXCl8XFxzKyMuKiR8XFxzK3xcXFxcJHxcXFxcbi8sJycpXG5fX0VORF9fXG5cdFwiKD94KV4o
PzpcXFxuXHQgIFxcXFxzKiAoICwgKSBcXFxccyogICAgICAgICAgICAgICAjIFNlcGFyYXRvciAg
ICAgICAgICBcXG5cXFxuXHR8IFxcXFxzKiAoIDxjb21iaW5hdG9yPisgKSBcXFxccyogICAjIENv
bWJpbmF0b3IgICAgICAgICBcXG5cXFxuXHR8ICAgICAgKCBcXFxccysgKSAgICAgICAgICAgICAg
ICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXFxuXFxcblx0fCAgICAgICggPHVuaWNvZGU+KyB8IFxc
XFwqICkgICAgICMgVGFnICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxcXCMgICggPHVuaWNv
ZGU+KyAgICAgICApICAgICAjIElEICAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwuICAo
IDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05hbWUgICAgICAgICAgXFxuXFxcblx0fCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSAgICAgICAgICBcXG5cXFxu
XHRcXFxcWyAgXFxcblx0XHRcXFxccyogKDx1bmljb2RlMT4rKSAgKD86ICBcXFxuXHRcdFx0XFxc
XHMqIChbKl4kIX58XT89KSAgKD86ICBcXFxuXHRcdFx0XHRcXFxccyogKD86XFxcblx0XHRcdFx0
XHQoW1xcXCInXT8pKC4qPylcXFxcOSBcXFxuXHRcdFx0XHQpXFxcblx0XHRcdCkgIFxcXG5cdFx0
KT8gIFxcXFxzKiAgXFxcblx0XFxcXF0oPyFcXFxcXSkgXFxuXFxcblx0fCAgIDorICggPHVuaWNv
ZGU+KyApKD86XFxcblx0XFxcXCggKD86XFxcblx0XHQoPzooW1xcXCInXSkoW15cXFxcMTJdKilc
XFxcMTIpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspXFxcblx0KSBcXFxcKVxcXG5cdCk/
XFxcblx0KVwiXG4qL1xuXHRcIl4oPzpcXFxccyooLClcXFxccyp8XFxcXHMqKDxjb21iaW5hdG9y
PispXFxcXHMqfChcXFxccyspfCg8dW5pY29kZT4rfFxcXFwqKXxcXFxcIyg8dW5pY29kZT4rKXxc
XFxcLig8dW5pY29kZT4rKXxcXFxcW1xcXFxzKig8dW5pY29kZTE+KykoPzpcXFxccyooWypeJCF+
fF0/PSkoPzpcXFxccyooPzooW1xcXCInXT8pKC4qPylcXFxcOSkpKT9cXFxccypcXFxcXSg/IVxc
XFxdKXwoOispKDx1bmljb2RlPispKD86XFxcXCgoPzooPzooW1xcXCInXSkoW15cXFxcMTNdKilc
XFxcMTMpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspKVxcXFwpKT8pXCJcblx0LnJlcGxh
Y2UoLzxjb21iaW5hdG9yPi8sICdbJyArIGVzY2FwZVJlZ0V4cCgnPit+YCFAJCVeJj17fVxcXFw7
PC8nKSArICddJylcblx0LnJlcGxhY2UoLzx1bmljb2RlPi9nLCAnKD86W1xcXFx3XFxcXHUwMGEx
LVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcblx0LnJlcGxhY2UoLzx1bmlj
b2RlMT4vZywgJyg/Ols6XFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxz
MC05YS1mXSknKVxuKTtcblxuZnVuY3Rpb24gcGFyc2VyKFxuXHRyYXdNYXRjaCxcblxuXHRzZXBh
cmF0b3IsXG5cdGNvbWJpbmF0b3IsXG5cdGNvbWJpbmF0b3JDaGlsZHJlbixcblxuXHR0YWdOYW1l
LFxuXHRpZCxcblx0Y2xhc3NOYW1lLFxuXG5cdGF0dHJpYnV0ZUtleSxcblx0YXR0cmlidXRlT3Bl
cmF0b3IsXG5cdGF0dHJpYnV0ZVF1b3RlLFxuXHRhdHRyaWJ1dGVWYWx1ZSxcblxuXHRwc2V1ZG9N
YXJrZXIsXG5cdHBzZXVkb0NsYXNzLFxuXHRwc2V1ZG9RdW90ZSxcblx0cHNldWRvQ2xhc3NRdW90
ZWRWYWx1ZSxcblx0cHNldWRvQ2xhc3NWYWx1ZVxuKXtcblx0aWYgKHNlcGFyYXRvciB8fCBzZXBh
cmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdHBhcnNlZC5leHByZXNzaW9uc1srK3NlcGFyYXRvcklu
ZGV4XSA9IFtdO1xuXHRcdGNvbWJpbmF0b3JJbmRleCA9IC0xO1xuXHRcdGlmIChzZXBhcmF0b3Ip
IHJldHVybiAnJztcblx0fVxuXG5cdGlmIChjb21iaW5hdG9yIHx8IGNvbWJpbmF0b3JDaGlsZHJl
biB8fCBjb21iaW5hdG9ySW5kZXggPT09IC0xKXtcblx0XHRjb21iaW5hdG9yID0gY29tYmluYXRv
ciB8fCAnICc7XG5cdFx0dmFyIGN1cnJlbnRTZXBhcmF0b3IgPSBwYXJzZWQuZXhwcmVzc2lvbnNb
c2VwYXJhdG9ySW5kZXhdO1xuXHRcdGlmIChyZXZlcnNlZCAmJiBjdXJyZW50U2VwYXJhdG9yW2Nv
bWJpbmF0b3JJbmRleF0pXG5cdFx0XHRjdXJyZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0u
cmV2ZXJzZUNvbWJpbmF0b3IgPSByZXZlcnNlQ29tYmluYXRvcihjb21iaW5hdG9yKTtcblx0XHRj
dXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4XSA9IHtjb21iaW5hdG9yOiBjb21iaW5h
dG9yLCB0YWc6ICcqJ307XG5cdH1cblxuXHR2YXIgY3VycmVudFBhcnNlZCA9IHBhcnNlZC5leHBy
ZXNzaW9uc1tzZXBhcmF0b3JJbmRleF1bY29tYmluYXRvckluZGV4XTtcblxuXHRpZiAodGFnTmFt
ZSl7XG5cdFx0Y3VycmVudFBhcnNlZC50YWcgPSB0YWdOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwg
JycpO1xuXG5cdH0gZWxzZSBpZiAoaWQpe1xuXHRcdGN1cnJlbnRQYXJzZWQuaWQgPSBpZC5yZXBs
YWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGNsYXNzTmFtZSl7XG5cdFx0Y2xh
c3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0aWYgKCFj
dXJyZW50UGFyc2VkLmNsYXNzTGlzdCkgY3VycmVudFBhcnNlZC5jbGFzc0xpc3QgPSBbXTtcblx0
XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3VycmVudFBhcnNlZC5jbGFzc2VzID0gW107
XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFzc0xpc3QucHVzaChjbGFzc05hbWUpO1xuXHRcdGN1cnJl
bnRQYXJzZWQuY2xhc3Nlcy5wdXNoKHtcblx0XHRcdHZhbHVlOiBjbGFzc05hbWUsXG5cdFx0XHRy
ZWdleHA6IG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBlc2NhcGVSZWdFeHAoY2xhc3NOYW1lKSAr
ICcoXFxcXHN8JCknKVxuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAocHNldWRvQ2xhc3Mpe1xuXHRc
dHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlIHx8IHBzZXVkb0NsYXNzUXVvdGVk
VmFsdWU7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgPyBwc2V1ZG9D
bGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpIDogbnVsbDtcblxuXHRcdGlmICghY3Vy
cmVudFBhcnNlZC5wc2V1ZG9zKSBjdXJyZW50UGFyc2VkLnBzZXVkb3MgPSBbXTtcblx0XHRjdXJy
ZW50UGFyc2VkLnBzZXVkb3MucHVzaCh7XG5cdFx0XHRrZXk6IHBzZXVkb0NsYXNzLnJlcGxhY2Uo
cmVVbmVzY2FwZSwgJycpLFxuXHRcdFx0dmFsdWU6IHBzZXVkb0NsYXNzVmFsdWUsXG5cdFx0XHR0
eXBlOiBwc2V1ZG9NYXJrZXIubGVuZ3RoID09IDEgPyAnY2xhc3MnIDogJ2VsZW1lbnQnXG5cdFx0
fSk7XG5cblx0fSBlbHNlIGlmIChhdHRyaWJ1dGVLZXkpe1xuXHRcdGF0dHJpYnV0ZUtleSA9IGF0
dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblx0XHRhdHRyaWJ1dGVWYWx1ZSA9
IChhdHRyaWJ1dGVWYWx1ZSB8fCAnJykucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHR2
YXIgdGVzdCwgcmVnZXhwO1xuXG5cdFx0c3dpdGNoIChhdHRyaWJ1dGVPcGVyYXRvcil7XG5cdFx0
XHRjYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4
cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBicmVhaztcblx0XHRcdGNhc2UgJyQ9JyA6
IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZh
bHVlKSArJyQnICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfj0nIDogcmVnZXhwID0gbmV3
IFJlZ0V4cCggJyhefFxcXFxzKScrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoXFxc
XHN8JCknICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCgg
ICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKC18JCknICAgKTsgYnJl
YWs7XG5cdFx0XHRjYXNlICAnPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRy
ZXR1cm4gYXR0cmlidXRlVmFsdWUgPT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGNh
c2UgJyo9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAm
JiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0xO1xuXHRcdFx0fTsgYnJlYWs7XG5c
dFx0XHRjYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4g
YXR0cmlidXRlVmFsdWUgIT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGRlZmF1bHQg
ICA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiAhIXZhbHVlO1xuXHRc
dFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRlVmFsdWUgPT0gJycgJiYgKC9eWyokXl09
JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rpb24oKXtcblx0XHRcdHJl
dHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0aWYgKCF0ZXN0KSB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlICYmIHJlZ2V4cC50ZXN0KHZhbHVlKTtcblx0XHR9O1xu
XG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMpIGN1cnJlbnRQYXJzZWQuYXR0cmli
dXRlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGtl
eTogYXR0cmlidXRlS2V5LFxuXHRcdFx0b3BlcmF0b3I6IGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRc
dFx0dmFsdWU6IGF0dHJpYnV0ZVZhbHVlLFxuXHRcdFx0dGVzdDogdGVzdFxuXHRcdH0pO1xuXG5c
dH1cblxuXHRyZXR1cm4gJyc7XG59O1xuXG4vLyBTbGljayBOU1xuXG52YXIgU2xpY2sgPSAodGhp
cy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5c
dHJldHVybiBwYXJzZShleHByZXNzaW9uKTtcbn07XG5cblNsaWNrLmVzY2FwZVJlZ0V4cCA9IGVz
Y2FwZVJlZ0V4cDtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7XG5cbn0p
LmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/IGV4
cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxubmFtZTogU2xpY2suRmlu
ZGVyXG5kZXNjcmlwdGlvbjogVGhlIG5ldywgc3VwZXJmYXN0IGNzcyBzZWxlY3RvciBlbmdpbmUu
XG5wcm92aWRlczogU2xpY2suRmluZGVyXG5yZXF1aXJlczogU2xpY2suUGFyc2VyXG4uLi5cbiov
XG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIGxvY2FsID0ge30sXG5cdGZlYXR1cmVzQ2FjaGUgPSB7
fSxcblx0dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBGZWF0dXJl
IC8gQnVnIGRldGVjdGlvblxuXG5sb2NhbC5pc05hdGl2ZUNvZGUgPSBmdW5jdGlvbihmbil7XG5c
dHJldHVybiAoL1xce1xccypcXFtuYXRpdmUgY29kZVxcXVxccypcXH0vKS50ZXN0KCcnICsgZm4p
O1xufTtcblxubG9jYWwuaXNYTUwgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5cdHJldHVybiAoISFk
b2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1bWVudC54bWwpIHx8ICh0b1N0cmluZy5jYWxs
KGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1bWVudF0nKSB8fFxuXHQoZG9jdW1lbnQubm9k
ZVR5cGUgPT0gOSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT0gJ0hUTUwn
KTtcbn07XG5cbmxvY2FsLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXG5cdC8v
IGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJndW1lbnRzIHRvIGRvY3VtZW50LiBpZiBkb2N1
bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucy5cblx0dmFy
IG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7XG5cdGlmIChub2RlVHlwZSA9PSA5KTsgLy8g
ZG9jdW1lbnRcblx0ZWxzZSBpZiAobm9kZVR5cGUpIGRvY3VtZW50ID0gZG9jdW1lbnQub3duZXJE
b2N1bWVudDsgLy8gbm9kZVxuXHRlbHNlIGlmIChkb2N1bWVudC5uYXZpZ2F0b3IpIGRvY3VtZW50
ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRvd1xuXHRlbHNlIHJldHVybjtcblxuXHQvLyBj
aGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnRcblxuXHRpZiAodGhpcy5kb2N1bWVudCA9PT0g
ZG9jdW1lbnQpIHJldHVybjtcblx0dGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuXG5cdC8vIGNo
ZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRldGVjdGlvbiBvbiB0aGlzIGRvY3VtZW50IGJl
Zm9yZVxuXG5cdHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHJvb3RV
aWQgPSB0aGlzLmdldFVJRFhNTChyb290KSxcblx0XHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVb
cm9vdFVpZF0sXG5cdFx0ZmVhdHVyZTtcblxuXHRpZiAoZmVhdHVyZXMpe1xuXHRcdGZvciAoZmVh
dHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVy
ZV07XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNo
ZVtyb290VWlkXSA9IHt9O1xuXG5cdGZlYXR1cmVzLnJvb3QgPSByb290O1xuXHRmZWF0dXJlcy5p
c1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1bWVudCk7XG5cblx0ZmVhdHVyZXMuYnJva2Vu
U3RhckdFQlROXG5cdD0gZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRRU0Fcblx0PSBmZWF0dXJl
cy5pZEdldHNOYW1lXG5cdD0gZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNlUVNBXG5cdD0gZmVhdHVy
ZXMuYnJva2VuR0VCQ05cblx0PSBmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBXG5cdD0gZmVhdHVy
ZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Fcblx0PSBmZWF0dXJlcy5pc0hUTUxEb2N1bWVudFxu
XHQ9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvclxuXHQ9IGZhbHNlO1xuXG5cdHZhciBz
dGFyU2VsZWN0c0Nsb3NlZCwgc3RhclNlbGVjdHNDb21tZW50cyxcblx0XHRicm9rZW5TZWNvbmRD
bGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSxcblx0XHRicm9rZW5G
b3JtQXR0cmlidXRlR2V0dGVyO1xuXG5cdHZhciBzZWxlY3RlZCwgaWQgPSAnc2xpY2tfdW5pcXVl
aWQnO1xuXHR2YXIgdGVzdE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxu
XHR2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDtcblx0dGVzdFJvb3QuYXBwZW5kQ2hpbGQodGVzdE5v
ZGUpO1xuXG5cdC8vIG9uIG5vbi1IVE1MIGRvY3VtZW50cyBpbm5lckhUTUwgYW5kIGdldEVsZW1l
bnRzQnlJZCBkb2VzbnQgd29yayBwcm9wZXJseVxuXHR0cnkge1xuXHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8YSBpZD1cIicraWQrJ1wiPjwvYT4nO1xuXHRcdGZlYXR1cmVzLmlzSFRNTERvY3Vt
ZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdH0gY2F0Y2ggKGUpe31cblxu
XHRpZiAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQpe1xuXG5cdFx0dGVzdE5vZGUuc3R5bGUuZGlz
cGxheSA9ICdub25lJztcblxuXHRcdC8vIElFIHJldHVybnMgY29tbWVudCBub2RlcyBmb3IgZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0ZXN0Tm9kZS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCcnKSk7XG5cdFx0c3RhclNlbGVjdHND
b21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLmxlbmd0aCA+IDEp
O1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9mb28+XCIpIGZvciBn
ZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5c
dFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRcdHNlbGVjdGVkID0g
dGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdHN0YXJTZWxlY3RzQ2xv
c2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVO
YW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRmZWF0dXJl
cy5icm9rZW5TdGFyR0VCVE4gPSBzdGFyU2VsZWN0c0NvbW1lbnRzIHx8IHN0YXJTZWxlY3RzQ2xv
c2VkO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBlbGVtZW50cyB3aXRoIHRoZSBuYW1lIGluc3RlYWQg
b2YganVzdCBpZCBmb3IgZ2V0RWxlbWVudHNCeUlkIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRy
eSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgbmFtZT1cIicrIGlkICsnXCI+PC9h
PjxiIGlkPVwiJysgaWQgKydcIj48L2I+Jztcblx0XHRcdGZlYXR1cmVzLmlkR2V0c05hbWUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgPT09IHRlc3ROb2RlLmZpcnN0Q2hpbGQ7XG5cdFx0
fSBjYXRjaCAoZSl7fVxuXG5cdFx0aWYgKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUp
e1xuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgY2FjaGVzIHJl
c3VsdHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFz
cz1cImZcIj48L2E+PGEgY2xhc3M9XCJiXCI+PC9hPic7XG5cdFx0XHRcdHRlc3ROb2RlLmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGg7XG5cdFx0XHRcdHRlc3ROb2RlLmZpcnN0Q2hp
bGQuY2xhc3NOYW1lID0gJ2InO1xuXHRcdFx0XHRjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1l
ID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGggIT0gMik7XG5c
dFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBPcGVyYSA5LjYgZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSBkb2VzbnQgZGV0ZWN0cyB0aGUgY2xhc3MgaWYgaXRzIG5vdCB0aGUgZmlyc3Qgb25l
XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJh
XCI+PC9hPjxhIGNsYXNzPVwiZiBiIGFcIj48L2E+Jztcblx0XHRcdFx0YnJva2VuU2Vjb25kQ2xh
c3NOYW1lR0VCQ04gPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYScpLmxlbmd0
aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0ZmVhdHVyZXMuYnJva2VuR0VC
Q04gPSBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IGJyb2tlblNlY29uZENsYXNzTmFt
ZUdFQkNOO1xuXHRcdH1cblxuXHRcdGlmICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKXtcblx0
XHRcdC8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9mb28+XCIpIGZvciBxdWVy
eVNlbGVjdG9yQWxsKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0XHR0cnkge1xuXHRcdFx0
XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRcdFx0c2VsZWN0ZWQgPSB0
ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XG5cdFx0XHRcdGZlYXR1cmVzLnN0YXJTZWxl
Y3RzQ2xvc2VkUVNBID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVk
WzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5c
dFx0XHQvLyBTYWZhcmkgMy4yIHF1ZXJ5U2VsZWN0b3JBbGwgZG9lc250IHdvcmsgd2l0aCBtaXhl
ZGNhc2Ugb24gcXVpcmtzbW9kZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJI
VE1MID0gJzxhIGNsYXNzPVwiTWlYXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbk1p
eGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcuTWlYJykubGVuZ3RoO1xu
XHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBXZWJraXQgYW5kIE9wZXJhIGRvbnQgcmV0
dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0
XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD1cInNl
bGVjdGVkXCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkNo
ZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnOmNoZWNrZWQnKS5sZW5ndGgg
PT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBJRSByZXR1cm5zIGluY29y
cmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09XCJcIiBzZWxlY3RvcnMgb24gcXVlcnlTZWxlY3Rv
ckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNz
PVwiXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBID0g
KHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9XCJcIl0nKS5sZW5ndGggIT0gMCk7
XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHR9XG5cblx0XHQvLyBJRTYtNywgaWYgYSBmb3Jt
IGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdldEF0dHJpYnV0ZSh4KSByZXR1cm5zIGEgcmVm
ZXJlbmNlIHRvIHRoZSBpbnB1dFxuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGZvcm0gYWN0aW9uPVwic1wiPjxpbnB1dCBpZD1cImFjdGlvblwiLz48L2Zvcm0+Jztcblx0
XHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIgPSAodGVzdE5vZGUuZmlyc3RDaGlsZC5nZXRB
dHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0Ly8g
bmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlvblxuXG5cdFx0ZmVhdHVyZXMubmF0aXZlTWF0
Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8IC8qcm9vdC5tc01hdGNoZXNTZWxlY3RvciB8
fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0TWF0Y2hlc1NlbGVjdG9y
O1xuXHRcdGlmIChmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IpIHRyeSB7XG5cdFx0XHQv
LyBpZiBtYXRjaGVzU2VsZWN0b3IgdHJvd3MgZXJyb3JzIG9uIGluY29ycmVjdCBzaW50YXhlcyB3
ZSBjYW4gdXNlIGl0XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChy
b290LCAnOnNsaWNrJyk7XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IgPSBu
dWxsO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHR9XG5cblx0dHJ5IHtcblx0XHRyb290LnNsaWNr
X2V4cGFuZG8gPSAxO1xuXHRcdGRlbGV0ZSByb290LnNsaWNrX2V4cGFuZG87XG5cdFx0ZmVhdHVy
ZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MO1xuXHR9IGNhdGNoIChlKXtcblx0XHRmZWF0dXJl
cy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDtcblx0fVxuXG5cdHRlc3RSb290LnJlbW92ZUNoaWxk
KHRlc3ROb2RlKTtcblx0dGVzdE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RSb290ID0gbnVsbDtcblxu
XHQvLyBnZXRBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5nZXRBdHRyaWJ1dGUgPSAoZmVhdHVyZXMu
aXNIVE1MRG9jdW1lbnQgJiYgYnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcikgPyBmdW5jdGlvbihu
b2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVd
O1xuXHRcdGlmIChtZXRob2QpIHJldHVybiBtZXRob2QuY2FsbChub2RlKTtcblx0XHR2YXIgYXR0
cmlidXRlTm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtcblx0XHRyZXR1cm4gKGF0
dHJpYnV0ZU5vZGUpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9IDogZnVu
Y3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVy
c1tuYW1lXTtcblx0XHRyZXR1cm4gKG1ldGhvZCkgPyBtZXRob2QuY2FsbChub2RlKSA6IG5vZGUu
Z2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9O1xuXG5cdC8vIGhhc0F0dHJpYnV0ZVxuXG5cdGZlYXR1
cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuaGFzQXR0
cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRcdHJldHVybiBub2RlLmhh
c0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtc
blx0XHRub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7XG5cdFx0cmV0dXJu
ICEhKG5vZGUgJiYgKG5vZGUuc3BlY2lmaWVkIHx8IG5vZGUubm9kZVZhbHVlKSk7XG5cdH07XG5c
blx0Ly8gY29udGFpbnNcblx0Ly8gRklYTUU6IEFkZCBzcGVjczogbG9jYWwuY29udGFpbnMgc2hv
dWxkIGJlIGRpZmZlcmVudCBmb3IgeG1sIGFuZCBodG1sIGRvY3VtZW50cz9cblx0dmFyIG5hdGl2
ZVJvb3RDb250YWlucyA9IHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5jb250YWlucyks
XG5cdFx0bmF0aXZlRG9jdW1lbnRDb250YWlucyA9IGRvY3VtZW50ICYmIHRoaXMuaXNOYXRpdmVD
b2RlKGRvY3VtZW50LmNvbnRhaW5zKTtcblxuXHRmZWF0dXJlcy5jb250YWlucyA9IChuYXRpdmVS
b290Q29udGFpbnMgJiYgbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlvbihjb250ZXh0
LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dC5jb250YWlucyhub2RlKTtcblx0fSA6IChuYXRp
dmVSb290Q29udGFpbnMgJiYgIW5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29u
dGV4dCwgbm9kZSl7XG5cdFx0Ly8gSUU4IGRvZXMgbm90IGhhdmUgLmNvbnRhaW5zIG9uIGRvY3Vt
ZW50LlxuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICgoY29udGV4dCA9PT0gZG9jdW1l
bnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogY29udGV4dCkuY29udGFpbnMobm9kZSk7
XG5cdH0gOiAocm9vdCAmJiByb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9u
KGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICEhKGNvbnRl
eHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiAxNik7XG5cdH0gOiBmdW5jdGlvbihj
b250ZXh0LCBub2RlKXtcblx0XHRpZiAobm9kZSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUgPT09IGNv
bnRleHQpIHJldHVybiB0cnVlO1xuXHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2Rl
KSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdC8vIGRvY3VtZW50IG9yZGVyIHNvcnRp
bmdcblx0Ly8gY3JlZGl0cyB0byBTaXp6bGUgKGh0dHA6Ly9zaXp6bGVqcy5jb20vKVxuXG5cdGZl
YXR1cmVzLmRvY3VtZW50U29ydGVyID0gKHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8g
ZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFi
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSByZXR1cm4gMDtcblx0XHRyZXR1cm4gYS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEgPT09IGIgPyAwIDogMTtcblx0fSA6ICgn
c291cmNlSW5kZXgnIGluIHJvb3QpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLnNvdXJj
ZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4gMDtcblx0XHRyZXR1cm4gYS5zb3VyY2VJ
bmRleCAtIGIuc291cmNlSW5kZXg7XG5cdH0gOiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpID8gZnVu
Y3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLm93bmVyRG9jdW1lbnQgfHwgIWIub3duZXJEb2N1bWVu
dCkgcmV0dXJuIDA7XG5cdFx0dmFyIGFSYW5nZSA9IGEub3duZXJEb2N1bWVudC5jcmVhdGVSYW5n
ZSgpLCBiUmFuZ2UgPSBiLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblx0XHRhUmFuZ2Uu
c2V0U3RhcnQoYSwgMCk7XG5cdFx0YVJhbmdlLnNldEVuZChhLCAwKTtcblx0XHRiUmFuZ2Uuc2V0
U3RhcnQoYiwgMCk7XG5cdFx0YlJhbmdlLnNldEVuZChiLCAwKTtcblx0XHRyZXR1cm4gYVJhbmdl
LmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19FTkQsIGJSYW5nZSk7XG5cdH0g
OiBudWxsO1xuXG5cdHJvb3QgPSBudWxsO1xuXG5cdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7
XG5cdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHR9XG59O1xuXG4vLyBN
YWluIE1ldGhvZFxuXG52YXIgcmVTaW1wbGVTZWxlY3RvciA9IC9eKFsjLl0/KSgoPzpbXFx3LV0r
fFxcKikpJC8sXG5cdHJlRW1wdHlBdHRyaWJ1dGUgPSAvXFxbLitbKiReXT0oPzpcIlwifCcnKT9c
XF0vLFxuXHRxc2FGYWlsRXhwQ2FjaGUgPSB7fTtcblxubG9jYWwuc2VhcmNoID0gZnVuY3Rpb24o
Y29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBmaXJzdCl7XG5cblx0dmFyIGZvdW5kID0gdGhp
cy5mb3VuZCA9IChmaXJzdCkgPyBudWxsIDogKGFwcGVuZCB8fCBbXSk7XG5cblx0aWYgKCFjb250
ZXh0KSByZXR1cm4gZm91bmQ7XG5cdGVsc2UgaWYgKGNvbnRleHQubmF2aWdhdG9yKSBjb250ZXh0
ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVydCB0aGUgbm9kZSBmcm9tIGEgd2luZG93IHRv
IGEgZG9jdW1lbnRcblx0ZWxzZSBpZiAoIWNvbnRleHQubm9kZVR5cGUpIHJldHVybiBmb3VuZDtc
blxuXHQvLyBzZXR1cFxuXG5cdHZhciBwYXJzZWQsIGksIG5vZGUsIG5vZGVzLFxuXHRcdHVuaXF1
ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSxcblx0XHRoYXNPdGhlcnMgPSAhIShhcHBlbmQgJiYgYXBw
ZW5kLmxlbmd0aCksXG5cdFx0Y29udGV4dElzRG9jdW1lbnQgPSAoY29udGV4dC5ub2RlVHlwZSA9
PSA5KTtcblxuXHRpZiAodGhpcy5kb2N1bWVudCAhPT0gKGNvbnRleHRJc0RvY3VtZW50ID8gY29u
dGV4dCA6IGNvbnRleHQub3duZXJEb2N1bWVudCkpIHRoaXMuc2V0RG9jdW1lbnQoY29udGV4dCk7
XG5cblx0Ly8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMgYWxyZWFkeSBpbiB0aGUgYXBwZW5kIGFy
cmF5XG5cdGlmIChoYXNPdGhlcnMpIGZvciAoaSA9IGZvdW5kLmxlbmd0aDsgaS0tOykgdW5pcXVl
c1t0aGlzLmdldFVJRChmb3VuZFtpXSldID0gdHJ1ZTtcblxuXHQvLyBleHByZXNzaW9uIGNoZWNr
c1xuXG5cdGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7IC8vIGV4cHJlc3Npb24g
aXMgYSBzdHJpbmdcblxuXHRcdC8qPHNpbXBsZS1zZWxlY3RvcnMtb3ZlcnJpZGU+Ki9cblx0XHR2
YXIgc2ltcGxlU2VsZWN0b3IgPSBleHByZXNzaW9uLm1hdGNoKHJlU2ltcGxlU2VsZWN0b3IpO1xu
XHRcdHNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNlbGVjdG9yKXtcblxuXHRcdFx0dmFyIHN5
bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLFxuXHRcdFx0XHRuYW1lID0gc2ltcGxlU2VsZWN0b3Jb
Ml07XG5cblx0XHRcdGlmICghc3ltYm9sKXtcblxuXHRcdFx0XHRpZiAobmFtZSA9PSAnKicgJiYg
dGhpcy5icm9rZW5TdGFyR0VCVE4pIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9k
ZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xuXHRcdFx0XHRpZiAoZmly
c3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0g
bm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMu
Z2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBl
bHNlIGlmIChzeW1ib2wgPT0gJyMnKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1l
bnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRc
dG5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG5hbWUpO1xuXHRcdFx0XHRpZiAoIW5vZGUp
IHJldHVybiBmb3VuZDtcblx0XHRcdFx0aWYgKHRoaXMuaWRHZXRzTmFtZSAmJiBub2RlLmdldEF0
dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IG5hbWUpIGJyZWFrIHNpbXBsZVNlbGVjdG9y
cztcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZSB8fCBudWxsO1xuXHRcdFx0XHRpZiAo
IShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5v
ZGUpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnLicpe1xuXG5cdFx0XHRcdGlmICgh
dGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUg
fHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKSkgYnJlYWsg
c2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAoY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTtcblx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBu
b2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytd
Oyl7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChu
b2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtc
blx0XHRcdFx0XHR2YXIgbWF0Y2hDbGFzcyA9IG5ldyBSZWdFeHAoJyhefFxcXFxzKScrIFNsaWNr
LmVzY2FwZVJlZ0V4cChuYW1lKSArJyhcXFxcc3wkKScpO1xuXHRcdFx0XHRcdG5vZGVzID0gY29u
dGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBub2RlLmNsYXNzTmFt
ZTtcblx0XHRcdFx0XHRcdGlmICghKGNsYXNzTmFtZSAmJiBtYXRjaENsYXNzLnRlc3QoY2xhc3NO
YW1lKSkpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZTtcblx0
XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkp
IGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxu
XHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0XHRcdHJldHVybiAoZmly
c3QpID8gbnVsbCA6IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9zaW1wbGUtc2VsZWN0b3JzLW92
ZXJyaWRlPiovXG5cblx0XHQvKjxxdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXHRcdHF1ZXJ5
U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpe1xuXG5cdFx0XHRpZiAoIXRo
aXMuaXNIVE1MRG9jdW1lbnRcblx0XHRcdFx0fHwgcXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25d
XG5cdFx0XHRcdC8vVE9ETzogb25seSBza2lwIHdoZW4gZXhwcmVzc2lvbiBpcyBhY3R1YWxseSBt
aXhlZCBjYXNlXG5cdFx0XHRcdHx8IHRoaXMuYnJva2VuTWl4ZWRDYXNlUVNBXG5cdFx0XHRcdHx8
ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhwcmVzc2lvbi5pbmRleE9mKCc6Y2hlY2tlZCcp
ID4gLTEpXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBICYmIHJlRW1w
dHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSlcblx0XHRcdFx0fHwgKCFjb250ZXh0SXNEb2N1
bWVudCAvL0Fib3J0IHdoZW4gIWNvbnRleHRJc0RvY3VtZW50IGFuZC4uLlxuXHRcdFx0XHRcdC8v
ICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNlbGVjdG9yXG5cdFx0XHRc
dFx0Ly8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5IGZpeCBub24tZG9jdW1lbnQgcm9vdGVkIFFT
QSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0b3JzXG5cdFx0XHRcdFx0JiYgZXhwcmVzc2lv
bi5pbmRleE9mKCcsJykgPiAtMVxuXHRcdFx0XHQpXG5cdFx0XHRcdHx8IFNsaWNrLmRpc2FibGVR
U0Fcblx0XHRcdCkgYnJlYWsgcXVlcnlTZWxlY3RvcjtcblxuXHRcdFx0dmFyIF9leHByZXNzaW9u
ID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250ZXh0LCBjdXJyZW50SWQ7XG5cdFx0XHRpZiAo
IWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0Ly8gbm9uLWRvY3VtZW50IHJvb3RlZCBRU0Fc
blx0XHRcdFx0Ly8gY3JlZGl0cyB0byBBbmRyZXcgRHVwb250XG5cdFx0XHRcdGN1cnJlbnRJZCA9
IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2xpY2tpZCA9ICdzbGlja2lkX18nO1xuXHRc
dFx0XHRfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2xpY2tpZCk7XG5cdFx0XHRcdF9leHBy
ZXNzaW9uID0gJyMnICsgc2xpY2tpZCArICcgJyArIF9leHByZXNzaW9uO1xuXHRcdFx0XHRjb250
ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRc
dFx0aWYgKGZpcnN0KSByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yKF9leHByZXNzaW9uKSB8
fCBudWxsO1xuXHRcdFx0XHRlbHNlIG5vZGVzID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKF9l
eHByZXNzaW9uKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHRxc2FGYWlsRXhwQ2FjaGVb
ZXhwcmVzc2lvbl0gPSAxO1xuXHRcdFx0XHRicmVhayBxdWVyeVNlbGVjdG9yO1xuXHRcdFx0fSBm
aW5hbGx5IHtcblx0XHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5cdFx0XHRcdFx0aWYg
KGN1cnJlbnRJZCkgX2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIGN1cnJlbnRJZCk7XG5cdFx0
XHRcdFx0ZWxzZSBfY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHRcdFx0Y29u
dGV4dCA9IF9jb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnN0
YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRc
dFx0XHRpZiAobm9kZS5ub2RlTmFtZSA+ICdAJyAmJiAhKGhhc090aGVycyAmJiB1bmlxdWVzW3Ro
aXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9IGVsc2UgZm9yIChp
ID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVu
aXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH1cblxu
XHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0XHRcdHJldHVybiBmb3Vu
ZDtcblxuXHRcdH1cblx0XHQvKjwvcXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblxuXHRcdHBh
cnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVzc2lvbik7XG5cdFx0aWYgKCFwYXJzZWQubGVu
Z3RoKSByZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKXsgLy8g
dGhlcmUgaXMgbm8gZXhwcmVzc2lvblxuXHRcdHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChl
eHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHBhcnNlZCBTbGljayBvYmplY3Rc
blx0XHRwYXJzZWQgPSBleHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKHRoaXMuY29udGFpbnMoY29u
dGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4dCwgZXhwcmVzc2lvbikpeyAvLyBleHByZXNz
aW9uIGlzIGEgbm9kZVxuXHRcdChmb3VuZCkgPyBmb3VuZC5wdXNoKGV4cHJlc3Npb24pIDogZm91
bmQgPSBleHByZXNzaW9uO1xuXHRcdHJldHVybiBmb3VuZDtcblx0fSBlbHNlIHsgLy8gb3RoZXIg
anVua1xuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdC8qPHBzZXVkby1zZWxlY3RvcnM+Ki8v
KjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGNhY2hlIGVsZW1lbnRzIGZvciB0aGUg
bnRoIHNlbGVjdG9yc1xuXG5cdHRoaXMucG9zTlRIID0ge307XG5cdHRoaXMucG9zTlRITGFzdCA9
IHt9O1xuXHR0aGlzLnBvc05USFR5cGUgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBlTGFzdCA9IHt9
O1xuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiov
XG5cblx0Ly8gaWYgYXBwZW5kIGlzIG51bGwgYW5kIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgc2Vs
ZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2UgcHVzaEFycmF5LCBlbHNlIHVzZSBwdXNoVUlE
XG5cdHRoaXMucHVzaCA9ICghaGFzT3RoZXJzICYmIChmaXJzdCB8fCAocGFyc2VkLmxlbmd0aCA9
PSAxICYmIHBhcnNlZC5leHByZXNzaW9uc1swXS5sZW5ndGggPT0gMSkpKSA/IHRoaXMucHVzaEFy
cmF5IDogdGhpcy5wdXNoVUlEO1xuXG5cdGlmIChmb3VuZCA9PSBudWxsKSBmb3VuZCA9IFtdO1xu
XG5cdC8vIGRlZmF1bHQgZW5naW5lXG5cblx0dmFyIGosIG0sIG47XG5cdHZhciBjb21iaW5hdG9y
LCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3M7XG5cdHZh
ciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNzaW9uLCBjdXJyZW50Qml0LCBsYXN0Qml0LCBl
eHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucztcblxuXHRzZWFyY2g6IGZvciAoaSA9IDA7
IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsrKSBmb3IgKGogPSAwOyAo
Y3VycmVudEJpdCA9IGN1cnJlbnRFeHByZXNzaW9uW2pdKTsgaisrKXtcblxuXHRcdGNvbWJpbmF0
b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJpdC5jb21iaW5hdG9yO1xuXHRcdGlmICghdGhp
c1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNoO1xuXG5cdFx0dGFnICAgICAgICA9ICh0aGlz
LmlzWE1MRG9jdW1lbnQpID8gY3VycmVudEJpdC50YWcgOiBjdXJyZW50Qml0LnRhZy50b1VwcGVy
Q2FzZSgpO1xuXHRcdGlkICAgICAgICAgPSBjdXJyZW50Qml0LmlkO1xuXHRcdGNsYXNzTGlzdCAg
PSBjdXJyZW50Qml0LmNsYXNzTGlzdDtcblx0XHRjbGFzc2VzICAgID0gY3VycmVudEJpdC5jbGFz
c2VzO1xuXHRcdGF0dHJpYnV0ZXMgPSBjdXJyZW50Qml0LmF0dHJpYnV0ZXM7XG5cdFx0cHNldWRv
cyAgICA9IGN1cnJlbnRCaXQucHNldWRvcztcblx0XHRsYXN0Qml0ICAgID0gKGogPT09IChjdXJy
ZW50RXhwcmVzc2lvbi5sZW5ndGggLSAxKSk7XG5cblx0XHR0aGlzLmJpdFVuaXF1ZXMgPSB7fTtc
blxuXHRcdGlmIChsYXN0Qml0KXtcblx0XHRcdHRoaXMudW5pcXVlcyA9IHVuaXF1ZXM7XG5cdFx0
XHR0aGlzLmZvdW5kID0gZm91bmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudW5pcXVlcyA9
IHt9O1xuXHRcdFx0dGhpcy5mb3VuZCA9IFtdO1xuXHRcdH1cblxuXHRcdGlmIChqID09PSAwKXtc
blx0XHRcdHRoaXNbY29tYmluYXRvcl0oY29udGV4dCwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdGlmIChmaXJzdCAmJiBsYXN0Qml0ICYm
IGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZmly
c3QgJiYgbGFzdEJpdCkgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBu
OyBtKyspe1xuXHRcdFx0XHR0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBp
ZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdFx0aWYg
KGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdFx0fSBlbHNlIGZvciAobSA9IDAsIG4g
PSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKSB0aGlzW2NvbWJpbmF0b3JdKGN1cnJl
bnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NM
aXN0KTtcblx0XHR9XG5cblx0XHRjdXJyZW50SXRlbXMgPSB0aGlzLmZvdW5kO1xuXHR9XG5cblx0
Ly8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5vZGVzIGluIGFwcGVuZCBhbmQgaWYgeW91IHBh
c3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuXG5cdGlmIChoYXNPdGhlcnMgfHwgKHBhcnNlZC5leHBy
ZXNzaW9ucy5sZW5ndGggPiAxKSkgdGhpcy5zb3J0KGZvdW5kKTtcblxuXHRyZXR1cm4gKGZpcnN0
KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5kO1xufTtcblxuLy8gVXRpbHNcblxubG9jYWwu
dWlkeCA9IDE7XG5sb2NhbC51aWRrID0gJ3NsaWNrLXVuaXF1ZWlkJztcblxubG9jYWwuZ2V0VUlE
WE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHZhciB1aWQgPSBub2RlLmdldEF0dHJpYnV0ZSh0aGlz
LnVpZGspO1xuXHRpZiAoIXVpZCl7XG5cdFx0dWlkID0gdGhpcy51aWR4Kys7XG5cdFx0bm9kZS5z
ZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpO1xuXHR9XG5cdHJldHVybiB1aWQ7XG59O1xuXG5s
b2NhbC5nZXRVSURIVE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiBub2RlLnVuaXF1ZU51
bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0aGlzLnVpZHgrKyk7XG59O1xuXG4vLyBzb3J0
IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1bWVudFNvcnRlciBtZXRob2QuXG5cbmxvY2Fs
LnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXtcblx0aWYgKCF0aGlzLmRvY3VtZW50U29ydGVyKSBy
ZXR1cm4gcmVzdWx0cztcblx0cmVzdWx0cy5zb3J0KHRoaXMuZG9jdW1lbnRTb3J0ZXIpO1xuXHRy
ZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRv
LXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5jYWNoZU5USCA9IHt9O1xuXG5sb2NhbC5tYXRjaE5USCA9
IC9eKFsrLV0/XFxkKik/KFthLXpdKyk/KFsrLV1cXGQrKT8kLztcblxubG9jYWwucGFyc2VOVEhB
cmd1bWVudCA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0dmFyIHBhcnNlZCA9IGFyZ3VtZW50Lm1h
dGNoKHRoaXMubWF0Y2hOVEgpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIg
c3BlY2lhbCA9IHBhcnNlZFsyXSB8fCBmYWxzZTtcblx0dmFyIGEgPSBwYXJzZWRbMV0gfHwgMTtc
blx0aWYgKGEgPT0gJy0nKSBhID0gLTE7XG5cdHZhciBiID0gK3BhcnNlZFszXSB8fCAwO1xuXHRw
YXJzZWQgPVxuXHRcdChzcGVjaWFsID09ICduJylcdD8ge2E6IGEsIGI6IGJ9IDpcblx0XHQoc3Bl
Y2lhbCA9PSAnb2RkJylcdD8ge2E6IDIsIGI6IDF9IDpcblx0XHQoc3BlY2lhbCA9PSAnZXZlbicp
XHQ/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBhfTtcblxuXHRyZXR1cm4gKHRoaXMuY2FjaGVO
VEhbYXJndW1lbnRdID0gcGFyc2VkKTtcbn07XG5cbmxvY2FsLmNyZWF0ZU5USFBzZXVkbyA9IGZ1
bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlvbnMsIG9mVHlwZSl7XG5cdHJldHVybiBmdW5j
dGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xu
XHRcdGlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0pe1xuXHRcdFx0dmFyIHBhcmVudCA9IG5vZGUu
cGFyZW50Tm9kZTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG5cdFx0XHR2YXIg
ZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7XG5cdFx0XHRpZiAob2ZUeXBlKXtcblx0XHRc
dFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRc
dGlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1tw
b3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgo
ZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0
XHRcdGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0
aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9
IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFyZ3VtZW50ID0gYXJndW1lbnQg
fHwgJ24nO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSB8fCB0aGlz
LnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpO1xuXHRcdGlmICghcGFyc2VkKSByZXR1cm4gZmFs
c2U7XG5cdFx0dmFyIGEgPSBwYXJzZWQuYSwgYiA9IHBhcnNlZC5iLCBwb3MgPSB0aGlzW3Bvc2l0
aW9uc11bdWlkXTtcblx0XHRpZiAoYSA9PSAwKSByZXR1cm4gYiA9PSBwb3M7XG5cdFx0aWYgKGEg
PiAwKXtcblx0XHRcdGlmIChwb3MgPCBiKSByZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdGlmIChiIDwgcG9zKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAoKHBvcyAt
IGIpICUgYSkgPT0gMDtcblx0fTtcbn07XG5cbi8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8q
PC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLnB1c2hBcnJheSA9IGZ1bmN0aW9uKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGhpcy5tYXRj
aFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKSB0
aGlzLmZvdW5kLnB1c2gobm9kZSk7XG59O1xuXG5sb2NhbC5wdXNoVUlEID0gZnVuY3Rpb24obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdHZhciB1aWQgPSB0
aGlzLmdldFVJRChub2RlKTtcblx0aWYgKCF0aGlzLnVuaXF1ZXNbdWlkXSAmJiB0aGlzLm1hdGNo
U2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpe1xu
XHRcdHRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHR0aGlzLmZvdW5kLnB1c2gobm9kZSk7
XG5cdH1cbn07XG5cbmxvY2FsLm1hdGNoTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXtc
blx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ip
e1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IuY2Fs
bChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cXFsoW149XSspPVxccyooW14nXCJcXF1dKz8pXFxz
KlxcXS9nLCAnWyQxPVwiJDJcIl0nKSk7XG5cdFx0fSBjYXRjaCAobWF0Y2hFcnJvcil7fVxuXHR9
XG5cblx0dmFyIHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2Uoc2VsZWN0b3IpO1xuXHRpZiAoIXBh
cnNlZCkgcmV0dXJuIHRydWU7XG5cblx0Ly8gc2ltcGxlIChzaW5nbGUpIHNlbGVjdG9yc1xuXHR2
YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnMsIHNpbXBsZUV4cENvdW50ZXIgPSAw
LCBpLCBjdXJyZW50RXhwcmVzc2lvbjtcblx0Zm9yIChpID0gMDsgKGN1cnJlbnRFeHByZXNzaW9u
ID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspe1xuXHRcdGlmIChjdXJyZW50RXhwcmVzc2lvbi5sZW5n
dGggPT0gMSl7XG5cdFx0XHR2YXIgZXhwID0gY3VycmVudEV4cHJlc3Npb25bMF07XG5cdFx0XHRp
ZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gZXhwLnRh
ZyA6IGV4cC50YWcudG9VcHBlckNhc2UoKSwgZXhwLmlkLCBleHAuY2xhc3NlcywgZXhwLmF0dHJp
YnV0ZXMsIGV4cC5wc2V1ZG9zKSkgcmV0dXJuIHRydWU7XG5cdFx0XHRzaW1wbGVFeHBDb3VudGVy
Kys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNpbXBsZUV4cENvdW50ZXIgPT0gcGFyc2VkLmxlbmd0
aCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBub2RlcyA9IHRoaXMuc2VhcmNoKHRoaXMuZG9jdW1l
bnQsIHBhcnNlZCksIGl0ZW07XG5cdGZvciAoaSA9IDA7IGl0ZW0gPSBub2Rlc1tpKytdOyl7XG5c
dFx0aWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtc
bn07XG5cbmxvY2FsLm1hdGNoUHNldWRvID0gZnVuY3Rpb24obm9kZSwgbmFtZSwgYXJndW1lbnQp
e1xuXHR2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86JyArIG5hbWU7XG5cdGlmICh0aGlzW3BzZXVk
b05hbWVdKSByZXR1cm4gdGhpc1twc2V1ZG9OYW1lXShub2RlLCBhcmd1bWVudCk7XG5cdHZhciBh
dHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcblx0cmV0dXJuIChhcmd1
bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUgOiAhIWF0dHJpYnV0ZTtcbn07XG5cbmxvY2Fs
Lm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRhZyl7XG5cdFx0dmFyIG5vZGVOYW1lID0gKHRoaXMuaXNY
TUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDogbm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgp
O1xuXHRcdGlmICh0YWcgPT0gJyonKXtcblx0XHRcdGlmIChub2RlTmFtZSA8ICdAJykgcmV0dXJu
IGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9kZXMgYW5kIGNsb3NlZCBub2Rlc1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHRpZiAobm9kZU5hbWUgIT0gdGFnKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxu
XHR9XG5cblx0aWYgKGlkICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcpICE9IGlkKSByZXR1cm4g
ZmFsc2U7XG5cblx0dmFyIGksIHBhcnQsIGNscztcblx0aWYgKGNsYXNzZXMpIGZvciAoaSA9IGNs
YXNzZXMubGVuZ3RoOyBpLS07KXtcblx0XHRjbHMgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCAn
Y2xhc3MnKTtcblx0XHRpZiAoIShjbHMgJiYgY2xhc3Nlc1tpXS5yZWdleHAudGVzdChjbHMpKSkg
cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzKSBmb3IgKGkgPSBhdHRyaWJ1dGVz
Lmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IGF0dHJpYnV0ZXNbaV07XG5cdFx0aWYgKHBhcnQu
b3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkg
OiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSByZXR1cm4gZmFsc2U7XG5cdH1c
blx0aWYgKHBzZXVkb3MpIGZvciAoaSA9IHBzZXVkb3MubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0
ID0gcHNldWRvc1tpXTtcblx0XHRpZiAoIXRoaXMubWF0Y2hQc2V1ZG8obm9kZSwgcGFydC5rZXks
IHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG52
YXIgY29tYmluYXRvcnMgPSB7XG5cblx0JyAnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpeyAvLyBhbGwgY2hpbGQgbm9kZXMs
IGFueSBsZXZlbFxuXG5cdFx0dmFyIGksIGl0ZW0sIGNoaWxkcmVuO1xuXG5cdFx0aWYgKHRoaXMu
aXNIVE1MRG9jdW1lbnQpe1xuXHRcdFx0Z2V0QnlJZDogaWYgKGlkKXtcblx0XHRcdFx0aXRlbSA9
IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0XHRpZiAoKCFpdGVtICYm
IG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1lICYmIGl0ZW0gJiYgaXRlbS5nZXRBdHRyaWJ1
dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkpe1xuXHRcdFx0XHRcdC8vIGFsbFtpZF0gcmV0
dXJucyBhbGwgdGhlIGVsZW1lbnRzIHdpdGggdGhhdCBuYW1lIG9yIGlkIGluc2lkZSBub2RlXG5c
dFx0XHRcdFx0Ly8gaWYgdGhlcmVzIGp1c3Qgb25lIGl0IHdpbGwgcmV0dXJuIHRoZSBlbGVtZW50
LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0Y2hpbGRyZW4gPSBub2Rl
LmFsbFtpZF07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlbikgcmV0dXJuO1xuXHRcdFx0XHRcdGlm
ICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcblx0XHRcdFx0XHRmb3IgKGkg
PSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspe1xuXHRcdFx0XHRcdFx0dmFyIGlkTm9kZSA9IGl0
ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTtcblx0XHRcdFx0XHRcdGlmIChpZE5vZGUgJiYgaWRO
b2RlLm5vZGVWYWx1ZSA9PSBpZCl7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcs
IG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRcdFx0XHRicmVh
aztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0
XHR9XG5cdFx0XHRcdGlmICghaXRlbSl7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlIGNvbnRleHQgaXMg
aW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ugd2lsbCB0cnkgR0VCVE4sIGJyZWFraW5nIHRo
ZSBnZXRCeUlkIGxhYmVsXG5cdFx0XHRcdFx0aWYgKHRoaXMuY29udGFpbnModGhpcy5yb290LCBu
b2RlKSkgcmV0dXJuO1xuXHRcdFx0XHRcdGVsc2UgYnJlYWsgZ2V0QnlJZDtcblx0XHRcdFx0fSBl
bHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2RlICYmICF0aGlzLmNvbnRhaW5zKG5vZGUsIGl0
ZW0pKSByZXR1cm47XG5cdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRn
ZXRCeUNsYXNzOiBpZiAoY2xhc3NlcyAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYg
IXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcpKTtcblx0XHRcdFx0aWYgKCEoY2hpbGRyZW4g
JiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlDbGFzcztcblx0XHRcdFx0Zm9yIChpID0g
MDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgbnVsbCwg
YXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5c
dFx0Z2V0QnlUYWc6IHtcblx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSh0YWcpO1xuXHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsg
Z2V0QnlUYWc7XG5cdFx0XHRpZiAoIXRoaXMuYnJva2VuU3RhckdFQlROKSB0YWcgPSBudWxsO1xu
XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5c
dCc+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyl7IC8vIGRpcmVjdCBjaGlsZHJlblxuXHRcdGlmICgobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkp
IGRvIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9IHdoaWxlICgobm9kZSA9
IG5vZGUubmV4dFNpYmxpbmcpKTtcblx0fSxcblxuXHQnKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdcblx0XHR3
aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7
XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0J14nOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZmlyc3QgY2hpbGRc
blx0XHRub2RlID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChu
b2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjorJ10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5c
dCd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyl7IC8vIG5leHQgc2libGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5n
KSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1
aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkg
YnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxu
XHR9LFxuXG5cdCcrKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcgYW5kIHByZXZpb3VzIHNpYmxpbmdcblx0XHR0
aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0J35+JzogZnVuY3Rpb24obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3Mg
YW5kIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0dGhpc1snY29tYmluYXRvcjp+J10obm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29tYmluYXRv
cjohfiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9
LFxuXG5cdCchJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMgdXAgdG8gZG9jdW1lbnRcblx0XHR3aGlsZSAo
KG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhp
cy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9
LFxuXG5cdCchPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpeyAvLyBkaXJlY3QgcGFyZW50IChvbmUgbGV2ZWwpXG5cdFx0bm9kZSA9IG5vZGUu
cGFyZW50Tm9kZTtcblx0XHRpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCch
Kyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
eyAvLyBwcmV2aW91cyBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1Np
YmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRc
dH1cblx0fSxcblxuXHQnIV4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbGFzdCBjaGlsZFxuXHRcdG5vZGUgPSBub2RlLmxhc3RDaGls
ZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRl
bHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0JyF+JzogZnVuY3Rpb24obm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdz
XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKXtcblx0XHRcdGlmIChu
b2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlE
KG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVhaztcblx0XHRcdHRo
aXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH1cblxufTtcblxuZm9y
ICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxbJ2NvbWJpbmF0b3I6JyArIGNdID0gY29tYmlu
YXRvcnNbY107XG5cbnZhciBwc2V1ZG9zID0ge1xuXG5cdC8qPHBzZXVkby1zZWxlY3RvcnM+Ki9c
blxuXHQnZW1wdHknOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgY2hpbGQgPSBub2RlLmZpcnN0
Q2hpbGQ7XG5cdFx0cmV0dXJuICEoY2hpbGQgJiYgY2hpbGQubm9kZVR5cGUgPT0gMSkgJiYgIShu
b2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5sZW5ndGg7XG5cdH0sXG5c
blx0J25vdCc6IGZ1bmN0aW9uKG5vZGUsIGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiAhdGhpcy5t
YXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7XG5cdH0sXG5cblx0J2NvbnRhaW5zJzogZnVuY3Rp
b24obm9kZSwgdGV4dCl7XG5cdFx0cmV0dXJuIChub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRD
b250ZW50IHx8ICcnKS5pbmRleE9mKHRleHQpID4gLTE7XG5cdH0sXG5cblx0J2ZpcnN0LWNoaWxk
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxp
bmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRy
dWU7XG5cdH0sXG5cblx0J2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAo
KG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJu
IGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5LWNoaWxkJzogZnVuY3Rp
b24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYu
cHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xu
XHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5n
KSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVl
O1xuXHR9LFxuXG5cdC8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J250aC1jaGlsZCc6
IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0U2libGluZycsICdwb3NO
VEgnKSxcblxuXHQnbnRoLWxhc3QtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RD
aGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRITGFzdCcpLFxuXG5cdCdudGgtb2YtdHlw
ZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0U2libGluZycsICdw
b3NOVEhUeXBlJywgdHJ1ZSksXG5cblx0J250aC1sYXN0LW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVO
VEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRIVHlwZUxhc3Qn
LCB0cnVlKSxcblxuXHQnaW5kZXgnOiBmdW5jdGlvbihub2RlLCBpbmRleCl7XG5cdFx0cmV0dXJu
IHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnJyArIChpbmRleCArIDEpKTtcblx0fSxc
blxuXHQnZXZlbic6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRo
LWNoaWxkJ10obm9kZSwgJzJuJyk7XG5cdH0sXG5cblx0J29kZCc6IGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuKzEnKTtcblx0fSxc
blxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvKjxvZi10eXBlLXBzZXVkby1z
ZWxlY3RvcnM+Ki9cblxuXHQnZmlyc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZh
ciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2
aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNl
O1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LW9mLXR5cGUnOiBmdW5jdGlvbihu
b2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9k
ZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0
dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5LW9mLXR5cGUnOiBm
dW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGUsIG5vZGVOYW1lID0gbm9kZS5ub2Rl
TmFtZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChwcmV2
Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIG5leHQgPSBub2Rl
O1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBpZiAobmV4dC5ub2RlTmFt
ZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5c
dC8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBjdXN0b20gcHNldWRvc1xu
XG5cdCdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuICFub2RlLmRpc2FibGVk
O1xuXHR9LFxuXG5cdCdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2Rl
LmRpc2FibGVkO1xuXHR9LFxuXG5cdCdjaGVja2VkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0
dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVjdGVkO1xuXHR9LFxuXG5cdCdmb2N1cyc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzLmlzSFRNTERvY3VtZW50ICYmIHRoaXMuZG9j
dW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSAmJiAobm9kZS5ocmVmIHx8IG5vZGUudHlwZSB8
fCB0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCAndGFiaW5kZXgnKSk7XG5cdH0sXG5cblx0J3Jvb3Qn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUgPT09IHRoaXMucm9vdCk7XG5cdH0s
XG5cblx0J3NlbGVjdGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuc2VsZWN0
ZWQ7XG5cdH1cblxuXHQvKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xufTtcblxuZm9yICh2YXIgcCBp
biBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBwXSA9IHBzZXVkb3NbcF07XG5cbi8vIGF0dHJp
YnV0ZXMgbWV0aG9kc1xuXG52YXIgYXR0cmlidXRlR2V0dGVycyA9IGxvY2FsLmF0dHJpYnV0ZUdl
dHRlcnMgPSB7XG5cblx0J2Zvcic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHRtbEZvcicg
aW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlzLmdldEF0dHJpYnV0ZSgnZm9yJyk7XG5cdH0s
XG5cblx0J2hyZWYnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2hyZWYnIGluIHRoaXMpID8g
dGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7
XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuc3R5bGUp
ID8gdGhpcy5zdHlsZS5jc3NUZXh0IDogdGhpcy5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cdH0s
XG5cblx0J3RhYmluZGV4JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRo
aXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5v
ZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUg
OiBudWxsO1xuXHR9LFxuXG5cdCd0eXBlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5n
ZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcblx0fSxcblxuXHQnbWF4bGVuZ3RoJzogZnVuY3Rpb24oKXtc
blx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnbWF4TGVuZ3Ro
Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVk
KSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fVxuXG59O1xuXG5hdHRyaWJ1
dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4TGVuZ3RoID0gYXR0cmli
dXRlR2V0dGVycy5tYXhsZW5ndGg7XG5cbi8vIFNsaWNrXG5cbnZhciBTbGljayA9IGxvY2FsLlNs
aWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGljay52ZXJzaW9uID0gJzEuMS43Jztcblxu
Ly8gU2xpY2sgZmluZGVyXG5cblNsaWNrLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJl
c3Npb24sIGFwcGVuZCl7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lv
biwgYXBwZW5kKTtcbn07XG5cblNsaWNrLmZpbmQgPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNz
aW9uKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBudWxsLCB0
cnVlKTtcbn07XG5cbi8vIFNsaWNrIGNvbnRhaW5tZW50IGNoZWNrZXJcblxuU2xpY2suY29udGFp
bnMgPSBmdW5jdGlvbihjb250YWluZXIsIG5vZGUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChjb250
YWluZXIpO1xuXHRyZXR1cm4gbG9jYWwuY29udGFpbnMoY29udGFpbmVyLCBub2RlKTtcbn07XG5c
bi8vIFNsaWNrIGF0dHJpYnV0ZSBnZXR0ZXJcblxuU2xpY2suZ2V0QXR0cmlidXRlID0gZnVuY3Rp
b24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9j
YWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxuU2xpY2suaGFzQXR0cmlidXRlID0g
ZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1
cm4gbG9jYWwuaGFzQXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxuLy8gU2xpY2sgbWF0Y2hl
clxuXG5TbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXtcblx0aWYgKCEobm9k
ZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTtcblx0aWYgKCFzZWxlY3RvciB8fCBzZWxlY3Rv
ciA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRy
ZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNlbGVjdG9yKTtcbn07XG5cbi8vIFNsaWNrIGF0
dHJpYnV0ZSBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlv
bihuYW1lLCBmbil7XG5cdGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV0gPSBmbjtcblx0cmV0
dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihu
YW1lKXtcblx0cmV0dXJuIGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG59O1xuXG4vLyBT
bGljayBwc2V1ZG8gYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lUHNldWRvID0gZnVuY3Rpb24obmFt
ZSwgZm4pe1xuXHRsb2NhbFsncHNldWRvOicgKyBuYW1lXSA9IGZ1bmN0aW9uKG5vZGUsIGFyZ3Vt
ZW50KXtcblx0XHRyZXR1cm4gZm4uY2FsbChub2RlLCBhcmd1bWVudCk7XG5cdH07XG5cdHJldHVy
biB0aGlzO1xufTtcblxuU2xpY2subG9va3VwUHNldWRvID0gZnVuY3Rpb24obmFtZSl7XG5cdHZh
ciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBuYW1lXTtcblx0aWYgKHBzZXVkbykgcmV0dXJu
IGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gcHNldWRvLmNhbGwodGhpcywgYXJndW1l
bnQpO1xuXHR9O1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8vIFNsaWNrIG92ZXJyaWRlcyBhY2Nl
c3NvclxuXG5TbGljay5vdmVycmlkZSA9IGZ1bmN0aW9uKHJlZ2V4cCwgZm4pe1xuXHRsb2NhbC5v
dmVycmlkZShyZWdleHAsIGZuKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5pc1hNTCA9
IGxvY2FsLmlzWE1MO1xuXG5TbGljay51aWRPZiA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4g
bG9jYWwuZ2V0VUlESFRNTChub2RlKTtcbn07XG5cbmlmICghdGhpcy5TbGljaykgdGhpcy5TbGlj
ayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAn
dW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1c
blxubmFtZTogRWxlbWVudFxuXG5kZXNjcmlwdGlvbjogT25lIG9mIHRoZSBtb3N0IGltcG9ydGFu
dCBpdGVtcyBpbiBNb29Ub29scy4gQ29udGFpbnMgdGhlIGRvbGxhciBmdW5jdGlvbiwgdGhlIGRv
bGxhcnMgZnVuY3Rpb24sIGFuZCBhbiBoYW5kZnVsIG9mIGNyb3NzLWJyb3dzZXIsIHRpbWUtc2F2
ZXIgbWV0aG9kcyB0byBsZXQgeW91IGVhc2lseSB3b3JrIHdpdGggSFRNTCBFbGVtZW50cy5cblxu
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVu
dCwgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE9iamVjdCwgTnVtYmVyLCBTbGljay5QYXJzZXIs
IFNsaWNrLkZpbmRlcl1cblxucHJvdmlkZXM6IFtFbGVtZW50LCBFbGVtZW50cywgJCwgJCQsIElG
cmFtZSwgU2VsZWN0b3JzXVxuXG4uLi5cbiovXG5cbnZhciBFbGVtZW50ID0gdGhpcy5FbGVtZW50
ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdHZhciBrb25zdHJ1Y3RvciA9IEVsZW1lbnQuQ29u
c3RydWN0b3JzW3RhZ107XG5cdGlmIChrb25zdHJ1Y3RvcikgcmV0dXJuIGtvbnN0cnVjdG9yKHBy
b3BzKTtcblx0aWYgKHR5cGVvZiB0YWcgIT0gJ3N0cmluZycpIHJldHVybiBkb2N1bWVudC5pZCh0
YWcpLnNldChwcm9wcyk7XG5cblx0aWYgKCFwcm9wcykgcHJvcHMgPSB7fTtcblxuXHRpZiAoISgv
XltcXHctXSskLykudGVzdCh0YWcpKXtcblx0XHR2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodGFn
KS5leHByZXNzaW9uc1swXVswXTtcblx0XHR0YWcgPSAocGFyc2VkLnRhZyA9PSAnKicpID8gJ2Rp
dicgOiBwYXJzZWQudGFnO1xuXHRcdGlmIChwYXJzZWQuaWQgJiYgcHJvcHMuaWQgPT0gbnVsbCkg
cHJvcHMuaWQgPSBwYXJzZWQuaWQ7XG5cblx0XHR2YXIgYXR0cmlidXRlcyA9IHBhcnNlZC5hdHRy
aWJ1dGVzO1xuXHRcdGlmIChhdHRyaWJ1dGVzKSBmb3IgKHZhciBhdHRyLCBpID0gMCwgbCA9IGF0
dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGF0dHIgPSBhdHRyaWJ1dGVzW2ld
O1xuXHRcdFx0aWYgKHByb3BzW2F0dHIua2V5XSAhPSBudWxsKSBjb250aW51ZTtcblxuXHRcdFx0
aWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJhdG9yID09ICc9JykgcHJvcHNbYXR0
ci5rZXldID0gYXR0ci52YWx1ZTtcblx0XHRcdGVsc2UgaWYgKCFhdHRyLnZhbHVlICYmICFhdHRy
Lm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChwYXJz
ZWQuY2xhc3NMaXN0ICYmIHByb3BzWydjbGFzcyddID09IG51bGwpIHByb3BzWydjbGFzcyddID0g
cGFyc2VkLmNsYXNzTGlzdC5qb2luKCcgJyk7XG5cdH1cblxuXHRyZXR1cm4gZG9jdW1lbnQubmV3
RWxlbWVudCh0YWcsIHByb3BzKTtcbn07XG5cblxuaWYgKEJyb3dzZXIuRWxlbWVudCl7XG5cdEVs
ZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVtZW50LnByb3RvdHlwZTtcblx0Ly8gSUU4IGFu
ZCBJRTkgcmVxdWlyZSB0aGUgd3JhcHBpbmcuXG5cdEVsZW1lbnQucHJvdG90eXBlLl9maXJlRXZl
bnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXtcblx0XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZXZl
bnQpe1xuXHRcdFx0cmV0dXJuIGZpcmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGV2ZW50KTtcblx0
XHR9O1xuXHR9KShFbGVtZW50LnByb3RvdHlwZS5maXJlRXZlbnQpO1xufVxuXG5uZXcgVHlwZSgn
RWxlbWVudCcsIEVsZW1lbnQpLm1pcnJvcihmdW5jdGlvbihuYW1lKXtcblx0aWYgKEFycmF5LnBy
b3RvdHlwZVtuYW1lXSkgcmV0dXJuO1xuXG5cdHZhciBvYmogPSB7fTtcblx0b2JqW25hbWVdID0g
ZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdLCBhcmdzID0gYXJndW1lbnRzLCBlbGVt
ZW50cyA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXNbaV0sIHJlc3VsdCA9IHJlc3VsdHNbaV0g
PSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3MpO1xuXHRcdFx0ZWxlbWVudHMgPSAo
ZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTtcblx0XHR9XG5cdFx0cmV0
dXJuIChlbGVtZW50cykgPyBuZXcgRWxlbWVudHMocmVzdWx0cykgOiByZXN1bHRzO1xuXHR9O1xu
XG5cdEVsZW1lbnRzLmltcGxlbWVudChvYmopO1xufSk7XG5cbmlmICghQnJvd3Nlci5FbGVtZW50
KXtcblx0RWxlbWVudC5wYXJlbnQgPSBPYmplY3Q7XG5cblx0RWxlbWVudC5Qcm90b3R5cGUgPSB7
XG5cdFx0JyRjb25zdHJ1Y3Rvcic6IEVsZW1lbnQsXG5cdFx0JyRmYW1pbHknOiBGdW5jdGlvbi5j
b252ZXJ0KCdlbGVtZW50JykuaGlkZSgpXG5cdH07XG5cblx0RWxlbWVudC5taXJyb3IoZnVuY3Rp
b24obmFtZSwgbWV0aG9kKXtcblx0XHRFbGVtZW50LlByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtc
blx0fSk7XG59XG5cbkVsZW1lbnQuQ29uc3RydWN0b3JzID0ge307XG5cblxuXG52YXIgSUZyYW1l
ID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBwYXJhbXMgPSBBcnJheS5s
aW5rKGFyZ3VtZW50cywge1xuXHRcdHByb3BlcnRpZXM6IFR5cGUuaXNPYmplY3QsXG5cdFx0aWZy
YW1lOiBmdW5jdGlvbihvYmope1xuXHRcdFx0cmV0dXJuIChvYmogIT0gbnVsbCk7XG5cdFx0fVxu
XHR9KTtcblxuXHR2YXIgcHJvcHMgPSBwYXJhbXMucHJvcGVydGllcyB8fCB7fSwgaWZyYW1lO1xu
XHRpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0gZG9jdW1lbnQuaWQocGFyYW1zLmlmcmFtZSk7
XG5cdHZhciBvbmxvYWQgPSBwcm9wcy5vbmxvYWQgfHwgZnVuY3Rpb24oKXt9O1xuXHRkZWxldGUg
cHJvcHMub25sb2FkO1xuXHRwcm9wcy5pZCA9IHByb3BzLm5hbWUgPSBbcHJvcHMuaWQsIHByb3Bz
Lm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwgaWZyYW1lLm5hbWUpIDogJ0lGcmFtZV8nICsg
U3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTtcblx0aWZyYW1lID0gbmV3IEVsZW1lbnQoaWZyYW1l
IHx8ICdpZnJhbWUnLCBwcm9wcyk7XG5cblx0dmFyIG9uTG9hZCA9IGZ1bmN0aW9uKCl7XG5cdFx0
b25sb2FkLmNhbGwoaWZyYW1lLmNvbnRlbnRXaW5kb3cpO1xuXHR9O1xuXG5cdGlmICh3aW5kb3cu
ZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7XG5cdGVsc2UgaWZyYW1lLmFkZExpc3RlbmVyKCds
b2FkJywgb25Mb2FkKTtcblx0cmV0dXJuIGlmcmFtZTtcbn0pO1xuXG52YXIgRWxlbWVudHMgPSB0
aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMpe1xuXHRpZiAobm9kZXMgJiYgbm9kZXMubGVu
Z3RoKXtcblx0XHR2YXIgdW5pcXVlcyA9IHt9LCBub2RlO1xuXHRcdGZvciAodmFyIGkgPSAwOyBu
b2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0dmFyIHVpZCA9IFNsaWNrLnVpZE9mKG5vZGUpO1xu
XHRcdFx0aWYgKCF1bmlxdWVzW3VpZF0pe1xuXHRcdFx0XHR1bmlxdWVzW3VpZF0gPSB0cnVlO1xu
XHRcdFx0XHR0aGlzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5FbGVt
ZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTtcbkVsZW1lbnRzLnBhcmVudCA9IEFycmF5O1xu
XG5uZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50cykuaW1wbGVtZW50KHtcblxuXHRmaWx0ZXI6
IGZ1bmN0aW9uKGZpbHRlciwgYmluZCl7XG5cdFx0aWYgKCFmaWx0ZXIpIHJldHVybiB0aGlzO1xu
XHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVyKHRoaXMsICh0eXBlT2YoZmlsdGVy
KSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtLm1hdGNo
KGZpbHRlcik7XG5cdFx0fSA6IGZpbHRlciwgYmluZCkpO1xuXHR9LnByb3RlY3QoKSxcblxuXHRw
dXNoOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFy
IGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0aWYgKGl0ZW0pIHRoaXNb
bGVuZ3RoKytdID0gaXRlbTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCA9IGxlbmd0
aCk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHVuc2hpZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGl0
ZW1zID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwg
bDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0
XHRcdGlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4gQXJyYXku
cHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywgaXRlbXMpO1xuXHR9LnByb3RlY3QoKSxcblxu
XHRjb25jYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG5ld0VsZW1lbnRzID0gbmV3IEVsZW1lbnRz
KHRoaXMpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChUeXBlLmlz
RW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMuYXBwZW5kKGl0ZW0pO1xuXHRcdFx0ZWxzZSBu
ZXdFbGVtZW50cy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3RWxlbWVudHM7XG5c
dH0ucHJvdGVjdCgpLFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oY29sbGVjdGlvbil7XG5cdFx0Zm9y
ICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5wdXNo
KGNvbGxlY3Rpb25baV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRl
bXB0eTogZnVuY3Rpb24oKXtcblx0XHR3aGlsZSAodGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzWy0t
dGhpcy5sZW5ndGhdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3RlY3QoKVxuXG59KTtcblxu
XG5cbihmdW5jdGlvbigpe1xuXG4vLyBGRiwgSUVcbnZhciBzcGxpY2UgPSBBcnJheS5wcm90b3R5
cGUuc3BsaWNlLCBvYmplY3QgPSB7JzAnOiAwLCAnMSc6IDEsIGxlbmd0aDogMn07XG5cbnNwbGlj
ZS5jYWxsKG9iamVjdCwgMSwgMSk7XG5pZiAob2JqZWN0WzFdID09IDEpIEVsZW1lbnRzLmltcGxl
bWVudCgnc3BsaWNlJywgZnVuY3Rpb24oKXtcblx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xu
XHR2YXIgcmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdHdoaWxlIChs
ZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzW2xlbmd0aC0tXTtcblx0cmV0dXJuIHJl
c3VsdDtcbn0ucHJvdGVjdCgpKTtcblxuQXJyYXkuZm9yRWFjaE1ldGhvZChmdW5jdGlvbihtZXRo
b2QsIG5hbWUpe1xuXHRFbGVtZW50cy5pbXBsZW1lbnQobmFtZSwgbWV0aG9kKTtcbn0pO1xuXG5B
cnJheS5taXJyb3IoRWxlbWVudHMpO1xuXG4vKjxsdElFOD4qL1xudmFyIGNyZWF0ZUVsZW1lbnRB
Y2NlcHRzSFRNTDtcbnRyeSB7XG5cdGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTCA9IChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCc8aW5wdXQgbmFtZT14PicpLm5hbWUgPT0gJ3gnKTtcbn0gY2F0Y2gg
KGUpe31cblxudmFyIGVzY2FwZVF1b3RlcyA9IGZ1bmN0aW9uKGh0bWwpe1xuXHRyZXR1cm4gKCcn
ICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7
XG59O1xuLyo8L2x0SUU4PiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3OSAtIElFOCBDYW5ub3Qg
c2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0eWxlSFRNTCA9IChmdW5j
dGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxcblx0
XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRNTCA9ICcjanVzdFRlc2lu
Z3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJIVE1MO1xuXHR9IGNhdGNo
IChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4qL1xuXG5Eb2N1bWVudC5p
bXBsZW1lbnQoe1xuXG5cdG5ld0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywgcHJvcHMpe1xuXHRcdGlm
IChwcm9wcyl7XG5cdFx0XHRpZiAocHJvcHMuY2hlY2tlZCAhPSBudWxsKSBwcm9wcy5kZWZhdWx0
Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cdFx0XHRpZiAoKHByb3BzLnR5cGUgPT0gJ2NoZWNr
Ym94JyB8fCBwcm9wcy50eXBlID09ICdyYWRpbycpICYmIHByb3BzLnZhbHVlID09IG51bGwpIHBy
b3BzLnZhbHVlID0gJ29uJztcblx0XHRcdC8qPGx0SUU5PiovIC8vIElFIG5lZWRzIHRoZSB0eXBl
IHRvIGJlIHNldCBiZWZvcmUgY2hhbmdpbmcgY29udGVudCBvZiBzdHlsZSBlbGVtZW50XG5cdFx0
XHRpZiAoIWNhbkNoYW5nZVN0eWxlSFRNTCAmJiB0YWcgPT0gJ3N0eWxlJyl7XG5cdFx0XHRcdHZh
ciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXHRcdFx0
XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG5cdFx0XHRc
dGlmIChwcm9wcy50eXBlKSBkZWxldGUgcHJvcHMudHlwZTtcblx0XHRcdFx0cmV0dXJuIHRoaXMu
aWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpO1xuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU5Piov
XG5cdFx0XHQvKjxsdElFOD4qLy8vIEZpeCBmb3IgcmVhZG9ubHkgbmFtZSBhbmQgdHlwZSBwcm9w
ZXJ0aWVzIGluIElFIDwgOFxuXHRcdFx0aWYgKGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTCl7XG5c
dFx0XHRcdHRhZyA9ICc8JyArIHRhZztcblx0XHRcdFx0aWYgKHByb3BzLm5hbWUpIHRhZyArPSAn
IG5hbWU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLm5hbWUpICsgJ1wiJztcblx0XHRcdFx0aWYg
KHByb3BzLnR5cGUpIHRhZyArPSAnIHR5cGU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLnR5cGUp
ICsgJ1wiJztcblx0XHRcdFx0dGFnICs9ICc+Jztcblx0XHRcdFx0ZGVsZXRlIHByb3BzLm5hbWU7
XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU4Piov
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlkKHRoaXMuY3JlYXRlRWxlbWVudCh0YWcpKS5zZXQo
cHJvcHMpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4oZnVuY3Rpb24oKXtcblxuU2xpY2sudWlk
T2Yod2luZG93KTtcblNsaWNrLnVpZE9mKGRvY3VtZW50KTtcblxuRG9jdW1lbnQuaW1wbGVtZW50
KHtcblxuXHRuZXdUZXh0Tm9kZTogZnVuY3Rpb24odGV4dCl7XG5cdFx0cmV0dXJuIHRoaXMuY3Jl
YXRlVGV4dE5vZGUodGV4dCk7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiB0aGlzLndpbmRvdztcblx0fSxcblxuXHRpZDogKGZ1bmN0aW9uKCl7XG5cblx0XHR2YXIg
dHlwZXMgPSB7XG5cblx0XHRcdHN0cmluZzogZnVuY3Rpb24oaWQsIG5vY2FzaCwgZG9jKXtcblx0
XHRcdFx0aWQgPSBTbGljay5maW5kKGRvYywgJyMnICsgaWQucmVwbGFjZSgvKFxcVykvZywgJ1xc
XFwkMScpKTtcblx0XHRcdFx0cmV0dXJuIChpZCkgPyB0eXBlcy5lbGVtZW50KGlkLCBub2Nhc2gp
IDogbnVsbDtcblx0XHRcdH0sXG5cblx0XHRcdGVsZW1lbnQ6IGZ1bmN0aW9uKGVsLCBub2Nhc2gp
e1xuXHRcdFx0XHRTbGljay51aWRPZihlbCk7XG5cdFx0XHRcdGlmICghbm9jYXNoICYmICFlbC4k
ZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQpJC9pKS50ZXN0KGVsLnRhZ05hbWUpKXtcblx0
XHRcdFx0XHR2YXIgZmlyZUV2ZW50ID0gZWwuZmlyZUV2ZW50O1xuXHRcdFx0XHRcdC8vIHdyYXBw
aW5nIG5lZWRlZCBpbiBJRTcsIG9yIGVsc2UgY3Jhc2hcblx0XHRcdFx0XHRlbC5fZmlyZUV2ZW50
ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZpcmVFdmVudCh0
eXBlLCBldmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRPYmplY3QuYXBwZW5kKGVsLCBF
bGVtZW50LlByb3RvdHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0
fSxcblxuXHRcdFx0b2JqZWN0OiBmdW5jdGlvbihvYmosIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0
aWYgKG9iai50b0VsZW1lbnQpIHJldHVybiB0eXBlcy5lbGVtZW50KG9iai50b0VsZW1lbnQoZG9j
KSwgbm9jYXNoKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHR9O1xuXG5c
dFx0dHlwZXMudGV4dG5vZGUgPSB0eXBlcy53aGl0ZXNwYWNlID0gdHlwZXMud2luZG93ID0gdHlw
ZXMuZG9jdW1lbnQgPSBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH07
XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWwsIG5vY2FzaCwgZG9jKXtcblx0XHRcdGlmIChlbCAm
JiBlbC4kZmFtaWx5ICYmIGVsLnVuaXF1ZU51bWJlcikgcmV0dXJuIGVsO1xuXHRcdFx0dmFyIHR5
cGUgPSB0eXBlT2YoZWwpO1xuXHRcdFx0cmV0dXJuICh0eXBlc1t0eXBlXSkgPyB0eXBlc1t0eXBl
XShlbCwgbm9jYXNoLCBkb2MgfHwgZG9jdW1lbnQpIDogbnVsbDtcblx0XHR9O1xuXG5cdH0pKClc
blxufSk7XG5cbmlmICh3aW5kb3cuJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJywgZnVu
Y3Rpb24oZWwsIG5jKXtcblx0cmV0dXJuIGRvY3VtZW50LmlkKGVsLCBuYywgdGhpcy5kb2N1bWVu
dCk7XG59KTtcblxuV2luZG93LmltcGxlbWVudCh7XG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQ7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5bRG9jdW1lbnQsIEVsZW1l
bnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEVsZW1lbnRzOiBmdW5jdGlvbihleHBy
ZXNzaW9uKXtcblx0XHRyZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMsIGV4cHJlc3Npb24sIG5ldyBF
bGVtZW50cyk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5c
dFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgZXhwcmVzc2lvbikpO1xuXHR9
XG5cbn0pO1xuXG52YXIgY29udGFpbnMgPSB7Y29udGFpbnM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xu
XHRyZXR1cm4gU2xpY2suY29udGFpbnModGhpcywgZWxlbWVudCk7XG59fTtcblxuaWYgKCFkb2N1
bWVudC5jb250YWlucykgRG9jdW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTtcbmlmICghZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY29udGFpbnMpIEVsZW1lbnQuaW1wbGVtZW50KGNvbnRh
aW5zKTtcblxuXG5cbi8vIHRyZWUgd2Fsa2luZ1xuXG52YXIgaW5qZWN0Q29tYmluYXRvciA9IGZ1
bmN0aW9uKGV4cHJlc3Npb24sIGNvbWJpbmF0b3Ipe1xuXHRpZiAoIWV4cHJlc3Npb24pIHJldHVy
biBjb21iaW5hdG9yO1xuXG5cdGV4cHJlc3Npb24gPSBPYmplY3QuY2xvbmUoU2xpY2sucGFyc2Uo
ZXhwcmVzc2lvbikpO1xuXG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lv
bnM7XG5cdGZvciAodmFyIGkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGktLTspXG5cdFx0ZXhwcmVz
c2lvbnNbaV1bMF0uY29tYmluYXRvciA9IGNvbWJpbmF0b3I7XG5cblx0cmV0dXJuIGV4cHJlc3Np
b247XG59O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldE5leHQ6ICd+Jyxcblx0Z2V0UHJldmlv
dXM6ICchficsXG5cdGdldFBhcmVudDogJyEnXG59LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRo
b2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xu
XHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBj
b21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0QWxsTmV4
dDogJ34nLFxuXHRnZXRBbGxQcmV2aW91czogJyF+Jyxcblx0Z2V0U2libGluZ3M6ICd+ficsXG5c
dGdldENoaWxkcmVuOiAnPicsXG5cdGdldFBhcmVudHM6ICchJ1xufSwgZnVuY3Rpb24oY29tYmlu
YXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHBy
ZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50cyhpbmplY3RDb21iaW5hdG9yKGV4
cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuRWxlbWVudC5pbXBsZW1lbnQo
e1xuXG5cdGdldEZpcnN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1l
bnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4n
KSlbMF0pO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJl
dHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHBy
ZXNzaW9uLCAnPicpKS5nZXRMYXN0KCkpO1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LndpbmRvdztcblx0fSxcblxuXHRnZXRE
b2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50O1xuXHR9
LFxuXG5cdGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbihpZCl7XG5cdFx0cmV0dXJuIGRvY3VtZW50
LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcnICsgaWQpLnJlcGxhY2UoLyhcXFcpL2csICdc
XFxcJDEnKSkpO1xuXHR9LFxuXG5cdG1hdGNoOiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRy
ZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0Y2godGhpcywgZXhwcmVzc2lvbik7XG5cdH1c
blxufSk7XG5cblxuXG5pZiAod2luZG93LiQkID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQk
JywgZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0
XHRpZiAodHlwZW9mIHNlbGVjdG9yID09ICdzdHJpbmcnKSByZXR1cm4gU2xpY2suc2VhcmNoKHRo
aXMuZG9jdW1lbnQsIHNlbGVjdG9yLCBuZXcgRWxlbWVudHMpO1xuXHRcdGVsc2UgaWYgKFR5cGUu
aXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50cyhzZWxlY3Rvcik7XG5c
dH1cblx0cmV0dXJuIG5ldyBFbGVtZW50cyhhcmd1bWVudHMpO1xufSk7XG5cbi8vIEluc2VydGVy
c1xuXG52YXIgaW5zZXJ0ZXJzID0ge1xuXG5cdGJlZm9yZTogZnVuY3Rpb24oY29udGV4dCwgZWxl
bWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAocGFy
ZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQpO1xuXHR9LFxuXG5cdGFm
dGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVu
dC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4
dCwgZWxlbWVudC5uZXh0U2libGluZyk7XG5cdH0sXG5cblx0Ym90dG9tOiBmdW5jdGlvbihjb250
ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRleHQpO1xuXHR9LFxu
XG5cdHRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxlbWVudC5pbnNlcnRC
ZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENoaWxkKTtcblx0fVxuXG59O1xuXG5pbnNlcnRl
cnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTtcblxuXG5cbi8vIGdldFByb3BlcnR5IC8gc2V0
UHJvcGVydHlcblxudmFyIHByb3BlcnR5R2V0dGVycyA9IHt9LCBwcm9wZXJ0eVNldHRlcnMgPSB7
fTtcblxuLy8gcHJvcGVydGllc1xuXG52YXIgcHJvcGVydGllcyA9IHt9O1xuQXJyYXkuZm9yRWFj
aChbXG5cdCd0eXBlJywgJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZScsICdhY2Nlc3NLZXknLCAnY2Vs
bFBhZGRpbmcnLCAnY2VsbFNwYWNpbmcnLCAnY29sU3BhbicsXG5cdCdmcmFtZUJvcmRlcicsICdy
b3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCdcbl0sIGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0
cHJvcGVydGllc1twcm9wZXJ0eS50b0xvd2VyQ2FzZSgpXSA9IHByb3BlcnR5O1xufSk7XG5cbnBy
b3BlcnRpZXMuaHRtbCA9ICdpbm5lckhUTUwnO1xucHJvcGVydGllcy50ZXh0ID0gKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnRleHRDb250ZW50ID09IG51bGwpID8gJ2lubmVyVGV4dCc6
ICd0ZXh0Q29udGVudCc7XG5cbk9iamVjdC5mb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHJl
YWwsIGtleSl7XG5cdHByb3BlcnR5U2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSwgdmFsdWUp
e1xuXHRcdG5vZGVbcmVhbF0gPSB2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2tleV0g
PSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZVtyZWFsXTtcblx0fTtcbn0pO1xuXG4v
KjxsdElFOT4qL1xucHJvcGVydHlTZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oKXtcblx0cmV0dXJu
IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRpZiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHls
ZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpO1xuXHRcdGVsc2Ugbm9kZVtwcm9wZXJ0aWVzLnRl
eHRdID0gdmFsdWU7XG5cdH07XG59KShwcm9wZXJ0eVNldHRlcnMudGV4dCk7XG5cbnByb3BlcnR5
R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRlcil7XG5cdHJldHVybiBmdW5jdGlvbihub2Rl
KXtcblx0XHRyZXR1cm4gKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSA/IG5vZGUuaW5uZXJI
VE1MIDogZ2V0dGVyKG5vZGUpO1xuXHR9O1xufSkocHJvcGVydHlHZXR0ZXJzLnRleHQpO1xuLyo8
L2x0SUU5PiovXG5cbi8vIEJvb2xlYW5zXG5cbnZhciBib29scyA9IFtcblx0J2NvbXBhY3QnLCAn
bm93cmFwJywgJ2lzbWFwJywgJ2RlY2xhcmUnLCAnbm9zaGFkZScsICdjaGVja2VkJyxcblx0J2Rp
c2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxlJywgJ3NlbGVjdGVkJywgJ25vcmVzaXplJyxc
blx0J2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywgJ2F1dG9mb2N1cycsICdjb250cm9scycsICdh
dXRvcGxheScsXG5cdCdsb29wJ1xuXTtcblxudmFyIGJvb2xlYW5zID0ge307XG5BcnJheS5mb3JF
YWNoKGJvb2xzLCBmdW5jdGlvbihib29sKXtcblx0dmFyIGxvd2VyID0gYm9vbC50b0xvd2VyQ2Fz
ZSgpO1xuXHRib29sZWFuc1tsb3dlcl0gPSBib29sO1xuXHRwcm9wZXJ0eVNldHRlcnNbbG93ZXJd
ID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbYm9vbF0gPSAhIXZhbHVlO1xuXHR9
O1xuXHRwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
ICEhbm9kZVtib29sXTtcblx0fTtcbn0pO1xuXG4vLyBTcGVjaWFsIGNhc2VzXG5cbk9iamVjdC5h
cHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7XG5cblx0J2NsYXNzJzogZnVuY3Rpb24obm9kZSwgdmFs
dWUpe1xuXHRcdCgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lID0gKHZhbHVl
IHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVlKTtcblx0fSxcblxuXHQn
Zm9yJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnaHRtbEZvcicgaW4gbm9kZSkgPyBu
b2RlLmh0bWxGb3IgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdmb3InLCB2YWx1ZSk7XG5c
dH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdChub2RlLnN0eWxl
KSA/IG5vZGUuc3R5bGUuY3NzVGV4dCA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxl
JywgdmFsdWUpO1xuXHR9LFxuXG5cdCd2YWx1ZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0
XHRub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwpID8gdmFsdWUgOiAnJztcblx0fVxuXG59KTtc
blxucHJvcGVydHlHZXR0ZXJzWydjbGFzcyddID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiAo
J2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSB8fCBudWxsIDogbm9kZS5nZXRB
dHRyaWJ1dGUoJ2NsYXNzJyk7XG59O1xuXG4vKiA8d2Via2l0PiAqL1xudmFyIGVsID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyBJRSBzZXRzIHR5cGUgYXMgcmVhZG9ubHkg
YW5kIHRocm93c1xudHJ5IHsgZWwudHlwZSA9ICdidXR0b24nOyB9IGNhdGNoIChlKXt9XG5pZiAo
ZWwudHlwZSAhPSAnYnV0dG9uJykgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2Rl
LCB2YWx1ZSl7XG5cdG5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgdmFsdWUpO1xufTtcbmVsID0g
bnVsbDtcbi8qIDwvd2Via2l0PiAqL1xuXG4vKjxJRT4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0
NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VT
dHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhU
TUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVy
SFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+
Ki9cblxudmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSwgdm9sYXRp
bGVJbnB1dFZhbHVlLCBodG1sNUlucHV0U3VwcG9ydDtcblxuLy8gIzIxNzhcbmlucHV0LnZhbHVl
ID0gJ3QnO1xuaW5wdXQudHlwZSA9ICdzdWJtaXQnO1xudm9sYXRpbGVJbnB1dFZhbHVlID0gaW5w
dXQudmFsdWUgIT0gJ3QnO1xuXG4vLyAjMjQ0MyAtIElFIHRocm93cyBcIkludmFsaWQgQXJndW1l
bnRcIiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUgaW5wdXQgdHlwZXNcbnRyeSB7XG5cdGlucHV0
LnZhbHVlID0gJyc7XG5cdGlucHV0LnR5cGUgPSAnZW1haWwnO1xuXHRodG1sNUlucHV0U3VwcG9y
dCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJztcbn0gY2F0Y2ggKGUpe31cblxuaW5wdXQgPSBudWxs
O1xuXG5pZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8ICFodG1sNUlucHV0U3VwcG9ydCkgcHJvcGVy
dHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKXtcblx0dHJ5IHtcblx0XHR2YXIg
dmFsdWUgPSBub2RlLnZhbHVlO1xuXHRcdG5vZGUudHlwZSA9IHR5cGU7XG5cdFx0bm9kZS52YWx1
ZSA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKXt9XG59O1xuLyo8L0lFPiovXG5cbi8qIGdldFByb3Bl
cnR5LCBzZXRQcm9wZXJ0eSAqL1xuXG4vKiA8bHRJRTk+ICovXG52YXIgcG9sbHV0ZXNHZXRBdHRy
aWJ1dGUgPSAoZnVuY3Rpb24oZGl2KXtcblx0ZGl2LnJhbmRvbSA9ICdhdHRyaWJ1dGUnO1xuXHRy
ZXR1cm4gKGRpdi5nZXRBdHRyaWJ1dGUoJ3JhbmRvbScpID09ICdhdHRyaWJ1dGUnKTtcbn0pKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxudmFyIGhhc0Nsb25lQnVnID0gKGZ1bmN0
aW9uKHRlc3Qpe1xuXHR0ZXN0LmlubmVySFRNTCA9ICc8b2JqZWN0PjxwYXJhbSBuYW1lPVwic2hv
dWxkX2ZpeFwiIHZhbHVlPVwidGhlIHVua25vd25cIiAvPjwvb2JqZWN0Pic7XG5cdHJldHVybiB0
ZXN0LmNsb25lTm9kZSh0cnVlKS5maXJzdENoaWxkLmNoaWxkTm9kZXMubGVuZ3RoICE9IDE7XG59
KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4vKiA8L2x0SUU5PiAqL1xuXG52YXIg
aGFzQ2xhc3NMaXN0ID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jbGFzc0xpc3Q7
XG5cbnZhciBjbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0dmFyIGNsYXNzTmFtZXMg
PSAoY2xhc3NOYW1lIHx8ICcnKS5jbGVhbigpLnNwbGl0KCcgJyksIHVuaXF1ZXMgPSB7fTtcblx0
cmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0aWYgKGNs
YXNzTmFtZSAhPT0gJycgJiYgIXVuaXF1ZXNbY2xhc3NOYW1lXSkgcmV0dXJuIHVuaXF1ZXNbY2xh
c3NOYW1lXSA9IGNsYXNzTmFtZTtcblx0fSk7XG59O1xuXG52YXIgYWRkVG9DbGFzc0xpc3QgPSBm
dW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKG5hbWUpO1xufTtcblxudmFyIHJl
bW92ZUZyb21DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QucmVt
b3ZlKG5hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNldFByb3BlcnR5OiBm
dW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIHNldHRlciA9IHByb3BlcnR5U2V0dGVyc1tu
YW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChzZXR0ZXIpe1xuXHRcdFx0c2V0dGVyKHRoaXMs
IHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0dmFyIGF0
dHJpYnV0ZVdoaXRlTGlzdDtcblx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmli
dXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdoaXRlTGlzdCcsIHt9KTtc
blx0XHRcdC8qIDwvbHRJRTk+ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRc
dFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0
XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0cmlidXRlV2hpdGVMaXN0
W25hbWVdO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0
dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2YWx1ZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4g
Ki9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRyaWJ1dGVXaGl0ZUxpc3Rb
bmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fVxuXHRcdH1cblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbihhdHRyaWJ1
dGVzKXtcblx0XHRmb3IgKHZhciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlcykgdGhpcy5zZXRQcm9w
ZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlXSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0Z2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBnZXR0ZXIg
PSBwcm9wZXJ0eUdldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRpZiAoZ2V0dGVyKSBy
ZXR1cm4gZ2V0dGVyKHRoaXMpO1xuXHRcdC8qIDxsdElFOT4gKi9cblx0XHRpZiAocG9sbHV0ZXNH
ZXRBdHRyaWJ1dGUpe1xuXHRcdFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUobmFt
ZSksIGF0dHJpYnV0ZVdoaXRlTGlzdCA9IHRoaXMucmV0cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxp
c3QnLCB7fSk7XG5cdFx0XHRpZiAoIWF0dHIpIHJldHVybiBudWxsO1xuXHRcdFx0aWYgKGF0dHIu
ZXhwYW5kbyAmJiAhYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdKXtcblx0XHRcdFx0dmFyIG91dGVy
ID0gdGhpcy5vdXRlckhUTUw7XG5cdFx0XHRcdC8vIHNlZ21lbnQgYnkgdGhlIG9wZW5pbmcgdGFn
IGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRlIG5hbWVcblx0XHRcdFx0aWYgKG91dGVyLnN1
YnN0cigwLCBvdXRlci5zZWFyY2goL1xcLz9bJ1wiXT8+KD8hW148XSo8WydcIl0pLykpLmluZGV4
T2YobmFtZSkgPCAwKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0YXR0cmlidXRlV2hpdGVMaXN0W25h
bWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyogPC9sdElFOT4gKi9cblx0XHR2YXIg
cmVzdWx0ID0gU2xpY2suZ2V0QXR0cmlidXRlKHRoaXMsIG5hbWUpO1xuXHRcdHJldHVybiAoIXJl
c3VsdCAmJiAhU2xpY2suaGFzQXR0cmlidXRlKHRoaXMsIG5hbWUpKSA/IG51bGwgOiByZXN1bHQ7
XG5cdH0sXG5cblx0Z2V0UHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXJncyA9IEFy
cmF5LmNvbnZlcnQoYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gYXJncy5tYXAodGhpcy5nZXRQcm9w
ZXJ0eSwgdGhpcykuYXNzb2NpYXRlKGFyZ3MpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnR5OiBm
dW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShuYW1lLCBudWxsKTtc
blx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdEFycmF5LmVhY2go
YXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKXtcblx0XHR2YXIgcHJvcGVydHkg
PSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LnNl
dCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB0aGlzLnNldFByb3BlcnR5KHBy
b3AsIHZhbHVlKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdGdldDogZnVuY3Rpb24ocHJv
cCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdHJl
dHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5LmdldC5hcHBseSh0aGlz
KSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7XG5cdH0ub3ZlcmxvYWRHZXR0ZXIoKSxcblxuXHRl
cmFzZTogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0
aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lcmFzZSkgPyBwcm9wZXJ0eS5l
cmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3ZlUHJvcGVydHkocHJvcCk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNz
TmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5c
dH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiBjbGFzc2VzKHRoaXMuY2xhc3NO
YW1lKS5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkZENsYXNzOiBoYXNDbGFzc0xp
c3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNo
KGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc2VzKGNsYXNzTmFtZSArICcg
JyArIHRoaXMuY2xhc3NOYW1lKS5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0
Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2gocmVtb3ZlRnJvbUNsYXNzTGlzdCwgdGhpcyk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHZhciBjbGFz
c05hbWVzID0gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSk7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUp
LmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xhc3NOYW1lcyk7XG5cdFx0dGhpcy5jbGFzc05h
bWUgPSBjbGFzc05hbWVzLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0
b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3JjZSl7XG5cdFx0aWYgKGZvcmNlID09
IG51bGwpIGZvcmNlID0gIXRoaXMuaGFzQ2xhc3MoY2xhc3NOYW1lKTtcblx0XHRyZXR1cm4gKGZv
cmNlKSA/IHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1lKSA6IHRoaXMucmVtb3ZlQ2xhc3MoY2xhc3NO
YW1lKTtcblx0fSxcblxuXHRhZG9wdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgcGFyZW50ID0gdGhp
cywgZnJhZ21lbnQsIGVsZW1lbnRzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLCBsZW5ndGgg
PSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCA+IDEpIHBhcmVudCA9IGZyYWdtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG5cdFx0Zm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IGRvY3VtZW50LmlkKGVs
ZW1lbnRzW2ldLCB0cnVlKTtcblx0XHRcdGlmIChlbGVtZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQo
ZWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyYWdtZW50KSB0aGlzLmFwcGVuZENoaWxkKGZy
YWdtZW50KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFwcGVuZFRleHQ6IGZ1bmN0
aW9uKHRleHQsIHdoZXJlKXtcblx0XHRyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQo
KS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUpO1xuXHR9LFxuXG5cdGdyYWI6IGZ1bmN0aW9uKGVs
LCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShkb2N1bWVudC5pZChl
bCwgdHJ1ZSksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGluamVjdDogZnVu
Y3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKHRoaXMs
IGRvY3VtZW50LmlkKGVsLCB0cnVlKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVw
bGFjZXM6IGZ1bmN0aW9uKGVsKXtcblx0XHRlbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVlKTtcblx0
XHRlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLCBlbCk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0d3JhcHM6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0ZWwgPSBkb2N1bWVu
dC5pZChlbCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZXMoZWwpLmdyYWIoZWwsIHdo
ZXJlKTtcblx0fSxcblxuXHRnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNlbGVj
dGVkSW5kZXg7IC8vIFNhZmFyaSAzLjIuMVxuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXku
Y29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5jdGlvbihvcHRpb24pe1xuXHRcdFx0cmV0
dXJuIG9wdGlvbi5zZWxlY3RlZDtcblx0XHR9KSk7XG5cdH0sXG5cblx0dG9RdWVyeVN0cmluZzog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblx0XHR0aGlzLmdldEVsZW1l
bnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rpb24oZWwpe1xuXHRcdFx0
dmFyIHR5cGUgPSBlbC50eXBlO1xuXHRcdFx0aWYgKCFlbC5uYW1lIHx8IGVsLmRpc2FibGVkIHx8
IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAncmVzZXQnIHx8IHR5cGUgPT0gJ2ZpbGUnIHx8
IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG5cdFx0XHR2YXIgdmFsdWUgPSAoZWwuZ2V0KCd0
YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxlY3RlZCgpLm1hcChmdW5jdGlvbihvcHQpe1xu
XHRcdFx0XHQvLyBJRVxuXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuaWQob3B0KS5nZXQoJ3ZhbHVl
Jyk7XG5cdFx0XHR9KSA6ICgodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94Jykg
JiYgIWVsLmNoZWNrZWQpID8gbnVsbCA6IGVsLmdldCgndmFsdWUnKTtcblxuXHRcdFx0QXJyYXku
Y29udmVydCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2YWwpe1xuXHRcdFx0XHRpZiAodHlwZW9mIHZh
bCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVzaChlbmNvZGVVUklDb21wb25lbnQoZWwu
bmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsKSk7XG5cdFx0XHR9KTtcblx0XHR9
KTtcblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG5cbi8v
IGFwcGVuZEhUTUxcblxudmFyIGFwcGVuZEluc2VydGVycyA9IHtcblx0YmVmb3JlOiAnYmVmb3Jl
QmVnaW4nLFxuXHRhZnRlcjogJ2FmdGVyRW5kJyxcblx0Ym90dG9tOiAnYmVmb3JlRW5kJyxcblx0
dG9wOiAnYWZ0ZXJCZWdpbicsXG5cdGluc2lkZTogJ2JlZm9yZUVuZCdcbn07XG5cbkVsZW1lbnQu
aW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNlcnRBZGphY2VudEhUTUwnIGluIGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0aW9uKGh0bWwsIHdoZXJlKXtcblx0dGhpcy5p
bnNlcnRBZGphY2VudEhUTUwoYXBwZW5kSW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSwgaHRt
bCk7XG5cdHJldHVybiB0aGlzO1xufSA6IGZ1bmN0aW9uKGh0bWwsIHdoZXJlKXtcblx0dmFyIHRl
bXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6IGh0bWx9KSxcblx0XHRjaGlsZHJlbiA9IHRl
bXAuY2hpbGROb2Rlcyxcblx0XHRmcmFnbWVudCA9IHRlbXAuZmlyc3RDaGlsZDtcblxuXHRpZiAo
IWZyYWdtZW50KSByZXR1cm4gdGhpcztcblx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpe1xuXHRc
dGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZyYWdt
ZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcblx0XHR9XG5cdH1cblxuXHRpbnNlcnRlcnNb
d2hlcmUgfHwgJ2JvdHRvbSddKGZyYWdtZW50LCB0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59KTtc
blxudmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0ge307XG5cbnZhciBnZXQgPSBmdW5jdGlv
bih1aWQpe1xuXHRyZXR1cm4gKHN0b3JhZ2VbdWlkXSB8fCAoc3RvcmFnZVt1aWRdID0ge30pKTtc
bn07XG5cbnZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgdWlkID0gaXRlbS51bmlx
dWVOdW1iZXI7XG5cdGlmIChpdGVtLnJlbW92ZUV2ZW50cykgaXRlbS5yZW1vdmVFdmVudHMoKTtc
blx0aWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBpdGVtLmNsZWFyQXR0cmlidXRlcygpO1xuXHRp
ZiAodWlkICE9IG51bGwpe1xuXHRcdGRlbGV0ZSBjb2xsZWN0ZWRbdWlkXTtcblx0XHRkZWxldGUg
c3RvcmFnZVt1aWRdO1xuXHR9XG5cdHJldHVybiBpdGVtO1xufTtcblxudmFyIGZvcm1Qcm9wcyA9
IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdzZWxlY3RlZCcsIHRleHRhcmVhOiAndmFsdWUn
fTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGRlc3Ryb3k6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGNoaWxkcmVuID0gY2xlYW4odGhpcykuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0
XHRBcnJheS5lYWNoKGNoaWxkcmVuLCBjbGVhbik7XG5cdFx0RWxlbWVudC5kaXNwb3NlKHRoaXMp
O1xuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdEFy
cmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQuZGlzcG9zZSk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
KHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcykgOiB0
aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihjb250ZW50cywga2VlcGlkKXtcblx0XHRj
b250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTtcblx0XHR2YXIgY2xvbmUgPSB0aGlzLmNsb25l
Tm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwgdGUgPSBbdGhpc10sIGk7XG5cblx0XHRpZiAo
Y29udGVudHMpe1xuXHRcdFx0Y2UuYXBwZW5kKEFycmF5LmNvbnZlcnQoY2xvbmUuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdFx0dGUuYXBwZW5kKEFycmF5LmNvbnZlcnQodGhpcy5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gY2UubGVu
Z3RoOyBpLS07KXtcblx0XHRcdHZhciBub2RlID0gY2VbaV0sIGVsZW1lbnQgPSB0ZVtpXTtcblx0
XHRcdGlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdC8qPGx0
SUU5PiovXG5cdFx0XHRpZiAobm9kZS5jbGVhckF0dHJpYnV0ZXMpe1xuXHRcdFx0XHRub2RlLmNs
ZWFyQXR0cmlidXRlcygpO1xuXHRcdFx0XHRub2RlLm1lcmdlQXR0cmlidXRlcyhlbGVtZW50KTtc
blx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3VuaXF1ZU51bWJlcicpO1xuXHRcdFx0XHRp
ZiAobm9kZS5vcHRpb25zKXtcblx0XHRcdFx0XHR2YXIgbm8gPSBub2RlLm9wdGlvbnMsIGVvID0g
ZWxlbWVudC5vcHRpb25zO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSBuby5sZW5ndGg7IGotLTsp
IG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0ZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0
XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHByb3AgPSBmb3JtUHJvcHNbZWxlbWVudC50YWdO
YW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdFx0aWYgKHByb3AgJiYgZWxlbWVudFtwcm9wXSkgbm9k
ZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07XG5cdFx0fVxuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRp
ZiAoaGFzQ2xvbmVCdWcpe1xuXHRcdFx0dmFyIGNvID0gY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpO1xu
XHRcdFx0Zm9yIChpID0gY28ubGVuZ3RoOyBpLS07KSBjb1tpXS5vdXRlckhUTUwgPSB0b1tpXS5v
dXRlckhUTUw7XG5cdFx0fVxuXHRcdC8qPC9sdElFOT4qL1xuXHRcdHJldHVybiBkb2N1bWVudC5p
ZChjbG9uZSk7XG5cdH1cblxufSk7XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZv
a2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xu
XHRcdGlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtc
blx0XHRcdGNvbGxlY3RlZFtTbGljay51aWRPZih0aGlzKV0gPSB0aGlzO1xuXHRcdH1cblx0XHRp
ZiAodGhpcy5hZGRFdmVudExpc3RlbmVyKSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZm4s
ICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUs
IGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVMaXN0ZW5lcjogZnVuY3Rp
b24odHlwZSwgZm4pe1xuXHRcdGlmICh0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHRoaXMucmVt
b3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhp
cy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0eSwgZGZsdCl7XG5cdFx0dmFyIHN0b3JhZ2Ug
PSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0
aWYgKGRmbHQgIT0gbnVsbCAmJiBwcm9wID09IG51bGwpIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5
XSA9IGRmbHQ7XG5cdFx0cmV0dXJuIHByb3AgIT0gbnVsbCA/IHByb3AgOiBudWxsO1xuXHR9LFxu
XG5cdHN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRcdHZhciBzdG9yYWdlID0g
Z2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRzdG9yYWdlW3Byb3BlcnR5XSA9IHZhbHVlO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVsaW1pbmF0ZTogZnVuY3Rpb24ocHJvcGVydHkp
e1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRkZWxldGUg
c3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qPGx0
SUU5PiovXG5pZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cil7XG5cdHZhciBnYyA9IGZ1bmN0aW9uKCl7XG5cdFx0T2JqZWN0LmVhY2goY29sbGVjdGVkLCBj
bGVhbik7XG5cdFx0aWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFnZSkgQ29sbGVjdEdhcmJhZ2UoKTtc
blx0XHR3aW5kb3cucmVtb3ZlTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcblx0fTtcblx0d2luZG93
LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG59XG4vKjwvbHRJRTk+Ki9cblxuRWxlbWVudC5Q
cm9wZXJ0aWVzID0ge307XG5cblxuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGUgPSB7XG5cblx0
c2V0OiBmdW5jdGlvbihzdHlsZSl7XG5cdFx0dGhpcy5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7XG5c
dH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnN0eWxlLmNzc1RleHQ7
XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zdHlsZS5jc3NUZXh0ID0g
Jyc7XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnRhZyA9IHtcblxuXHRnZXQ6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5c
bn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy5odG1sID0ge1xuXG5cdHNldDogZnVuY3Rpb24oaHRt
bCl7XG5cdFx0aWYgKGh0bWwgPT0gbnVsbCkgaHRtbCA9ICcnO1xuXHRcdGVsc2UgaWYgKHR5cGVP
ZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRtbC5qb2luKCcnKTtcblxuXHRcdC8qPGx0SUU5
PiovXG5cdFx0aWYgKHRoaXMuc3R5bGVTaGVldCAmJiAhY2FuQ2hhbmdlU3R5bGVIVE1MKSB0aGlz
LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGh0bWw7XG5cdFx0ZWxzZSAvKjwvbHRJRTk+Ki90aGlzLmlu
bmVySFRNTCA9IGh0bWw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2V0
KCdodG1sJywgJycpO1xuXHR9XG5cbn07XG5cbnZhciBzdXBwb3J0c0hUTUw1RWxlbWVudHMgPSB0
cnVlLCBzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gdHJ1ZSwgc3VwcG9ydHNUUklubmVySFRNTCA9
IHRydWU7XG5cbi8qPGx0SUU5PiovXG4vLyB0ZWNobmlxdWUgYnkgamRiYXJsZXR0IC0gaHR0cDov
L2pkYmFydGxldHQuY29tL2lubmVyc2hpdi9cbnZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTtcbnZhciBmcmFnbWVudDtcbmRpdi5pbm5lckhUTUwgPSAnPG5hdj48L25hdj4n
O1xuc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gKGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxKTtc
bmlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblx0dmFyIHRhZ3MgPSAnYWJiciBhcnRpY2xl
IGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2NhcHRpb24gZmlndXJlIGZv
b3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBwcm9ncmVzcyBzZWN0aW9u
IHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAnKTtcblx0ZnJhZ21lbnQgPSBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGwgPSB0YWdzLmxlbmd0aDtcblx0d2hpbGUgKGwtLSkg
ZnJhZ21lbnQuY3JlYXRlRWxlbWVudCh0YWdzW2xdKTtcbn1cbmRpdiA9IG51bGw7XG4vKjwvbHRJ
RTk+Ki9cblxuLyo8SUU+Ki9cbnN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSBGdW5jdGlvbi5hdHRl
bXB0KGZ1bmN0aW9uKCl7XG5cdHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rh
YmxlJyk7XG5cdHRhYmxlLmlubmVySFRNTCA9ICc8dHI+PHRkPjwvdGQ+PC90cj4nO1xuXHRyZXR1
cm4gdHJ1ZTtcbn0pO1xuXG4vKjxsdEZGND4qL1xudmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgndHInKSwgaHRtbCA9ICc8dGQ+PC90ZD4nO1xudHIuaW5uZXJIVE1MID0gaHRtbDtcbnN1
cHBvcnRzVFJJbm5lckhUTUwgPSAodHIuaW5uZXJIVE1MID09IGh0bWwpO1xudHIgPSBudWxsO1xu
Lyo8L2x0RkY0PiovXG5cbmlmICghc3VwcG9ydHNUYWJsZUlubmVySFRNTCB8fCAhc3VwcG9ydHNU
UklubmVySFRNTCB8fCAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblxuXHRFbGVtZW50LlByb3Bl
cnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0KXtcblxuXHRcdHZhciB0cmFuc2xhdGlvbnMg
PSB7XG5cdFx0XHR0YWJsZTogWzEsICc8dGFibGU+JywgJzwvdGFibGU+J10sXG5cdFx0XHRzZWxl
Y3Q6IFsxLCAnPHNlbGVjdD4nLCAnPC9zZWxlY3Q+J10sXG5cdFx0XHR0Ym9keTogWzIsICc8dGFi
bGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG5cdFx0XHR0cjogWzMsICc8dGFibGU+
PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J11cblx0XHR9O1xuXG5cdFx0dHJh
bnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25zLnRmb290ID0gdHJhbnNsYXRpb25zLnRib2R5
O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGh0bWwpe1xuXG5cdFx0XHQvKjxsdElFOT4qL1xuXHRc
dFx0aWYgKHRoaXMuc3R5bGVTaGVldCkgcmV0dXJuIHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXHRc
dFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgd3JhcCA9IHRyYW5zbGF0aW9uc1t0aGlzLmdldCgn
dGFnJyldO1xuXHRcdFx0aWYgKCF3cmFwICYmICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIHdyYXAg
PSBbMCwgJycsICcnXTtcblx0XHRcdGlmICghd3JhcCkgcmV0dXJuIHNldC5jYWxsKHRoaXMsIGh0
bWwpO1xuXG5cdFx0XHR2YXIgbGV2ZWwgPSB3cmFwWzBdLCB3cmFwcGVyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2JyksIHRhcmdldCA9IHdyYXBwZXI7XG5cdFx0XHRpZiAoIXN1cHBvcnRz
SFRNTDVFbGVtZW50cykgZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFw
cGVyLmlubmVySFRNTCA9IFt3cmFwWzFdLCBodG1sLCB3cmFwWzJdXS5mbGF0dGVuKCkuam9pbign
Jyk7XG5cdFx0XHR3aGlsZSAobGV2ZWwtLSkgdGFyZ2V0ID0gdGFyZ2V0LmZpcnN0Q2hpbGQ7XG5c
dFx0XHR0aGlzLmVtcHR5KCkuYWRvcHQodGFyZ2V0LmNoaWxkTm9kZXMpO1xuXHRcdFx0aWYgKCFz
dXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuXHRc
dFx0d3JhcHBlciA9IG51bGw7XG5cdFx0fTtcblxuXHR9KShFbGVtZW50LlByb3BlcnRpZXMuaHRt
bC5zZXQpO1xufVxuLyo8L0lFPiovXG5cbi8qPGx0SUU5PiovXG52YXIgdGVzdEZvcm0gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG50ZXN0Rm9ybS5pbm5lckhUTUwgPSAnPHNlbGVj
dD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4nO1xuXG5pZiAodGVzdEZvcm0uZmlyc3RDaGls
ZC52YWx1ZSAhPSAncycpIEVsZW1lbnQuUHJvcGVydGllcy52YWx1ZSA9IHtcblxuXHRzZXQ6IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGFnID0gdGhpcy5nZXQoJ3RhZycpO1xuXHRcdGlmICh0
YWcgIT0gJ3NlbGVjdCcpIHJldHVybiB0aGlzLnNldFByb3BlcnR5KCd2YWx1ZScsIHZhbHVlKTtc
blx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxlbWVudHMoJ29wdGlvbicpO1xuXHRcdHZhbHVl
ID0gU3RyaW5nKHZhbHVlKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIG9wdGlvbiA9IG9wdGlvbnNbaV0sXG5cdFx0XHRcdGF0dHIgPSBv
cHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKSxcblx0XHRcdFx0b3B0aW9uVmFsdWUgPSAo
YXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0
Jyk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0aW9uLnNlbGVj
dGVkID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBv
cHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0KCd0YWcnKTtcblxuXHRcdGlmICh0YWcgIT0g
J3NlbGVjdCcgJiYgdGFnICE9ICdvcHRpb24nKSByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eSgndmFs
dWUnKTtcblxuXHRcdGlmICh0YWcgPT0gJ3NlbGVjdCcgJiYgIShvcHRpb24gPSBvcHRpb24uZ2V0
U2VsZWN0ZWQoKVswXSkpIHJldHVybiAnJztcblxuXHRcdHZhciBhdHRyID0gb3B0aW9uLmdldEF0
dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7XG5cdFx0cmV0dXJuIChhdHRyICYmIGF0dHIuc3BlY2lmaWVk
KSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0fVxuXG59O1xudGVzdEZv
cm0gPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5pZiAoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKSkgRWxlbWVudC5Qcm9wZXJ0aWVz
LmlkID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKGlkKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRy
aWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5pZCB8fCBudWxsO1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0
XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gJyc7XG5cdH1c
bn07XG4vKjwvSUU+Ki9cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFdmVudFxuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5cGUsIHRvIG1ha2UgdGhlIGV2ZW50IG9iamVj
dCBjcm9zcy1icm93c2VyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWly
ZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgRnVuY3Rpb24sIFN0cmluZywgT2JqZWN0XVxu
XG5wcm92aWRlczogRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIF9rZXlz
ID0ge307XG52YXIgbm9ybWFsaXplV2hlZWxTcGVlZCA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFy
IG5vcm1hbGl6ZWQ7XG5cdGlmIChldmVudC53aGVlbERlbHRhKXtcblx0XHRub3JtYWxpemVkID0g
ZXZlbnQud2hlZWxEZWx0YSAlIDEyMCA9PSAwID8gZXZlbnQud2hlZWxEZWx0YSAvIDEyMCA6IGV2
ZW50LndoZWVsRGVsdGEgLyAxMjtcblx0fSBlbHNlIHtcblx0XHR2YXIgcmF3QW1vdW50ID0gZXZl
bnQuZGVsdGFZIHx8IGV2ZW50LmRldGFpbCB8fCAwO1xuXHRcdG5vcm1hbGl6ZWQgPSAtKHJhd0Ft
b3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMgOiByYXdBbW91bnQgKiAxMCk7XG5cdH1cblx0
cmV0dXJuIG5vcm1hbGl6ZWQ7XG59O1xuXG52YXIgRE9NRXZlbnQgPSB0aGlzLkRPTUV2ZW50ID0g
bmV3IFR5cGUoJ0RPTUV2ZW50JywgZnVuY3Rpb24oZXZlbnQsIHdpbil7XG5cdGlmICghd2luKSB3
aW4gPSB3aW5kb3c7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luLmV2ZW50O1xuXHRpZiAoZXZlbnQu
JGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7XG5cdHRoaXMuZXZlbnQgPSBldmVudDtcblx0dGhpcy4k
ZXh0ZW5kZWQgPSB0cnVlO1xuXHR0aGlzLnNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG5cdHRoaXMu
Y29udHJvbCA9IGV2ZW50LmN0cmxLZXk7XG5cdHRoaXMuYWx0ID0gZXZlbnQuYWx0S2V5O1xuXHR0
aGlzLm1ldGEgPSBldmVudC5tZXRhS2V5O1xuXHR2YXIgdHlwZSA9IHRoaXMudHlwZSA9IGV2ZW50
LnR5cGU7XG5cdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtc
blx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykgdGFyZ2V0ID0gdGFyZ2V0
LnBhcmVudE5vZGU7XG5cdHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0KTtcblxuXHRp
ZiAodHlwZS5pbmRleE9mKCdrZXknKSA9PSAwKXtcblx0XHR2YXIgY29kZSA9IHRoaXMuY29kZSA9
IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtcblx0XHRpZiAoIXRoaXMuc2hpZnQgfHwg
dHlwZSAhPSAna2V5cHJlc3MnKSB0aGlzLmtleSA9IF9rZXlzW2NvZGVdO1xuXHRcdGlmICh0eXBl
ID09ICdrZXlkb3duJyB8fCB0eXBlID09ICdrZXl1cCcpe1xuXHRcdFx0aWYgKGNvZGUgPiAxMTEg
JiYgY29kZSA8IDEyNCkgdGhpcy5rZXkgPSAnZicgKyAoY29kZSAtIDExMSk7XG5cdFx0XHRlbHNl
IGlmIChjb2RlID4gOTUgJiYgY29kZSA8IDEwNikgdGhpcy5rZXkgPSBjb2RlIC0gOTY7XG5cdFx0
fVxuXHRcdGlmICh0aGlzLmtleSA9PSBudWxsKSB0aGlzLmtleSA9IFN0cmluZy5mcm9tQ2hhckNv
ZGUoY29kZSkudG9Mb3dlckNhc2UoKTtcblx0fSBlbHNlIGlmICh0eXBlID09ICdjbGljaycgfHwg
dHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0gJ2NvbnRleHRtZW51JyB8fCB0eXBlID09ICd3
aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUuaW5kZXhPZignbW91c2Un
KSA9PSAwKXtcblx0XHR2YXIgZG9jID0gd2luLmRvY3VtZW50O1xuXHRcdGRvYyA9ICghZG9jLmNv
bXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKSA/IGRvYy5odG1sIDog
ZG9jLmJvZHk7XG5cdFx0dGhpcy5wYWdlID0ge1xuXHRcdFx0eDogKGV2ZW50LnBhZ2VYICE9IG51
bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYICsgZG9jLnNjcm9sbExlZnQsXG5cdFx0
XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFkg
KyBkb2Muc2Nyb2xsVG9wXG5cdFx0fTtcblx0XHR0aGlzLmNsaWVudCA9IHtcblx0XHRcdHg6IChl
dmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBhZ2VYT2Zmc2V0IDogZXZl
bnQuY2xpZW50WCxcblx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZ
IC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xpZW50WVxuXHRcdH07XG5cdFx0aWYgKHR5cGUg
PT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnbW91c2V3
aGVlbCcpIHRoaXMud2hlZWwgPSBub3JtYWxpemVXaGVlbFNwZWVkKGV2ZW50KTtcblx0XHR0aGlz
LnJpZ2h0Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0gMyB8fCBldmVudC5idXR0b24gPT0gMik7XG5c
dFx0aWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VvdXQnIHx8IHR5cGUg
PT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21vdXNlbGVhdmUnKXtcblx0XHRcdHZhciBvdmVy
VGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZWVudGVyJztcblx0
XHRcdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudFsob3ZlclRhcmdl
dCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQnXTtcblx0XHRcdHdoaWxlIChyZWxhdGVkICYm
IHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTtcblx0
XHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3VtZW50LmlkKHJlbGF0ZWQpO1xuXHRcdH1cblx0
fSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNoJykgPT0gMCB8fCB0eXBlLmluZGV4T2YoJ2dl
c3R1cmUnKSA9PSAwKXtcblx0XHR0aGlzLnJvdGF0aW9uID0gZXZlbnQucm90YXRpb247XG5cdFx0
dGhpcy5zY2FsZSA9IGV2ZW50LnNjYWxlO1xuXHRcdHRoaXMudGFyZ2V0VG91Y2hlcyA9IGV2ZW50
LnRhcmdldFRvdWNoZXM7XG5cdFx0dGhpcy5jaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRU
b3VjaGVzO1xuXHRcdHZhciB0b3VjaGVzID0gdGhpcy50b3VjaGVzID0gZXZlbnQudG91Y2hlcztc
blx0XHRpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXtcblx0XHRcdHZhciB0b3VjaCA9IHRvdWNo
ZXNbMF07XG5cdFx0XHR0aGlzLnBhZ2UgPSB7eDogdG91Y2gucGFnZVgsIHk6IHRvdWNoLnBhZ2VZ
fTtcblx0XHRcdHRoaXMuY2xpZW50ID0ge3g6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVu
dFl9O1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhpcy5jbGllbnQpIHRoaXMuY2xpZW50ID0ge307
XG5cdGlmICghdGhpcy5wYWdlKSB0aGlzLnBhZ2UgPSB7fTtcbn0pO1xuXG5ET01FdmVudC5pbXBs
ZW1lbnQoe1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMucHJldmVudERl
ZmF1bHQoKS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fSxcblxuXHRzdG9wUHJvcGFnYXRpb246IGZ1
bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB0aGlzLmV2ZW50
LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB0
cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlv
bigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KSB0aGlzLmV2ZW50LnByZXZl
bnREZWZhdWx0KCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleSA9IGZ1bmN0
aW9uKGNvZGUsIGtleSl7XG5cdF9rZXlzW2NvZGVdID0ga2V5O1xuXHRyZXR1cm4gdGhpcztcbn07
XG5cbkRPTUV2ZW50LmRlZmluZUtleXMgPSBET01FdmVudC5kZWZpbmVLZXkub3ZlcmxvYWRTZXR0
ZXIodHJ1ZSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleXMoe1xuXHQnMzgnOiAndXAnLCAnNDAnOiAn
ZG93bicsICczNyc6ICdsZWZ0JywgJzM5JzogJ3JpZ2h0Jyxcblx0JzI3JzogJ2VzYycsICczMic6
ICdzcGFjZScsICc4JzogJ2JhY2tzcGFjZScsICc5JzogJ3RhYicsXG5cdCc0Nic6ICdkZWxldGUn
LCAnMTMnOiAnZW50ZXInXG59KTtcblxufSkoKTtcblxuXG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6
IEVsZW1lbnQuRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEVsZW1lbnQgbWV0aG9kcyBm
b3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBmaWxlIGFsc28gaW5jbHVkZXMgbW91c2VlbnRl
ciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVudCBFdmVudHMsIGlmIG5lY2Vzc2FyeS5cblxu
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRXZlbnRd
XG5cbnByb3ZpZGVzOiBFbGVtZW50LkV2ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bkVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5jdGlvbihldmVudHMpe1xuXHR0
aGlzLmFkZEV2ZW50cyhldmVudHMpO1xufX07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50
XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4p
e1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnLCB7fSk7XG5cdFx0aWYg
KCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwgdmFsdWVzOiBbXX07XG5c
dFx0aWYgKGV2ZW50c1t0eXBlXS5rZXlzLmNvbnRhaW5zKGZuKSkgcmV0dXJuIHRoaXM7XG5cdFx0
ZXZlbnRzW3R5cGVdLmtleXMucHVzaChmbik7XG5cdFx0dmFyIHJlYWxUeXBlID0gdHlwZSxcblx0
XHRcdGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdLFxuXHRcdFx0Y29uZGl0aW9uID0gZm4s
XG5cdFx0XHRzZWxmID0gdGhpcztcblx0XHRpZiAoY3VzdG9tKXtcblx0XHRcdGlmIChjdXN0b20u
b25BZGQpIGN1c3RvbS5vbkFkZC5jYWxsKHRoaXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0
b20uY29uZGl0aW9uKXtcblx0XHRcdFx0Y29uZGl0aW9uID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRc
dFx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uLmNhbGwodGhpcywgZXZlbnQsIHR5cGUpKSByZXR1
cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRc
dH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHJlYWxUeXBlID0gRnVuY3Rpb24u
Y29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0dmFyIGRl
Zm4gPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZuLmNhbGwoc2VsZik7XG5cdFx0fTtcblx0
XHR2YXIgbmF0aXZlRXZlbnQgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50c1tyZWFsVHlwZV07XG5cdFx0
aWYgKG5hdGl2ZUV2ZW50KXtcblx0XHRcdGlmIChuYXRpdmVFdmVudCA9PSAyKXtcblx0XHRcdFx0
ZGVmbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRldmVudCA9IG5ldyBET01FdmVudChl
dmVudCwgc2VsZi5nZXRXaW5kb3coKSk7XG5cdFx0XHRcdFx0aWYgKGNvbmRpdGlvbi5jYWxsKHNl
bGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0b3AoKTtcblx0XHRcdFx0fTtcblx0XHRcdH1c
blx0XHRcdHRoaXMuYWRkTGlzdGVuZXIocmVhbFR5cGUsIGRlZm4sIGFyZ3VtZW50c1syXSk7XG5c
dFx0fVxuXHRcdGV2ZW50c1t0eXBlXS52YWx1ZXMucHVzaChkZWZuKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBl
dmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZl
bnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHR2YXIgbGlzdCA9IGV2ZW50c1t0eXBlXTtcblx0
XHR2YXIgaW5kZXggPSBsaXN0LmtleXMuaW5kZXhPZihmbik7XG5cdFx0aWYgKGluZGV4ID09IC0x
KSByZXR1cm4gdGhpcztcblx0XHR2YXIgdmFsdWUgPSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0
ZGVsZXRlIGxpc3Qua2V5c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3QudmFsdWVzW2luZGV4XTtc
blx0XHR2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV07XG5cdFx0aWYgKGN1c3RvbSl7
XG5cdFx0XHRpZiAoY3VzdG9tLm9uUmVtb3ZlKSBjdXN0b20ub25SZW1vdmUuY2FsbCh0aGlzLCBm
biwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0
KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gKEVsZW1l
bnQuTmF0aXZlRXZlbnRzW3R5cGVdKSA/IHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgdmFsdWUs
IGFyZ3VtZW50c1syXSkgOiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZl
bnRzKXtcblx0XHRmb3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQoZXZlbnQs
IGV2ZW50c1tldmVudF0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50
czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50
cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVF
dmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRc
dHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghYXR0YWNo
ZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICghZXZlbnRzKXtcblx0XHRcdGZvciAodHlwZSBpbiBh
dHRhY2hlZCkgdGhpcy5yZW1vdmVFdmVudHModHlwZSk7XG5cdFx0XHR0aGlzLmVsaW1pbmF0ZSgn
ZXZlbnRzJyk7XG5cdFx0fSBlbHNlIGlmIChhdHRhY2hlZFtldmVudHNdKXtcblx0XHRcdGF0dGFj
aGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVF
dmVudChldmVudHMsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0ZGVsZXRlIGF0dGFjaGVk
W2V2ZW50c107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDog
ZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJp
ZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4g
dGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblxuXHRcdGV2ZW50c1t0eXBl
XS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxh
eSwgdGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0s
IHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lRXZlbnRzOiBmdW5jdGlv
bihmcm9tLCB0eXBlKXtcblx0XHRmcm9tID0gZG9jdW1lbnQuaWQoZnJvbSk7XG5cdFx0dmFyIGV2
ZW50cyA9IGZyb20ucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4g
dGhpcztcblx0XHRpZiAoIXR5cGUpe1xuXHRcdFx0Zm9yICh2YXIgZXZlbnRUeXBlIGluIGV2ZW50
cykgdGhpcy5jbG9uZUV2ZW50cyhmcm9tLCBldmVudFR5cGUpO1xuXHRcdH0gZWxzZSBpZiAoZXZl
bnRzW3R5cGVdKXtcblx0XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xu
XHRcdFx0XHR0aGlzLmFkZEV2ZW50KHR5cGUsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMgPSB7
XG5cdGNsaWNrOiAyLCBkYmxjbGljazogMiwgbW91c2V1cDogMiwgbW91c2Vkb3duOiAyLCBjb250
ZXh0bWVudTogMiwgLy9tb3VzZSBidXR0b25zXG5cdHdoZWVsOiAyLCBtb3VzZXdoZWVsOiAyLCBE
T01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVlbFxuXHRtb3VzZW92ZXI6IDIsIG1vdXNlb3V0
OiAyLCBtb3VzZW1vdmU6IDIsIHNlbGVjdHN0YXJ0OiAyLCBzZWxlY3RlbmQ6IDIsIC8vbW91c2Ug
bW92ZW1lbnRcblx0a2V5ZG93bjogMiwga2V5cHJlc3M6IDIsIGtleXVwOiAyLCAvL2tleWJvYXJk
XG5cdG9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBtb2JpbGVcblx0dG91Y2hzdGFydDogMiwgdG91
Y2htb3ZlOiAyLCB0b3VjaGVuZDogMiwgdG91Y2hjYW5jZWw6IDIsIC8vIHRvdWNoXG5cdGdlc3R1
cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwgZ2VzdHVyZWVuZDogMiwgLy8gZ2VzdHVyZVxu
XHRmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAyLCByZXNldDogMiwgc2VsZWN0OiAyLCBzdWJt
aXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9mb3JtIGVsZW1lbnRzXG5cdGxvYWQ6IDIsIHVu
bG9hZDogMSwgYmVmb3JldW5sb2FkOiAyLCByZXNpemU6IDEsIG1vdmU6IDEsIERPTUNvbnRlbnRM
b2FkZWQ6IDEsIHJlYWR5c3RhdGVjaGFuZ2U6IDEsIC8vd2luZG93XG5cdGhhc2hjaGFuZ2U6IDEs
IHBvcHN0YXRlOiAyLCBwYWdlc2hvdzogMiwgcGFnZWhpZGU6IDIsIC8vIGhpc3Rvcnlcblx0ZXJy
b3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1lc3NhZ2U6IDIgLy9taXNjXG59O1xuXG5FbGVt
ZW50LkV2ZW50cyA9IHtcblx0bW91c2V3aGVlbDoge1xuXHRcdGJhc2U6ICdvbndoZWVsJyBpbiBk
b2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdoZWVsJyBpbiBkb2N1bWVudCA/ICdtb3VzZXdo
ZWVsJyA6ICdET01Nb3VzZVNjcm9sbCdcblx0fVxufTtcblxudmFyIGNoZWNrID0gZnVuY3Rpb24o
ZXZlbnQpe1xuXHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG5cdGlmIChyZWxh
dGVkID09IG51bGwpIHJldHVybiB0cnVlO1xuXHRpZiAoIXJlbGF0ZWQpIHJldHVybiBmYWxzZTtc
blx0cmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYgcmVsYXRlZC5wcmVmaXggIT0gJ3h1bCcgJiYg
dHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYgIXRoaXMuY29udGFpbnMocmVsYXRlZCkpO1xu
fTtcblxuaWYgKCdvbm1vdXNlZW50ZXInIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7XG5c
dEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50ZXIgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5t
b3VzZWxlYXZlID0gMjtcblx0RWxlbWVudC5Nb3VzZWVudGVyQ2hlY2sgPSBjaGVjaztcbn0gZWxz
ZSB7XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlZW50ZXIgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3Zl
cicsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xuXG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNl
bGVhdmUgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5c
dH07XG59XG5cbi8qPGx0SUU5PiovXG5pZiAoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0
RWxlbWVudC5OYXRpdmVFdmVudHMucHJvcGVydHljaGFuZ2UgPSAyO1xuXHRFbGVtZW50LkV2ZW50
cy5jaGFuZ2UgPSB7XG5cdFx0YmFzZTogZnVuY3Rpb24oKXtcblx0XHRcdHZhciB0eXBlID0gdGhp
cy50eXBlO1xuXHRcdFx0cmV0dXJuICh0aGlzLmdldCgndGFnJykgPT0gJ2lucHV0JyAmJiAodHlw
ZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94JykpID8gJ3Byb3BlcnR5Y2hhbmdlJyA6
ICdjaGFuZ2UnO1xuXHRcdH0sXG5cdFx0Y29uZGl0aW9uOiBmdW5jdGlvbihldmVudCl7XG5cdFx0
XHRyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVydHljaGFuZ2UnIHx8IGV2ZW50LmV2ZW50LnBy
b3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7XG5cdFx0fVxuXHR9O1xufVxuLyo8L2x0SUU5PiovXG5c
blxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGVsZWdhdGlvblxuXG5kZXNj
cmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgdGhl
IGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZpY2llbnQgZXZlbnQgbWFuYWdlbWVudC5cblxu
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudC5FdmVudF1c
blxucHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRpb25dXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9u
KCl7XG5cbnZhciBldmVudExpc3RlbmVyU3VwcG9ydCA9ICEhd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXI7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3VzaW4gPSBFbGVtZW50Lk5hdGl2ZUV2ZW50
cy5mb2N1c291dCA9IDI7XG5cbnZhciBidWJibGVVcCA9IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCl7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0ICE9IHNlbGYpe1xu
XHRcdGlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkgcmV0dXJuIGZuLmNhbGwodGFyZ2V0LCBldmVu
dCwgdGFyZ2V0KTtcblx0XHR0YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQucGFyZW50Tm9kZSk7
XG5cdH1cbn07XG5cbnZhciBtYXAgPSB7XG5cdG1vdXNlZW50ZXI6IHtcblx0XHRiYXNlOiAnbW91
c2VvdmVyJyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5cdH0sXG5c
dG1vdXNlbGVhdmU6IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogRWxl
bWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0Zm9jdXM6IHtcblx0XHRiYXNlOiAnZm9jdXMn
ICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycgOiAnaW4nKSxcblx0XHRjYXB0dXJlOiB0cnVl
XG5cdH0sXG5cdGJsdXI6IHtcblx0XHRiYXNlOiBldmVudExpc3RlbmVyU3VwcG9ydCA/ICdibHVy
JyA6ICdmb2N1c291dCcsXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9XG59O1xuXG4vKjxsdElFOT4q
L1xudmFyIF9rZXkgPSAnJGRlbGVnYXRpb246JztcbnZhciBmb3JtT2JzZXJ2ZXIgPSBmdW5jdGlv
bih0eXBlKXtcblxuXHRyZXR1cm4ge1xuXG5cdFx0YmFzZTogJ2ZvY3VzaW4nLFxuXG5cdFx0cmVt
b3ZlOiBmdW5jdGlvbihzZWxmLCB1aWQpe1xuXHRcdFx0dmFyIGxpc3QgPSBzZWxmLnJldHJpZXZl
KF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KVt1aWRdO1xuXHRcdFx0aWYgKGxpc3QgJiYg
bGlzdC5mb3JtcykgZm9yICh2YXIgaSA9IGxpc3QuZm9ybXMubGVuZ3RoOyBpLS07KXtcblx0XHRc
dFx0Ly8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIGl0IHdvbid0IGhhdmUg
dGhlXG5cdFx0XHRcdC8vIHJlbW92ZUV2ZW50IG1ldGhvZCBhbnltb3JlLiBJbiB0aGF0IGNhc2Ug
dGhlIGV2ZW50IHdhc1xuXHRcdFx0XHQvLyByZW1vdmVkIGFzIHdlbGwuXG5cdFx0XHRcdGlmIChs
aXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KHR5cGUs
IGxpc3QuZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihz
ZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCl7XG5cdFx0XHR2YXIgZm9ybSA9ICh0
YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8gdGFyZ2V0IDogZXZlbnQudGFyZ2V0LmdldFBh
cmVudCgnZm9ybScpO1xuXHRcdFx0aWYgKCFmb3JtKSByZXR1cm47XG5cblx0XHRcdHZhciBsaXN0
ZW5lcnMgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KSxcblx0
XHRcdFx0bGlzdGVuZXIgPSBsaXN0ZW5lcnNbdWlkXSB8fCB7Zm9ybXM6IFtdLCBmbnM6IFtdfSxc
blx0XHRcdFx0Zm9ybXMgPSBsaXN0ZW5lci5mb3JtcywgZm5zID0gbGlzdGVuZXIuZm5zO1xuXG5c
dFx0XHRpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAhPSAtMSkgcmV0dXJuO1xuXHRcdFx0Zm9ybXMu
cHVzaChmb3JtKTtcblxuXHRcdFx0dmFyIF9mbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0
YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0
XHRmb3JtLmFkZEV2ZW50KHR5cGUsIF9mbik7XG5cdFx0XHRmbnMucHVzaChfZm4pO1xuXG5cdFx0
XHRsaXN0ZW5lcnNbdWlkXSA9IGxpc3RlbmVyO1xuXHRcdFx0c2VsZi5zdG9yZShfa2V5ICsgdHlw
ZSArICdsaXN0ZW5lcnMnLCBsaXN0ZW5lcnMpO1xuXHRcdH1cblx0fTtcbn07XG5cbnZhciBpbnB1
dE9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cdHJldHVybiB7XG5cdFx0YmFzZTogJ2ZvY3Vz
aW4nLFxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0
KXtcblx0XHRcdHZhciBldmVudHMgPSB7Ymx1cjogZnVuY3Rpb24oKXtcblx0XHRcdFx0dGhpcy5y
ZW1vdmVFdmVudHMoZXZlbnRzKTtcblx0XHRcdH19O1xuXHRcdFx0ZXZlbnRzW3R5cGVdID0gZnVu
Y3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0
YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGV2ZW50LnRhcmdldC5hZGRFdmVudHMoZXZlbnRzKTtc
blx0XHR9XG5cdH07XG59O1xuXG5pZiAoIWV2ZW50TGlzdGVuZXJTdXBwb3J0KSBPYmplY3QuYXBw
ZW5kKG1hcCwge1xuXHRzdWJtaXQ6IGZvcm1PYnNlcnZlcignc3VibWl0JyksXG5cdHJlc2V0OiBm
b3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksXG5cdGNoYW5nZTogaW5wdXRPYnNlcnZlcignY2hhbmdlJyks
XG5cdHNlbGVjdDogaW5wdXRPYnNlcnZlcignc2VsZWN0Jylcbn0pO1xuLyo8L2x0SUU5PiovXG5c
bnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLFxuXHRhZGRFdmVudCA9IHByb3RvLmFkZEV2
ZW50LFxuXHRyZW1vdmVFdmVudCA9IHByb3RvLnJlbW92ZUV2ZW50O1xuXG52YXIgcmVsYXkgPSBm
dW5jdGlvbihvbGQsIG1ldGhvZCl7XG5cdHJldHVybiBmdW5jdGlvbih0eXBlLCBmbiwgdXNlQ2Fw
dHVyZSl7XG5cdFx0aWYgKHR5cGUuaW5kZXhPZignOnJlbGF5JykgPT0gLTEpIHJldHVybiBvbGQu
Y2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNr
LnBhcnNlKHR5cGUpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdGlmIChwYXJzZWQucHNldWRvc1sw
XS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0
dXJlKTtcblx0XHR2YXIgbmV3VHlwZSA9IHBhcnNlZC50YWc7XG5cdFx0cGFyc2VkLnBzZXVkb3Mu
c2xpY2UoMSkuZWFjaChmdW5jdGlvbihwc2V1ZG8pe1xuXHRcdFx0bmV3VHlwZSArPSAnOicgKyBw
c2V1ZG8ua2V5ICsgKHBzZXVkby52YWx1ZSA/ICcoJyArIHBzZXVkby52YWx1ZSArICcpJyA6ICcn
KTtcblx0XHR9KTtcblx0XHRvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIG1l
dGhvZC5jYWxsKHRoaXMsIG5ld1R5cGUsIHBhcnNlZC5wc2V1ZG9zWzBdLnZhbHVlLCBmbik7XG5c
dH07XG59O1xuXG52YXIgZGVsZWdhdGlvbiA9IHtcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlw
ZSwgbWF0Y2gsIGZuKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0
ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKHN0b3JlZCkgZm9yICh2
YXIgX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0aWYgKHN0b3JlZFtfdWlkXS5mbiA9PSBmbiAmJiBz
dG9yZWRbX3VpZF0ubWF0Y2ggPT0gbWF0Y2gpIHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHZh
ciBfdHlwZSA9IHR5cGUsIF9tYXRjaCA9IG1hdGNoLCBfZm4gPSBmbiwgX21hcCA9IG1hcFt0eXBl
XSB8fCB7fTtcblx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXG5cdFx0bWF0Y2ggPSBm
dW5jdGlvbih0YXJnZXQpe1xuXHRcdFx0cmV0dXJuIFNsaWNrLm1hdGNoKHRhcmdldCwgX21hdGNo
KTtcblx0XHR9O1xuXG5cdFx0dmFyIGVsZW1lbnRFdmVudCA9IEVsZW1lbnQuRXZlbnRzW190eXBl
XTtcblx0XHRpZiAoX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50ICYmIGVsZW1lbnRFdmVu
dC5jb25kaXRpb24pe1xuXHRcdFx0dmFyIF9fbWF0Y2ggPSBtYXRjaCwgY29uZGl0aW9uID0gX21h
cC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNvbmRpdGlvbjtcblx0XHRcdG1hdGNoID0gZnVu
Y3Rpb24odGFyZ2V0LCBldmVudCl7XG5cdFx0XHRcdHJldHVybiBfX21hdGNoKHRhcmdldCwgZXZl
bnQpICYmIGNvbmRpdGlvbi5jYWxsKHRhcmdldCwgZXZlbnQsIHR5cGUpO1xuXHRcdFx0fTtcblx0
XHR9XG5cblx0XHR2YXIgc2VsZiA9IHRoaXMsIHVpZCA9IFN0cmluZy51bmlxdWVJRCgpO1xuXHRc
dHZhciBkZWxlZ2F0b3IgPSBfbWFwLmxpc3RlbiA/IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xu
XHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVu
dC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBfbWFwLmxpc3RlbihzZWxmLCBtYXRjaCwgZm4s
IGV2ZW50LCB0YXJnZXQsIHVpZCk7XG5cdFx0fSA6IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xu
XHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVu
dC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2
ZW50LCB0YXJnZXQpO1xuXHRcdH07XG5cblx0XHRpZiAoIXN0b3JlZCkgc3RvcmVkID0ge307XG5c
dFx0c3RvcmVkW3VpZF0gPSB7XG5cdFx0XHRtYXRjaDogX21hdGNoLFxuXHRcdFx0Zm46IF9mbixc
blx0XHRcdGRlbGVnYXRvcjogZGVsZWdhdG9yXG5cdFx0fTtcblx0XHRzdG9yYWdlW190eXBlXSA9
IHN0b3JlZDtcblx0XHRyZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3Is
IF9tYXAuY2FwdHVyZSk7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1h
dGNoLCBmbiwgX3VpZCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdh
dGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmICghc3RvcmVkKSByZXR1
cm4gdGhpcztcblxuXHRcdGlmIChfdWlkKXtcblx0XHRcdHZhciBfdHlwZSA9IHR5cGUsIGRlbGVn
YXRvciA9IHN0b3JlZFtfdWlkXS5kZWxlZ2F0b3IsIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5c
dFx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXHRcdFx0aWYgKF9tYXAucmVtb3ZlKSBf
bWFwLnJlbW92ZSh0aGlzLCBfdWlkKTtcblx0XHRcdGRlbGV0ZSBzdG9yZWRbX3VpZF07XG5cdFx0
XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRcdHJldHVybiByZW1vdmVFdmVudC5jYWxs
KHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJlKTtcblx0XHR9XG5cblx0XHR2YXIg
X191aWQsIHM7XG5cdFx0aWYgKGZuKSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0g
c3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNoICYmIHMuZm4gPT0gZm4p
IHJldHVybiBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIGZu
LCBfX3VpZCk7XG5cdFx0fSBlbHNlIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBz
dG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2gpIGRlbGVnYXRpb24ucmVt
b3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgcy5mbiwgX191aWQpO1xuXHRcdH1cblx0
XHRyZXR1cm4gdGhpcztcblx0fVxuXG59O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0u
aW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cdGFkZEV2ZW50OiByZWxheShhZGRFdmVudCwgZGVsZWdh
dGlvbi5hZGRFdmVudCksXG5cdHJlbW92ZUV2ZW50OiByZWxheShyZW1vdmVFdmVudCwgZGVsZWdh
dGlvbi5yZW1vdmVFdmVudClcbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1l
bnQuU3R5bGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgZm9yIGludGVyYWN0aW5n
IHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBpbiBhIGZhc2hpb25hYmxlIHdheS5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBFbGVtZW50XG5cbnByb3ZpZGVz
OiBFbGVtZW50LlN0eWxlXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBodG1sID0g
ZG9jdW1lbnQuaHRtbCwgZWw7XG5cbi8vPGx0SUU5PlxuLy8gQ2hlY2sgZm9yIG9sZElFLCB3aGlj
aCBkb2VzIG5vdCByZW1vdmUgc3R5bGVzIHdoZW4gdGhleSdyZSBzZXQgdG8gbnVsbFxuZWwgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsLnN0eWxlLmNvbG9yID0gJ3JlZCc7XG5l
bC5zdHlsZS5jb2xvciA9IG51bGw7XG52YXIgZG9lc05vdFJlbW92ZVN0eWxlcyA9IGVsLnN0eWxl
LmNvbG9yID09ICdyZWQnO1xuXG4vLyBjaGVjayBmb3Igb2xkSUUsIHdoaWNoIHJldHVybnMgYm9y
ZGVyKiBzaG9ydGhhbmQgc3R5bGVzIGluIHRoZSB3cm9uZyBvcmRlciAoY29sb3Itd2lkdGgtc3R5
bGUgaW5zdGVhZCBvZiB3aWR0aC1zdHlsZS1jb2xvcilcbnZhciBib3JkZXIgPSAnMXB4IHNvbGlk
ICMxMjNhYmMnO1xuZWwuc3R5bGUuYm9yZGVyID0gYm9yZGVyO1xudmFyIHJldHVybnNCb3JkZXJz
SW5Xcm9uZ09yZGVyID0gZWwuc3R5bGUuYm9yZGVyICE9IGJvcmRlcjtcbmVsID0gbnVsbDtcbi8v
PC9sdElFOT5cblxudmFyIGhhc0dldENvbXB1dGVkU3R5bGUgPSAhIXdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlLFxuXHRzdXBwb3J0Qm9yZGVyUmFkaXVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51bGw7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5z
dHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMpe1xuXHR0aGlzLnNldFN0eWxlcyhzdHlsZXMp
O1xufX07XG5cbnZhciBoYXNPcGFjaXR5ID0gKGh0bWwuc3R5bGUub3BhY2l0eSAhPSBudWxsKSxc
blx0aGFzRmlsdGVyID0gKGh0bWwuc3R5bGUuZmlsdGVyICE9IG51bGwpLFxuXHRyZUFscGhhID0g
L2FscGhhXFwob3BhY2l0eT0oW1xcZC5dKylcXCkvaTtcblxudmFyIHNldFZpc2liaWxpdHkgPSBm
dW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdG9yZSgnJG9wYWNpdHknLCBv
cGFjaXR5KTtcblx0ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gb3BhY2l0eSA+IDAgfHwgb3Bh
Y2l0eSA9PSBudWxsID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59O1xuXG4vLzxsdElFOT5cbnZh
ciBzZXRGaWx0ZXIgPSBmdW5jdGlvbihlbGVtZW50LCByZWdleHAsIHZhbHVlKXtcblx0dmFyIHN0
eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRmaWx0ZXIgPSBzdHlsZS5maWx0ZXIgfHwgZWxlbWVu
dC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8fCAnJztcblx0c3R5bGUuZmlsdGVyID0gKHJl
Z2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVwbGFjZShyZWdleHAsIHZhbHVlKSA6IGZpbHRl
ciArICcgJyArIHZhbHVlKS50cmltKCk7XG5cdGlmICghc3R5bGUuZmlsdGVyKSBzdHlsZS5yZW1v
dmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xufTtcbi8vPC9sdElFOT5cblxudmFyIHNldE9wYWNpdHkg
PSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0
eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xufSA6IChoYXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50
LCBvcGFjaXR5KXtcblx0aWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8fCAhZWxlbWVudC5jdXJy
ZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxlLnpvb20gPSAxO1xuXHRpZiAob3BhY2l0
eSA9PSBudWxsIHx8IG9wYWNpdHkgPT0gMSl7XG5cdFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxw
aGEsICcnKTtcblx0XHRpZiAob3BhY2l0eSA9PSAxICYmIGdldE9wYWNpdHkoZWxlbWVudCkgIT0g
MSkgc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PTEwMCknKTtcblx0
fSBlbHNlIHtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9
JyArIChvcGFjaXR5ICogMTAwKS5saW1pdCgwLCAxMDApLnJvdW5kKCkgKyAnKScpO1xuXHR9XG59
IDogc2V0VmlzaWJpbGl0eSkpO1xuXG52YXIgZ2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5ID8gZnVu
Y3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5zdHlsZS5vcGFjaXR5IHx8
IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnb3BhY2l0eScpO1xuXHRyZXR1cm4gKG9wYWNpdHkg
PT0gJycpID8gMSA6IG9wYWNpdHkudG9GbG9hdCgpO1xufSA6IChoYXNGaWx0ZXIgPyBmdW5jdGlv
bihlbGVtZW50KXtcblx0dmFyIGZpbHRlciA9IChlbGVtZW50LnN0eWxlLmZpbHRlciB8fCBlbGVt
ZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpKSxcblx0XHRvcGFjaXR5O1xuXHRpZiAoZmls
dGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJlQWxwaGEpO1xuXHRyZXR1cm4gKG9wYWNpdHkg
PT0gbnVsbCB8fCBmaWx0ZXIgPT0gbnVsbCkgPyAxIDogKG9wYWNpdHlbMV0gLyAxMDApO1xufSA6
IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQucmV0cmlldmUoJyRv
cGFjaXR5Jyk7XG5cdGlmIChvcGFjaXR5ID09IG51bGwpIG9wYWNpdHkgPSAoZWxlbWVudC5zdHls
ZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6IDEpO1xuXHRyZXR1cm4gb3BhY2l0eTtcbn0p
KTtcblxudmFyIGZsb2F0TmFtZSA9IChodG1sLnN0eWxlLmNzc0Zsb2F0ID09IG51bGwpID8gJ3N0
eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyxcblx0bmFtZWRQb3NpdGlvbnMgPSB7bGVmdDogJzAlJywg
dG9wOiAnMCUnLCBjZW50ZXI6ICc1MCUnLCByaWdodDogJzEwMCUnLCBib3R0b206ICcxMDAlJ30s
XG5cdGhhc0JhY2tncm91bmRQb3NpdGlvblhZID0gKGh0bWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0
aW9uWCAhPSBudWxsKSxcblx0cHJlZml4UGF0dGVybiA9IC9eLShtcyktLztcblxudmFyIGNhbWVs
Q2FzZSA9IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cmV0dXJuIHByb3BlcnR5LnJlcGxhY2UocHJl
Zml4UGF0dGVybiwgJyQxLScpLmNhbWVsQ2FzZSgpO1xufTtcblxuLy88bHRJRTk+XG52YXIgcmVt
b3ZlU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcHJvcGVydHkpe1xuXHRpZiAocHJvcGVydHkgPT0g
J2JhY2tncm91bmRQb3NpdGlvbicpe1xuXHRcdHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0
eSArICdYJyk7XG5cdFx0cHJvcGVydHkgKz0gJ1knO1xuXHR9XG5cdHN0eWxlLnJlbW92ZUF0dHJp
YnV0ZShwcm9wZXJ0eSk7XG59O1xuLy88L2x0SUU5PlxuXG5FbGVtZW50LmltcGxlbWVudCh7XG5c
blx0Z2V0Q29tcHV0ZWRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmICghaGFzR2V0
Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJuIHRoaXMuY3VycmVudFN0
eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldO1xuXHRcdHZhciBkZWZhdWx0VmlldyA9IEVsZW1lbnQu
Z2V0RG9jdW1lbnQodGhpcykuZGVmYXVsdFZpZXcsXG5cdFx0XHRjb21wdXRlZCA9IGRlZmF1bHRW
aWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLCBudWxsKSA6IG51bGw7XG5c
dFx0cmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKChwcm9wZXJ0
eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHByb3BlcnR5Lmh5cGhlbmF0ZSgpKSA6ICcnO1xu
XHR9LFxuXG5cdHNldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRcdGlmIChw
cm9wZXJ0eSA9PSAnb3BhY2l0eScpe1xuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHZhbHVlID0g
cGFyc2VGbG9hdCh2YWx1ZSk7XG5cdFx0XHRzZXRPcGFjaXR5KHRoaXMsIHZhbHVlKTtcblx0XHRc
dHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9
PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlmICh0eXBlT2YodmFsdWUp
ICE9ICdzdHJpbmcnKXtcblx0XHRcdHZhciBtYXAgPSAoRWxlbWVudC5TdHlsZXNbcHJvcGVydHld
IHx8ICdAJykuc3BsaXQoJyAnKTtcblx0XHRcdHZhbHVlID0gQXJyYXkuY29udmVydCh2YWx1ZSku
bWFwKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdGlmICghbWFwW2ldKSByZXR1cm4gJyc7XG5c
dFx0XHRcdHJldHVybiAodHlwZU9mKHZhbCkgPT0gJ251bWJlcicpID8gbWFwW2ldLnJlcGxhY2Uo
J0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsO1xuXHRcdFx0fSkuam9pbignICcpO1xuXHRcdH0g
ZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJlcih2YWx1ZSkpKXtcblx0XHRcdHZhbHVlID0g
TWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3R5bGVbcHJvcGVydHldID0gdmFs
dWU7XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKCh2YWx1ZSA9PSAnJyB8fCB2YWx1ZSA9PSBudWxs
KSAmJiBkb2VzTm90UmVtb3ZlU3R5bGVzICYmIHRoaXMuc3R5bGUucmVtb3ZlQXR0cmlidXRlKXtc
blx0XHRcdHJlbW92ZVN0eWxlKHRoaXMuc3R5bGUsIHByb3BlcnR5KTtcblx0XHR9XG5cdFx0Ly88
L2x0SUU5PlxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFN0eWxlOiBmdW5jdGlvbihw
cm9wZXJ0eSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5JykgcmV0dXJuIGdldE9wYWNp
dHkodGhpcyk7XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/
IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAoc3VwcG9ydEJvcmRlclJhZGl1cyAmJiBw
cm9wZXJ0eS5pbmRleE9mKCdib3JkZXJSYWRpdXMnKSAhPSAtMSl7XG5cdFx0XHRyZXR1cm4gWydi
b3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRv
bVJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnXS5tYXAoZnVuY3Rpb24oY29y
bmVyKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVbY29ybmVyXSB8fCAnMHB4Jztcblx0XHRc
dH0sIHRoaXMpLmpvaW4oJyAnKTtcblx0XHR9XG5cdFx0dmFyIHJlc3VsdCA9IHRoaXMuc3R5bGVb
cHJvcGVydHldO1xuXHRcdGlmICghcmVzdWx0IHx8IHByb3BlcnR5ID09ICd6SW5kZXgnKXtcblx0
XHRcdGlmIChFbGVtZW50LlNob3J0U3R5bGVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSl7XG5c
dFx0XHRcdHJlc3VsdCA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBzIGluIEVsZW1lbnQuU2hvcnRT
dHlsZXNbcHJvcGVydHldKSByZXN1bHQucHVzaCh0aGlzLmdldFN0eWxlKHMpKTtcblx0XHRcdFx0
cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXN1bHQgPSB0aGlzLmdl
dENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRcdH1cblx0XHRpZiAoaGFzQmFja2dyb3VuZFBv
c2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRpb25bWFldPyQvLnRlc3QocHJvcGVydHkpKXtc
blx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvKHRvcHxyaWdodHxib3R0b218bGVmdCkvZywg
ZnVuY3Rpb24ocG9zaXRpb24pe1xuXHRcdFx0XHRyZXR1cm4gbmFtZWRQb3NpdGlvbnNbcG9zaXRp
b25dO1xuXHRcdFx0fSkgfHwgJzBweCc7XG5cdFx0fVxuXHRcdGlmICghcmVzdWx0ICYmIHByb3Bl
cnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKSByZXR1cm4gJzBweCAwcHgnO1xuXHRcdGlmIChy
ZXN1bHQpe1xuXHRcdFx0cmVzdWx0ID0gU3RyaW5nKHJlc3VsdCk7XG5cdFx0XHR2YXIgY29sb3Ig
PSByZXN1bHQubWF0Y2goL3JnYmE/XFwoW1xcZFxccyxdK1xcKS8pO1xuXHRcdFx0aWYgKGNvbG9y
KSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xvclswXSwgY29sb3JbMF0ucmdiVG9IZXgoKSk7
XG5cdFx0fVxuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiAhdGhpcy5zdHlsZVtwcm9w
ZXJ0eV0pe1xuXHRcdFx0aWYgKCgvXihoZWlnaHR8d2lkdGgpJC8pLnRlc3QocHJvcGVydHkpICYm
ICEoL3B4JC8udGVzdChyZXN1bHQpKSl7XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSAocHJvcGVydHkg
PT0gJ3dpZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQnXSA6IFsndG9wJywgJ2JvdHRvbSddLCBzaXpl
ID0gMDtcblx0XHRcdFx0dmFsdWVzLmVhY2goZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRcdHNp
emUgKz0gdGhpcy5nZXRTdHlsZSgnYm9yZGVyLScgKyB2YWx1ZSArICctd2lkdGgnKS50b0ludCgp
ICsgdGhpcy5nZXRTdHlsZSgncGFkZGluZy0nICsgdmFsdWUpLnRvSW50KCk7XG5cdFx0XHRcdH0s
IHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gdGhpc1snb2Zmc2V0JyArIHByb3BlcnR5LmNhcGl0YWxp
emUoKV0gLSBzaXplICsgJ3B4Jztcblx0XHRcdH1cblx0XHRcdGlmICgoL15ib3JkZXIoLispV2lk
dGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5KSAmJiBpc05hTihwYXJzZUZsb2F0KHJl
c3VsdCkpKXtcblx0XHRcdFx0cmV0dXJuICcwcHgnO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLzxs
dElFOT5cblx0XHRpZiAocmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIgJiYgL15ib3JkZXIoVG9w
fFJpZ2h0fEJvdHRvbXxMZWZ0KT8kLy50ZXN0KHByb3BlcnR5KSAmJiAvXiMvLnRlc3QocmVzdWx0
KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoL14oLispXFxzKC4rKVxccyguKykkLywg
JyQyICQzICQxJyk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblxuXHRcdHJldHVybiByZXN1bHQ7
XG5cdH0sXG5cblx0c2V0U3R5bGVzOiBmdW5jdGlvbihzdHlsZXMpe1xuXHRcdGZvciAodmFyIHN0
eWxlIGluIHN0eWxlcykgdGhpcy5zZXRTdHlsZShzdHlsZSwgc3R5bGVzW3N0eWxlXSk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBy
ZXN1bHQgPSB7fTtcblx0XHRBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihr
ZXkpe1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtleSk7XG5cdFx0fSwgdGhp
cyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59KTtcblxuRWxlbWVudC5TdHlsZXMgPSB7
XG5cdGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgnLCByaWdodDogJ0BweCcs
XG5cdHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4JywgbWF4V2lkdGg6ICdAcHgnLCBtYXhIZWln
aHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1pbkhlaWdodDogJ0BweCcsXG5cdGJhY2tncm91
bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tncm91bmRTaXplOiAnQHB4JywgYmFja2dyb3Vu
ZFBvc2l0aW9uOiAnQHB4IEBweCcsIGNvbG9yOiAncmdiKEAsIEAsIEApJyxcblx0Zm9udFNpemU6
ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4JywgbGluZUhlaWdodDogJ0BweCcsIGNsaXA6ICdy
ZWN0KEBweCBAcHggQHB4IEBweCknLFxuXHRtYXJnaW46ICdAcHggQHB4IEBweCBAcHgnLCBwYWRk
aW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyOiAnQHB4IEAgcmdiKEAsIEAsIEApIEBweCBA
IHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCknLFxuXHRib3JkZXJXaWR0aDogJ0BweCBA
cHggQHB4IEBweCcsIGJvcmRlclN0eWxlOiAnQCBAIEAgQCcsIGJvcmRlckNvbG9yOiAncmdiKEAs
IEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApJyxcblx0ekluZGV4
OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0OiAnQCcsIHRleHRJbmRlbnQ6ICdAcHgnLCBv
cGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0BweCBAcHggQHB4IEBweCdcbn07XG5cblxuXG5c
blxuRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJnaW46IHt9LCBwYWRkaW5nOiB7fSwgYm9yZGVy
OiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJTdHlsZToge30sIGJvcmRlckNvbG9yOiB7fX07
XG5cblsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J10uZWFjaChmdW5jdGlvbihkaXJl
Y3Rpb24pe1xuXHR2YXIgU2hvcnQgPSBFbGVtZW50LlNob3J0U3R5bGVzO1xuXHR2YXIgQWxsID0g
RWxlbWVudC5TdHlsZXM7XG5cdFsnbWFyZ2luJywgJ3BhZGRpbmcnXS5lYWNoKGZ1bmN0aW9uKHN0
eWxlKXtcblx0XHR2YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlvbjtcblx0XHRTaG9ydFtzdHlsZV1b
c2RdID0gQWxsW3NkXSA9ICdAcHgnO1xuXHR9KTtcblx0dmFyIGJkID0gJ2JvcmRlcicgKyBkaXJl
Y3Rpb247XG5cdFNob3J0LmJvcmRlcltiZF0gPSBBbGxbYmRdID0gJ0BweCBAIHJnYihALCBALCBA
KSc7XG5cdHZhciBiZHcgPSBiZCArICdXaWR0aCcsIGJkcyA9IGJkICsgJ1N0eWxlJywgYmRjID0g
YmQgKyAnQ29sb3InO1xuXHRTaG9ydFtiZF0gPSB7fTtcblx0U2hvcnQuYm9yZGVyV2lkdGhbYmR3
XSA9IFNob3J0W2JkXVtiZHddID0gQWxsW2Jkd10gPSAnQHB4Jztcblx0U2hvcnQuYm9yZGVyU3R5
bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7XG5cdFNob3J0LmJvcmRl
ckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFsbFtiZGNdID0gJ3JnYihALCBALCBAKSc7
XG59KTtcblxuaWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZKSBFbGVtZW50LlNob3J0U3R5bGVz
LmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3JvdW5kUG9zaXRpb25YOiAnQCcsIGJhY2tncm91
bmRQb3NpdGlvblk6ICdAJ307XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGlt
ZW5zaW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyB0byB3b3JrIHdpdGggc2l6
ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVtZW50cyBhbmQgdGhlIHdpbmRvdyBvYmpl
Y3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEVsZW1l
bnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRwOi8vcW9veGRvby5vcmcv
KSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNlbnNlXShodHRwOi8vd3d3
LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS5cbiAgLSBWaWV3cG9ydCBkaW1lbnNpb25zIGJh
c2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS8pIGNvZGUsIFtCU0Qg
TGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xpY2Vuc2UuaHRtbCkuXG5c
bnJlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHlsZV1cblxucHJvdmlkZXM6IFtFbGVtZW50
LkRpbWVuc2lvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG5cdGNoaWxkID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7XG5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcwJztcbmVsZW1lbnQuYXBw
ZW5kQ2hpbGQoY2hpbGQpO1xudmFyIGJyb2tlbk9mZnNldFBhcmVudCA9IChjaGlsZC5vZmZzZXRQ
YXJlbnQgPT09IGVsZW1lbnQpO1xuZWxlbWVudCA9IGNoaWxkID0gbnVsbDtcblxudmFyIGhlaWdo
dENvbXBvbmVudHMgPSBbJ2hlaWdodCcsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdCb3R0b20nLCAn
Ym9yZGVyVG9wV2lkdGgnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcblx0d2lkdGhDb21wb25lbnRz
ID0gWyd3aWR0aCcsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAnYm9yZGVyTGVmdFdp
ZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnXTtcblxudmFyIHN2Z0NhbGN1bGF0ZVNpemUgPSBmdW5j
dGlvbihlbCl7XG5cblx0dmFyIGdDUyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKSxcblx0
XHRib3VuZHMgPSB7eDogMCwgeTogMH07XG5cblx0aGVpZ2h0Q29tcG9uZW50cy5lYWNoKGZ1bmN0
aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnkgKz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xu
XHR3aWR0aENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy54ICs9IHBh
cnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0cmV0dXJuIGJvdW5kcztcbn07XG5cbnZhciBp
c09mZnNldCA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsLCAncG9zaXRp
b24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpO1xufTtcblxudmFyIGlzT2Zmc2V0U3RhdGlj
ID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gaXNPZmZzZXQoZWwpIHx8ICgvXig/OnRhYmxlfHRk
fHRoKSQvaSkudGVzdChlbC50YWdOYW1lKTtcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxu
XHRzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSl7XG5cdFx0
XHR0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKHgsIHkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0
aGlzLnNjcm9sbExlZnQgPSB4O1xuXHRcdFx0dGhpcy5zY3JvbGxUb3AgPSB5O1xuXHRcdH1cblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTaXplOiBmdW5jdGlvbigpe1xuXHRcdGlmIChp
c0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNpemUoKTtcblxuXHRcdC8v
PGx0SUU5PlxuXHRcdC8vIFRoaXMgaWYgY2xhdXNlIGlzIGJlY2F1c2UgSUU4LSBjYW5ub3QgY2Fs
Y3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvZiBlbGVtZW50cyB3aXRoIHZpc2liaWxpdHkg
aGlkZGVuLlxuXHRcdGlmICghd2luZG93LmdldENvbXB1dGVkU3R5bGUpIHJldHVybiB7eDogdGhp
cy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRIZWlnaHR9O1xuXHRcdC8vPC9sdElFOT5cblxu
XHRcdC8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIsIGNhbGxpbmcgYHN2Z0NhbGN1bGF0ZVNpemUo
KWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4ZWQgdGhlIHN2ZyBzaXplIGJ1Zy5cblx0XHQv
LyBCdWcgaW5mbzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTMwOTg1XG5cdFx0aWYgKHRoaXMuZ2V0KCd0YWcnKSA9PSAnc3ZnJykgcmV0dXJuIHN2Z0NhbGN1
bGF0ZVNpemUodGhpcyk7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIGJvdW5kcyA9IHRoaXMuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRyZXR1cm4ge3g6IGJvdW5kcy53aWR0aCwgeTog
Ym91bmRzLmhlaWdodH07XG5cdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRyZXR1cm4ge3g6IDAsIHk6
IDB9O1xuXHRcdH1cblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdGlm
IChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbFNpemUoKTtc
blx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsV2lkdGgsIHk6IHRoaXMuc2Nyb2xsSGVpZ2h0fTtc
blx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkg
cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlz
LnNjcm9sbExlZnQsIHk6IHRoaXMuc2Nyb2xsVG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxzOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5wYXJlbnROb2RlLCBwb3NpdGlvbiA9
IHt4OiAwLCB5OiAwfTtcblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtc
blx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuXHRcdFx0cG9zaXRpb24u
eSArPSBlbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5v
ZGU7XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRPZmZzZXRQYXJl
bnQ6IGJyb2tlbk9mZnNldFBhcmVudCA/IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0
aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bv
c2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR2YXIgaXNPZmZzZXRDaGVj
ayA9IChzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnc3RhdGljJykgPyBpc09m
ZnNldFN0YXRpYyA6IGlzT2Zmc2V0O1xuXHRcdHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZSkpe1xuXHRcdFx0aWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVudCkpIHJldHVybiBlbGVt
ZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSA6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmco
ZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR0cnkg
e1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRcdH0gY2F0Y2ggKGUpe31c
blx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRnZXRPZmZzZXRzOiBmdW5jdGlvbigpe1xuXHRc
dHZhciBoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVj
dDtcblxuXHRcdGlmIChoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3Qpe1xuXHRcdFx0dmFyIGJvdW5k
ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcblx0XHRcdFx0aHRtbCA9IGRvY3VtZW50
LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQpLFxuXHRcdFx0XHRodG1sU2Ny
b2xsID0gaHRtbC5nZXRTY3JvbGwoKSxcblx0XHRcdFx0ZWxlbVNjcm9sbHMgPSB0aGlzLmdldFNj
cm9sbHMoKSxcblx0XHRcdFx0aXNGaXhlZCA9IChzdHlsZVN0cmluZyh0aGlzLCAncG9zaXRpb24n
KSA9PSAnZml4ZWQnKTtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogYm91bmQubGVmdC50
b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy54ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLngp
IC0gaHRtbC5jbGllbnRMZWZ0LFxuXHRcdFx0XHR5OiBib3VuZC50b3AudG9GbG9hdCgpICsgZWxl
bVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC55KSAtIGh0bWwuY2xpZW50
VG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBlbGVtZW50ID0gdGhpcywgcG9zaXRpb24g
PSB7eDogMCwgeTogMH07XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHBvc2l0aW9uO1xu
XG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlv
bi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5v
ZmZzZXRUb3A7XG5cblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9
XG5cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9u
KHJlbGF0aXZlKXtcblx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXRzKCksXG5cdFx0XHRz
Y3JvbGwgPSB0aGlzLmdldFNjcm9sbHMoKTtcblx0XHR2YXIgcG9zaXRpb24gPSB7XG5cdFx0XHR4
OiBvZmZzZXQueCAtIHNjcm9sbC54LFxuXHRcdFx0eTogb2Zmc2V0LnkgLSBzY3JvbGwueVxuXHRc
dH07XG5cblx0XHRpZiAocmVsYXRpdmUgJiYgKHJlbGF0aXZlID0gZG9jdW1lbnQuaWQocmVsYXRp
dmUpKSl7XG5cdFx0XHR2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IHJlbGF0aXZlLmdldFBvc2l0aW9u
KCk7XG5cdFx0XHRyZXR1cm4ge3g6IHBvc2l0aW9uLnggLSByZWxhdGl2ZVBvc2l0aW9uLnggLSBs
ZWZ0Qm9yZGVyKHJlbGF0aXZlKSwgeTogcG9zaXRpb24ueSAtIHJlbGF0aXZlUG9zaXRpb24ueSAt
IHRvcEJvcmRlcihyZWxhdGl2ZSl9O1xuXHRcdH1cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0s
XG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHRcdGlmIChpc0JvZHko
dGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5hdGVzKCk7XG5cdFx0dmFy
IHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihlbGVtZW50KSxcblx0XHRcdHNpemUgPSB0aGlz
LmdldFNpemUoKTtcblx0XHR2YXIgb2JqID0ge1xuXHRcdFx0bGVmdDogcG9zaXRpb24ueCxcblx0
XHRcdHRvcDogcG9zaXRpb24ueSxcblx0XHRcdHdpZHRoOiBzaXplLngsXG5cdFx0XHRoZWlnaHQ6
IHNpemUueVxuXHRcdH07XG5cdFx0b2JqLnJpZ2h0ID0gb2JqLmxlZnQgKyBvYmoud2lkdGg7XG5c
dFx0b2JqLmJvdHRvbSA9IG9iai50b3AgKyBvYmouaGVpZ2h0O1xuXHRcdHJldHVybiBvYmo7XG5c
dH0sXG5cblx0Y29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRcdHJldHVybiB7XG5c
dFx0XHRsZWZ0OiBvYmoueCAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4tbGVmdCcpLFxuXHRc
dFx0dG9wOiBvYmoueSAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4tdG9wJylcblx0XHR9O1xu
XHR9LFxuXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRcdHJldHVybiB0aGlzLnNl
dFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihvYmopKTtcblx0fVxuXG59KTtcblxuXG5bRG9j
dW1lbnQsIFdpbmRvd10uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0U2l6ZTogZnVuY3Rp
b24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4g
e3g6IGRvYy5jbGllbnRXaWR0aCwgeTogZG9jLmNsaWVudEhlaWdodH07XG5cdH0sXG5cblx0Z2V0
U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdHZhciB3aW4gPSB0aGlzLmdldFdpbmRvdygpLCBkb2Mg
PSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDogd2luLnBhZ2VYT2Zmc2V0
IHx8IGRvYy5zY3JvbGxMZWZ0LCB5OiB3aW4ucGFnZVlPZmZzZXQgfHwgZG9jLnNjcm9sbFRvcH07
XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0
Q29tcGF0RWxlbWVudCh0aGlzKSxcblx0XHRcdG1pbiA9IHRoaXMuZ2V0U2l6ZSgpLFxuXHRcdFx0
Ym9keSA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdFx0cmV0dXJuIHt4OiBNYXRoLm1h
eChkb2Muc2Nyb2xsV2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIG1pbi54KSwgeTogTWF0aC5tYXgo
ZG9jLnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIG1pbi55KX07XG5cdH0sXG5cblx0
Z2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0fSxc
blxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2l6ZSA9IHRoaXMuZ2V0
U2l6ZSgpO1xuXHRcdHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IHNpemUueSwgcmln
aHQ6IHNpemUueCwgaGVpZ2h0OiBzaXplLnksIHdpZHRoOiBzaXplLnh9O1xuXHR9XG5cbn0pO1xu
XG4vLyBwcml2YXRlIG1ldGhvZHNcblxudmFyIHN0eWxlU3RyaW5nID0gRWxlbWVudC5nZXRDb21w
dXRlZFN0eWxlO1xuXG5mdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50LCBzdHlsZSl7XG5cdHJl
dHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHlsZSkudG9JbnQoKSB8fCAwO1xufVxuXG5cblxu
ZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVu
dCwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gbGVmdEJvcmRlcihlbGVtZW50
KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItbGVmdC13aWR0aCcpO1xu
fVxuXG5mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7XG5cdHJldHVybiAoL14oPzpib2R5fGh0bWwp
JC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBhdEVsZW1l
bnQoZWxlbWVudCl7XG5cdHZhciBkb2MgPSBlbGVtZW50LmdldERvY3VtZW50KCk7XG5cdHJldHVy
biAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBk
b2MuaHRtbCA6IGRvYy5ib2R5O1xufVxuXG59KSgpO1xuXG4vL2FsaWFzZXNcbkVsZW1lbnQuYWxp
YXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7IC8vY29tcGF0YWJpbGl0eVxuXG5bV2luZG93
LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0SGVpZ2h0
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS55O1xuXHR9LFxuXG5cdGdl
dFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS54O1xuXHR9LFxu
XG5cdGdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwo
KS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0U2Nyb2xsKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxIZWlnaHQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xs
V2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLng7XG5c
dH0sXG5cblx0Z2V0VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9u
KCkueTtcblx0fSxcblxuXHRnZXRMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdl
dFBvc2l0aW9uKCkueDtcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeFxuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgdGhlIGJhc2ljIGFuaW1hdGlvbiBsb2dpYyB0byBiZSBleHRlbmRl
ZCBieSBhbGwgb3RoZXIgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdXG5c
bnByb3ZpZGVzOiBGeFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgRnggPSB0aGlz
LkZ4ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9u
cywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHtcblx0XHQvKlxuXHRcdG9uU3RhcnQ6
IG5pbCxcblx0XHRvbkNhbmNlbDogbmlsLFxuXHRcdG9uQ29tcGxldGU6IG5pbCxcblx0XHQqL1xu
XHRcdGZwczogNjAsXG5cdFx0dW5pdDogZmFsc2UsXG5cdFx0ZHVyYXRpb246IDUwMCxcblx0XHRm
cmFtZXM6IG51bGwsXG5cdFx0ZnJhbWVTa2lwOiB0cnVlLFxuXHRcdGxpbms6ICdpZ25vcmUnXG5c
dH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5zdWJqZWN0
ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xu
XHR9LFxuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9u
KHApe1xuXHRcdFx0cmV0dXJuIC0oTWF0aC5jb3MoTWF0aC5QSSAqIHApIC0gMSkgLyAyO1xuXHRc
dH07XG5cdH0sXG5cblx0c3RlcDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodGhpcy5vcHRpb25z
LmZyYW1lU2tpcCl7XG5cdFx0XHR2YXIgZGlmZiA9ICh0aGlzLnRpbWUgIT0gbnVsbCkgPyAobm93
IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRpZmYgLyB0aGlzLmZyYW1lSW50ZXJ2YWw7XG5c
dFx0XHR0aGlzLnRpbWUgPSBub3c7XG5cdFx0XHR0aGlzLmZyYW1lICs9IGZyYW1lcztcblx0XHR9
IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSsrO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmZyYW1l
IDwgdGhpcy5mcmFtZXMpe1xuXHRcdFx0dmFyIGRlbHRhID0gdGhpcy50cmFuc2l0aW9uKHRoaXMu
ZnJhbWUgLyB0aGlzLmZyYW1lcyk7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5m
cm9tLCB0aGlzLnRvLCBkZWx0YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lID0g
dGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlz
LnRvLCAxKSk7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0OiBmdW5j
dGlvbihub3cpe1xuXHRcdHJldHVybiBub3c7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24o
ZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRyZXR1cm4gRnguY29tcHV0ZShmcm9tLCB0bywgZGVsdGEp
O1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5pc1J1bm5pbmco
KSkgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5cdFx0XHRj
YXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2No
YWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1
cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzdGFydDogZnVu
Y3Rpb24oZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhmcm9tLCB0bykpIHJldHVybiB0
aGlzO1xuXHRcdHRoaXMuZnJvbSA9IGZyb207XG5cdFx0dGhpcy50byA9IHRvO1xuXHRcdHRoaXMu
ZnJhbWUgPSAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCkgPyAwIDogLTE7XG5cdFx0dGhpcy50aW1l
ID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmdldFRyYW5zaXRpb24oKTtcblx0
XHR2YXIgZnJhbWVzID0gdGhpcy5vcHRpb25zLmZyYW1lcywgZnBzID0gdGhpcy5vcHRpb25zLmZw
cywgZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZHVyYXRpb247XG5cdFx0dGhpcy5kdXJhdGlvbiA9
IEZ4LkR1cmF0aW9uc1tkdXJhdGlvbl0gfHwgZHVyYXRpb24udG9JbnQoKTtcblx0XHR0aGlzLmZy
YW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXHRcdHRoaXMuZnJhbWVzID0gZnJhbWVzIHx8IE1h
dGgucm91bmQodGhpcy5kdXJhdGlvbiAvIHRoaXMuZnJhbWVJbnRlcnZhbCk7XG5cdFx0aWYgKHRo
aXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRo
ZW5hYmxlKHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdzdGFydCcs
IHRoaXMuc3ViamVjdCk7XG5cdFx0cHVzaEluc3RhbmNlLmNhbGwodGhpcywgZnBzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlz
UnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2Uu
Y2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdGlmICh0aGlzLmZyYW1lcyA9PSB0
aGlzLmZyYW1lKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgdGhpcy5zdWJq
ZWN0KTtcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxDaGFpbigpKSB0aGlzLmZpcmVFdmVudCgnY2hh
aW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlz
LmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJl
c29sdmUodGhpcy5zdWJqZWN0ID09PSB0aGlzID8gbnVsbCA6IHRoaXMuc3ViamVjdCk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRp
ZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVs
bEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0XHR0aGlzLmZyYW1l
ID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJywgdGhpcy5zdWJq
ZWN0KS5jbGVhckNoYWluKCk7XG5cdFx0XHR0aGlzLnJlamVjdCh0aGlzLnN1YmplY3QpO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwYXVzZTogZnVuY3Rpb24oKXtcblx0XHRp
ZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVs
bEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlc3VtZTogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1Bh
dXNlZCgpKSBwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxp
c3QgPSBpbnN0YW5jZXNbdGhpcy5vcHRpb25zLmZwc107XG5cdFx0cmV0dXJuIGxpc3QgJiYgbGlz
dC5jb250YWlucyh0aGlzKTtcblx0fSxcblxuXHRpc1BhdXNlZDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1lcykgJiYgIXRoaXMuaXNSdW5uaW5nKCk7XG5c
dH1cblxufSk7XG5cbkZ4LmNvbXB1dGUgPSBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRy
ZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207XG59O1xuXG5GeC5EdXJhdGlvbnMgPSB7
J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9O1xuXG4vLyBnbG9iYWwg
dGltZXJzXG5cbnZhciBpbnN0YW5jZXMgPSB7fSwgdGltZXJzID0ge307XG5cbnZhciBsb29wID0g
ZnVuY3Rpb24oKXtcblx0dmFyIG5vdyA9IERhdGUubm93KCk7XG5cdGZvciAodmFyIGkgPSB0aGlz
Lmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGluc3RhbmNlID0gdGhpc1tpXTtcblx0XHRpZiAoaW5z
dGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTtcblx0fVxufTtcblxudmFyIHB1c2hJbnN0YW5jZSA9
IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc10gfHwgKGluc3RhbmNl
c1tmcHNdID0gW10pO1xuXHRsaXN0LnB1c2godGhpcyk7XG5cdGlmICghdGltZXJzW2Zwc10pIHRp
bWVyc1tmcHNdID0gbG9vcC5wZXJpb2RpY2FsKE1hdGgucm91bmQoMTAwMCAvIGZwcyksIGxpc3Qp
O1xufTtcblxudmFyIHB1bGxJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0g
aW5zdGFuY2VzW2Zwc107XG5cdGlmIChsaXN0KXtcblx0XHRsaXN0LmVyYXNlKHRoaXMpO1xuXHRc
dGlmICghbGlzdC5sZW5ndGggJiYgdGltZXJzW2Zwc10pe1xuXHRcdFx0ZGVsZXRlIGluc3RhbmNl
c1tmcHNdO1xuXHRcdFx0dGltZXJzW2Zwc10gPSBjbGVhckludGVydmFsKHRpbWVyc1tmcHNdKTtc
blx0XHR9XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguQ1NTXG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ1NTIGFuaW1hdGlvbiBsb2dpYy4gVXNlZCBieSBGeC5U
d2VlbiwgRnguTW9ycGgsIEZ4LkVsZW1lbnRzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IFtGeCwgRWxlbWVudC5TdHlsZV1cblxucHJvdmlkZXM6IEZ4LkNTU1xu
XG4uLi5cbiovXG5cbkZ4LkNTUyA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRngsXG5cblx0
Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVjdFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9u
KGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpe1xuXHRcdHZhbHVlcyA9IEFycmF5LmNvbnZlcnQo
dmFsdWVzKTtcblx0XHR2YXIgZnJvbSA9IHZhbHVlc1swXSwgdG8gPSB2YWx1ZXNbMV07XG5cdFx0
aWYgKHRvID09IG51bGwpe1xuXHRcdFx0dG8gPSBmcm9tO1xuXHRcdFx0ZnJvbSA9IGVsZW1lbnQu
Z2V0U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0dmFyIHVuaXQgPSB0aGlzLm9wdGlvbnMudW5pdDtc
blx0XHRcdC8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5tb3JyL2Z4L2Js
b2IvbWFzdGVyL2Z4LmpzI0wyOTlcblx0XHRcdGlmICh1bml0ICYmIGZyb20gJiYgdHlwZW9mIGZy
b20gPT0gJ3N0cmluZycgJiYgZnJvbS5zbGljZSgtdW5pdC5sZW5ndGgpICE9IHVuaXQgJiYgcGFy
c2VGbG9hdChmcm9tKSAhPSAwKXtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwg
dG8gKyB1bml0KTtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxlbWVudC5nZXRDb21wdXRlZFN0eWxl
KHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gSUUgYW5kIE9wZXJhIHN1cHBvcnQgcGl4ZWxMZWZ0IG9y
IHBpeGVsV2lkdGhcblx0XHRcdFx0aWYgKCEoL3B4JC8udGVzdCh2YWx1ZSkpKXtcblx0XHRcdFx0
XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbKCdwaXhlbC0nICsgcHJvcGVydHkpLmNhbWVsQ2FzZSgp
XTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdFx0XHQvLyBhZGFwdGVk
IGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcv
MjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxXG5cdFx0XHRcdFx0XHR2YXIgbGVmdCA9IGVsZW1l
bnQuc3R5bGUubGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IHRvICsgdW5p
dDtcblx0XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZS5waXhlbExlZnQ7XG5cdFx0XHRc
dFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxu
XHRcdFx0XHRmcm9tID0gKHRvIHx8IDEpIC8gKHBhcnNlRmxvYXQodmFsdWUpIHx8IDEpICogKHBh
cnNlRmxvYXQoZnJvbSkgfHwgMCk7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHks
IGZyb20gKyB1bml0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtmcm9tOiB0aGlzLnBh
cnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9O1xuXHR9LFxuXG5cdC8vcGFyc2VzIGEgdmFs
dWUgaW50byBhbiBhcnJheVxuXG5cdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFsdWUg
PSBGdW5jdGlvbi5jb252ZXJ0KHZhbHVlKSgpO1xuXHRcdHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9
PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDogQXJyYXkuY29udmVydCh2YWx1ZSk7XG5c
dFx0cmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2YWwpe1xuXHRcdFx0dmFsID0gU3RyaW5nKHZh
bCk7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdE9iamVjdC5lYWNoKEZ4LkNTUy5Q
YXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpe1xuXHRcdFx0XHRpZiAoZm91bmQpIHJldHVybjtcblx0
XHRcdFx0dmFyIHBhcnNlZCA9IHBhcnNlci5wYXJzZSh2YWwpO1xuXHRcdFx0XHRpZiAocGFyc2Vk
IHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBhcnNlZCwgcGFyc2VyOiBwYXJzZXJ9
O1xuXHRcdFx0fSk7XG5cdFx0XHRmb3VuZCA9IGZvdW5kIHx8IHt2YWx1ZTogdmFsLCBwYXJzZXI6
IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cdFx0fSk7XG5c
dH0sXG5cblx0Ly9jb21wdXRlcyBieSBhIGZyb20gYW5kIHRvIHByZXBhcmVkIG9iamVjdHMsIHVz
aW5nIHRoZWlyIHBhcnNlcnMuXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRh
KXtcblx0XHR2YXIgY29tcHV0ZWQgPSBbXTtcblx0XHQoTWF0aC5taW4oZnJvbS5sZW5ndGgsIHRv
Lmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpe1xuXHRcdFx0Y29tcHV0ZWQucHVzaCh7dmFsdWU6
IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9baV0udmFsdWUsIGRlbHRh
KSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pO1xuXHRcdH0pO1xuXHRcdGNvbXB1dGVkLiRmYW1p
bHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdmeDpjc3M6dmFsdWUnKTtcblx0XHRyZXR1cm4gY29tcHV0
ZWQ7XG5cdH0sXG5cblx0Ly9zZXJ2ZXMgdGhlIHZhbHVlIGFzIHNldHRhYmxlXG5cblx0c2VydmU6
IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnZng6Y3Nz
OnZhbHVlJykgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcblx0XHR2YXIgcmV0dXJuZWQgPSBb
XTtcblx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7XG5cdFx0XHRyZXR1cm5lZCA9IHJldHVy
bmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5pdCkpO1xuXHRcdH0pO1xu
XHRcdHJldHVybiByZXR1cm5lZDtcblx0fSxcblxuXHQvL3JlbmRlcnMgdGhlIGNoYW5nZSB0byBh
biBlbGVtZW50XG5cblx0cmVuZGVyOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUs
IHVuaXQpe1xuXHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRoaXMuc2VydmUodmFsdWUs
IHVuaXQpKTtcblx0fSxcblxuXHQvL3NlYXJjaGVzIGluc2lkZSB0aGUgcGFnZSBjc3MgdG8gZmlu
ZCB0aGUgdmFsdWVzIGZvciBhIHNlbGVjdG9yXG5cblx0c2VhcmNoOiBmdW5jdGlvbihzZWxlY3Rv
cil7XG5cdFx0aWYgKEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0pIHJldHVybiBGeC5DU1MuQ2FjaGVb
c2VsZWN0b3JdO1xuXHRcdHZhciB0byA9IHt9LCBzZWxlY3RvclRlc3QgPSBuZXcgUmVnRXhwKCde
JyArIHNlbGVjdG9yLmVzY2FwZVJlZ0V4cCgpICsgJyQnKTtcblxuXHRcdHZhciBzZWFyY2hTdHls
ZXMgPSBmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRBcnJheS5lYWNoKHJ1bGVzLCBmdW5jdGlvbihy
dWxlKXtcblx0XHRcdFx0aWYgKHJ1bGUubWVkaWEpe1xuXHRcdFx0XHRcdHNlYXJjaFN0eWxlcyhy
dWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0
fVxuXHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGUpIHJldHVybjtcblx0XHRcdFx0dmFyIHNlbGVjdG9y
VGV4dCA9IChydWxlLnNlbGVjdG9yVGV4dCkgPyBydWxlLnNlbGVjdG9yVGV4dC5yZXBsYWNlKC9e
XFx3Ky8sIGZ1bmN0aW9uKG0pe1xuXHRcdFx0XHRcdHJldHVybiBtLnRvTG93ZXJDYXNlKCk7XG5c
dFx0XHRcdH0pIDogbnVsbDtcblx0XHRcdFx0aWYgKCFzZWxlY3RvclRleHQgfHwgIXNlbGVjdG9y
VGVzdC50ZXN0KHNlbGVjdG9yVGV4dCkpIHJldHVybjtcblx0XHRcdFx0T2JqZWN0LmVhY2goRWxl
bWVudC5TdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBzdHlsZSl7XG5cdFx0XHRcdFx0aWYgKCFydWxl
LnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0U3R5bGVzW3N0eWxlXSkgcmV0dXJuO1xuXHRc
dFx0XHRcdHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTtcblx0XHRcdFx0XHR0b1tz
dHlsZV0gPSAoKC9ecmdiLykudGVzdCh2YWx1ZSkpID8gdmFsdWUucmdiVG9IZXgoKSA6IHZhbHVl
O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRBcnJheS5lYWNoKGRvY3Vt
ZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVldCl7XG5cdFx0XHR2YXIgaHJlZiA9IHNoZWV0
LmhyZWY7XG5cdFx0XHRpZiAoaHJlZiAmJiBocmVmLmluZGV4T2YoJzovLycpID4gLTEgJiYgaHJl
Zi5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgPT0gLTEpIHJldHVybjtcblx0XHRcdHZhciBydWxl
cyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuXHRcdFx0c2VhcmNoU3R5bGVzKHJ1
bGVzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSA9IHRvO1xu
XHR9XG5cbn0pO1xuXG5GeC5DU1MuQ2FjaGUgPSB7fTtcblxuRnguQ1NTLlBhcnNlcnMgPSB7XG5c
blx0Q29sb3I6IHtcblx0XHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYgKHZhbHVl
Lm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUuaGV4VG9SZ2IodHJ1ZSk7
XG5cdFx0XHRyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXFxkKyksXFxzKihcXGQrKSxc
XHMqKFxcZCspLykpKSA/IFt2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdXSA6IGZhbHNlO1xu
XHRcdH0sXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRcdHJl
dHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7XG5cdFx0XHRcdHJldHVybiBNYXRoLnJv
dW5kKEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0sIGRlbHRhKSk7XG5cdFx0XHR9KTtcblx0XHR9
LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUubWFwKE51
bWJlcik7XG5cdFx0fVxuXHR9LFxuXG5cdE51bWJlcjoge1xuXHRcdHBhcnNlOiBwYXJzZUZsb2F0
LFxuXHRcdGNvbXB1dGU6IEZ4LmNvbXB1dGUsXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1
bml0KXtcblx0XHRcdHJldHVybiAodW5pdCkgPyB2YWx1ZSArIHVuaXQgOiB2YWx1ZTtcblx0XHR9
XG5cdH0sXG5cblx0U3RyaW5nOiB7XG5cdFx0cGFyc2U6IEZ1bmN0aW9uLmNvbnZlcnQoZmFsc2Up
LFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKHplcm8sIG9uZSl7XG5cdFx0XHRyZXR1cm4gb25lO1xu
XHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5c
dFx0fVxuXHR9XG5cbn07XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4Lk1vcnBoXG5cbmRlc2Ny
aXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBudW1i
ZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcgYW4gb2JqZWN0IG9mIHJ1
bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBGeC5Nb3JwaFxuXG4uLi5c
biovXG5cbkZ4Lk1vcnBoID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0
aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50
ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQo
b3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0eXBlb2Yg
bm93ID09ICdzdHJpbmcnKSBub3cgPSB0aGlzLnNlYXJjaChub3cpO1xuXHRcdGZvciAodmFyIHAg
aW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHAsIG5vd1twXSwgdGhpcy5vcHRpb25z
LnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZy
b20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIG5vdyA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gZnJv
bSkgbm93W3BdID0gdGhpcy5wYXJlbnQoZnJvbVtwXSwgdG9bcF0sIGRlbHRhKTtcblx0XHRyZXR1
cm4gbm93O1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0aWVzKXtcblx0XHRpZiAo
IXRoaXMuY2hlY2socHJvcGVydGllcykpIHJldHVybiB0aGlzO1xuXHRcdGlmICh0eXBlb2YgcHJv
cGVydGllcyA9PSAnc3RyaW5nJykgcHJvcGVydGllcyA9IHRoaXMuc2VhcmNoKHByb3BlcnRpZXMp
O1xuXHRcdHZhciBmcm9tID0ge30sIHRvID0ge307XG5cdFx0Zm9yICh2YXIgcCBpbiBwcm9wZXJ0
aWVzKXtcblx0XHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCBwLCBw
cm9wZXJ0aWVzW3BdKTtcblx0XHRcdGZyb21bcF0gPSBwYXJzZWQuZnJvbTtcblx0XHRcdHRvW3Bd
ID0gcGFyc2VkLnRvO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQoZnJvbSwgdG8pO1xu
XHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubW9ycGggPSB7XG5cblx0c2V0OiBmdW5j
dGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5jYW5jZWwoKS5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgbW9ycGggPSB0aGlzLnJldHJpZXZlKCdtb3JwaCcpO1xuXHRcdGlmICghbW9ycGgp
e1xuXHRcdFx0bW9ycGggPSBuZXcgRnguTW9ycGgodGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5c
dFx0XHR0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vcnBo
O1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRtb3JwaDogZnVuY3Rpb24o
cHJvcHMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLnN0YXJ0KHByb3BzKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5UcmFuc2l0aW9uc1xuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2YgYWR2YW5jZWQgdHJhbnNpdGlvbnMgdG8gYmUg
dXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWFzaW5nIEVxdWF0aW9ucyBieSBSb2JlcnQgUGVubmVy
LCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2luZy8+LCBtb2RpZmllZCBhbmQgb3B0
aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29scy5cblxucmVxdWlyZXM6IEZ4XG5cbnByb3Zp
ZGVzOiBGeC5UcmFuc2l0aW9uc1xuXG4uLi5cbiovXG5cbkZ4LmltcGxlbWVudCh7XG5cblx0Z2V0
VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHJhbnMgPSB0aGlzLm9wdGlvbnMudHJh
bnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJbk91dDtcblx0XHRpZiAodHlwZW9m
IHRyYW5zID09ICdzdHJpbmcnKXtcblx0XHRcdHZhciBkYXRhID0gdHJhbnMuc3BsaXQoJzonKTtc
blx0XHRcdHRyYW5zID0gRnguVHJhbnNpdGlvbnM7XG5cdFx0XHR0cmFucyA9IHRyYW5zW2RhdGFb
MF1dIHx8IHRyYW5zW2RhdGFbMF0uY2FwaXRhbGl6ZSgpXTtcblx0XHRcdGlmIChkYXRhWzFdKSB0
cmFucyA9IHRyYW5zWydlYXNlJyArIGRhdGFbMV0uY2FwaXRhbGl6ZSgpICsgKGRhdGFbMl0gPyBk
YXRhWzJdLmNhcGl0YWxpemUoKSA6ICcnKV07XG5cdFx0fVxuXHRcdHJldHVybiB0cmFucztcblx0
fVxuXG59KTtcblxuRnguVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5zaXRpb24sIHBhcmFtcyl7
XG5cdHBhcmFtcyA9IEFycmF5LmNvbnZlcnQocGFyYW1zKTtcblx0dmFyIGVhc2VJbiA9IGZ1bmN0
aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHRyYW5zaXRpb24ocG9zLCBwYXJhbXMpO1xuXHR9O1xuXHRy
ZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHtcblx0XHRlYXNlSW46IGVhc2VJbixcblx0XHRl
YXNlT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIDEgLSB0cmFuc2l0aW9uKDEgLSBw
b3MsIHBhcmFtcyk7XG5cdFx0fSxcblx0XHRlYXNlSW5PdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0
XHRyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0aW9uKDIgKiBwb3MsIHBhcmFtcykgOiAoMiAt
IHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFyYW1zKSkpIC8gMjtcblx0XHR9XG5cdH0pO1xu
fTtcblxuRnguVHJhbnNpdGlvbnMgPSB7XG5cblx0bGluZWFyOiBmdW5jdGlvbih6ZXJvKXtcblx0
XHRyZXR1cm4gemVybztcblx0fVxuXG59O1xuXG5cblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kID0g
ZnVuY3Rpb24odHJhbnNpdGlvbnMpe1xuXHRmb3IgKHZhciB0cmFuc2l0aW9uIGluIHRyYW5zaXRp
b25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKHRyYW5z
aXRpb25zW3RyYW5zaXRpb25dKTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCh7XG5cblx0
UG93OiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgeCAmJiB4WzBdIHx8
IDYpO1xuXHR9LFxuXG5cdEV4cG86IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiBNYXRoLnBvdygy
LCA4ICogKHAgLSAxKSk7XG5cdH0sXG5cblx0Q2lyYzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJu
IDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xuXHR9LFxuXG5cdFNpbmU6IGZ1bmN0aW9uKHAp
e1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MocCAqIE1hdGguUEkgLyAyKTtcblx0fSxcblxuXHRC
YWNrOiBmdW5jdGlvbihwLCB4KXtcblx0XHR4ID0geCAmJiB4WzBdIHx8IDEuNjE4O1xuXHRcdHJl
dHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEpICogcCAtIHgpO1xuXHR9LFxuXG5cdEJvdW5j
ZTogZnVuY3Rpb24ocCl7XG5cdFx0dmFyIHZhbHVlO1xuXHRcdGZvciAodmFyIGEgPSAwLCBiID0g
MTsgMTsgYSArPSBiLCBiIC89IDIpe1xuXHRcdFx0aWYgKHAgPj0gKDcgLSA0ICogYSkgLyAxMSl7
XG5cdFx0XHRcdHZhbHVlID0gYiAqIGIgLSBNYXRoLnBvdygoMTEgLSA2ICogYSAtIDExICogcCkg
LyA0LCAyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1
ZTtcblx0fSxcblxuXHRFbGFzdGljOiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5w
b3coMiwgMTAgKiAtLXApICogTWF0aC5jb3MoMjAgKiBwICogTWF0aC5QSSAqICh4ICYmIHhbMF0g
fHwgMSkgLyAzKTtcblx0fVxuXG59KTtcblxuWydRdWFkJywgJ0N1YmljJywgJ1F1YXJ0JywgJ1F1
aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBpKXtcblx0RnguVHJhbnNpdGlvbnNbdHJh
bnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0
aC5wb3cocCwgaSArIDIpO1xuXHR9KTtcbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlR3ZWVu
XG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZSwgZWZmZWN0IHRvIHRyYW5zaXRpb24g
YW55IENTUyBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IFtGeC5Ud2VlbiwgRWxlbWVu
dC5mYWRlLCBFbGVtZW50LmhpZ2hsaWdodF1cblxuLi4uXG4qL1xuXG5GeC5Ud2VlbiA9IG5ldyBD
bGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3Vt
ZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNl
dDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0g
MSl7XG5cdFx0XHRub3cgPSBwcm9wZXJ0eTtcblx0XHRcdHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0
eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7XG5cdFx0fVxuXHRcdHRoaXMucmVuZGVyKHRoaXMu
ZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRc
dGlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR2
YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTtcblx0XHR0aGlzLnByb3BlcnR5ID0g
dGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Muc2hpZnQoKTtcblx0XHR2YXIgcGFyc2VkID0g
dGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhpcy5wcm9wZXJ0eSwgYXJncyk7XG5cdFx0cmV0
dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBwYXJzZWQudG8pO1xuXHR9XG5cbn0pO1xuXG5F
bGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtc
blx0XHR0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHdlZW4g
PSB0aGlzLnJldHJpZXZlKCd0d2VlbicpO1xuXHRcdGlmICghdHdlZW4pe1xuXHRcdFx0dHdlZW4g
PSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3Jl
KCd0d2VlbicsIHR3ZWVuKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR3ZWVuO1xuXHR9XG5cbn07XG5c
bkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHR0d2VlbjogZnVuY3Rpb24ocHJvcGVydHksIGZyb20s
IHRvKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5zdGFydChwcm9wZXJ0eSwgZnJvbSwgdG8pO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZhZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGZh
ZGUgPSB0aGlzLmdldCgndHdlZW4nKSwgbWV0aG9kLCBhcmdzID0gWydvcGFjaXR5J10uYXBwZW5k
KGFyZ3VtZW50cyksIHRvZ2dsZTtcblx0XHRpZiAoYXJnc1sxXSA9PSBudWxsKSBhcmdzWzFdID0g
J3RvZ2dsZSc7XG5cdFx0c3dpdGNoIChhcmdzWzFdKXtcblx0XHRcdGNhc2UgJ2luJzogbWV0aG9k
ID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnb3V0JzogbWV0aG9k
ID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnc2hvdyc6IG1ldGhv
ZCA9ICdzZXQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdoaWRlJzogbWV0aG9k
ID0gJ3NldCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3RvZ2dsZSc6XG5cdFx0
XHRcdHZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywgdGhpcy5nZXRTdHlsZSgn
b3BhY2l0eScpID09IDEpO1xuXHRcdFx0XHRtZXRob2QgPSAnc3RhcnQnO1xuXHRcdFx0XHRhcmdz
WzFdID0gZmxhZyA/IDAgOiAxO1xuXHRcdFx0XHR0aGlzLnN0b3JlKCdmYWRlOmZsYWcnLCAhZmxh
Zyk7XG5cdFx0XHRcdHRvZ2dsZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVs
dDogbWV0aG9kID0gJ3N0YXJ0Jztcblx0XHR9XG5cdFx0aWYgKCF0b2dnbGUpIHRoaXMuZWxpbWlu
YXRlKCdmYWRlOmZsYWcnKTtcblx0XHRmYWRlW21ldGhvZF0uYXBwbHkoZmFkZSwgYXJncyk7XG5c
dFx0dmFyIHRvID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG5cdFx0aWYgKG1ldGhvZCA9PSAn
c2V0Jyl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgdG8gPT0gMCA/ICdoaWRk
ZW4nIDogJ3Zpc2libGUnKTtcblx0XHR9IGVsc2UgaWYgKHRvICE9IDApe1xuXHRcdFx0aWYgKGZh
ZGUuJGNoYWluLmxlbmd0aCl7XG5cdFx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRc
dFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRc
dFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0
XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHR9XG5c
dFx0fSBlbHNlIHtcblx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdFx0aWYgKHRo
aXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuZWxl
bWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblx0XHRcdFx0dGhpcy5jYWxs
Q2hhaW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVuZCl7XG5cdFx0aWYgKCFlbmQpe1xuXHRcdFx0
ZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJywgdGhpcy5nZXRTdHlsZSgn
YmFja2dyb3VuZC1jb2xvcicpKTtcblx0XHRcdGVuZCA9IChlbmQgPT0gJ3RyYW5zcGFyZW50Jykg
PyAnI2ZmZicgOiBlbmQ7XG5cdFx0fVxuXHRcdHZhciB0d2VlbiA9IHRoaXMuZ2V0KCd0d2Vlbicp
O1xuXHRcdHR3ZWVuLnN0YXJ0KCdiYWNrZ3JvdW5kLWNvbG9yJywgc3RhcnQgfHwgJyNmZmZmODgn
LCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCdiYWNrZ3JvdW5k
LWNvbG9yJywgdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJykpO1xuXHRcdFx0dHdl
ZW4uY2FsbENoYWluKCk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0XG5cbmRlc2NyaXB0aW9uOiBQb3dl
cmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhUVFBSZXF1ZXN0LlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtPYmplY3QsIEVsZW1lbnQs
IENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlLCBCcm93c2VyXVxuXG5wcm92
aWRlczogUmVxdWVzdFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZW1wdHkgPSBm
dW5jdGlvbigpe30sXG5cdHByb2dyZXNzU3VwcG9ydCA9ICgnb25wcm9ncmVzcycgaW4gbmV3IEJy
b3dzZXIuUmVxdWVzdCk7XG5cbnZhciBSZXF1ZXN0ID0gdGhpcy5SZXF1ZXN0ID0gbmV3IENsYXNz
KHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFi
bGVdLFxuXG5cdG9wdGlvbnM6IHsvKlxuXHRcdG9uUmVxdWVzdDogZnVuY3Rpb24oKXt9LFxuXHRc
dG9uTG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRcdG9uUHJvZ3Jlc3M6IGZ1
bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Db21wbGV0ZTogZnVuY3Rpb24oKXt9LFxuXHRc
dG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sXG5cdFx0b25TdWNjZXNzOiBmdW5jdGlvbihyZXNwb25z
ZVRleHQsIHJlc3BvbnNlWE1MKXt9LFxuXHRcdG9uRmFpbHVyZTogZnVuY3Rpb24oeGhyKXt9LFxu
XHRcdG9uRXhjZXB0aW9uOiBmdW5jdGlvbihoZWFkZXJOYW1lLCB2YWx1ZSl7fSxcblx0XHRvblRp
bWVvdXQ6IGZ1bmN0aW9uKCl7fSxcblx0XHR1c2VyOiAnJyxcblx0XHRwYXNzd29yZDogJycsXG5c
dFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqL1xuXHRcdHVybDogJycsXG5cdFx0ZGF0YTogJycs
XG5cdFx0aGVhZGVyczoge1xuXHRcdFx0J1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVl
c3QnLFxuXHRcdFx0J0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRleHQvaHRtbCwgYXBwbGlj
YXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH0sXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0
Zm9ybWF0OiBmYWxzZSxcblx0XHRtZXRob2Q6ICdwb3N0Jyxcblx0XHRsaW5rOiAnaWdub3JlJyxc
blx0XHRpc1N1Y2Nlc3M6IG51bGwsXG5cdFx0ZW11bGF0aW9uOiB0cnVlLFxuXHRcdHVybEVuY29k
ZWQ6IHRydWUsXG5cdFx0ZW5jb2Rpbmc6ICd1dGYtOCcsXG5cdFx0ZXZhbFNjcmlwdHM6IGZhbHNl
LFxuXHRcdGV2YWxSZXNwb25zZTogZmFsc2UsXG5cdFx0dGltZW91dDogMCxcblx0XHRub0NhY2hl
OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRo
aXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVhZGVycztcblx0fSxcblxu
XHRvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpe1xuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtcblx0
XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAhdGhpcy5ydW5uaW5nKSByZXR1cm47XG5cdFx0
dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0dXMgPSAwO1xuXHRcdEZ1bmN0aW9u
LmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBzdGF0dXMgPSB4aHIuc3RhdHVzO1xuXHRc
dFx0dGhpcy5zdGF0dXMgPSAoc3RhdHVzID09IDEyMjMpID8gMjA0IDogc3RhdHVzO1xuXHRcdH0u
YmluZCh0aGlzKSk7XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlm
IChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1w
dHk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIp
O1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNwb25zZSA9
IHt0ZXh0OiB0aGlzLnhoci5yZXNwb25zZVRleHQgfHwgJycsIHhtbDogdGhpcy54aHIucmVzcG9u
c2VYTUx9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNhbGwodGhpcywgdGhpcy5z
dGF0dXMpKVxuXHRcdFx0dGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2UudGV4dCwgdGhpcy5yZXNw
b25zZS54bWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHR9LFxuXG5cdGlz
U3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc3RhdHVzID0gdGhpcy5zdGF0dXM7XG5cdFx0
cmV0dXJuIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCk7XG5cdH0sXG5cblx0aXNSdW5u
aW5nOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAhIXRoaXMucnVubmluZztcblx0fSxcblxuXHRw
cm9jZXNzU2NyaXB0czogZnVuY3Rpb24odGV4dCl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ldmFs
UmVzcG9uc2UgfHwgKC8oZWNtYXxqYXZhKXNjcmlwdC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoJ0Nv
bnRlbnQtdHlwZScpKSkgcmV0dXJuIEJyb3dzZXIuZXhlYyh0ZXh0KTtcblx0XHRyZXR1cm4gdGV4
dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKTtcblx0fSxcblxuXHRzdWNj
ZXNzOiBmdW5jdGlvbih0ZXh0LCB4bWwpe1xuXHRcdHRoaXMub25TdWNjZXNzKHRoaXMucHJvY2Vz
c1NjcmlwdHModGV4dCksIHhtbCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0ZXh0OiB0ZXh0LCB4bWw6
IHhtbH0pO1xuXHR9LFxuXG5cdG9uU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVF
dmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVFdmVudCgnc3VjY2VzcycsIGFyZ3VtZW50
cykuY2FsbENoYWluKCk7XG5cdH0sXG5cblx0ZmFpbHVyZTogZnVuY3Rpb24oKXtcblx0XHR0aGlz
Lm9uRmFpbHVyZSgpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdmYWlsdXJlJywgeGhyOiB0
aGlzLnhocn0pO1xuXHR9LFxuXG5cdG9uRmFpbHVyZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZp
cmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQoJ2ZhaWx1cmUnLCB0aGlzLnhocik7XG5cdH0s
XG5cblx0bG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2xv
YWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHRwcm9ncmVzczogZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdwcm9ncmVzcycsIFtldmVudCwgdGhpcy54
aHJdKTtcblx0fSxcblxuXHR0aW1lb3V0OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50
KCd0aW1lb3V0JywgdGhpcy54aHIpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICd0aW1lb3V0
JywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdHNldEhlYWRlcjogZnVuY3Rpb24obmFtZSwg
dmFsdWUpe1xuXHRcdHRoaXMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0dXJuIEZ1bmN0
aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlzLnhoci5nZXRSZXNwb25z
ZUhlYWRlcihuYW1lKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5j
dGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2gg
KHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7
IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVy
LnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJu
IGZhbHNlO1xuXHR9LFxuXG5cdHNlbmQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdGlmICghdGhp
cy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLm9wdGlvbnMuaXNTdWNj
ZXNzID0gdGhpcy5vcHRpb25zLmlzU3VjY2VzcyB8fCB0aGlzLmlzU3VjY2Vzcztcblx0XHR0aGlz
LnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0dmFyIHR5cGUgPSB0eXBlT2Yob3B0aW9ucyk7XG5cdFx0
aWYgKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnZWxlbWVudCcpIG9wdGlvbnMgPSB7ZGF0
YTogb3B0aW9uc307XG5cblx0XHR2YXIgb2xkID0gdGhpcy5vcHRpb25zO1xuXHRcdG9wdGlvbnMg
PSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQudXJsLCBtZXRob2Q6IG9s
ZC5tZXRob2R9LCBvcHRpb25zKTtcblx0XHR2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YSwgdXJsID0g
U3RyaW5nKG9wdGlvbnMudXJsKSwgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9Mb3dlckNhc2Uo
KTtcblxuXHRcdHN3aXRjaCAodHlwZU9mKGRhdGEpKXtcblx0XHRcdGNhc2UgJ2VsZW1lbnQnOiBk
YXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVyeVN0cmluZygpOyBicmVhaztcblx0XHRcdGNh
c2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRhID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcoZGF0
YSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mb3JtYXQpe1xuXHRcdFx0dmFyIGZv
cm1hdCA9ICdmb3JtYXQ9JyArIHRoaXMub3B0aW9ucy5mb3JtYXQ7XG5cdFx0XHRkYXRhID0gKGRh
dGEpID8gZm9ybWF0ICsgJyYnICsgZGF0YSA6IGZvcm1hdDtcblx0XHR9XG5cblx0XHRpZiAodGhp
cy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAncG9zdCddLmNvbnRhaW5zKG1ldGhvZCkp
e1xuXHRcdFx0dmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9kO1xuXHRcdFx0ZGF0YSA9
IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21ldGhvZDtcblx0XHRcdG1ldGhvZCA9
ICdwb3N0Jztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLnVybEVuY29kZWQgJiYgWydw
b3N0JywgJ3B1dCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIGVuY29kaW5nID0gKHRo
aXMub3B0aW9ucy5lbmNvZGluZykgPyAnOyBjaGFyc2V0PScgKyB0aGlzLm9wdGlvbnMuZW5jb2Rp
bmcgOiAnJztcblx0XHRcdHRoaXMuaGVhZGVyc1snQ29udGVudC10eXBlJ10gPSAnYXBwbGljYXRp
b24veC13d3ctZm9ybS11cmxlbmNvZGVkJyArIGVuY29kaW5nO1xuXHRcdH1cblxuXHRcdGlmICgh
dXJsKSB1cmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTtcblxuXHRcdHZhciB0cmltUG9z
aXRpb24gPSB1cmwubGFzdEluZGV4T2YoJy8nKTtcblx0XHRpZiAodHJpbVBvc2l0aW9uID4gLTEg
JiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9mKCcjJykpID4gLTEpIHVybCA9IHVybC5zdWJz
dHIoMCwgdHJpbVBvc2l0aW9uKTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubm9DYWNoZSlcblx0
XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArIFN0cmluZy51
bmlxdWVJRCgpO1xuXG5cdFx0aWYgKGRhdGEgJiYgKG1ldGhvZCA9PSAnZ2V0JyB8fCBtZXRob2Qg
PT0gJ2RlbGV0ZScpKXtcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYn
IDogJz8nKSArIGRhdGE7XG5cdFx0XHRkYXRhID0gbnVsbDtcblx0XHR9XG5cblx0XHR2YXIgeGhy
ID0gdGhpcy54aHI7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCl7XG5cdFx0XHR4aHIub25sb2Fk
c3RhcnQgPSB0aGlzLmxvYWRzdGFydC5iaW5kKHRoaXMpO1xuXHRcdFx0eGhyLm9ucHJvZ3Jlc3Mg
PSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7XG5cdFx0fVxuXG5cdFx0eGhyLm9wZW4obWV0aG9k
LnRvVXBwZXJDYXNlKCksIHVybCwgdGhpcy5vcHRpb25zLmFzeW5jLCB0aGlzLm9wdGlvbnMudXNl
ciwgdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtcblx0XHRpZiAoKHRoaXMub3B0aW9ucy53aXRoQ3Jl
ZGVudGlhbHMpICYmICd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikgeGhyLndpdGhDcmVkZW50aWFs
cyA9IHRydWU7XG5cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gdGhpcy5vblN0YXRlQ2hh
bmdlLmJpbmQodGhpcyk7XG5cblx0XHRPYmplY3QuZWFjaCh0aGlzLmhlYWRlcnMsIGZ1bmN0aW9u
KHZhbHVlLCBrZXkpe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIo
a2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQo
J2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7XG5cdFx0XHRcdHRoaXMucmVqZWN0KHtyZWFzb246
ICdleGNlcHRpb24nLCB4aHI6IHhociwgZXhjZXB0aW9uOiBlfSk7XG5cdFx0XHR9XG5cdFx0fSwg
dGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7
XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUoe3JlYXNvbjogJ3NlbmQnfSk7XG5cdFx0fVxuXHRc
dHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7XG5cdFx0eGhyLnNlbmQoZGF0YSk7XG5cdFx0aWYg
KCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25TdGF0ZUNoYW5nZSgpO1xuXHRcdGVsc2UgaWYg
KHRoaXMub3B0aW9ucy50aW1lb3V0KSB0aGlzLnRpbWVyID0gdGhpcy50aW1lb3V0LmRlbGF5KHRo
aXMub3B0aW9ucy50aW1lb3V0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRj
YW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0aGlzO1xu
XHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHR4
aHIuYWJvcnQoKTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhp
cy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cdFx0eGhyLm9ucmVh
ZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnBy
b2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0dGhpcy54aHIgPSBuZXcgQnJv
d3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcpO1xuXHRcdHRoaXMu
cmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6IHhocn0pO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuWydnZXQnLCAncG9zdCcsICdwdXQnLCAn
ZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VUJywgJ1BPU1QnLCAnUFVUJywgJ0RFTEVURScs
ICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlvbihtZXRob2Qpe1xuXHRtZXRob2RzW21ldGhv
ZF0gPSBmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIgb2JqZWN0ID0ge1xuXHRcdFx0bWV0aG9kOiBt
ZXRob2Rcblx0XHR9O1xuXHRcdGlmIChkYXRhICE9IG51bGwpIG9iamVjdC5kYXRhID0gZGF0YTtc
blx0XHRyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7XG5cdH07XG59KTtcblxuUmVxdWVzdC5pbXBs
ZW1lbnQobWV0aG9kcyk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zZW5kID0ge1xuXG5cdHNldDog
ZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLmdldCgnc2VuZCcpLmNhbmNl
bCgpO1xuXHRcdHNlbmQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLnJldHJpZXZlKCdz
ZW5kJyk7XG5cdFx0aWYgKCFzZW5kKXtcblx0XHRcdHNlbmQgPSBuZXcgUmVxdWVzdCh7XG5cdFx0
XHRcdGRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCBtZXRob2Q6IHRoaXMuZ2V0KCdtZXRob2Qn
KSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2FjdGlvbicpXG5cdFx0XHR9KTtcblx0XHRcdHRo
aXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbmQ7XG5cdH1cblxu
fTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNlbmQ6IGZ1bmN0aW9uKHVybCl7XG5cdFx0
dmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7XG5cdFx0c2VuZGVyLnNlbmQoe2RhdGE6IHRo
aXMsIHVybDogdXJsIHx8IHNlbmRlci5vcHRpb25zLnVybH0pO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3QuSFRNTFxuXG5k
ZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9u
YWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIVE1MIHJlc3BvbnNlcy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgUmVxdWVzdF1cblxu
cHJvdmlkZXM6IFJlcXVlc3QuSFRNTFxuXG4uLi5cbiovXG5cblJlcXVlc3QuSFRNTCA9IG5ldyBD
bGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25zOiB7XG5cdFx0dXBkYXRl
OiBmYWxzZSxcblx0XHRhcHBlbmQ6IGZhbHNlLFxuXHRcdGV2YWxTY3JpcHRzOiB0cnVlLFxuXHRc
dGZpbHRlcjogZmFsc2UsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0QWNjZXB0OiAndGV4dC9odG1s
LCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fVxuXHR9LFxuXG5cdHN1Y2Nl
c3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLCByZXNw
b25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRyZXNwb25zZS5odG1sID0gdGV4dC5zdHJpcFNj
cmlwdHMoZnVuY3Rpb24oc2NyaXB0KXtcblx0XHRcdHJlc3BvbnNlLmphdmFzY3JpcHQgPSBzY3Jp
cHQ7XG5cdFx0fSk7XG5cblx0XHR2YXIgbWF0Y2ggPSByZXNwb25zZS5odG1sLm1hdGNoKC88Ym9k
eVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9pKTtcblx0XHRpZiAobWF0Y2gpIHJlc3BvbnNl
Lmh0bWwgPSBtYXRjaFsxXTtcblx0XHR2YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnKS5zZXQo
J2h0bWwnLCByZXNwb25zZS5odG1sKTtcblxuXHRcdHJlc3BvbnNlLnRyZWUgPSB0ZW1wLmNoaWxk
Tm9kZXM7XG5cdFx0cmVzcG9uc2UuZWxlbWVudHMgPSB0ZW1wLmdldEVsZW1lbnRzKG9wdGlvbnMu
ZmlsdGVyIHx8ICcqJyk7XG5cblx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLnRyZWUg
PSByZXNwb25zZS5lbGVtZW50cztcblx0XHRpZiAob3B0aW9ucy51cGRhdGUpe1xuXHRcdFx0dmFy
IHVwZGF0ZSA9IGRvY3VtZW50LmlkKG9wdGlvbnMudXBkYXRlKS5lbXB0eSgpO1xuXHRcdFx0aWYg
KG9wdGlvbnMuZmlsdGVyKSB1cGRhdGUuYWRvcHQocmVzcG9uc2UuZWxlbWVudHMpO1xuXHRcdFx0
ZWxzZSB1cGRhdGUuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5cdFx0fSBlbHNlIGlmIChv
cHRpb25zLmFwcGVuZCl7XG5cdFx0XHR2YXIgYXBwZW5kID0gZG9jdW1lbnQuaWQob3B0aW9ucy5h
cHBlbmQpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS5lbGVtZW50cy5yZXZl
cnNlKCkuaW5qZWN0KGFwcGVuZCk7XG5cdFx0XHRlbHNlIGFwcGVuZC5hZG9wdCh0ZW1wLmdldENo
aWxkcmVuKCkpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5ldmFsU2NyaXB0cykgQnJvd3Nlci5l
eGVjKHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXG5cdFx0dGhpcy5vblN1Y2Nlc3MocmVzcG9uc2Uu
dHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0bWwsIHJlc3BvbnNlLmphdmFzY3Jp
cHQpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dHJlZTogcmVzcG9uc2UudHJlZSwgZWxlbWVudHM6IHJl
c3BvbnNlLmVsZW1lbnRzLCBodG1sOiByZXNwb25zZS5odG1sLCBqYXZhc2NyaXB0OiByZXNwb25z
ZS5qYXZhc2NyaXB0fSk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5sb2FkID0g
e1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIGxvYWQgPSB0aGlzLmdldCgn
bG9hZCcpLmNhbmNlbCgpO1xuXHRcdGxvYWQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxvYWQgPSB0aGlz
LnJldHJpZXZlKCdsb2FkJyk7XG5cdFx0aWYgKCFsb2FkKXtcblx0XHRcdGxvYWQgPSBuZXcgUmVx
dWVzdC5IVE1MKHtkYXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgdXBkYXRlOiB0aGlzLCBtZXRo
b2Q6ICdnZXQnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdsb2FkJywgbG9hZCk7XG5cdFx0fVxuXHRc
dHJldHVybiBsb2FkO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRsb2Fk
OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZ2V0KCdsb2FkJykuc2VuZChBcnJheS5saW5rKGFyZ3Vt
ZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDogVHlwZS5pc1N0cmluZ30pKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBKU09OXG5cbmRlc2Ny
aXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5TZWVBbHNvOiA8aHR0cDovL3d3dy5qc29uLm9yZy8+XG5cbnJlcXVpcmVzOiBb
QXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl1cblxucHJvdmlkZXM6IEpTT05cblxuLi4u
XG4qL1xuXG5pZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRoaXMuSlNPTiA9IHt9O1xu
XG5cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBzcGVjaWFsID0geydcXGInOiAnXFxcXGInLCAnXFx0
JzogJ1xcXFx0JywgJ1xcbic6ICdcXFxcbicsICdcXGYnOiAnXFxcXGYnLCAnXFxyJzogJ1xcXFxy
JywgJ1wiJyA6ICdcXFxcXCInLCAnXFxcXCc6ICdcXFxcXFxcXCd9O1xuXG52YXIgZXNjYXBlID0g
ZnVuY3Rpb24oY2hyKXtcblx0cmV0dXJuIHNwZWNpYWxbY2hyXSB8fCAnXFxcXHUnICsgKCcwMDAw
JyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xufTtcblxuSlNP
Ti52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNl
KC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csICdAJykuXG5cdFx0
XHRcdFx0cmVwbGFjZSgvXCJbXlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxmYWxzZXxudWxsfC0/XFxk
Kyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/L2csICddJykuXG5cdFx0XHRcdFx0cmVw
bGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csICcnKTtcblxuXHRyZXR1cm4gKC9eW1xcXSw6
e31cXHNdKiQvKS50ZXN0KHN0cmluZyk7XG59O1xuXG5KU09OLmVuY29kZSA9IEpTT04uc3RyaW5n
aWZ5ID8gZnVuY3Rpb24ob2JqKXtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG59IDog
ZnVuY3Rpb24ob2JqKXtcblx0aWYgKG9iaiAmJiBvYmoudG9KU09OKSBvYmogPSBvYmoudG9KU09O
KCk7XG5cblx0c3dpdGNoICh0eXBlT2Yob2JqKSl7XG5cdFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRc
dHJldHVybiAnXCInICsgb2JqLnJlcGxhY2UoL1tcXHgwMC1cXHgxZlxcXFxcIl0vZywgZXNjYXBl
KSArICdcIic7XG5cdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0cmV0dXJuICdbJyArIG9iai5tYXAo
SlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7XG5cdFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFz
aCc6XG5cdFx0XHR2YXIgc3RyaW5nID0gW107XG5cdFx0XHRPYmplY3QuZWFjaChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0XHR2YXIganNvbiA9IEpTT04uZW5jb2RlKHZhbHVlKTtc
blx0XHRcdFx0aWYgKGpzb24pIHN0cmluZy5wdXNoKEpTT04uZW5jb2RlKGtleSkgKyAnOicgKyBq
c29uKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICd7JyArIHN0cmluZyArICd9Jztcblx0XHRj
YXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzogcmV0dXJuICcnICsgb2JqO1xuXHRcdGNhc2Ug
J251bGwnOiByZXR1cm4gJ251bGwnO1xuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuXG5KU09O
LnNlY3VyZSA9IHRydWU7XG5cblxuSlNPTi5kZWNvZGUgPSBmdW5jdGlvbihzdHJpbmcsIHNlY3Vy
ZSl7XG5cdGlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJpbmcpICE9ICdzdHJpbmcnKSByZXR1cm4g
bnVsbDtcblxuXHRpZiAoc2VjdXJlID09IG51bGwpIHNlY3VyZSA9IEpTT04uc2VjdXJlO1xuXHRp
ZiAoc2VjdXJlKXtcblx0XHRpZiAoSlNPTi5wYXJzZSkgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5n
KTtcblx0XHRpZiAoIUpTT04udmFsaWRhdGUoc3RyaW5nKSkgdGhyb3cgbmV3IEVycm9yKCdKU09O
IGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0eSBpcyBlbmFibGVkIGFuZCB0aGUg
dmFsdWUgaXMgbm90IHNlY3VyZS4nKTtcblx0fVxuXG5cdHJldHVybiBldmFsKCcoJyArIHN0cmlu
ZyArICcpJyk7XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3QuSlNPTlxu
XG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0
aW9uYWwgbWV0aG9kcyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIEpTT04gZGF0YS5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbUmVxdWVzdCwgSlNPTl1cblxu
cHJvdmlkZXM6IFJlcXVlc3QuSlNPTlxuXG4uLi5cbiovXG5cblJlcXVlc3QuSlNPTiA9IG5ldyBD
bGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25zOiB7XG5cdFx0LypvbkVy
cm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqL1xuXHRcdHNlY3VyZTogdHJ1ZVxuXHR9LFxu
XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMucGFyZW50KG9wdGlv
bnMpO1xuXHRcdE9iamVjdC5hcHBlbmQodGhpcy5oZWFkZXJzLCB7XG5cdFx0XHQnQWNjZXB0Jzog
J2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0J1gtUmVxdWVzdCc6ICdKU09OJ1xuXHRcdH0pO1xu
XHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBqc29uO1xuXHRcdHRy
eSB7XG5cdFx0XHRqc29uID0gdGhpcy5yZXNwb25zZS5qc29uID0gSlNPTi5kZWNvZGUodGV4dCwg
dGhpcy5vcHRpb25zLnNlY3VyZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3Ipe1xuXHRcdFx0dGhpcy5m
aXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxu
XHRcdGlmIChqc29uID09IG51bGwpe1xuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdFx0fSBlbHNl
IHtcblx0XHRcdHRoaXMub25TdWNjZXNzKGpzb24sIHRleHQpO1xuXHRcdFx0dGhpcy5yZXNvbHZl
KHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7XG5cdFx0fVxuXHR9XG5cbn0pO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IENvb2tpZVxuXG5kZXNjcmlwdGlvbjogQ2xhc3MgZm9yIGNyZWF0aW5nLCByZWFk
aW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29raWVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBCYXNlZCBvbiB0aGUgZnVuY3Rpb25zIGJ5IFBldGVy
LVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3JnKS5cblxucmVxdWlyZXM6IFtPcHRpb25z
LCBCcm93c2VyXVxuXG5wcm92aWRlczogQ29va2llXG5cbi4uLlxuKi9cblxudmFyIENvb2tpZSA9
IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogT3B0aW9ucyxcblxuXHRvcHRpb25zOiB7XG5c
dFx0cGF0aDogJy8nLFxuXHRcdGRvbWFpbjogZmFsc2UsXG5cdFx0ZHVyYXRpb246IGZhbHNlLFxu
XHRcdHNlY3VyZTogZmFsc2UsXG5cdFx0ZG9jdW1lbnQ6IGRvY3VtZW50LFxuXHRcdGVuY29kZTog
dHJ1ZSxcblx0XHRodHRwT25seTogZmFsc2Vcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlv
bihrZXksIG9wdGlvbnMpe1xuXHRcdHRoaXMua2V5ID0ga2V5O1xuXHRcdHRoaXMuc2V0T3B0aW9u
cyhvcHRpb25zKTtcblx0fSxcblxuXHR3cml0ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdGlmICh0
aGlzLm9wdGlvbnMuZW5jb2RlKSB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5c
dFx0aWYgKHRoaXMub3B0aW9ucy5kb21haW4pIHZhbHVlICs9ICc7IGRvbWFpbj0nICsgdGhpcy5v
cHRpb25zLmRvbWFpbjtcblx0XHRpZiAodGhpcy5vcHRpb25zLnBhdGgpIHZhbHVlICs9ICc7IHBh
dGg9JyArIHRoaXMub3B0aW9ucy5wYXRoO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZHVyYXRpb24p
e1xuXHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0ZGF0ZS5zZXRUaW1lKGRhdGUu
Z2V0VGltZSgpICsgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogMjQgKiA2MCAqIDYwICogMTAwMCk7
XG5cdFx0XHR2YWx1ZSArPSAnOyBleHBpcmVzPScgKyBkYXRlLnRvR01UU3RyaW5nKCk7XG5cdFx0
fVxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAnOyBzZWN1cmUnO1xuXHRc
dGlmICh0aGlzLm9wdGlvbnMuaHR0cE9ubHkpIHZhbHVlICs9ICc7IEh0dHBPbmx5Jztcblx0XHR0
aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0gdGhpcy5rZXkgKyAnPScgKyB2YWx1ZTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFkOiBmdW5jdGlvbigpe1xuXHRcdHZhciB2YWx1
ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUubWF0Y2goJyg/Ol58OylcXFxccyonICsg
dGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtdKiknKTtcblx0XHRyZXR1cm4gKHZhbHVl
KSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVsxXSkgOiBudWxsO1xuXHR9LFxuXG5cdGRpc3Bv
c2U6IGZ1bmN0aW9uKCl7XG5cdFx0bmV3IENvb2tpZSh0aGlzLmtleSwgT2JqZWN0Lm1lcmdlKHt9
LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9KSkud3JpdGUoJycpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9XG5cbn0pO1xuXG5Db29raWUud3JpdGUgPSBmdW5jdGlvbihrZXksIHZhbHVlLCBv
cHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS53cml0ZSh2YWx1ZSk7
XG59O1xuXG5Db29raWUucmVhZCA9IGZ1bmN0aW9uKGtleSl7XG5cdHJldHVybiBuZXcgQ29va2ll
KGtleSkucmVhZCgpO1xufTtcblxuQ29va2llLmRpc3Bvc2UgPSBmdW5jdGlvbihrZXksIG9wdGlv
bnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLmRpc3Bvc2UoKTtcbn07XG5c
bi8qXG4tLS1cblxubmFtZTogRE9NUmVhZHlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBj
dXN0b20gZXZlbnQgZG9tcmVhZHkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBb
RE9NUmVhZHksIERvbVJlYWR5XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbih3aW5kb3csIGRvY3Vt
ZW50KXtcblxudmFyIHJlYWR5LFxuXHRsb2FkZWQsXG5cdGNoZWNrcyA9IFtdLFxuXHRzaG91bGRQ
b2xsLFxuXHR0aW1lcixcblx0dGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTtcblxudmFyIGRvbXJlYWR5ID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVy
KTtcblx0aWYgKCFyZWFkeSl7XG5cdFx0QnJvd3Nlci5sb2FkZWQgPSByZWFkeSA9IHRydWU7XG5c
dFx0ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSku
cmVtb3ZlTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7XG5cdFx0ZG9jdW1lbnQu
ZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHRcdHdpbmRvdy5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7
XG5cdH1cblx0Ly8gY2xlYW51cCBzY29wZSB2YXJzXG5cdGRvY3VtZW50ID0gd2luZG93ID0gdGVz
dEVsZW1lbnQgPSBudWxsO1xufTtcblxudmFyIGNoZWNrID0gZnVuY3Rpb24oKXtcblx0Zm9yICh2
YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlmIChjaGVja3NbaV0oKSl7XG5cdFx0ZG9tcmVh
ZHkoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG52YXIg
cG9sbCA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghY2hlY2so
KSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEwKTtcbn07XG5cbmRvY3VtZW50LmFkZExpc3Rl
bmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpO1xuXG4vKjxsdElFOD4qL1xuLy8gZG9T
Y3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmluaSBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5j
b20vSUVDb250ZW50TG9hZGVkL1xuLy8gdGVzdEVsZW1lbnQuZG9TY3JvbGwoKSB0aHJvd3Mgd2hl
biB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBpbiB0aGUgdG9wIHdpbmRvd1xudmFyIGRvU2Ny
b2xsV29ya3MgPSBmdW5jdGlvbigpe1xuXHR0cnkge1xuXHRcdHRlc3RFbGVtZW50LmRvU2Nyb2xs
KCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZhbHNlO1xu
fTtcbi8vIElmIGRvU2Nyb2xsIHdvcmtzIGFscmVhZHksIGl0IGNhbid0IGJlIHVzZWQgdG8gZGV0
ZXJtaW5lIGRvbXJlYWR5XG4vLyAgIGUuZy4gaW4gYW4gaWZyYW1lXG5pZiAodGVzdEVsZW1lbnQu
ZG9TY3JvbGwgJiYgIWRvU2Nyb2xsV29ya3MoKSl7XG5cdGNoZWNrcy5wdXNoKGRvU2Nyb2xsV29y
a3MpO1xuXHRzaG91bGRQb2xsID0gdHJ1ZTtcbn1cbi8qPC9sdElFOD4qL1xuXG5pZiAoZG9jdW1l
bnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24oKXtcblx0dmFyIHN0YXRlID0gZG9j
dW1lbnQucmVhZHlTdGF0ZTtcblx0cmV0dXJuIChzdGF0ZSA9PSAnbG9hZGVkJyB8fCBzdGF0ZSA9
PSAnY29tcGxldGUnKTtcbn0pO1xuXG5pZiAoJ29ucmVhZHlzdGF0ZWNoYW5nZScgaW4gZG9jdW1l
bnQpIGRvY3VtZW50LmFkZExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuZWxz
ZSBzaG91bGRQb2xsID0gdHJ1ZTtcblxuaWYgKHNob3VsZFBvbGwpIHBvbGwoKTtcblxuRWxlbWVu
dC5FdmVudHMuZG9tcmVhZHkgPSB7XG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKHJl
YWR5KSBmbi5jYWxsKHRoaXMpO1xuXHR9XG59O1xuXG4vLyBNYWtlIHN1cmUgdGhhdCBkb21yZWFk
eSBmaXJlcyBiZWZvcmUgbG9hZFxuRWxlbWVudC5FdmVudHMubG9hZCA9IHtcblx0YmFzZTogJ2xv
YWQnLFxuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChsb2FkZWQgJiYgdGhpcyA9PSB3
aW5kb3cpIGZuLmNhbGwodGhpcyk7XG5cdH0sXG5cdGNvbmRpdGlvbjogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcyA9PSB3aW5kb3cpe1xuXHRcdFx0ZG9tcmVhZHkoKTtcblx0XHRcdGRlbGV0ZSBF
bGVtZW50LkV2ZW50cy5sb2FkO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxu
Ly8gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY3VzdG9tIGxvYWQgZXZlbnRcbndpbmRvdy5hZGRFdmVu
dCgnbG9hZCcsIGZ1bmN0aW9uKCl7XG5cdGxvYWRlZCA9IHRydWU7XG59KTtcblxufSkod2luZG93
LCBkb2N1bWVudCk7XG4iCittb2R1bGUuZXhwb3J0cyA9ICIvKiBNb29Ub29sczogdGhlIGphdmFz
Y3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBD
b3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9tb290b29s
cy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1aWxkOiBodHRwczovL21vb3Rvb2xzLm5ldC9jb3JlL2J1
aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdiMTczZDVkZWZmNjczZmNcbiovXG4vKlxuLS0tXG5cbm5h
bWU6IENvcmVcblxuZGVzY3JpcHRpb246IFRoZSBoZWFydCBvZiBNb29Ub29scy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIw
MTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5h
dXRob3JzOiBUaGUgTW9vVG9vbHMgcHJvZHVjdGlvbiB0ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0
L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJhdGlvbjpcbiAgLSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBp
bnNwaXJlZCBieSBbQmFzZS5qc10oaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2
LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMpIDIwMDYgRGVhbiBFZHdhcmRzLCBbR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbGdw
bC1saWNlbnNlLnBocClcbiAgLSBTb21lIGZ1bmN0aW9uYWxpdHkgaW5zcGlyZWQgYnkgW1Byb3Rv
dHlwZS5qc10oaHR0cDovL3Byb3RvdHlwZWpzLm9yZykgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcg
U2FtIFN0ZXBoZW5zb24sIFtNSVQgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu
c2VzL21pdC1saWNlbnNlLnBocClcblxucHJvdmlkZXM6IFtDb3JlLCBNb29Ub29scywgVHlwZSwg
dHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRpdmVdXG5cbi4uLlxuKi9cbi8qISBNb29Ub29sczogdGhl
IGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJp
Z2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9n
aXRodWIuY29tL2thbWljYW5lLykuKi9cbihmdW5jdGlvbigpe1xuXG50aGlzLk1vb1Rvb2xzID0g
e1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxuXHRidWlsZDogJzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4
YjZjN2NhNTExNGVlOTVlMmInXG59O1xuXG4vLyB0eXBlT2YsIGluc3RhbmNlT2ZcblxudmFyIHR5
cGVPZiA9IHRoaXMudHlwZU9mID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwp
IHJldHVybiAnbnVsbCc7XG5cdGlmIChpdGVtLiRmYW1pbHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0u
JGZhbWlseSgpO1xuXG5cdGlmIChpdGVtLm5vZGVOYW1lKXtcblx0XHRpZiAoaXRlbS5ub2RlVHlw
ZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnO1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDMpIHJl
dHVybiAoL1xcUy8pLnRlc3QoaXRlbS5ub2RlVmFsdWUpID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNw
YWNlJztcblx0fSBlbHNlIGlmICh0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicpe1xuXHRc
dGlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4gJ2FyZ3VtZW50cyc7XG5cdFx0aWYgKCdpdGVt
JyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24nO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBp
dGVtO1xufTtcblxudmFyIGluc3RhbmNlT2YgPSB0aGlzLmluc3RhbmNlT2YgPSBmdW5jdGlvbihp
dGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHZhciBj
b25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9yIHx8IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdo
aWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0aWYgKGNvbnN0cnVjdG9yID09PSBvYmplY3QpIHJldHVy
biB0cnVlO1xuXHRcdGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3IucGFyZW50O1xuXHR9XG5cdC8q
PGx0SUU4PiovXG5cdGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQv
KjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBvYmplY3Q7XG59O1xuXG52YXIg
aGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKjxs
dElFOD4qL1xudmFyIGVudW1lcmFibGVzID0gdHJ1ZTtcbmZvciAodmFyIGkgaW4ge3RvU3RyaW5n
OiAxfSkgZW51bWVyYWJsZXMgPSBudWxsO1xuaWYgKGVudW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9
IFsnaGFzT3duUHJvcGVydHknLCAndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5
SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9y
J107XG5mdW5jdGlvbiBmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmbiwgYmlu
ZCl7XG5cdGlmIChlbnVtZXJhYmxlcykgZm9yICh2YXIgaSA9IGVudW1lcmFibGVzLmxlbmd0aDsg
aS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVtZXJhYmxlc1tpXTtcblx0XHQvLyBzaWduYXR1cmUgaGFz
IGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIgY2FuIGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0
Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRob3V0IHN3YXBwaW5nIGFyZ3VtZW50cy5cblx0XHRpZiAo
aGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBmbi5jYWxsKGJpbmQsIGssIG9iamVjdFtr
XSk7XG5cdH1cbn1cbi8qPC9sdElFOD4qL1xuXG4vLyBGdW5jdGlvbiBvdmVybG9hZGluZ1xuXG52
YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0aW9uO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3Zlcmxv
YWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJl
dHVybiBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoYSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0
XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdzdHJpbmcnKXtcblx0XHRcdGZvciAodmFy
IGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFba10pO1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0
XHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShhLCBzZWxmLCB0aGlzKTtcblx0XHRcdC8q
PC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLmNhbGwodGhpcywgYSwgYik7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92
ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xu
XHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5cdFx0dmFyIGFyZ3MsIHJlc3VsdDtcblx0XHRpZiAodHlw
ZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhO1xuXHRcdGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5n
dGggPiAxKSBhcmdzID0gYXJndW1lbnRzO1xuXHRcdGVsc2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9
IFthXTtcblx0XHRpZiAoYXJncyl7XG5cdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdGZvciAodmFy
IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgcmVzdWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxs
KHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwo
dGhpcywgYSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlv
bi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9
IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuaW1wbGVt
ZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRoaXMucHJvdG90eXBlW2tleV0gPSB2YWx1
ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuLy8gRnJvbVxuXG52YXIgc2xpY2UgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2U7XG5cbkFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYg
KGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHRyZXR1cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0
ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnKSA/ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5
JykgPyBpdGVtIDogc2xpY2UuY2FsbChpdGVtKSA6IFtpdGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNv
bnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0
aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gaXRlbTtcblx0fTtcbn07XG5c
blxuTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIG51bWJlciA9IHBhcnNl
RmxvYXQoaXRlbSk7XG5cdHJldHVybiBpc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogbnVsbDtc
bn07XG5cblN0cmluZy5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiBpdGVtICsg
Jyc7XG59O1xuXG5cblxuRnVuY3Rpb24uZnJvbSA9IEZ1bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIu
ZnJvbSA9IE51bWJlci5jb252ZXJ0O1xuU3RyaW5nLmZyb20gPSBTdHJpbmcuY29udmVydDtcblxu
Ly8gaGlkZSwgcHJvdGVjdFxuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVuID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRwcm90ZWN0OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJHByb3RlY3RlZCA9IHRydWU7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8vIFR5cGVcblxudmFyIFR5cGUgPSB0aGlz
LlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3Qpe1xuXHRpZiAobmFtZSl7XG5cdFx0dmFyIGxv
d2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHZhciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihp
dGVtKXtcblx0XHRcdHJldHVybiAodHlwZU9mKGl0ZW0pID09IGxvd2VyKTtcblx0XHR9O1xuXG5c
dFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hlY2s7XG5cdFx0aWYgKG9iamVjdCAhPSBudWxs
KXtcblx0XHRcdG9iamVjdC5wcm90b3R5cGUuJGZhbWlseSA9IChmdW5jdGlvbigpe1xuXHRcdFx0
XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9KS5oaWRlKCk7XG5cdFx0XHRcblx0XHR9XG5cdH1cblxu
XHRpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBudWxsO1xuXG5cdG9iamVjdC5leHRlbmQodGhp
cyk7XG5cdG9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBlO1xuXHRvYmplY3QucHJvdG90eXBlLiRj
b25zdHJ1Y3RvciA9IG9iamVjdDtcblxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHRvU3Ry
aW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuVHlwZS5pc0VudW1lcmFibGUgPSBm
dW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIChpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVu
Z3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rp
b25dJyApO1xufTtcblxudmFyIGhvb2tzID0ge307XG5cbnZhciBob29rc09mID0gZnVuY3Rpb24o
b2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0eXBlT2Yob2JqZWN0LnByb3RvdHlwZSk7XG5cdHJldHVy
biBob29rc1t0eXBlXSB8fCAoaG9va3NbdHlwZV0gPSBbXSk7XG59O1xuXG52YXIgaW1wbGVtZW50
ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRl
bikgcmV0dXJuO1xuXG5cdHZhciBob29rcyA9IGhvb2tzT2YodGhpcyk7XG5cblx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGhvb2sgPSBob29rc1tpXTtc
blx0XHRpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFt
ZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhvb2suY2FsbCh0aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9
XG5cblx0dmFyIHByZXZpb3VzID0gdGhpcy5wcm90b3R5cGVbbmFtZV07XG5cdGlmIChwcmV2aW91
cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVkKSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9
IG1ldGhvZDtcblxuXHRpZiAodGhpc1tuYW1lXSA9PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09
ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5hbWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRc
dHJldHVybiBtZXRob2QuYXBwbHkoaXRlbSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0
fSk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1l
dGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXHR2YXIgcHJldmlvdXMgPSB0aGlzW25h
bWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhp
c1tuYW1lXSA9IG1ldGhvZDtcbn07XG5cblR5cGUuaW1wbGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6
IGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpLFxuXG5cdGV4dGVuZDogZXh0ZW5kLm92ZXJsb2Fk
U2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1bmN0aW9uKG5hbWUsIGV4aXN0aW5nKXtcblx0XHRpbXBs
ZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0aGlzLnByb3RvdHlwZVtleGlzdGluZ10pO1xuXHR9Lm92
ZXJsb2FkU2V0dGVyKCksXG5cblx0bWlycm9yOiBmdW5jdGlvbihob29rKXtcblx0XHRob29rc09m
KHRoaXMpLnB1c2goaG9vayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbm5ldyBU
eXBlKCdUeXBlJywgVHlwZSk7XG5cbi8vIERlZmF1bHQgVHlwZXNcblxudmFyIGZvcmNlID0gZnVu
Y3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXtcblx0dmFyIGlzVHlwZSA9IChvYmplY3QgIT0g
T2JqZWN0KSxcblx0XHRwcm90b3R5cGUgPSBvYmplY3QucHJvdG90eXBlO1xuXG5cdGlmIChpc1R5
cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5hbWUsIG9iamVjdCk7XG5cblx0Zm9yICh2YXIgaSA9IDAs
IGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNb
aV0sXG5cdFx0XHRnZW5lcmljID0gb2JqZWN0W2tleV0sXG5cdFx0XHRwcm90byA9IHByb3RvdHlw
ZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVyaWMpIGdlbmVyaWMucHJvdGVjdCgpO1xuXHRcdGlmIChp
c1R5cGUgJiYgcHJvdG8pIG9iamVjdC5pbXBsZW1lbnQoa2V5LCBwcm90by5wcm90ZWN0KCkpO1xu
XHR9XG5cblx0aWYgKGlzVHlwZSl7XG5cdFx0dmFyIG1ldGhvZHNFbnVtZXJhYmxlID0gcHJvdG90
eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhvZHNbMF0pO1xuXHRcdG9iamVjdC5mb3JFYWNo
TWV0aG9kID0gZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKCFtZXRob2RzRW51bWVyYWJsZSkgZm9y
ICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZu
LmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0aG9kc1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRc
dFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIHByb3RvdHlwZSkgZm4uY2FsbChwcm90b3R5cGUs
IHByb3RvdHlwZVtrZXldLCBrZXkpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZm9yY2U7XG59
O1xuXG5mb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBbXG5cdCdjaGFyQXQnLCAnY2hhckNvZGVBdCcs
ICdjb25jYXQnLCAnY29udGFpbnMnLCAnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdtYXRjaCcs
ICdxdW90ZScsICdyZXBsYWNlJywgJ3NlYXJjaCcsXG5cdCdzbGljZScsICdzcGxpdCcsICdzdWJz
dHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9Mb3dlckNhc2UnLCAndG9VcHBlckNhc2UnXG5d
KSgnQXJyYXknLCBBcnJheSwgW1xuXHQncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcs
ICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJyxc
blx0J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnZXZlcnkn
LCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSko
J051bWJlcicsIE51bWJlciwgW1xuXHQndG9FeHBvbmVudGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9j
YWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0
J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdcbl0pKCdSZWdFeHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMn
LCAndGVzdCdcbl0pKCdPYmplY3QnLCBPYmplY3QsIFtcblx0J2NyZWF0ZScsICdkZWZpbmVQcm9w
ZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tleXMnLFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAn
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dldE93blByb3BlcnR5TmFtZXMnLFxuXHQncHJl
dmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxlJywgJ3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJl
ZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0RhdGUnLCBEYXRlLCBbJ25vdyddKTtcblxuT2JqZWN0LmV4
dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigpO1xuXG5EYXRlLmV4dGVuZCgnbm93JywgZnVu
Y3Rpb24oKXtcblx0cmV0dXJuICsobmV3IERhdGUpO1xufSk7XG5cbm5ldyBUeXBlKCdCb29sZWFu
JywgQm9vbGVhbik7XG5cbi8vIGZpeGVzIE5hTiByZXR1cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJl
ci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9uKCl7XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlz
KSA/ICdudW1iZXInIDogJ251bGwnO1xufS5oaWRlKCk7XG5cbi8vIE51bWJlci5yYW5kb21cblxu
TnVtYmVyLmV4dGVuZCgncmFuZG9tJywgZnVuY3Rpb24obWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0
aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcbn0pO1xuXG4v
LyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5cbkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4q
L1xuXHRmb3JFYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxs
KGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxu
XHRlYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwg
YmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbk9iamVjdC5leHRlbmQoe1xu
XG5cdGtleXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGtleXMgPSBbXTtcblx0XHRmb3Ig
KHZhciBrIGluIG9iamVjdCl7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3Qs
IGspKSBrZXlzLnB1c2goayk7XG5cdFx0fVxuXHRcdC8qPGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9i
amVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVuY3Rpb24oayl7XG5cdFx0XHRrZXlzLnB1c2go
ayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0SUU4PiovXG5cdFx0cmV0dXJuIGtleXM7XG5cdH0sXG5c
blx0Zm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0T2JqZWN0LmtleXMo
b2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRmbi5jYWxsKGJpbmQsIG9iamVj
dFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cbk9iamVjdC5lYWNo
ID0gT2JqZWN0LmZvckVhY2g7XG5cblxuLy8gQXJyYXkgJiBPYmplY3QgY2xvbmluZywgT2JqZWN0
IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xuXG52YXIgY2xvbmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xu
XHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7XG5cdFx0Y2FzZSAnYXJyYXknOiByZXR1cm4gaXRlbS5j
bG9uZSgpO1xuXHRcdGNhc2UgJ29iamVjdCc6IHJldHVybiBPYmplY3QuY2xvbmUoaXRlbSk7XG5c
dFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07XG5cdH1cbn07XG5cbkFycmF5LmltcGxlbWVudCgnY2xv
bmUnLCBmdW5jdGlvbigpe1xuXHR2YXIgaSA9IHRoaXMubGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJh
eShpKTtcblx0d2hpbGUgKGktLSkgY2xvbmVbaV0gPSBjbG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1
cm4gY2xvbmU7XG59KTtcblxudmFyIG1lcmdlT25lID0gZnVuY3Rpb24oc291cmNlLCBrZXksIGN1
cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVPZihjdXJyZW50KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpc
blx0XHRcdGlmICh0eXBlT2Yoc291cmNlW2tleV0pID09ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uo
c291cmNlW2tleV0sIGN1cnJlbnQpO1xuXHRcdFx0ZWxzZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5j
bG9uZShjdXJyZW50KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2FycmF5Jzogc291cmNlW2tl
eV0gPSBjdXJyZW50LmNsb25lKCk7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHNvdXJjZVtrZXldID0g
Y3VycmVudDtcblx0fVxuXHRyZXR1cm4gc291cmNlO1xufTtcblxuT2JqZWN0LmV4dGVuZCh7XG5c
blx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgaywgdil7XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAn
c3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwgaywgdik7XG5cdFx0Zm9yICh2YXIgaSA9
IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBvYmplY3Qg
PSBhcmd1bWVudHNbaV07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShz
b3VyY2UsIGtleSwgb2JqZWN0W2tleV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc291cmNlO1xuXHR9
LFxuXG5cdGNsb25lOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBjbG9uZSA9IHt9O1xuXHRc
dGZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXld
KTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5h
bCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdHZhciBleHRlbmRlZCA9IGFyZ3VtZW50c1tpXSB8fCB7fTtcblx0XHRcdGZvciAo
dmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0
fVxuXHRcdHJldHVybiBvcmlnaW5hbDtcblx0fVxuXG59KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlw
ZXNcblxuWydPYmplY3QnLCAnV2hpdGVTcGFjZScsICdUZXh0Tm9kZScsICdDb2xsZWN0aW9uJywg
J0FyZ3VtZW50cyddLmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7
XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIgVUlEID0gRGF0ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVu
ZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKFVJRCsrKS50b1N0cmluZygzNik7
XG59KTtcblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQXJyYXlcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMgbGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVy
YXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlXVxu
XG5wcm92aWRlczogQXJyYXlcblxuLi4uXG4qL1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8q
PCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0
aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xu
XHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXHRcdGZvciAodmFyIHZhbHVlLCBpID0gMCwg
bCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKSBpZiAoaSBpbiB0aGlzKXtcblx0XHRc
dHZhbHVlID0gdGhpc1tpXTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlz
KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0s
XG5cblx0aW5kZXhPZjogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRo
aXMubGVuZ3RoID4+PiAwO1xuXHRcdGZvciAodmFyIGkgPSAoZnJvbSA8IDApID8gTWF0aC5tYXgo
MCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9tIHx8IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRp
ZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0
fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5s
ZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgcmVzdWx0c1tpXSA9IGZu
LmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRz
O1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0
aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihpdGVtKXtcblx0XHRc
dHJldHVybiBpdGVtICE9IG51bGw7XG5cdFx0fSk7XG5cdH0sXG5cblx0aW52b2tlOiBmdW5jdGlv
bihtZXRob2ROYW1lKXtcblx0XHR2YXIgYXJncyA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7
XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1b
bWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7XG5cdFx0fSk7XG5cdH0sXG5cblx0YXNzb2Np
YXRlOiBmdW5jdGlvbihrZXlzKXtcblx0XHR2YXIgb2JqID0ge30sIGxlbmd0aCA9IE1hdGgubWlu
KHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tpXTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxu
XG5cdGxpbms6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZv
ciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2
YXIga2V5IGluIG9iamVjdCl7XG5cdFx0XHRcdGlmIChvYmplY3Rba2V5XSh0aGlzW2ldKSl7XG5c
dFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzW2ldO1xuXHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rb
a2V5XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRy
ZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtc
blx0XHRyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0sIGZyb20pICE9IC0xO1xuXHR9LFxuXG5cdGFw
cGVuZDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHRoaXMucHVzaC5hcHBseSh0aGlzLCBhcnJheSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhpcy5sZW5ndGggLSAxXSA6IG51bGw7XG5cdH0s
XG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8g
dGhpc1tOdW1iZXIucmFuZG9tKDAsIHRoaXMubGVuZ3RoIC0gMSldIDogbnVsbDtcblx0fSxcblxu
XHRpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRpZiAoIXRoaXMuY29udGFpbnMoaXRlbSkp
IHRoaXMucHVzaChpdGVtKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21iaW5lOiBm
dW5jdGlvbihhcnJheSl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkg
PCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0
aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xu
XHRcdHRoaXMubGVuZ3RoID0gMDtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmbGF0dGVu
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcnJheSA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YodGhp
c1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9PSAnbnVsbCcpIGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkg
PSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8
fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3RhbmNlT2YodGhpc1tpXSwgQXJyYXkpKSA/IEFy
cmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5
O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0
aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSAhPSBudWxsKSByZXR1
cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5sZW5ndGggIT0gMykgcmV0dXJuIG51bGw7
XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1
ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQodmFs
dWUsIDE2KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJn
YiArICcpJztcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0
aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsO1xuXHRcdGlmICh0aGlzLmxlbmd0aCA9PSA0ICYm
IHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAndHJhbnNwYXJlbnQnO1xuXHRcdHZhciBo
ZXggPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0
ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7XG5cdFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0
aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoYXJyYXkpID8g
aGV4IDogJyMnICsgaGV4LmpvaW4oJycpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5u
YW1lOiBGdW5jdGlvblxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRnVuY3Rpb24gUHJvdG90eXBl
cyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFzcywgYW5kIGRlbGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4u
LlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5kKHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbigpe1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXJndW1lbnRzW2ldKCk7XG5cdFx0XHR9IGNhdGNoIChl
KXt9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBs
ZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5c
dFx0XHRyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBBcnJheS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9
IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+
Ki9cblx0YmluZDogZnVuY3Rpb24odGhhdCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0
YXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6
IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rpb24oKXt9O1xuXG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rp
b24oKXtcblx0XHRcdHZhciBjb250ZXh0ID0gdGhhdCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0
aDtcblx0XHRcdGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlw
ZSA9IHNlbGYucHJvdG90eXBlO1xuXHRcdFx0XHRjb250ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5c
dFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdzICYmICFsZW5ndGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxs
KGNvbnRleHQpXG5cdFx0XHRcdDogc2VsZi5hcHBseShjb250ZXh0LCBhcmdzICYmIGxlbmd0aCA/
IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNlKGFyZ3VtZW50cykpIDogYXJncyB8fCBhcmd1bWVudHMp
O1xuXHRcdFx0cmV0dXJuIGNvbnRleHQgPT0gdGhhdCA/IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0
fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5cdH0sXG5cdC8qPC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNz
OiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFy
Z3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0
aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2VsZi5hcHBseShiaW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7
XG5cdFx0fTtcblx0fSxcblxuXHRkZWxheTogZnVuY3Rpb24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xu
XHRcdHJldHVybiBzZXRUaW1lb3V0KHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdz
KSwgYmluZCksIGRlbGF5KTtcblx0fSxcblxuXHRwZXJpb2RpY2FsOiBmdW5jdGlvbihwZXJpb2Rp
Y2FsLCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdz
ID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVyaW9kaWNhbCk7XG5cdH1cblxufSk7XG5c
blxuXG4vKlxuLS0tXG5cbm5hbWU6IE51bWJlclxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgTnVt
YmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91bmQsIHRpbWVzLCBhbmQgY2VpbC5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBO
dW1iZXJcblxuLi4uXG4qL1xuXG5OdW1iZXIuaW1wbGVtZW50KHtcblxuXHRsaW1pdDogZnVuY3Rp
b24obWluLCBtYXgpe1xuXHRcdHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdGhp
cykpO1xuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbihwcmVjaXNpb24pe1xuXHRcdHByZWNpc2lv
biA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCkudG9GaXhlZChwcmVjaXNpb24gPCAwID8g
LXByZWNpc2lvbiA6IDApO1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKHRoaXMgKiBwcmVjaXNpb24p
IC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdHRpbWVzOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzOyBpKyspIGZuLmNhbGwoYmluZCwgaSwgdGhpcyk7XG5c
dH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlz
KTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50
KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9XG5cbn0pO1xuXG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAn
dGltZXMnKTtcblxuKGZ1bmN0aW9uKG1hdGgpe1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRo
LmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdGlmICghTnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVd
ID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gTWF0aFtuYW1lXS5hcHBseShudWxsLCBbdGhpc10u
Y29uY2F0KEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKSkpO1xuXHR9O1xufSk7XG5cbk51bWJlci5p
bXBsZW1lbnQobWV0aG9kcyk7XG5cbn0pKFsnYWJzJywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywg
J2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21p
bicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0
cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgU3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1l
bENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0b0ludC5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZSwgQXJyYXldXG5cbnByb3ZpZGVzOiBTdHJpbmdc
blxuLi4uXG4qL1xuXG5TdHJpbmcuaW1wbGVtZW50KHtcblxuXHQvLzwhRVM2PlxuXHRjb250YWlu
czogZnVuY3Rpb24oc3RyaW5nLCBpbmRleCl7XG5cdFx0cmV0dXJuIChpbmRleCA/IFN0cmluZyh0
aGlzKS5zbGljZShpbmRleCkgOiBTdHJpbmcodGhpcykpLmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xu
XHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0ZXN0OiBmdW5jdGlvbihyZWdleCwgcGFyYW1zKXtcblx0
XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdyZWdleHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4
cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRoaXMpO1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAn
Jyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlz
KS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuXHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rp
b24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xu
XHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhlbmF0ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3Ry
aW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVy
biAoJy0nICsgbWF0Y2guY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxu
XG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBs
YWNlKC9cXGJbYS16XS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9V
cHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRlc2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8oWy0uKis/XiR7fSgpfFtcXF1cXC9c
XFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0
XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH0sXG5cblx0dG9GbG9hdDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHRoZXhU
b1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciBoZXggPSBTdHJpbmcodGhpcykubWF0Y2go
L14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sxLDJ9KSQvKTtcblx0XHRyZXR1cm4gKGhleCkg
PyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRyZ2JUb0hl
eDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciByZ2IgPSBTdHJpbmcodGhpcykubWF0Y2goL1xc
ZHsxLDN9L2cpO1xuXHRcdHJldHVybiAocmdiKSA/IHJnYi5yZ2JUb0hleChhcnJheSkgOiBudWxs
O1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6IGZ1bmN0aW9uKG9iamVjdCwgcmVnZXhwKXtcblx0XHRy
ZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVnZXhwIHx8ICgvXFxcXD9cXHsoW157fV0rKVxc
fS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5hbWUpe1xuXHRcdFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9
PSAnXFxcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTtcblx0XHRcdHJldHVybiAob2JqZWN0W25h
bWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDogJyc7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5c
blxuXG4vKlxuLS0tXG5cbm5hbWU6IEJyb3dzZXJcblxuZGVzY3JpcHRpb246IFRoZSBCcm93c2Vy
IE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFsaXphdGlvbiwgV2luZG93IGFuZCBEb2N1
bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW0FycmF5LCBGdW5jdGlvbiwgTnVtYmVyLCBTdHJpbmddXG5cbnByb3Zp
ZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVudF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudDtcbnZhciB3aW5kb3cgPSBkb2N1bWVu
dC53aW5kb3cgPSB0aGlzO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlvbih1YSwgcGxhdGZvcm0pe1xu
XHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG5cdHBsYXRmb3JtID0gKHBsYXRmb3JtID8gcGxhdGZv
cm0udG9Mb3dlckNhc2UoKSA6ICcnKTtcblxuXHQvLyBjaHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhl
IGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIGVkZ2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBj
aGVja2luZyBpZiBpdCdzIGNocm9tZS5cblx0dmFyIFVBID0gdWEubWF0Y2goLyhlZGdlKVtcXHNc
XC86XShbXFx3XFxkXFwuXSspLyk7XG5cdGlmICghVUEpe1xuXHRcdFVBID0gdWEubWF0Y2goLyhv
cGVyYXxpZXxmaXJlZm94fGNocm9tZXx0cmlkZW50fGNyaW9zfHZlcnNpb24pW1xcc1xcLzpdKFtc
XHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwoPzpydltcXHNcXC86XXx2ZXJzaW9uW1xcc1xcLzpdKShb
XFx3XFxkXFwuXSspfCQpLykgfHwgW251bGwsICd1bmtub3duJywgMF07XG5cdH1cblxuXHRpZiAo
VUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0XHRVQVsxXSA9ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBV
QVsyXSA9IFVBWzRdO1xuXHR9IGVsc2UgaWYgKFVBWzFdID09ICdjcmlvcycpe1xuXHRcdFVBWzFd
ID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRwbGF0Zm9ybSA9IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhv
bmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86d2Vib3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRj
aCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXInXSlbMF07XG5cdGlmIChwbGF0Zm9ybSA9PSAn
d2luJykgcGxhdGZvcm0gPSAnd2luZG93cyc7XG5cblx0cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1
bmN0aW9uLnByb3RvdHlwZS5leHRlbmQsXG5cdFx0bmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykg
PyBVQVszXSA6IFVBWzFdLFxuXHRcdHZlcnNpb246IHBhcnNlRmxvYXQoKFVBWzFdID09ICdvcGVy
YScgJiYgVUFbNF0pID8gVUFbNF0gOiBVQVsyXSksXG5cdFx0cGxhdGZvcm06IHBsYXRmb3JtXG5c
dH07XG59O1xuXG52YXIgQnJvd3NlciA9IHRoaXMuQnJvd3NlciA9IHBhcnNlKG5hdmlnYXRvci51
c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbmlmIChCcm93c2VyLm5hbWUgPT0gJ2ll
JyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpe1xuXHRCcm93c2VyLnZlcnNpb24gPSBkb2N1bWVu
dC5kb2N1bWVudE1vZGU7XG59XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0
XHR4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLFxuXHRcdGFpcjogISEod2luZG93LnJ1bnRp
bWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKSxcblx0XHRqc29uOiAh
ISh3aW5kb3cuSlNPTilcblx0fSxcblx0cGFyc2VVQTogcGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVx
dWVzdFxuXG5Ccm93c2VyLlJlcXVlc3QgPSAoZnVuY3Rpb24oKXtcblxuXHR2YXIgWE1MSFRUUCA9
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5c
dHZhciBNU1hNTDIgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgn
TVNYTUwyLlhNTEhUVFAnKTtcblx0fTtcblxuXHR2YXIgTVNYTUwgPSBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTtcblx0fTtcblxu
XHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFhNTEhUVFAoKTtcblx0
XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTDIoKTtcblx0XHRy
ZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJu
IE1TWE1MO1xuXHR9KTtcblxufSkoKTtcblxuQnJvd3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93
c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8gU3RyaW5nIHNjcmlwdHNcblxuQnJvd3Nlci5leGVjID0g
ZnVuY3Rpb24odGV4dCl7XG5cdGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cu
ZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93LmV4ZWNTY3JpcHQodGV4dCk7XG5cdH0gZWxzZSB7XG5c
dFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNj
cmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0
LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0
XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7
XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50KCdzdHJpcFNjcmlwdHMnLCBmdW5jdGlvbihleGVjKXtc
blx0dmFyIHNjcmlwdHMgPSAnJztcblx0dmFyIHRleHQgPSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRb
Xj5dKj4oW1xcc1xcU10qPyk8XFwvc2NyaXB0Pi9naSwgZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0
XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxuJztcblx0XHRyZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAo
ZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5leGVjKHNjcmlwdHMpO1xuXHRlbHNlIGlmICh0eXBlT2Yo
ZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRzLCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7
XG59KTtcblxuLy8gV2luZG93LCBEb2N1bWVudFxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdERvY3Vt
ZW50OiB0aGlzLkRvY3VtZW50LFxuXHRXaW5kb3c6IHRoaXMuV2luZG93LFxuXHRFbGVtZW50OiB0
aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0aGlzLkV2ZW50XG59KTtcblxudGhpcy5XaW5kb3cgPSB0
aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdXaW5kb3cnLCBmdW5jdGlvbigpe30pO1xuXG50
aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCd3aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRv
dy5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0d2luZG93W25hbWVdID0gbWV0aG9k
O1xufSk7XG5cbnRoaXMuRG9jdW1lbnQgPSBkb2N1bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlw
ZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pO1xuXG5kb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rp
b24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7XG5cbkRvY3VtZW50Lm1pcnJvcihmdW5jdGlv
bihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1bWVudFtuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1
bWVudC5odG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuaWYgKCFkb2N1bWVudC5oZWFk
KSBkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVsw
XTtcblxuaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKSB0cnkge1xuXHRkb2N1bWVudC5leGVjQ29t
bWFuZCgnQmFja2dyb3VuZEltYWdlQ2FjaGUnLCBmYWxzZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9
XG5cbi8qPGx0SUU5PiovXG5pZiAodGhpcy5hdHRhY2hFdmVudCAmJiAhdGhpcy5hZGRFdmVudExp
c3RlbmVyKXtcblx0dmFyIHVubG9hZEV2ZW50ID0gZnVuY3Rpb24oKXtcblx0XHR0aGlzLmRldGFj
aEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtcblx0XHRkb2N1bWVudC5oZWFkID0gZG9j
dW1lbnQuaHRtbCA9IGRvY3VtZW50LndpbmRvdyA9IG51bGw7XG5cdFx0d2luZG93ID0gdGhpcy5X
aW5kb3cgPSBkb2N1bWVudCA9IG51bGw7XG5cdH07XG5cdHRoaXMuYXR0YWNoRXZlbnQoJ29udW5s
b2FkJywgdW5sb2FkRXZlbnQpO1xufVxuXG4vLyBJRSBmYWlscyBvbiBjb2xsZWN0aW9ucyBhbmQg
PHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxzZWxlY3Q+KVxudmFyIGFycmF5RnJvbSA9IEFy
cmF5LmNvbnZlcnQ7XG50cnkge1xuXHRhcnJheUZyb20oZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVz
KTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0
aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYmIFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYm
IHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXtcblx0XHRcdHZhciBpID0gaXRlbS5sZW5ndGgsIGFy
cmF5ID0gbmV3IEFycmF5KGkpO1xuXHRcdFx0d2hpbGUgKGktLSkgYXJyYXlbaV0gPSBpdGVtW2ld
O1xuXHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0p
O1xuXHR9O1xuXG5cdHZhciBwcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGUsXG5cdFx0c2xpY2Ug
PSBwcm90b3R5cGUuc2xpY2U7XG5cdFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcs
ICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10u
ZWFjaChmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gcHJvdG90eXBlW25hbWVdO1xu
XHRcdEFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFw
cGx5KEFycmF5LmNvbnZlcnQoaXRlbSksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0
fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogQ2xhc3NcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDbGFzcyBGdW5jdGlvbiBmb3Ig
ZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRpbmcsIGFuZCBpbXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xh
c3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXks
IFN0cmluZywgRnVuY3Rpb24sIE51bWJlcl1cblxucHJvdmlkZXM6IENsYXNzXG5cbi4uLlxuKi9c
blxuKGZ1bmN0aW9uKCl7XG5cbnZhciBDbGFzcyA9IHRoaXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xh
c3MnLCBmdW5jdGlvbihwYXJhbXMpe1xuXHRpZiAoaW5zdGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9u
KSkgcGFyYW1zID0ge2luaXRpYWxpemU6IHBhcmFtc307XG5cblx0dmFyIG5ld0NsYXNzID0gZnVu
Y3Rpb24oKXtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRpZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5n
KSByZXR1cm4gdGhpcztcblx0XHR0aGlzLiRjYWxsZXIgPSBudWxsO1xuXHRcdHRoaXMuJGZhbWls
eSA9IG51bGw7XG5cdFx0dmFyIHZhbHVlID0gKHRoaXMuaW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRp
YWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0g
dGhpcy5jYWxsZXIgPSBudWxsO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fS5leHRlbmQodGhpcyku
aW1wbGVtZW50KHBhcmFtcyk7XG5cblx0bmV3Q2xhc3MuJGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5c
dG5ld0NsYXNzLnByb3RvdHlwZS4kY29uc3RydWN0b3IgPSBuZXdDbGFzcztcblx0bmV3Q2xhc3Mu
cHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDtcblxuXHRyZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxu
dmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7XG5cdGlmICghdGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcg
RXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJlbnRcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHR2YXIg
bmFtZSA9IHRoaXMuJGNhbGxlci4kbmFtZSxcblx0XHRwYXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93
bmVyLnBhcmVudCxcblx0XHRwcmV2aW91cyA9IChwYXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtu
YW1lXSA6IG51bGw7XG5cdGlmICghcHJldmlvdXMpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhv
ZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBubyBwYXJlbnQuJyk7XG5cdHJldHVybiBwcmV2aW91cy5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFyIHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0
KXtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlID0gb2JqZWN0W2tl
eV07XG5cdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRcdGNhc2UgJ29iamVjdCc6XG5c
dFx0XHRcdHZhciBGID0gZnVuY3Rpb24oKXt9O1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHZhbHVl
O1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9IHJlc2V0KG5ldyBGKTtcblx0XHRcdFx0YnJlYWs7XG5c
dFx0XHRjYXNlICdhcnJheSc6IG9iamVjdFtrZXldID0gdmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5c
dFx0fVxuXHR9XG5cdHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNl
bGYsIGtleSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZC4kb3JpZ2luKSBtZXRob2QgPSBtZXRob2Qu
JG9yaWdpbjtcblx0dmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpe1xuXHRcdGlmIChtZXRob2QuJHBy
b3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0
aG9kIFwiJyArIGtleSArICdcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHRcdHZhciBjYWxsZXIg
PSB0aGlzLmNhbGxlciwgY3VycmVudCA9IHRoaXMuJGNhbGxlcjtcblx0XHR0aGlzLmNhbGxlciA9
IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBwZXI7XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhv
ZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHRoaXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRo
aXMuY2FsbGVyID0gY2FsbGVyO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3du
ZXI6IHNlbGYsICRvcmlnaW46IG1ldGhvZCwgJG5hbWU6IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBl
cjtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlLCByZXRhaW4pe1xu
XHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBD
bGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBu
dWxsKSByZXR1cm4gdGhpcztcblx0fVxuXG5cdGlmICh0eXBlT2YodmFsdWUpID09ICdmdW5jdGlv
bicpe1xuXHRcdGlmICh2YWx1ZS4kaGlkZGVuKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnByb3Rv
dHlwZVtrZXldID0gKHJldGFpbikgPyB2YWx1ZSA6IHdyYXAodGhpcywga2V5LCB2YWx1ZSk7XG5c
dH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1lcmdlKHRoaXMucHJvdG90eXBlLCBrZXksIHZhbHVlKTtc
blx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxudmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24o
a2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90eXBpbmcgPSB0cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcg
a2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4kcHJvdG90eXBpbmc7XG5cdHJldHVybiBwcm90bztcbn07
XG5cbkNsYXNzLmltcGxlbWVudCgnaW1wbGVtZW50JywgaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVy
KCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9IHtcblxuXHRFeHRlbmRzOiBmdW5jdGlvbihwYXJlbnQp
e1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xuXHRcdHRoaXMucHJvdG90eXBlID0gZ2V0SW5z
dGFuY2UocGFyZW50KTtcblx0fSxcblxuXHRJbXBsZW1lbnRzOiBmdW5jdGlvbihpdGVtcyl7XG5c
dFx0QXJyYXkuY29udmVydChpdGVtcykuZWFjaChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHZhciBp
bnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGluc3RhbmNlKSBpbXBs
ZW1lbnQuY2FsbCh0aGlzLCBrZXksIGluc3RhbmNlW2tleV0sIHRydWUpO1xuXHRcdH0sIHRoaXMp
O1xuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLkV4dHJhc1xuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBDbGFzc2VzIHRoYXQgY2FuIGJlIGltcGxlbWVu
dGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBlYXNlIHRoZSBleGVjdXRpb24gb2YgbWFueSBj
b21tb24gdGFza3MuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
Q2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5FeHRyYXMsIENoYWluLCBFdmVudHMsIE9wdGlvbnNd
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xu
XG5cdCRjaGFpbjogW10sXG5cblx0Y2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4u
YXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0Y2FsbENoYWluOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy4kY2hhaW4ubGVu
Z3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0KCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGZhbHNl
O1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1w
dHkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIHJlbW92ZU9uID0gZnVu
Y3Rpb24oc3RyaW5nKXtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eb24oW0EtWl0pLywgZnVu
Y3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRcdHJldHVybiBmaXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9
KTtcbn07XG5cbnRoaXMuRXZlbnRzID0gbmV3IENsYXNzKHtcblxuXHQkZXZlbnRzOiB7fSxcblxu
XHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGludGVybmFsKXtcblx0XHR0eXBlID0gcmVt
b3ZlT24odHlwZSk7XG5cblx0XHRcblxuXHRcdHRoaXMuJGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRl
dmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4pO1xuXHRcdGlmIChpbnRlcm5hbCkgZm4uaW50
ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVu
Y3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5hZGRFdmVu
dCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVF
dmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0
eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmICghZXZl
bnRzKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRl
dmVudHMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5
LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwg
dGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9u
KHR5cGUsIGZuKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9
IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoZXZlbnRzICYmICFmbi5pbnRlcm5hbCl7XG5c
dFx0XHR2YXIgaW5kZXggPSBldmVudHMuaW5kZXhPZihmbik7XG5cdFx0XHRpZiAoaW5kZXggIT0g
LTEpIGRlbGV0ZSBldmVudHNbaW5kZXhdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0
aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVu
dHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0
aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZlbnRzKSBldmVudHMgPSByZW1vdmVPbihldmVudHMpO1xu
XHRcdGZvciAodHlwZSBpbiB0aGlzLiRldmVudHMpe1xuXHRcdFx0aWYgKGV2ZW50cyAmJiBldmVu
dHMgIT0gdHlwZSkgY29udGludWU7XG5cdFx0XHR2YXIgZm5zID0gdGhpcy4kZXZlbnRzW3R5cGVd
O1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZucy5sZW5ndGg7IGktLTspIGlmIChpIGluIGZucyl7XG5c
dFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnRoaXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7
XG5cblx0c2V0T3B0aW9uczogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0
aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBseShudWxsLCBbe30sIHRoaXMub3B0aW9uc10uYXBwZW5k
KGFyZ3VtZW50cykpO1xuXHRcdGlmICh0aGlzLmFkZEV2ZW50KSBmb3IgKHZhciBvcHRpb24gaW4g
b3B0aW9ucyl7XG5cdFx0XHRpZiAodHlwZU9mKG9wdGlvbnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9u
JyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qob3B0aW9uKSkgY29udGludWU7XG5cdFx0XHR0aGlzLmFk
ZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tvcHRpb25dKTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zW29w
dGlvbl07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IENsYXNzLlRoZW5hYmxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBh
IFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFz
c2VzIHRvIG1ha2UgdGhlbSBcInRoZW5hYmxlXCIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxu
Li4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIFNUQVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFU
RV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFURV9SRUpFQ1RFRCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9
IENsYXNzLlRoZW5hYmxlID0gbmV3IENsYXNzKHtcblxuXHQkdGhlbmFibGVTdGF0ZTogU1RBVEVf
UEVORElORyxcblx0JHRoZW5hYmxlUmVzdWx0OiBudWxsLFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6
IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRyZXNvbHZlKHRoaXMsIHZh
bHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNv
bil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0Z2V0VGhlbmFibGVTdGF0ZTogZnVuY3Rpb24oKXtcblx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5h
YmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBTVEFURV9QRU5ESU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3Bl
bmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX0ZVTEZJTExFRDpcblx0XHRcdFx0cmV0dXJuICdm
dWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX1JFSkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4g
J3JlamVjdGVkJztcblx0XHR9XG5cdH0sXG5cblx0cmVzZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVh
c29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHR0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWpl
Y3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxm
aWxsZWQgPSAnSWRlbnRpdHknO1xuXHRcdGlmICh0eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0
aW9uJykgb25SZWplY3RlZCA9ICdUaHJvd2VyJztcblxuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBU
aGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4kdGhlbmFibGVSZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0
aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0XHRmdWxmaWxsSGFuZGxlcjogb25GdWxmaWxsZWQsXG5c
dFx0XHRyZWplY3RIYW5kbGVyOiBvblJlamVjdGVkXG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy4k
dGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0
XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cblx0J2NhdGNoJzogZnVuY3Rpb24o
b25SZWplY3RlZCl7XG5cdFx0cmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcblx0
fVxuXG59KTtcblxuVGhlbmFibGUuZXh0ZW5kKHtcblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUp
e1xuXHRcdHZhciB0aGVuYWJsZTtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7
XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9
IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtc
blx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblx0XHRyZWplY3QodGhlbmFibGUs
IHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9XG59KTtcblxuLy8gUHJpdmF0ZSBm
dW5jdGlvbnNcblxuZnVuY3Rpb24gcmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhl
bmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdGlmICh0aGVuYWJs
ZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBuZXcgVHlwZUVycm9yKCdUcmll
ZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBpdHNlbGYuJykpO1xuXHRcdH0gZWxzZSBpZiAo
dmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAn
ZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIgdGhlbjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4g
PSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0
KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGVuID09
PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0dmFyIHJlc29sdmVkID0gZmFsc2U7XG5cdFx0XHRcdGRl
ZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoZW4uY2FsbChc
blx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7
XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNv
bHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFs
dWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0
ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRc
dFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0
aGVuYWJsZSwgcmVhc29uKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0
XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRc
dGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRc
dFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRc
dFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVu
YWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5h
YmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUs
IHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5H
KXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4k
dGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtc
blx0fVxufVxuXG5mdW5jdGlvbiByZWplY3QodGhlbmFibGUsIHJlYXNvbil7XG5cdGlmICh0aGVu
YWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RB
VEVfUkVKRUNURUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24g
cmVzZXQodGhlbmFibGUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRF
X1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhl
bmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9QRU5ESU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9u
IHJlYWN0KHRoZW5hYmxlKXtcblx0dmFyIHN0YXRlID0gdGhlbmFibGUuJHRoZW5hYmxlU3RhdGUs
XG5cdFx0cmVzdWx0ID0gdGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9
IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyxcblx0XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9
PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBb
XTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxIYW5kbGVyJztcblx0fSBlbHNlIGlmIChzdGF0ZSA9PSBT
VEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5c
dFx0dHlwZSA9ICdyZWplY3RIYW5kbGVyJztcblx0fVxuXG5cdGlmICh0eXBlKXtcblx0XHRkZWZl
cihoYW5kbGUucGFzcyhbcmVzdWx0LCByZWFjdGlvbnMsIHR5cGVdKSk7XG5cdH1cbn1cblxuZnVu
Y3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25zLCB0eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAs
IGwgPSByZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgKytpKXtcblx0XHR2YXIgcmVhY3Rpb24gPSBy
ZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5kbGVyID0gcmVhY3Rpb25bdHlwZV07XG5cblx0XHRpZiAo
aGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7XG5cdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxl
LCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAoaGFuZGxlciA9PT0gJ1Rocm93ZXInKXtcblx0XHRc
dHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0
dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQp
KTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdChyZWFjdGlvbi50
aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudmFyIGRlZmVy
O1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5u
ZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7XG5cdGRlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbn0g
ZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9
IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7XG5cdGRlZmVyID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNl
dFRpbWVvdXQoZm4sIDApO1xuXHR9O1xufVxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9i
amVjdFxuXG5kZXNjcmlwdGlvbjogT2JqZWN0IGdlbmVyaWMgbWV0aG9kc1xuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IFtPYmplY3Qs
IEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5c
dHN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xu
XHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGsgaW4gb2JqZWN0KSByZXN1bHRzW2tdID0gb2Jq
ZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0
aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtl
eXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5
XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0
cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihvYmplY3QsIGZuLCBi
aW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMo
b2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRc
dFx0dmFyIGtleSA9IGtleXNbaV0sIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0XHRpZiAoZm4u
Y2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3QpKSByZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0
XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVj
dCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRm
b3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtl
eXNbaV07XG5cdFx0XHRpZiAoIWZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVy
biBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rp
b24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3Qp
O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIg
a2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkp
KSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVl
czogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgdmFsdWVzID0gW107XG5cdFx0dmFyIGtleXMg
PSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5n
dGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXMucHVzaChvYmpl
Y3Rba10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9LFxuXG5cdGdldExlbmd0aDog
ZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7
XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHZhciBrZXlz
ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVu
Z3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAob2JqZWN0W2tl
eV0gPT09IHZhbHVlKSByZXR1cm4ga2V5O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxc
blxuXHRjb250YWluczogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVj
dC5rZXlPZihvYmplY3QsIHZhbHVlKSAhPSBudWxsO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6
IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cblx0
XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJh
c2UpIGtleSA9IGJhc2UgKyAnWycgKyBrZXkgKyAnXSc7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRc
dFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRcdFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0
ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWUsIGtleSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNl
ICdhcnJheSc6XG5cdFx0XHRcdFx0dmFyIHFzID0ge307XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChm
dW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRcdFx0cXNbaV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7
XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcocXMsIGtleSk7XG5cdFx0
XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29k
ZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkg
cXVlcnlTdHJpbmcucHVzaChyZXN1bHQpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3Ry
aW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxufSkoKTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6
IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRpb246IFN0YW5kYWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJz
ZXJcbnByb3ZpZGVzOiBTbGljay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52
YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJbmRleCxcblx0Y29tYmluYXRvckluZGV4LFxuXHRyZXZl
cnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0cmV2ZXJzZUNhY2hlID0ge30sXG5cdHJlVW5lc2NhcGUg
PSAvXFxcXC9nO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uLCBpc1JldmVyc2Vk
KXtcblx0aWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHByZXNz
aW9uLlNsaWNrID09PSB0cnVlKSByZXR1cm4gZXhwcmVzc2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgn
JyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblx0cmV2ZXJzZWQg
PSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBjdXJyZW50Q2FjaGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJz
ZUNhY2hlIDogY2FjaGU7XG5cdGlmIChjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl0pIHJldHVybiBj
dXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07XG5cdHBhcnNlZCA9IHtcblx0XHRTbGljazogdHJ1ZSxc
blx0XHRleHByZXNzaW9uczogW10sXG5cdFx0cmF3OiBleHByZXNzaW9uLFxuXHRcdHJldmVyc2U6
IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyc2UodGhpcy5yYXcsIHRydWUpO1xuXHRcdH1c
blx0fTtcblx0c2VwYXJhdG9ySW5kZXggPSAtMTtcblx0d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4
cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UocmVnZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNl
ZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoO1xuXHRyZXR1cm4gY3VycmVudENh
Y2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDtc
bn07XG5cbnZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRp
ZiAoY29tYmluYXRvciA9PT0gJyEnKSByZXR1cm4gJyAnO1xuXHRlbHNlIGlmIChjb21iaW5hdG9y
ID09PSAnICcpIHJldHVybiAnISc7XG5cdGVsc2UgaWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3Ip
KSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8sICcnKTtcblx0ZWxzZSByZXR1cm4gJyEn
ICsgY29tYmluYXRvcjtcbn07XG5cbnZhciByZXZlcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7
XG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFy
IGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBleHAgPSBleHBy
ZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFzdCA9IHtwYXJ0czogW10sIHRhZzogJyonLCBjb21iaW5h
dG9yOiByZXZlcnNlQ29tYmluYXRvcihleHBbMF0uY29tYmluYXRvcil9O1xuXG5cdFx0Zm9yICh2
YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspe1xuXHRcdFx0dmFyIGNleHAgPSBleHBbal07
XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0
b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNvbWJpbmF0b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9y
O1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhw
LnJldmVyc2UoKS5wdXNoKGxhc3QpO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxu
dmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAu
Ni4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4u
Y29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZVxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2Uo
L1stW1xcXXt9KCkqKz8uXFxcXF4kfCwjXFxzXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0
dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9KTtcbn07XG5cbnZhciByZWdleHAgPSBuZXcgUmVnRXhw
KFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1YnlcbnB1dHMgXCJcXHRcXHRcIiArIERBVEEucmVhZC5n
c3ViKC9cXChcXD94XFwpfFxccysjLiokfFxccyt8XFxcXCR8XFxcXG4vLCcnKVxuX19FTkRfX1xu
XHRcIig/eCleKD86XFxcblx0ICBcXFxccyogKCAsICkgXFxcXHMqICAgICAgICAgICAgICAgIyBT
ZXBhcmF0b3IgICAgICAgICAgXFxuXFxcblx0fCBcXFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxc
XHMqICAgIyBDb21iaW5hdG9yICAgICAgICAgXFxuXFxcblx0fCAgICAgICggXFxcXHMrICkgICAg
ICAgICAgICAgICAgICMgQ29tYmluYXRvckNoaWxkcmVuIFxcblxcXG5cdHwgICAgICAoIDx1bmlj
b2RlPisgfCBcXFxcKiApICAgICAjIFRhZyAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwj
ICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBJRCAgICAgICAgICAgICAgICAgXFxuXFxcblx0
fCBcXFxcLiAgKCA8dW5pY29kZT4rICAgICAgICkgICAgICMgQ2xhc3NOYW1lICAgICAgICAgIFxc
blxcXG5cdHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgICAgICAg
ICAgXFxuXFxcblx0XFxcXFsgIFxcXG5cdFx0XFxcXHMqICg8dW5pY29kZTE+KykgICg/OiAgXFxc
blx0XHRcdFxcXFxzKiAoWypeJCF+fF0/PSkgICg/OiAgXFxcblx0XHRcdFx0XFxcXHMqICg/Olxc
XG5cdFx0XHRcdFx0KFtcXFwiJ10/KSguKj8pXFxcXDkgXFxcblx0XHRcdFx0KVxcXG5cdFx0XHQp
ICBcXFxuXHRcdCk/ICBcXFxccyogIFxcXG5cdFxcXFxdKD8hXFxcXF0pIFxcblxcXG5cdHwgICA6
KyAoIDx1bmljb2RlPisgKSg/OlxcXG5cdFxcXFwoICg/OlxcXG5cdFx0KD86KFtcXFwiJ10pKFte
XFxcXDEyXSopXFxcXDEyKXwoKD86XFxcXChbXildK1xcXFwpfFteKCldKikrKVxcXG5cdCkgXFxc
XClcXFxuXHQpP1xcXG5cdClcIlxuKi9cblx0XCJeKD86XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8
Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxcXHMrKXwoPHVuaWNvZGU+K3xcXFxcKil8XFxcXCMoPHVu
aWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+Kyl8XFxcXFtcXFxccyooPHVuaWNvZGUxPispKD86XFxc
XHMqKFsqXiQhfnxdPz0pKD86XFxcXHMqKD86KFtcXFwiJ10/KSguKj8pXFxcXDkpKSk/XFxcXHMq
XFxcXF0oPyFcXFxcXSl8KDorKSg8dW5pY29kZT4rKSg/OlxcXFwoKD86KD86KFtcXFwiJ10pKFte
XFxcXDEzXSopXFxcXDEzKXwoKD86XFxcXChbXildK1xcXFwpfFteKCldKikrKSlcXFxcKSk/KVwi
XG5cdC5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycgKyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQl
XiY9e31cXFxcOzwvJykgKyAnXScpXG5cdC5yZXBsYWNlKC88dW5pY29kZT4vZywgJyg/OltcXFxc
d1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG5cdC5yZXBs
YWNlKC88dW5pY29kZTE+L2csICcoPzpbOlxcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxc
XFxcW15cXFxcczAtOWEtZl0pJylcbik7XG5cbmZ1bmN0aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gs
XG5cblx0c2VwYXJhdG9yLFxuXHRjb21iaW5hdG9yLFxuXHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5c
blx0dGFnTmFtZSxcblx0aWQsXG5cdGNsYXNzTmFtZSxcblxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0
dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRyaWJ1dGVRdW90ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5c
blx0cHNldWRvTWFya2VyLFxuXHRwc2V1ZG9DbGFzcyxcblx0cHNldWRvUXVvdGUsXG5cdHBzZXVk
b0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBzZXVkb0NsYXNzVmFsdWVcbil7XG5cdGlmIChzZXBhcmF0
b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXtcblx0XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytz
ZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0XHRjb21iaW5hdG9ySW5kZXggPSAtMTtcblx0XHRpZiAo
c2VwYXJhdG9yKSByZXR1cm4gJyc7XG5cdH1cblxuXHRpZiAoY29tYmluYXRvciB8fCBjb21iaW5h
dG9yQ2hpbGRyZW4gfHwgY29tYmluYXRvckluZGV4ID09PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9
IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRcdHZhciBjdXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4
cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTtcblx0XHRpZiAocmV2ZXJzZWQgJiYgY3VycmVudFNl
cGFyYXRvcltjb21iaW5hdG9ySW5kZXhdKVxuXHRcdFx0Y3VycmVudFNlcGFyYXRvcltjb21iaW5h
dG9ySW5kZXhdLnJldmVyc2VDb21iaW5hdG9yID0gcmV2ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRv
cik7XG5cdFx0Y3VycmVudFNlcGFyYXRvclsrK2NvbWJpbmF0b3JJbmRleF0gPSB7Y29tYmluYXRv
cjogY29tYmluYXRvciwgdGFnOiAnKid9O1xuXHR9XG5cblx0dmFyIGN1cnJlbnRQYXJzZWQgPSBw
YXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdW2NvbWJpbmF0b3JJbmRleF07XG5cblx0
aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJlbnRQYXJzZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJl
VW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGlkKXtcblx0XHRjdXJyZW50UGFyc2VkLmlk
ID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChjbGFzc05hbWUp
e1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxu
XHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc0xpc3QpIGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0
ID0gW107XG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xh
c3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTtc
blx0XHRjdXJyZW50UGFyc2VkLmNsYXNzZXMucHVzaCh7XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1l
LFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVnRXhwKCcoXnxcXFxccyknICsgZXNjYXBlUmVnRXhwKGNs
YXNzTmFtZSkgKyAnKFxcXFxzfCQpJylcblx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKHBzZXVkb0Ns
YXNzKXtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9D
bGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVl
ID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSA6IG51bGw7XG5cblx0
XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107
XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1ZG9zLnB1c2goe1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFz
cy5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSxcblx0XHRcdHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVl
LFxuXHRcdFx0dHlwZTogcHNldWRvTWFya2VyLmxlbmd0aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVt
ZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAoYXR0cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1
dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmli
dXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycp
O1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4cDtcblxuXHRcdHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0
b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBl
c2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICAgICAgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRj
YXNlICckPScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAgICAgIGVzY2FwZVJlZ0V4cChh
dHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAgICApOyBicmVhaztcblx0XHRcdGNhc2UgJ349JyA6IHJl
Z2V4cCA9IG5ldyBSZWdFeHAoICcoXnxcXFxccyknKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFs
dWUpICsnKFxcXFxzfCQpJyApOyBicmVhaztcblx0XHRcdGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5l
dyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJygtfCQp
JyAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAgJz0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtc
blx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7
XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1
cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZihhdHRyaWJ1dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07
IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRc
dFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0
XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2
YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGF0dHJpYnV0ZVZhbHVlID09ICcnICYm
ICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJpYnV0ZU9wZXJhdG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7
XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7
XG5cdFx0fTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFy
c2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7
XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtleSxcblx0XHRcdG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVy
YXRvcixcblx0XHRcdHZhbHVlOiBhdHRyaWJ1dGVWYWx1ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0
XHR9KTtcblxuXHR9XG5cblx0cmV0dXJuICcnO1xufTtcblxuLy8gU2xpY2sgTlNcblxudmFyIFNs
aWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJl
c3Npb24pe1xuXHRyZXR1cm4gcGFyc2UoZXhwcmVzc2lvbik7XG59O1xuXG5TbGljay5lc2NhcGVS
ZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5cbmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNs
aWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZp
bmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6
IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRpb246IFRoZSBuZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0
b3IgZW5naW5lLlxucHJvdmlkZXM6IFNsaWNrLkZpbmRlclxucmVxdWlyZXM6IFNsaWNrLlBhcnNl
clxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZhciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJl
c0NhY2hlID0ge30sXG5cdHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxu
Ly8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb25cblxubG9jYWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rp
b24oZm4pe1xuXHRyZXR1cm4gKC9cXHtcXHMqXFxbbmF0aXZlIGNvZGVcXF1cXHMqXFx9LykudGVz
dCgnJyArIGZuKTtcbn07XG5cbmxvY2FsLmlzWE1MID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRy
ZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVyc2lvbikgfHwgKCEhZG9jdW1lbnQueG1sKSB8fCAodG9T
dHJpbmcuY2FsbChkb2N1bWVudCkgPT0gJ1tvYmplY3QgWE1MRG9jdW1lbnRdJykgfHxcblx0KGRv
Y3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1l
ICE9ICdIVE1MJyk7XG59O1xuXG5sb2NhbC5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50
KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1lbnRzIC8gd2luZG93IGFyZ3VtZW50cyB0byBkb2N1bWVu
dC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJhcG9sYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVy
bnMuXG5cdHZhciBub2RlVHlwZSA9IGRvY3VtZW50Lm5vZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUg
PT0gOSk7IC8vIGRvY3VtZW50XG5cdGVsc2UgaWYgKG5vZGVUeXBlKSBkb2N1bWVudCA9IGRvY3Vt
ZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGVcblx0ZWxzZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9y
KSBkb2N1bWVudCA9IGRvY3VtZW50LmRvY3VtZW50OyAvLyB3aW5kb3dcblx0ZWxzZSByZXR1cm47
XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0aGUgb2xkIGRvY3VtZW50XG5cblx0aWYgKHRoaXMuZG9j
dW1lbnQgPT09IGRvY3VtZW50KSByZXR1cm47XG5cdHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtc
blxuXHQvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUgZmVhdHVyZSBkZXRlY3Rpb24gb24gdGhpcyBk
b2N1bWVudCBiZWZvcmVcblxuXHR2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxc
blx0XHRyb290VWlkID0gdGhpcy5nZXRVSURYTUwocm9vdCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0
dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRcdGZlYXR1cmU7XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0
XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1
cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZl
YXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7fTtcblxuXHRmZWF0dXJlcy5yb290ID0gcm9vdDtcblx0
ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMuaXNYTUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1
cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9IGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5c
dD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxuXHQ9IGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxu
XHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNOXG5cdD0gZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxu
XHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1M
RG9jdW1lbnRcblx0PSBmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtc
blxuXHR2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0YXJTZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJv
a2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04sIGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUsXG5c
dFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjtcblxuXHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3Ns
aWNrX3VuaXF1ZWlkJztcblx0dmFyIHRlc3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHJvb3Q7XG5cdHRlc3RSb290LmFwcGVuZENo
aWxkKHRlc3ROb2RlKTtcblxuXHQvLyBvbiBub24tSFRNTCBkb2N1bWVudHMgaW5uZXJIVE1MIGFu
ZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsgcHJvcGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0
Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9XCInK2lkKydcIj48L2E+Jztcblx0XHRmZWF0dXJlcy5p
c0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNo
IChlKXt9XG5cblx0aWYgKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50KXtcblxuXHRcdHRlc3ROb2Rl
LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNvbW1lbnQgbm9k
ZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0
dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnJykpO1xuXHRcdHN0
YXJTZWxlY3RzQ29tbWVudHMgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5s
ZW5ndGggPiAxKTtcblxuXHRcdC8vIElFIHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9v
PlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0
XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRz
ZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFy
U2VsZWN0c0Nsb3NlZCA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3Rl
ZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0XHR9IGNhdGNoIChlKXt9O1xuXG5c
dFx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFy
U2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8vIElFIHJldHVybnMgZWxlbWVudHMgd2l0aCB0aGUgbmFt
ZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9yIGdldEVsZW1lbnRzQnlJZCBmb3Igc29tZSBkb2N1bWVu
dHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIG5hbWU9XCInKyBp
ZCArJ1wiPjwvYT48YiBpZD1cIicrIGlkICsnXCI+PC9iPic7XG5cdFx0XHRmZWF0dXJlcy5pZEdl
dHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpID09PSB0ZXN0Tm9kZS5maXJzdENo
aWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdGlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1l
IGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxhIGNsYXNzPVwiYlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0
Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9k
ZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9ICdiJztcblx0XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNC
eUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3Ro
ICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gT3BlcmEgOS42IGdldEVs
ZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVjdHMgdGhlIGNsYXNzIGlmIGl0cyBub3QgdGhl
IGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxh
IGNsYXNzPVwiYVwiPjwvYT48YSBjbGFzcz1cImYgYiBhXCI+PC9hPic7XG5cdFx0XHRcdGJyb2tl
blNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
J2EnKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdGZlYXR1cmVz
LmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBicm9rZW5TZWNv
bmRDbGFzc05hbWVHRUJDTjtcblx0XHR9XG5cblx0XHRpZiAodGVzdE5vZGUucXVlcnlTZWxlY3Rv
ckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwi
KSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5
IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNl
bGVjdGVkID0gdGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnKicpO1xuXHRcdFx0XHRmZWF0dXJl
cy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAm
JiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0XHRcdH0gY2F0Y2gg
KGUpe31cblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBxdWVyeVNlbGVjdG9yQWxsIGRvZXNudCB3b3Jr
IHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3RO
b2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIk1pWFwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJl
cy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLk1pWCcp
Lmxlbmd0aDtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVy
YSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25zIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRc
dHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24gc2Vs
ZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29wdGlvbj48L3NlbGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJl
cy5icm9rZW5DaGVja2VkUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2Vk
JykubGVuZ3RoID09IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0
dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0clsqXiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1
ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9
ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJp
YnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3MqPVwiXCJdJykubGVu
Z3RoICE9IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcs
IGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQgeCwgZm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0
dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXRcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj1cInNcIj48aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9m
b3JtPic7XG5cdFx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0
Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAhPSAncycpO1xuXHRcdH0gY2F0Y2ggKGUpe31c
blxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVzU2VsZWN0b3IgZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVz
Lm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3QubWF0Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVz
U2VsZWN0b3IgfHwqLyByb290Lm1vek1hdGNoZXNTZWxlY3RvciB8fCByb290LndlYmtpdE1hdGNo
ZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkg
e1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qg
c2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVj
dG9yLmNhbGwocm9vdCwgJzpzbGljaycpO1xuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1Nl
bGVjdG9yID0gbnVsbDtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0
cm9vdC5zbGlja19leHBhbmRvID0gMTtcblx0XHRkZWxldGUgcm9vdC5zbGlja19leHBhbmRvO1xu
XHRcdGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlESFRNTDtcblx0fSBjYXRjaCAoZSl7XG5c
dFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURYTUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5y
ZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5cdHRlc3ROb2RlID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9
IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0g
KGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8g
ZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0
dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0aG9kKSByZXR1cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5c
dFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0
cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtc
blx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJp
YnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0cmV0dXJuIChtZXRob2QpID8gbWV0aG9kLmNhbGwobm9k
ZSkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblx0fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVc
blxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1dGUgPSAocm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShy
b290Lmhhc0F0dHJpYnV0ZSkpID8gZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1
cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0
dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xu
XHRcdHJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkp
O1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5zXG5cdC8vIEZJWE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNv
bnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHhtbCBhbmQgaHRtbCBkb2N1bWVudHM/XG5c
dHZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3Qu
Y29udGFpbnMpLFxuXHRcdG5hdGl2ZURvY3VtZW50Q29udGFpbnMgPSBkb2N1bWVudCAmJiB0aGlz
LmlzTmF0aXZlQ29kZShkb2N1bWVudC5jb250YWlucyk7XG5cblx0ZmVhdHVyZXMuY29udGFpbnMg
PSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rp
b24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQuY29udGFpbnMobm9kZSk7XG5c
dH0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1
bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdC8vIElFOCBkb2VzIG5vdCBoYXZlIC5jb250YWlu
cyBvbiBkb2N1bWVudC5cblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQg
PT09IGRvY3VtZW50KSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGNvbnRleHQpLmNvbnRh
aW5zKG5vZGUpO1xuXHR9IDogKHJvb3QgJiYgcm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikg
PyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8
fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGUpICYgMTYpO1xuXHR9IDog
ZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0aWYgKG5vZGUpIGRvIHtcblx0XHRcdGlmIChu
b2RlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUu
cGFyZW50Tm9kZSkpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHQvLyBkb2N1bWVudCBv
cmRlciBzb3J0aW5nXG5cdC8vIGNyZWRpdHMgdG8gU2l6emxlIChodHRwOi8vc2l6emxlanMuY29t
LylcblxuXHRmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBv
c2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgcmV0dXJuIDA7XG5cdFx0cmV0dXJu
IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0ID8gLTEgOiBhID09PSBiID8gMCA6IDE7
XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBpbiByb290KSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlm
ICghYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJbmRleCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJu
IGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXHR9IDogKGRvY3VtZW50LmNyZWF0ZVJh
bmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93
bmVyRG9jdW1lbnQpIHJldHVybiAwO1xuXHRcdHZhciBhUmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQu
Y3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5c
dFx0YVJhbmdlLnNldFN0YXJ0KGEsIDApO1xuXHRcdGFSYW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0
YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xuXHRcdGJSYW5nZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0
dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFu
Z2UpO1xuXHR9IDogbnVsbDtcblxuXHRyb290ID0gbnVsbDtcblxuXHRmb3IgKGZlYXR1cmUgaW4g
ZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxu
fTtcblxuLy8gTWFpbiBNZXRob2RcblxudmFyIHJlU2ltcGxlU2VsZWN0b3IgPSAvXihbIy5dPyko
KD86W1xcdy1dK3xcXCopKSQvLFxuXHRyZUVtcHR5QXR0cmlidXRlID0gL1xcWy4rWyokXl09KD86
XCJcInwnJyk/XFxdLyxcblx0cXNhRmFpbEV4cENhY2hlID0ge307XG5cbmxvY2FsLnNlYXJjaCA9
IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBm
b3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8gbnVsbCA6IChhcHBlbmQgfHwgW10pO1xuXG5c
dGlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kO1xuXHRlbHNlIGlmIChjb250ZXh0Lm5hdmlnYXRv
cikgY29udGV4dCA9IGNvbnRleHQuZG9jdW1lbnQ7IC8vIENvbnZlcnQgdGhlIG5vZGUgZnJvbSBh
IHdpbmRvdyB0byBhIGRvY3VtZW50XG5cdGVsc2UgaWYgKCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1
cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBcblxuXHR2YXIgcGFyc2VkLCBpLCBub2RlLCBub2Rlcyxc
blx0XHR1bmlxdWVzID0gdGhpcy51bmlxdWVzID0ge30sXG5cdFx0aGFzT3RoZXJzID0gISEoYXBw
ZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxuXHRcdGNvbnRleHRJc0RvY3VtZW50ID0gKGNvbnRleHQu
bm9kZVR5cGUgPT0gOSk7XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1
bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50
KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lkIGR1cGxpY2F0aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhl
IGFwcGVuZCBhcnJheVxuXHRpZiAoaGFzT3RoZXJzKSBmb3IgKGkgPSBmb3VuZC5sZW5ndGg7IGkt
LTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQoZm91bmRbaV0pXSA9IHRydWU7XG5cblx0Ly8gZXhwcmVz
c2lvbiBjaGVja3NcblxuXHRpZiAodHlwZW9mIGV4cHJlc3Npb24gPT0gJ3N0cmluZycpeyAvLyBl
eHByZXNzaW9uIGlzIGEgc3RyaW5nXG5cblx0XHQvKjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRl
PiovXG5cdFx0dmFyIHNpbXBsZVNlbGVjdG9yID0gZXhwcmVzc2lvbi5tYXRjaChyZVNpbXBsZVNl
bGVjdG9yKTtcblx0XHRzaW1wbGVTZWxlY3RvcnM6IGlmIChzaW1wbGVTZWxlY3Rvcil7XG5cblx0
XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3RvclsxXSxcblx0XHRcdFx0bmFtZSA9IHNpbXBs
ZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRpZiAoIXN5bWJvbCl7XG5cblx0XHRcdFx0aWYgKG5hbWUg
PT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlROKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5c
dFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTtcblx0XHRc
dFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0Zm9yIChpID0g
MDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5p
cXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5c
blx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcjJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlz
SFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1bWVudCkgYnJlYWsgc2ltcGxlU2VsZWN0b3Jz
O1xuXHRcdFx0XHRub2RlID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChuYW1lKTtcblx0XHRcdFx0
aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7XG5cdFx0XHRcdGlmICh0aGlzLmlkR2V0c05hbWUgJiYg
bm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBuYW1lKSBicmVhayBzaW1w
bGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0
XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91
bmQucHVzaChub2RlKTtcblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJy4nKXtcblxuXHRc
dFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgKCghY29udGV4dC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04pICYmIGNvbnRleHQucXVlcnlTZWxlY3RvckFs
bCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdFx0bm9kZXMgPSBj
b250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0
KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0g
bm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhp
cy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRc
dH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoQ2xhc3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxc
cyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkgKycoXFxcXHN8JCknKTtcblx0XHRcdFx0XHRu
b2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdFx0XHRmb3Ig
KGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9k
ZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0XHRpZiAoIShjbGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50
ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJu
IG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJ
RChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5c
dFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRy
ZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvc2ltcGxlLXNl
bGVjdG9ycy1vdmVycmlkZT4qL1xuXG5cdFx0Lyo8cXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9c
blx0XHRxdWVyeVNlbGVjdG9yOiBpZiAoY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKXtcblxuXHRc
dFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50XG5cdFx0XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtl
eHByZXNzaW9uXVxuXHRcdFx0XHQvL1RPRE86IG9ubHkgc2tpcCB3aGVuIGV4cHJlc3Npb24gaXMg
YWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRcdFx0XHR8fCB0aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxu
XHRcdFx0XHR8fCAodGhpcy5icm9rZW5DaGVja2VkUVNBICYmIGV4cHJlc3Npb24uaW5kZXhPZign
OmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFT
QSAmJiByZUVtcHR5QXR0cmlidXRlLnRlc3QoZXhwcmVzc2lvbikpXG5cdFx0XHRcdHx8ICghY29u
dGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFjb250ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0
XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11bHRpcGxlIGV4cHJlc3Npb25zIGluIHRoZSBzZWxlY3Rv
clxuXHRcdFx0XHRcdC8vICBzaW5jZSB3ZSBjdXJyZW50bHkgb25seSBmaXggbm9uLWRvY3VtZW50
IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNzaW9uIHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYm
IGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTFcblx0XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGlj
ay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cblx0XHRcdHZhciBf
ZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24sIF9jb250ZXh0ID0gY29udGV4dCwgY3VycmVudElkO1xu
XHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5cdFx0XHRcdC8vIG5vbi1kb2N1bWVudCBy
b290ZWQgUVNBXG5cdFx0XHRcdC8vIGNyZWRpdHMgdG8gQW5kcmV3IER1cG9udFxuXHRcdFx0XHRj
dXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1dGUoJ2lkJyksIHNsaWNraWQgPSAnc2xpY2tp
ZF9fJztcblx0XHRcdFx0X2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIHNsaWNraWQpO1xuXHRc
dFx0XHRfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNraWQgKyAnICcgKyBfZXhwcmVzc2lvbjtcblx0
XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRy
eSB7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvcihfZXhw
cmVzc2lvbikgfHwgbnVsbDtcblx0XHRcdFx0ZWxzZSBub2RlcyA9IGNvbnRleHQucXVlcnlTZWxl
Y3RvckFsbChfZXhwcmVzc2lvbik7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0cXNhRmFp
bEV4cENhY2hlW2V4cHJlc3Npb25dID0gMTtcblx0XHRcdFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtc
blx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRc
dFx0XHRcdGlmIChjdXJyZW50SWQpIF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50
SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2NvbnRleHQucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRc
dFx0XHRcdGNvbnRleHQgPSBfY29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRp
ZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSkgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2kr
K107KXtcblx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUgPiAnQCcgJiYgIShoYXNPdGhlcnMgJiYg
dW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBl
bHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmICghKGhhc090
aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5c
dFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRy
ZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3F1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiov
XG5cblx0XHRwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKGV4cHJlc3Npb24pO1xuXHRcdGlmICgh
cGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0g
bnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Npb25cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0g
ZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8vIGV4cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xp
Y2sgb2JqZWN0XG5cdFx0cGFyc2VkID0gZXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmICh0aGlzLmNv
bnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50IHx8IGNvbnRleHQsIGV4cHJlc3Npb24pKXsg
Ly8gZXhwcmVzc2lvbiBpcyBhIG5vZGVcblx0XHQoZm91bmQpID8gZm91bmQucHVzaChleHByZXNz
aW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7
IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2Vs
ZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50
cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNcblxuXHR0aGlzLnBvc05USCA9IHt9O1xuXHR0aGlzLnBv
c05USExhc3QgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBlID0ge307XG5cdHRoaXMucG9zTlRIVHlw
ZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNl
bGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFwcGVuZCBpcyBudWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEg
c2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGV4cHJlc3Npb24gdXNlIHB1c2hBcnJheSwgZWxzZSB1
c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2ggPSAoIWhhc090aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNl
ZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVzc2lvbnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0
aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDtcblxuXHRpZiAoZm91bmQgPT0gbnVsbCkgZm91
bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0IGVuZ2luZVxuXG5cdHZhciBqLCBtLCBuO1xuXHR2YXIg
Y29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1zLCBjdXJyZW50RXhwcmVzc2lvbiwgY3VycmVudEJpdCwg
bGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnM7XG5cblx0c2VhcmNoOiBm
b3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKykgZm9y
IChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50RXhwcmVzc2lvbltqXSk7IGorKyl7XG5cblx0
XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0b3I6JyArIGN1cnJlbnRCaXQuY29tYmluYXRvcjtcblx0
XHRpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRpbnVlIHNlYXJjaDtcblxuXHRcdHRhZyAgICAg
ICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1cnJlbnRCaXQudGFnIDogY3VycmVudEJpdC50
YWcudG9VcHBlckNhc2UoKTtcblx0XHRpZCAgICAgICAgID0gY3VycmVudEJpdC5pZDtcblx0XHRj
bGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xpc3Q7XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJl
bnRCaXQuY2xhc3Nlcztcblx0XHRhdHRyaWJ1dGVzID0gY3VycmVudEJpdC5hdHRyaWJ1dGVzO1xu
XHRcdHBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBzZXVkb3M7XG5cdFx0bGFzdEJpdCAgICA9IChq
ID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoIC0gMSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlx
dWVzID0ge307XG5cblx0XHRpZiAobGFzdEJpdCl7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlx
dWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9IGZvdW5kO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlz
LnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRoaXMuZm91bmQgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAo
aiA9PT0gMCl7XG5cdFx0XHR0aGlzW2NvbWJpbmF0b3JdKGNvbnRleHQsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYg
bGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHR9IGVsc2Uge1xuXHRc
dFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVu
Z3RoOyBtIDwgbjsgbSsrKXtcblx0XHRcdFx0dGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNb
bV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5c
dFx0XHRcdGlmIChmb3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHRcdH0gZWxzZSBmb3Ig
KG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKykgdGhpc1tjb21iaW5h
dG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudEl0ZW1zID0gdGhpcy5mb3VuZDtc
blx0fVxuXG5cdC8vIHNob3VsZCBzb3J0IGlmIHRoZXJlIGFyZSBub2RlcyBpbiBhcHBlbmQgYW5k
IGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4cHJlc3Npb25zLlxuXHRpZiAoaGFzT3RoZXJzIHx8IChw
YXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkpIHRoaXMuc29ydChmb3VuZCk7XG5cblx0cmV0
dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVsbCkgOiBmb3VuZDtcbn07XG5cbi8vIFV0aWxz
XG5cbmxvY2FsLnVpZHggPSAxO1xubG9jYWwudWlkayA9ICdzbGljay11bmlxdWVpZCc7XG5cbmxv
Y2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHR2YXIgdWlkID0gbm9kZS5nZXRBdHRy
aWJ1dGUodGhpcy51aWRrKTtcblx0aWYgKCF1aWQpe1xuXHRcdHVpZCA9IHRoaXMudWlkeCsrO1xu
XHRcdG5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlkaywgdWlkKTtcblx0fVxuXHRyZXR1cm4gdWlk
O1xufTtcblxubG9jYWwuZ2V0VUlESFRNTCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9k
ZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVlTnVtYmVyID0gdGhpcy51aWR4KyspO1xufTtc
blxuLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9jdW1lbnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9k
LlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVzdWx0cyl7XG5cdGlmICghdGhpcy5kb2N1bWVu
dFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7XG5cdHJlc3VsdHMuc29ydCh0aGlzLmRvY3VtZW50U29y
dGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8
bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwuY2FjaGVOVEggPSB7fTtcblxubG9jYWwu
bWF0Y2hOVEggPSAvXihbKy1dP1xcZCopPyhbYS16XSspPyhbKy1dXFxkKyk/JC87XG5cbmxvY2Fs
LnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihhcmd1bWVudCl7XG5cdHZhciBwYXJzZWQgPSBh
cmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxz
ZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwgZmFsc2U7XG5cdHZhciBhID0gcGFyc2Vk
WzFdIHx8IDE7XG5cdGlmIChhID09ICctJykgYSA9IC0xO1xuXHR2YXIgYiA9ICtwYXJzZWRbM10g
fHwgMDtcblx0cGFyc2VkID1cblx0XHQoc3BlY2lhbCA9PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6
XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcpXHQ/IHthOiAyLCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwg
PT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjogMH0gOiB7YTogMCwgYjogYX07XG5cblx0cmV0dXJuICh0
aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9IHBhcnNlZCk7XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQ
c2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwgc2libGluZywgcG9zaXRpb25zLCBvZlR5cGUpe1xuXHRy
ZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xuXHRcdHZhciB1aWQgPSB0aGlzLmdldFVJ
RChub2RlKTtcblx0XHRpZiAoIXRoaXNbcG9zaXRpb25zXVt1aWRdKXtcblx0XHRcdHZhciBwYXJl
bnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xu
XHRcdFx0dmFyIGVsID0gcGFyZW50W2NoaWxkXSwgY291bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlw
ZSl7XG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtc
blx0XHRcdFx0XHRpZiAoZWwubm9kZU5hbWUgIT0gbm9kZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0
XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0
fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRv
IHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHRcdFx0
dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdo
aWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9
IGFyZ3VtZW50IHx8ICduJztcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5jYWNoZU5USFthcmd1bWVu
dF0gfHwgdGhpcy5wYXJzZU5USEFyZ3VtZW50KGFyZ3VtZW50KTtcblx0XHRpZiAoIXBhcnNlZCkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBhID0gcGFyc2VkLmEsIGIgPSBwYXJzZWQuYiwgcG9zID0g
dGhpc1twb3NpdGlvbnNdW3VpZF07XG5cdFx0aWYgKGEgPT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xu
XHRcdGlmIChhID4gMCl7XG5cdFx0XHRpZiAocG9zIDwgYikgcmV0dXJuIGZhbHNlO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBvcykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1
cm4gKChwb3MgLSBiKSAlIGEpID09IDA7XG5cdH07XG59O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxl
Y3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5j
dGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYg
KHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xufTtcblxubG9jYWwucHVzaFVJRCA9IGZ1
bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2
YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdGlmICghdGhpcy51bmlxdWVzW3VpZF0gJiYg
dGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5w
dXNoKG5vZGUpO1xuXHR9XG59O1xuXG5sb2NhbC5tYXRjaE5vZGUgPSBmdW5jdGlvbihub2RlLCBz
ZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlzSFRNTERvY3VtZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hl
c1NlbGVjdG9yKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1Nl
bGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVwbGFjZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wi
XFxdXSs/KVxccypcXF0vZywgJ1skMT1cIiQyXCJdJykpO1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJy
b3Ipe31cblx0fVxuXG5cdHZhciBwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtc
blx0aWYgKCFwYXJzZWQpIHJldHVybiB0cnVlO1xuXG5cdC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxl
Y3RvcnNcblx0dmFyIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zLCBzaW1wbGVFeHBD
b3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Npb247XG5cdGZvciAoaSA9IDA7IChjdXJyZW50
RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsrKXtcblx0XHRpZiAoY3VycmVudEV4cHJl
c3Npb24ubGVuZ3RoID09IDEpe1xuXHRcdFx0dmFyIGV4cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBd
O1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCAodGhpcy5pc1hNTERvY3VtZW50
KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJDYXNlKCksIGV4cC5pZCwgZXhwLmNsYXNzZXMs
IGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykpIHJldHVybiB0cnVlO1xuXHRcdFx0c2ltcGxl
RXhwQ291bnRlcisrO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzaW1wbGVFeHBDb3VudGVyID09IHBh
cnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuXHR2YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0
aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBpdGVtO1xuXHRmb3IgKGkgPSAwOyBpdGVtID0gbm9kZXNb
aSsrXTspe1xuXHRcdGlmIChpdGVtID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1
cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5tYXRjaFBzZXVkbyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUs
IGFyZ3VtZW50KXtcblx0dmFyIHBzZXVkb05hbWUgPSAncHNldWRvOicgKyBuYW1lO1xuXHRpZiAo
dGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNbcHNldWRvTmFtZV0obm9kZSwgYXJndW1lbnQp
O1xuXHR2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJl
dHVybiAoYXJndW1lbnQpID8gYXJndW1lbnQgPT0gYXR0cmlidXRlIDogISFhdHRyaWJ1dGU7XG59
O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9yID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9
ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gbm9kZS5ub2RlTmFtZSA6IG5vZGUubm9kZU5hbWUudG9V
cHBlckNhc2UoKTtcblx0XHRpZiAodGFnID09ICcqJyl7XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAn
QCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBjb21tZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9k
ZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG5vZGVOYW1lICE9IHRhZykgcmV0dXJuIGZhbHNl
O1xuXHRcdH1cblx0fVxuXG5cdGlmIChpZCAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBp
ZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBpLCBwYXJ0LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBm
b3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7XG5cdFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1
dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0aWYgKCEoY2xzICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRl
c3QoY2xzKSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAoYXR0cmlidXRlcykgZm9yIChpID0g
YXR0cmlidXRlcy5sZW5ndGg7IGktLTspe1xuXHRcdHBhcnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRc
dGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVzdCh0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBw
YXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZh
bHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9zKSBmb3IgKGkgPSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7
XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07XG5cdFx0aWYgKCF0aGlzLm1hdGNoUHNldWRvKG5vZGUs
IHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVl
O1xufTtcblxudmFyIGNvbWJpbmF0b3JzID0ge1xuXG5cdCcgJzogZnVuY3Rpb24obm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KXsgLy8gYWxsIGNo
aWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxuXHRcdHZhciBpLCBpdGVtLCBjaGlsZHJlbjtcblxuXHRc
dGlmICh0aGlzLmlzSFRNTERvY3VtZW50KXtcblx0XHRcdGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0
XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRcdFx0aWYg
KCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMuaWRHZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0u
Z2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gaWQpKXtcblx0XHRcdFx0XHQvLyBh
bGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyB3aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNp
ZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlmIHRoZXJlcyBqdXN0IG9uZSBpdCB3aWxsIHJldHVybiB0
aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxsIGJlIGEgY29sbGVjdGlvblxuXHRcdFx0XHRcdGNoaWxk
cmVuID0gbm9kZS5hbGxbaWRdO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW4pIHJldHVybjtcblx0
XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBdKSBjaGlsZHJlbiA9IFtjaGlsZHJlbl07XG5cdFx0XHRc
dFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KXtcblx0XHRcdFx0XHRcdHZhciBp
ZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyk7XG5cdFx0XHRcdFx0XHRpZiAoaWRO
b2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnB1c2go
aXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0
XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVy
bjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWl0ZW0pe1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBj
b250ZXh0IGlzIGluIHRoZSBkb20gd2UgcmV0dXJuLCBlbHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBi
cmVha2luZyB0aGUgZ2V0QnlJZCBsYWJlbFxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRo
aXMucm9vdCwgbm9kZSkpIHJldHVybjtcblx0XHRcdFx0XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5c
dFx0XHRcdH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCAhPT0gbm9kZSAmJiAhdGhpcy5jb250YWlu
cyhub2RlLCBpdGVtKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxs
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0
fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYgKGNsYXNzZXMgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0LmpvaW4oJyAnKSk7XG5cdFx0XHRcdGlmICgh
KGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRc
dGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywg
aWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9
XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUodGFnKTtcblx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0
aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRcdFx0aWYgKCF0aGlzLmJyb2tlblN0YXJHRUJUTikgdGFn
ID0gbnVsbDtcblx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5w
dXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1c
blx0fSxcblxuXHQnPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRyZW5cblx0XHRpZiAoKG5vZGUgPSBub2RlLmZp
cnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2go
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fSB3aGls
ZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7XG5cdH0sXG5cblx0JysnOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJs
aW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVU
eXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5cdCdeJzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGZp
cnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5c
dFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6
KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1c
blx0fSxcblxuXHQnfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5u
ZXh0U2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5c
dFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlx
dWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRc
dFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdH1cblx0fSxcblxuXHQnKysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nIGFuZCBwcmV2aW91cyBzaWJs
aW5nXG5cdFx0dGhpc1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0
aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0
IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6fidd
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNb
J2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBhbGwgcGFyZW50IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5c
dFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgaWYgKG5vZGUgIT09IHRoaXMuZG9j
dW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IHBhcmVudCAob25lIGxldmVsKVxuXHRcdG5v
ZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0aWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
fSxcblxuXHQnISsnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
cHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRi
cmVhaztcblx0XHR9XG5cdH0sXG5cblx0JyFeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGxhc3QgY2hpbGRcblx0XHRub2RlID0gbm9k
ZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0g
MSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCchfic6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91
cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSl7XG5c
dFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0
aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7
XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9XG5c
bn07XG5cbmZvciAodmFyIGMgaW4gY29tYmluYXRvcnMpIGxvY2FsWydjb21iaW5hdG9yOicgKyBj
XSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52YXIgcHNldWRvcyA9IHtcblxuXHQvKjxwc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0J2VtcHR5JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIGNoaWxkID0g
bm9kZS5maXJzdENoaWxkO1xuXHRcdHJldHVybiAhKGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlID09
IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykubGVuZ3Ro
O1xuXHR9LFxuXG5cdCdub3QnOiBmdW5jdGlvbihub2RlLCBleHByZXNzaW9uKXtcblx0XHRyZXR1
cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUsIGV4cHJlc3Npb24pO1xuXHR9LFxuXG5cdCdjb250YWlu
cyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpe1xuXHRcdHJldHVybiAobm9kZS5pbm5lclRleHQgfHwg
bm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhPZih0ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdm
aXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJl
dmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRc
dHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09
IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1jaGls
ZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZTtcblx0XHR3aGlsZSAoKHBy
ZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVUeXBlID09IDEpIHJldHVy
biBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5u
ZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdu
dGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxp
bmcnLCAncG9zTlRIJyksXG5cblx0J250aC1sYXN0LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNl
dWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USExhc3QnKSxcblxuXHQn
bnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNp
YmxpbmcnLCAncG9zTlRIVHlwZScsIHRydWUpLFxuXG5cdCdudGgtbGFzdC1vZi10eXBlJzogbG9j
YWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05U
SFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0J2luZGV4JzogZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xu
XHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJycgKyAoaW5kZXggKyAx
KSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sn
cHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybicpO1xuXHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlv
bihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybisx
Jyk7XG5cdH0sXG5cblx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlw
ZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2ZpcnN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2Rl
KXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9
IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJl
dHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1vZi10eXBlJzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3
aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9k
ZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1v
Zi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlLCBub2RlTmFtZSA9
IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcp
KSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBu
ZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5l
eHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtc
blx0fSxcblxuXHQvKjwvb2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9t
IHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhbm9k
ZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnZGlzYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRy
ZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnY2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUp
e1xuXHRcdHJldHVybiBub2RlLmNoZWNrZWQgfHwgbm9kZS5zZWxlY3RlZDtcblx0fSxcblxuXHQn
Zm9jdXMnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAm
JiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBu
b2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxu
XG5cdCdyb290JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlID09PSB0aGlzLnJv
b3QpO1xuXHR9LFxuXG5cdCdzZWxlY3RlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBu
b2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0Lyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cbn07XG5cbmZv
ciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3BzZXVkbzonICsgcF0gPSBwc2V1ZG9zW3BdO1xu
XG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNcblxudmFyIGF0dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5cdCdmb3InOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAo
J2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1sRm9yIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2Zv
cicpO1xuXHR9LFxuXG5cdCdocmVmJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdocmVmJyBp
biB0aGlzKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJywgMikgOiB0aGlzLmdldEF0dHJpYnV0
ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0
aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4dCA6IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHls
ZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRleCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0
ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ3RhYmluZGV4Jyk7XG5cdFx0cmV0dXJuIChh
dHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUu
bm9kZVZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQndHlwZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG5cdH0sXG5cblx0J21heGxlbmd0aCc6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUo
J21heExlbmd0aCcpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2Rl
LnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH1cblxufTtc
blxuYXR0cmlidXRlR2V0dGVycy5NQVhMRU5HVEggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0
aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4bGVuZ3RoO1xuXG4vLyBTbGlja1xuXG52YXIgU2xpY2sg
PSBsb2NhbC5TbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sudmVyc2lvbiA9ICcx
LjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRlclxuXG5TbGljay5zZWFyY2ggPSBmdW5jdGlvbihjb250
ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQs
IGV4cHJlc3Npb24sIGFwcGVuZCk7XG59O1xuXG5TbGljay5maW5kID0gZnVuY3Rpb24oY29udGV4
dCwgZXhwcmVzc2lvbil7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lv
biwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4vLyBTbGljayBjb250YWlubWVudCBjaGVja2VyXG5cblNs
aWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVyLCBub2RlKXtcblx0bG9jYWwuc2V0RG9j
dW1lbnQoY29udGFpbmVyKTtcblx0cmV0dXJuIGxvY2FsLmNvbnRhaW5zKGNvbnRhaW5lciwgbm9k
ZSk7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgZ2V0dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0
ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0
cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cblNsaWNrLmhhc0F0
dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2Rl
KTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cbi8vIFNs
aWNrIG1hdGNoZXJcblxuU2xpY2subWF0Y2ggPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5c
dGlmICghKG5vZGUgJiYgc2VsZWN0b3IpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghc2VsZWN0b3Ig
fHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHRsb2NhbC5zZXREb2N1bWVudChu
b2RlKTtcblx0cmV0dXJuIGxvY2FsLm1hdGNoTm9kZShub2RlLCBzZWxlY3Rvcik7XG59O1xuXG4v
LyBTbGljayBhdHRyaWJ1dGUgYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lQXR0cmlidXRlR2V0dGVy
ID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0g
Zm47XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9va3VwQXR0cmlidXRlR2V0dGVyID0g
ZnVuY3Rpb24obmFtZSl7XG5cdHJldHVybiBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xu
fTtcblxuLy8gU2xpY2sgcHNldWRvIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1
bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWxbJ3BzZXVkbzonICsgbmFtZV0gPSBmdW5jdGlvbihu
b2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0dXJuIGZuLmNhbGwobm9kZSwgYXJndW1lbnQpO1xuXHR9
O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxvb2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5h
bWUpe1xuXHR2YXIgcHNldWRvID0gbG9jYWxbJ3BzZXVkbzonICsgbmFtZV07XG5cdGlmIChwc2V1
ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7XG5cdFx0cmV0dXJuIHBzZXVkby5jYWxsKHRo
aXMsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyBTbGljayBvdmVy
cmlkZXMgYWNjZXNzb3JcblxuU2xpY2sub3ZlcnJpZGUgPSBmdW5jdGlvbihyZWdleHAsIGZuKXtc
blx0bG9jYWwub3ZlcnJpZGUocmVnZXhwLCBmbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xp
Y2suaXNYTUwgPSBsb2NhbC5pc1hNTDtcblxuU2xpY2sudWlkT2YgPSBmdW5jdGlvbihub2RlKXtc
blx0cmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9kZSk7XG59O1xuXG5pZiAoIXRoaXMuU2xpY2sp
IHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4
cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xu
XG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnRcblxuZGVzY3JpcHRpb246IE9uZSBvZiB0aGUgbW9z
dCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMuIENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rp
b24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2Vy
LCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxl
bWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRv
dywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBPYmplY3QsIE51bWJlciwgU2xp
Y2suUGFyc2VyLCBTbGljay5GaW5kZXJdXG5cbnByb3ZpZGVzOiBbRWxlbWVudCwgRWxlbWVudHMs
ICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc11cblxuLi4uXG4qL1xuXG52YXIgRWxlbWVudCA9IHRo
aXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJvcHMpe1xuXHR2YXIga29uc3RydWN0b3IgPSBF
bGVtZW50LkNvbnN0cnVjdG9yc1t0YWddO1xuXHRpZiAoa29uc3RydWN0b3IpIHJldHVybiBrb25z
dHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0eXBlb2YgdGFnICE9ICdzdHJpbmcnKSByZXR1cm4gZG9j
dW1lbnQuaWQodGFnKS5zZXQocHJvcHMpO1xuXG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5c
blx0aWYgKCEoL15bXFx3LV0rJC8pLnRlc3QodGFnKSl7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNr
LnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0dGFnID0gKHBhcnNlZC50YWcgPT0g
JyonKSA/ICdkaXYnIDogcGFyc2VkLnRhZztcblx0XHRpZiAocGFyc2VkLmlkICYmIHByb3BzLmlk
ID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlkO1xuXG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBw
YXJzZWQuYXR0cmlidXRlcztcblx0XHRpZiAoYXR0cmlidXRlcykgZm9yICh2YXIgYXR0ciwgaSA9
IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0
cmlidXRlc1tpXTtcblx0XHRcdGlmIChwcm9wc1thdHRyLmtleV0gIT0gbnVsbCkgY29udGludWU7
XG5cblx0XHRcdGlmIChhdHRyLnZhbHVlICE9IG51bGwgJiYgYXR0ci5vcGVyYXRvciA9PSAnPScp
IHByb3BzW2F0dHIua2V5XSA9IGF0dHIudmFsdWU7XG5cdFx0XHRlbHNlIGlmICghYXR0ci52YWx1
ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJvcHNbYXR0ci5rZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0
XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAmJiBwcm9wc1snY2xhc3MnXSA9PSBudWxsKSBwcm9wc1sn
Y2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xpc3Quam9pbignICcpO1xuXHR9XG5cblx0cmV0dXJuIGRv
Y3VtZW50Lm5ld0VsZW1lbnQodGFnLCBwcm9wcyk7XG59O1xuXG5cbmlmIChCcm93c2VyLkVsZW1l
bnQpe1xuXHRFbGVtZW50LnByb3RvdHlwZSA9IEJyb3dzZXIuRWxlbWVudC5wcm90b3R5cGU7XG5c
dC8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdyYXBwaW5nLlxuXHRFbGVtZW50LnByb3RvdHlw
ZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9uKGZpcmVFdmVudCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9u
KHR5cGUsIGV2ZW50KXtcblx0XHRcdHJldHVybiBmaXJlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBl
dmVudCk7XG5cdFx0fTtcblx0fSkoRWxlbWVudC5wcm90b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxu
bmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJyb3IoZnVuY3Rpb24obmFtZSl7XG5cdGlm
IChBcnJheS5wcm90b3R5cGVbbmFtZV0pIHJldHVybjtcblxuXHR2YXIgb2JqID0ge307XG5cdG9i
altuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3VsdHMgPSBbXSwgYXJncyA9IGFyZ3Vt
ZW50cywgZWxlbWVudHMgPSB0cnVlO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSB0aGlzW2ldLCByZXN1bHQgPSBy
ZXN1bHRzW2ldID0gZWxlbWVudFtuYW1lXS5hcHBseShlbGVtZW50LCBhcmdzKTtcblx0XHRcdGVs
ZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5cGVPZihyZXN1bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0
fVxuXHRcdHJldHVybiAoZWxlbWVudHMpID8gbmV3IEVsZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0
cztcblx0fTtcblxuXHRFbGVtZW50cy5pbXBsZW1lbnQob2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dz
ZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucGFyZW50ID0gT2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJv
dG90eXBlID0ge1xuXHRcdCckY29uc3RydWN0b3InOiBFbGVtZW50LFxuXHRcdCckZmFtaWx5Jzog
RnVuY3Rpb24uY29udmVydCgnZWxlbWVudCcpLmhpZGUoKVxuXHR9O1xuXG5cdEVsZW1lbnQubWly
cm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdFx0RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0g
PSBtZXRob2Q7XG5cdH0pO1xufVxuXG5FbGVtZW50LkNvbnN0cnVjdG9ycyA9IHt9O1xuXG5cblxu
dmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUnLCBmdW5jdGlvbigpe1xuXHR2YXIgcGFyYW1z
ID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtcblx0XHRwcm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0
LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24ob2JqKXtcblx0XHRcdHJldHVybiAob2JqICE9IG51bGwp
O1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHByb3BzID0gcGFyYW1zLnByb3BlcnRpZXMgfHwge30s
IGlmcmFtZTtcblx0aWYgKHBhcmFtcy5pZnJhbWUpIGlmcmFtZSA9IGRvY3VtZW50LmlkKHBhcmFt
cy5pZnJhbWUpO1xuXHR2YXIgb25sb2FkID0gcHJvcHMub25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtc
blx0ZGVsZXRlIHByb3BzLm9ubG9hZDtcblx0cHJvcHMuaWQgPSBwcm9wcy5uYW1lID0gW3Byb3Bz
LmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUgPyAoaWZyYW1lLmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJ
RnJhbWVfJyArIFN0cmluZy51bmlxdWVJRCgpXS5waWNrKCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVt
ZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMpO1xuXG5cdHZhciBvbkxvYWQgPSBmdW5jdGlv
bigpe1xuXHRcdG9ubG9hZC5jYWxsKGlmcmFtZS5jb250ZW50V2luZG93KTtcblx0fTtcblxuXHRp
ZiAod2luZG93LmZyYW1lc1twcm9wcy5pZF0pIG9uTG9hZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRM
aXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG5cdHJldHVybiBpZnJhbWU7XG59KTtcblxudmFyIEVs
ZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0aW9uKG5vZGVzKXtcblx0aWYgKG5vZGVzICYm
IG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFyIHVuaXF1ZXMgPSB7fSwgbm9kZTtcblx0XHRmb3IgKHZh
ciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdHZhciB1aWQgPSBTbGljay51aWRP
Zihub2RlKTtcblx0XHRcdGlmICghdW5pcXVlc1t1aWRdKXtcblx0XHRcdFx0dW5pcXVlc1t1aWRd
ID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxu
fTtcblxuRWxlbWVudHMucHJvdG90eXBlID0ge2xlbmd0aDogMH07XG5FbGVtZW50cy5wYXJlbnQg
PSBBcnJheTtcblxubmV3IFR5cGUoJ0VsZW1lbnRzJywgRWxlbWVudHMpLmltcGxlbWVudCh7XG5c
blx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJpbmQpe1xuXHRcdGlmICghZmlsdGVyKSByZXR1
cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmZpbHRlcih0aGlzLCAodHlw
ZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4g
aXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRcdH0gOiBmaWx0ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0
KCksXG5cblx0cHVzaDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtc
blx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChp
dGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07XG5cdFx0fVxuXHRcdHJldHVybiAodGhpcy5sZW5n
dGggPSBsZW5ndGgpO1xuXHR9LnByb3RlY3QoKSxcblxuXHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xu
XHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50
c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgaXRlbXMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0
dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90
ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBuZXdFbGVtZW50cyA9IG5l
dyBFbGVtZW50cyh0aGlzKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRp
ZiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkpIG5ld0VsZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0
XHRcdGVsc2UgbmV3RWxlbWVudHMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ld0Vs
ZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24p
e1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKysp
IHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0
KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxl
dGUgdGhpc1stLXRoaXMubGVuZ3RoXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KClc
blxufSk7XG5cblxuXG4oZnVuY3Rpb24oKXtcblxuLy8gRkYsIElFXG52YXIgc3BsaWNlID0gQXJy
YXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9
O1xuXG5zcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpO1xuaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVt
ZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBsZW5ndGggPSB0aGlz
Lmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9IHNwbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xu
XHR3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1tsZW5ndGgtLV07XG5c
dHJldHVybiByZXN1bHQ7XG59LnByb3RlY3QoKSk7XG5cbkFycmF5LmZvckVhY2hNZXRob2QoZnVu
Y3Rpb24obWV0aG9kLCBuYW1lKXtcblx0RWxlbWVudHMuaW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7
XG59KTtcblxuQXJyYXkubWlycm9yKEVsZW1lbnRzKTtcblxuLyo8bHRJRTg+Ki9cbnZhciBjcmVh
dGVFbGVtZW50QWNjZXB0c0hUTUw7XG50cnkge1xuXHRjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwg
PSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlucHV0IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7
XG59IGNhdGNoIChlKXt9XG5cbnZhciBlc2NhcGVRdW90ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0
cmV0dXJuICgnJyArIGh0bWwpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywg
JyZxdW90OycpO1xufTtcbi8qPC9sdElFOD4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJ
RTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhU
TUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0
eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAn
I2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtc
blx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxu
RG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdFbGVtZW50OiBmdW5jdGlvbih0YWcsIHByb3Bz
KXtcblx0XHRpZiAocHJvcHMpe1xuXHRcdFx0aWYgKHByb3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJv
cHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXHRcdFx0aWYgKChwcm9wcy50eXBl
ID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PSAncmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9
PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7XG5cdFx0XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVk
cyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNoYW5naW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxl
bWVudFxuXHRcdFx0aWYgKCFjYW5DaGFuZ2VTdHlsZUhUTUwgJiYgdGFnID09ICdzdHlsZScpe1xu
XHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUn
KTtcblx0XHRcdFx0c3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2Nzcycp
O1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkgZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHRcdHJl
dHVybiB0aGlzLmlkKHN0eWxlRWxlbWVudCkuc2V0KHByb3BzKTtcblx0XHRcdH1cblx0XHRcdC8q
PC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJRTg+Ki8vLyBGaXggZm9yIHJlYWRvbmx5IG5hbWUgYW5k
IHR5cGUgcHJvcGVydGllcyBpbiBJRSA8IDhcblx0XHRcdGlmIChjcmVhdGVFbGVtZW50QWNjZXB0
c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAnPCcgKyB0YWc7XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1l
KSB0YWcgKz0gJyBuYW1lPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy5uYW1lKSArICdcIic7XG5c
dFx0XHRcdGlmIChwcm9wcy50eXBlKSB0YWcgKz0gJyB0eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhw
cm9wcy50eXBlKSArICdcIic7XG5cdFx0XHRcdHRhZyArPSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBw
cm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMudHlwZTtcblx0XHRcdH1cblx0XHRcdC8q
PC9sdElFOD4qL1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQo
dGFnKSkuc2V0KHByb3BzKTtcblx0fVxuXG59KTtcblxufSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5c
blNsaWNrLnVpZE9mKHdpbmRvdyk7XG5TbGljay51aWRPZihkb2N1bWVudCk7XG5cbkRvY3VtZW50
LmltcGxlbWVudCh7XG5cblx0bmV3VGV4dE5vZGU6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHJldHVy
biB0aGlzLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy53aW5kb3c7XG5cdH0sXG5cblx0aWQ6IChmdW5jdGlvbigpe1xu
XG5cdFx0dmFyIHR5cGVzID0ge1xuXG5cdFx0XHRzdHJpbmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gs
IGRvYyl7XG5cdFx0XHRcdGlkID0gU2xpY2suZmluZChkb2MsICcjJyArIGlkLnJlcGxhY2UoLyhc
XFcpL2csICdcXFxcJDEnKSk7XG5cdFx0XHRcdHJldHVybiAoaWQpID8gdHlwZXMuZWxlbWVudChp
ZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0XHR9LFxuXG5cdFx0XHRlbGVtZW50OiBmdW5jdGlvbihl
bCwgbm9jYXNoKXtcblx0XHRcdFx0U2xpY2sudWlkT2YoZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2Fz
aCAmJiAhZWwuJGZhbWlseSAmJiAhKC9eKD86b2JqZWN0fGVtYmVkKSQvaSkudGVzdChlbC50YWdO
YW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZpcmVFdmVudCA9IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0
XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBvciBlbHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwu
X2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdFx0XHRcdHJldHVybiBm
aXJlRXZlbnQodHlwZSwgZXZlbnQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0T2JqZWN0LmFw
cGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBl
bDtcblx0XHRcdH0sXG5cblx0XHRcdG9iamVjdDogZnVuY3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7
XG5cdFx0XHRcdGlmIChvYmoudG9FbGVtZW50KSByZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9F
bGVtZW50KGRvYyksIG5vY2FzaCk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5c
dFx0fTtcblxuXHRcdHR5cGVzLnRleHRub2RlID0gdHlwZXMud2hpdGVzcGFjZSA9IHR5cGVzLndp
bmRvdyA9IHR5cGVzLmRvY3VtZW50ID0gZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVy
bztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0
XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51bmlxdWVOdW1iZXIpIHJldHVybiBlbDtcblx0
XHRcdHZhciB0eXBlID0gdHlwZU9mKGVsKTtcblx0XHRcdHJldHVybiAodHlwZXNbdHlwZV0pID8g
dHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRvY3VtZW50KSA6IG51bGw7XG5cdFx0fTtc
blxuXHR9KSgpXG5cbn0pO1xuXG5pZiAod2luZG93LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVu
dCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7XG5cdHJldHVybiBkb2N1bWVudC5pZChlbCwgbmMsIHRo
aXMuZG9jdW1lbnQpO1xufSk7XG5cbldpbmRvdy5pbXBsZW1lbnQoe1xuXG5cdGdldERvY3VtZW50
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmRvY3VtZW50O1xuXHR9LFxuXG5cdGdldFdp
bmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuW0RvY3Vt
ZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRFbGVtZW50czogZnVu
Y3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNz
aW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9LFxuXG5cdGdldEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJl
c3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsIGV4cHJlc3Np
b24pKTtcblx0fVxuXG59KTtcblxudmFyIGNvbnRhaW5zID0ge2NvbnRhaW5zOiBmdW5jdGlvbihl
bGVtZW50KXtcblx0cmV0dXJuIFNsaWNrLmNvbnRhaW5zKHRoaXMsIGVsZW1lbnQpO1xufX07XG5c
bmlmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50LmltcGxlbWVudChjb250YWlucyk7XG5p
ZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxl
bWVudChjb250YWlucyk7XG5cblxuXG4vLyB0cmVlIHdhbGtpbmdcblxudmFyIGluamVjdENvbWJp
bmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjb21iaW5hdG9yKXtcblx0aWYgKCFleHByZXNz
aW9uKSByZXR1cm4gY29tYmluYXRvcjtcblxuXHRleHByZXNzaW9uID0gT2JqZWN0LmNsb25lKFNs
aWNrLnBhcnNlKGV4cHJlc3Npb24pKTtcblxuXHR2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9u
LmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpLS07KVxu
XHRcdGV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0b3IgPSBjb21iaW5hdG9yO1xuXG5cdHJldHVy
biBleHByZXNzaW9uO1xufTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXROZXh0OiAnficsXG5c
dGdldFByZXZpb3VzOiAnIX4nLFxuXHRnZXRQYXJlbnQ6ICchJ1xufSwgZnVuY3Rpb24oY29tYmlu
YXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHBy
ZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50KGluamVjdENvbWJpbmF0b3IoZXhw
cmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5PYmplY3QuZm9yRWFjaCh7XG5c
dGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0QWxsUHJldmlvdXM6ICchficsXG5cdGdldFNpYmxpbmdz
OiAnfn4nLFxuXHRnZXRDaGlsZHJlbjogJz4nLFxuXHRnZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0
aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVu
Y3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29t
YmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRnZXRGaXJzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0
dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJl
c3Npb24sICc+JykpWzBdKTtcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJp
bmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFzdCgpKTtcblx0fSxcblxuXHRnZXRXaW5kb3c6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC53aW5kb3c7XG5cdH0s
XG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1
bWVudDtcblx0fSxcblxuXHRnZXRFbGVtZW50QnlJZDogZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVy
biBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsICcjJyArICgnJyArIGlkKS5yZXBsYWNlKC8o
XFxXKS9nLCAnXFxcXCQxJykpKTtcblx0fSxcblxuXHRtYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lv
bil7XG5cdFx0cmV0dXJuICFleHByZXNzaW9uIHx8IFNsaWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Np
b24pO1xuXHR9XG5cbn0pO1xuXG5cblxuaWYgKHdpbmRvdy4kJCA9PSBudWxsKSBXaW5kb3cuaW1w
bGVtZW50KCckJCcsIGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGgg
PT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNr
LnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3RvciwgbmV3IEVsZW1lbnRzKTtcblx0XHRlbHNl
IGlmIChUeXBlLmlzRW51bWVyYWJsZShzZWxlY3RvcikpIHJldHVybiBuZXcgRWxlbWVudHMoc2Vs
ZWN0b3IpO1xuXHR9XG5cdHJldHVybiBuZXcgRWxlbWVudHMoYXJndW1lbnRzKTtcbn0pO1xuXG4v
LyBJbnNlcnRlcnNcblxudmFyIGluc2VydGVycyA9IHtcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNv
bnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5c
dFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50KTtcblx0
fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVu
dCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVm
b3JlKGNvbnRleHQsIGVsZW1lbnQubmV4dFNpYmxpbmcpO1xuXHR9LFxuXG5cdGJvdHRvbTogZnVu
Y3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZXh0
KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1l
bnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdH1cblxufTtc
blxuaW5zZXJ0ZXJzLmluc2lkZSA9IGluc2VydGVycy5ib3R0b207XG5cblxuXG4vLyBnZXRQcm9w
ZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZhciBwcm9wZXJ0eUdldHRlcnMgPSB7fSwgcHJvcGVydHlT
ZXR0ZXJzID0ge307XG5cbi8vIHByb3BlcnRpZXNcblxudmFyIHByb3BlcnRpZXMgPSB7fTtcbkFy
cmF5LmZvckVhY2goW1xuXHQndHlwZScsICd2YWx1ZScsICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNz
S2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5nJywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVC
b3JkZXInLCAncm93U3BhbicsICd0YWJJbmRleCcsICd1c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9w
ZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJvcGVydHkudG9Mb3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtc
bn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwgPSAnaW5uZXJIVE1MJztcbnByb3BlcnRpZXMudGV4dCA9
IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS50ZXh0Q29udGVudCA9PSBudWxsKSA/ICdp
bm5lclRleHQnOiAndGV4dENvbnRlbnQnO1xuXG5PYmplY3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBm
dW5jdGlvbihyZWFsLCBrZXkpe1xuXHRwcm9wZXJ0eVNldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5v
ZGUsIHZhbHVlKXtcblx0XHRub2RlW3JlYWxdID0gdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5R2V0
dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07
XG59KTtcblxuLyo8bHRJRTk+Ki9cbnByb3BlcnR5U2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7
XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcn
KSA9PSAnc3R5bGUnKSBub2RlLnNldCgnaHRtbCcsIHZhbHVlKTtcblx0XHRlbHNlIG5vZGVbcHJv
cGVydGllcy50ZXh0XSA9IHZhbHVlO1xuXHR9O1xufSkocHJvcGVydHlTZXR0ZXJzLnRleHQpO1xu
XG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9IChmdW5jdGlvbihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVu
Y3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgPyBu
b2RlLmlubmVySFRNTCA6IGdldHRlcihub2RlKTtcblx0fTtcbn0pKHByb3BlcnR5R2V0dGVycy50
ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4vLyBCb29sZWFuc1xuXG52YXIgYm9vbHMgPSBbXG5cdCdj
b21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tl
ZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFkT25seScsICdtdWx0aXBsZScsICdzZWxlY3RlZCcsICdu
b3Jlc2l6ZScsXG5cdCdkZWZlcicsICdkZWZhdWx0Q2hlY2tlZCcsICdhdXRvZm9jdXMnLCAnY29u
dHJvbHMnLCAnYXV0b3BsYXknLFxuXHQnbG9vcCdcbl07XG5cbnZhciBib29sZWFucyA9IHt9O1xu
QXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24oYm9vbCl7XG5cdHZhciBsb3dlciA9IGJvb2wu
dG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVhbnNbbG93ZXJdID0gYm9vbDtcblx0cHJvcGVydHlTZXR0
ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW2Jvb2xdID0gISF2
YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHJldHVybiAhIW5vZGVbYm9vbF07XG5cdH07XG59KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xu
XG5PYmplY3QuYXBwZW5kKHByb3BlcnR5U2V0dGVycywge1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9u
KG5vZGUsIHZhbHVlKXtcblx0XHQoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFt
ZSA9ICh2YWx1ZSB8fCAnJykgOiBub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5c
dH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2h0bWxGb3InIGlu
IG5vZGUpID8gbm9kZS5odG1sRm9yID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnZm9yJywg
dmFsdWUpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQo
bm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmli
dXRlKCdzdHlsZScsIHZhbHVlKTtcblx0fSxcblxuXHQndmFsdWUnOiBmdW5jdGlvbihub2RlLCB2
YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9ICh2YWx1ZSAhPSBudWxsKSA/IHZhbHVlIDogJyc7XG5c
dH1cblxufSk7XG5cbnByb3BlcnR5R2V0dGVyc1snY2xhc3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xu
XHRyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6
IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xufTtcblxuLyogPHdlYmtpdD4gKi9cbnZhciBl
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuLy8gSUUgc2V0cyB0eXBlIGFz
IHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRyeSB7IGVsLnR5cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAo
ZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVu
Y3Rpb24obm9kZSwgdmFsdWUpe1xuXHRub2RlLnNldEF0dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtc
bn07XG5lbCA9IG51bGw7XG4vKiA8L3dlYmtpdD4gKi9cblxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+
Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIg
Y2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRk
aXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAh
IWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xu
Lyo8L2x0SUU5PiovXG5cbnZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0
JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwgaHRtbDVJbnB1dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5p
bnB1dC52YWx1ZSA9ICd0JztcbmlucHV0LnR5cGUgPSAnc3VibWl0JztcbnZvbGF0aWxlSW5wdXRW
YWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0JztcblxuLy8gIzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZh
bGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlpbmcgdG8gdXNlIGh0bWw1IGlucHV0IHR5cGVzXG50cnkg
e1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xuXHRpbnB1dC50eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJ
bnB1dFN1cHBvcnQgPSBpbnB1dC50eXBlID09ICdlbWFpbCc7XG59IGNhdGNoIChlKXt9XG5cbmlu
cHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0aWxlSW5wdXRWYWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBv
cnQpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdHlwZSl7XG5cdHRyeSB7
XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52YWx1ZTtcblx0XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRc
dG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBjYXRjaCAoZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4v
KiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi9cblxuLyogPGx0SUU5PiAqL1xudmFyIHBvbGx1
dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRpdil7XG5cdGRpdi5yYW5kb20gPSAnYXR0cmli
dXRlJztcblx0cmV0dXJuIChkaXYuZ2V0QXR0cmlidXRlKCdyYW5kb20nKSA9PSAnYXR0cmlidXRl
Jyk7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1
ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0dGVzdC5pbm5lckhUTUwgPSAnPG9iamVjdD48cGFyYW0g
bmFtZT1cInNob3VsZF9maXhcIiB2YWx1ZT1cInRoZSB1bmtub3duXCIgLz48L29iamVjdD4nO1xu
XHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUodHJ1ZSkuZmlyc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0
aCAhPSAxO1xufSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuLyogPC9sdElFOT4g
Ki9cblxudmFyIGhhc0NsYXNzTGlzdCA9ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyku
Y2xhc3NMaXN0O1xuXG52YXIgY2xhc3NlcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBj
bGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJykuY2xlYW4oKS5zcGxpdCgnICcpLCB1bmlxdWVz
ID0ge307XG5cdHJldHVybiBjbGFzc05hbWVzLmZpbHRlcihmdW5jdGlvbihjbGFzc05hbWUpe1xu
XHRcdGlmIChjbGFzc05hbWUgIT09ICcnICYmICF1bmlxdWVzW2NsYXNzTmFtZV0pIHJldHVybiB1
bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7XG5cdH0pO1xufTtcblxudmFyIGFkZFRvQ2xh
c3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChuYW1lKTtcbn07
XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xh
c3NMaXN0LnJlbW92ZShuYW1lKTtcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZXRQ
cm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0
eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNl
dHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qIDxsdElFOT4gKi9cblx0
XHRcdHZhciBhdHRyaWJ1dGVBbGxvd0xpc3Q7XG5cdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1
dGUpIGF0dHJpYnV0ZUFsbG93TGlzdCA9IHRoaXMucmV0cmlldmUoJyRhdHRyaWJ1dGVBbGxvd0xp
c3QnLCB7fSk7XG5cdFx0XHQvKiA8L2x0SUU5PiAqL1xuXG5cdFx0XHRpZiAodmFsdWUgPT0gbnVs
bCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJ
RTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0
ZUFsbG93TGlzdFtuYW1lXTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH0gZWxzZSB7
XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xuXHRcdFx0XHQv
KiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRl
QWxsb3dMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH1c
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0UHJvcGVydGllczogZnVuY3Rp
b24oYXR0cmlidXRlcyl7XG5cdFx0Zm9yICh2YXIgYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRo
aXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2
YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYg
KGdldHRlcikgcmV0dXJuIGdldHRlcih0aGlzKTtcblx0XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYg
KHBvbGx1dGVzR2V0QXR0cmlidXRlKXtcblx0XHRcdHZhciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1
dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVBbGxvd0xpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmli
dXRlQWxsb3dMaXN0Jywge30pO1xuXHRcdFx0aWYgKCFhdHRyKSByZXR1cm4gbnVsbDtcblx0XHRc
dGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSl7XG5cdFx0XHRc
dHZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MO1xuXHRcdFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBv
cGVuaW5nIHRhZyBhbmQgZmluZCBtZW50aW9uIG9mIGF0dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlm
IChvdXRlci5zdWJzdHIoMCwgb3V0ZXIuc2VhcmNoKC9cXC8/WydcIl0/Pig/IVtePF0qPFsnXCJd
KS8pKS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZUFs
bG93TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qIDwvbHRJRTk+ICov
XG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0dHJpYnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRy
ZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNrLmhhc0F0dHJpYnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxs
IDogcmVzdWx0O1xuXHR9LFxuXG5cdGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRo
aXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0ZShhcmdzKTtcblx0fSxcblxuXHRyZW1vdmVQ
cm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobmFt
ZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0XHRB
cnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1vdmVQcm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFy
IHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBw
cm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdGhpcy5zZXRQ
cm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1
bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9w
XTtcblx0XHRyZXR1cm4gKHByb3BlcnR5ICYmIHByb3BlcnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQu
YXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5KHByb3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVy
KCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1l
bnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuZXJhc2UpID8g
cHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0aGlzLnJlbW92ZVByb3BlcnR5KHByb3ApO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5j
dGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFz
c05hbWUpO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0
aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZGRDbGFzczog
aGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNzTmFt
ZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0g
OiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NlcyhjbGFz
c05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSkuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05h
bWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKHJlbW92ZUZyb21DbGFzc0xpc3Qs
IHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0
XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXModGhpcy5jbGFzc05hbWUpO1xuXHRcdGNsYXNzZXMo
Y2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNzTmFtZXMuZXJhc2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRo
aXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlm
IChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0
cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFkZENsYXNzKGNsYXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNs
YXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRvcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBh
cmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRz
KSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggPiAxKSBwYXJlbnQg
PSBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1
bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1ZSk7XG5cdFx0XHRpZiAoZWxlbWVudCkgcGFyZW50LmFw
cGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblxuXHRcdGlmIChmcmFnbWVudCkgdGhpcy5hcHBl
bmRDaGlsZChmcmFnbWVudCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhcHBlbmRU
ZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7XG5cdFx0cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdl
dERvY3VtZW50KCkubmV3VGV4dE5vZGUodGV4dCksIHdoZXJlKTtcblx0fSxcblxuXHRncmFiOiBm
dW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9j
dW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRp
bmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0
b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwg
dHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcywgZWwpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBzOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGVs
ID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdHJldHVybiB0aGlzLnJlcGxhY2VzKGVsKS5n
cmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5cblx0Z2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkgMy4yLjFcblx0XHRyZXR1cm4gbmV3IEVsZW1l
bnRzKEFycmF5LmNvbnZlcnQodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtc
blx0XHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQ7XG5cdFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVl
cnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhp
cy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVs
KXtcblx0XHRcdHZhciB0eXBlID0gZWwudHlwZTtcblx0XHRcdGlmICghZWwubmFtZSB8fCBlbC5k
aXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8IHR5cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09
ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJldHVybjtcblxuXHRcdFx0dmFyIHZhbHVlID0g
KGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8gZWwuZ2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rp
b24ob3B0KXtcblx0XHRcdFx0Ly8gSUVcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmlkKG9wdCku
Z2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkgOiAoKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdj
aGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51bGwgOiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0
XHRcdEFycmF5LmNvbnZlcnQodmFsdWUpLmVhY2goZnVuY3Rpb24odmFsKXtcblx0XHRcdFx0aWYg
KHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29t
cG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO1xuXHRcdFx0
fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59
KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5cbnZhciBhcHBlbmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9y
ZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0ZXI6ICdhZnRlckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9y
ZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVnaW4nLFxuXHRpbnNpZGU6ICdiZWZvcmVFbmQnXG59O1xu
XG5FbGVtZW50LmltcGxlbWVudCgnYXBwZW5kSFRNTCcsICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBp
biBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkgPyBmdW5jdGlvbihodG1sLCB3aGVyZSl7
XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRIVE1MKGFwcGVuZEluc2VydGVyc1t3aGVyZSB8fCAnYm90
dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4gdGhpcztcbn0gOiBmdW5jdGlvbihodG1sLCB3aGVyZSl7
XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2RpdicsIHtodG1sOiBodG1sfSksXG5cdFx0Y2hp
bGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsXG5cdFx0ZnJhZ21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7
XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0dXJuIHRoaXM7XG5cdGlmIChjaGlsZHJlbi5sZW5ndGgg
PiAxKXtcblx0XHRmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtc
blx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZHJlbltpXSk7XG5cdFx0fVxuXHR9XG5cblx0
aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShmcmFnbWVudCwgdGhpcyk7XG5cdHJldHVybiB0
aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0ZWQgPSB7fSwgc3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0
ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0dXJuIChzdG9yYWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlk
XSA9IHt9KSk7XG59O1xuXG52YXIgY2xlYW4gPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIHVpZCA9
IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRpZiAoaXRlbS5yZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3Zl
RXZlbnRzKCk7XG5cdGlmIChpdGVtLmNsZWFyQXR0cmlidXRlcykgaXRlbS5jbGVhckF0dHJpYnV0
ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxsKXtcblx0XHRkZWxldGUgY29sbGVjdGVkW3VpZF07XG5c
dFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtcblx0fVxuXHRyZXR1cm4gaXRlbTtcbn07XG5cbnZhciBm
b3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywgb3B0aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJl
YTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRkZXN0cm95OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBjaGlsZHJlbiA9IGNsZWFuKHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCcqJyk7XG5cdFx0QXJyYXkuZWFjaChjaGlsZHJlbiwgY2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlz
cG9zZSh0aGlzKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24o
KXtcblx0XHRBcnJheS5jb252ZXJ0KHRoaXMuY2hpbGROb2RlcykuZWFjaChFbGVtZW50LmRpc3Bv
c2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuICh0aGlzLnBhcmVudE5vZGUpID8gdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KHRoaXMpIDogdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oY29udGVudHMsIGtlZXBp
ZCl7XG5cdFx0Y29udGVudHMgPSBjb250ZW50cyAhPT0gZmFsc2U7XG5cdFx0dmFyIGNsb25lID0g
dGhpcy5jbG9uZU5vZGUoY29udGVudHMpLCBjZSA9IFtjbG9uZV0sIHRlID0gW3RoaXNdLCBpO1xu
XG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0XHRcdGNlLmFwcGVuZChBcnJheS5jb252ZXJ0KGNsb25l
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHRcdHRlLmFwcGVuZChBcnJheS5jb252
ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdH1cblxuXHRcdGZvciAo
aSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHR2YXIgbm9kZSA9IGNlW2ldLCBlbGVtZW50ID0g
dGVbaV07XG5cdFx0XHRpZiAoIWtlZXBpZCkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5c
dFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKG5vZGUuY2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRc
dFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0XHRcdFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMo
ZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKCd1bmlxdWVOdW1iZXInKTtc
blx0XHRcdFx0aWYgKG5vZGUub3B0aW9ucyl7XG5cdFx0XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRp
b25zLCBlbyA9IGVsZW1lbnQub3B0aW9ucztcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gbm8ubGVu
Z3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVvW2pdLnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5c
dFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZhciBwcm9wID0gZm9ybVByb3BzW2Vs
ZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRcdGlmIChwcm9wICYmIGVsZW1lbnRb
cHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVtZW50W3Byb3BdO1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5
PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVnKXtcblx0XHRcdHZhciBjbyA9IGNsb25lLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdvYmplY3QnKSwgdG8gPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdv
YmplY3QnKTtcblx0XHRcdGZvciAoaSA9IGNvLmxlbmd0aDsgaS0tOykgY29baV0ub3V0ZXJIVE1M
ID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRcdH1cblx0XHQvKjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4g
ZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9XG5cbn0pO1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1
bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5
cGUsIGZuKXtcblx0XHRpZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0ZWRbU2xpY2sudWlkT2YodGhpcyldID0gdGhpcztcblx0
XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcikgdGhpcy5hZGRFdmVudExpc3RlbmVy
KHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdv
bicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVu
ZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAodGhpcy5yZW1vdmVFdmVudExpc3RlbmVy
KSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0
XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRyZXRyaWV2ZTogZnVuY3Rpb24ocHJvcGVydHksIGRmbHQpe1xuXHRcdHZh
ciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVy
dHldO1xuXHRcdGlmIChkZmx0ICE9IG51bGwgJiYgcHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFn
ZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRcdHJldHVybiBwcm9wICE9IG51bGwgPyBwcm9wIDogbnVs
bDtcblx0fSxcblxuXHRzdG9yZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHR2YXIg
c3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0g
PSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbGltaW5hdGU6IGZ1bmN0aW9u
KHByb3BlcnR5KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5c
dFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0p
O1xuXG4vKjxsdElFOT4qL1xuaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2MgPSBmdW5jdGlvbigpe1xuXHRcdE9iamVjdC5lYWNoKGNv
bGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlmICh3aW5kb3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RH
YXJiYWdlKCk7XG5cdFx0d2luZG93LnJlbW92ZUxpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07
XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xufVxuLyo8L2x0SUU5PiovXG5c
bkVsZW1lbnQuUHJvcGVydGllcyA9IHt9O1xuXG5cblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxl
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24oc3R5bGUpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9
IHN0eWxlO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5zdHls
ZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc3R5bGUu
Y3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy50YWcgPSB7XG5c
blx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2Uo
KTtcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1
bmN0aW9uKGh0bWwpe1xuXHRcdGlmIChodG1sID09IG51bGwpIGh0bWwgPSAnJztcblx0XHRlbHNl
IGlmICh0eXBlT2YoaHRtbCkgPT0gJ2FycmF5JykgaHRtbCA9IGh0bWwuam9pbignJyk7XG5cblx0
XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0aGlzLnN0eWxlU2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxl
SFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQgPSBodG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5
PiovdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0
XHR0aGlzLnNldCgnaHRtbCcsICcnKTtcblx0fVxuXG59O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVs
ZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJ
bm5lckhUTUwgPSB0cnVlO1xuXG4vKjxsdElFOT4qL1xuLy8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0
dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5lcnNoaXYvXG52YXIgZGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgZnJhZ21lbnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxu
YXY+PC9uYXY+JztcbnN1cHBvcnRzSFRNTDVFbGVtZW50cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5n
dGggPT0gMSk7XG5pZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cdHZhciB0YWdzID0gJ2Fi
YnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9u
IGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jl
c3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8nLnNwbGl0KCcgJyk7XG5cdGZyYWdtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBsID0gdGFncy5sZW5ndGg7XG5cdHdo
aWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1lbnQodGFnc1tsXSk7XG59XG5kaXYgPSBudWxs
O1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5zdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gRnVu
Y3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHR2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCd0YWJsZScpO1xuXHR0YWJsZS5pbm5lckhUTUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+
Jztcblx0cmV0dXJuIHRydWU7XG59KTtcblxuLyo8bHRGRjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAnPHRkPjwvdGQ+JztcbnRyLmlubmVySFRNTCA9
IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJIVE1MID0gKHRyLmlubmVySFRNTCA9PSBodG1sKTtcbnRy
ID0gbnVsbDtcbi8qPC9sdEZGND4qL1xuXG5pZiAoIXN1cHBvcnRzVGFibGVJbm5lckhUTUwgfHwg
IXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cblx0RWxl
bWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0ID0gKGZ1bmN0aW9uKHNldCl7XG5cblx0XHR2YXIgdHJh
bnNsYXRpb25zID0ge1xuXHRcdFx0dGFibGU6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddLFxu
XHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxlY3Q+JywgJzwvc2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6
IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuXHRcdFx0dHI6IFsz
LCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddXG5cdFx0fTtc
blxuXHRcdHRyYW5zbGF0aW9ucy50aGVhZCA9IHRyYW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0
aW9ucy50Ym9keTtcblxuXHRcdHJldHVybiBmdW5jdGlvbihodG1sKXtcblxuXHRcdFx0Lyo8bHRJ
RTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQpIHJldHVybiBzZXQuY2FsbCh0aGlzLCBo
dG1sKTtcblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNb
dGhpcy5nZXQoJ3RhZycpXTtcblx0XHRcdGlmICghd3JhcCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1l
bnRzKSB3cmFwID0gWzAsICcnLCAnJ107XG5cdFx0XHRpZiAoIXdyYXApIHJldHVybiBzZXQuY2Fs
bCh0aGlzLCBodG1sKTtcblxuXHRcdFx0dmFyIGxldmVsID0gd3JhcFswXSwgd3JhcHBlciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0YXJnZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYg
KCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xu
XHRcdFx0d3JhcHBlci5pbm5lckhUTUwgPSBbd3JhcFsxXSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRl
bigpLmpvaW4oJycpO1xuXHRcdFx0d2hpbGUgKGxldmVsLS0pIHRhcmdldCA9IHRhcmdldC5maXJz
dENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0eSgpLmFkb3B0KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0
XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5yZW1vdmVDaGlsZCh3cmFw
cGVyKTtcblx0XHRcdHdyYXBwZXIgPSBudWxsO1xuXHRcdH07XG5cblx0fSkoRWxlbWVudC5Qcm9w
ZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8qPC9JRT4qL1xuXG4vKjxsdElFOT4qL1xudmFyIHRlc3RG
b3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xudGVzdEZvcm0uaW5uZXJIVE1M
ID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+PC9zZWxlY3Q+JztcblxuaWYgKHRlc3RGb3Jt
LmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVtZW50LlByb3BlcnRpZXMudmFsdWUgPSB7XG5c
blx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtc
blx0XHRpZiAodGFnICE9ICdzZWxlY3QnKSByZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUn
LCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLmdldEVsZW1lbnRzKCdvcHRpb24nKTtc
blx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRp
b25zLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBvcHRpb24gPSBvcHRpb25zW2ldLFxuXHRcdFx0
XHRhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlv
blZhbHVlID0gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9u
LmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9w
dGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgb3B0aW9uID0gdGhpcywgdGFnID0gb3B0aW9uLmdldCgndGFnJyk7XG5cblx0XHRp
ZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAnb3B0aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJv
cGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRpZiAodGFnID09ICdzZWxlY3QnICYmICEob3B0aW9uID0g
b3B0aW9uLmdldFNlbGVjdGVkKClbMF0pKSByZXR1cm4gJyc7XG5cblx0XHR2YXIgYXR0ciA9IG9w
dGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpO1xuXHRcdHJldHVybiAoYXR0ciAmJiBhdHRy
LnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxu
fTtcbnRlc3RGb3JtID0gbnVsbDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuaWYgKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQu
UHJvcGVydGllcy5pZCA9IHtcblx0c2V0OiBmdW5jdGlvbihpZCl7XG5cdFx0dGhpcy5pZCA9IHRo
aXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgbnVsbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9
ICcnO1xuXHR9XG59O1xuLyo8L0lFPiovXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRXZl
bnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBFdmVudCBUeXBlLCB0byBtYWtlIHRoZSBl
dmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwgQXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcs
IE9iamVjdF1cblxucHJvdmlkZXM6IEV2ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBfa2V5cyA9IHt9O1xudmFyIG5vcm1hbGl6ZVdoZWVsU3BlZWQgPSBmdW5jdGlvbihldmVu
dCl7XG5cdHZhciBub3JtYWxpemVkO1xuXHRpZiAoZXZlbnQud2hlZWxEZWx0YSl7XG5cdFx0bm9y
bWFsaXplZCA9IGV2ZW50LndoZWVsRGVsdGEgJSAxMjAgPT0gMCA/IGV2ZW50LndoZWVsRGVsdGEg
LyAxMjAgOiBldmVudC53aGVlbERlbHRhIC8gMTI7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ft
b3VudCA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRhaWwgfHwgMDtcblx0XHRub3JtYWxpemVk
ID0gLShyYXdBbW91bnQgJSAzID09IDAgPyByYXdBbW91bnQgLyAzIDogcmF3QW1vdW50ICogMTAp
O1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVkO1xufTtcblxudmFyIERPTUV2ZW50ID0gdGhpcy5E
T01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcsIGZ1bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRp
ZiAoIXdpbikgd2luID0gd2luZG93O1xuXHRldmVudCA9IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0
aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2ZW50O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7
XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1ZTtcblx0dGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5
O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVudC5jdHJsS2V5O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFs
dEtleTtcblx0dGhpcy5tZXRhID0gZXZlbnQubWV0YUtleTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5
cGUgPSBldmVudC50eXBlO1xuXHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNy
Y0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdl
dCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHR0aGlzLnRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdl
dCk7XG5cblx0aWYgKHR5cGUuaW5kZXhPZigna2V5JykgPT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0
aGlzLmNvZGUgPSAoZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlz
LnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykgdGhpcy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0
XHRpZiAodHlwZSA9PSAna2V5ZG93bicgfHwgdHlwZSA9PSAna2V5dXAnKXtcblx0XHRcdGlmIChj
b2RlID4gMTExICYmIGNvZGUgPCAxMjQpIHRoaXMua2V5ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xu
XHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1ICYmIGNvZGUgPCAxMDYpIHRoaXMua2V5ID0gY29kZSAt
IDk2O1xuXHRcdH1cblx0XHRpZiAodGhpcy5rZXkgPT0gbnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAn
Y2xpY2snIHx8IHR5cGUgPT0gJ2RibGNsaWNrJyB8fCB0eXBlID09ICdjb250ZXh0bWVudScgfHwg
dHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4
T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0dmFyIGRvYyA9IHdpbi5kb2N1bWVudDtcblx0XHRkb2Mg
PSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBk
b2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRcdHRoaXMucGFnZSA9IHtcblx0XHRcdHg6IChldmVudC5w
YWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCArIGRvYy5zY3JvbGxM
ZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgOiBldmVu
dC5jbGllbnRZICsgZG9jLnNjcm9sbFRvcFxuXHRcdH07XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5c
dFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBldmVudC5wYWdlWCAtIHdpbi5wYWdlWE9m
ZnNldCA6IGV2ZW50LmNsaWVudFgsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBl
dmVudC5wYWdlWSAtIHdpbi5wYWdlWU9mZnNldCA6IGV2ZW50LmNsaWVudFlcblx0XHR9O1xuXHRc
dGlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUg
PT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0gbm9ybWFsaXplV2hlZWxTcGVlZChldmVudCk7
XG5cdFx0dGhpcy5yaWdodENsaWNrID0gKGV2ZW50LndoaWNoID09IDMgfHwgZXZlbnQuYnV0dG9u
ID09IDIpO1xuXHRcdGlmICh0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0
JyB8fCB0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0eXBlID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0
XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2Vl
bnRlcic7XG5cdFx0XHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRb
KG92ZXJUYXJnZXQgPyAnZnJvbScgOiAndG8nKSArICdFbGVtZW50J107XG5cdFx0XHR3aGlsZSAo
cmVsYXRlZCAmJiByZWxhdGVkLm5vZGVUeXBlID09IDMpIHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVu
dE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBkb2N1bWVudC5pZChyZWxhdGVkKTtc
blx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZS5pbmRleE9mKCd0b3VjaCcpID09IDAgfHwgdHlwZS5p
bmRleE9mKCdnZXN0dXJlJykgPT0gMCl7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0
aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBldmVudC5zY2FsZTtcblx0XHR0aGlzLnRhcmdldFRvdWNo
ZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXHRcdHRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVu
dC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2YXIgdG91Y2hlcyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50
LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYgdG91Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91
Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0dGhpcy5wYWdlID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0
b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlzLmNsaWVudCA9IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0
b3VjaC5jbGllbnRZfTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNs
aWVudCA9IHt9O1xuXHRpZiAoIXRoaXMucGFnZSkgdGhpcy5wYWdlID0ge307XG59KTtcblxuRE9N
RXZlbnQuaW1wbGVtZW50KHtcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH0sXG5cblx0c3RvcFByb3Bh
Z2F0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbikg
dGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2Vs
QnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcmV2ZW50RGVmYXVs
dDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5l
dmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9
IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5ET01FdmVudC5kZWZpbmVL
ZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkpe1xuXHRfa2V5c1tjb2RlXSA9IGtleTtcblx0cmV0dXJu
IHRoaXM7XG59O1xuXG5ET01FdmVudC5kZWZpbmVLZXlzID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92
ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5ET01FdmVudC5kZWZpbmVLZXlzKHtcblx0JzM4JzogJ3Vw
JywgJzQwJzogJ2Rvd24nLCAnMzcnOiAnbGVmdCcsICczOSc6ICdyaWdodCcsXG5cdCcyNyc6ICdl
c2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNrc3BhY2UnLCAnOSc6ICd0YWInLFxuXHQnNDYn
OiAnZGVsZXRlJywgJzEzJzogJ2VudGVyJ1xufSk7XG5cbn0pKCk7XG5cblxuXG5cblxuLypcbi0t
LVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBFbGVtZW50
IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBldmVudHMuIFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVz
IG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgY3VzdG9tIEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNl
c3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1l
bnQsIEV2ZW50XVxuXG5wcm92aWRlczogRWxlbWVudC5FdmVudFxuXG4uLi5cbiovXG5cbihmdW5j
dGlvbigpe1xuXG5FbGVtZW50LlByb3BlcnRpZXMuZXZlbnRzID0ge3NldDogZnVuY3Rpb24oZXZl
bnRzKXtcblx0dGhpcy5hZGRFdmVudHMoZXZlbnRzKTtcbn19O1xuXG5bRWxlbWVudCwgV2luZG93
LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9u
KHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJywge30p
O1xuXHRcdGlmICghZXZlbnRzW3R5cGVdKSBldmVudHNbdHlwZV0gPSB7a2V5czogW10sIHZhbHVl
czogW119O1xuXHRcdGlmIChldmVudHNbdHlwZV0ua2V5cy5jb250YWlucyhmbikpIHJldHVybiB0
aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLnB1c2goZm4pO1xuXHRcdHZhciByZWFsVHlwZSA9
IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRp
dGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRp
ZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0
XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHRcdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0
eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVl
O1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9
IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxu
XHRcdHZhciBkZWZuID0gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmbi5jYWxsKHNlbGYpO1xu
XHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2ZW50ID0gRWxlbWVudC5OYXRpdmVFdmVudHNbcmVhbFR5
cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVudCl7XG5cdFx0XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7
XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcg
RE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0V2luZG93KCkpO1xuXHRcdFx0XHRcdGlmIChjb25kaXRp
b24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNlKSBldmVudC5zdG9wKCk7XG5cdFx0XHRcdH07
XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkZExpc3RlbmVyKHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVu
dHNbMl0pO1xuXHRcdH1cblx0XHRldmVudHNbdHlwZV0udmFsdWVzLnB1c2goZGVmbik7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtc
blx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVu
dHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGxpc3QgPSBldmVudHNb
dHlwZV07XG5cdFx0dmFyIGluZGV4ID0gbGlzdC5rZXlzLmluZGV4T2YoZm4pO1xuXHRcdGlmIChp
bmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIHZhbHVlID0gbGlzdC52YWx1ZXNbaW5k
ZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LmtleXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVl
c1tpbmRleF07XG5cdFx0dmFyIGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlm
IChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vblJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNh
bGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rp
b24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0
dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5
cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1
bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgZXZlbnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2
ZW50KGV2ZW50LCBldmVudHNbZXZlbnRdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRy
ZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5
cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRo
aXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xu
XHRcdH1cblx0XHR2YXIgYXR0YWNoZWQgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRp
ZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3Ig
KHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3ZlRXZlbnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5l
bGltaW5hdGUoJ2V2ZW50cycpO1xuXHRcdH0gZWxzZSBpZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5c
dFx0XHRhdHRhY2hlZFtldmVudHNdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRo
aXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0
ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRm
aXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR2YXIgZXZlbnRzID0g
dGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBl
XSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cblx0XHRl
dmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4u
ZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdz
KTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZUV2ZW50
czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7XG5cdFx0ZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pO1xu
XHRcdHZhciBldmVudHMgPSBmcm9tLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50
cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCF0eXBlKXtcblx0XHRcdGZvciAodmFyIGV2ZW50VHlw
ZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJvbSwgZXZlbnRUeXBlKTtcblx0XHR9IGVs
c2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5cdFx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0
aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5hZGRFdmVudCh0eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlz
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuTmF0aXZl
RXZlbnRzID0ge1xuXHRjbGljazogMiwgZGJsY2xpY2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93
bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3
aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8vbW91c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAy
LCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxlY3RzdGFydDogMiwgc2VsZWN0ZW5kOiAy
LCAvL21vdXNlIG1vdmVtZW50XG5cdGtleWRvd246IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwg
Ly9rZXlib2FyZFxuXHRvcmllbnRhdGlvbmNoYW5nZTogMiwgLy8gbW9iaWxlXG5cdHRvdWNoc3Rh
cnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6IDIsIHRvdWNoY2FuY2VsOiAyLCAvLyB0b3Vj
aFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVjaGFuZ2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8v
IGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJsdXI6IDIsIGNoYW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVj
dDogMiwgc3VibWl0OiAyLCBwYXN0ZTogMiwgaW5wdXQ6IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRs
b2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9hZDogMiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBE
T01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRlY2hhbmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNo
Y2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNob3c6IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0
b3J5XG5cdGVycm9yOiAxLCBhYm9ydDogMSwgc2Nyb2xsOiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xu
fTtcblxuRWxlbWVudC5FdmVudHMgPSB7XG5cdG1vdXNld2hlZWw6IHtcblx0XHRiYXNlOiAnb253
aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hlZWwnIDogJ29ubW91c2V3aGVlbCcgaW4gZG9jdW1lbnQg
PyAnbW91c2V3aGVlbCcgOiAnRE9NTW91c2VTY3JvbGwnXG5cdH1cbn07XG5cbnZhciBjaGVjayA9
IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xu
XHRpZiAocmVsYXRlZCA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1
cm4gZmFsc2U7XG5cdHJldHVybiAocmVsYXRlZCAhPSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9
ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9jdW1lbnQnICYmICF0aGlzLmNvbnRhaW5zKHJl
bGF0ZWQpKTtcbn07XG5cbmlmICgnb25tb3VzZWVudGVyJyBpbiBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWVudGVyID0gRWxlbWVudC5OYXRp
dmVFdmVudHMubW91c2VsZWF2ZSA9IDI7XG5cdEVsZW1lbnQuTW91c2VlbnRlckNoZWNrID0gY2hl
Y2s7XG59IGVsc2Uge1xuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWVudGVyID0ge1xuXHRcdGJhc2U6
ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcblxuXHRFbGVtZW50LkV2
ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9u
OiBjaGVja1xuXHR9O1xufVxuXG4vKjxsdElFOT4qL1xuaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLnByb3BlcnR5Y2hhbmdlID0gMjtcblx0RWxl
bWVudC5FdmVudHMuY2hhbmdlID0ge1xuXHRcdGJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIg
dHlwZSA9IHRoaXMudHlwZTtcblx0XHRcdHJldHVybiAodGhpcy5nZXQoJ3RhZycpID09ICdpbnB1
dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0
eWNoYW5nZScgOiAnY2hhbmdlJztcblx0XHR9LFxuXHRcdGNvbmRpdGlvbjogZnVuY3Rpb24oZXZl
bnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUgIT0gJ3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVu
dC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0gJ2NoZWNrZWQnO1xuXHRcdH1cblx0fTtcbn1cbi8qPC9s
dElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRlbGVnYXRp
b25cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBp
bmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgZm9yIG1vcmUgZWZmaWNpZW50IGV2ZW50IG1hbmFn
ZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1l
bnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5c
bihmdW5jdGlvbigpe1xuXG52YXIgZXZlbnRMaXN0ZW5lclN1cHBvcnQgPSAhIXdpbmRvdy5hZGRF
dmVudExpc3RlbmVyO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c2luID0gRWxlbWVudC5O
YXRpdmVFdmVudHMuZm9jdXNvdXQgPSAyO1xuXG52YXIgYnViYmxlVXAgPSBmdW5jdGlvbihzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAh
PSBzZWxmKXtcblx0XHRpZiAobWF0Y2godGFyZ2V0LCBldmVudCkpIHJldHVybiBmbi5jYWxsKHRh
cmdldCwgZXZlbnQsIHRhcmdldCk7XG5cdFx0dGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBh
cmVudE5vZGUpO1xuXHR9XG59O1xuXG52YXIgbWFwID0ge1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0
YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVj
a1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25k
aXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5cdH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFz
ZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3VwcG9ydCA/ICcnIDogJ2luJyksXG5cdFx0Y2Fw
dHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVyOiB7XG5cdFx0YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBv
cnQgPyAnYmx1cicgOiAnZm9jdXNvdXQnLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fVxufTtcblxu
Lyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0gJyRkZWxlZ2F0aW9uOic7XG52YXIgZm9ybU9ic2VydmVy
ID0gZnVuY3Rpb24odHlwZSl7XG5cblx0cmV0dXJuIHtcblxuXHRcdGJhc2U6ICdmb2N1c2luJyxc
blxuXHRcdHJlbW92ZTogZnVuY3Rpb24oc2VsZiwgdWlkKXtcblx0XHRcdHZhciBsaXN0ID0gc2Vs
Zi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSlbdWlkXTtcblx0XHRcdGlm
IChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFyIGkgPSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0t
Oyl7XG5cdFx0XHRcdC8vIHRoZSBmb3JtIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3
b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQvLyByZW1vdmVFdmVudCBtZXRob2QgYW55bW9yZS4gSW4g
dGhhdCBjYXNlIHRoZSBldmVudCB3YXNcblx0XHRcdFx0Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRc
dFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVF
dmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGxpc3Rlbjog
ZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFy
IGZvcm0gPSAodGFyZ2V0LmdldCgndGFnJykgPT0gJ2Zvcm0nKSA/IHRhcmdldCA6IGV2ZW50LnRh
cmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtcblx0XHRcdGlmICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0
XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMn
LCB7fSksXG5cdFx0XHRcdGxpc3RlbmVyID0gbGlzdGVuZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwg
Zm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1zID0gbGlzdGVuZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVy
LmZucztcblxuXHRcdFx0aWYgKGZvcm1zLmluZGV4T2YoZm9ybSkgIT0gLTEpIHJldHVybjtcblx0
XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5cblx0XHRcdHZhciBfZm4gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0
XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVudCh0eXBlLCBfZm4pO1xuXHRcdFx0Zm5zLnB1c2goX2Zu
KTtcblxuXHRcdFx0bGlzdGVuZXJzW3VpZF0gPSBsaXN0ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUo
X2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywgbGlzdGVuZXJzKTtcblx0XHR9XG5cdH07XG59O1xu
XG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJh
c2U6ICdmb2N1c2luJyxcblx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZl
bnQsIHRhcmdldCl7XG5cdFx0XHR2YXIgZXZlbnRzID0ge2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0
XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2ZW50cyk7XG5cdFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0
eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZu
LCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0XHRldmVudC50YXJnZXQuYWRkRXZlbnRz
KGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xufTtcblxuaWYgKCFldmVudExpc3RlbmVyU3VwcG9ydCkg
T2JqZWN0LmFwcGVuZChtYXAsIHtcblx0c3VibWl0OiBmb3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxu
XHRyZXNldDogZm9ybU9ic2VydmVyKCdyZXNldCcpLFxuXHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIo
J2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlucHV0T2JzZXJ2ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9s
dElFOT4qL1xuXG52YXIgcHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZSxcblx0YWRkRXZlbnQgPSBw
cm90by5hZGRFdmVudCxcblx0cmVtb3ZlRXZlbnQgPSBwcm90by5yZW1vdmVFdmVudDtcblxudmFy
IHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2Qpe1xuXHRyZXR1cm4gZnVuY3Rpb24odHlwZSwg
Zm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlmICh0eXBlLmluZGV4T2YoJzpyZWxheScpID09IC0xKSBy
ZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJz
ZWQgPSBTbGljay5wYXJzZSh0eXBlKS5leHByZXNzaW9uc1swXVswXTtcblx0XHRpZiAocGFyc2Vk
LnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxheScpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBm
biwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIG5ld1R5cGUgPSBwYXJzZWQudGFnO1xuXHRcdHBhcnNl
ZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24ocHNldWRvKXtcblx0XHRcdG5ld1R5cGUg
Kz0gJzonICsgcHNldWRvLmtleSArIChwc2V1ZG8udmFsdWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUg
KyAnKScgOiAnJyk7XG5cdFx0fSk7XG5cdFx0b2xkLmNhbGwodGhpcywgdHlwZSwgZm4pO1xuXHRc
dHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBuZXdUeXBlLCBwYXJzZWQucHNldWRvc1swXS52YWx1
ZSwgZm4pO1xuXHR9O1xufTtcblxudmFyIGRlbGVnYXRpb24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1
bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZl
KCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmIChzdG9y
ZWQpIGZvciAodmFyIF91aWQgaW4gc3RvcmVkKXtcblx0XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4g
PT0gZm4gJiYgc3RvcmVkW191aWRdLm1hdGNoID09IG1hdGNoKSByZXR1cm4gdGhpcztcblx0XHR9
XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBlLCBfbWF0Y2ggPSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAg
PSBtYXBbdHlwZV0gfHwge307XG5cdFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblxuXHRc
dG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0KXtcblx0XHRcdHJldHVybiBTbGljay5tYXRjaCh0YXJn
ZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxuXHRcdHZhciBlbGVtZW50RXZlbnQgPSBFbGVtZW50LkV2
ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBl
bGVtZW50RXZlbnQuY29uZGl0aW9uKXtcblx0XHRcdHZhciBfX21hdGNoID0gbWF0Y2gsIGNvbmRp
dGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVudC5jb25kaXRpb247XG5cdFx0XHRt
YXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnQpe1xuXHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0
YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRpb24uY2FsbCh0YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0
XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGYgPSB0aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVl
SUQoKTtcblx0XHR2YXIgZGVsZWdhdG9yID0gX21hcC5saXN0ZW4gPyBmdW5jdGlvbihldmVudCwg
dGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFy
Z2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRhcmdldCkgX21hcC5saXN0ZW4oc2VsZiwg
bWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpO1xuXHRcdH0gOiBmdW5jdGlvbihldmVudCwg
dGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFy
Z2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRhcmdldCkgYnViYmxlVXAoc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHR9O1xuXG5cdFx0aWYgKCFzdG9yZWQpIHN0b3Jl
ZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRdID0ge1xuXHRcdFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRc
dGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0b3I6IGRlbGVnYXRvclxuXHRcdH07XG5cdFx0c3RvcmFn
ZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0cmV0dXJuIGFkZEV2ZW50LmNhbGwodGhpcywgdHlwZSwg
ZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlv
bih0eXBlLCBtYXRjaCwgZm4sIF91aWQpe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2
ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0
b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0XHRpZiAoX3VpZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0
eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0uZGVsZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVd
IHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblx0XHRcdGlmIChfbWFw
LnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3VpZCk7XG5cdFx0XHRkZWxldGUgc3RvcmVkW191
aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3Zl
RXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxu
XG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRcdGlmIChmbikgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xu
XHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBz
LmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUs
IG1hdGNoLCBmbiwgX191aWQpO1xuXHRcdH0gZWxzZSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5c
dFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNoKSBkZWxl
Z2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtc
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufTtcblxuW0VsZW1lbnQsIFdpbmRvdywg
RG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXHRhZGRFdmVudDogcmVsYXkoYWRkRXZl
bnQsIGRlbGVnYXRpb24uYWRkRXZlbnQpLFxuXHRyZW1vdmVFdmVudDogcmVsYXkocmVtb3ZlRXZl
bnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5u
YW1lOiBFbGVtZW50LlN0eWxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIGZvciBp
bnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxlbWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3
YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRWxlbWVudFxu
XG5wcm92aWRlczogRWxlbWVudC5TdHlsZVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52
YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsO1xuXG4vLzxsdElFOT5cbi8vIENoZWNrIGZvciBv
bGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0eWxlcyB3aGVuIHRoZXkncmUgc2V0IHRvIG51
bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9
ICdyZWQnO1xuZWwuc3R5bGUuY29sb3IgPSBudWxsO1xudmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMg
PSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJztcblxuLy8gY2hlY2sgZm9yIG9sZElFLCB3aGljaCBy
ZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxlcyBpbiB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9y
LXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgtc3R5bGUtY29sb3IpXG52YXIgYm9yZGVyID0g
JzFweCBzb2xpZCAjMTIzYWJjJztcbmVsLnN0eWxlLmJvcmRlciA9IGJvcmRlcjtcbnZhciByZXR1
cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0eWxlLmJvcmRlciAhPSBib3JkZXI7XG5lbCA9
IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZhciBoYXNHZXRDb21wdXRlZFN0eWxlID0gISF3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZSxcblx0c3VwcG9ydEJvcmRlclJhZGl1cyA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJvcmRlclJhZGl1cyAhPSBudWxsO1xuXG5FbGVtZW50LlBy
b3BlcnRpZXMuc3R5bGVzID0ge3NldDogZnVuY3Rpb24oc3R5bGVzKXtcblx0dGhpcy5zZXRTdHls
ZXMoc3R5bGVzKTtcbn19O1xuXG52YXIgaGFzT3BhY2l0eSA9IChodG1sLnN0eWxlLm9wYWNpdHkg
IT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9IChodG1sLnN0eWxlLmZpbHRlciAhPSBudWxsKSxcblx0
cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNpdHk9KFtcXGQuXSspXFwpL2k7XG5cbnZhciBzZXRWaXNp
YmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRv
cGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkg
PiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufTtcblxuLy88
bHRJRTk+XG52YXIgc2V0RmlsdGVyID0gZnVuY3Rpb24oZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7
XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG5cdFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVy
IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykgfHwgJyc7XG5cdHN0eWxlLmZp
bHRlciA9IChyZWdleHAudGVzdChmaWx0ZXIpID8gZmlsdGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1
ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1ZSkudHJpbSgpO1xuXHRpZiAoIXN0eWxlLmZpbHRlcikg
c3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTtcbn07XG4vLzwvbHRJRTk+XG5cbnZhciBz
ZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0
ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rp
b24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGlmICghZWxlbWVudC5jdXJyZW50U3R5bGUgfHwgIWVs
ZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkgZWxlbWVudC5zdHlsZS56b29tID0gMTtcblx0
aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBvcGFjaXR5ID09IDEpe1xuXHRcdHNldEZpbHRlcihlbGVt
ZW50LCByZUFscGhhLCAnJyk7XG5cdFx0aWYgKG9wYWNpdHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVs
ZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0x
MDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBo
YShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCkubGltaXQoMCwgMTAwKS5yb3VuZCgpICsgJykn
KTtcblx0fVxufSA6IHNldFZpc2liaWxpdHkpKTtcblxudmFyIGdldE9wYWNpdHkgPSAoaGFzT3Bh
Y2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUu
b3BhY2l0eSB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ29wYWNpdHknKTtcblx0cmV0dXJu
IChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5LnRvRmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVy
ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBmaWx0ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0
ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSksXG5cdFx0b3BhY2l0eTtc
blx0aWYgKGZpbHRlcikgb3BhY2l0eSA9IGZpbHRlci5tYXRjaChyZUFscGhhKTtcblx0cmV0dXJu
IChvcGFjaXR5ID09IG51bGwgfHwgZmlsdGVyID09IG51bGwpID8gMSA6IChvcGFjaXR5WzFdIC8g
MTAwKTtcbn0gOiBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJl
dHJpZXZlKCckb3BhY2l0eScpO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVs
ZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9PSAnaGlkZGVuJyA/IDAgOiAxKTtcblx0cmV0dXJuIG9w
YWNpdHk7XG59KSk7XG5cbnZhciBmbG9hdE5hbWUgPSAoaHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBu
dWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9hdCcsXG5cdG5hbWVkUG9zaXRpb25zID0ge2xl
ZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAnNTAlJywgcmlnaHQ6ICcxMDAlJywgYm90dG9t
OiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSA9IChodG1sLnN0eWxlLmJhY2tn
cm91bmRQb3NpdGlvblggIT0gbnVsbCksXG5cdHByZWZpeFBhdHRlcm4gPSAvXi0obXMpLS87XG5c
bnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5y
ZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5jYW1lbENhc2UoKTtcbn07XG5cbi8vPGx0SUU5
PlxudmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24oc3R5bGUsIHByb3BlcnR5KXtcblx0aWYgKHBy
b3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKXtcblx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1
dGUocHJvcGVydHkgKyAnWCcpO1xuXHRcdHByb3BlcnR5ICs9ICdZJztcblx0fVxuXHRzdHlsZS5y
ZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xufTtcbi8vPC9sdElFOT5cblxuRWxlbWVudC5pbXBs
ZW1lbnQoe1xuXG5cdGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHRp
ZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgdGhpcy5jdXJyZW50U3R5bGUpIHJldHVybiB0aGlz
LmN1cnJlbnRTdHlsZVtjYW1lbENhc2UocHJvcGVydHkpXTtcblx0XHR2YXIgZGVmYXVsdFZpZXcg
PSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRlZmF1bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQg
PSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkg
OiBudWxsO1xuXHRcdHJldHVybiAoY29tcHV0ZWQpID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1
ZSgocHJvcGVydHkgPT0gZmxvYXROYW1lKSA/ICdmbG9hdCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUo
KSkgOiAnJztcblx0fSxcblxuXHRzZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtc
blx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKXtcblx0XHRcdGlmICh2YWx1ZSAhPSBudWxs
KSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXHRcdFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1
ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2Uo
cHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAodHlw
ZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVz
W3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7XG5cdFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZl
cnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0
dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4gKHR5cGVPZih2YWwpID09ICdudW1iZXInKSA/IG1hcFtp
XS5yZXBsYWNlKCdAJywgTWF0aC5yb3VuZCh2YWwpKSA6IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAn
KTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09IFN0cmluZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0
XHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLnN0eWxlW3Byb3Bl
cnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0SUU5PlxuXHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFs
dWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0eWxlcyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0
dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVTdHlsZSh0aGlzLnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0
fVxuXHRcdC8vPC9sdElFOT5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZTog
ZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVy
biBnZXRPcGFjaXR5KHRoaXMpO1xuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09
ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJS
YWRpdXMgJiYgcHJvcGVydHkuaW5kZXhPZignYm9yZGVyUmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0
cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdi
b3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1
bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBw
eCc7XG5cdFx0XHR9LCB0aGlzKS5qb2luKCcgJyk7XG5cdFx0fVxuXHRcdHZhciByZXN1bHQgPSB0
aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0XHRpZiAoIXJlc3VsdCB8fCBwcm9wZXJ0eSA9PSAneklu
ZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVudC5TaG9ydFN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9w
ZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVt
ZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5XSkgcmVzdWx0LnB1c2godGhpcy5nZXRTdHlsZShzKSk7
XG5cdFx0XHRcdHJldHVybiByZXN1bHQuam9pbignICcpO1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0
ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHR9XG5cdFx0aWYgKGhhc0Jh
Y2tncm91bmRQb3NpdGlvblhZICYmIC9eYmFja2dyb3VuZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHBy
b3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9t
fGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0aW9uKXtcblx0XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRp
b25zW3Bvc2l0aW9uXTtcblx0XHRcdH0pIHx8ICcwcHgnO1xuXHRcdH1cblx0XHRpZiAoIXJlc3Vs
dCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJykgcmV0dXJuICcwcHggMHB4Jztc
blx0XHRpZiAocmVzdWx0KXtcblx0XHRcdHJlc3VsdCA9IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0
dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2JhP1xcKFtcXGRcXHMsXStcXCkvKTtcblx0XHRc
dGlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoY29sb3JbMF0sIGNvbG9yWzBdLnJn
YlRvSGV4KCkpO1xuXHRcdH1cblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgIXRoaXMu
c3R5bGVbcHJvcGVydHldKXtcblx0XHRcdGlmICgoL14oaGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHBy
b3BlcnR5KSAmJiAhKC9weCQvLnRlc3QocmVzdWx0KSkpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0g
KHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0JywgJ3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0
b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRcdHZhbHVlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0U3R5bGUoJ2JvcmRlci0nICsgdmFsdWUgKyAnLXdpZHRo
JykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3BhZGRpbmctJyArIHZhbHVlKS50b0ludCgpO1xu
XHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJuIHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0
eS5jYXBpdGFsaXplKCldIC0gc2l6ZSArICdweCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9y
ZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykudGVzdChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFy
c2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0XHRcdHJldHVybiAnMHB4Jztcblx0XHRcdH1cblx0XHR9
XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9e
Ym9yZGVyKFRvcHxSaWdodHxCb3R0b218TGVmdCk/JC8udGVzdChwcm9wZXJ0eSkgJiYgL14jLy50
ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC9eKC4rKVxccyguKylc
XHMoLispJC8sICckMiAkMyAkMScpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1
cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNldFN0eWxlczogZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRm
b3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHRoaXMuc2V0U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHls
ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFN0eWxlczogZnVuY3Rpb24oKXtc
blx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2go
ZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5nZXRTdHlsZShrZXkpO1xu
XHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQu
U3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4JywgdG9wOiAnQHB4JywgYm90dG9tOiAnQHB4Jywgcmln
aHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0BweCcsIGhlaWdodDogJ0BweCcsIG1heFdpZHRoOiAnQHB4
JywgbWF4SGVpZ2h0OiAnQHB4JywgbWluV2lkdGg6ICdAcHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxu
XHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCknLCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcs
IGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgnLCBjb2xvcjogJ3JnYihALCBALCBAKScsXG5c
dGZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2luZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgn
LCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgpJyxcblx0bWFyZ2luOiAnQHB4IEBweCBAcHgg
QHB4JywgcGFkZGluZzogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlcjogJ0BweCBAIHJnYihALCBA
LCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApJyxcblx0Ym9yZGVyV2lk
dGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xv
cjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKScs
XG5cdHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9udFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50
OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBib3JkZXJSYWRpdXM6ICdAcHggQHB4IEBweCBAcHgnXG59
O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hvcnRTdHlsZXMgPSB7bWFyZ2luOiB7fSwgcGFkZGluZzog
e30sIGJvcmRlcjoge30sIGJvcmRlcldpZHRoOiB7fSwgYm9yZGVyU3R5bGU6IHt9LCBib3JkZXJD
b2xvcjoge319O1xuXG5bJ1RvcCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddLmVhY2goZnVu
Y3Rpb24oZGlyZWN0aW9uKXtcblx0dmFyIFNob3J0ID0gRWxlbWVudC5TaG9ydFN0eWxlcztcblx0
dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzO1xuXHRbJ21hcmdpbicsICdwYWRkaW5nJ10uZWFjaChm
dW5jdGlvbihzdHlsZSl7XG5cdFx0dmFyIHNkID0gc3R5bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hv
cnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4Jztcblx0fSk7XG5cdHZhciBiZCA9ICdib3Jk
ZXInICsgZGlyZWN0aW9uO1xuXHRTaG9ydC5ib3JkZXJbYmRdID0gQWxsW2JkXSA9ICdAcHggQCBy
Z2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3ID0gYmQgKyAnV2lkdGgnLCBiZHMgPSBiZCArICdTdHls
ZScsIGJkYyA9IGJkICsgJ0NvbG9yJztcblx0U2hvcnRbYmRdID0ge307XG5cdFNob3J0LmJvcmRl
cldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9IEFsbFtiZHddID0gJ0BweCc7XG5cdFNob3J0
LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1bYmRzXSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRT
aG9ydC5ib3JkZXJDb2xvcltiZGNdID0gU2hvcnRbYmRdW2JkY10gPSBBbGxbYmRjXSA9ICdyZ2Io
QCwgQCwgQCknO1xufSk7XG5cbmlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSkgRWxlbWVudC5T
aG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24gPSB7YmFja2dyb3VuZFBvc2l0aW9uWDogJ0An
LCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAnQCd9O1xufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBF
bGVtZW50LkRpbWVuc2lvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgdG8gd29y
ayB3aXRoIHNpemUsIHNjcm9sbCwgb3IgcG9zaXRpb25pbmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3
aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpc
biAgLSBFbGVtZW50IHBvc2l0aW9uaW5nIGJhc2VkIG9uIHRoZSBbcW9veGRvb10oaHR0cDovL3Fv
b3hkb28ub3JnLykgY29kZSBhbmQgc21hcnQgYnJvd3NlciBmaXhlcywgW0xHUEwgTGljZW5zZV0o
aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCkuXG4gIC0gVmlld3BvcnQgZGlt
ZW5zaW9ucyBiYXNlZCBvbiBbWVVJXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBj
b2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS9saWNlbnNl
Lmh0bWwpLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVz
OiBbRWxlbWVudC5EaW1lbnNpb25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuXHRjaGlsZCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5l
bGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbnZhciBicm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hp
bGQub2Zmc2V0UGFyZW50ID09PSBlbGVtZW50KTtcbmVsZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5c
bnZhciBoZWlnaHRDb21wb25lbnRzID0gWydoZWlnaHQnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5n
Qm90dG9tJywgJ2JvcmRlclRvcFdpZHRoJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRo
Q29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2Jv
cmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJ107XG5cbnZhciBzdmdDYWxjdWxhdGVT
aXplID0gZnVuY3Rpb24oZWwpe1xuXG5cdHZhciBnQ1MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHls
ZShlbCksXG5cdFx0Ym91bmRzID0ge3g6IDAsIHk6IDB9O1xuXG5cdGhlaWdodENvbXBvbmVudHMu
ZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy55ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10p
O1xuXHR9KTtcblx0d2lkdGhDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0XHRib3Vu
ZHMueCArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHJldHVybiBib3VuZHM7XG59
O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhl
bCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycgfHwgaXNCb2R5KGVsKTtcbn07XG5cbnZhciBpc09m
ZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14o
Pzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QoZWwudGFnTmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxl
bWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1bmN0aW9uKHgsIHkpe1xuXHRcdGlmIChpc0JvZHkodGhp
cykpe1xuXHRcdFx0dGhpcy5nZXRXaW5kb3coKS5zY3JvbGxUbyh4LCB5KTtcblx0XHR9IGVsc2Ug
e1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0geDtcblx0XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtc
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtc
blx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7
XG5cblx0XHQvLzxsdElFOT5cblx0XHQvLyBUaGlzIGlmIGNsYXVzZSBpcyBiZWNhdXNlIElFOC0g
Y2Fubm90IGNhbGN1bGF0ZSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2
aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRpZiAoIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSByZXR1
cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRoaXMub2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwv
bHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2ZyBzZWN0aW9uIHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxj
dWxhdGVTaXplKClgLCBjYW4gYmUgcmVtb3ZlZCB3aGVuIEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBi
dWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19i
dWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlmICh0aGlzLmdldCgndGFnJykgPT0gJ3N2ZycpIHJldHVy
biBzdmdDYWxjdWxhdGVTaXplKHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBib3VuZHMg
PSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0cmV0dXJuIHt4OiBib3VuZHMu
d2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9O1xuXHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJu
IHt4OiAwLCB5OiAwfTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24o
KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3Jv
bGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9s
bEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0Jv
ZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbCgpO1xuXHRcdHJldHVy
biB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5OiB0aGlzLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0
U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwg
cG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShl
bGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRc
dHBvc2l0aW9uLnkgKz0gZWxlbWVudC5zY3JvbGxUb3A7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVu
dC5wYXJlbnROb2RlO1xuXHRcdH1cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0
T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZzZXRQYXJlbnQgPyBmdW5jdGlvbigpe1xuXHRcdHZhciBl
bGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVs
ZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dmFyIGlz
T2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRp
YycpID8gaXNPZmZzZXRTdGF0aWMgOiBpc09mZnNldDtcblx0XHR3aGlsZSAoKGVsZW1lbnQgPSBl
bGVtZW50LnBhcmVudE5vZGUpKXtcblx0XHRcdGlmIChpc09mZnNldENoZWNrKGVsZW1lbnQpKSBy
ZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gOiBmdW5jdGlvbigp
e1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0
eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xu
XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9IGNh
dGNoIChlKXt9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rp
b24oKXtcblx0XHR2YXIgaGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5nZXRCb3VuZGlu
Z0NsaWVudFJlY3Q7XG5cblx0XHRpZiAoaGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0KXtcblx0XHRc
dHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG5cdFx0XHRcdGh0bWwg
PSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KSxcblx0XHRc
dFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xsKCksXG5cdFx0XHRcdGVsZW1TY3JvbGxzID0g
dGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0XHRcdGlzRml4ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywg
J3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGJv
dW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRt
bFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCxcblx0XHRcdFx0eTogYm91bmQudG9wLnRvRmxv
YXQoKSArIGVsZW1TY3JvbGxzLnkgKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueSkgLSBo
dG1sLmNsaWVudFRvcFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgZWxlbWVudCA9IHRoaXMs
IHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiBw
b3NpdGlvbjtcblxuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRc
dFx0cG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9
IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJl
bnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldFBvc2l0aW9u
OiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5cdFx0dmFyIG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygp
LFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5nZXRTY3JvbGxzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0g
e1xuXHRcdFx0eDogb2Zmc2V0LnggLSBzY3JvbGwueCxcblx0XHRcdHk6IG9mZnNldC55IC0gc2Ny
b2xsLnlcblx0XHR9O1xuXG5cdFx0aWYgKHJlbGF0aXZlICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50
LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0dmFyIHJlbGF0aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5n
ZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHt4OiBwb3NpdGlvbi54IC0gcmVsYXRpdmVQb3Np
dGlvbi54IC0gbGVmdEJvcmRlcihyZWxhdGl2ZSksIHk6IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBv
c2l0aW9uLnkgLSB0b3BCb3JkZXIocmVsYXRpdmUpfTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0
aW9uO1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbihlbGVtZW50KXtcblx0XHRp
ZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygp
O1xuXHRcdHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24oZWxlbWVudCksXG5cdFx0XHRz
aXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0dmFyIG9iaiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0
aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0aW9uLnksXG5cdFx0XHR3aWR0aDogc2l6ZS54LFxuXHRc
dFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9O1xuXHRcdG9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2Jq
LndpZHRoO1xuXHRcdG9iai5ib3R0b20gPSBvYmoudG9wICsgb2JqLmhlaWdodDtcblx0XHRyZXR1
cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1dGVQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRy
ZXR1cm4ge1xuXHRcdFx0bGVmdDogb2JqLnggLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLWxl
ZnQnKSxcblx0XHRcdHRvcDogb2JqLnkgLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcp
XG5cdFx0fTtcblx0fSxcblxuXHRzZXRQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1
cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9zaXRpb24ob2JqKSk7XG5cdH1cblxufSk7
XG5cblxuW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldFNp
emU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5c
dFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgsIHk6IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9
LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHR2YXIgd2luID0gdGhpcy5nZXRXaW5k
b3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IHdpbi5w
YWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwgeTogd2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5z
Y3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksXG5cdFx0XHRtaW4gPSB0aGlzLmdldFNpemUo
KSxcblx0XHRcdGJvZHkgPSB0aGlzLmdldERvY3VtZW50KCkuYm9keTtcblxuXHRcdHJldHVybiB7
eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6
IE1hdGgubWF4KGRvYy5zY3JvbGxIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xu
XHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB7eDogMCwgeTog
MH07XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUg
PSB0aGlzLmdldFNpemUoKTtcblx0XHRyZXR1cm4ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBz
aXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0
fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBtZXRob2RzXG5cbnZhciBzdHlsZVN0cmluZyA9IEVsZW1l
bnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxuZnVuY3Rpb24gc3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5
bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWxlbWVudCwgc3R5bGUpLnRvSW50KCkgfHwgMDtc
bn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVt
YmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3Jk
ZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLWxlZnQt
d2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gaXNCb2R5KGVsZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86
Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRhZ05hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRD
b21wYXRFbGVtZW50KGVsZW1lbnQpe1xuXHR2YXIgZG9jID0gZWxlbWVudC5nZXREb2N1bWVudCgp
O1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNv
bXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcbn1cblxufSkoKTtcblxuLy9hbGlhc2VzXG5F
bGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBvc2l0aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlc
blxuW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5c
dGdldEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueTtcblx0
fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCku
eDtcblx0fSxcblxuXHRnZXRTY3JvbGxUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMu
Z2V0U2Nyb2xsKCkueTtcblx0fSxcblxuXHRnZXRTY3JvbGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS55O1xuXHR9LFxuXG5c
dGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNp
emUoKS54O1xuXHR9LFxuXG5cdGdldFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5n
ZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5cblx0Z2V0TGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTog
RnhcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8g
YmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRo
ZW5hYmxlXVxuXG5wcm92aWRlczogRnhcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFy
IEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0NoYWluLCBFdmVu
dHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7XG5cdFx0Lypcblx0
XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25DYW5jZWw6IG5pbCxcblx0XHRvbkNvbXBsZXRlOiBuaWws
XG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxuXHRcdHVuaXQ6IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1
MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxuXHRcdGZyYW1lU2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAn
aWdub3JlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRo
aXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlzO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhv
cHRpb25zKTtcblx0fSxcblxuXHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBmdW5jdGlvbihwKXtcblx0XHRcdHJldHVybiAtKE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEp
IC8gMjtcblx0XHR9O1xuXHR9LFxuXG5cdHN0ZXA6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5mcmFtZVNraXApe1xuXHRcdFx0dmFyIGRpZmYgPSAodGhpcy50aW1lICE9IG51
bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBmcmFtZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUlu
dGVydmFsO1xuXHRcdFx0dGhpcy50aW1lID0gbm93O1xuXHRcdFx0dGhpcy5mcmFtZSArPSBmcmFt
ZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJhbWUrKztcblx0XHR9XG5cblx0XHRpZiAo
dGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKXtcblx0XHRcdHZhciBkZWx0YSA9IHRoaXMudHJhbnNp
dGlvbih0aGlzLmZyYW1lIC8gdGhpcy5mcmFtZXMpO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21w
dXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhp
cy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMu
ZnJvbSwgdGhpcy50bywgMSkpO1xuXHRcdFx0dGhpcy5zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5c
dHNldDogZnVuY3Rpb24obm93KXtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6
IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwg
dG8sIGRlbHRhKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMu
aXNSdW5uaW5nKCkpIHJldHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmsp
e1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0
XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRo
aXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0
c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8p
KSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmZyb20gPSBmcm9tO1xuXHRcdHRoaXMudG8gPSB0bztc
blx0XHR0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5mcmFtZVNraXApID8gMCA6IC0xO1xuXHRc
dHRoaXMudGltZSA9IG51bGw7XG5cdFx0dGhpcy50cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0
aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9IHRoaXMub3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMu
b3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uO1xuXHRcdHRoaXMu
ZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNbZHVyYXRpb25dIHx8IGR1cmF0aW9uLnRvSW50KCk7XG5c
dFx0dGhpcy5mcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcblx0XHR0aGlzLmZyYW1lcyA9IGZy
YW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xu
XHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRo
aXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVu
dCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpO1xuXHRcdHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZw
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRp
ZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVs
bEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0XHRpZiAodGhpcy5m
cmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScs
IHRoaXMuc3ViamVjdCk7XG5cdFx0XHRcdGlmICghdGhpcy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJl
RXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0
XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0b3AnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fVxuXHRc
dFx0dGhpcy5yZXNvbHZlKHRoaXMuc3ViamVjdCA9PT0gdGhpcyA/IG51bGwgOiB0aGlzLnN1Ympl
Y3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9u
KCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtc
blx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0
dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcs
IHRoaXMuc3ViamVjdCkuY2xlYXJDaGFpbigpO1xuXHRcdFx0dGhpcy5yZWplY3QodGhpcy5zdWJq
ZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9u
KCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtc
blx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXN1bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMuaXNQYXVzZWQoKSkgcHVzaEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZw
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBsaXN0ID0gaW5zdGFuY2VzW3RoaXMub3B0aW9ucy5mcHNdO1xuXHRcdHJldHVybiBs
aXN0ICYmIGxpc3QuY29udGFpbnModGhpcyk7XG5cdH0sXG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpICYmICF0aGlzLmlzUnVu
bmluZygpO1xuXHR9XG5cbn0pO1xuXG5GeC5jb21wdXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRl
bHRhKXtcblx0cmV0dXJuICh0byAtIGZyb20pICogZGVsdGEgKyBmcm9tO1xufTtcblxuRnguRHVy
YXRpb25zID0geydzaG9ydCc6IDI1MCwgJ25vcm1hbCc6IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxu
Ly8gZ2xvYmFsIHRpbWVyc1xuXG52YXIgaW5zdGFuY2VzID0ge30sIHRpbWVycyA9IHt9O1xuXG52
YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdHZhciBub3cgPSBEYXRlLm5vdygpO1xuXHRmb3IgKHZh
ciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdHZhciBpbnN0YW5jZSA9IHRoaXNbaV07XG5c
dFx0aWYgKGluc3RhbmNlKSBpbnN0YW5jZS5zdGVwKG5vdyk7XG5cdH1cbn07XG5cbnZhciBwdXNo
SW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8
IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtcblx0bGlzdC5wdXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVy
c1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxvb3AucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAgLyBm
cHMpLCBsaXN0KTtcbn07XG5cbnZhciBwdWxsSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2
YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdO1xuXHRpZiAobGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0
aGlzKTtcblx0XHRpZiAoIWxpc3QubGVuZ3RoICYmIHRpbWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0
ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRcdHRpbWVyc1tmcHNdID0gY2xlYXJJbnRlcnZhbCh0aW1l
cnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4
LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENTUyBhbmltYXRpb24gbG9naWMuIFVz
ZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5FbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRngsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVz
OiBGeC5DU1NcblxuLi4uXG4qL1xuXG5GeC5DU1MgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6
IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhlIGJhc2UgZnJvbS90byBvYmplY3RcblxuXHRwcmVwYXJl
OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJh
eS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0dmFyIGZyb20gPSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVz
WzFdO1xuXHRcdGlmICh0byA9PSBudWxsKXtcblx0XHRcdHRvID0gZnJvbTtcblx0XHRcdGZyb20g
PSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdHZhciB1bml0ID0gdGhpcy5vcHRp
b25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFwdGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFu
bW9yci9meC9ibG9iL21hc3Rlci9meC5qcyNMMjk5XG5cdFx0XHRpZiAodW5pdCAmJiBmcm9tICYm
IHR5cGVvZiBmcm9tID09ICdzdHJpbmcnICYmIGZyb20uc2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1
bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkgIT0gMCl7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUo
cHJvcGVydHksIHRvICsgdW5pdCk7XG5cdFx0XHRcdHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29t
cHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHRcdC8vIElFIGFuZCBPcGVyYSBzdXBwb3J0IHBp
eGVsTGVmdCBvciBwaXhlbFdpZHRoXG5cdFx0XHRcdGlmICghKC9weCQvLnRlc3QodmFsdWUpKSl7
XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlWygncGl4ZWwtJyArIHByb3BlcnR5KS5j
YW1lbENhc2UoKV07XG5cdFx0XHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHRcdFx0
Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3YXJkcycgaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZl
cy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxl
ZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQg
PSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0
O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5c
dFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9ICh0byB8fCAxKSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8
fCAxKSAqIChwYXJzZUZsb2F0KGZyb20pIHx8IDApO1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxl
KHByb3BlcnR5LCBmcm9tICsgdW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJv
bTogdGhpcy5wYXJzZShmcm9tKSwgdG86IHRoaXMucGFyc2UodG8pfTtcblx0fSxcblxuXHQvL3Bh
cnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXlcblxuXHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xu
XHRcdHZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2YWx1ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBl
b2YgdmFsdWUgPT0gJ3N0cmluZycpID8gdmFsdWUuc3BsaXQoJyAnKSA6IEFycmF5LmNvbnZlcnQo
dmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsKXtcblx0XHRcdHZhbCA9
IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFj
aChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFyc2VyKXtcblx0XHRcdFx0aWYgKGZvdW5kKSBy
ZXR1cm47XG5cdFx0XHRcdHZhciBwYXJzZWQgPSBwYXJzZXIucGFyc2UodmFsKTtcblx0XHRcdFx0
aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09IDApIGZvdW5kID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNl
cjogcGFyc2VyfTtcblx0XHRcdH0pO1xuXHRcdFx0Zm91bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZh
bCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vycy5TdHJpbmd9O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xu
XHRcdH0pO1xuXHR9LFxuXG5cdC8vY29tcHV0ZXMgYnkgYSBmcm9tIGFuZCB0byBwcmVwYXJlZCBv
YmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLlxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20s
IHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNvbXB1dGVkID0gW107XG5cdFx0KE1hdGgubWluKGZyb20u
bGVuZ3RoLCB0by5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihpKXtcblx0XHRcdGNvbXB1dGVkLnB1
c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21wdXRlKGZyb21baV0udmFsdWUsIHRvW2ldLnZh
bHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5wYXJzZXJ9KTtcblx0XHR9KTtcblx0XHRjb21w
dXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0
dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5cdC8vc2VydmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxu
XG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkg
IT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5wYXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJl
dHVybmVkID0gW107XG5cdFx0dmFsdWUuZWFjaChmdW5jdGlvbihiaXQpe1xuXHRcdFx0cmV0dXJu
ZWQgPSByZXR1cm5lZC5jb25jYXQoYml0LnBhcnNlci5zZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtc
blx0XHR9KTtcblx0XHRyZXR1cm4gcmV0dXJuZWQ7XG5cdH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBj
aGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVy
dHksIHZhbHVlLCB1bml0KXtcblx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0aGlzLnNl
cnZlKHZhbHVlLCB1bml0KSk7XG5cdH0sXG5cblx0Ly9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2Ug
Y3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxlY3RvclxuXG5cdHNlYXJjaDogZnVuY3Rp
b24oc2VsZWN0b3Ipe1xuXHRcdGlmIChGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRngu
Q1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0XHR2YXIgdG8gPSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3
IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5lc2NhcGVSZWdFeHAoKSArICckJyk7XG5cblx0XHR2YXIg
c2VhcmNoU3R5bGVzID0gZnVuY3Rpb24ocnVsZXMpe1xuXHRcdFx0QXJyYXkuZWFjaChydWxlcywg
ZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRcdGlmIChydWxlLm1lZGlhKXtcblx0XHRcdFx0XHRzZWFy
Y2hTdHlsZXMocnVsZS5ydWxlcyB8fCBydWxlLmNzc1J1bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47
XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFydWxlLnN0eWxlKSByZXR1cm47XG5cdFx0XHRcdHZh
ciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQu
cmVwbGFjZSgvXlxcdysvLCBmdW5jdGlvbihtKXtcblx0XHRcdFx0XHRyZXR1cm4gbS50b0xvd2Vy
Q2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51bGw7XG5cdFx0XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8
ICFzZWxlY3RvclRlc3QudGVzdChzZWxlY3RvclRleHQpKSByZXR1cm47XG5cdFx0XHRcdE9iamVj
dC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRc
dGlmICghcnVsZS5zdHlsZVtzdHlsZV0gfHwgRWxlbWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJl
dHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9IFN0cmluZyhydWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0
XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4
KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0QXJyYXku
ZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cywgZnVuY3Rpb24oc2hlZXQpe1xuXHRcdFx0dmFyIGhy
ZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0aWYgKGhyZWYgJiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+
IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1bWVudC5kb21haW4pID09IC0xKSByZXR1cm47XG5cdFx0
XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcblx0XHRcdHNlYXJj
aFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rv
cl0gPSB0bztcblx0fVxuXG59KTtcblxuRnguQ1NTLkNhY2hlID0ge307XG5cbkZ4LkNTUy5QYXJz
ZXJzID0ge1xuXG5cdENvbG9yOiB7XG5cdFx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRc
dGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05YS1mXXszLDZ9JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRv
UmdiKHRydWUpO1xuXHRcdFx0cmV0dXJuICgodmFsdWUgPSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxc
cyooXFxkKyksXFxzKihcXGQrKS8pKSkgPyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0g
OiBmYWxzZTtcblx0XHR9LFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7
XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1
cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21baV0sIHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0
fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZh
bHVlLm1hcChOdW1iZXIpO1xuXHRcdH1cblx0fSxcblxuXHROdW1iZXI6IHtcblx0XHRwYXJzZTog
cGFyc2VGbG9hdCxcblx0XHRjb21wdXRlOiBGeC5jb21wdXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlv
bih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRyZXR1cm4gKHVuaXQpID8gdmFsdWUgKyB1bml0IDogdmFs
dWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0cmluZzoge1xuXHRcdHBhcnNlOiBGdW5jdGlvbi5jb252
ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0
dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVy
biB6ZXJvO1xuXHRcdH1cblx0fVxuXG59O1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Nb3Jw
aFxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlv
biBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIGZvciBhbiBlbGVtZW50IHVzaW5nIGFuIG9i
amVjdCBvZiBydWxlcywgb3IgQ1NTIGJhc2VkIHNlbGVjdG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogRnguTW9y
cGhcblxuLi4uXG4qL1xuXG5GeC5Nb3JwaCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRngu
Q1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRo
aXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRo
aXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRp
ZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93ID0gdGhpcy5zZWFyY2gobm93KTtcblx0XHRm
b3IgKHZhciBwIGluIG5vdykgdGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwLCBub3dbcF0sIHRo
aXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21wdXRlOiBm
dW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZhciBub3cgPSB7fTtcblx0XHRmb3IgKHZh
ciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7
XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydGllcyl7
XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMpKSByZXR1cm4gdGhpcztcblx0XHRpZiAo
dHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0cmluZycpIHByb3BlcnRpZXMgPSB0aGlzLnNlYXJjaChw
cm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJvbSA9IHt9LCB0byA9IHt9O1xuXHRcdGZvciAodmFyIHAg
aW4gcHJvcGVydGllcyl7XG5cdFx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxl
bWVudCwgcCwgcHJvcGVydGllc1twXSk7XG5cdFx0XHRmcm9tW3BdID0gcGFyc2VkLmZyb207XG5c
dFx0XHR0b1twXSA9IHBhcnNlZC50bztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KGZy
b20sIHRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5c
dHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuY2FuY2VsKCku
c2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBoID0gdGhpcy5yZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRp
ZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBoID0gbmV3IEZ4Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2Fu
Y2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbW9ycGgnLCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJl
dHVybiBtb3JwaDtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bW9ycGg6
IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5zdGFydChwcm9wcyk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHJhbnNp
dGlvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRp
b25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEVhc2luZyBFcXVhdGlvbnMgYnkgUm9i
ZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZp
ZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdpdGggTW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBG
eFxuXG5wcm92aWRlczogRnguVHJhbnNpdGlvbnNcblxuLi4uXG4qL1xuXG5GeC5pbXBsZW1lbnQo
e1xuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5v
cHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNpdGlvbnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0
aWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNw
bGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9IEZ4LlRyYW5zaXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0
cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBdLmNhcGl0YWxpemUoKV07XG5cdFx0XHRpZiAo
ZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScgKyBkYXRhWzFdLmNhcGl0YWxpemUoKSArIChk
YXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkgOiAnJyldO1xuXHRcdH1cblx0XHRyZXR1cm4g
dHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4LlRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFuc2l0aW9u
LCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBBcnJheS5jb252ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNl
SW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVybiB0cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtc
blx0fTtcblx0cmV0dXJuIE9iamVjdC5hcHBlbmQoZWFzZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNl
SW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAxIC0gdHJhbnNp
dGlvbigxIC0gcG9zLCBwYXJhbXMpO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0OiBmdW5jdGlvbihw
b3Mpe1xuXHRcdFx0cmV0dXJuIChwb3MgPD0gMC41ID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJh
bXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAtIHBvcyksIHBhcmFtcykpKSAvIDI7XG5cdFx0
fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zID0ge1xuXG5cdGxpbmVhcjogZnVuY3Rpb24o
emVybyl7XG5cdFx0cmV0dXJuIHplcm87XG5cdH1cblxufTtcblxuXG5cbkZ4LlRyYW5zaXRpb25z
LmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25zKXtcblx0Zm9yICh2YXIgdHJhbnNpdGlvbiBp
biB0cmFuc2l0aW9ucykgRnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNp
dGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRl
bmQoe1xuXG5cdFBvdzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIHgg
JiYgeFswXSB8fCA2KTtcblx0fSxcblxuXHRFeHBvOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4g
TWF0aC5wb3coMiwgOCAqIChwIC0gMSkpO1xuXHR9LFxuXG5cdENpcmM6IGZ1bmN0aW9uKHApe1xu
XHRcdHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29zKHApKTtcblx0fSxcblxuXHRTaW5lOiBm
dW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGguY29zKHAgKiBNYXRoLlBJIC8gMik7XG5c
dH0sXG5cblx0QmFjazogZnVuY3Rpb24ocCwgeCl7XG5cdFx0eCA9IHggJiYgeFswXSB8fCAxLjYx
ODtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgMikgKiAoKHggKyAxKSAqIHAgLSB4KTtcblx0fSxc
blxuXHRCb3VuY2U6IGZ1bmN0aW9uKHApe1xuXHRcdHZhciB2YWx1ZTtcblx0XHRmb3IgKHZhciBh
ID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwgYiAvPSAyKXtcblx0XHRcdGlmIChwID49ICg3IC0gNCAq
IGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1ZSA9IGIgKiBiIC0gTWF0aC5wb3coKDExIC0gNiAqIGEg
LSAxMSAqIHApIC8gNCwgMik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRy
ZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0RWxhc3RpYzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0
dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1hdGguY29zKDIwICogcCAqIE1hdGguUEkgKiAo
eCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5cdH1cblxufSk7XG5cblsnUXVhZCcsICdDdWJpYycsICdR
dWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24odHJhbnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5z
aXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0
cmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTtcblx0fSk7XG59KTtcblxuLypcbi0tLVxuXG5uYW1l
OiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGUsIGVmZmVjdCB0byB0
cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFuIGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBbRnguVHdl
ZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdobGlnaHRdXG5cbi4uLlxuKi9cblxuRnguVHdl
ZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBm
dW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1Ympl
Y3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0
fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBub3cpe1xuXHRcdGlmIChhcmd1bWVudHMu
bGVuZ3RoID09IDEpe1xuXHRcdFx0bm93ID0gcHJvcGVydHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRo
aXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnByb3BlcnR5O1xuXHRcdH1cblx0XHR0aGlzLnJl
bmRlcih0aGlzLmVsZW1lbnQsIHByb3BlcnR5LCBub3csIHRoaXMub3B0aW9ucy51bml0KTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydHksIGZyb20s
IHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydHksIGZyb20sIHRvKSkgcmV0dXJuIHRo
aXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5w
cm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0eSB8fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFy
IHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsIHRoaXMucHJvcGVydHksIGFyZ3Mp
O1xuXHRcdHJldHVybiB0aGlzLnBhcmVudChwYXJzZWQuZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxu
XG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnR3ZWVuID0ge1xuXG5cdHNldDogZnVuY3Rpb24o
b3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2ZSgndHdlZW4nKTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0
XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0
dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7XG5cdFx0fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0
fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0dHdlZW46IGZ1bmN0aW9uKHByb3Bl
cnR5LCBmcm9tLCB0byl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJykuc3RhcnQocHJvcGVydHksIGZy
b20sIHRvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmYWRlOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyksIG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0
eSddLmFwcGVuZChhcmd1bWVudHMpLCB0b2dnbGU7XG5cdFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkg
YXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRcdHN3aXRjaCAoYXJnc1sxXSl7XG5cdFx0XHRjYXNlICdp
bic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ291
dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3No
b3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlk
ZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICd0b2dn
bGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9IHRoaXMucmV0cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMu
Z2V0U3R5bGUoJ29wYWNpdHknKSA9PSAxKTtcblx0XHRcdFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0
XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAwIDogMTtcblx0XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpm
bGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0b2dnbGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0
XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0
aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7XG5cdFx0ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUs
IGFyZ3MpO1xuXHRcdHZhciB0byA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuXHRcdGlmICht
ZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsIHRvID09
IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG5cdFx0fSBlbHNlIGlmICh0byAhPSAwKXtcblx0
XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5ndGgpe1xuXHRcdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9u
KCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2li
bGUnKTtcblx0XHRcdFx0XHR0aGlzLmNhbGxDaGFpbigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0g
ZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xu
XHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0
XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ29wYWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0
XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHRc
dHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5k
KXtcblx0XHRcdGVuZCA9IHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcsIHRoaXMu
Z2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InKSk7XG5cdFx0XHRlbmQgPSAoZW5kID09ICd0cmFu
c3BhcmVudCcpID8gJyNmZmYnIDogZW5kO1xuXHRcdH1cblx0XHR2YXIgdHdlZW4gPSB0aGlzLmdl
dCgndHdlZW4nKTtcblx0XHR0d2Vlbi5zdGFydCgnYmFja2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8
ICcjZmZmZjg4JywgZW5kKS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgn
YmFja2dyb3VuZC1jb2xvcicsIHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtc
blx0XHRcdHR3ZWVuLmNhbGxDaGFpbigpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdFxuXG5kZXNjcmlw
dGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVxdWVzdCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVx
dWVzdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0
LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nl
cl1cblxucHJvdmlkZXM6IFJlcXVlc3RcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFy
IGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxuXHRwcm9ncmVzc1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3Mn
IGluIG5ldyBCcm93c2VyLlJlcXVlc3QpO1xuXG52YXIgUmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9
IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENs
YXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7Lypcblx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9u
KCl7fSxcblx0XHRvbkxvYWRzdGFydDogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvblBy
b2dyZXNzOiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9u
KCl7fSxcblx0XHRvbkNhbmNlbDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rp
b24ocmVzcG9uc2VUZXh0LCByZXNwb25zZVhNTCl7fSxcblx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9u
KHhocil7fSxcblx0XHRvbkV4Y2VwdGlvbjogZnVuY3Rpb24oaGVhZGVyTmFtZSwgdmFsdWUpe30s
XG5cdFx0b25UaW1lb3V0OiBmdW5jdGlvbigpe30sXG5cdFx0dXNlcjogJycsXG5cdFx0cGFzc3dv
cmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50aWFsczogZmFsc2UsKi9cblx0XHR1cmw6ICcnLFxuXHRc
dGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hN
TEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdBY2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0
bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9LFxuXHRcdGFzeW5jOiB0
cnVlLFxuXHRcdGZvcm1hdDogZmFsc2UsXG5cdFx0bWV0aG9kOiAncG9zdCcsXG5cdFx0bGluazog
J2lnbm9yZScsXG5cdFx0aXNTdWNjZXNzOiBudWxsLFxuXHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0
XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRcdGVuY29kaW5nOiAndXRmLTgnLFxuXHRcdGV2YWxTY3Jp
cHRzOiBmYWxzZSxcblx0XHRldmFsUmVzcG9uc2U6IGZhbHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5c
dFx0bm9DYWNoZTogZmFsc2Vcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25z
KXtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLnNldE9w
dGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpcy5oZWFkZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7
XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5nZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgeGhyID0gdGhp
cy54aHI7XG5cdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9IDQgfHwgIXRoaXMucnVubmluZykgcmV0
dXJuO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdHVzID0gMDtcblx0
XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgc3RhdHVzID0geGhyLnN0
YXR1cztcblx0XHRcdHRoaXMuc3RhdHVzID0gKHN0YXR1cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1
cztcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0
eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRz
dGFydCA9IGVtcHR5O1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0
aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblxuXHRcdHRoaXMu
cmVzcG9uc2UgPSB7dGV4dDogdGhpcy54aHIucmVzcG9uc2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMu
eGhyLnJlc3BvbnNlWE1MfTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRo
aXMsIHRoaXMuc3RhdHVzKSlcblx0XHRcdHRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQs
IHRoaXMucmVzcG9uc2UueG1sKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0
fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHN0YXR1cyA9IHRoaXMuc3Rh
dHVzO1xuXHRcdHJldHVybiAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApO1xuXHR9LFxu
XG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5c
dH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgvKGVjbWF8amF2YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0
SGVhZGVyKCdDb250ZW50LXR5cGUnKSkpIHJldHVybiBCcm93c2VyLmV4ZWModGV4dCk7XG5cdFx0
cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMub3B0aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0s
XG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1sKXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0
aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQpLCB4bWwpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dGV4dDog
dGV4dCwgeG1sOiB4bWx9KTtcblx0fSxcblxuXHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0
dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJndW1lbnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3Mn
LCBhcmd1bWVudHMpLmNhbGxDaGFpbigpO1xuXHR9LFxuXG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7
XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZmFpbHVy
ZScsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5c
dFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54
aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFydDogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmly
ZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jl
c3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZl
bnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0dGltZW91dDogZnVuY3Rpb24oKXtcblx0XHR0aGlz
LmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29u
OiAndGltZW91dCcsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0
aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0aGlzLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJl
dHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIu
Z2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHRj
aGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRydWU7XG5c
dFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlz
LmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0
aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzZW5kOiBmdW5jdGlvbihvcHRpb25zKXtcblx0
XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9ucykpIHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5vcHRp
b25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7
XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHRcdHZhciB0eXBlID0gdHlwZU9mKG9wdGlv
bnMpO1xuXHRcdGlmICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRp
b25zID0ge2RhdGE6IG9wdGlvbnN9O1xuXG5cdFx0dmFyIG9sZCA9IHRoaXMub3B0aW9ucztcblx0
XHRvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7ZGF0YTogb2xkLmRhdGEsIHVybDogb2xkLnVybCwg
bWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0aW9ucyk7XG5cdFx0dmFyIGRhdGEgPSBvcHRpb25zLmRh
dGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRv
TG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0Y2ggKHR5cGVPZihkYXRhKSl7XG5cdFx0XHRjYXNlICdl
bGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRhdGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7
XG5cdFx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5
U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0
XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlzLm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0
ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRhdGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5c
dFx0aWYgKHRoaXMub3B0aW9ucy5lbXVsYXRpb24gJiYgIVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlu
cyhtZXRob2QpKXtcblx0XHRcdHZhciBfbWV0aG9kID0gJ19tZXRob2Q9JyArIG1ldGhvZDtcblx0
XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0aG9kICsgJyYnICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0
XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy51cmxFbmNv
ZGVkICYmIFsncG9zdCcsICdwdXQnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBlbmNv
ZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5jb2RpbmcpID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRp
b25zLmVuY29kaW5nIDogJyc7XG5cdFx0XHR0aGlzLmhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0g
J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgKyBlbmNvZGluZztcblx0XHR9XG5c
blx0XHRpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWU7XG5cblx0XHR2
YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3Np
dGlvbiA+IC0xICYmICh0cmltUG9zaXRpb24gPSB1cmwuaW5kZXhPZignIycpKSA+IC0xKSB1cmwg
PSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3NpdGlvbik7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5v
Q2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/Jykg
KyBTdHJpbmcudW5pcXVlSUQoKTtcblxuXHRcdGlmIChkYXRhICYmIChtZXRob2QgPT0gJ2dldCcg
fHwgbWV0aG9kID09ICdkZWxldGUnKSl7XG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/Jykg
PiAtMSA/ICcmJyA6ICc/JykgKyBkYXRhO1xuXHRcdFx0ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5c
dFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0
eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5sb2Fkc3RhcnQuYmluZCh0aGlzKTtcblx0XHRcdHhoci5v
bnByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy5iaW5kKHRoaXMpO1xuXHRcdH1cblxuXHRcdHhoci5v
cGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5v
cHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29yZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlv
bnMud2l0aENyZWRlbnRpYWxzKSAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHhoci53aXRo
Q3JlZGVudGlhbHMgPSB0cnVlO1xuXG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMu
b25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO1xuXG5cdFx0T2JqZWN0LmVhY2godGhpcy5oZWFkZXJz
LCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1
ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMu
ZmlyZUV2ZW50KCdleGNlcHRpb24nLCBba2V5LCB2YWx1ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVj
dCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4aHIsIGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0
fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAn
cGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5hYmxlKHtyZWFzb246ICdzZW5kJ30pO1xu
XHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgncmVxdWVzdCcpO1xuXHRcdHhoci5zZW5kKGRhdGEp
O1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmFzeW5jKSB0aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0
XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudGltZW91dCkgdGhpcy50aW1lciA9IHRoaXMudGltZW91
dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1
cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR2YXIgeGhyID0gdGhpcy54
aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJU
aW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXHRc
dHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0
KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdHRoaXMueGhy
ID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtc
blx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnY2FuY2VsJywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIG1ldGhvZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3Qn
LCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdoZWFkJywgJ0dFVCcsICdQT1NUJywgJ1BVVCcs
ICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVBRCddLmVhY2goZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0
aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7XG5cdFx0dmFyIG9iamVjdCA9IHtcblx0XHRc
dG1ldGhvZDogbWV0aG9kXG5cdFx0fTtcblx0XHRpZiAoZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0
YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRoaXMuc2VuZChvYmplY3QpO1xuXHR9O1xufSk7XG5cblJl
cXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc2VuZCA9IHtc
blxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5nZXQoJ3Nl
bmQnKS5jYW5jZWwoKTtcblx0XHRzZW5kLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5y
ZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlmICghc2VuZCl7XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVl
c3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgbWV0aG9kOiB0aGlzLmdl
dCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1cmw6IHRoaXMuZ2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7
XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5kJywgc2VuZCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW5k
O1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1
cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0aGlzLmdldCgnc2VuZCcpO1xuXHRcdHNlbmRlci5zZW5k
KHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIub3B0aW9ucy51cmx9KTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0
LkhUTUxcblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0
aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggSFRNTCByZXNwb25zZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIFJl
cXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkhUTUxcblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhU
TUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xu
XHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0YXBwZW5kOiBmYWxzZSxcblx0XHRldmFsU2NyaXB0czog
dHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDog
J3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxc
blxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0
aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xuXG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRl
eHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNjcmlwdCl7XG5cdFx0XHRyZXNwb25zZS5qYXZhc2Ny
aXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xuXG5cdFx0dmFyIG1hdGNoID0gcmVzcG9uc2UuaHRtbC5t
YXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xcU10qPyk8XFwvYm9keT4vaSk7XG5cdFx0aWYgKG1hdGNo
KSByZXNwb25zZS5odG1sID0gbWF0Y2hbMV07XG5cdFx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgn
ZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5cblx0XHRyZXNwb25zZS50cmVlID0g
dGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJlc3BvbnNlLmVsZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50
cyhvcHRpb25zLmZpbHRlciB8fCAnKicpO1xuXG5cdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNw
b25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7XG5cdFx0aWYgKG9wdGlvbnMudXBkYXRlKXtc
blx0XHRcdHZhciB1cGRhdGUgPSBkb2N1bWVudC5pZChvcHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtc
blx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgdXBkYXRlLmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRz
KTtcblx0XHRcdGVsc2UgdXBkYXRlLnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0g
ZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQpe1xuXHRcdFx0dmFyIGFwcGVuZCA9IGRvY3VtZW50Lmlk
KG9wdGlvbnMuYXBwZW5kKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UuZWxl
bWVudHMucmV2ZXJzZSgpLmluamVjdChhcHBlbmQpO1xuXHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQo
dGVtcC5nZXRDaGlsZHJlbigpKTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMp
IEJyb3dzZXIuZXhlYyhyZXNwb25zZS5qYXZhc2NyaXB0KTtcblxuXHRcdHRoaXMub25TdWNjZXNz
KHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNlLmVsZW1lbnRzLCByZXNwb25zZS5odG1sLCByZXNwb25z
ZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlzLnJlc29sdmUoe3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVs
ZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRtbDogcmVzcG9uc2UuaHRtbCwgamF2YXNjcmlw
dDogcmVzcG9uc2UuamF2YXNjcmlwdH0pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRp
ZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBsb2FkID0g
dGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwoKTtcblx0XHRsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBs
b2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpO1xuXHRcdGlmICghbG9hZCl7XG5cdFx0XHRsb2Fk
ID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIHVwZGF0ZTog
dGhpcywgbWV0aG9kOiAnZ2V0J30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xu
XHRcdH1cblx0XHRyZXR1cm4gbG9hZDtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7
XG5cblx0bG9hZDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmdldCgnbG9hZCcpLnNlbmQoQXJyYXku
bGluayhhcmd1bWVudHMsIHtkYXRhOiBUeXBlLmlzT2JqZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9
KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogSlNP
TlxuXG5kZXNjcmlwdGlvbjogSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxuU2VlQWxzbzogPGh0dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5y
ZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIE51bWJlciwgRnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBK
U09OXG5cbi4uLlxuKi9cblxuaWYgKHR5cGVvZiBKU09OID09ICd1bmRlZmluZWQnKSB0aGlzLkpT
T04gPSB7fTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG52YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xc
XFxiJywgJ1xcdCc6ICdcXFxcdCcsICdcXG4nOiAnXFxcXG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xc
cic6ICdcXFxccicsICdcIicgOiAnXFxcXFwiJywgJ1xcXFwnOiAnXFxcXFxcXFwnfTtcblxudmFy
IGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7XG5cdHJldHVybiBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1
JyArICgnMDAwMCcgKyBjaHIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtc
bn07XG5cbkpTT04udmFsaWRhdGUgPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJp
bmcucmVwbGFjZSgvXFxcXCg/OltcIlxcXFxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAn
QCcpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8
bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPy9nLCAnXScpLlxuXHRc
dFx0XHRcdHJlcGxhY2UoLyg/Ol58OnwsKSg/OlxccypcXFspKy9nLCAnJyk7XG5cblx0cmV0dXJu
ICgvXltcXF0sOnt9XFxzXSokLykudGVzdChzdHJpbmcpO1xufTtcblxuSlNPTi5lbmNvZGUgPSBK
U09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShv
YmopO1xufSA6IGZ1bmN0aW9uKG9iail7XG5cdGlmIChvYmogJiYgb2JqLnRvSlNPTikgb2JqID0g
b2JqLnRvSlNPTigpO1xuXG5cdHN3aXRjaCAodHlwZU9mKG9iaikpe1xuXHRcdGNhc2UgJ3N0cmlu
Zyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyArIG9iai5yZXBsYWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJd
L2csIGVzY2FwZSkgKyAnXCInO1xuXHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdHJldHVybiAnWycg
KyBvYmoubWFwKEpTT04uZW5jb2RlKS5jbGVhbigpICsgJ10nO1xuXHRcdGNhc2UgJ29iamVjdCc6
IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFyIHN0cmluZyA9IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2go
b2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdFx0dmFyIGpzb24gPSBKU09OLmVuY29k
ZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChqc29uKSBzdHJpbmcucHVzaChKU09OLmVuY29kZShrZXkp
ICsgJzonICsganNvbik7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiAneycgKyBzdHJpbmcgKyAn
fSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzogY2FzZSAnYm9vbGVhbic6IHJldHVybiAnJyArIG9iajtc
blx0XHRjYXNlICdudWxsJzogcmV0dXJuICdudWxsJztcblx0fVxuXG5cdHJldHVybiBudWxsO1xu
fTtcblxuSlNPTi5zZWN1cmUgPSB0cnVlO1xuXG5cbkpTT04uZGVjb2RlID0gZnVuY3Rpb24oc3Ry
aW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0cmluZyB8fCB0eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5n
JykgcmV0dXJuIG51bGw7XG5cblx0aWYgKHNlY3VyZSA9PSBudWxsKSBzZWN1cmUgPSBKU09OLnNl
Y3VyZTtcblx0aWYgKHNlY3VyZSl7XG5cdFx0aWYgKEpTT04ucGFyc2UpIHJldHVybiBKU09OLnBh
cnNlKHN0cmluZyk7XG5cdFx0aWYgKCFKU09OLnZhbGlkYXRlKHN0cmluZykpIHRocm93IG5ldyBF
cnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRoZSBpbnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxl
ZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUuJyk7XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgn
KCcgKyBzdHJpbmcgKyAnKScpO1xufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1
ZXN0LkpTT05cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mg
d2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRh
dGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1JlcXVlc3Qs
IEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkpTT05cblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpT
T04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xu
XHRcdC8qb25FcnJvcjogZnVuY3Rpb24odGV4dCwgZXJyb3Ipe30sKi9cblx0XHRzZWN1cmU6IHRy
dWVcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnBh
cmVudChvcHRpb25zKTtcblx0XHRPYmplY3QuYXBwZW5kKHRoaXMuaGVhZGVycywge1xuXHRcdFx0
J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidc
blx0XHR9KTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2YXIganNv
bjtcblx0XHR0cnkge1xuXHRcdFx0anNvbiA9IHRoaXMucmVzcG9uc2UuanNvbiA9IEpTT04uZGVj
b2RlKHRleHQsIHRoaXMub3B0aW9ucy5zZWN1cmUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0
XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIFt0ZXh0LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJu
O1xuXHRcdH1cblx0XHRpZiAoanNvbiA9PSBudWxsKXtcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uU3VjY2Vzcyhqc29uLCB0ZXh0KTtcblx0XHRcdHRo
aXMucmVzb2x2ZSh7anNvbjoganNvbiwgdGV4dDogdGV4dH0pO1xuXHRcdH1cblx0fVxuXG59KTtc
blxuLypcbi0tLVxuXG5uYW1lOiBDb29raWVcblxuZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVh
dGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIGJyb3dzZXIgQ29va2llcy5cblxubGljZW5zZTog
TUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9u
cyBieSBQZXRlci1QYXVsIEtvY2ggKGh0dHA6Ly9xdWlya3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVz
OiBbT3B0aW9ucywgQnJvd3Nlcl1cblxucHJvdmlkZXM6IENvb2tpZVxuXG4uLi5cbiovXG5cbnZh
ciBDb29raWUgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IE9wdGlvbnMsXG5cblx0b3B0
aW9uczoge1xuXHRcdHBhdGg6ICcvJyxcblx0XHRkb21haW46IGZhbHNlLFxuXHRcdGR1cmF0aW9u
OiBmYWxzZSxcblx0XHRzZWN1cmU6IGZhbHNlLFxuXHRcdGRvY3VtZW50OiBkb2N1bWVudCxcblx0
XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0cE9ubHk6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6
ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0XHR0aGlzLmtleSA9IGtleTtcblx0XHR0aGlz
LnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtc
blx0XHRpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQo
dmFsdWUpO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZG9tYWluKSB2YWx1ZSArPSAnOyBkb21haW49
JyArIHRoaXMub3B0aW9ucy5kb21haW47XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1
ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9wdGlvbnMucGF0aDtcblx0XHRpZiAodGhpcy5vcHRpb25z
LmR1cmF0aW9uKXtcblx0XHRcdHZhciBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0
VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2
MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUgKz0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmlu
ZygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25zLnNlY3VyZSkgdmFsdWUgKz0gJzsgc2Vj
dXJlJztcblx0XHRpZiAodGhpcy5vcHRpb25zLmh0dHBPbmx5KSB2YWx1ZSArPSAnOyBIdHRwT25s
eSc7XG5cdFx0dGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZSA9IHRoaXMua2V5ICsgJz0nICsg
dmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVhZDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llLm1hdGNoKCcoPzpefDsp
XFxcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4cCgpICsgJz0oW147XSopJyk7XG5cdFx0cmV0
dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWVbMV0pIDogbnVsbDtcblx0fSxc
blxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdG5ldyBDb29raWUodGhpcy5rZXksIE9iamVj
dC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVyYXRpb246IC0xfSkpLndyaXRlKCcnKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuQ29va2llLndyaXRlID0gZnVuY3Rpb24oa2V5
LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykud3Jp
dGUodmFsdWUpO1xufTtcblxuQ29va2llLnJlYWQgPSBmdW5jdGlvbihrZXkpe1xuXHRyZXR1cm4g
bmV3IENvb2tpZShrZXkpLnJlYWQoKTtcbn07XG5cbkNvb2tpZS5kaXNwb3NlID0gZnVuY3Rpb24o
a2V5LCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS5kaXNwb3Nl
KCk7XG59O1xuXG4vKlxuLS0tXG5cbm5hbWU6IERPTVJlYWR5XG5cbmRlc2NyaXB0aW9uOiBDb250
YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRvbXJlYWR5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtCcm93c2VyLCBFbGVtZW50LCBFbGVtZW50LkV2ZW50XVxuXG5w
cm92aWRlczogW0RPTVJlYWR5LCBEb21SZWFkeV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24od2lu
ZG93LCBkb2N1bWVudCl7XG5cbnZhciByZWFkeSxcblx0bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxc
blx0c2hvdWxkUG9sbCxcblx0dGltZXIsXG5cdHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7XG5cbnZhciBkb21yZWFkeSA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGlt
ZW91dCh0aW1lcik7XG5cdGlmICghcmVhZHkpe1xuXHRcdEJyb3dzZXIubG9hZGVkID0gcmVhZHkg
PSB0cnVlO1xuXHRcdGRvY3VtZW50LnJlbW92ZUxpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywg
ZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuXHRc
dGRvY3VtZW50LmZpcmVFdmVudCgnZG9tcmVhZHknKTtcblx0XHR3aW5kb3cuZmlyZUV2ZW50KCdk
b21yZWFkeScpO1xuXHR9XG5cdC8vIGNsZWFudXAgc2NvcGUgdmFyc1xuXHRkb2N1bWVudCA9IHdp
bmRvdyA9IHRlc3RFbGVtZW50ID0gbnVsbDtcbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7
XG5cdGZvciAodmFyIGkgPSBjaGVja3MubGVuZ3RoOyBpLS07KSBpZiAoY2hlY2tzW2ldKCkpe1xu
XHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xu
fTtcblxudmFyIHBvbGwgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRp
ZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91dChwb2xsLCAxMCk7XG59O1xuXG5kb2N1bWVu
dC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+
Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBEaWVnbyBQZXJpbmkgaHR0cDovL2phdmFzY3Jp
cHQubndib3guY29tL0lFQ29udGVudExvYWRlZC9cbi8vIHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkg
dGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVhZHksIG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dc
bnZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24oKXtcblx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVu
dC5kb1Njcm9sbCgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVy
biBmYWxzZTtcbn07XG4vLyBJZiBkb1Njcm9sbCB3b3JrcyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1
c2VkIHRvIGRldGVybWluZSBkb21yZWFkeVxuLy8gICBlLmcuIGluIGFuIGlmcmFtZVxuaWYgKHRl
c3RFbGVtZW50LmRvU2Nyb2xsICYmICFkb1Njcm9sbFdvcmtzKCkpe1xuXHRjaGVja3MucHVzaChk
b1Njcm9sbFdvcmtzKTtcblx0c2hvdWxkUG9sbCA9IHRydWU7XG59XG4vKjwvbHRJRTg+Ki9cblxu
aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUpIGNoZWNrcy5wdXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBz
dGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG5cdHJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcg
fHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7XG59KTtcblxuaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2Un
IGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNo
ZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9IHRydWU7XG5cbmlmIChzaG91bGRQb2xsKSBwb2xsKCk7
XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0ge1xuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xu
XHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIHRo
YXQgZG9tcmVhZHkgZmlyZXMgYmVmb3JlIGxvYWRcbkVsZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5c
dGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAobG9hZGVkICYm
IHRoaXMgPT0gd2luZG93KSBmbi5jYWxsKHRoaXMpO1xuXHR9LFxuXHRjb25kaXRpb246IGZ1bmN0
aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0gd2luZG93KXtcblx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0
XHRkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5c
dH1cbn07XG5cbi8vIFRoaXMgaXMgYmFzZWQgb24gdGhlIGN1c3RvbSBsb2FkIGV2ZW50XG53aW5k
b3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5jdGlvbigpe1xuXHRsb2FkZWQgPSB0cnVlO1xufSk7XG5c
bn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIgogCiAvKioqLyB9KSwKIC8qIDQwNiAqLwpAQCAtMTEz
NjQxLDEzICsxMTM2NDEsMTMgQEAgbW9kdWxlLmV4cG9ydHMgPSAiLypqc2hpbnQgcXVvdG1hcms6
IGZhbAogLyogNDE0ICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1v
ZHVsZS5leHBvcnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
Mi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MFxuXG5USElTIENPREUgSVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE
LCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxu
TUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVy
c2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
b25zXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiAqL1xuXG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEw
LnggLyAyLjAueFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9u
cyBieTogQm9yaXMgWWFua292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hy
aXN0aWFuIEhvZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3Rl
dmUgRmVudG9uLCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRh
c3MgSWxpb3BvdWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNvbiBTd2Vhcmlu
Z2VuLCBTZWFuIEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2Vu
cyA8aHR0cHM6Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0
aHViLmNvbS9rc3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29t
L2Jhc2FyYXQ+LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVy
c29uPiwgRGVyZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwg
QW5kcmV3IEdhc3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhh
cnJpc29uIEZpc2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hp
IEtvbmRvIDxodHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxo
dHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6
Ly9naXRodWIuY29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pv
c2hTdHJvYmw+LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+
XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRl
bHlUeXBlZFxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdp
bGwgY29uZmlndXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNl
dHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJl
cXVlc3QgaGVhZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2Ug
aXQgd2lsbCBhY2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1v
ZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4
U2V0dXAoKSBtZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAg
ICAgKiBCeSBkZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGku
ZS4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25v
dXMgcmVxdWVzdHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVl
c3RzIGFuZCBkYXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNo
cm9ub3VzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1w
b3JhcmlseSBsb2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhl
IHJlcXVlc3QgaXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBm
YWxzZSB3aXRoIGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2Ug
dGhlIHN1Y2Nlc3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRo
ZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhS
LmRvbmUoKSBvciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAgICovXG4gICAg
YXN5bmM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sg
ZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkg
MS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlz
IHRvIHNldCBjdXN0b20gaGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVj
dHMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJu
aW5nIGZhbHNlIGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1
ZXN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxs
ZWQgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9y
ZVNlbmQ/IChqcVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTog
YW55O1xuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1
ZXN0ZWQgcGFnZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGlu
ZyBjYWNoZSB0byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBH
RVQgcmVxdWVzdHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0
aGUgR0VUIHBhcmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIg
dHlwZXMgb2YgcmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBh
IFVSTCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xu
ICAgIGNhY2hlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNh
bGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBj
YWxsYmFja3MgYXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1
bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0
IGFuZCBhIHN0cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJz
dWNjZXNzXCIsIFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9y
dFwiLCBvciBcInBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUg
c2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3
aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4g
ICAgY29tcGxldGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7
XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24g
cGFpcnMgdGhhdCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwg
Z2l2ZW4gaXRzIGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAg
ICBjb250ZW50cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRv
IGpRdWVyeS5hamF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBj
b250ZW50VHlwZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29t
L2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICog
V2hlbiBzZW5kaW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBE
ZWZhdWx0IGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVU
Ri04XCIsIHdoaWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBh
c3MgaW4gYSBjb250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQg
dG8gdGhlIHNlcnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBS
ZXF1ZXN0IHNwZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMg
VVRGLTg7IHNwZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93
c2VyIHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVudFR5cGU/OiBh
bnk7XG4gICAgLyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0
IG9mIGFsbCBBamF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBp
cyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhl
IGNhbGwgKCQuYWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8g
JC5hamF4KS5cbiAgICAgKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2gg
Y29udmVydGVyJ3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9y
bWVkIHZhbHVlIG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9c
biAgICBjb252ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAg
ICogSWYgeW91IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpT
T05QKSBvbiB0aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8g
dHJ1ZS4gVGhpcyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0
byBhbm90aGVyIGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9z
c0RvbWFpbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRo
ZSBzZXJ2ZXIuIEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVh
ZHkgYSBzdHJpbmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBT
ZWUgcHJvY2Vzc0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2lu
Zy4gT2JqZWN0IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwg
alF1ZXJ5IHNlcmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24g
dGhlIHZhbHVlIG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxu
ICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBi
ZSB1c2VkIHRvIGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3Qu
VGhpcyBpcyBhIHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNl
LiBZb3Ugc2hvdWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2Nl
cHRzIHR3byBhcmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIg
YW5kIHRoZSAnZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAo
ZGF0YTogYW55LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRh
dGEgdGhhdCB5b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlz
IHNwZWNpZmllZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1F
IHR5cGUgb2YgdGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBp
biAxLjQgSlNPTiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQg
d2lsbCBleGVjdXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJu
ZWQgYXMgYSBzdHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8q
KlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBU
aGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVy
eSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUg
dHlwZSBvZiBlcnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2Jq
ZWN0LCBpZiBvbmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1
bWVudCAoYmVzaWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwi
LCBhbmQgXCJwYXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRo
cm93biByZWNlaXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3Vj
aCBhcyBcIk5vdCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpR
dWVyeSAxLjUsIHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rp
b25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFu
ZGxlciBpcyBub3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21h
aW4gSlNPTlAgcmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBl
cnJvcj8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzog
c3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwg
QWpheCBldmVudCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVl
LiBTZXQgdG8gZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0
YXJ0IG9yIGFqYXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRv
IGNvbnRyb2wgdmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9iYWw/OiBib29s
ZWFuO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkv
dmFsdWUgcGFpcnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRw
UmVxdWVzdCB0cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJl
cXVlc3QgaXMgYWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFs
dWUgY2FuIGJlIGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2Fu
IGFsc28gYmUgb3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24u
ICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1
Y2Nlc3NmdWwgb25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3Qg
cmVxdWVzdC4gVGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRl
ci4gRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5
IDEuNCB0aGlzIHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0
aGUgc2VydmVyIHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlm
aWVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9u
bWVudCB0byBiZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0p
LCBldmVuIGlmIGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0
LiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9j
YWw6IGZpbGUsICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5n
IG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0
aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9c
biAgICBpc0xvY2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2Fs
bGJhY2sgZnVuY3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBi
ZSB1c2VkIGluc3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2Yg
dGhlIHF1ZXJ5IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291
bGQgcmVzdWx0IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2Yg
alF1ZXJ5IDEuNSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpR
dWVyeSBmcm9tIGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBh
dHRlbXB0aW5nIHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2Us
IHlvdSBzaG91bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5n
LiBGb3IgZXhhbXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tO
YW1lXCIgfVxuICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNw
ZWNpZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhp
cyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkg
Z2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2Ug
dGhlIHJlcXVlc3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlv
dSBtYXkgd2FudCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJs
ZSBiZXR0ZXIgYnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEu
NSwgeW91IGNhbiBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNo
IGNhc2UgdGhlIHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFs
dWUgb2YgdGhhdCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNrPzogYW55O1xu
ICAgIC8qKlxuICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBl
LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7
XG4gICAgLyoqXG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVl
c3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5c
biAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZh
dWx0LCBkYXRhIHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNo
bmljYWxseSwgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQg
YW5kIHRyYW5zZm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1
bHQgY29udGVudC10eXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElm
IHlvdSB3YW50IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBk
YXRhLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/
OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlw
dFwiIHRyYW5zcG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBc
Impzb25wXCIgb3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0
aGUgY2hhcnNldCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVz
dC4gVXNlZCB3aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0
aGUgc2FtZSBhcyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNj
cmlwdENoYXJzZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVy
aWMgSFRUUCBjb2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25z
ZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVs
LCB0aGUgc3RhdHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0
aGUgc3VjY2VzcyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5n
IDN4eCByZWRpcmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJv
ciBjYWxsYmFjay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2Rl
PzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0
byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBh
c3NlZCB0aHJlZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwg
Zm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBk
ZXNjcmliaW5nIHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1M
SHR0cFJlcXVlc3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGlu
ZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJl
IGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgc3Vj
Y2Vzcz8gKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTog
YW55O1xuICAgIC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9y
IHRoZSByZXF1ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3
aXRoICQuYWpheFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50
IHRoZSAkLmFqYXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBp
biBwcm9ncmVzcyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwg
aXQgaXMgcG9zc2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJl
IHNlbnQuIEluIGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmpl
Y3Qgd2lsbCBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsg
YWNjZXNzaW5nIGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBG
aXJlZm94IDMuMCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2Fu
Y2VsbGVkIGJ5IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2
ZXMgYWZ0ZXIgdGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1i
ZXI7XG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2Ug
dGhlIHRyYWRpdGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4g
ICAgdHJhZGl0aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJl
cXVlc3QgdG8gbWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4g
Tm90ZTogT3RoZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUs
IGNhbiBhbHNvIGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxs
IGJyb3dzZXJzLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICog
QSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQu
XG4gICAgICovXG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUg
dG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNj
ZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJp
bmc7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVx
dWVzdCBvYmplY3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxl
IChJRSksIHRoZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUg
eW91ciBvd24gaW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50
cyB0byB0aGUgZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAg
ICogQW4gb2JqZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUg
bmF0aXZlIFhIUiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0
aENyZWRlbnRpYWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQu
IEluIGpRdWVyeSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9w
YWdhdGVkIHRvIHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5n
IGl0IHdvdWxkIGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5k
IHVzaW5nIGpRdWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2
ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0
cmluZ106IGFueTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmpl
Y3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVy
eVByb21pc2U8YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTog
YW55O1xuICAgIGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAg
IEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlD
YWxsYmFjayB7XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4gICAgZGlzYWJs
ZSgpOiBhbnk7XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlb
XSk6IGFueTtcbiAgICBmaXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFu
eSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFu
O1xuICAgIGxvY2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSgu
Li5jYWxsYmFja3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJv
bWlzZXMgdG8gaW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwg
b25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1
ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkg
PT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBK
UXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4v
KlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNr
c1xuKi9cbmludGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNp
b25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlz
ZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJv
bWlzZTxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5
UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJv
bWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlz
ZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBw
aXBlKGRvbmVGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9
PiBhbnksIHByb2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxh
bnk+O1xuXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/
OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246
IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxs
OiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5y
ZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10p
ID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1
ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVy
aWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55
KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9
PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10p
ID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9u
OiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1
ZXJ5IFByb21pc2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55
W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNz
PzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAg
ICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86
ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jl
c3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFu
eSk6IEpRdWVyeVByb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1
ZXJ5IGRlZmVycmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZl
cnJlZDxUPiBleHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lv
bnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1
ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlE
ZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlE
ZWZlcnJlZDxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1
ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVy
eURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlE
ZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBK
UXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtd
KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuICAgIHJlc29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
biAgICByZXNvbHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBh
bnkpOiBKUXVlcnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1
ZXJ5IGV4dGVuc2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJh
c2VKUXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAg
ZGVsZWdhdGVUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xl
YW47XG4gICAgaXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBp
c1Byb3BhZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xu
ICAgIHByZXZlbnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xu
ICAgIHJlc3VsdDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xu
ICAgIHN0b3BQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFn
ZVk6IG51bWJlcjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59
XG5cbmludGVyZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2
ZW50T2JqZWN0IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTogYm9vbGVhbjtc
biAgICBtZXRhS2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRl
cmZhY2UgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmpl
Y3Qge1xuICAgIGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGll
bnRZOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtc
biAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVt
YmVyO1xuICAgIHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50
T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xu
ICAgIGNoYXJDb2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVy
O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VK
UXVlcnlFdmVudE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1c
blxuaW50ZXJmYWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2Jq
ZWN0LCBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVl
cnlLZXlFdmVudE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4g
ICAgQ29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5c
bmludGVyZmFjZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hN
b2RlbD86IGJvb2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tD
bG9uZT86IGJvb2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xl
YW47XG4gICAgY3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVh
bjtcbiAgICBodG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86
IGJvb2xlYW47XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVu
dD86IGJvb2xlYW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBi
b29sZWFuO1xuICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTog
Ym9vbGVhbjtcbiAgICBzdHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xl
YW47XG4gICAgdGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xu
ICAgIChvYmo6IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29s
ZWFuKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1
Y3QgalF1ZXJ5IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJh
dGVseSBpbnN0ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJy
aWRpbmcgdGhlIGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAq
IHJldHVybmluZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5
RXZlbnRDb25zdHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzog
YW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJv
cGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRl
cmZhY2UgdXNlZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBK
UXVlcnlFYXNpbmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmco
cDogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVy
eSAodGhvc2Ugb24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eVN0YXRpYyB7XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQ
IChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9m
IGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0
dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3
aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWph
eFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNo
cm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25m
aWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZh
dWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAq
L1xuICAgIGFqYXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTog
SlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMg
b3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFu
ZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGRhdGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9y
ZSBzcGFjZS1zZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5k
bGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAg
ICovXG4gICAgYWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6
IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIp
ID0+IGFueSk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlv
bnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50
IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0
dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAo
b3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRp
bmdzO1xuXG4gICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBB
amF4IHJlcXVlc3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAg
ICogQHBhcmFtIG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJl
IHRoZSBkZWZhdWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAg
ICAgKi9cbiAgICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtc
blxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQ
IEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWlu
aW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhw
ZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBq
c29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBM
b2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNo
IHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qg
b3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4g
ICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVk
IGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlw
ZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQg
R3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJs
OiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVz
OiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBK
UXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2lu
ZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5n
IGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAq
IEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhl
IHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJh
Y2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAg
ICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBz
ZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3Ig
aHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNj
ZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9
PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExv
YWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mg
QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTog
YW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVy
eVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNl
cnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJs
IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50
LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNl
bnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNz
IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNj
ZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBz
dWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhS
KSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQg
ZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBz
dHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAg
KiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYg
dGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywg
ZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExv
YWQgYSBKYXZhU2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVx
dWVzdCwgdGhlbiBleGVjdXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmlu
ZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAg
KiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYg
dGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBK
UXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtc
blxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQ
IFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFp
bmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFt
IHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1
ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBi
ZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2Yg
ZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNz
ICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6
IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6
IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAv
KipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJl
cXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl
IFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEg
cGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRo
ZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhh
dCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5
cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBh
cmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBE
ZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwp
LlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/
OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBk
YXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBz
dHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAg
KiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYg
dGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBi
dXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUg
dHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdl
bnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBw
b3N0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4
dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3Ry
aW5nKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxi
YWNrcyBsaXN0IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBj
YWxsYmFjayBsaXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBs
aXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNr
IGxpc3QgYmVoYXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBK
UXVlcnlDYWxsYmFjaztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBl
eGVjdXRpb24gb2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aG9sZCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQg
b3IgcmVsZWFzZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7
XG5cbiAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAo
ZWxlbWVudDogRWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAg
ICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5
KTogSlF1ZXJ5O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFu
eVtdKTogSlF1ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1
aXNoIGpRdWVyeSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gcmVtb3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFs
bCBqUXVlcnkgdmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVy
eSBpdHNlbGYpLlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6
IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2Fs
bGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVm
ZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBv
ciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZl
cnJlZHM6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAg
IC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25z
IGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0
aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2Ny
aXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpR
dWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0
ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxs
eSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVj
dHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4u
LmRlZmVycmVkczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsg
W2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4gICAgLyoqXG4g
ICAgICogU3RvcmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQg
ZWxlbWVudC4gUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRh
LlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRv
IHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xu
ICAgIGRhdGE8VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtc
biAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRo
ZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBv
ciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5c
biAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBz
ZXQuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFu
eTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9y
IHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUp
LCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0
YS5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1
ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhh
c0RhdGEoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBF
bGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBF
bGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVl
cnk7XG5cbiAgICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0Pzog
KGRlZmVycmVkOiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47
XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6
IG51bWJlcjsgc3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDog
bnVtYmVyOyB9OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xu
ICAgIHByb3h5KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4dDogYW55LCAuLi5h
cmdzOiBhbnlbXSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywg
Li4uYXJnczogYW55W10pOiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3Rv
cjtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtc
blxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8v
VE9ETzogRGVjaWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xl
YW47XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxu
ICAgIC8vIFV0aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFp
bmVkOiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxs
YmFjazogKGluZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBh
bnk7XG4gICAgZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5
OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTogYW55O1xuICAg
IGVhY2g8VD4oY29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVy
LCB2YWx1ZU9mRWxlbWVudDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDog
YW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFy
Z2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBz
dHJpbmcpOiBhbnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZB
cnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xl
YW4pOiBUW107XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5k
ZXg/OiBudW1iZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbjtc
biAgICBpc0VtcHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9i
ajogYW55KTogYm9vbGVhbjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgaXNQbGFpbk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBh
bnkpOiBib29sZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAg
bWFrZUFycmF5KG9iajogYW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwg
Y2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUp
OiBVW107XG4gICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFu
eSwgaW5kZXhJbkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0
OiBUW10sIHNlY29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vj
b25kOiBVW10pOiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93KCk6IG51bWJl
cjtcblxuICAgIHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAg
KiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZGF0YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9c
biAgICBwYXJzZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVs
ZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVl
cnk7XG5cbiAgICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFu
eSk6IHN0cmluZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5cbiAgICAvKipc
biAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9kZXMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBA
cGFyYW0gY29udGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGlj
aCB0aGUgSFRNTCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNj
cmlwdHMgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFz
c2VkIGluIHRoZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJp
bmcsIGNvbnRleHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFuKTogYW55W107
XG5cbiAgICBBbmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFu
eSk6IGFueTtcblxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBq
UXVlcnkgaW5zdGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFK
QVhcbiAgICBhamF4Q29tcGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJv
cihoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0
aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6
IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6
IEpRdWVyeTtcbiAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IGFqYXhTdG9wKGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3VjY2Vzcyho
YW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9u
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBh
bnksIGNvbXBsZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztc
biAgICBzZXJpYWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBh
ZGRDbGFzcyhjbGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzog
KGluZGV4OiBhbnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICAvLyBodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6
IHN0cmluZztcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpR
dWVyeTtcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnks
IGF0dHI6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBoYXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1s
KCk6IHN0cmluZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBo
dG1sKGh0bWxDb250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAg
IHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0
eVZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRl
TmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1
ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6
IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAg
IHZhbCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwg
dmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2
YWx1ZSBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0
IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1l
IEEgQ1NTIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6
IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMg
Zm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBw
cm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2
YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlO
YW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0
IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVu
dHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5h
bWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHku
XG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBm
b3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBy
b3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZh
bHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5h
bWU6IHN0cmluZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNl
dCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1l
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBu
YW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5
LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltd
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGll
cyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFt
IHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBB
IGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50
IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0
aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3Mo
cHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmlu
ZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBD
U1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBw
YXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlz
IHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUg
ZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAg
Ki9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwg
dmFsdWU6IG51bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBv
bmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRz
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5
LXZhbHVlIHBhaXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGllczogT2JqZWN0
KTogSlF1ZXJ5O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51
bWJlcik6IEpRdWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBo
ZWlnaHQoZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICBpbm5lckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJl
cik6IEpRdWVyeTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgo
dmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsg
dG9wOiBudW1iZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4g
ICAgb2Zmc2V0KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgb3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4g
ICAgb3V0ZXJIZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBK
UXVlcnk7XG5cbiAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVy
O1xuICAgIG91dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4p
OiBKUXVlcnk7XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7
IH07XG5cbiAgICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBu
dW1iZXIpOiBKUXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRv
cCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdp
ZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpR
dWVyeTtcbiAgICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7
XG4gICAgZGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRh
dGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvLyBEZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTog
SlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVy
dGllczogYW55LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtc
biAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0
cmluZywgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRp
ZXM6IGFueSwgb3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21w
bGV0ZT86IEZ1bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lh
bEVhc2luZz86IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIs
IHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFu
eSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJh
dGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxu
ICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVh
c2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xl
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xl
KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86
IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzog
YW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3du
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24o
ZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/
OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVl
PzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVl
PzogYW55LCBjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVy
eTtcblxuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7
XG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzog
YW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xu
XG4gICAgLy8gRXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2
ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcs
IHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFu
eVtdKTogSlF1ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/OiBhbnksIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAg
IGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Y2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlj
a1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlj
a1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBkYmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIGRibGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9y
OiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcImZvY3VzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZv
Y3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
Zm9jdXMoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5n
IGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIGZvY3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgZm9jdXNvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQg
dHdvIGhhbmRsZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVu
IHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IG1vdXNlIHBvaW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
T3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0
aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBz
aW5nbGUgaGFuZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hl
biB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9c
biAgICBob3ZlcihoYW5kbGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93
blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25c
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAga2V5ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBrZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAga2V5ZG93bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmln
Z2VyIHRoZSBcImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBr
ZXlwcmVzcygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFu
ZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2Fk
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0
YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2
ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0
YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25c
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBtb3VzZWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBh
c3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IG1vdXNlZG93bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNlZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUg
bW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJt
b3VzZWxlYXZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZl
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUg
ZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBh
biBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZl
bnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZW1vdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlbW92ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlN
b3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmln
Z2VyIHRoZSBcIm1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBt
b3VzZW91dCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vv
dmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50
RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91
c2V1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
dXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2V1cChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlN
b3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1v
dmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlv
bmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwi
a2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxl
Y3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFz
c2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUg
ZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihl
dmVudHM6IHN0cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVt
b3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1
Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVy
IGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNw
ZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9u
ZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNw
YWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3Vz
bHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBz
ZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAu
b24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZl
bnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Ig
b25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVz
IGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24u
bXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxv
d2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJu
IGZhbHNlLiBSZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBh
c3NlZCB0byBqUXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJz
IG9uIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFs
ICg/IHN5bnRheCkuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24g
Zm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0
eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlk
b3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5n
IHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQg
dHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRo
ZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQg
ZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2Vk
IGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZh
bHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9u
ZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBh
bmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15
UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZp
bHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dl
ciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVu
dCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVu
dC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBp
biBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
IFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVu
Y3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZl
bnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVu
dHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9y
ZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFu
ZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZv
ciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5n
IHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQg
d2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVk
LCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0
ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUg
aGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAg
IG9uKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRh
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBh
biBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0
IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0
eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5h
bWVzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0
cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9y
IHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBl
bGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0
cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2gg
YXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAg
KiBAcGFyYW0gZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhh
bmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBl
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0
ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wi
IG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVj
dG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVt
ZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBv
bWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhl
IHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFs
c28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2Vz
IHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9y
OiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50
IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBw
ZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAg
KiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5k
YW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYg
dGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmln
Z2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJh
bSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hl
biBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNl
IGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBs
eSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNl
bGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEg
aGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVj
dXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVw
cmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9u
YWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlv
biB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3Ig
QSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0
ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBp
cyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCBy
ZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8g
YmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1
cnMuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNl
bGVjdG9yPzogc3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAg
KiBTcGVjaWZ5IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9h
ZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGFmdGVyIHRoZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVu
Y3Rpb24pOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwi
IGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2
YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICByZXNpemUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6
ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJz
Y3JvbGxcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9s
bFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgc2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBzY3JvbGwoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwic2VsZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3Qo
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgc2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAg
c3VibWl0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihl
dmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAg
ICB0cmlnZ2VyKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdn
ZXJIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTog
T2JqZWN0O1xuXG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQo
ZXZlbnRUeXBlOiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVn
YXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUo
c2VsZWN0b3I6IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1l
c3BhY2U6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7
XG4gICAganF1ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRh
OiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAg
cHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpR
dWVyeTtcblxuICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtd
KTogSlF1ZXJ5O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBhcHBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1
bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVu
ZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtd
KTogSlF1ZXJ5O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgY2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFB
bmRFdmVudHM/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFy
Z2V0OiBhbnkpOiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5
O1xuXG4gICAgcHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5k
KGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHBy
ZXBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFu
eSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICByZXBsYWNlV2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztc
biAgICB0ZXh0KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6
IChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IHRvQXJyYXkoKTogYW55W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3
cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTog
SlF1ZXJ5O1xuXG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xu
ICAgIHdyYXBJbm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
Ly8gTWlzY2VsbGFuZW91c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1l
bnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6IGFueTtcblxu
ICAgIGluZGV4KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVy
O1xuICAgIGluZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNc
biAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJp
bmddOiBhbnk7XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVy
c2luZ1xuICAgIGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xu
ICAgIGFkZCguLi5lbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJl
bihzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVt
ZW50KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xv
c2VzdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwg
Y29udGV4dD86IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxu
ICAgIGVuZCgpOiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4g
ICAgZmlsdGVyKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChp
bmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpR
dWVyeTtcbiAgICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVj
dG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4g
ICAgZmluZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxu
ICAgIGhhcyhzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVs
ZW1lbnQpOiBKUXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAg
ICBpcyhmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50
OiBhbnkpOiBib29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxh
c3QoKTogSlF1ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVu
dDogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICBuZXh0VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBuZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpR
dWVyeTtcbiAgICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVl
cnk7XG5cbiAgICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzog
KGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDogYW55KTogSlF1
ZXJ5O1xuICAgIG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgp
OiBKUXVlcnk7XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBwYXJlbnRzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGls
KHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50
c1VudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAg
cGFyZW50c1VudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4g
ICAgcHJldihzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0
b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcs
IGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1l
bnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5
LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6
IEpRdWVyeTtcblxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVOYW1lPzogc3Ry
aW5nKTogYW55W107XG4gICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxs
YmFjazogYW55KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTog
SlF1ZXJ5O1xufVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtc
bn1cbmRlY2xhcmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1
ZXJ5U3RhdGljO1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0
aW9ucyBmb3IgQW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3Jn
XG4vLyBEZWZpbml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdv
dmlsYXI+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0Rl
ZmluaXRlbHlUeXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0
aWM7XG5cbi8vIFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRl
cmZhY2UgRnVuY3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbmRlY2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVy
cyBleHRlbmQgdGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7
XG4gICAgICAgICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBBbmd1bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGlj
IHtcbiAgICAgICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55
W10pOiBGdW5jdGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxl
cz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxl
bWVudDogSlF1ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4g
ICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRv
LklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwg
bW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNv
dXJjZTogYW55LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1
Z21lbnRlZEpRdWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6
IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3Vy
Y2VzOiBhbnlbXSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2
YWx1ZTogYW55LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55O1xuICAgICAg
ICBmcm9tSnNvbihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFu
eSk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0
b3JTZXJ2aWNlO1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTog
YW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xu
ICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc051bWJl
cih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJv
b2xlYW47XG4gICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBp
c1VuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjog
c3RyaW5nKTogc3RyaW5nO1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBs
aWNhdGlvblxuXHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5n
dWxhciBtb2R1bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5n
dWxhci5Nb2R1bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAgICAvKiogbmFt
ZSBvZiB5b3VyIG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6
IHN0cmluZyxcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBv
biAqL1xuICAgICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZp
Z0Z1bmN0aW9uPzogYW55KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6
IHZvaWQ7XG4gICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmlu
ZztcbiAgICAgICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJz
aW9uOiB7XG4gICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBtYWpvcjogbnVt
YmVyO1xuICAgICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVy
O1xuICAgICAgICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJp
bmcsIGFuaW1hdGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0
aW9uKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVs
ZTtcbiAgICAgICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAg
LyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8g
cmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRp
bmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMg
bWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1v
ZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5j
dGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZh
bHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9iamVjdCk6IElN
b2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3Ry
dWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJp
bmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAg
IGNvbnRyb2xsZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZl
KG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAg
ICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5l
QW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmpl
Y3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRl
ckZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFt
ZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAg
ICAgICBmaWx0ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihu
YW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3Ry
dWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3Qp
OiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24p
OiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTog
SU1vZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5s
aW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2Vydmlj
ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywg
dmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1v
ZHVsZTtcblxuICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAg
ICAgICAgcmVxdWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2Fy
eSB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZl
cnkgZWxlZ2FudFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5z
dGVhZCBvZiBhdHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8g
dGhpcyBzaG91bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3Jl
YXRlcyB0aGlzIHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2
NTY1NlxuXHRbbmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBj
bGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAg
ICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1h
dGlvbiB3aWxsIGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9u
LlxuICAgICAgICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAg
Ly8gUmVtb3ZlcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwg
cGFyYW1ldGVyIGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJl
IGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAg
IC8vIHRoZSBjbGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0
cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1
ZS5cbiAgICAgICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAg
ICAgLy8gT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhl
IG9ic2VydmVyIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAk
ZGlnZXN0XG4gICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlz
IHRoZW4gaW52b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVl
IGNoYW5nZXMuXG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkp
PT5hbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRy
aWJ1dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAg
ICAgLy8gdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBh
Y3R1YWwgbmFtZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAg
ICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAg
ICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAg
JGVycm9yOiBhbnk7XG4gICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29u
dHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01v
ZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAg
ICAkc2V0UHJpc3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBOZ01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAg
ICAgICAkcmVuZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJy
b3JLZXk6IHN0cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3Vt
ZW50YXRpb24gc3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBi
dXQgb3RoZXJcbiAgICAgICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21tb24gdG8gdXNl
IHRoZW0uXG4gICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAg
ICR2aWV3VmFsdWU6IGFueTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAg
ICRwYXJzZXJzOiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZv
cm1hdHRlcltdO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0aW5lOiBib29s
ZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtc
biAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2Rl
bFBhcnNlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJTW9kZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRhcHBseSgpOiBh
bnk7XG4gICAgICAgICRhcHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4
cDogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5h
bWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVz
dHJveSgpOiB2b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5h
bWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8v
IERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50
YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdz
PzogT2JqZWN0KTogYW55O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2NvcGU6IElTY29w
ZSkgPT4gYW55LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRp
b24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMg
b24gaXRcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAg
ICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lk
O1xuXG4gICAgICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBj
aGVja2luZyBzdHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3Bl
O1xuXG4gICAgICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFy
RXZlbnQsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0
Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVh
bGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lv
bjogc3RyaW5nLCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29w
ZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xu
ICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBs
aXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4g
ICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxp
c3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+
IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdh
dGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1
ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtc
biAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3Bl
KSA9PiBhbnksIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6
IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDogSVNjb3BlO1xu
XG4gICAgICAgICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAg
ICAgICQkaXNvbGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJ
U2NvcGU7XG4gICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJp
bmc7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFBy
ZXZlbnRlZDogYm9vbGVhbjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBldmVudHMgdGhh
dCB3ZXJlICRlbWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5k
b3cge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4g
ICAgLy8gVE9ETyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNv
dXJjZSBjb2RlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElCcm93c2Vy
U2VydmljZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtc
biAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBi
b29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNl
PGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IEludGVydmFsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kaW50ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUlu
dGVydmFsU2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwg
Y291bnQ/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4g
ICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5h
bWU6IHN0cmluZyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTog
c3RyaW5nLCBmaWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6
IHN0cmluZztcblxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAg
Ly8gQ2hlY2sgYW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJF
Ul9GT1JNQVRTOiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJ
TUVfRk9STUFUUzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1
cmFsQ2F0OiAobnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxv
Y2FsZU51bWJlckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5n
O1xuICAgICAgICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVO
dW1iZXJQYXR0ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtc
biAgICAgICAgbWluSW50OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAg
ICAgbWF4RnJhYzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9z
U3VmOiBzdHJpbmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0
cmluZztcbiAgICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBudW1iZXI7XG4g
ICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xu
ICAgICAgICBNT05USDogc3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xu
ICAgICAgICBEQVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5nW107XG4gICAg
ICAgIEFNUE1TOiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNo
b3J0OiBzdHJpbmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRl
OiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRl
OiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1l
OiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAg
ICAgZGVidWc6IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGlu
Zm86IElMb2dDYWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9n
Q2FsbDtcbiAgICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZh
Y2Ugc28gd2UgY2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVs
ZS5cbiAgICBpbnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczogYW55W10pOiB2
b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBhcnNlU2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAg
ICAgIChleHByZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFu
eSwgbG9jYWxzPzogYW55KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92
aWRlZCwgdW5kZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9u
XG4gICAgICAgIC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEg
dmFsdWUgZm9yIGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3aGFudHMgdG8g
dW5kZWZpbmUgaXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAg
ICBhc3NpZ24oY29udGV4dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0
aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZp
Y2Uge1xuICAgICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6IHN0cmluZztc
biAgICAgICAgaGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAg
ICBob3N0KCk6IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgo
bmV3UGF0aDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1i
ZXI7XG4gICAgICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBzZWFyY2gocGFy
YW1ldGVyc01hcDogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFt
ZXRlcjogc3RyaW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAg
ICAgICAgdXJsKCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9u
U2VydmljZTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5k
cyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAg
ICAgIGhhc2hQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAg
ICAgaHRtbDVNb2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0
ZXMgdGhhdCBwYXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRp
b24gdGVzdHMgaXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAv
LyBzaW5jZSB0aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29s
ZWFuKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gRG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7
XG4gICAgICAgIChleGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNl
IGV4dGVuZHMgSlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBh
bGwocHJvbWlzZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAg
ZGVmZXI8VD4oKTogSURlZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTog
SVByb21pc2U8dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1
bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRS
ZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxi
YWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0
aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21p
c2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5
Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAg
ICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBU
UmVzdWx0LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlD
YWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4g
ICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQ
cm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1
bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJv
bWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNv
bjogYW55KSA9PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxs
eTxUUmVzdWx0PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZh
bHVlPzogVCk6IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAg
ICAgICBub3RpZnkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6IElQcm9taXNl
PFQ+O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9s
bFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFu
Y2hvclNjcm9sbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9y
U2Nyb2xsU2VydmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJQW5jaG9yU2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAg
ICAgZGlzYWJsZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBM
ZXRzIG5vdCBmb2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4g
RXZlbiB0aG91Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBi
eSB0aGUgaW1wbGVtZW50YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQg
ZmluZCBpdCB1c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2Fj
aGUgb2JqZWN0LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNh
cGFjaXR5OiBudW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmlu
Zywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxu
ICAgICAgICAvLyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5m
bygpOiBhbnk7XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtc
biAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAg
ICAgICAgICAgIC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5k
YXRvcnkgb3B0aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07
XG4gICAgICAgIHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBn
ZXQgKGtleTogc3RyaW5nKTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lk
O1xuICAgICAgICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtc
biAgICAgICAgKGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdG
dW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247
XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2lu
Z0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlv
bjtcbiAgICAgICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtp
bmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rp
b247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZl
RmFjdG9yeTogRnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9j
dW1lbnRlZCwgYnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVz
TWFwOiBhbnkpOiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVt
cGxhdGVMaW5raW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9y
Y2UgY2xvbmVBdHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xv
bmVBdHRhY2hGbj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENv
bnRyb2xsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRjb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRjb250cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUNvbnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3Vt
ZW50YXRpb24gZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAg
IChjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIChjb250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVBy
b3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3Ry
dWN0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBk
ZXBlbmRlbmN5QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0
aG9kIGFuZCB1cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVz
dENvbmZpZyk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBS
ZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAo
dXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgaGVhZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlz
ZTxhbnk+O1xuICAgICAgICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6
IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnks
IFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVy
bDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8
YW55PjtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZv
ciBkZWJ1Z2dpbmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAg
ICAgcGVuZGluZ1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3Qg
Zm9yIGhpbnRpbmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxl
IGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAg
aW50ZXJmYWNlIElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAg
ICAgIHVybDogc3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhY
IGl0IGhhcyBpdCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBp
dCBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/
OiBhbnk7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8g
VGhlc2UgYWNjZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlc
biAgICAgICAgZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAg
ICAgICAgdHJhbnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8v
IG51bWJlciB8IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2Fs
bGJhY2s8VD4ge1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6ICho
ZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZv
aWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtc
biAgICAgICAgZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVh
ZGVycz86IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgY29uZmlnPzog
SVJlcXVlc3RDb25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBl
eHRlbmRzIElQcm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9t
aXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNr
OiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhl
bjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJh
Y2tBcmc8VD4pID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJv
bWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAg
dGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2Fs
bGJhY2tBcmc8VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3Bv
bnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3Vs
dD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2Vydmlj
ZVByb3ZpZGVyIHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBp
bnRlcmNlcHRvcnM6IGFueVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9yczogYW55W107
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFj
a2VuZFxuICAgIC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRp
cmVjdGx5LlxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tl
bmRTZXJ2aWNlIHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25h
dHVyZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcs
IHBvc3Q/OiBhbnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/
OiBudW1iZXIsIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlU2Vydmlj
ZSB7XG4gICAgICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4p
OiBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xu
ICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJ
bnRlcnBvbGF0aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55KTogc3RyaW5nO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2
aWNlUHJvdmlkZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0
YXJ0U3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAg
ZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJ
SW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBUZW1wbGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRz
IElTY29wZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3Rl
ZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRD
c3ModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55
O1xuXHRcdGdldFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNv
dXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6
IGFueTtcblx0XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IChjb250
ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9u
OiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNl
QXNIdG1sKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9
PiBhbnk7XG5cdFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnks
IGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246
IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VB
c1VybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4g
YW55O1xuXHRcdHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRy
dXN0QXNIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBh
bnk7XG5cdFx0dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RB
c1VybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQ
cm92aWRlciB7XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7
XG4gICAgICAgIGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFu
eTtcbiAgICAgICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAg
ICAgIHZhbHVlT2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJ
U2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbGFja2xpc3QoYmxhY2tsaXN0
OiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJsV2hpdGVsaXN0KHdoaXRlbGlzdDog
YW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERp
cmVjdGl2ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29t
cGlsZVByb3ZpZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2d1aWRlL2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJm
YWNlIElEaXJlY3RpdmV7XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRl
RWxlbWVudDogYW55LFxuICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRl
cyxcbiAgICAgICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdG
bjogRnVuY3Rpb24pID0+IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICBjb250
cm9sbGVyPzogYW55O1xuICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxp
bms/OlxuICAgICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVs
ZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMs
XG4gICAgICAgICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4gdm9pZDtcbiAg
ICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAg
IHJlcGxhY2U/OiBib29sZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0
cmljdD86IHN0cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzog
YW55O1xuICAgICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWluYWw/OiBib29s
ZWFuO1xuICAgICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1
bGFyLmVsZW1lbnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVn
bWVudGVkIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBz
ZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4
dGVuZHMgSlF1ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/
OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAg
ICAgICAgKG9iamVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6
IEZ1bmN0aW9uKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBhbnlbXSk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAg
Ly8gVE9ETzogZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAg
ICAgICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAg
ZmluZChlbGVtZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajog
SlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0
cmluZyk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBzY29wZSgpOiBJ
U2NvcGU7XG5cbiAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6
IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55
OyB9KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtc
blxuXG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVs
ZSAoYW5ndWxhci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxl
IGF1dG8ge1xuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIEluamVjdG9yU2Vy
dmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4k
aW5qZWN0b3JcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElJbmpl
Y3RvclNlcnZpY2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5n
W107XG4gICAgICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10p
OiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAg
ICAgICAgaW5zdGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55
KTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlb
XSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFu
eSwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAgICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAgICAgaW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1
bWVudGF0aW9uIHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFj
dHVhbFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRo
aW5nLlxuICAgICAgICAgICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTog
YW55O1xuICAgICAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9p
ZDtcblxuICAgICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5j
dGlvbik6IHZvaWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0
b3JJbmxpbmU6IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5n
LCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7
XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rp
b246IGFueVtdKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5h
bWU6IHN0cmluZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVBy
b3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlk
ZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAg
ICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2
aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMv
VG9kb0l0ZW0udHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBl
eHBvcnQgY2xhc3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAg
IHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9v
bGVhblxuICAgICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2Nv
cGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4
dGVuZHMgbmcuSVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBz
dHJpbmc7XG5cdFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2Rv
SXRlbTtcblx0XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVy
O1xuXHRcdGFsbENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0
c3RhdHVzRmlsdGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcu
SUxvY2F0aW9uU2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFj
ZXMvSVRvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2Ug
SVRvZG9TdG9yYWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBU
b2RvSXRlbVtdKTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0
b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxh
Y2VzIGZvY3VzIG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVz
c2lvbiBpdCBiaW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5j
dGlvbiB0b2RvRm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3Rp
dmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1l
bnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2go
YXR0cmlidXRlcy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkg
e1xuXHRcdFx0XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxz
ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0
dG9kb0ZvY3VzLiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9C
bHVyLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4g
ICAgICogRGlyZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVt
ZW50IGl0IGlzIGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1
bmN0aW9uIHRvZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4ge1xuICAg
ICAgICAgICAgbGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJp
YnV0ZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgp
ID0+IHsgJHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAg
ICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVy
Jyk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2
ZXMvVG9kb0VzY2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0
Y29uc3QgRVNDQVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5j
ZWxzIGVkaXRpbmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAq
L1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRy
ZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnks
IGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAo
ZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkg
e1xuXHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRc
dFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAo
KSA9PiB7IGVsZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5c
dH1cbn1cbi8vIHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAg
J3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBh
bmQgcmV0cmlldmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9y
dCBjbGFzcyBUb2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAg
U1RPUkFHRV9JRCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0
ICgpOiBUb2RvSXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3Rv
cmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAg
ICAgICBwdXQodG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5z
ZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAg
fVxuICAgIH1cbn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xu
XHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRo
ZSBhcHAuIFRoZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhl
IG1vZGVsIHZpYSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1v
ZGVsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5c
dGV4cG9ydCBjbGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtd
O1xuXG5cdFx0Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmpl
Y3RvciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBp
bnRvIGNvbnN0cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8g
dGhlIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291
bnQgYW5kIHR5cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUv
ZGlcblx0XHRwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRc
dCckbG9jYXRpb24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXIn
XG5cdFx0XTtcblxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJK
UyAkaW5qZWN0b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFw
cGxpY2F0aW9uLnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBp
biBpbmRleC5odG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRv
ZG9TY29wZSxcblx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxu
XHRcdFx0cHJpdmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBm
aWx0ZXJGaWx0ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0
b2RvU3RvcmFnZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRz
Y29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3
IG1vZGVsJy4gV2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRo
ZSBzY29wZVxuXHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2
aWV3IC8gSFRNTFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcg
Zm9yIGV2ZW50cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNl
ciBpbnB1dFxuXHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBldmVudCB3aXRo
IGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1
YnNjcmliZS5cblx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9z
KCksIHRydWUpO1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9
PiB0aGlzLm9uUGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcn
KSAkbG9jYXRpb24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9u
O1xuXHRcdH1cblxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3Bl
LnN0YXR1c0ZpbHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0
ZWQ6IGZhbHNlIH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxl
dGVkOiB0cnVlIH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4k
c2NvcGUucmVtYWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNv
bXBsZXRlZDogZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0g
dGhpcy50b2Rvcy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRo
aXMuJHNjb3BlLmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRc
dHRoaXMudG9kb1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8o
KSB7XG5cdFx0XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJp
bSgpO1xuXHRcdFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0
XHR9XG5cblx0XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2Up
KTtcblx0XHRcdHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9k
byh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0
b2RvSXRlbTtcblxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0
aW5nIGlzIGNhbmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3Vs
YXIuZXh0ZW5kKHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0
ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2Rv
SXRlbSldID0gdGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2
ZXJ0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRl
bSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRz
Y29wZS5vcmlnaW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVk
KSB7XG5cdFx0XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0
XHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0
XHR9XG5cdFx0XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRc
dGlmICghdG9kb0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVt
KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkg
e1xuXHRcdFx0dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwg
MSk7XG5cdFx0fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50
b2RvcyA9IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0
ZW0uY29tcGxldGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikg
e1xuXHRcdFx0dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxl
dGVkID0gY29tcGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGljYXRpb24udHNc
blxuLyoqXG4gKiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2Fu
Z3VsYXIuTW9kdWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0Jztcblxu
ICAgIHZhciB0b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAg
ICAgIC5jb250cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVj
dGl2ZSgndG9kb0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9G
b2N1cycsIHRvZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0
b2RvRXNjYXBlKVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3Jh
Z2UpO1xufVxuIgorbW9kdWxlLmV4cG9ydHMgPSAiLy8gbGlicy9qcXVlcnkvanF1ZXJ5LmQudHNc
bi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGlj
ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9WSURFRCAqQVMgSVMqIEJBU0lTLCBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBS
RVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURc
bldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUg
dGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqICovXG5cbi8vIFR5cGluZyBmb3IgdGhlIGpRdWVyeSBsaWJyYXJ5
LCB2ZXJzaW9uIDEuMTAueCAvIDIuMC54XG4vLyBQcm9qZWN0OiBodHRwOi8vanF1ZXJ5LmNvbS9c
bi8vIERlZmluaXRpb25zIGJ5OiBCb3JpcyBZYW5rb3YgPGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jp
c3lhbmtvdi8+LCBDaHJpc3RpYW4gSG9mZm1laXN0ZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9m
Zm1laXN0ZXI+LCBTdGV2ZSBGZW50b24sIERpdWxsZWkgR29tZXMgPGh0dHBzOi8vZ2l0aHViLmNv
bS9EaXVsbGVpPiwgVGFzcyBJbGlvcG91bG9zIDxodHRwczovL2dpdGh1Yi5jb20vdGFzb2lsaT4s
IEphc29uIFN3ZWFyaW5nZW4sIFNlYW4gSGlsbCA8aHR0cHM6Ly9naXRodWIuY29tL3NlYW5za2k+
LCBHdXVzIEdvb3NzZW5zIDxodHRwczovL2dpdGh1Yi5jb20vR3V1ej4sIEtlbGx5IFN1bW1lcmxp
biA8aHR0cHM6Ly9naXRodWIuY29tL2tzdW1tZXJsaW4+LCBCYXNhcmF0IEFsaSBTeWVkIDxodHRw
czovL2dpdGh1Yi5jb20vYmFzYXJhdD4sIE5pY2hvbGFzIFdvbHZlcnNvbiA8aHR0cHM6Ly9naXRo
dWIuY29tL253b2x2ZXJzb24+LCBEZXJlayBDaWNlcm9uZSA8aHR0cHM6Ly9naXRodWIuY29tL2Rl
cmVrY2ljZXJvbmU+LCBBbmRyZXcgR2FzcGFyIDxodHRwczovL2dpdGh1Yi5jb20vQW5kcmV3R2Fz
cGFyPiwgSmFtZXMgSGFycmlzb24gRmlzaGVyIDxodHRwczovL2dpdGh1Yi5jb20vamFtZXNoZmlz
aGVyPiwgU2Vpa2ljaGkgS29uZG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWlraWNoaT4sIEJlbmph
bWluIEphY2ttYW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmphY2ttYW4+LCBQb3VsIFNv
cmVuc2VuIDxodHRwczovL2dpdGh1Yi5jb20vczA5MzI5ND4sIEpvc2ggU3Ryb2JsIDxodHRwczov
L2dpdGh1Yi5jb20vSm9zaFN0cm9ibD4sIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20v
am9obm55cmVpbGx5Lz5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5
YW5rb3YvRGVmaW5pdGVseVR5cGVkXG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgQUpBWCBz
ZXR0aW5nIHRoYXQgd2lsbCBjb25maWd1cmUgdGhlIEFKQVggcmVxdWVzdFxuKi9cbmludGVyZmFj
ZSBKUXVlcnlBamF4U2V0dGluZ3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUg
c2VudCBpbiB0aGUgcmVxdWVzdCBoZWFkZXIgdGhhdCB0ZWxscyB0aGUgc2VydmVyIHdoYXQga2lu
ZCBvZiByZXNwb25zZSBpdCB3aWxsIGFjY2VwdCBpbiByZXR1cm4uIElmIHRoZSBhY2NlcHRzIHNl
dHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNl
IGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhY2NlcHRzPzogYW55
O1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGFsbCByZXF1ZXN0cyBhcmUgc2VudCBhc3lu
Y2hyb25vdXNseSAoaS5lLiB0aGlzIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQpLiBJZiB5b3Ug
bmVlZCBzeW5jaHJvbm91cyByZXF1ZXN0cywgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLiBDcm9z
cy1kb21haW4gcmVxdWVzdHMgYW5kIGRhdGFUeXBlOiBcImpzb25wXCIgcmVxdWVzdHMgZG8gbm90
IHN1cHBvcnQgc3luY2hyb25vdXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgc3luY2hyb25vdXMgcmVx
dWVzdHMgbWF5IHRlbXBvcmFyaWx5IGxvY2sgdGhlIGJyb3dzZXIsIGRpc2FibGluZyBhbnkgYWN0
aW9ucyB3aGlsZSB0aGUgcmVxdWVzdCBpcyBhY3RpdmUuIEFzIG9mIGpRdWVyeSAxLjgsIHRoZSB1
c2Ugb2YgYXN5bmM6IGZhbHNlIHdpdGgganFYSFIgKCQuRGVmZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7
IHlvdSBtdXN0IHVzZSB0aGUgc3VjY2Vzcy9lcnJvci9jb21wbGV0ZSBjYWxsYmFjayBvcHRpb25z
IGluc3RlYWQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZiB0aGUganFYSFIgb2JqZWN0
IHN1Y2ggYXMganFYSFIuZG9uZSgpIG9yIHRoZSBkZXByZWNhdGVkIGpxWEhSLnN1Y2Nlc3MoKS5c
biAgICAgKi9cbiAgICBhc3luYz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBwcmUtcmVx
dWVzdCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUganFY
SFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBiZWZvcmUgaXQgaXMg
c2VudC4gVXNlIHRoaXMgdG8gc2V0IGN1c3RvbSBoZWFkZXJzLCBldGMuIFRoZSBqcVhIUiBhbmQg
c2V0dGluZ3Mgb2JqZWN0cyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cy4gVGhpcyBpcyBhbiBBamF4
IEV2ZW50LiBSZXR1cm5pbmcgZmFsc2UgaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24gd2lsbCBj
YW5jZWwgdGhlIHJlcXVlc3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBiZWZvcmVTZW5kIG9wdGlv
biB3aWxsIGJlIGNhbGxlZCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHJlcXVlc3QuXG4gICAg
ICovXG4gICAgYmVmb3JlU2VuZD8gKGpxWEhSOiBKUXVlcnlYSFIsIHNldHRpbmdzOiBKUXVlcnlB
amF4U2V0dGluZ3MpOiBhbnk7XG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCBpdCB3
aWxsIGZvcmNlIHJlcXVlc3RlZCBwYWdlcyBub3QgdG8gYmUgY2FjaGVkIGJ5IHRoZSBicm93c2Vy
LiBOb3RlOiBTZXR0aW5nIGNhY2hlIHRvIGZhbHNlIHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3
aXRoIEhFQUQgYW5kIEdFVCByZXF1ZXN0cy4gSXQgd29ya3MgYnkgYXBwZW5kaW5nIFwiXz17dGlt
ZXN0YW1wfVwiIHRvIHRoZSBHRVQgcGFyYW1ldGVycy4gVGhlIHBhcmFtZXRlciBpcyBub3QgbmVl
ZGVkIGZvciBvdGhlciB0eXBlcyBvZiByZXF1ZXN0cywgZXhjZXB0IGluIElFOCB3aGVuIGEgUE9T
VCBpcyBtYWRlIHRvIGEgVVJMIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgYnkgYSBH
RVQuXG4gICAgICovXG4gICAgY2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgZnVu
Y3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMgKGFmdGVyIHN1Y2Nl
c3MgYW5kIGVycm9yIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQpLiBUaGUgZnVuY3Rpb24gZ2V0cyBw
YXNzZWQgdHdvIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBS
ZXF1ZXN0KSBvYmplY3QgYW5kIGEgc3RyaW5nIGNhdGVnb3JpemluZyB0aGUgc3RhdHVzIG9mIHRo
ZSByZXF1ZXN0IChcInN1Y2Nlc3NcIiwgXCJub3Rtb2RpZmllZFwiLCBcImVycm9yXCIsIFwidGlt
ZW91dFwiLCBcImFib3J0XCIsIG9yIFwicGFyc2VyZXJyb3JcIikuIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBjb21wbGV0ZSBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBF
YWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVu
dC5cbiAgICAgKi9cbiAgICBjb21wbGV0ZT8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6
IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Ygc3RyaW5nL3JlZ3Vs
YXItZXhwcmVzc2lvbiBwYWlycyB0aGF0IGRldGVybWluZSBob3cgalF1ZXJ5IHdpbGwgcGFyc2Ug
dGhlIHJlc3BvbnNlLCBnaXZlbiBpdHMgY29udGVudCB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41
KVxuICAgICAqL1xuICAgIGNvbnRlbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAg
Ly9BY2NvcmRpbmcgdG8galF1ZXJ5LmFqYXggc291cmNlIGNvZGUsIGFqYXgncyBvcHRpb24gYWN0
dWFsbHkgYWxsb3dzIGNvbnRlbnRUeXBlIHRvIHNldCB0byBcImZhbHNlXCJcbiAgICAvLyBodHRw
czovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy83NDJcbiAg
ICAvKipcbiAgICAgKiBXaGVuIHNlbmRpbmcgZGF0YSB0byB0aGUgc2VydmVyLCB1c2UgdGhpcyBj
b250ZW50IHR5cGUuIERlZmF1bHQgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29k
ZWQ7IGNoYXJzZXQ9VVRGLThcIiwgd2hpY2ggaXMgZmluZSBmb3IgbW9zdCBjYXNlcy4gSWYgeW91
IGV4cGxpY2l0bHkgcGFzcyBpbiBhIGNvbnRlbnQtdHlwZSB0byAkLmFqYXgoKSwgdGhlbiBpdCBp
cyBhbHdheXMgc2VudCB0byB0aGUgc2VydmVyIChldmVuIGlmIG5vIGRhdGEgaXMgc2VudCkuIFRo
ZSBXM0MgWE1MSHR0cFJlcXVlc3Qgc3BlY2lmaWNhdGlvbiBkaWN0YXRlcyB0aGF0IHRoZSBjaGFy
c2V0IGlzIGFsd2F5cyBVVEYtODsgc3BlY2lmeWluZyBhbm90aGVyIGNoYXJzZXQgd2lsbCBub3Qg
Zm9yY2UgdGhlIGJyb3dzZXIgdG8gY2hhbmdlIHRoZSBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBj
b250ZW50VHlwZT86IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIG1h
ZGUgdGhlIGNvbnRleHQgb2YgYWxsIEFqYXgtcmVsYXRlZCBjYWxsYmFja3MuIEJ5IGRlZmF1bHQs
IHRoZSBjb250ZXh0IGlzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGFqYXggc2V0dGlu
Z3MgdXNlZCBpbiB0aGUgY2FsbCAoJC5hamF4U2V0dGluZ3MgbWVyZ2VkIHdpdGggdGhlIHNldHRp
bmdzIHBhc3NlZCB0byAkLmFqYXgpLlxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBhbnk7XG4gICAg
LyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YVR5cGUtdG8tZGF0YVR5cGUgY29u
dmVydGVycy4gRWFjaCBjb252ZXJ0ZXIncyB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgb2YgdGhlIHJlc3BvbnNlLiAodmVyc2lvbiBhZGRlZDog
MS41KVxuICAgICAqL1xuICAgIGNvbnZlcnRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
biAgICAvKipcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNyb3NzRG9tYWluIHJlcXVl
c3QgKHN1Y2ggYXMgSlNPTlApIG9uIHRoZSBzYW1lIGRvbWFpbiwgc2V0IHRoZSB2YWx1ZSBvZiBj
cm9zc0RvbWFpbiB0byB0cnVlLiBUaGlzIGFsbG93cywgZm9yIGV4YW1wbGUsIHNlcnZlci1zaWRl
IHJlZGlyZWN0aW9uIHRvIGFub3RoZXIgZG9tYWluLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAg
ICAqL1xuICAgIGNyb3NzRG9tYWluPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEYXRhIHRv
IGJlIHNlbnQgdG8gdGhlIHNlcnZlci4gSXQgaXMgY29udmVydGVkIHRvIGEgcXVlcnkgc3RyaW5n
LCBpZiBub3QgYWxyZWFkeSBhIHN0cmluZy4gSXQncyBhcHBlbmRlZCB0byB0aGUgdXJsIGZvciBH
RVQtcmVxdWVzdHMuIFNlZSBwcm9jZXNzRGF0YSBvcHRpb24gdG8gcHJldmVudCB0aGlzIGF1dG9t
YXRpYyBwcm9jZXNzaW5nLiBPYmplY3QgbXVzdCBiZSBLZXkvVmFsdWUgcGFpcnMuIElmIHZhbHVl
IGlzIGFuIEFycmF5LCBqUXVlcnkgc2VyaWFsaXplcyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzYW1l
IGtleSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIHRyYWRpdGlvbmFsIHNldHRpbmcgKGRlc2Ny
aWJlZCBiZWxvdykuXG4gICAgICovXG4gICAgZGF0YT86IGFueTtcbiAgICAvKipcbiAgICAgKiBB
IGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gaGFuZGxlIHRoZSByYXcgcmVzcG9uc2UgZGF0YSBvZiBY
TUxIdHRwUmVxdWVzdC5UaGlzIGlzIGEgcHJlLWZpbHRlcmluZyBmdW5jdGlvbiB0byBzYW5pdGl6
ZSB0aGUgcmVzcG9uc2UuIFlvdSBzaG91bGQgcmV0dXJuIHRoZSBzYW5pdGl6ZWQgZGF0YS4gVGhl
IGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGFyZ3VtZW50czogVGhlIHJhdyBkYXRhIHJldHVybmVkIGZy
b20gdGhlIHNlcnZlciBhbmQgdGhlICdkYXRhVHlwZScgcGFyYW1ldGVyLlxuICAgICAqL1xuICAg
IGRhdGFGaWx0ZXI/IChkYXRhOiBhbnksIHR5OiBhbnkpOiBhbnk7XG4gICAgLyoqXG4gICAgICog
VGhlIHR5cGUgb2YgZGF0YSB0aGF0IHlvdSdyZSBleHBlY3RpbmcgYmFjayBmcm9tIHRoZSBzZXJ2
ZXIuIElmIG5vbmUgaXMgc3BlY2lmaWVkLCBqUXVlcnkgd2lsbCB0cnkgdG8gaW5mZXIgaXQgYmFz
ZWQgb24gdGhlIE1JTUUgdHlwZSBvZiB0aGUgcmVzcG9uc2UgKGFuIFhNTCBNSU1FIHR5cGUgd2ls
bCB5aWVsZCBYTUwsIGluIDEuNCBKU09OIHdpbGwgeWllbGQgYSBKYXZhU2NyaXB0IG9iamVjdCwg
aW4gMS40IHNjcmlwdCB3aWxsIGV4ZWN1dGUgdGhlIHNjcmlwdCwgYW5kIGFueXRoaW5nIGVsc2Ug
d2lsbCBiZSByZXR1cm5lZCBhcyBhIHN0cmluZykuXG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBz
dHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJl
cXVlc3QgZmFpbHMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aHJlZSBhcmd1bWVudHM6IFRoZSBq
cVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LCBhIHN0cmluZyBk
ZXNjcmliaW5nIHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgb2NjdXJyZWQgYW5kIGFuIG9wdGlvbmFs
IGV4Y2VwdGlvbiBvYmplY3QsIGlmIG9uZSBvY2N1cnJlZC4gUG9zc2libGUgdmFsdWVzIGZvciB0
aGUgc2Vjb25kIGFyZ3VtZW50IChiZXNpZGVzIG51bGwpIGFyZSBcInRpbWVvdXRcIiwgXCJlcnJv
clwiLCBcImFib3J0XCIsIGFuZCBcInBhcnNlcmVycm9yXCIuIFdoZW4gYW4gSFRUUCBlcnJvciBv
Y2N1cnMsIGVycm9yVGhyb3duIHJlY2VpdmVzIHRoZSB0ZXh0dWFsIHBvcnRpb24gb2YgdGhlIEhU
VFAgc3RhdHVzLCBzdWNoIGFzIFwiTm90IEZvdW5kXCIgb3IgXCJJbnRlcm5hbCBTZXJ2ZXIgRXJy
b3IuXCIgQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGVycm9yIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBh
cnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4g
Tm90ZTogVGhpcyBoYW5kbGVyIGlzIG5vdCBjYWxsZWQgZm9yIGNyb3NzLWRvbWFpbiBzY3JpcHQg
YW5kIGNyb3NzLWRvbWFpbiBKU09OUCByZXF1ZXN0cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50Llxu
ICAgICAqL1xuICAgIGVycm9yPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5n
LCBlcnJvclRocm93OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB0
cmlnZ2VyIGdsb2JhbCBBamF4IGV2ZW50IGhhbmRsZXJzIGZvciB0aGlzIHJlcXVlc3QuIFRoZSBk
ZWZhdWx0IGlzIHRydWUuIFNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBnbG9iYWwgaGFuZGxl
cnMgbGlrZSBhamF4U3RhcnQgb3IgYWpheFN0b3AgZnJvbSBiZWluZyB0cmlnZ2VyZWQuIFRoaXMg
Y2FuIGJlIHVzZWQgdG8gY29udHJvbCB2YXJpb3VzIEFqYXggRXZlbnRzLlxuICAgICAqL1xuICAg
IGdsb2JhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGFkZGl0aW9u
YWwgaGVhZGVyIGtleS92YWx1ZSBwYWlycyB0byBzZW5kIGFsb25nIHdpdGggcmVxdWVzdHMgdXNp
bmcgdGhlIFhNTEh0dHBSZXF1ZXN0IHRyYW5zcG9ydC4gVGhlIGhlYWRlciBYLVJlcXVlc3RlZC1X
aXRoOiBYTUxIdHRwUmVxdWVzdCBpcyBhbHdheXMgYWRkZWQsIGJ1dCBpdHMgZGVmYXVsdCBYTUxI
dHRwUmVxdWVzdCB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBoZXJlLiBWYWx1ZXMgaW4gdGhlIGhlYWRl
cnMgc2V0dGluZyBjYW4gYWxzbyBiZSBvdmVyd3JpdHRlbiBmcm9tIHdpdGhpbiB0aGUgYmVmb3Jl
U2VuZCBmdW5jdGlvbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBoZWFkZXJz
PzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIHJl
cXVlc3QgdG8gYmUgc3VjY2Vzc2Z1bCBvbmx5IGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZCBz
aW5jZSB0aGUgbGFzdCByZXF1ZXN0LiBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIExhc3Qt
TW9kaWZpZWQgaGVhZGVyLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLCBpZ25vcmluZyB0aGUgaGVh
ZGVyLiBJbiBqUXVlcnkgMS40IHRoaXMgdGVjaG5pcXVlIGFsc28gY2hlY2tzIHRoZSAnZXRhZycg
c3BlY2lmaWVkIGJ5IHRoZSBzZXJ2ZXIgdG8gY2F0Y2ggdW5tb2RpZmllZCBkYXRhLlxuICAgICAq
L1xuICAgIGlmTW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSBj
dXJyZW50IGVudmlyb25tZW50IHRvIGJlIHJlY29nbml6ZWQgYXMgXCJsb2NhbCxcIiAoZS5nLiB0
aGUgZmlsZXN5c3RlbSksIGV2ZW4gaWYgalF1ZXJ5IGRvZXMgbm90IHJlY29nbml6ZSBpdCBhcyBz
dWNoIGJ5IGRlZmF1bHQuIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBjdXJyZW50bHkgcmVj
b2duaXplZCBhcyBsb2NhbDogZmlsZSwgKi1leHRlbnNpb24sIGFuZCB3aWRnZXQuIElmIHRoZSBp
c0xvY2FsIHNldHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBk
byBzbyBvbmNlIGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC4gKHZlcnNpb24gYWRkZWQ6IDEu
NS4xKVxuICAgICAqL1xuICAgIGlzTG9jYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE92
ZXJyaWRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGluIGEganNvbnAgcmVxdWVzdC4gVGhp
cyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAnY2FsbGJhY2snIGluIHRoZSAnY2FsbGJh
Y2s9PycgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGluIHRoZSB1cmwuIFNvIHtqc29ucDonb25K
U09OUExvYWQnfSB3b3VsZCByZXN1bHQgaW4gJ29uSlNPTlBMb2FkPT8nIHBhc3NlZCB0byB0aGUg
c2VydmVyLiBBcyBvZiBqUXVlcnkgMS41LCBzZXR0aW5nIHRoZSBqc29ucCBvcHRpb24gdG8gZmFs
c2UgcHJldmVudHMgalF1ZXJ5IGZyb20gYWRkaW5nIHRoZSBcIj9jYWxsYmFja1wiIHN0cmluZyB0
byB0aGUgVVJMIG9yIGF0dGVtcHRpbmcgdG8gdXNlIFwiPT9cIiBmb3IgdHJhbnNmb3JtYXRpb24u
IEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCBhbHNvIGV4cGxpY2l0bHkgc2V0IHRoZSBqc29ucENh
bGxiYWNrIHNldHRpbmcuIEZvciBleGFtcGxlLCB7IGpzb25wOiBmYWxzZSwganNvbnBDYWxsYmFj
azogXCJjYWxsYmFja05hbWVcIiB9XG4gICAgICovXG4gICAganNvbnA/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogU3BlY2lmeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBmb3IgYSBKU09O
UCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSByYW5kb20g
bmFtZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBqUXVlcnkuIEl0IGlzIHByZWZlcmFibGUg
dG8gbGV0IGpRdWVyeSBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGFzIGl0J2xsIG1ha2UgaXQgZWFz
aWVyIHRvIG1hbmFnZSB0aGUgcmVxdWVzdHMgYW5kIHByb3ZpZGUgY2FsbGJhY2tzIGFuZCBlcnJv
ciBoYW5kbGluZy4gWW91IG1heSB3YW50IHRvIHNwZWNpZnkgdGhlIGNhbGxiYWNrIHdoZW4geW91
IHdhbnQgdG8gZW5hYmxlIGJldHRlciBicm93c2VyIGNhY2hpbmcgb2YgR0VUIHJlcXVlc3RzLiBB
cyBvZiBqUXVlcnkgMS41LCB5b3UgY2FuIGFsc28gdXNlIGEgZnVuY3Rpb24gZm9yIHRoaXMgc2V0
dGluZywgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgb2YganNvbnBDYWxsYmFjayBpcyBzZXQgdG8g
dGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGpzb25wQ2Fs
bGJhY2s/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBtaW1lIHR5cGUgdG8gb3ZlcnJpZGUgdGhl
IFhIUiBtaW1lIHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBtaW1l
VHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHBhc3N3b3JkIHRvIGJlIHVzZWQgd2l0
aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNh
dGlvbiByZXF1ZXN0LlxuICAgICAqL1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxu
ICAgICAqIEJ5IGRlZmF1bHQsIGRhdGEgcGFzc2VkIGluIHRvIHRoZSBkYXRhIG9wdGlvbiBhcyBh
biBvYmplY3QgKHRlY2huaWNhbGx5LCBhbnl0aGluZyBvdGhlciB0aGFuIGEgc3RyaW5nKSB3aWxs
IGJlIHByb2Nlc3NlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBhIHF1ZXJ5IHN0cmluZywgZml0dGlu
ZyB0byB0aGUgZGVmYXVsdCBjb250ZW50LXR5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWRcIi4gSWYgeW91IHdhbnQgdG8gc2VuZCBhIERPTURvY3VtZW50LCBvciBvdGhlciBu
b24tcHJvY2Vzc2VkIGRhdGEsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS5cbiAgICAgKi9cbiAg
ICBwcm9jZXNzRGF0YT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogT25seSBhcHBsaWVzIHdo
ZW4gdGhlIFwic2NyaXB0XCIgdHJhbnNwb3J0IGlzIHVzZWQgKGUuZy4sIGNyb3NzLWRvbWFpbiBy
ZXF1ZXN0cyB3aXRoIFwianNvbnBcIiBvciBcInNjcmlwdFwiIGRhdGFUeXBlIGFuZCBcIkdFVFwi
IHR5cGUpLiBTZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSBvbiB0aGUgc2NyaXB0IHRhZyB1c2Vk
IGluIHRoZSByZXF1ZXN0LiBVc2VkIHdoZW4gdGhlIGNoYXJhY3RlciBzZXQgb24gdGhlIGxvY2Fs
IHBhZ2UgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgb24gdGhlIHJlbW90ZSBzY3JpcHQuXG4g
ICAgICovXG4gICAgc2NyaXB0Q2hhcnNldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbiBv
YmplY3Qgb2YgbnVtZXJpYyBIVFRQIGNvZGVzIGFuZCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHdo
ZW4gdGhlIHJlc3BvbnNlIGhhcyB0aGUgY29ycmVzcG9uZGluZyBjb2RlLiBmIHRoZSByZXF1ZXN0
IGlzIHN1Y2Nlc3NmdWwsIHRoZSBzdGF0dXMgY29kZSBmdW5jdGlvbnMgdGFrZSB0aGUgc2FtZSBw
YXJhbWV0ZXJzIGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrOyBpZiBpdCByZXN1bHRzIGluIGFuIGVy
cm9yIChpbmNsdWRpbmcgM3h4IHJlZGlyZWN0KSwgdGhleSB0YWtlIHRoZSBzYW1lIHBhcmFtZXRl
cnMgYXMgdGhlIGVycm9yIGNhbGxiYWNrLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xu
ICAgIHN0YXR1c0NvZGU/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAg
KiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gVGhlIGZ1
bmN0aW9uIGdldHMgcGFzc2VkIHRocmVlIGFyZ3VtZW50czogVGhlIGRhdGEgcmV0dXJuZWQgZnJv
bSB0aGUgc2VydmVyLCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkYXRhVHlwZSBwYXJhbWV0
ZXI7IGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHN0YXR1czsgYW5kIHRoZSBqcVhIUiAoaW4galF1
ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUg
c3VjY2VzcyBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1
bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAg
ICAgKi9cbiAgICBzdWNjZXNzPyAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhS
OiBKUXVlcnlYSFIpOiBhbnk7XG4gICAgLyoqXG4gICAgICogU2V0IGEgdGltZW91dCAoaW4gbWls
bGlzZWNvbmRzKSBmb3IgdGhlIHJlcXVlc3QuIFRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFs
IHRpbWVvdXQgc2V0IHdpdGggJC5hamF4U2V0dXAoKS4gVGhlIHRpbWVvdXQgcGVyaW9kIHN0YXJ0
cyBhdCB0aGUgcG9pbnQgdGhlICQuYWpheCBjYWxsIGlzIG1hZGU7IGlmIHNldmVyYWwgb3RoZXIg
cmVxdWVzdHMgYXJlIGluIHByb2dyZXNzIGFuZCB0aGUgYnJvd3NlciBoYXMgbm8gY29ubmVjdGlv
bnMgYXZhaWxhYmxlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSByZXF1ZXN0IHRvIHRpbWUgb3V0IGJl
Zm9yZSBpdCBjYW4gYmUgc2VudC4gSW4galF1ZXJ5IDEuNC54IGFuZCBiZWxvdywgdGhlIFhNTEh0
dHBSZXF1ZXN0IG9iamVjdCB3aWxsIGJlIGluIGFuIGludmFsaWQgc3RhdGUgaWYgdGhlIHJlcXVl
c3QgdGltZXMgb3V0OyBhY2Nlc3NpbmcgYW55IG9iamVjdCBtZW1iZXJzIG1heSB0aHJvdyBhbiBl
eGNlcHRpb24uIEluIEZpcmVmb3ggMy4wKyBvbmx5LCBzY3JpcHQgYW5kIEpTT05QIHJlcXVlc3Rz
IGNhbm5vdCBiZSBjYW5jZWxsZWQgYnkgYSB0aW1lb3V0OyB0aGUgc2NyaXB0IHdpbGwgcnVuIGV2
ZW4gaWYgaXQgYXJyaXZlcyBhZnRlciB0aGUgdGltZW91dCBwZXJpb2QuXG4gICAgICovXG4gICAg
dGltZW91dD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlv
dSB3aXNoIHRvIHVzZSB0aGUgdHJhZGl0aW9uYWwgc3R5bGUgb2YgcGFyYW0gc2VyaWFsaXphdGlv
bi5cbiAgICAgKi9cbiAgICB0cmFkaXRpb25hbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
VGhlIHR5cGUgb2YgcmVxdWVzdCB0byBtYWtlIChcIlBPU1RcIiBvciBcIkdFVFwiKSwgZGVmYXVs
dCBpcyBcIkdFVFwiLiBOb3RlOiBPdGhlciBIVFRQIHJlcXVlc3QgbWV0aG9kcywgc3VjaCBhcyBQ
VVQgYW5kIERFTEVURSwgY2FuIGFsc28gYmUgdXNlZCBoZXJlLCBidXQgdGhleSBhcmUgbm90IHN1
cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAg
ICAvKipcbiAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJl
cXVlc3QgaXMgc2VudC5cbiAgICAgKi9cbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogQSB1c2VybmFtZSB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2Ug
dG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICB1
c2VybmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmb3IgY3JlYXRpbmcg
dGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4gRGVmYXVsdHMgdG8gdGhlIEFjdGl2ZVhPYmplY3Qg
d2hlbiBhdmFpbGFibGUgKElFKSwgdGhlIFhNTEh0dHBSZXF1ZXN0IG90aGVyd2lzZS4gT3ZlcnJp
ZGUgdG8gcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MSHR0cFJlcXVlc3Qg
b3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBmYWN0b3J5LlxuICAgICAqL1xuICAgIHhocj86IGFueTtc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgZmllbGROYW1lLWZpZWxkVmFsdWUgcGFpcnMg
dG8gc2V0IG9uIHRoZSBuYXRpdmUgWEhSIG9iamVjdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNl
IGl0IHRvIHNldCB3aXRoQ3JlZGVudGlhbHMgdG8gdHJ1ZSBmb3IgY3Jvc3MtZG9tYWluIHJlcXVl
c3RzIGlmIG5lZWRlZC4gSW4galF1ZXJ5IDEuNSwgdGhlIHdpdGhDcmVkZW50aWFscyBwcm9wZXJ0
eSB3YXMgbm90IHByb3BhZ2F0ZWQgdG8gdGhlIG5hdGl2ZSBYSFIgYW5kIHRodXMgQ09SUyByZXF1
ZXN0cyByZXF1aXJpbmcgaXQgd291bGQgaWdub3JlIHRoaXMgZmxhZy4gRm9yIHRoaXMgcmVhc29u
LCB3ZSByZWNvbW1lbmQgdXNpbmcgalF1ZXJ5IDEuNS4xKyBzaG91bGQgeW91IHJlcXVpcmUgdGhl
IHVzZSBvZiBpdC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIHhockZpZWxk
cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3Ig
dGhlIGpxWEhSIG9iamVjdFxuKi9cbmludGVyZmFjZSBKUXVlcnlYSFIgZXh0ZW5kcyBYTUxIdHRw
UmVxdWVzdCwgSlF1ZXJ5UHJvbWlzZTxhbnk+IHtcbiAgICBvdmVycmlkZU1pbWVUeXBlKG1pbWVU
eXBlOiBzdHJpbmcpOiBhbnk7XG4gICAgYWJvcnQoc3RhdHVzVGV4dD86IHN0cmluZyk6IHZvaWQ7
XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGNhbGxiYWNrXG4qL1xuaW50
ZXJmYWNlIEpRdWVyeUNhbGxiYWNrIHtcbiAgICBhZGQoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFu
eTtcbiAgICBkaXNhYmxlKCk6IGFueTtcbiAgICBlbXB0eSgpOiBhbnk7XG4gICAgZmlyZSguLi5h
cmd1bWVudHM6IGFueVtdKTogYW55O1xuICAgIGZpcmVkKCk6IGJvb2xlYW47XG4gICAgZmlyZVdp
dGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBoYXMoY2FsbGJhY2s6
IGFueSk6IGJvb2xlYW47XG4gICAgbG9jaygpOiBhbnk7XG4gICAgbG9ja2VkKCk6IGJvb2xlYW47
XG4gICAgcmVtb3ZlKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG59XG5cbi8qXG4gICAgQWxs
b3dzIGpRdWVyeSBQcm9taXNlcyB0byBpbnRlcm9wIHdpdGggbm9uLWpRdWVyeSBwcm9taXNlc1xu
Ki9cbmludGVyZmFjZSBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPiB7XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBK
UXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBU
KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+
IFUpOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZh
bHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT4pOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmls
bDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVh
c29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IHByb21pc2UsIHBh
cnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8v
IEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxi
YWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6
IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10p
OiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBU
W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczog
YW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55
W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10p
OiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBh
bnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICAvLyBEZXByZWNhdGVkIC0gZ2l2ZW4gbm8g
dHlwaW5nc1xuICAgIHBpcGUoZG9uZUZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgZmFpbEZpbHRl
cj86ICh4OiBhbnkpID0+IGFueSwgcHJvZ3Jlc3NGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnkpOiBK
UXVlcnlQcm9taXNlPGFueT47XG5cbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9
PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICgu
Li5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhl
bjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9u
UmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dy
ZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9u
RnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkg
PT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246
IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxs
OiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5y
ZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAo
Li4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuXG4gICAg
Ly8gQmVjYXVzZSBKUXVlcnkgUHJvbWlzZXMgU3Vja1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAo
Li4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+
IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQ
cm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4g
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+
IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9
PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10p
ID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9u
OiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZh
Y2UgZm9yIHRoZSBKUXVlcnkgZGVmZXJyZWQsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJm
YWNlIEpRdWVyeURlZmVycmVkPFQ+IGV4dGVuZHMgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8g
R2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJh
Y2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6
IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtd
KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6
IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNr
czogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6
IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBh
bnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJh
Y2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgbm90aWZ5KC4uLmFyZ3M6IGFu
eVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgbm90aWZ5V2l0aChjb250ZXh0OiBhbnksIC4u
LmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZWplY3QoLi4uYXJnczog
YW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZWplY3RXaXRoKGNvbnRleHQ6IGFueSwg
Li4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlc29sdmUodmFsOiBU
KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZSguLi5hcmdzOiBhbnlbXSk6IEpRdWVy
eURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55
W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBzdGF0ZSgpOiBzdHJpbmc7XG5cbiAgICBwcm9t
aXNlKHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8VD47XG59XG5cbi8qXG4gICAgSW50ZXJm
YWNlIG9mIHRoZSBKUXVlcnkgZXh0ZW5zaW9uIG9mIHRoZSBXM0MgZXZlbnQgb2JqZWN0XG4qL1xu
XG5pbnRlcmZhY2UgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgRXZlbnQge1xuICAgIGRh
dGE6IGFueTtcbiAgICBkZWxlZ2F0ZVRhcmdldDogRWxlbWVudDtcbiAgICBpc0RlZmF1bHRQcmV2
ZW50ZWQoKTogYm9vbGVhbjtcbiAgICBpc0ltbWVkaWF0ZVByb3BvZ2F0aW9uU3RvcHBlZCgpOiBi
b29sZWFuO1xuICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgbmFtZXNw
YWNlOiBzdHJpbmc7XG4gICAgcHJldmVudERlZmF1bHQoKTogYW55O1xuICAgIHJlbGF0ZWRUYXJn
ZXQ6IEVsZW1lbnQ7XG4gICAgcmVzdWx0OiBhbnk7XG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0
aW9uKCk6IHZvaWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgcGFnZVg6IG51
bWJlcjtcbiAgICBwYWdlWTogbnVtYmVyO1xuICAgIHdoaWNoOiBudW1iZXI7XG4gICAgbWV0YUtl
eTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUlucHV0RXZlbnRPYmplY3QgZXh0ZW5k
cyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAgIGFsdEtleTogYm9vbGVhbjtcbiAgICBjdHJs
S2V5OiBib29sZWFuO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG4gICAgc2hpZnRLZXk6IGJvb2xl
YW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5
SW5wdXRFdmVudE9iamVjdCB7XG4gICAgYnV0dG9uOiBudW1iZXI7XG4gICAgY2xpZW50WDogbnVt
YmVyO1xuICAgIGNsaWVudFk6IG51bWJlcjtcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zm
c2V0WTogbnVtYmVyO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAg
ICBzY3JlZW5YOiBudW1iZXI7XG4gICAgc2NyZWVuWTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2Ug
SlF1ZXJ5S2V5RXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAg
ICBjaGFyOiBhbnk7XG4gICAgY2hhckNvZGU6IG51bWJlcjtcbiAgICBrZXk6IGFueTtcbiAgICBr
ZXlDb2RlOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0
IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBQb3BT
dGF0ZUV2ZW50O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNl
SlF1ZXJ5RXZlbnRPYmplY3QsIEpRdWVyeUlucHV0RXZlbnRPYmplY3QsIEpRdWVyeU1vdXNlRXZl
bnRPYmplY3QsIEpRdWVyeUtleUV2ZW50T2JqZWN0LCBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0
IHtcbn1cblxuLypcbiAgICBDb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQg
YnJvd3NlclxuKi9cblxuaW50ZXJmYWNlIEpRdWVyeVN1cHBvcnQge1xuICAgIGFqYXg/OiBib29s
ZWFuO1xuICAgIGJveE1vZGVsPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VCdWJibGVzPzogYm9vbGVh
bjtcbiAgICBjaGVja0Nsb25lPzogYm9vbGVhbjtcbiAgICBjaGVja09uPzogYm9vbGVhbjtcbiAg
ICBjb3JzPzogYm9vbGVhbjtcbiAgICBjc3NGbG9hdD86IGJvb2xlYW47XG4gICAgaHJlZk5vcm1h
bGl6ZWQ/OiBib29sZWFuO1xuICAgIGh0bWxTZXJpYWxpemU/OiBib29sZWFuO1xuICAgIGxlYWRp
bmdXaGl0ZXNwYWNlPzogYm9vbGVhbjtcbiAgICBub0Nsb25lQ2hlY2tlZD86IGJvb2xlYW47XG4g
ICAgbm9DbG9uZUV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGFjaXR5PzogYm9vbGVhbjtcbiAgICBv
cHREaXNhYmxlZD86IGJvb2xlYW47XG4gICAgb3B0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHNj
cmlwdEV2YWw/ICgpOiBib29sZWFuO1xuICAgIHN0eWxlPzogYm9vbGVhbjtcbiAgICBzdWJtaXRC
dWJibGVzPzogYm9vbGVhbjtcbiAgICB0Ym9keT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBK
UXVlcnlQYXJhbSB7XG4gICAgKG9iajogYW55KTogc3RyaW5nO1xuICAgIChvYmo6IGFueSwgdHJh
ZGl0aW9uYWw6IGJvb2xlYW4pOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1
c2VkIHRvIGNvbnN0cnVjdCBqUXVlcnkgZXZlbnRzICh3aXRoICQuRXZlbnQpLiBJdCBpc1xuICog
ZGVmaW5lZCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgaW5saW5lIGluIEpRdWVyeVN0YXRpYyB0byBh
bGxvd1xuICogb3ZlcnJpZGluZyB0aGUgY29uc3RydWN0aW9uIGZ1bmN0aW9uIHdpdGggc3BlY2lm
aWMgc3RyaW5nc1xuICogcmV0dXJuaW5nIHNwZWNpZmljIGV2ZW50IG9iamVjdHMuXG4gKi9cbmlu
dGVyZmFjZSBKUXVlcnlFdmVudENvbnN0cnVjdG9yIHtcbiAgICAobmFtZTogc3RyaW5nLCBldmVu
dFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbiAgICBuZXcgKG5hbWU6IHN0
cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG59XG5cbi8q
KlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIHNwZWNpZnkgZWFzaW5nIGZ1bmN0aW9ucy5cbiAq
L1xuaW50ZXJmYWNlIEpRdWVyeUVhc2luZyB7XG4gICAgbGluZWFyKHA6IG51bWJlcik6IG51bWJl
cjtcbiAgICBzd2luZyhwOiBudW1iZXIpOiBudW1iZXI7XG59XG5cbi8qXG4gICAgU3RhdGljIG1l
bWJlcnMgb2YgalF1ZXJ5ICh0aG9zZSBvbiAkIGFuZCBqUXVlcnkgdGhlbXNlbHZlcylcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5U3RhdGljIHtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5
bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0
dGluZ3MgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJl
cXVlc3QuIEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZv
ciBhbnkgb3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHNldHRp
bmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogUGVy
Zm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBw
YWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9w
dGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNl
dHVwKCkuXG4gICAgICovXG4gICAgYWpheCh1cmw6IHN0cmluZywgc2V0dGluZ3M/OiBKUXVlcnlB
amF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9t
IEFqYXggb3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1
ZXN0IGlzIHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVR5cGVzIEFuIG9wdGlvbmFsIHN0cmluZyBjb250YWlu
aW5nIG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBkYXRhVHlwZXNcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCBy
ZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGRhdGFUeXBlczogc3RyaW5nLCBo
YW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFY
SFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3Vz
dG9tIEFqYXggb3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCBy
ZXF1ZXN0IGlzIHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCku
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQg
dmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmls
dGVyKGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdz
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgYWpheFNldHRpbmdzOiBK
UXVlcnlBamF4U2V0dGluZ3M7XG5cbiAgICAgLyoqXG4gICAgICAqIFNldCBkZWZhdWx0IHZhbHVl
cyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuIEl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLlxu
ICAgICAgKlxuICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMg
dGhhdCBjb25maWd1cmUgdGhlIGRlZmF1bHQgQWpheCByZXF1ZXN0LiBBbGwgb3B0aW9ucyBhcmUg
b3B0aW9uYWwuXG4gICAgICAqL1xuICAgIGFqYXhTZXR1cChvcHRpb25zOiBKUXVlcnlBamF4U2V0
dGluZ3MpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZl
ciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5
cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50
IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVy
bDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhI
UjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAg
IC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCBy
ZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBB
IHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0
aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRo
YXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0
OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAq
L1xuICAgIGdldCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBh
bnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlw
ZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0
aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlz
IHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQg
aXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1
Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVj
dGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNv
biwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/
OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhS
OiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAg
LyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcg
YSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBj
b250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBA
cGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRh
dGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSBy
ZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3Ry
aW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICog
QHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRo
ZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRh
dGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpx
WEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2Fk
IEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVl
c3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVS
TCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxh
aW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBy
ZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBp
cyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09O
KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0
YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAg
LyoqXG4gICAgICogTG9hZCBhIEphdmFTY3JpcHQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcg
YSBHRVQgSFRUUCByZXF1ZXN0LCB0aGVuIGV4ZWN1dGUgaXQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBp
cyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBp
cyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRTY3Jp
cHQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoc2NyaXB0OiBzdHJpbmcsIHRleHRTdGF0dXM6IHN0
cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuXG4gICAgcGFyYW06
IEpRdWVyeVBhcmFtO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZl
ciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBB
IHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5c
biAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0
ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3Zp
ZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlw
ZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50
ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9c
biAgICBwb3N0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1
ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcg
YSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUg
c2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1
aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2Fz
ZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9t
IHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlw
dCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IE9i
amVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpR
dWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipc
biAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVl
c3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVS
TCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxh
aW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBy
ZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBp
cyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUg
aXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFt
IGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZh
dWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxu
ICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAo
ZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwg
ZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBBIG11bHRp
LXB1cnBvc2UgY2FsbGJhY2tzIGxpc3Qgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBwb3dlcmZ1bCB3
YXkgdG8gbWFuYWdlIGNhbGxiYWNrIGxpc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZsYWdz
IEFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIGZsYWdzIHRoYXQgY2hhbmdlIGhv
dyB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzLlxuICAgICAqL1xuICAgIENhbGxiYWNrcyhmbGFn
cz86IHN0cmluZyk6IEpRdWVyeUNhbGxiYWNrO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgb3Ig
cmVsZWFzZXMgdGhlIGV4ZWN1dGlvbiBvZiBqUXVlcnkncyByZWFkeSBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBob2xkIEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWFkeSBob2xkIGlzIGJl
aW5nIHJlcXVlc3RlZCBvciByZWxlYXNlZFxuICAgICAqL1xuICAgIGhvbGRSZWFkeShob2xkOiBi
b29sZWFuKTogdm9pZDtcblxuICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTog
SlF1ZXJ5O1xuICAgIChlbGVtZW50OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IHt9
KTogSlF1ZXJ5O1xuICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IEpRdWVyeTtcbiAgICAo
b2JqZWN0OiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgKGZ1bmM6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xu
ICAgIChhcnJheTogYW55W10pOiBKUXVlcnk7XG4gICAgKCk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIFJlbGlucXVpc2ggalF1ZXJ5J3MgY29udHJvbCBvZiB0aGUgJCB2YXJpYWJsZS5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSByZW1vdmVBbGwgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhl
ciB0byByZW1vdmUgYWxsIGpRdWVyeSB2YXJpYWJsZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIChp
bmNsdWRpbmcgalF1ZXJ5IGl0c2VsZikuXG4gICAgICovXG4gICAgbm9Db25mbGljdChyZW1vdmVB
bGw/OiBib29sZWFuKTogT2JqZWN0O1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkg
dG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0
cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBl
dmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVy
cmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3
aGVuPFQ+KC4uLmRlZmVycmVkczogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD5bXSk6IEpRdWVyeVBy
b21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxs
YmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZl
cnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9y
IHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVy
cmVkczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBh
IHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBv
YmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9u
b3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUg
RGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xu
ICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAg
ICBjc3NIb29rczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgY3NzTnVtYmVyOiBhbnk7
XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSBhcmJpdHJhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGgg
dGhlIHNwZWNpZmllZCBlbGVtZW50LiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRl
IHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBp
ZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGRhdGEgdmFs
dWUuXG4gICAgICovXG4gICAgZGF0YTxUPihlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywg
dmFsdWU6IFQpOiBUO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0
YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBu
YW1lLCB2YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3
aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVj
ZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIGtl
eTogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQg
ZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50
LCBuYW1lLCB2YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0
ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCk6IGFu
eTtcblxuICAgIGRlcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTog
YW55O1xuXG4gICAgaGFzRGF0YShlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIHF1
ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1
ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJh
Y2s6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEoZWxlbWVudDogRWxlbWVudCwgbmFt
ZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgRGVmZXJyZWQ8VD4o
YmVmb3JlU3RhcnQ/OiAoZGVmZXJyZWQ6IEpRdWVyeURlZmVycmVkPFQ+KSA9PiBhbnkpOiBKUXVl
cnlEZWZlcnJlZDxUPjtcblxuICAgIC8vIEVmZmVjdHNcbiAgICBmeDogeyB0aWNrOiAoKSA9PiB2
b2lkOyBpbnRlcnZhbDogbnVtYmVyOyBzdG9wOiAoKSA9PiB2b2lkOyBzcGVlZHM6IHsgc2xvdzog
bnVtYmVyOyBmYXN0OiBudW1iZXI7IH07IG9mZjogYm9vbGVhbjsgc3RlcDogYW55OyB9O1xuXG4g
ICAgLy8gRXZlbnRzXG4gICAgcHJveHkoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBjb250
ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIHByb3h5KGNvbnRleHQ6IGFueSwg
bmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcblxuICAgIEV2ZW50OiBKUXVlcnlF
dmVudENvbnN0cnVjdG9yO1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgZXJyb3IobWVzc2FnZTog
YW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGV4cHI6IGFueTtcbiAg
ICBmbjogYW55OyAgLy9UT0RPOiBEZWNpZGUgaG93IHdlIHdhbnQgdG8gdHlwZSB0aGlzXG4gICAg
aXNSZWFkeTogYm9vbGVhbjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBzdXBwb3J0OiBKUXVl
cnlTdXBwb3J0O1xuXG4gICAgLy8gVXRpbGl0aWVzXG4gICAgY29udGFpbnMoY29udGFpbmVyOiBF
bGVtZW50LCBjb250YWluZWQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgZWFjaChjb2xsZWN0
aW9uOiBhbnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBhbnksIHZhbHVlT2ZFbGVtZW50OiBh
bnkpID0+IGFueSk6IGFueTtcbiAgICBlYWNoKGNvbGxlY3Rpb246IEpRdWVyeSwgY2FsbGJhY2s6
IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBh
bnkpOiBhbnk7XG4gICAgZWFjaDxUPihjb2xsZWN0aW9uOiBUW10sIGNhbGxiYWNrOiAoaW5kZXhJ
bkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBUKSA9PiBhbnkpOiBhbnk7XG5cbiAgICBl
eHRlbmQodGFyZ2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuICAgIGV4dGVuZChkZWVw
OiBib29sZWFuLCB0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG5cbiAgICBnbG9i
YWxFdmFsKGNvZGU6IHN0cmluZyk6IGFueTtcblxuICAgIGdyZXA8VD4oYXJyYXk6IFRbXSwgZnVu
YzogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gYm9vbGVhbiwg
aW52ZXJ0PzogYm9vbGVhbik6IFRbXTtcblxuICAgIGluQXJyYXk8VD4odmFsdWU6IFQsIGFycmF5
OiBUW10sIGZyb21JbmRleD86IG51bWJlcik6IG51bWJlcjtcblxuICAgIGlzQXJyYXkob2JqOiBh
bnkpOiBib29sZWFuO1xuICAgIGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAg
IGlzRnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzTnVtZXJpYyh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICBpc1BsYWluT2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBp
c1dpbmRvdyhvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNYTUxEb2Mobm9kZTogTm9kZSk6IGJv
b2xlYW47XG5cbiAgICBtYWtlQXJyYXkob2JqOiBhbnkpOiBhbnlbXTtcblxuICAgIG1hcDxULCBV
PihhcnJheTogVFtdLCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6
IG51bWJlcikgPT4gVSk6IFVbXTtcbiAgICBtYXAoYXJyYXk6IGFueSwgY2FsbGJhY2s6IChlbGVt
ZW50T2ZBcnJheTogYW55LCBpbmRleEluQXJyYXk6IGFueSkgPT4gYW55KTogYW55O1xuXG4gICAg
bWVyZ2U8VD4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBUW10pOiBUW107XG4gICAgbWVyZ2U8VCxVPihm
aXJzdDogVFtdLCBzZWNvbmQ6IFVbXSk6IGFueVtdO1xuXG4gICAgbm9vcCgpOiBhbnk7XG5cbiAg
ICBub3coKTogbnVtYmVyO1xuXG4gICAgcGFyc2VKU09OKGpzb246IHN0cmluZyk6IGFueTtcblxu
ICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIFhNTCBkb2N1bWVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBkYXRhYSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIHRvIGJlIHBh
cnNlZFxuICAgICAqL1xuICAgIHBhcnNlWE1MKGRhdGE6IHN0cmluZyk6IFhNTERvY3VtZW50O1xu
XG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVl
OiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAg
ICB0eXBlKG9iajogYW55KTogc3RyaW5nO1xuXG4gICAgdW5pcXVlKGFycjogYW55W10pOiBhbnlb
XTtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERP
TSBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIEhUTUwgc3RyaW5nIHRvIGJlIHBh
cnNlZFxuICAgICAqIEBwYXJhbSBjb250ZXh0IERPTSBlbGVtZW50IHRvIHNlcnZlIGFzIHRoZSBj
b250ZXh0IGluIHdoaWNoIHRoZSBIVE1MIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZFxuICAgICAq
IEBwYXJhbSBrZWVwU2NyaXB0cyBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1
ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VI
VE1MKGRhdGE6IHN0cmluZywgY29udGV4dD86IEhUTUxFbGVtZW50LCBrZWVwU2NyaXB0cz86IGJv
b2xlYW4pOiBhbnlbXTtcblxuICAgIEFuaW1hdGlvbihlbGVtOiBhbnksIHByb3BlcnRpZXM6IGFu
eSwgb3B0aW9uczogYW55KTogYW55O1xuXG4gICAgZWFzaW5nOiBKUXVlcnlFYXNpbmc7XG59XG5c
bi8qXG4gICAgVGhlIGpRdWVyeSBpbnN0YW5jZSBtZW1iZXJzXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eSB7XG4gICAgLy8gQUpBWFxuICAgIGFqYXhDb21wbGV0ZShoYW5kbGVyOiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheEVycm9yKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5n
czogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTZW5kKGhh
bmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdGFydChoYW5kbGVyOiAoKSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgYWpheFN0b3AoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IGFqYXhTdWNjZXNzKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczog
YW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbG9hZCh1cmw6IHN0
cmluZywgZGF0YT86IGFueSwgY29tcGxldGU/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzZXJpYWxp
emUoKTogc3RyaW5nO1xuICAgIHNlcmlhbGl6ZUFycmF5KCk6IGFueVtdO1xuXG4gICAgLy8gQXR0
cmlidXRlc1xuICAgIGFkZENsYXNzKGNsYXNzTmFtZXM6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBh
ZGRDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY3VycmVudENsYXNzOiBhbnkpID0+IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRCYWNrL1xuICAgIGFk
ZEJhY2soc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cblxuICAgIGF0dHIoYXR0cmlidXRl
TmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2
YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBmdW5j
OiAoaW5kZXg6IGFueSwgYXR0cjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihtYXA6
IGFueSk6IEpRdWVyeTtcblxuICAgIGhhc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVh
bjtcblxuICAgIGh0bWwoKTogc3RyaW5nO1xuICAgIGh0bWwoaHRtbFN0cmluZzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIGh0bWwoaHRtbENvbnRlbnQ6IChpbmRleDogbnVtYmVyLCBvbGRodG1sOiBz
dHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKG9iajogSlF1ZXJ5KTogSlF1ZXJ5
O1xuXG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBwcm9wKHByb3Bl
cnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AobWFwOiBhbnkp
OiBKUXVlcnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBh
bnksIG9sZFByb3BlcnR5VmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3Zl
QXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVDbGFzcyhj
bGFzc05hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcmVtb3ZlQ2xhc3MoZnVuYzogKGluZGV4
OiBhbnksIGNsczogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVQcm9wKHByb3Bl
cnR5TmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lOiBz
dHJpbmcsIHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhzd3RjaD86
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNs
czogYW55LCBzd3RjaDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB2YWwoKTogYW55O1xu
ICAgIHZhbCh2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgdmFsKGZ1bmM6
IChpbmRleDogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBHZXQgdGhlIHZhbHVlIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBlbGVt
ZW50IGluIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5
TmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBD
U1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBw
YXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAg
IGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2Yg
bWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBD
U1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9y
IHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZh
bHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENT
UyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBh
cmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAg
Y3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9m
IG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEg
Q1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZv
ciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2
YWx1ZTogbnVtYmVyW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3Jl
IENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICog
QHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMg
aXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRo
ZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAg
ICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVy
LCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0
IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVu
dHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5h
bWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0
byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBv
c2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJn
dW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChp
bmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSA9PiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1h
dGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmpl
Y3Qgb2YgcHJvcGVydHktdmFsdWUgcGFpcnMgdG8gc2V0LlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0aWVzOiBPYmplY3QpOiBKUXVlcnk7XG5cbiAgICBoZWlnaHQoKTogbnVtYmVyO1xuICAgIGhl
aWdodCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIGhlaWdodCh2YWx1ZTogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIGhlaWdodChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIGlubmVySGVpZ2h0KCk6IG51bWJlcjtcbiAgICBpbm5lckhlaWdo
dCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJXaWR0aCgpOiBudW1iZXI7XG4g
ICAgaW5uZXJXaWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0KCk6IHsg
bGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgfTtcbiAgICBvZmZzZXQoY29vcmRpbmF0ZXM6IGFu
eSk6IEpRdWVyeTtcbiAgICBvZmZzZXQoZnVuYzogKGluZGV4OiBhbnksIGNvb3JkczogYW55KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2luPzogYm9vbGVh
bik6IG51bWJlcjtcbiAgICBvdXRlckhlaWdodCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2lu
PzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbj86IGJv
b2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJXaWR0aCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFy
Z2luPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHBvc2l0aW9uKCk6IHsgdG9wOiBudW1iZXI7
IGxlZnQ6IG51bWJlcjsgfTtcblxuICAgIHNjcm9sbExlZnQoKTogbnVtYmVyO1xuICAgIHNjcm9s
bExlZnQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHNjcm9sbFRvcCgpOiBudW1iZXI7
XG4gICAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICB3aWR0aCgpOiBu
dW1iZXI7XG4gICAgd2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB3aWR0aCh2YWx1
ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHdpZHRoKGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGF0YVxuICAgIGNsZWFyUXVldWUocXVl
dWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6
IGFueSk6IEpRdWVyeTtcbiAgICBkYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBK
UXVlcnk7XG4gICAgZGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKHF1ZXVl
TmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEobmFtZU9yTGlzdD86IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgcHJvbWlzZSh0eXBlPzogYW55LCB0
YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAg
YW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBjb21wbGV0ZT86IEZ1bmN0
aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFu
eSwgZWFzaW5nPzogc3RyaW5nLCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFu
aW1hdGUocHJvcGVydGllczogYW55LCBvcHRpb25zOiB7IGR1cmF0aW9uPzogYW55OyBlYXNpbmc/
OiBzdHJpbmc7IGNvbXBsZXRlPzogRnVuY3Rpb247IHN0ZXA/OiBGdW5jdGlvbjsgcXVldWU/OiBi
b29sZWFuOyBzcGVjaWFsRWFzaW5nPzogYW55OyB9KTogSlF1ZXJ5O1xuXG4gICAgZGVsYXkoZHVy
YXRpb246IG51bWJlciwgcXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZmFkZUlu
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlSW4oZHVy
YXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5c
biAgICBmYWRlT3V0KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAg
ICBmYWRlT3V0KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNp
dHk6IG51bWJlciwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxu
ICAgIGZhZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
ICAgIGZhZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmaW5pc2goKTogSlF1ZXJ5O1xuXG4gICAgaGlkZShkdXJh
dGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgaGlkZShkdXJhdGlvbj86
IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNo
b3coZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNob3coZHVy
YXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5c
biAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
ICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86
IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVXAoZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVXAoZHVyYXRpb24/
OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBz
dG9wKGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xu
ICAgIHN0b3AocXVldWU/OiBhbnksIGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBi
b29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86
IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmlu
ZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKHNob3dPckhpZGU6IGJvb2xl
YW4pOiBKUXVlcnk7XG5cbiAgICAvLyBFdmVudHNcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5n
LCBldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnRE
YXRhOiBhbnksIHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZChldmVu
dFR5cGU6IHN0cmluZywgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5k
KC4uLmV2ZW50czogYW55W10pOiBKUXVlcnk7XG5cbiAgICBibHVyKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBibHVyKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2hhbmdlXCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
Y2hhbmdlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Y2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0
YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2
ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShl
dmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNsaWNr
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjbGljaygpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICovXG4gICAgY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcImRibGNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBkYmxj
bGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZGVs
ZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwiZm9jdXNcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGZvY3VzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBmb2N1cyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5k
bGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGV2ZW50RGF0
YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQmluZCB0d28gaGFuZGxlcnMgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJl
IGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGVs
ZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbiBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgdGhlIGVsZW1lbnQuXG4gICAgICog
QHBhcmFtIGhhbmRsZXJPdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBv
aW50ZXIgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55LCBoYW5kbGVyT3V0OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhIHNpbmdsZSBoYW5kbGVyIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBi
ZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVs
ZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbk91dCBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVt
ZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbk91dDogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJrZXlkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlk
b3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwia2V5ZG93blwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBrZXlkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGtleWRvd25cIlwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBrZXlkb3duKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5cHJlc3NcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIGtleXByZXNzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXVwXCIgZXZl
bnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXl1cCgpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVw
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5
dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoZXZlbnRE
YXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBsb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBh
c3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGxvYWQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJtb3VzZWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZG93
bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIG1vdXNlZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1v
dXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0
aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgbW91c2Vkb3duKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VlbnRlclwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBh
biBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVu
dGVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBm
aXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2VlbnRlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcIm1vdXNlbGVhdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNlbGVhdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUg
bW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJt
b3VzZW1vdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbW92ZSgp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
Im1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlbW92ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgbW91c2Vtb3ZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdXRcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIG1vdXNlb3V0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChldmVudERhdGE6IE9iamVj
dCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3ZlclwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIg
SmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2VvdmVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZW92ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJtb3VzZXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBt
b3VzZXVwKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlN
b3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBtb3VzZXVwKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIG9mZigpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0
eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFz
IFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAg
ICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUg
b3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0
YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAg
ICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcj86IHN0cmluZywgaGFuZGxlcj86
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBc
ImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50
KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRz
OiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IHdoZXJlIHRoZSBzdHJpbmcga2V5
cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBv
cHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgaGFuZGxlciBmdW5j
dGlvbnMgcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJh
bSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFs
bHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAq
L1xuICAgIG9mZihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVy
IGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRz
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0
ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wi
IG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxz
ZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1w
bHkgZG9lcyByZXR1cm4gZmFsc2UuIFJlc3QgcGFyYW1ldGVyIGFyZ3MgaXMgZm9yIG9wdGlvbmFs
IHBhcmFtZXRlcnMgcGFzc2VkIHRvIGpRdWVyeS50cmlnZ2VyKCkuIE5vdGUgdGhhdCB0aGUgYWN0
dWFsIHBhcmFtZXRlcnMgb24gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gbXVzdCBiZSBtYXJr
ZWQgYXMgb3B0aW9uYWwgKD8gc3ludGF4KS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmlu
ZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCwgLi4uYXJnczogYW55
W10pID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFu
ZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVt
ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2Vw
YXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xp
Y2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBz
ZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQg
ZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwg
b3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVz
IHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBp
cyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkg
ZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVj
dG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBm
dW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVk
IGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBv
ciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3Rv
ciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVu
dHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21p
dHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRv
IHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0
aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAg
Ki9cbiAgICBvbihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9u
ZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVz
ZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwg
bmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0
byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBz
ZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQg
ZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBu
dWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFj
aGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUg
cGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMu
XG4gICAgICovXG4gICAgb24oZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0
b3I/OiBhbnksIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2gg
YSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4
ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZh
U2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBj
dXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
b25lKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0
byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBt
b3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVu
dCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50
IG5hbWVzLlxuICAgICAqIEBwYXJhbSBkYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVs
ZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQg
cGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3Jl
IHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3Vj
aCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNl
bGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhl
IHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3Rv
ciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4g
aXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFs
dWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRo
YXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0
cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRs
ZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQg
YXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5k
IG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBs
dWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0
ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIg
dGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQg
aXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQu
XG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4g
ZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBU
aGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0
aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVu
dHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBo
YW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlw
ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBz
dHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBo
YW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBw
YXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRz
IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYg
dGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNh
bGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFt
IGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVu
IGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiB7IFtrZXk6IHN0cmlu
Z106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cblxu
ICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIERP
TSBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIERPTSBpcyByZWFkeS5cbiAgICAgKi9cbiAgICByZWFk
eShoYW5kbGVyOiBGdW5jdGlvbik6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwicmVzaXplXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXNpemUo
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIHJlc2l6ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgcmVzaXplKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcInNjcm9sbFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAg
c2Nyb2xsKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIHNjcm9sbChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJzZWxlY3RcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAq
L1xuICAgIHNlbGVjdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3QoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic3VibWl0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5c
biAgICAgKi9cbiAgICBzdWJtaXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChldmVudERhdGE/OiBhbnksIGhhbmRs
ZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICB0cmlnZ2VyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtd
KTogSlF1ZXJ5O1xuICAgIHRyaWdnZXIoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KTogSlF1ZXJ5
O1xuXG4gICAgdHJpZ2dlckhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1l
dGVyczogYW55W10pOiBPYmplY3Q7XG5cbiAgICB1bmJpbmQoZXZlbnRUeXBlPzogc3RyaW5nLCBo
YW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIHVuYmluZChldmVudFR5cGU6IHN0cmluZywgZmxzOiBib29sZWFuKTogSlF1ZXJ5O1xu
ICAgIHVuYmluZChldnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHVuZGVsZWdhdGUoKTogSlF1ZXJ5
O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRs
ZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudHM6IGFueSk6IEpRdWVyeTtcbiAgICB1
bmRlbGVnYXRlKG5hbWVzcGFjZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdW5sb2FkKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICB1bmxvYWQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgY29u
dGV4dDogRWxlbWVudDtcbiAgICBqcXVlcnk6IHN0cmluZztcblxuICAgIGVycm9yKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBl
cnJvcihldmVudERhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSk6
IEpRdWVyeTtcbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFueVtdLCBuYW1lOiBhbnksIGFyZ3Vt
ZW50czogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWFuaXB1bGF0aW9uXG4gICAgYWZ0ZXIoLi4u
Y29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYWZ0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtc
biAgICBhcHBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgYXBwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBiZWZvcmUoLi4u
Y29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYmVmb3JlKGZ1bmM6IChpbmRleDogYW55KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9uZSh3aXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4s
IGRlZXBXaXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBkZXRhY2go
c2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBlbXB0eSgpOiBKUXVlcnk7XG5cbiAgICBp
bnNlcnRBZnRlcih0YXJnZXQ6IGFueSk6IEpRdWVyeTtcbiAgICBpbnNlcnRCZWZvcmUodGFyZ2V0
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIHByZXBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgcHJlcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3Zl
KHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZUFsbCh0YXJnZXQ6IGFueSk6
IEpRdWVyeTtcblxuICAgIHJlcGxhY2VXaXRoKGZ1bmM6IGFueSk6IEpRdWVyeTtcblxuICAgIHRl
eHQoKTogc3RyaW5nO1xuICAgIHRleHQodGV4dFN0cmluZzogYW55KTogSlF1ZXJ5O1xuICAgIHRl
eHQodGV4dFN0cmluZzogKGluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgdG9BcnJheSgpOiBhbnlbXTtcblxuICAgIHVud3JhcCgpOiBKUXVlcnk7
XG5cbiAgICB3cmFwKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXAoZnVu
YzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBBbGwod3JhcHBpbmdF
bGVtZW50OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwSW5uZXIod3JhcHBpbmdFbGVtZW50OiBh
bnkpOiBKUXVlcnk7XG4gICAgd3JhcElubmVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZWFjaChmdW5jOiAoaW5kZXg6IGFu
eSwgZWxlbTogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZ2V0KGluZGV4PzogbnVt
YmVyKTogYW55O1xuXG4gICAgaW5kZXgoKTogbnVtYmVyO1xuICAgIGluZGV4KHNlbGVjdG9yOiBz
dHJpbmcpOiBudW1iZXI7XG4gICAgaW5kZXgoZWxlbWVudDogYW55KTogbnVtYmVyO1xuXG4gICAg
Ly8gUHJvcGVydGllc1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7
XG4gICAgW3g6IHN0cmluZ106IGFueTtcbiAgICBbeDogbnVtYmVyXTogSFRNTEVsZW1lbnQ7XG5c
biAgICAvLyBUcmF2ZXJzaW5nXG4gICAgYWRkKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBh
bnkpOiBKUXVlcnk7XG4gICAgYWRkKC4uLmVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBh
ZGQoaHRtbDogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtc
blxuICAgIGNoaWxkcmVuKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvc2VzdChz
ZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZywg
Y29udGV4dD86IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChvYmo6IEpRdWVyeSk6IEpR
dWVyeTtcbiAgICBjbG9zZXN0KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNl
bGVjdG9yczogYW55LCBjb250ZXh0PzogRWxlbWVudCk6IGFueVtdO1xuXG4gICAgY29udGVudHMo
KTogSlF1ZXJ5O1xuXG4gICAgZW5kKCk6IEpRdWVyeTtcblxuICAgIGVxKGluZGV4OiBudW1iZXIp
OiBKUXVlcnk7XG5cbiAgICBmaWx0ZXIoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBm
aWx0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZWxl
bWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxu
ICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaW5kKGVsZW1lbnQ6IGFu
eSk6IEpRdWVyeTtcbiAgICBmaW5kKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmlyc3Qo
KTogSlF1ZXJ5O1xuXG4gICAgaGFzKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGFz
KGNvbnRhaW5lZDogRWxlbWVudCk6IEpRdWVyeTtcblxuICAgIGlzKHNlbGVjdG9yOiBzdHJpbmcp
OiBib29sZWFuO1xuICAgIGlzKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBib29sZWFuO1xu
ICAgIGlzKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW47XG4gICAgaXMob2JqOiBKUXVlcnkpOiBib29s
ZWFuO1xuXG4gICAgbGFzdCgpOiBKUXVlcnk7XG5cbiAgICBtYXAoY2FsbGJhY2s6IChpbmRleDog
YW55LCBkb21FbGVtZW50OiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBuZXh0KHNl
bGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dEFsbChzZWxlY3Rvcj86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIG5leHRVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVy
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86
IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5vdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIG5vdChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIG5vdChlbGVt
ZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgbm90KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAg
b2Zmc2V0UGFyZW50KCk6IEpRdWVyeTtcblxuICAgIHBhcmVudChzZWxlY3Rvcj86IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIHBhcmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBwYXJlbnRzVW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBwYXJlbnRzVW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6
IEpRdWVyeTtcbiAgICBwYXJlbnRzVW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICBwcmV2KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
cHJldkFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZVbnRpbChzZWxl
Y3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChl
bGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRp
bChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNpYmxpbmdz
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwg
ZW5kPzogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgLy8gVXRpbGl0aWVzXG5cbiAgICBxdWV1ZShx
dWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShxdWV1ZU5hbWU6IHN0cmluZywg
bmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG4gICAgcXVldWUobmV3UXVldWVPckNh
bGxiYWNrOiBhbnkpOiBKUXVlcnk7XG59XG5kZWNsYXJlIG1vZHVsZSBcImpxdWVyeVwiIHtcbiAg
ICBleHBvcnQgPSAkO1xufVxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBKUXVlcnlTdGF0aWM7XG5kZWNs
YXJlIHZhciAkOiBKUXVlcnlTdGF0aWM7XG4vLyBsaWJzL2FuZ3VsYXIvYW5ndWxhci5kLnRzXG4v
LyBUeXBlIGRlZmluaXRpb25zIGZvciBBbmd1bGFyIEpTIDEuMFxuLy8gUHJvamVjdDogaHR0cDov
L2FuZ3VsYXJqcy5vcmdcbi8vIERlZmluaXRpb25zIGJ5OiBEaWVnbyBWaWxhciA8aHR0cDovL2dp
dGh1Yi5jb20vZGllZ292aWxhcj5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20v
Ym9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkXG5cblxuXG5kZWNsYXJlIHZhciBhbmd1bGFyOiBu
Zy5JQW5ndWxhclN0YXRpYztcblxuLy8gU3VwcG9ydCBmb3IgcGFpbmxlc3MgZGVwZW5kZW5jeSBp
bmplY3Rpb25cbmludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAgJGluamVjdDpzdHJpbmdbXTtcbn1c
blxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbmcgbW9kdWxlIChhbmd1bGFyLmpzKVxuLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuZGVjbGFyZSBtb2R1bGUgbmcge1xuXG4gICAgLy8gQWxsIHNl
cnZpY2UgcHJvdmlkZXJzIGV4dGVuZCB0aGlzIGludGVyZmFjZVxuICAgIGludGVyZmFjZSBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgJGdldDogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEFuZ3VsYXJTdGF0aWNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SUFuZ3VsYXJTdGF0aWMge1xuICAgICAgICBiaW5kKGNvbnRleHQ6IGFueSwgZm46IEZ1bmN0aW9u
LCAuLi5hcmdzOiBhbnlbXSk6IEZ1bmN0aW9uO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDog
c3RyaW5nLCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAg
IGJvb3RzdHJhcChlbGVtZW50OiBKUXVlcnksIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVj
dG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEVsZW1lbnQsIG1vZHVsZXM/
OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1l
bnQ6IERvY3VtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4g
ICAgICAgIGNvcHkoc291cmNlOiBhbnksIGRlc3RpbmF0aW9uPzogYW55KTogYW55O1xuICAgICAg
ICBlbGVtZW50OiBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljO1xuICAgICAgICBlcXVhbHModmFsdWUx
OiBhbnksIHZhbHVlMjogYW55KTogYm9vbGVhbjtcbiAgICAgICAgZXh0ZW5kKGRlc3RpbmF0aW9u
OiBhbnksIC4uLnNvdXJjZXM6IGFueVtdKTogYW55O1xuICAgICAgICBmb3JFYWNoKG9iajogYW55
LCBpdGVyYXRvcjogKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkp
OiBhbnk7XG4gICAgICAgIGZyb21Kc29uKGpzb246IHN0cmluZyk6IGFueTtcbiAgICAgICAgaWRl
bnRpdHkoYXJnPzogYW55KTogYW55O1xuICAgICAgICBpbmplY3Rvcihtb2R1bGVzPzogYW55W10p
OiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGlzQXJyYXkodmFsdWU6IGFueSk6IGJv
b2xlYW47XG4gICAgICAgIGlzRGF0ZSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNE
ZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0VsZW1lbnQodmFsdWU6IGFu
eSk6IGJvb2xlYW47XG4gICAgICAgIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc09iamVjdCh2
YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xl
YW47XG4gICAgICAgIGlzVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBs
b3dlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIC8qKiBjb25zdHJ1Y3QgeW91
ciBhbmd1bGFyIGFwcGxpY2F0aW9uXG5cdFx0b2ZmaWNpYWwgZG9jczogSW50ZXJmYWNlIGZvciBj
b25maWd1cmluZyBhbmd1bGFyIG1vZHVsZXMuXG5cdFx0c2VlOiBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuXHRcdCovXG4gICAgICAgIG1vZHVsZShcbiAgICAg
ICAgICAgIC8qKiBuYW1lIG9mIHlvdXIgbW9kdWxlIHlvdSB3YW50IHRvIGNyZWF0ZSAqL1xuICAg
ICAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgbW9kdWxlcyB5
b3VycyBkZXBlbmRzIG9uICovXG4gICAgICAgICAgICByZXF1aXJlcz86IHN0cmluZ1tdLFxuICAg
ICAgICAgICAgY29uZmlnRnVuY3Rpb24/OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBub29wKC4u
LmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAgdG9Kc29uKG9iajogYW55LCBwcmV0dHk/OiBi
b29sZWFuKTogc3RyaW5nO1xuICAgICAgICB1cHBlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7
XG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAg
ICAgIG1ham9yOiBudW1iZXI7XG4gICAgICAgICAgICBtaW5vcjogbnVtYmVyO1xuICAgICAgICAg
ICAgZG90OiBudW1iZXI7XG4gICAgICAgICAgICBjb2RlbmFtZTogc3RyaW5nO1xuICAgICAgICB9
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE1vZHVsZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTW9kdWxlIHtcbiAgICAgICAgYW5pbWF0
aW9uKG5hbWU6IHN0cmluZywgYW5pbWF0aW9uRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xu
ICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjog
YW55W10pOiBJTW9kdWxlO1xuICAgICAgICBhbmltYXRpb24ob2JqZWN0OiBPYmplY3QpOiBJTW9k
dWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0
aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBv
biBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWcoY29uZmlnRm46IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5c
blx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBw
ZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGlubGlu
ZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG5h
bWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG9iamVj
dDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGNv
bnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9s
bGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1v
ZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihvYmplY3QgOiBPYmplY3QpOiBJTW9kdWxlO1xuICAg
ICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6
IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFj
dG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTog
c3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAg
ICBmYWN0b3J5KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6
IHN0cmluZywgZmlsdGVyRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAg
ICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6
IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAg
ICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBpbmxpbmVB
bm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbml0aWFsaXphdGlvbkZ1bmN0
aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbmxpbmVBbm5vdGFkZWRGdW5j
dGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgc2Vy
dmljZUNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFt
ZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xu
ICAgICAgICBzZXJ2aWNlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUo
bmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUob2JqZWN0
OiBPYmplY3QpOiBJTW9kdWxlO1xuXG4gICAgICAgIC8vIFByb3BlcnRpZXNcbiAgICAgICAgbmFt
ZTogc3RyaW5nO1xuICAgICAgICByZXF1aXJlczogc3RyaW5nW107XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlc1xuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXR0cmlidXRlcyB7XG5cdC8vIHRo
aXMgaXMgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBzY29wZWQgYXR0cmlidXRl
cy4gaXQncyBub3QgdmVyeSBlbGVnYW50XG5cdC8vIGJlY2F1c2UgeW91IGhhdmUgdG8gdXNlIGF0
dHJzWydmb28nXSBpbnN0ZWFkIG9mIGF0dHJzLmZvbyBidXQgSSBkb24ndCBrbm93IG9mIGEgYmV0
dGVyIHdheVxuXHQvLyB0aGlzIHNob3VsZCByZWFsbHkgYmUgbGltaXRlZCB0byByZXR1cm4gc3Ry
aW5nIGJ1dCBpdCBjcmVhdGVzIHRoaXMgcHJvYmxlbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29t
L3EvMTcyMDE4NTQvMTY1NjU2XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG5cbiAgICAgICAgLy8g
QWRkcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1l
dGVyIHRvIHRoZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVk
IHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkXG4gICAgICAgIC8vIGZvciB0aGUg
Y2xhc3MgYWRkaXRpb24uXG4gICAgICAgICRhZGRDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9p
ZDtcblxuICAgICAgICAvLyBSZW1vdmVzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5
IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgZnJvbSB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYg
YW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJl
ZCBmb3JcbiAgICAgICAgLy8gdGhlIGNsYXNzIHJlbW92YWwuXG4gICAgICAgICRyZW1vdmVDbGFz
cyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBTZXQgRE9NIGVsZW1lbnQg
YXR0cmlidXRlIHZhbHVlLlxuICAgICAgICAkc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTog
dm9pZDtcblxuICAgICAgICAvLyBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxu
ICAgICAgICAvLyBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVy
aW5nIHRoZSBuZXh0ICRkaWdlc3RcbiAgICAgICAgLy8gZm9sbG93aW5nIGNvbXBpbGF0aW9uLiBU
aGUgb2JzZXJ2ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyBpbnRl
cnBvbGF0ZWQgdmFsdWUgY2hhbmdlcy5cbiAgICAgICAgJG9ic2VydmUobmFtZTogc3RyaW5nLCBm
bjoodmFsdWU/OmFueSk9PmFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEEgbWFwIG9mIERP
TSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlz
IG5lZWRlZFxuICAgICAgICAvLyB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQg
bmFtZSBiYWNrIHRvIGFjdHVhbCBuYW1lLlxuICAgICAgICAkYXR0cjogT2JqZWN0O1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZvcm1Db250cm9sbGVyXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpmb3JtLkZvcm1D
b250cm9sbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGb3JtQ29u
dHJvbGxlciB7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBi
b29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29s
ZWFuO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJGFkZENvbnRyb2woY29udHJvbDog
bmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHJlbW92ZUNvbnRyb2woY29u
dHJvbDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHNldERpcnR5KCk6
IHZvaWQ7XG4gICAgICAgICRzZXRQcmlzdGluZSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIE5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250
cm9sbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElOZ01vZGVsQ29u
dHJvbGxlciB7XG4gICAgICAgICRyZW5kZXIoKTogdm9pZDtcbiAgICAgICAgJHNldFZhbGlkaXR5
KHZhbGlkYXRpb25FcnJvcktleTogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKTogdm9pZDtcbiAg
ICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdmlld1ZhbHVlIGFuZCBtb2RlbFZhbHVlIHRv
IGJlIGEgc3RyaW5nIGJ1dCBvdGhlclxuICAgICAgICAvLyB0eXBlcyBkbyB3b3JrIGFuZCBpdCdz
IGNvbW1vbiB0byB1c2UgdGhlbS5cbiAgICAgICAgJHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55KTog
dm9pZDtcbiAgICAgICAgJHZpZXdWYWx1ZTogYW55O1xuXG4gICAgICAgICRtb2RlbFZhbHVlOiBh
bnk7XG5cbiAgICAgICAgJHBhcnNlcnM6IElNb2RlbFBhcnNlcltdO1xuICAgICAgICAkZm9ybWF0
dGVyczogSU1vZGVsRm9ybWF0dGVyW107XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAk
cHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZh
bGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSU1vZGVsUGFyc2VyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbEZvcm1hdHRlciB7XG4gICAgICAgICh2YWx1ZTogYW55
KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNjb3BlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGUuU2Nv
cGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNjb3BlIHtcbiAgICAg
ICAgJGFwcGx5KCk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogc3RyaW5nKTogYW55O1xuICAg
ICAgICAkYXBwbHkoZXhwOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogYW55O1xuXG4gICAgICAg
ICRicm9hZGNhc3QobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7
XG4gICAgICAgICRkZXN0cm95KCk6IHZvaWQ7XG4gICAgICAgICRkaWdlc3QoKTogdm9pZDtcbiAg
ICAgICAgJGVtaXQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7
XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFj
dHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbChleHByZXNzaW9u
OiBzdHJpbmcsIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246
IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG5cbiAgICAgICAg
Ly8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1l
bnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IHN0cmlu
Zyk6IHZvaWQ7XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUp
ID0+IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYnkgdGhlIGlt
cGxlbWVudGF0aW9uIGNoZWNraW5nIHN0cmF0ZWd5XG4gICAgICAgICRuZXcoaXNvbGF0ZT86IGJv
b2xlYW4pOiBJU2NvcGU7XG5cbiAgICAgICAgJG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChl
dmVudDogSUFuZ3VsYXJFdmVudCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEZ1bmN0aW9uO1xu
XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiBzdHJp
bmcsIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2go
d2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZh
bHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFu
KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNj
b3BlKSA9PiBhbnksIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4p
OiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2Nv
cGUpID0+IGFueSwgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2Nv
cGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtc
blxuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0
ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFu
eSk6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjog
KHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1
ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkcGFy
ZW50OiBJU2NvcGU7XG5cbiAgICAgICAgJGlkOiBudW1iZXI7XG5cbiAgICAgICAgLy8gSGlkZGVu
IG1lbWJlcnNcbiAgICAgICAgJCRpc29sYXRlQmluZGluZ3M6IGFueTtcbiAgICAgICAgJCRwaGFz
ZTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5ndWxhckV2ZW50IHtcbiAgICAgICAg
dGFyZ2V0U2NvcGU6IElTY29wZTtcbiAgICAgICAgY3VycmVudFNjb3BlOiBJU2NvcGU7XG4gICAg
ICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IEZ1bmN0aW9uO1xuICAg
ICAgICBkZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBv
bmx5IGV2ZW50cyB0aGF0IHdlcmUgJGVtaXQtdGVkXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbj86
IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdpbmRv
d1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHdp
bmRvd1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJV2luZG93U2Vydmlj
ZSBleHRlbmRzIFdpbmRvdyB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQnJv
d3NlclNlcnZpY2VcbiAgICAvLyBUT0RPIHVuZG9jdW1lbnRlZCwgc28gd2UgbmVlZCB0byBnZXQg
aXQgZnJvbSB0aGUgc291cmNlIGNvZGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUJyb3dzZXJTZXJ2aWNlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBUaW1lb3V0U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kdGltZW91dFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGlt
ZW91dFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5PzogbnVtYmVyLCBp
bnZva2VBcHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJv
bWlzZTogSVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gSW50ZXJ2YWxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnZhbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJSW50ZXJ2YWxTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBk
ZWxheTogbnVtYmVyLCBjb3VudD86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVBy
b21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29s
ZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZpbHRlclNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyUHJvdmlk
ZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZpbHRlclNlcnZpY2Ug
e1xuICAgICAgICAobmFtZTogc3RyaW5nKTogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElGaWx0ZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBy
ZWdpc3RlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3Rvcnk6IEZ1bmN0aW9uKTogSVNlcnZpY2VQ
cm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbGVT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2Nh
bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2FsZVNlcnZpY2Ug
e1xuICAgICAgICBpZDogc3RyaW5nO1xuXG4gICAgICAgIC8vIFRoZXNlIGFyZSBub3QgZG9jdW1l
bnRlZFxuICAgICAgICAvLyBDaGVjayBhbmd1bGFyJ3MgaTE4biBmaWxlcyBmb3IgZXhlbXBsZXNc
biAgICAgICAgTlVNQkVSX0ZPUk1BVFM6IElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yO1xu
ICAgICAgICBEQVRFVElNRV9GT1JNQVRTOiBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9y
O1xuICAgICAgICBwbHVyYWxDYXQ6IChudW06IGFueSkgPT4gc3RyaW5nO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIERFQ0lN
QUxfU0VQOiBzdHJpbmc7XG4gICAgICAgIEdST1VQX1NFUDogc3RyaW5nO1xuICAgICAgICBQQVRU
RVJOUzogSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yW107XG4gICAgICAgIENVUlJFTkNZ
X1NZTTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyUGF0dGVy
bkRlc2NyaXB0b3Ige1xuICAgICAgICBtaW5JbnQ6IG51bWJlcjtcbiAgICAgICAgbWluRnJhYzog
bnVtYmVyO1xuICAgICAgICBtYXhGcmFjOiBudW1iZXI7XG4gICAgICAgIHBvc1ByZTogc3RyaW5n
O1xuICAgICAgICBwb3NTdWY6IHN0cmluZztcbiAgICAgICAgbmVnUHJlOiBzdHJpbmc7XG4gICAg
ICAgIG5lZ1N1Zjogc3RyaW5nO1xuICAgICAgICBnU2l6ZTogbnVtYmVyO1xuICAgICAgICBsZ1Np
emU6IG51bWJlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZURhdGVUaW1lRm9ybWF0
RGVzY3JpcHRvciB7XG4gICAgICAgIE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRNT05U
SDogc3RyaW5nW107XG4gICAgICAgIERBWTogc3RyaW5nW107XG4gICAgICAgIFNIT1JUREFZOiBz
dHJpbmdbXTtcbiAgICAgICAgQU1QTVM6IHN0cmluZ1tdO1xuICAgICAgICBtZWRpdW06IHN0cmlu
ZztcbiAgICAgICAgc2hvcnQ6IHN0cmluZztcbiAgICAgICAgZnVsbERhdGU6IHN0cmluZztcbiAg
ICAgICAgbG9uZ0RhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtRGF0ZTogc3RyaW5nO1xuICAg
ICAgICBzaG9ydERhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtVGltZTogc3RyaW5nO1xuICAg
ICAgICBzaG9ydFRpbWU6IHN0cmluZztcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBMb2dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRsb2dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvZ1Nl
cnZpY2Uge1xuICAgICAgICBkZWJ1ZzogSUxvZ0NhbGw7XG4gICAgICAgIGVycm9yOiBJTG9nQ2Fs
bDtcbiAgICAgICAgaW5mbzogSUxvZ0NhbGw7XG4gICAgICAgIGxvZzogSUxvZ0NhbGw7XG4gICAg
ICAgIHdhcm46IElMb2dDYWxsO1xuICAgIH1cblxuICAgIC8vIFdlIGRlZmluZSB0aGlzIGFzIHNl
cGFyZXRlIGludGVyZmFjZSBzbyB3ZSBjYW4gcmVvcGVuIGl0IGxhdGVyIGZvclxuICAgIC8vIHRo
ZSBuZ01vY2sgbW9kdWxlLlxuICAgIGludGVyZmFjZSBJTG9nQ2FsbCB7XG4gICAgICAgICguLi5h
cmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gUGFyc2VTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRwYXJzZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUGFyc2VT
ZXJ2aWNlIHtcbiAgICAgICAgKGV4cHJlc3Npb246IHN0cmluZyk6IElDb21waWxlZEV4cHJlc3Np
b247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlZEV4cHJlc3Npb24ge1xuICAgICAg
ICAoY29udGV4dDogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG5cbiAgICAgICAgLy8gSWYgdmFs
dWUgaXMgbm90IHByb3ZpZGVkLCB1bmRlZmluZWQgaXMgZ29ubmEgYmUgdXNlZCBzaW5jZSB0aGUg
aW1wbGVtZW50YXRpb25cbiAgICAgICAgLy8gZG9lcyBub3QgY2hlY2sgdGhlIHBhcmFtZXRlci4g
TGV0J3MgZm9yY2UgYSB2YWx1ZSBmb3IgY29uc2lzdGVuY3kuIElmIGNvbnN1bWVyXG4gICAgICAg
IC8vIHdoYW50cyB0byB1bmRlZmluZSBpdCwgcGFzcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGV4cGxp
Y2l0bHkuXG4gICAgICAgIGFzc2lnbihjb250ZXh0OiBhbnksIHZhbHVlOiBhbnkpOiBhbnk7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYXRpb25TZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25Qcm92aWRl
clxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rldl9ndWlkZS5z
ZXJ2aWNlcy4kbG9jYXRpb25cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SUxvY2F0aW9uU2VydmljZSB7XG4gICAgICAgIGFic1VybCgpOiBzdHJpbmc7XG4gICAgICAgIGhh
c2goKTogc3RyaW5nO1xuICAgICAgICBoYXNoKG5ld0hhc2g6IHN0cmluZyk6IElMb2NhdGlvblNl
cnZpY2U7XG4gICAgICAgIGhvc3QoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKCk6IHN0cmluZztc
biAgICAgICAgcGF0aChuZXdQYXRoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAg
ICBwb3J0KCk6IG51bWJlcjtcbiAgICAgICAgcHJvdG9jb2woKTogc3RyaW5nO1xuICAgICAgICBy
ZXBsYWNlKCk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaCgpOiBhbnk7XG4gICAg
ICAgIHNlYXJjaChwYXJhbWV0ZXJzTWFwOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAg
ICBzZWFyY2gocGFyYW1ldGVyOiBzdHJpbmcsIHBhcmFtZXRlclZhbHVlOiBhbnkpOiBJTG9jYXRp
b25TZXJ2aWNlO1xuICAgICAgICB1cmwoKTogc3RyaW5nO1xuICAgICAgICB1cmwodXJsOiBzdHJp
bmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYXRpb25Q
cm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBoYXNoUHJlZml4KCk6
IHN0cmluZztcbiAgICAgICAgaGFzaFByZWZpeChwcmVmaXg6IHN0cmluZyk6IElMb2NhdGlvblBy
b3ZpZGVyO1xuICAgICAgICBodG1sNU1vZGUoKTogYm9vbGVhbjtcblxuICAgICAgICAvLyBEb2N1
bWVudGF0aW9uIHN0YXRlcyB0aGF0IHBhcmFtZXRlciBpcyBzdHJpbmcsIGJ1dFxuICAgICAgICAv
LyBpbXBsZW1lbnRhdGlvbiB0ZXN0cyBpdCBhcyBib29sZWFuLCB3aGljaCBtYWtlcyBtb3JlIHNl
bnNlXG4gICAgICAgIC8vIHNpbmNlIHRoaXMgaXMgYSB0b2dnbGVyXG4gICAgICAgIGh0bWw1TW9k
ZShhY3RpdmU6IGJvb2xlYW4pOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBEb2N1bWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGRvY3VtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElEb2N1bWVudFNlcnZpY2UgZXh0ZW5kcyBEb2N1bWVudCB7fVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRXhjZXB0aW9uSGFuZGxlclNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGV4Y2VwdGlvbkhh
bmRsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUV4Y2VwdGlvbkhh
bmRsZXJTZXJ2aWNlIHtcbiAgICAgICAgKGV4Y2VwdGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5n
KTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290RWxl
bWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JHJvb3RFbGVtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290
RWxlbWVudFNlcnZpY2UgZXh0ZW5kcyBKUXVlcnkge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFFTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRxXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElRU2Vydmlj
ZSB7XG4gICAgICAgIGFsbChwcm9taXNlczogSVByb21pc2U8YW55PltdKTogSVByb21pc2U8YW55
W10+O1xuICAgICAgICBkZWZlcjxUPigpOiBJRGVmZXJyZWQ8VD47XG4gICAgICAgIHJlamVjdChy
ZWFzb24/OiBhbnkpOiBJUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgd2hlbjxUPih2YWx1ZTogVCk6
IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJUHJvbWlzZTxUPiB7XG4gICAg
ICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJ
SHR0cFByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFu
eSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3Vs
dD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVl
OiBUKSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNl
VmFsdWU6IFQpID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IFRS
ZXN1bHQsIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRS
ZXN1bHQ+O1xuXG5cbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjog
YW55KSA9PiBJSHR0cFByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAg
ICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJUHJvbWlzZTxU
UmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJl
amVjdGVkOiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQpOiBJUHJvbWlzZTxUUmVzdWx0Pjtcblxu
ICAgICAgICBmaW5hbGx5PFRSZXN1bHQ+KGZpbmFsbHlDYWxsYmFjazogKCk9PmFueSk6SVByb21p
c2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElEZWZlcnJlZDxUPiB7XG4gICAg
ICAgIHJlc29sdmUodmFsdWU/OiBUKTogdm9pZDtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFu
eSk6IHZvaWQ7XG4gICAgICAgIG5vdGlmeShzdGF0ZT86YW55KTogdm9pZDtcbiAgICAgICAgcHJv
bWlzZTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gQW5jaG9yU2Nyb2xsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kYW5jaG9yU2Nyb2xsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElBbmNob3JTY3JvbGxTZXJ2aWNlIHtcbiAgICAgICAgKCk6IHZvaWQ7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElBbmNob3JTY3JvbGxQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJv
dmlkZXIge1xuICAgICAgICBkaXNhYmxlQXV0b1Njcm9sbGluZygpOiB2b2lkO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENhY2hlRmFjdG9yeVNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNhY2hlRmFjdG9yeVxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ2FjaGVGYWN0b3J5U2VydmljZSB7
XG4gICAgICAgIC8vIExldHMgbm90IGZvY2UgdGhlIG9wdGlvbnNNYXAgdG8gaGF2ZSB0aGUgY2Fw
YWNpdHkgbWVtYmVyLiBFdmVuIHRob3VnaFxuICAgICAgICAvLyBpdCdzIHRoZSBPTkxZIG9wdGlv
biBjb25zaWRlcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0b2RheSwgYSBjb25zdW1lclxuICAg
ICAgICAvLyBtaWdodCBmaW5kIGl0IHVzZWZ1bCB0byBhc3NvY2lhdGUgc29tZSBvdGhlciBvcHRp
b25zIHRvIHRoZSBjYWNoZSBvYmplY3QuXG4gICAgICAgIC8vKGNhY2hlSWQ6IHN0cmluZywgb3B0
aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IENhY2hlT2JqZWN0O1xuICAgICAgICAo
Y2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogSUNh
Y2hlT2JqZWN0O1xuXG4gICAgICAgIC8vIE1ldGhvZHMgYmVsbG93IGFyZSBub3QgZG9jdW1lbnRl
ZFxuICAgICAgICBpbmZvKCk6IGFueTtcbiAgICAgICAgZ2V0IChjYWNoZUlkOiBzdHJpbmcpOiBJ
Q2FjaGVPYmplY3Q7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDYWNoZU9iamVjdCB7XG4gICAg
ICAgIGluZm8oKToge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHNpemU6
IG51bWJlcjtcblxuICAgICAgICAgICAgLy8gTm90IGdhcmFudGVlZCB0byBoYXZlLCBzaW5jZSBp
dCdzIGEgbm9uLW1hbmRhdG9yeSBvcHRpb25cbiAgICAgICAgICAgIC8vY2FwYWNpdHk6IG51bWJl
cjtcbiAgICAgICAgfTtcbiAgICAgICAgcHV0KGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZv
aWQ7XG4gICAgICAgIGdldCAoa2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIHJlbW92ZShrZXk6
IHN0cmluZyk6IHZvaWQ7XG4gICAgICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xuICAgICAgICBkZXN0
cm95KCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29t
cGlsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGNvbXBpbGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNv
bXBpbGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29t
cGlsZVNlcnZpY2Uge1xuICAgICAgICAoZWxlbWVudDogc3RyaW5nLCB0cmFuc2NsdWRlPzogSVRl
bXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxp
bmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQsIHRyYW5zY2x1ZGU/OiBJ
VGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRl
TGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogSlF1ZXJ5LCB0cmFuc2NsdWRlPzog
SVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0
ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVQcm92aWRl
ciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3Ry
aW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElDb21waWxlUHJvdmlkZXI7XG5cbiAg
ICAgICAgLy8gVW5kb2N1bWVudGVkLCBidXQgaXQgaXMgdGhlcmUuLi5cbiAgICAgICAgZGlyZWN0
aXZlKGRpcmVjdGl2ZXNNYXA6IGFueSk6IElDb21waWxlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiB7XG4gICAgICAgIC8vIExldCdzIGhp
bnQgYnV0IG5vdCBmb3JjZSBjbG9uZUF0dGFjaEZuJ3Mgc2lnbmF0dXJlXG4gICAgICAgIChzY29w
ZTogSVNjb3BlLCBjbG9uZUF0dGFjaEZuPzogKGNsb25lZEVsZW1lbnQ/OiBKUXVlcnksIHNjb3Bl
PzogSVNjb3BlKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gQ29udHJvbGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGNvbnRyb2xsZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJQ29udHJvbGxlclNlcnZpY2Uge1xuICAgICAgICAvLyBBbHRo
b3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHN0YXRlIHRoaXMsIGxvY2FscyBhcmUgb3B0
aW9uYWxcbiAgICAgICAgKGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86
IGFueSk6IGFueTtcbiAgICAgICAgKGNvbnRyb2xsZXJOYW1lOiBzdHJpbmcsIGxvY2Fscz86IGFu
eSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJQcm92aWRlciBleHRl
bmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNv
bnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICByZWdpc3Rlcihu
YW1lOiBzdHJpbmcsIGRlcGVuZGVuY3lBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiB2b2lk
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwU2VydmljZSB7XG4gICAgICAgIC8v
IEF0IGxlYXN0IG1vZXRob2QgYW5kIHVybCBtdXN0IGJlIHByb3ZpZGVkLi4uXG4gICAgICAgIChj
b25maWc6IElSZXF1ZXN0Q29uZmlnKTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGdldCAo
dXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgZGVsZXRlICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBoZWFkKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55
KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGpzb25wKHVybDogc3RyaW5nLCBSZXF1ZXN0
Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHBvc3QodXJsOiBzdHJp
bmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xu
ICAgICAgICBwdXQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6
IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG5c
biAgICAgICAgLy8gRm9yIGRlYnVnZ2luZywgQlVUIGl0IGlzIGRvY3VtZW50ZWQgYXMgcHVibGlj
LCBzby4uLlxuICAgICAgICBwZW5kaW5nUmVxdWVzdHM6IGFueVtdO1xuICAgIH1cblxuICAgIC8v
IFRoaXMgaXMganVzdCBmb3IgaGludGluZy5cbiAgICAvLyBTb21lIG9wZXRpb25zIG1pZ2h0IG5v
dCBiZSBhdmFpbGFibGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0LlxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cCNVc2FnZSBmb3Igb3B0aW9ucyBleHBs
YW5hdGlvbnNcbiAgICBpbnRlcmZhY2UgSVJlcXVlc3RDb25maWcge1xuICAgICAgICBtZXRob2Q6
IHN0cmluZztcbiAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIHBhcmFtcz86IGFueTtcblxu
ICAgICAgICAvLyBYWFggaXQgaGFzIGl0J3Mgb3duIHN0cnVjdHVyZS4uLiAgcGVyaGFwcyB3ZSBz
aG91bGQgZGVmaW5lIGl0IGluIHRoZSBmdXR1cmVcbiAgICAgICAgaGVhZGVycz86IGFueTtcblxu
ICAgICAgICBjYWNoZT86IGFueTtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtc
blxuICAgICAgICAvLyBUaGVzZSBhY2NlcHQgbXVsdGlwbGUgdHlwZXMsIHNvIGxldCdzIGRlZmlu
ZSB0aGVtIGFzIGFueVxuICAgICAgICBkYXRhPzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXF1
ZXN0PzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZT86IGFueTtcbiAgICAgICAgdGlt
ZW91dD86IGFueTsgLy8gbnVtYmVyIHwgcHJvbWlzZVxuICAgIH1cblxuICAgIGludGVyZmFjZSBJ
SHR0cFByb21pc2VDYWxsYmFjazxUPiB7XG4gICAgICAgIChkYXRhOiBULCBzdGF0dXM6IG51bWJl
ciwgaGVhZGVyczogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nLCBjb25maWc6IElSZXF1
ZXN0Q29uZmlnKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2Fs
bGJhY2tBcmc8VD4ge1xuICAgICAgICBkYXRhPzogVDtcbiAgICAgICAgc3RhdHVzPzogbnVtYmVy
O1xuICAgICAgICBoZWFkZXJzPzogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xuICAg
ICAgICBjb25maWc/OiBJUmVxdWVzdENvbmZpZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0
dHBQcm9taXNlPFQ+IGV4dGVuZHMgSVByb21pc2U8VD4ge1xuICAgICAgICBzdWNjZXNzKGNhbGxi
YWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAg
ZXJyb3IoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+
O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0
cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZXNw
b25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1
bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJ
SHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2Fs
bGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJ
UHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm92aWRlciBl
eHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25m
aWc7XG4gICAgICAgIGludGVyY2VwdG9yczogYW55W107XG4gICAgICAgIHJlc3BvbnNlSW50ZXJj
ZXB0b3JzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBI
dHRwQmFja2VuZFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGh0dHBCYWNrZW5kXG4gICAgLy8gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIHVzZSB0
aGlzIHNlcnZpY2UgZGlyZWN0bHkuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElIdHRwQmFja2VuZFNlcnZpY2Uge1xuICAgICAgICAvLyBYWFggUGVyaGFwcyBkZWZpbmUg
Y2FsbGJhY2sgc2lnbmF0dXJlIGluIHRoZSBmdXR1cmVcbiAgICAgICAgKG1ldGhvZDogc3RyaW5n
LCB1cmw6IHN0cmluZywgcG9zdD86IGFueSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaGVhZGVycz86
IGFueSwgdGltZW91dD86IG51bWJlciwgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbik6IHZvaWQ7
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJwb2xhdGVTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBv
bGF0ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJw
b2xhdGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50
ZXJwb2xhdGVTZXJ2aWNlIHtcbiAgICAgICAgKHRleHQ6IHN0cmluZywgbXVzdEhhdmVFeHByZXNz
aW9uPzogYm9vbGVhbik6IElJbnRlcnBvbGF0aW9uRnVuY3Rpb247XG4gICAgICAgIGVuZFN5bWJv
bCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSUludGVycG9sYXRpb25GdW5jdGlvbiB7XG4gICAgICAgIChjb250ZXh0OiBh
bnkpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmlu
ZztcbiAgICAgICAgc3RhcnRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3Zp
ZGVyO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBlbmRTeW1ib2wodmFs
dWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIFRlbXBsYXRlQ2FjaGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0ZW1wbGF0ZUNhY2hlXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUNhY2hlU2VydmljZSBleHRlbmRzIElD
YWNoZU9iamVjdCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdFNjb3Bl
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9v
dFNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290U2NvcGVT
ZXJ2aWNlIGV4dGVuZHMgSVNjb3BlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBTQ0VTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRzY2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0aW50ZXJmYWNlIElTQ0VTZXJ2aWNlIHtc
blx0XHRnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG5c
dFx0Z2V0VHJ1c3RlZENzcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRIdG1sKHZh
bHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEpzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0
Z2V0VHJ1c3RlZFJlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFVy
bCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHBhcnNlKHR5cGU6IHN0cmluZywgZXhwcmVzc2lvbjog
c3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFz
Q3NzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBh
bnk7XG5cdFx0cGFyc2VBc0h0bWwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwg
bG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSnMoZXhwcmVzc2lvbjogc3RyaW5nKTog
KGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzUmVzb3VyY2VV
cmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFu
eTtcblx0XHRwYXJzZUFzVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxv
Y2FsczogYW55KSA9PiBhbnk7XG5cdFx0dHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiBhbnk7XG5cdFx0dHJ1c3RBc0h0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSnMo
dmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFu
eTtcblx0XHR0cnVzdEFzVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0aXNFbmFibGVkKCk6IGJv
b2xlYW47XG5cdH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVByb3ZpZGVy
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VQcm92aWRl
clxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFUHJvdmlkZXIgZXh0
ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6
IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdh
dGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRz
Y2VEZWxlZ2F0ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVs
ZWdhdGVTZXJ2aWNlIHtcbiAgICAgICAgZ2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1
c3RlZDogYW55KTogYW55O1xuICAgICAgICB0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFu
eSk6IGFueTtcbiAgICAgICAgdmFsdWVPZih2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVQcm92aWRlclxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVQcm92aWRl
clxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVQcm92
aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZXNvdXJjZVVybEJsb2Nr
bGlzdChibG9ja2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICAgICAgcmVzb3VyY2VVcmxBbGxvd0xp
c3QoYWxsb3dsaXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gRGlyZWN0aXZlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZlXG4gICAgLy8gYW5kIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlyZWN0aXZlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG5cbiAgICBpbnRlcmZhY2UgSURpcmVjdGl2ZXtcbiAgICAgICAgY29tcGlsZT86XG4gICAgICAg
ICAgICAodGVtcGxhdGVFbGVtZW50OiBhbnksXG4gICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0
ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgdHJhbnNjbHVkZTogKHNjb3BlOiBJU2NvcGUs
IGNsb25lTGlua2luZ0ZuOiBGdW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgICAgKSA9PiBhbnk7
XG4gICAgICAgIGNvbnRyb2xsZXI/OiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXJBcz86IHN0cmlu
ZztcbiAgICAgICAgbGluaz86XG4gICAgICAgICAgICAoc2NvcGU6IElTY29wZSxcbiAgICAgICAg
ICAgIGluc3RhbmNlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgaW5zdGFuY2VBdHRyaWJ1dGVz
OiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGFueVxuICAgICAgICAgICAg
KSA9PiB2b2lkO1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBwcmlvcml0eT86IG51
bWJlcjtcbiAgICAgICAgcmVwbGFjZT86IGJvb2xlYW47XG4gICAgICAgIHJlcXVpcmU/OiBhbnk7
XG4gICAgICAgIHJlc3RyaWN0Pzogc3RyaW5nO1xuICAgICAgICBzY29wZT86IGFueTtcbiAgICAg
ICAgdGVtcGxhdGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlVXJsPzogYW55O1xuICAgICAgICB0
ZXJtaW5hbD86IGJvb2xlYW47XG4gICAgICAgIHRyYW5zY2x1ZGU/OiBhbnk7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYW5ndWxhci5lbGVtZW50XG4gICAgLy8gd2hl
biBjYWxsaW5nIGFuZ3VsYXIuZWxlbWVudCwgYW5ndWxhciByZXR1cm5zIGEgalF1ZXJ5IG9iamVj
dCxcbiAgICAvLyBhdWdtZW50ZWQgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgbGlrZSBlLmcuIHNj
b3BlLlxuICAgIC8vIHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5l
bGVtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRK
UXVlcnlTdGF0aWMgZXh0ZW5kcyBKUXVlcnlTdGF0aWMge1xuICAgICAgICAoc2VsZWN0b3I6IHN0
cmluZywgY29udGV4dD86IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50
OiBFbGVtZW50KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDoge30pOiBJQXVn
bWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBJQXVnbWVu
dGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xu
ICAgICAgICAoZnVuYzogRnVuY3Rpb24pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoYXJy
YXk6IGFueVtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKCk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnkgZXh0ZW5kcyBKUXVl
cnkge1xuICAgICAgICAvLyBUT0RPOiBldmVudHMsIGhvdyB0byBkZWZpbmU/XG4gICAgICAgIC8v
JGRlc3Ryb3lcblxuICAgICAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBJQXVnbWVudGVkSlF1
ZXJ5O1xuICAgICAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAg
ICAgIGZpbmQob2JqOiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuXG4gICAgICAgIGNvbnRy
b2xsZXIobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICBpbmplY3RvcigpOiBhbnk7XG4gICAg
ICAgIHNjb3BlKCk6IElTY29wZTtcblxuICAgICAgICBpbmhlcml0ZWREYXRhKGtleTogc3RyaW5n
LCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKG9iajogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5Pzog
c3RyaW5nKTogYW55O1xuXG5cbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEFVVE8gbW9kdWxlIChhbmd1bGFyLmpzKVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGV4cG9ydCBtb2R1bGUgYXV0byB7XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAg
Ly8gSW5qZWN0b3JTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9BVVRPLiRpbmplY3RvclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBp
bnRlcmZhY2UgSUluamVjdG9yU2VydmljZSB7XG4gICAgICAgICAgICBhbm5vdGF0ZShmbjogRnVu
Y3Rpb24pOiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGFubm90YXRlKGlubGluZUFubm90YWRlZEZ1
bmN0aW9uOiBhbnlbXSk6IHN0cmluZ1tdO1xuICAgICAgICAgICAgZ2V0IChuYW1lOiBzdHJpbmcp
OiBhbnk7XG4gICAgICAgICAgICBpbnN0YW50aWF0ZSh0eXBlQ29uc3RydWN0b3I6IEZ1bmN0aW9u
LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoaW5saW5lQW5ub3RhZGVk
RnVuY3Rpb246IGFueVtdKTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGZ1bmM6IEZ1bmN0aW9u
LCBjb250ZXh0PzogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIH1cblxuICAgICAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBQcm92aWRlU2VydmljZVxuICAgICAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kcHJvdmlkZVxuICAgICAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2UgSVByb3ZpZGVTZXJ2aWNlIHtcbiAgICAg
ICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBpdCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGlu
c3RhbmNlLCBidXQgYWN0dWFsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5v
dCByZXR1cm4gYW55dGhpbmcuXG4gICAgICAgICAgICAvLyBjb25zdGFudChuYW1lOiBzdHJpbmcs
IHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZh
bHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBk
ZWNvcmF0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBz
dHJpbmcsIGRlY29yYXRvcklubGluZTogYW55W10pOiB2b2lkO1xuICAgICAgICAgICAgZmFjdG9y
eShuYW1lOiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogbmcuSVNl
cnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVB
bm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAg
ICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjogbmcuSVNlcnZpY2VQcm92aWRlcik6
IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcs
IHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlk
ZXI7XG4gICAgICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IEZ1bmN0
aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHZhbHVlKG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgIH1cblxuICAgIH1c
bn1cbi8vIG1vZGVscy9Ub2RvSXRlbS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3Ry
aWN0JztcblxuICAgIGV4cG9ydCBjbGFzcyBUb2RvSXRlbSB7XG4gICAgICAgIGNvbnN0cnVjdG9y
KFxuICAgICAgICAgICAgcHVibGljIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgICAgICBwdWJsaWMg
Y29tcGxldGVkOiBib29sZWFuXG4gICAgICAgICAgICApIHsgfVxuICAgIH1cbn1cbi8vIGludGVy
ZmFjZXMvSVRvZG9TY29wZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNl
IElUb2RvU2NvcGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xuXHRcdHRvZG9zOiBUb2RvSXRlbVtdO1xu
XHRcdG5ld1RvZG86IHN0cmluZztcblx0XHRlZGl0ZWRUb2RvOiBUb2RvSXRlbTtcblx0XHRvcmln
aW5hbFRvZG86IFRvZG9JdGVtO1xuXHRcdHJlbWFpbmluZ0NvdW50OiBudW1iZXI7XG5cdFx0ZG9u
ZUNvdW50OiBudW1iZXI7XG5cdFx0YWxsQ2hlY2tlZDogYm9vbGVhbjtcblx0XHRyZXZlcnRlZDog
Ym9vbGVhbjtcblx0XHRzdGF0dXNGaWx0ZXI6IHsgY29tcGxldGVkPzogYm9vbGVhbiB9O1xuXHRc
dGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlO1xuXHRcdHZtOiBUb2RvQ3RybDtcblx0fVxu
fVxuLy8gaW50ZXJmYWNlcy9JVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhw
b3J0IGludGVyZmFjZSBJVG9kb1N0b3JhZ2Uge1xuXHRcdGdldCAoKTogVG9kb0l0ZW1bXTtcblx0
XHRwdXQodG9kb3M6IFRvZG9JdGVtW10pO1xuXHR9XG59Ly8gZGlyZWN0aXZlcy9Ub2RvRm9jdXMu
dHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBEaXJl
Y3RpdmUgdGhhdCBwbGFjZXMgZm9jdXMgb24gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3
aGVuIHRoZSBleHByZXNzaW9uIGl0IGJpbmRzIHRvIGV2YWx1YXRlcyB0byB0cnVlLlxuXHQgKi9c
blx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Gb2N1cygkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNl
KTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5n
LklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0
JHNjb3BlLiR3YXRjaChhdHRyaWJ1dGVzLnRvZG9Gb2N1cywgbmV3dmFsID0+IHtcblx0XHRcdFx0
XHRpZiAobmV3dmFsKSB7XG5cdFx0XHRcdFx0XHQkdGltZW91dCgoKSA9PiBlbGVtZW50WzBdLmZv
Y3VzKCksIDAsIGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRc
dH07XG5cdH1cblxuXHR0b2RvRm9jdXMuJGluamVjdCA9IFsnJHRpbWVvdXQnXTtcblxufS8vIGRp
cmVjdGl2ZXMvVG9kb0JsdXIudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7
XG5cbiAgICAvKipcbiAgICAgKiBEaXJlY3RpdmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9u
IHdoZW4gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byBsb3NlcyBmb2N1cy5cbiAgICAgKi9c
biAgICBleHBvcnQgZnVuY3Rpb24gdG9kb0JsdXIoKTogbmcuSURpcmVjdGl2ZSB7XG4gICAgICAg
IHJldHVybiB7XG4gICAgICAgICAgICBsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6
IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5i
aW5kKCdibHVyJywgKCkgPT4geyAkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0JsdXIpOyB9
KTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVu
dC51bmJpbmQoJ2JsdXInKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxu
fVxuLy8gZGlyZWN0aXZlcy9Ub2RvRXNjYXBlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ug
c3RyaWN0JztcblxuXHRjb25zdCBFU0NBUEVfS0VZID0gMjc7XG5cblx0LyoqXG5cdCAqIERpcmVj
dGl2ZSB0aGF0IGNhbmNlbHMgZWRpdGluZyBhIHRvZG8gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUg
RXNjIGtleS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRXNjYXBlKCk6IG5nLklEaXJl
Y3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVs
ZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuYmlu
ZCgna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09
PSBFU0NBUEVfS0VZKSB7XG5cdFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9k
b0VzY2FwZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQkc2NvcGUuJG9u
KCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2tleWRvd24nKTsgfSk7XG5cdFx0
XHR9XG5cdFx0fTtcblx0fVxufVxuLy8gc2VydmljZXMvVG9kb1N0b3JhZ2UudHNcblxubW9kdWxl
IHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlcyB0
aGF0IHBlcnNpc3RzIGFuZCByZXRyaWV2ZXMgVE9ET3MgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAg
ICovXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9TdG9yYWdlIGltcGxlbWVudHMgSVRvZG9TdG9yYWdl
IHtcblxuICAgICAgICBTVE9SQUdFX0lEID0gJ3RvZG9zLWFuZ3VsYXJqcy10eXBlc2NyaXB0Jztc
blxuICAgICAgICBnZXQgKCk6IFRvZG9JdGVtW10ge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04u
cGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0lEKSB8fCAnW10nKTtcbiAg
ICAgICAgfVxuXG4gICAgICAgIHB1dCh0b2RvczogVG9kb0l0ZW1bXSkge1xuICAgICAgICAgICAg
bG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2Rv
cykpO1xuICAgICAgICB9XG4gICAgfVxufS8vIGNvbnRyb2xsZXJzL1RvZG9DdHJsLnRzXG5cbm1v
ZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogVGhlIG1haW4gY29u
dHJvbGxlciBmb3IgdGhlIGFwcC4gVGhlIGNvbnRyb2xsZXI6XG5cdCAqIC0gcmV0cmlldmVzIGFu
ZCBwZXJzaXN0cyB0aGUgbW9kZWwgdmlhIHRoZSB0b2RvU3RvcmFnZSBzZXJ2aWNlXG5cdCAqIC0g
ZXhwb3NlcyB0aGUgbW9kZWwgdG8gdGhlIHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5k
bGVyc1xuXHQgKi9cblx0ZXhwb3J0IGNsYXNzIFRvZG9DdHJsIHtcblxuXHRcdHByaXZhdGUgdG9k
b3M6IFRvZG9JdGVtW107XG5cblx0XHQvLyAkaW5qZWN0IGFubm90YXRpb24uXG5cdFx0Ly8gSXQg
cHJvdmlkZXMgJGluamVjdG9yIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jaWVzIHRv
IGJlIGluamVjdGVkIGludG8gY29uc3RydWN0b3Jcblx0XHQvLyBpdCBpcyBiZXR0ZXIgdG8gaGF2
ZSBpdCBjbG9zZSB0byB0aGUgY29uc3RydWN0b3IsIGJlY2F1c2UgdGhlIHBhcmFtZXRlcnMgbXVz
dCBtYXRjaCBpbiBjb3VudCBhbmQgdHlwZS5cblx0XHQvLyBTZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9ndWlkZS9kaVxuXHRcdHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcblx0XHRcdCck
c2NvcGUnLFxuXHRcdFx0JyRsb2NhdGlvbicsXG5cdFx0XHQndG9kb1N0b3JhZ2UnLFxuXHRcdFx0
J2ZpbHRlckZpbHRlcidcblx0XHRdO1xuXG5cdFx0Ly8gZGVwZW5kZW5jaWVzIGFyZSBpbmplY3Rl
ZCB2aWEgQW5ndWxhckpTICRpbmplY3RvclxuXHRcdC8vIGNvbnRyb2xsZXIncyBuYW1lIGlzIHJl
Z2lzdGVyZWQgaW4gQXBwbGljYXRpb24udHMgYW5kIHNwZWNpZmllZCBmcm9tIG5nLWNvbnRyb2xs
ZXIgYXR0cmlidXRlIGluIGluZGV4Lmh0bWxcblx0XHRjb25zdHJ1Y3Rvcihcblx0XHRcdHByaXZh
dGUgJHNjb3BlOiBJVG9kb1Njb3BlLFxuXHRcdFx0cHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2Nh
dGlvblNlcnZpY2UsXG5cdFx0XHRwcml2YXRlIHRvZG9TdG9yYWdlOiBJVG9kb1N0b3JhZ2UsXG5c
dFx0XHRwcml2YXRlIGZpbHRlckZpbHRlclxuXHRcdCkge1xuXHRcdFx0dGhpcy50b2RvcyA9ICRz
Y29wZS50b2RvcyA9IHRvZG9TdG9yYWdlLmdldCgpO1xuXG5cdFx0XHQkc2NvcGUubmV3VG9kbyA9
ICcnO1xuXHRcdFx0JHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXG5cdFx0XHQvLyAndm0nIHN0
YW5kcyBmb3IgJ3ZpZXcgbW9kZWwnLiBXZSdyZSBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNv
bnRyb2xsZXIgdG8gdGhlIHNjb3BlXG5cdFx0XHQvLyBmb3IgaXRzIG1ldGhvZHMgdG8gYmUgYWNj
ZXNzaWJsZSBmcm9tIHZpZXcgLyBIVE1MXG5cdFx0XHQkc2NvcGUudm0gPSB0aGlzO1xuXG5cdFx0
XHQvLyB3YXRjaGluZyBmb3IgZXZlbnRzL2NoYW5nZXMgaW4gc2NvcGUsIHdoaWNoIGFyZSBjYXVz
ZWQgYnkgdmlldy91c2VyIGlucHV0XG5cdFx0XHQvLyBpZiB5b3Ugc3Vic2NyaWJlIHRvIHNjb3Bl
IG9yIGV2ZW50IHdpdGggbGlmZXRpbWUgbG9uZ2VyIHRoYW4gdGhpcyBjb250cm9sbGVyLCBtYWtl
IHN1cmUgeW91IHVuc3Vic2NyaWJlLlxuXHRcdFx0JHNjb3BlLiR3YXRjaCgndG9kb3MnLCAoKSA9
PiB0aGlzLm9uVG9kb3MoKSwgdHJ1ZSk7XG5cdFx0XHQkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5w
YXRoKCknLCBwYXRoID0+IHRoaXMub25QYXRoKHBhdGgpKVxuXG5cdFx0XHRpZiAoJGxvY2F0aW9u
LnBhdGgoKSA9PT0gJycpICRsb2NhdGlvbi5wYXRoKCcvJyk7XG5cdFx0XHQkc2NvcGUubG9jYXRp
b24gPSAkbG9jYXRpb247XG5cdFx0fVxuXG5cdFx0b25QYXRoKHBhdGg6IHN0cmluZykge1xuXHRc
dFx0dGhpcy4kc2NvcGUuc3RhdHVzRmlsdGVyID0gKHBhdGggPT09ICcvYWN0aXZlJykgP1xuXHRc
dFx0XHR7IGNvbXBsZXRlZDogZmFsc2UgfSA6IChwYXRoID09PSAnL2NvbXBsZXRlZCcpID9cblx0
XHRcdFx0eyBjb21wbGV0ZWQ6IHRydWUgfSA6IHt9O1xuXHRcdH1cblxuXHRcdG9uVG9kb3MoKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudCA9IHRoaXMuZmlsdGVyRmlsdGVyKHRo
aXMudG9kb3MsIHsgY29tcGxldGVkOiBmYWxzZSB9KS5sZW5ndGg7XG5cdFx0XHR0aGlzLiRzY29w
ZS5kb25lQ291bnQgPSB0aGlzLnRvZG9zLmxlbmd0aCAtIHRoaXMuJHNjb3BlLnJlbWFpbmluZ0Nv
dW50O1xuXHRcdFx0dGhpcy4kc2NvcGUuYWxsQ2hlY2tlZCA9ICF0aGlzLiRzY29wZS5yZW1haW5p
bmdDb3VudFxuXHRcdFx0dGhpcy50b2RvU3RvcmFnZS5wdXQodGhpcy50b2Rvcyk7XG5cdFx0fVxu
XG5cdFx0YWRkVG9kbygpIHtcblx0XHRcdHZhciBuZXdUb2RvIDogc3RyaW5nID0gdGhpcy4kc2Nv
cGUubmV3VG9kby50cmltKCk7XG5cdFx0XHRpZiAoIW5ld1RvZG8ubGVuZ3RoKSB7XG5cdFx0XHRc
dHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy50b2Rvcy5wdXNoKG5ldyBUb2RvSXRlbShu
ZXdUb2RvLCBmYWxzZSkpO1xuXHRcdFx0dGhpcy4kc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdH1c
blxuXHRcdGVkaXRUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUu
ZWRpdGVkVG9kbyA9IHRvZG9JdGVtO1xuXG5cdFx0XHQvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9k
byBpbiBjYXNlIGVkaXRpbmcgaXMgY2FuY2VsbGVkLlxuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2lu
YWxUb2RvID0gYW5ndWxhci5leHRlbmQoe30sIHRvZG9JdGVtKTtcblx0XHR9XG5cblx0XHRyZXZl
cnRFZGl0cyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3NbdGhpcy50b2Rv
cy5pbmRleE9mKHRvZG9JdGVtKV0gPSB0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG87XG5cdFx0XHR0
aGlzLiRzY29wZS5yZXZlcnRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0ZG9uZUVkaXRpbmcodG9k
b0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtc
blx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy4k
c2NvcGUucmV2ZXJ0ZWQpIHtcblx0XHRcdFx0Ly8gVG9kbyBlZGl0cyB3ZXJlIHJldmVydGVkLCBk
b24ndCBzYXZlLlxuXHRcdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IG51bGw7XG5cdFx0XHRc
dHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRvZG9JdGVtLnRpdGxlID0gdG9kb0l0ZW0udGl0bGUu
dHJpbSgpO1xuXHRcdFx0aWYgKCF0b2RvSXRlbS50aXRsZSkge1xuXHRcdFx0XHR0aGlzLnJlbW92
ZVRvZG8odG9kb0l0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbW92ZVRvZG8odG9kb0l0
ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zLnNwbGljZSh0aGlzLnRvZG9zLmluZGV4
T2YodG9kb0l0ZW0pLCAxKTtcblx0XHR9XG5cblx0XHRjbGVhckRvbmVUb2RvcygpIHtcblx0XHRc
dHRoaXMuJHNjb3BlLnRvZG9zID0gdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG9J
dGVtID0+ICF0b2RvSXRlbS5jb21wbGV0ZWQpO1xuXHRcdH1cblxuXHRcdG1hcmtBbGwoY29tcGxl
dGVkOiBib29sZWFuKSB7XG5cdFx0XHR0aGlzLnRvZG9zLmZvckVhY2godG9kb0l0ZW0gPT4geyB0
b2RvSXRlbS5jb21wbGV0ZWQgPSBjb21wbGV0ZWQ7IH0pO1xuXHRcdH1cblx0fVxuXG59XG4vLyBB
cHBsaWNhdGlvbi50c1xuXG4vKipcbiAqIFRoZSBtYWluIFRvZG9NVkMgYXBwIG1vZHVsZS5cbiAq
XG4gKiBAdHlwZSB7YW5ndWxhci5Nb2R1bGV9XG4gKi9cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3Vz
ZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212Yycs
IFtdKVxuICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ3RvZG9DdHJsJywgVG9kb0N0cmwpXG4gICAg
ICAgICAgICAuZGlyZWN0aXZlKCd0b2RvQmx1cicsIHRvZG9CbHVyKVxuICAgICAgICAgICAgLmRp
cmVjdGl2ZSgndG9kb0ZvY3VzJywgdG9kb0ZvY3VzKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgn
dG9kb0VzY2FwZScsIHRvZG9Fc2NhcGUpXG4gICAgICAgICAgICAuc2VydmljZSgndG9kb1N0b3Jh
Z2UnLCBUb2RvU3RvcmFnZSk7XG59XG4iCiAKIC8qKiovIH0pLAogLyogNDE1ICovCiAvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8vICAgICBV
bmRlcnNjb3JlLmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAg
ICAoYykgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0
aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJl
ZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xu
XG4gIC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJs
aXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRz
YCBvbiB0aGUgc2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJl
dmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29y
ZSA9IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBn
emlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2Jq
UHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7
XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2Vz
cyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJh
eVByb3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4g
ICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3Bl
cnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0
IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2Vc
biAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9
IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4g
ICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRl
ICAgICAgID0gT2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2Ug
Zm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24o
KXt9O1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9i
amVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChv
YmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBf
KSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxu
ICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxu
ICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEku
IElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVj
dC5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBl
b2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhw
b3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAg
fSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxu
ICBfLlZFUlNJT04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0
dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2Yg
dGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVy
IFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9u
KGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkg
cmV0dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50
KSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1
cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDI6IHJl
dHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChj
b250ZXh0LCB2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1
bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAg
Y2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVj
dGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2
YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtc
biAgICB9O1xuICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVy
YXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBp
biBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxu
ICAvLyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIs
IG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250
ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0
eTtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUs
IGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBf
Lm1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAg
Xy5pdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZh
bHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rp
b24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVy
ID0gZnVuY3Rpb24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rp
b24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlm
IChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIg
aW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNl
ID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2Up
LFxuICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlm
ICghdW5kZWZpbmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJj
ZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4g
IH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVj
dCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlv
bihwcm90b3R5cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9
O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtc
biAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0
b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07
XG5cbiAgdmFyIHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4g
ICAgfTtcbiAgfTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRl
cm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFu
IGFycmF5IG9yIGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemls
bGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9p
ZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFY
X0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHBy
b3BlcnR5KCdsZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlv
bikge1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJu
IHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1B
WF9BUlJBWV9JTkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGlt
cGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGlu
IGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1s
aWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0
aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Io
aXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlM
aWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9
XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3Ig
KGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAg
IGl0ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4g
ICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlp
bmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBm
dW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVy
YXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtl
eXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAg
IHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNb
aW5kZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJy
ZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4g
IH07XG5cbiAgLy8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3Ig
cmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQg
aXRlcmF0b3IgZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRo
ZSBtYWluIGZ1bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5j
dGlvbiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7
XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGly
KSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7
XG4gICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRL
ZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1
cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgaXRlcmF0
ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0g
IWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtl
eXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0
aCAtIDE7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBw
cm92aWRlZC5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1v
ID0gb2JqW2tleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGly
O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtl
eXMsIGluZGV4LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxk
cyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAs
XG4gIC8vIG9yIGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3Jl
YXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJl
ZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9
IGNyZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBw
YXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRl
dGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtc
biAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5kSW5kZXgob2Jq
LCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRL
ZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lk
IDAgJiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBh
bGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMg
YHNlbGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2Io
cHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVz
dWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxu
ICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxz
LlxuICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAg
cmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xu
ICB9O1xuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2gg
YSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwg
PSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNi
KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAm
JiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4g
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAg
dmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICgh
cHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNl
O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQg
bGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAg
Ly8gQWxpYXNlZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHBy
ZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4
dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAg
ICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBr
ZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJl
bnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJu
IGZhbHNlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNv
bnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNs
dWRlc2AgYW5kIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1
ZGUgPSBmdW5jdGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlz
QXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9t
SW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8u
aW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2Ug
YSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5c
biAgXy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0
aG9kKTtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFy
IGZ1bmMgPSBpc0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1
bmMgPT0gbnVsbCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAg
fTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBt
YXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkp
IHtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8v
IENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNl
bGVjdGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVl
YCBwYWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4g
Xy5maWx0ZXIob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5j
ZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmly
c3Qgb2JqZWN0XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4g
IF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQo
b2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0g
ZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rp
b24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHks
IGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAg
IGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0Fy
cmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAw
LCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUg
PSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3Vs
dCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJh
dGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24o
dmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUs
IGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNv
bXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAg
ICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAg
ICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAg
Ly8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRp
b24pLlxuICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2
YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2
YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwp
IHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xu
ICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0
KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9
IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBf
LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0
ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQg
PCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5m
aW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0
ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBy
ZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rl
cm4gdmVyc2lvbiBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4u
d2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUg
PSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6
IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNo
dWZmbGVkID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGlu
ZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgp
O1xuICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFty
YW5kXTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0
dXJuIHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZy
b20gYSBjb2xsZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5z
IGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1
bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9u
KG9iaiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBp
ZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4g
b2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZm
bGUob2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUg
b2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxu
ICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVy
YXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChv
YmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAg
ICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlh
OiBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVu
Y3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAg
IHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBp
ZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8
IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5k
ZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50
ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25z
LlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlv
bihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAg
ICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1
bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUs
IGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAg
ICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBz
IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5n
IGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMg
dGhlIGNyaXRlcmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1
ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2
YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVz
IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlg
LCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxs
IGJlIHVuaXF1ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwg
a2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGlu
c3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQ
YXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdy
b3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQs
IGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAv
LyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxl
LlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtd
O1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBp
ZiAoaXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAg
cmV0dXJuIF8udmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2Yg
ZWxlbWVudHMgaW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBp
ZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8g
b2JqLmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNv
bGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkg
dGhlIGdpdmVuXG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8g
bm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmos
IHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29u
dGV4dCk7XG4gICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1
bmN0aW9uKHZhbHVlLCBrZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBv
YmopID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFz
cywgZmFpbF07XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAq
Km4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBB
bGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFs
bG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFr
ZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSBy
ZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVsw
XTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtc
blxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJh
eS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3Np
bmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBl
eGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1
YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5
Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBH
ZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVy
biB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0
aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9p
ZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5n
dGggLSAxXTtcbiAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5n
dGggLSBuKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3Qg
ZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBF
c3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4q
KiB3aWxsIHJldHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8u
cmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAg
IHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4g
IH07XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBf
LmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwg
Xy5pZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSBy
ZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlu
cHV0LCBzaGFsbG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10s
IGlkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1
dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkg
fHwgXy5pc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxl
dmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2
YWx1ZSA9IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAgIHZhciBqID0g
MCwgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAg
ICAgICAgd2hpbGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVb
aisrXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91
dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtc
biAgfTtcblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChi
eSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFy
cmF5LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNl
KTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMg
bm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rp
b24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFy
Z3VtZW50cywgMSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJz
aW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29y
dGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAg
Ly8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihh
cnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVh
bihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVl
ID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRl
cmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFy
IHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZh
bHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVl
KHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAg
ICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAg
ICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAg
ICBpZiAoIV8uY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNo
KGNvbXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAg
ICAgIH0gZWxzZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVz
dWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9
O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2gg
ZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5c
biAgXy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1
bWVudHMsIHRydWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQg
Y29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1p
biBhcnJheXMuXG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIg
cmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAg
IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5jb250YWlucyhy
ZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xl
bmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0p
KSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVz
aChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJh
eXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJy
YXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAg
dmFyIHJlc3QgPSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJu
IF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFp
bnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0
aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAg
Ly8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0
dXJuIF8udW56aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50IG9mIF8uemlw
LiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2gg
YXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24o
YXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0
aCkubGVuZ3RoIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1
bHRbaW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVz
dWx0O1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRo
ZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBw
YXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25l
IG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlv
bihsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9
IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBp
ZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAg
IH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAg
ICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1
bmN0aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9u
c1xuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1
cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRl
ID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgo
YXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAg
ICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xu
ICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJu
IGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBS
ZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJl
ZGljYXRlIHRlc3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigx
KTtcbiAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xu
XG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxl
c3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBh
cyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4
ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShv
YmopO1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGls
ZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gp
IC8gMik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlk
ICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4g
IC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRl
eE9mIGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0
ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBp
ZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAg
IGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4g
ICAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkp
O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRo
Lm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAg
ICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlk
eCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0g
PT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7
XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3Ro
KSwgXy5pc05hTik7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAg
ICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0g
MCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0g
PT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtc
biAgfVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ug
b2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGlu
Y2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJl
YWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8g
dXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8u
ZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4
RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIg
QXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAg
Ly8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQ
eXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0
aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVw
KSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4g
ICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIg
bGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xu
ICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBp
ZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0g
c3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9u
IChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJt
aW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8v
IG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIg
ZXhlY3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBj
YWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNl
b2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4g
ICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIg
cmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVj
dChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8v
IENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRo
aXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNN
QVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5c
biAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5k
ICYmIGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVu
Yywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5j
KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9u
Jyk7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJv
dW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5k
LCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAg
ICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBm
dW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4g
IC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0
aGlzYCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55
IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwg
PSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1l
bnRzLCAxKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlv
biA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5
KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAg
ICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10g
OiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVu
dHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVy
biBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4g
ICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0
J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUg
dGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFs
bCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBf
LmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRz
Lmxlbmd0aCwga2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5k
QWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5
XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtc
blxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1
bHRzLlxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVt
b2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtc
biAgICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cykgOiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hl
W2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNh
Y2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVy
biBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4g
bnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUg
YXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xu
ICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtc
biAgICB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGlu
ZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJl
ZC5cbiAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5z
IGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBh
dCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5
LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2Fu
LCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtc
biAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBs
ZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4
ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5j
dGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3Vs
dDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBp
ZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtc
biAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygp
O1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRl
eHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4g
ICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtc
biAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlv
dXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7
XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBp
ZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGlt
ZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1l
b3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAg
cmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0
KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9w
dGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0
KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9
O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBj
b250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUg
ZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxu
ICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRo
ZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFp
bGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xu
ICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAg
IHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGlt
ZXN0YW1wO1xuXG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAg
IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Ug
e1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAg
ICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlm
ICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4g
ICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xu
ICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAg
ICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91
dCkgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cp
IHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAg
Y29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFz
IGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3Qg
YXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9u
YWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24o
ZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHBy
ZWRpY2F0ZS5cbiAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhl
IGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5n
IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21w
b3NlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0
YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZh
ciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywg
YXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlz
LCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIg
dGhlIE50aCBjYWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0
dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xu
XG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0
byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlv
bih0aW1lcywgZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtc
biAgICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlz
LCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxs
O1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVu
Y3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBo
b3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlv
bi5cbiAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVu
Y3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0
IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxu
ICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxl
KCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lz
UHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0
eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4g
IGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVu
dW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9
IG9iai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVj
dG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29u
c3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3In
O1xuICAgIGlmIChfLmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBr
ZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9w
ID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2Jq
ICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkp
IHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8v
IFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8g
RGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBf
LmtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJu
IFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZh
ciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5
KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVt
QnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4g
IH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3Qu
XG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmop
KSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2Jq
KSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1C
dWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAg
fTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMu
XG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2Jq
KTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5
KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAg
dmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9
O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRv
IGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0
IHJldHVybnMgYW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRl
ZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAg
IHZhciBrZXlzID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3Ro
LFxuICAgICAgICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5O1xuICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBj
dXJyZW50S2V5ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBp
dGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAg
ICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEg
bGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVu
Z3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNb
aV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUg
a2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6
YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307
XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlz
W2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8v
IFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24g
dGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBf
Lm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3Ig
KHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFt
ZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4g
IC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNz
ZWQtaW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7
XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRp
ZXMgaW4gdGhlIHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09i
amVjdC9hc3NpZ24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihf
LmtleXMpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBw
YXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRp
Y2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7
XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlz
W2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5
O1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBj
b250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlv
bihvYmplY3QsIG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2Jq
ID0gb2JqZWN0LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBy
ZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0g
Xy5hbGxLZXlzKG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBj
b250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBm
YWxzZSwgZmFsc2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBv
YmopIHsgcmV0dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAg
ICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3Ro
OyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2Jq
W2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0g
PSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJu
IGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsYWNrbGlzdGVkIHByb3BlcnRpZXMu
XG4gIF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAo
Xy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVy
YXRlZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1
bWVudHMsIGZhbHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0
aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7
XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRl
eHQpO1xuICB9O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHBy
b3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUp
O1xuXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4g
cHJvdG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92
aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3Qu
XG4gIF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1
bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihy
ZXN1bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBh
IChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAg
IHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7
XG4gIH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVu
IHJldHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlz
IHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9y
bSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4g
IF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9i
aik7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2Jq
ZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0g
ZnVuY3Rpb24ob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwg
bGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxl
bmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAo
YXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xu
ICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2
ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9u
KGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVx
dWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0
aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9k
b2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0g
MCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNl
c3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwg
YiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2Jq
ZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChi
IGluc3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11d
YCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAo
Y2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNo
IChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVz
c2lvbnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAg
Y2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8g
c3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAg
ICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVp
ciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwi
NVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4g
ICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVt
YmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhp
dmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAg
IGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBj
b21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAg
IHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBj
YXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAg
ICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZh
bHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25k
IHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29u
ZCByZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50
LlxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMg
PSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtc
biAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0Jykg
cmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVj
dG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAg
IC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0
cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9y
ICYmICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3Rv
ciBpbnN0YW5jZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0
cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZh
bHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBz
dHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3Ry
dWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qg
b3BlcmF0aW9uIGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2Vk
IG9iamVjdHMuXG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0g
Zm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8
fCBbXTtcbiAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFj
ay5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNo
LiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Zc
biAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVu
Z3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8v
IEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5c
biAgICBhU3RhY2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vy
c2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtc
biAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNv
bXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBp
ZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21w
YXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAg
IHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhd
LCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xu
ICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhh
KSwga2V5O1xuICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhh
dCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZv
cmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAh
PT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAg
ICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3Ro
XTtcbiAgICAgICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0
YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1v
dmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5c
biAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xu
ICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9i
amVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0
dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Ig
b2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxl
IG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAo
b2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChf
LmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkg
cmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9
PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8u
aXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9k
ZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4g
IC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJh
eSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5n
LmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8
fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5
cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwg
aXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0
aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVu
Y3Rpb24obmFtZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
ICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztc
biAgICB9O1xuICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBt
ZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0
IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50
cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAg
ICAgcmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRp
bWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9m
IGJ1Z3MgaW4gb2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMx
OTI5KS5cbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5
ICE9ICdvYmplY3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
ICByZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1c
blxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUg
PSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFy
c2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChO
YU4gaXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8u
aXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9i
aiAhPT0gK29iajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAg
Xy5pc0Jvb2xlYW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8
IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFu
XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlz
TnVsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5c
biAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBm
dW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8g
U2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBw
cm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24g
YSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJu
IG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4g
IC8vIFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVu
IFVuZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZh
cmlhYmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0
byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xu
ICAgIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtc
blxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRl
cmF0ZWVzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFs
dWU7XG4gIH07XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1
c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFs
dWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAg
fTtcbiAgfTtcblxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHBy
b3BlcnR5O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0
aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24o
a2V5KSB7XG4gICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1
cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZl
biBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hl
cyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMp
O1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2Jq
LCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1l
cy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFy
IGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVD
YihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKysp
IGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8v
IFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSku
XG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwp
IHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBt
aW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xu
XG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3Rh
bXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAg
ICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRN
TCBlbnRpdGllcyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAn
JmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcm
cXVvdDsnLFxuICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4g
IHZhciB1bmVzY2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25z
IGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBv
bGF0aW9uLlxuICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBl
c2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAg
IH07XG4gICAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBi
ZSBlc2NhcGVkXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcp
ICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJl
cGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihz
dHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmlu
ZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNl
KHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNj
YXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNj
YXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJv
cGVydHlgIGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVj
dGAgYXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rp
b24ob2JqZWN0LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3Qg
PT0gbnVsbCA/IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2
b2lkIDApIHtcbiAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlz
RnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAg
Ly8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJl
IGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAg
dmFyIGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAg
ICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXgg
KyBpZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkIt
c3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVt
cGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxh
dGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4g
ICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6
IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVt
cGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRl
cnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0
IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLile
LztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQg
dGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2Fw
ZXMgPSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxu
ICAgICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHUyMDI4Jzog
J3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9
IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9
IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xu
ICB9O1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2hu
IFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5k
bGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5k
IGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8v
IE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0
eS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykg
e1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGlu
Z3M7XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNl
dHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4
cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAg
ICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdz
LmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0
ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAg
ICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFs
cyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwi
X19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2Nh
cGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4
dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAg
ICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtc
biAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxs
PycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUp
IHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwi
KSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4g
ICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4g
ICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBw
cm9kdWNlIHRoZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtc
biAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qg
c3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNl
dHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsg
J31cXG4nO1xuXG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90
eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJn
dW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5c
biAgICB0cnkge1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJp
YWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUu
c291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxh
dGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0
YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBh
IGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0
aW5ncy52YXJpYWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24o
JyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1w
bGF0ZTtcbiAgfTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWlu
aW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0
cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0t
LS0tLS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0
IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxl
LiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVu
ZGVyc2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1
bHRzLlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVy
biBpbnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBB
ZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4g
IF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwg
ZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xu
ICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3Mg
PSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtc
biAgICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAg
IH07XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5j
dGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBh
bGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3Bv
cCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlm
dCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07
XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0
aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAg
IGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0
aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTtc
biAgICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0
byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVu
Y3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8u
cHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMs
IG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtc
blxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9i
amVjdC5cbiAgXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhp
cy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNv
bWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGht
ZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBf
LnByb3RvdHlwZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50
b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4g
IH07XG5cbiAgLy8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBh
dGliaWxpdHkgd2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0
LXR1cm4gc2VtYW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJh
Y3RpY2UgZm9yIEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3Jl
IHJlZ2lzdGVyc1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwg
aXQgaXMgYSBiYXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBi
dW5kbGVkIGluIGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4g
QU1EIGxvYWQgcmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hl
biBhblxuICAvLyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2Fk
ZXIgcmVxdWVzdC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5l
LmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAg
IHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgorbW9kdWxlLmV4cG9y
dHMgPSAiLy8gICAgIFVuZGVyc2NvcmUuanMgMS44LjNcbi8vICAgICBodHRwOi8vdW5kZXJzY29y
ZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENs
b3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNj
b3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4o
ZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1c
blxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nl
ciwgb3IgYGV4cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuXG4gIHZhciByb290ID0gdGhpcztcblxuICAv
LyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJl
dmlvdXNVbmRlcnNjb3JlID0gcm9vdC5fO1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlm
aWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXku
cHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0
aW9uLnByb3RvdHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBm
b3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAg
ICAgICAgICA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQ
cm90by5zbGljZSxcbiAgICB0b1N0cmluZyAgICAgICAgID0gT2JqUHJvdG8udG9TdHJpbmcsXG4g
ICAgaGFzT3duUHJvcGVydHkgICA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFs
bCAqKkVDTUFTY3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3
ZSBob3BlIHRvIHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyXG4gICAgbmF0aXZl
SXNBcnJheSAgICAgID0gQXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzICAgICAgICAgPSBP
YmplY3Qua2V5cyxcbiAgICBuYXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZCxcbiAg
ICBuYXRpdmVDcmVhdGUgICAgICAgPSBPYmplY3QuY3JlYXRlO1xuXG4gIC8vIE5ha2VkIGZ1bmN0
aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgdmFyIEN0
b3IgPSBmdW5jdGlvbigpe307XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhl
IFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhp
cyBpbnN0YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0g
b2JqO1xuICB9O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9k
ZS5qcyoqLCB3aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGBy
ZXF1aXJlKClgIEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMg
YSBnbG9iYWwgb2JqZWN0LlxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7
XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRz
KSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBv
cnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJy
ZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjguMyc7XG5cbiAgLy8gSW50ZXJuYWwgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVy
c2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFw
cGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6
ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4
dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwg
PyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7
XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAg
ICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICByZXR1
cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBvdGhlcik7XG4gICAgICB9O1xuICAgICAgY2Fz
ZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAg
ICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUs
IGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwg
YWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1c
biAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0
LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVu
Y3Rpb24gdG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgLy8gdG8g
ZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3Vs
dCDigJQgZWl0aGVyXG4gIC8vIGlkZW50aXR5LCBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJv
cGVydHkgbWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rp
b24odmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJl
dHVybiBfLmlkZW50aXR5O1xuICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0
aW1pemVDYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChfLmlzT2JqZWN0KHZh
bHVlKSkgcmV0dXJuIF8ubWF0Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIF8ucHJvcGVydHkodmFs
dWUpO1xuICB9O1xuICBfLml0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHtcbiAg
ICByZXR1cm4gY2IodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBBbiBp
bnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIg
Y3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgdW5kZWZpbmVkT25seSkge1xuICAg
IHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVu
Z3RoO1xuICAgICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4g
ICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAg
ICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtl
eXNGdW5jKHNvdXJjZSksXG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07
XG4gICAgICAgICAgaWYgKCF1bmRlZmluZWRPbmx5IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9i
altrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBv
Ymo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRp
bmcgYSBuZXcgb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICB2YXIgYmFzZUNy
ZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSkge1xuICAgIGlmICghXy5pc09iamVjdChwcm90b3R5
cGUpKSByZXR1cm4ge307XG4gICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0
ZShwcm90b3R5cGUpO1xuICAgIEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciBy
ZXN1bHQgPSBuZXcgQ3RvcjtcbiAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJu
IHJlc3VsdDtcbiAgfTtcblxuICB2YXIgcHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICBy
ZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAg
OiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBt
ZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUg
aXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6
Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVu
Z3RoXG4gIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMy
MDk0XG4gIHZhciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuICB2YXIg
Z2V0TGVuZ3RoID0gcHJvcGVydHkoJ2xlbmd0aCcpO1xuICB2YXIgaXNBcnJheUxpa2UgPSBmdW5j
dGlvbihjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9u
KTtcbiAgICByZXR1cm4gdHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAm
JiBsZW5ndGggPD0gTUFYX0FSUkFZX0lOREVYO1xuICB9O1xuXG4gIC8vIENvbGxlY3Rpb24gRnVu
Y3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25l
LCBhbiBgZWFjaGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMg
cmF3IG9iamVjdHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8g
c3BhcnNlIGFycmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbiAgXy5lYWNoID0gXy5m
b3JFYWNoID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVl
ID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAg
ICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2Jq
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwg
b2JqKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2Jq
KTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAg
ICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVz
dWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9
IF8uY29sbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVy
YXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlr
ZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxl
bmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkg
PSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRl
cmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1
cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVy
YXRpbmcgbGVmdCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAg
IC8vIE9wdGltaXplZCBpdGVyYXRvciBmdW5jdGlvbiBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3Ro
XG4gICAgLy8gaW4gdGhlIG1haW4gZnVuY3Rpb24gd2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMx
OTkxLlxuICAgIGZ1bmN0aW9uIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGlu
ZGV4LCBsZW5ndGgpIHtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tp
bmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50
S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAg
IH1cblxuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7
XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAg
ICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAg
ICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+
IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIC8vIERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1
ZSBpZiBub25lIGlzIHByb3ZpZGVkLlxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7
XG4gICAgICAgIG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAg
ICBpbmRleCArPSBkaXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVy
YXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoq
UmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMs
IGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0g
Xy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZl
IHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmln
aHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0
IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4g
IF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICB2YXIga2V5O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBrZXkgPSBf
LmZpbmRJbmRleChvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAg
IGtleSA9IF8uZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlm
IChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5c
biAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAg
Ly8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9u
KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBw
cmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5k
ZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1
bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRy
dXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNv
bnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUp
KSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBl
bGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8u
ZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAg
cHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0Fy
cmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBv
YmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRl
eCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4
O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmop
KSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERl
dGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0
cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1
bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJl
ZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8u
a2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIg
Y3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRp
Y2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAg
IH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJh
eSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFs
aWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNs
dWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkg
e1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBp
ZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtc
biAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xu
XG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4g
YSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAg
dmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8u
aXNGdW5jdGlvbihtZXRob2QpO1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVl
KSB7XG4gICAgICB2YXIgZnVuYyA9IGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07XG4g
ICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gZnVuYyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3Mp
O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24g
dXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5j
dGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7
XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBv
ZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNp
ZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykg
e1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4g
IC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBn
ZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZh
bHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAg
cmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVy
biB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAg
Xy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3Vs
dCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwg
Y29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAg
ICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xu
ICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7XG4g
ICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Ug
e1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2go
b2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBp
dGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0
Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0
eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9
IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3Vs
dDtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1i
YXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29u
dGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5p
dHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAm
JiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8u
dmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAo
dmFsdWUgPCByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxu
ICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250
ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xu
ICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAg
IGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYg
cmVzdWx0ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAg
ICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9
XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwg
dXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZm
bGVdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSku
XG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBzZXQgPSBpc0FycmF5TGlr
ZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0
aDtcbiAgICB2YXIgc2h1ZmZsZWQgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4
ID0gMCwgcmFuZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJhbmQgPSBfLnJh
bmRvbSgwLCBpbmRleCk7XG4gICAgICBpZiAocmFuZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4
XSA9IHNodWZmbGVkW3JhbmRdO1xuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xu
ICAgIH1cbiAgICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH07XG5cbiAgLy8gU2FtcGxlICoqbioqIHJh
bmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24uXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVj
aWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5h
bCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2Ft
cGxlID0gZnVuY3Rpb24ob2JqLCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3Vh
cmQpIHtcbiAgICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtc
biAgICAgIHJldHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAg
cmV0dXJuIF8uc2h1ZmZsZShvYmopLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKTtcbiAgfTtcblxu
ICAvLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkg
YW4gaXRlcmF0ZWUuXG4gIF8uc29ydEJ5ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4
dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBf
LnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBy
ZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAg
ICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4g
ICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNy
aXRlcmlhO1xuICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBi
KSB7XG4gICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAg
ICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBy
ZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtc
blxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBi
eVwiIG9wZXJhdGlvbnMuXG4gIHZhciBncm91cCA9IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAg
cmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1
bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAg
Xy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBp
dGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFs
dWUsIGtleSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtc
blxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBl
aXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9u
IHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlv
bihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1
bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xu
XG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxh
ciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5k
ZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihy
ZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxu
ICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFp
biBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3Vu
dCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAg
Xy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYg
KF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7
XG4gIH0pO1xuXG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55
dGhpbmcgaXRlcmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICgh
b2JqKSByZXR1cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2Fs
bChvYmopO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlk
ZW50aXR5KTtcbiAgICByZXR1cm4gXy52YWx1ZXMob2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4g
dGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJy
YXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4g
IC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50
cyBhbGwgc2F0aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVs
ZW1lbnRzIGFsbCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9
IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2Io
cHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAg
Xy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgICAocHJlZGljYXRl
KHZhbHVlLCBrZXksIG9iaikgPyBwYXNzIDogZmFpbCkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4g
ICAgcmV0dXJuIFtwYXNzLCBmYWlsXTtcbiAgfTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAg
Ly8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFy
cmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBp
biB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiog
Y2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0g
Xy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFy
cmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkg
cmV0dXJuIGFycmF5WzBdO1xuICAgIHJldHVybiBfLmluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0
aCAtIG4pO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50
cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRz
IG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAv
LyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBfLmluaXRpYWwgPSBmdW5jdGlv
bihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0
aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xu
ICB9O1xuXG4gIC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoq
bioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAg
Xy5sYXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51
bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFy
cmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4
KDAsIGFycmF5Lmxlbmd0aCAtIG4pKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcg
YnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBg
ZHJvcGAuXG4gIC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQ
YXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRo
ZSBhcnJheS5cbiAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4s
IGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFy
ZCA/IDEgOiBuKTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20g
YW4gYXJyYXkuXG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8u
ZmlsdGVyKGFycmF5LCBfLmlkZW50aXR5KTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1l
bnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVu
ID0gZnVuY3Rpb24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwgc3RhcnRJbmRleCkge1xuICAgIHZh
ciBvdXRwdXQgPSBbXSwgaWR4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAw
LCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZh
ciB2YWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5p
c0FycmF5KHZhbHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgLy9mbGF0
dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdFxuICAgICAgICBp
ZiAoIXNoYWxsb3cpIHZhbHVlID0gZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0KTtcbiAg
ICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIG91dHB1dC5sZW5n
dGggKz0gbGVuO1xuICAgICAgICB3aGlsZSAoaiA8IGxlbikge1xuICAgICAgICAgIG91dHB1dFtp
ZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3Qp
IHtcbiAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBy
ZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIg
cmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciBqdXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVu
ID0gZnVuY3Rpb24oYXJyYXksIHNoYWxsb3cpIHtcbiAgICByZXR1cm4gZmxhdHRlbihhcnJheSwg
c2hhbGxvdywgZmFsc2UpO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFy
cmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndp
dGhvdXQgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXks
IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxp
Y2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlc
biAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIg
YWxnb3JpdGhtLlxuICAvLyBBbGlhc2VkIGFzIGB1bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1
ZSA9IGZ1bmN0aW9uKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBp
ZiAoIV8uaXNCb29sZWFuKGlzU29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xu
ICAgICAgaXRlcmF0ZWUgPSBpc1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAg
fVxuICAgIGlmIChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250
ZXh0KTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3Ig
KHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7
XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJh
dGVlID8gaXRlcmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29y
dGVkKSB7XG4gICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2go
dmFsdWUpO1xuICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJh
dGVlKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAg
ICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtc
biAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghXy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkg
e1xuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRo
ZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNz
ZWQtaW4gYXJyYXlzLlxuICBfLnVuaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5p
cShmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2Ug
YW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVc
biAgLy8gcGFzc2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJh
eSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50
cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7
IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlm
IChfLmNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9
IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3Vt
ZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5n
dGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVy
IG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0
IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24o
YXJyYXkpIHtcbiAgICB2YXIgcmVzdCA9IGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCAx
KTtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJl
dHVybiAhXy5jb250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gWmlw
IHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMg
dGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlv
bigpIHtcbiAgICByZXR1cm4gXy51bnppcChhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIENvbXBs
ZW1lbnQgb2YgXy56aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91
cHNcbiAgLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzXG4gIF8udW56
aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChh
cnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVu
Z3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4Kysp
IHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxu
ICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmpl
Y3RzLiBQYXNzIGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBw
YWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9m
IGtleXMsIGFuZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9i
amVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFs
dWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlz
dFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAv
LyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0
SW5kZXggZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRp
cikge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4g
ICAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0
aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxl
bmd0aCAtIDE7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5k
ZXggKz0gZGlyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwg
YXJyYXkpKSByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtc
biAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhh
dCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0
ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRl
eEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUg
b3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJl
IGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4g
IF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkg
e1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1
ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJy
YXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9v
cigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZh
bHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBs
b3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhP
ZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVy
KGRpciwgcHJlZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
YXJyYXksIGl0ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgo
YXJyYXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYg
KGRpciA+IDApIHtcbiAgICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlk
eCArIGxlbmd0aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZW5ndGggPSBp
ZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xu
ICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgp
IHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1
cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0
ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFy
cmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4
ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0
aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBp
ZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVy
biAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmly
c3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUg
aXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMg
bGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoq
aXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gY3JlYXRlSW5k
ZXhGaW5kZXIoMSwgXy5maW5kSW5kZXgsIF8uc29ydGVkSW5kZXgpO1xuICBfLmxhc3RJbmRleE9m
ID0gY3JlYXRlSW5kZXhGaW5kZXIoLTEsIF8uZmluZExhc3RJbmRleCk7XG5cbiAgLy8gR2VuZXJh
dGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24u
IEEgcG9ydCBvZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNl
ZVxuICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwOi8vZG9jcy5weXRob24ub3Jn
L2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3Rh
cnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0g
c3RhcnQgfHwgMDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgfHwg
MTtcblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkg
LyBzdGVwKSwgMCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAo
dmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAg
IHJhbmdlW2lkeF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5c
biAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1c
blxuICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29u
c3RydWN0b3JcbiAgLy8gb3IgYSBub3JtYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJn
dW1lbnRzXG4gIHZhciBleGVjdXRlQm91bmQgPSBmdW5jdGlvbihzb3VyY2VGdW5jLCBib3VuZEZ1
bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0Nv
bnRleHQgaW5zdGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250
ZXh0LCBhcmdzKTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5
cGUpO1xuICAgIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAg
IGlmIChfLmlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7
XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3Qg
KGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxl
Z2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAg
Ly8gYXZhaWxhYmxlLlxuICBfLmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAg
aWYgKG5hdGl2ZUJpbmQgJiYgZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZl
QmluZC5hcHBseShmdW5jLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGlmICghXy5p
c0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVk
IG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAy
KTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91
bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJn
dW1lbnRzKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRp
YWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQg
c29tZSBvZiBpdHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcg
aXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVy
LCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQu
XG4gIF8ucGFydGlhbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZh
ciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHtcbiAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gXyA/IGFyZ3VtZW50
c1twb3NpdGlvbisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb3Np
dGlvbiA8IGFyZ3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10p
O1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJn
cyk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJl
ciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1l
bnRzXG4gIC8vIGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVu
c3VyaW5nIHRoYXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxv
bmcgdG8gaXQuXG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoLCBrZXk7XG4gICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBu
ZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBm
b3IgKGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtc
biAgICAgIG9ialtrZXldID0gXy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1
cm4gb2JqO1xuICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0
b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikg
e1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBt
ZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIu
YXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIV8uaGFzKGNhY2hlLCBh
ZGRyZXNzKSkgY2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4g
ICAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0g
e307XG4gICAgcmV0dXJuIG1lbW9pemU7XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24g
Zm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAv
LyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihm
dW5jLCB3YWl0KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4g
ICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5
KG51bGwsIGFyZ3MpO1xuICAgIH0sIHdhaXQpO1xuICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0
aW9uLCBzY2hlZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhh
c1xuICAvLyBjbGVhcmVkLlxuICBfLmRlZmVyID0gXy5wYXJ0aWFsKF8uZGVsYXksIF8sIDEpO1xu
XG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkg
YmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2Yg
dGltZS4gTm9ybWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMg
bXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdh
aXRgIGR1cmF0aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVj
dXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAu
IFRvIGRpc2FibGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50
aHJvdHRsZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4
dCwgYXJncywgcmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlv
dXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9
IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNl
ID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1
bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBh
cmdzID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBu
b3cgPSBfLm5vdygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09
IGZhbHNlKSBwcmV2aW91cyA9IG5vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5v
dyAtIHByZXZpb3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3Vt
ZW50cztcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4g
ICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xu
ICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0g
bm93O1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAg
ICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAo
IXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91
dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4g
cmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBh
cyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0
cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWlu
ZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNz
ZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3Rl
YWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwg
aW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwg
cmVzdWx0O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGFzdCA9
IF8ubm93KCkgLSB0aW1lc3RhbXA7XG5cbiAgICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49
IDApIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtc
biAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWlt
bWVkaWF0ZSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7
XG4gICAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAg
IH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29u
dGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0g
Xy5ub3coKTtcbiAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAg
ICAgaWYgKCF0aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAg
ICBpZiAoY2FsbE5vdykge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFy
Z3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJl
dHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5j
dGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcg
eW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxu
ICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndy
YXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFw
cGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRo
ZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkg
e1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rp
b24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxu
ICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xs
b3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50
cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0
XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJn
c1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVk
IG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywg
ZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkg
e1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJl
IGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJl
Zm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJu
IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBm
dW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0g
MSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8v
IFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGlt
ZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5
IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4g
IC8vIE9iamVjdCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEtleXMg
aW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQg
dGh1cyBtaXNzZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVy
dHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBb
J3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAg
ICAgICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxl
U3RyaW5nJ107XG5cbiAgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtc
biAgICB2YXIgbm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFy
IGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IChfLmlzRnVu
Y3Rpb24oY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87
XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9
ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKF8uaGFzKG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMo
a2V5cywgcHJvcCkpIGtleXMucHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0p
IHtcbiAgICAgIHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBp
ZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlu
cyhrZXlzLCBwcm9wKSkge1xuICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAg
fVxuICB9XG5cbiAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9w
ZXJ0aWVzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2Jq
ZWN0LmtleXNgXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVj
dChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlz
KG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAo
Xy5oYXMob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4g
ICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICBy
ZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVz
IG9mIGFuIG9iamVjdC5cbiAgXy5hbGxLZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFf
LmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAo
dmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAg
ICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJl
dHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0
J3MgcHJvcGVydGllcy5cbiAgXy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5
cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIg
dmFsdWVzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7XG4gICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVy
biB2YWx1ZXM7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0
aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBvYmplY3RcbiAgLy8gSW4gY29udHJh
c3QgdG8gXy5tYXAgaXQgcmV0dXJucyBhbiBvYmplY3RcbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlv
bihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwg
Y29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3Ro
ID0ga2V5cy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0cyA9IHt9LFxuICAgICAgICAgIGN1cnJl
bnRLZXk7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsr
KSB7XG4gICAgICAgIGN1cnJlbnRLZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0c1tj
dXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtc
biAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4g
b2JqZWN0IGludG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVu
Z3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlz
W2ldLCBvYmpba2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAg
Ly8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11
c3QgYmUgc2VyaWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciByZXN1bHQgPSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBy
ZXN1bHRbb2JqW2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7
XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVz
IGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBf
LmZ1bmN0aW9ucyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9
IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24o
b2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0
KCk7XG4gIH07XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9w
ZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gY3JlYXRlQXNzaWdu
ZXIoXy5hbGxLZXlzKTtcblxuICAvLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRo
ZSBvd24gcHJvcGVydGllcyBpbiB0aGUgcGFzc2VkLWluIG9iamVjdChzKVxuICAvLyAoaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xv
YmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNy
ZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFu
IG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEtleSA9IGZ1bmN0
aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGlj
YXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9i
aikpIHJldHVybiBrZXk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhl
IG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93bGlzdGVkIHByb3BlcnRpZXMuXG4gIF8u
cGljayA9IGZ1bmN0aW9uKG9iamVjdCwgb2l0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJl
c3VsdCA9IHt9LCBvYmogPSBvYmplY3QsIGl0ZXJhdGVlLCBrZXlzO1xuICAgIGlmIChvYmogPT0g
bnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9pdGVyYXRlZSkpIHtc
biAgICAgIGtleXMgPSBfLmFsbEtleXMob2JqKTtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVD
YihvaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gZmxhdHRl
bihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9u
KHZhbHVlLCBrZXksIG9iaikgeyByZXR1cm4ga2V5IGluIG9iajsgfTtcbiAgICAgIG9iaiA9IE9i
amVjdChvYmopO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2
YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmop
KSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgYmxvY2tsaXN0
ZWQgcHJvcGVydGllcy5cbiAgXy5vbWl0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4
dCkge1xuICAgIGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9
IF8ubmVnYXRlKGl0ZXJhdGVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLm1h
cChmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKSwgU3RyaW5nKTtcbiAgICAgIGl0
ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFp
bnMoa2V5cywga2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBp
dGVyYXRlZSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3
aXRoIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgXy5kZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKF8u
YWxsS2V5cywgdHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBm
cm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3Bl
cnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBj
cmVhdGVkIG9iamVjdC5cbiAgXy5jcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUsIHByb3BzKSB7
XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMp
IF8uZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5c
biAgLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0Llxu
ICBfLmNsb25lID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJl
dHVybiBvYmo7XG4gICAgcmV0dXJuIF8uaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfLmV4
dGVuZCh7fSwgb2JqKTtcbiAgfTtcblxuICAvLyBJbnZva2VzIGludGVyY2VwdG9yIHdpdGggdGhl
IG9iaiwgYW5kIHRoZW4gcmV0dXJucyBvYmouXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2Yg
dGhpcyBtZXRob2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBv
cmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGlu
IHRoZSBjaGFpbi5cbiAgXy50YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7XG4gICAg
aW50ZXJjZXB0b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybnMg
d2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxu
ICBfLmlzTWF0Y2ggPSBmdW5jdGlvbihvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIGtleXMgPSBf
LmtleXMoYXR0cnMpLCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51
bGwpIHJldHVybiAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tp
XTtcbiAgICAgIGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSBy
ZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgLy8gSW50
ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFy
IGVxID0gZnVuY3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwg
b2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwu
XG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVj
bWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIp
IHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21w
YXJpc29uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYg
KGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xuICAgIC8vIFVud3JhcCBh
bnkgd3JhcHBlZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBw
ZWQ7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21w
YXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxs
KGEpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxz
ZTtcbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywg
cmVndWxhciBleHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkg
dmFsdWUuXG4gICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBh
cmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09
ICcvYS9pJylcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1p
dGl2ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFs
ZW50OyB0aHVzLCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJp
bmcoXCI1XCIpYC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2Fz
ZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBi
dXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0
byBOYU5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAg
Ly8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZh
bHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09
PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBC
b29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJp
YyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAg
Ly8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3
aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUg
bm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgfVxuXG4gICAg
dmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAo
IWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBi
ICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZm
ZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBg
QXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBh
Q3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChh
Q3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNl
b2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24o
YkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAg
ICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAg
ICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0
eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNs
aWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4x
Mi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFj
ayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBv
bmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0
YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIg
bGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8v
IExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8g
dGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAg
aWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4g
ICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZl
cnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xu
XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYg
KGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWlu
ZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxl
bmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAg
ICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9w
ZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5n
dGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxu
ICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBr
ZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAg
IC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBw
cm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtl
eXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5n
dGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5
ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5
XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAg
fVxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZl
cnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAg
cmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBj
aGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEs
IGIpIHtcbiAgICByZXR1cm4gZXEoYSwgYik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJh
eSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFz
IG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMuXG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQXJyYXlM
aWtlKG9iaikgJiYgKF8uaXNBcnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJn
dW1lbnRzKG9iaikpKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gXy5rZXlz
KG9iaikubGVuZ3RoID09PSAwO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00g
ZWxlbWVudD9cbiAgXy5pc0VsZW1lbnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gISEo
b2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1
ZSBhbiBhcnJheT9cbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJy
YXlcbiAgXy5pc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICBy
ZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4g
IC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09
PSAnZnVuY3Rpb24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqO1xuICB9O1xuXG4gIC8v
IEFkZCBzb21lIGlzVHlwZSBtZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJp
bmcsIGlzTnVtYmVyLCBpc0RhdGUsIGlzUmVnRXhwLCBpc0Vycm9yLlxuICBfLmVhY2goWydBcmd1
bWVudHMnLCAnRnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcs
ICdFcnJvciddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlv
bihvYmopIHtcbiAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcg
KyBuYW1lICsgJ10nO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZl
cnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAg
Ly8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgaWYg
KCFfLmlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgICByZXR1cm4gXy5oYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAg
fVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91
bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIGFuZCBp
biBTYWZhcmkgOCAoIzE5MjkpLlxuICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5
cGVvZiBJbnQ4QXJyYXkgIT0gJ29iamVjdCcpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlv
bihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7
XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9c
biAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmop
ICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2
YWx1ZSBgTmFOYD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwg
aXRzZWxmKS5cbiAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVt
YmVyKG9iaikgJiYgb2JqICE9PSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUg
YSBib29sZWFuP1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBv
YmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdb
b2JqZWN0IEJvb2xlYW5dJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRv
IG51bGw/XG4gIF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0g
bnVsbDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5p
c1VuZGVmaW5lZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtc
biAgfTtcblxuICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0
IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIg
d29yZHMsIG5vdCBvbiBhIHByb3RvdHlwZSkuXG4gIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkp
IHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtl
eSk7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0t
LS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJu
aW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5z
IGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0g
ZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVy
biB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBm
b3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xu
ICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5j
dGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQg
PSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVy
biB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBf
LnByb3BlcnR5ID0gcHJvcGVydHk7XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEg
Z2l2ZW4gb2JqZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBfLnByb3BlcnR5
T2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigp
e30gOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9O1xuICB9
O1xuXG4gIC8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2Jq
ZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5tYXRj
aGVyID0gXy5tYXRjaGVzID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBhdHRycyA9IF8uZXh0ZW5k
T3duKHt9LCBhdHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJu
IF8uaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0
aW9uICoqbioqIHRpbWVzLlxuICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRl
eHQpIHtcbiAgICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0
ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07
XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1h
eCAoaW5jbHVzaXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlm
IChtYXggPT0gbnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9
XG4gICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4g
KyAxKSk7XG4gIH07XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBj
dXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1
bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAg
Ly8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9
IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0Oycs
XG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYj
eDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxu
ICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJv
bSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFw
KSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1h
cFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0
aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWRcbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMo
bWFwKS5qb2luKCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNl
KTtcbiAgICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0
dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAn
JyA6ICcnICsgc3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8g
c3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtc
biAgfTtcbiAgXy5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2Nh
cGUgPSBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2Yg
dGhlIG5hbWVkIGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRo
ZVxuICAvLyBgb2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5y
ZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBmYWxsYmFjaykge1xuICAgIHZhciB2
YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdm9pZCAwIDogb2JqZWN0W3Byb3BlcnR5XTtcbiAgICBp
ZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSBmYWxsYmFjaztcbiAgICB9XG4g
ICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1
ZTtcbiAgfTtcblxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0
aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFy
eSBET00gaWRzLlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9u
KHByZWZpeCkge1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHBy
ZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG4gIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJz
Y29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8v
IGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVy
cy5cbiAgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNc
XFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAg
IGVzY2FwZSAgICAgIDogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1
c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5l
IGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdl
IG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBu
b01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVz
Y2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFs
LlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogICAgICBcIidcIixcbiAgICAnXFxcXCc6
ICAgICAnXFxcXCcsXG4gICAgJ1xccic6ICAgICAncicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4g
ICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4g
IHZhciBlc2NhcGVyID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZh
ciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNj
YXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBz
aW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0
ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNw
YWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0
ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJk
cyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3Ms
IG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGlu
Z3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdz
LCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8g
b25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIg
PSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4g
ICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNl
dHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wk
JywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcg
c3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2
YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rp
b24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAg
IHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNj
YXBlQ2hhcik7XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAg
aWYgKGVzY2FwZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2Fw
ZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlm
IChpbnRlcnBvbGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGlu
dGVycG9sYXRlICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAo
ZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJc
XG5fX3ArPSdcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNo
IHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1h
dGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZh
cmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3Bl
LlxuICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xc
bicgKyBzb3VyY2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9f
aj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19w
Kz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVy
biBfX3A7XFxuJztcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9u
KHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAo
ZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxu
ICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIu
Y2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGls
ZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBh
cmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJj
ZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4g
ICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlv
bi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWlu
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3Rh
bmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9P
UFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMg
YSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJl
IHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFs
bCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUg
Y2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50
ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2Jq
KSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xu
ICB9O1xuXG4gIC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNj
b3JlIG9iamVjdC5cbiAgXy5taXhpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIF8uZWFjaChfLmZ1
bmN0aW9ucyhvYmopLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0g
PSBvYmpbbmFtZV07XG4gICAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdz
LCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywg
YXJncykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBV
bmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7
XG5cbiAgLy8gQWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5c
biAgXy5lYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3Nw
bGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJy
YXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1
bWVudHMpO1xuICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2Un
KSAmJiBvYmoubGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3Vs
dCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJy
YXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbics
ICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9b
bmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVy
biByZXN1bHQodGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xu
ICAgIH07XG4gIH0pO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQg
YW5kIGNoYWluZWQgb2JqZWN0LlxuICBfLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xu
ICAgIHJldHVybiB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGlu
ZyBwcm94eSBmb3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8g
c3VjaCBhcyBhcml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXy5wcm90b3R5
cGUudmFsdWVPZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG4g
IF8ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICcnICsgdGhp
cy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhl
IGVuZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEFNRCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5v
dCBlbmZvcmNlIG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2Vu
ZXJhbFxuICAvLyBwcmFjdGljZSBmb3IgQU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1v
dXMsIHVuZGVyc2NvcmUgcmVnaXN0ZXJzXG4gIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2Us
IGxpa2UgalF1ZXJ5LCBpdCBpcyBhIGJhc2UgbGlicmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIg
ZW5vdWdoIHRvIGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFy
dCBvZlxuICAvLyBhbiBBTUQgbG9hZCByZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0
ZSBhbiBlcnJvciB3aGVuIGFuXG4gIC8vIGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0
c2lkZSBvZiBhIGxvYWRlciByZXF1ZXN0LlxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0
aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4i
CiAKIC8qKiovIH0pLAogLyogNDE2ICovCkBAIC0xNDg3NzUsNyArMTQ4Nzc1LDcgQEAgdmFyIEpT
SElOVCA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlvbiBjb21iaW5lKGRlc3QsIHNyYykgewog
ICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7Ci0gICAgICBpZiAo
Xy5oYXMoSlNISU5ULmJsYWNrbGlzdCwgbmFtZSkpIHJldHVybjsKKyAgICAgIGlmIChfLmhhcyhK
U0hJTlQuYmxvY2tsaXN0LCBuYW1lKSkgcmV0dXJuOwogICAgICAgZGVzdFtuYW1lXSA9IHNyY1tu
YW1lXTsKICAgICB9KTsKICAgfQpAQCAtMTQ5MDYwLDcgKzE0OTA2MCw3IEBAIHZhciBKU0hJTlQg
PSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAga2V5ID0ga2V5LnNsaWNlKDEpOwogICAgICAgICAg
IHZhbCA9IGZhbHNlOwogCi0gICAgICAgICAgSlNISU5ULmJsYWNrbGlzdFtrZXldID0ga2V5Owor
ICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rba2V5XSA9IGtleTsKICAgICAgICAgICBkZWxldGUg
cHJlZGVmaW5lZFtrZXldOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHByZWRlZltrZXld
ID0gKHZhbCA9PT0gInRydWUiKTsKQEAgLTE1Mzg2Nyw3ICsxNTM4NjcsNyBAQCB2YXIgSlNISU5U
ID0gKGZ1bmN0aW9uKCkgewogICAgICAgSlNISU5ULmVycm9ycyA9IFtdOwogICAgICAgSlNISU5U
LnVuZGVmcyA9IFtdOwogICAgICAgSlNISU5ULmludGVybmFscyA9IFtdOwotICAgICAgSlNISU5U
LmJsYWNrbGlzdCA9IHt9OworICAgICAgSlNISU5ULmJsb2NrbGlzdCA9IHt9OwogICAgICAgSlNI
SU5ULnNjb3BlID0gIihtYWluKSI7CiAgICAgfQogCkBAIC0xNTM4OTYsNyArMTUzODk2LDcgQEAg
dmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKIAogICAgICAgICBpZiAoaXRlbVswXSA9PT0gIi0i
KSB7CiAgICAgICAgICAgc2xpY2UgPSBpdGVtLnNsaWNlKDEpOwotICAgICAgICAgIEpTSElOVC5i
bGFja2xpc3Rbc2xpY2VdID0gc2xpY2U7CisgICAgICAgICAgSlNISU5ULmJsb2NrbGlzdFtzbGlj
ZV0gPSBzbGljZTsKICAgICAgICAgICAvLyByZW1vdmUgZnJvbSBwcmVkZWZpbmVkIGlmIHRoZXJl
CiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRbc2xpY2VdOwogICAgICAgICB9IGVsc2UgewpA
QCAtMTk1NTc2LDcgKzE5NTU3Niw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmll
cihub2RlKSAKIAl2YXIgcmVnZXhTaW5nbGVFc2NhcGUgPSAvWyInXFxcYlxmXG5cclx0XS87CiAK
IAl2YXIgcmVnZXhEaWdpdCA9IC9bMC05XS87Ci0JdmFyIHJlZ2V4V2hpdGVsaXN0ID0gL1sgISMt
JlwoLVxbXF0tfl0vOworCXZhciByZWdleEFsbG93bGlzdCA9IC9bICEjLSZcKC1cW1xdLX5dLzsK
IAogCXZhciBqc2VzYyA9IGZ1bmN0aW9uKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAJCS8vIEhhbmRs
ZSBvcHRpb25zCkBAIC0xOTU3NTEsNyArMTk1NzUxLDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNw
YWNlU3BlY2lmaWVyKG5vZGUpIAogCQkJCX0KIAkJCX0KIAkJCWlmICghb3B0aW9ucy5lc2NhcGVF
dmVyeXRoaW5nKSB7Ci0JCQkJaWYgKHJlZ2V4V2hpdGVsaXN0LnRlc3QoY2hhcmFjdGVyKSkgewor
CQkJCWlmIChyZWdleEFsbG93bGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKIAkJCQkJLy8gSXTigJlz
IGEgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBgImAsIGAnYCBvciBgXGAs
CiAJCQkJCS8vIHNvIGRvbuKAmXQgZXNjYXBlIGl0LgogCQkJCQlyZXN1bHQgKz0gY2hhcmFjdGVy
OwpAQCAtMjA5MDgxLDcgKzIwOTA4MSw3IEBAIHZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BS
ZXF1aXJlRGVmYXUKIAogZXhwb3J0cy5jYWxsID0gY2FsbDsKIGV4cG9ydHMuX2NhbGwgPSBfY2Fs
bDsKLWV4cG9ydHMuaXNCbGFja2xpc3RlZCA9IGlzQmxhY2tsaXN0ZWQ7CitleHBvcnRzLmlzQmxv
Y2tsaXN0ZWQgPSBpc0Jsb2NrbGlzdGVkOwogZXhwb3J0cy52aXNpdCA9IHZpc2l0OwogZXhwb3J0
cy5za2lwID0gc2tpcDsKIGV4cG9ydHMuc2tpcEtleSA9IHNraXBLZXk7CkBAIC0yMDkxNTcsOSAr
MjA5MTU3LDkgQEAgZnVuY3Rpb24gX2NhbGwoZm5zKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KIAot
ZnVuY3Rpb24gaXNCbGFja2xpc3RlZCgpIHsKLSAgdmFyIGJsYWNrbGlzdCA9IHRoaXMub3B0cy5i
bGFja2xpc3Q7Ci0gIHJldHVybiBibGFja2xpc3QgJiYgYmxhY2tsaXN0LmluZGV4T2YodGhpcy5u
b2RlLnR5cGUpID4gLTE7CitmdW5jdGlvbiBpc0Jsb2NrbGlzdGVkKCkgeworICB2YXIgYmxvY2ts
aXN0ID0gdGhpcy5vcHRzLmJsb2NrbGlzdDsKKyAgcmV0dXJuIGJsb2NrbGlzdCAmJiBibG9ja2xp
c3QuaW5kZXhPZih0aGlzLm5vZGUudHlwZSkgPiAtMTsKIH0KIAogZnVuY3Rpb24gdmlzaXQoKSB7
CkBAIC0yMDkxNjcsNyArMjA5MTY3LDcgQEAgZnVuY3Rpb24gdmlzaXQoKSB7CiAgICAgcmV0dXJu
IGZhbHNlOwogICB9CiAKLSAgaWYgKHRoaXMuaXNCbGFja2xpc3RlZCgpKSB7CisgIGlmICh0aGlz
LmlzQmxvY2tsaXN0ZWQoKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC0yMTA4MjUs
NyArMjEwODI1LDcgQEAgZnVuY3Rpb24gc2hvdWxkSWdub3JlS2V5KGtleSkgewogCiAgIGlmIChr
ZXkgPT09ICJlbnRlciIgfHwga2V5ID09PSAiZXhpdCIgfHwga2V5ID09PSAic2hvdWxkU2tpcCIp
IHJldHVybiB0cnVlOwogCi0gIGlmIChrZXkgPT09ICJibGFja2xpc3QiIHx8IGtleSA9PT0gIm5v
U2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CisgIGlmIChrZXkgPT09
ICJibG9ja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikg
cmV0dXJuIHRydWU7CiAKICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjIyNTE1LDcgKzIyMjUxNSw3
IEBAIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyAKIAogY29uc3QgbGlm
ZWN5Y2xlTWV0aG9kcyA9IG5ldyBTZXQoWyJjb21wb25lbnRXaWxsVW5tb3VudCIsICJjb21wb25l
bnREaWRNb3VudCIsICJjb21wb25lbnRXaWxsTW91bnQiLCAiY29tcG9uZW50RGlkVXBkYXRlIiwg
ImNvbXBvbmVudFdpbGxVcGRhdGUiLCAiY29tcG9uZW50RGlkQ2F0Y2giLCAiY29tcG9uZW50V2ls
bFJlY2VpdmVQcm9wcyJdKTsKIAotY29uc3Qgd2hpdGVsaXN0ZWRQcm9wZXJ0aWVzID0gbmV3IFNl
dChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKK2NvbnN0IGFsbG93bGlzdGVkUHJvcGVy
dGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250ZXh0IiwgInJlZnMiXSk7CiAKIGZ1bmN0aW9u
IGdldEluaXRpYWxQcm9wcyhyZWFsbSwgY29tcG9uZW50VHlwZSkgewogICBsZXQgcHJvcHNOYW1l
ID0gbnVsbDsKQEAgLTIyMjY4NSw3ICsyMjI2ODUsNyBAQCBmdW5jdGlvbiBldmFsdWF0ZUNsYXNz
Q29uc3RydWN0b3IocmVhbG0sCiAgICAgbGV0IGluc3RhbmNlID0gKDAsIF9pbmRleDIuQ29uc3Ry
dWN0KShyZWFsbSwgY29uc3RydWN0b3JGdW5jLCBbcHJvcHMsIGNvbnRleHRdKTsKICAgICAoMCwg
X2ludmFyaWFudDIuZGVmYXVsdCkoaW5zdGFuY2UgaW5zdGFuY2VvZiBfaW5kZXguT2JqZWN0VmFs
dWUpOwogICAgIGZvciAobGV0IFtwcm9wZXJ0eU5hbWVdIG9mIGluc3RhbmNlLnByb3BlcnRpZXMp
IHsKLSAgICAgIGlmICghd2hpdGVsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUpKSB7
CisgICAgICBpZiAoIWFsbG93bGlzdGVkUHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkgewog
ICAgICAgICBpbnN0YW5jZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7CiAgICAgICB9CiAg
ICAgfQpJbmRleDogV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvd2ViLXRv
b2xpbmctYmVuY2htYXJrL2NsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9icm93c2VyYmVu
Y2gub3JnL0pldFN0cmVhbTIuMC93ZWItdG9vbGluZy1iZW5jaG1hcmsvY2xpLmpzCShyZXZpc2lv
biAyNzEwNjcpCisrKyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIuMC93ZWIt
dG9vbGluZy1iZW5jaG1hcmsvY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MzU0LDM3ICs1MzU0
LDM3IEBAIGlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAKIC8qIDE2ICov
CiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24obW9kdWxlKSB7DQotCWlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7DQotCQlt
b2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTsNCi0JCW1vZHVsZS5wYXRocyA9IFtdOw0K
LQkJLy8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0DQotCQlpZighbW9kdWxl
LmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTsNCi0JCU9iamVjdC5kZWZpbmVQcm9wZXJ0
eShtb2R1bGUsICJsb2FkZWQiLCB7DQotCQkJZW51bWVyYWJsZTogdHJ1ZSwNCi0JCQlnZXQ6IGZ1
bmN0aW9uKCkgew0KLQkJCQlyZXR1cm4gbW9kdWxlLmw7DQotCQkJfQ0KLQkJfSk7DQotCQlPYmpl
Y3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAiaWQiLCB7DQotCQkJZW51bWVyYWJsZTogdHJ1ZSwN
Ci0JCQlnZXQ6IGZ1bmN0aW9uKCkgew0KLQkJCQlyZXR1cm4gbW9kdWxlLmk7DQotCQkJfQ0KLQkJ
fSk7DQotCQltb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTsNCi0JfQ0KLQlyZXR1cm4gbW9kdWxl
Ow0KLX07DQorbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHsKKwlpZighbW9kdWxl
LndlYnBhY2tQb2x5ZmlsbCkgeworCQltb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTsK
KwkJbW9kdWxlLnBhdGhzID0gW107CisJCS8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkg
ZGVmYXVsdAorCQlpZighbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTsKKwkJ
T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgImxvYWRlZCIsIHsKKwkJCWVudW1lcmFibGU6
IHRydWUsCisJCQlnZXQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiBtb2R1bGUubDsKKwkJCX0K
KwkJfSk7CisJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICJpZCIsIHsKKwkJCWVudW1l
cmFibGU6IHRydWUsCisJCQlnZXQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiBtb2R1bGUuaTsK
KwkJCX0KKwkJfSk7CisJCW1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxOworCX0KKwlyZXR1cm4g
bW9kdWxlOworfTsKIAogCiAvKioqLyB9KSwKIC8qIDE3ICovCiAvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7DQotCXRocm93
IG5ldyBFcnJvcigiZGVmaW5lIGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0Iik7DQotfTsNCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeworCXRocm93IG5ldyBFcnJvcigiZGVmaW5lIGNhbm5v
dCBiZSB1c2VkIGluZGlyZWN0Iik7Cit9OwogCiAKIC8qKiovIH0pLApAQCAtNzI0OSwyNyArNzI0
OSwyNyBAQCBmdW5jdGlvbiBDYWxsKHJlYWxtLCBGLCBWLCBhcmdzTGlzdCkgewogLyogMjEgKi8K
IC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotdmFyIGc7DQotDQotLy8gVGhp
cyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGUNCi1nID0gKGZ1bmN0aW9uKCkgew0KLQlyZXR1cm4g
dGhpczsNCi19KSgpOw0KLQ0KLXRyeSB7DQotCS8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxv
d2VkIChzZWUgQ1NQKQ0KLQlnID0gZyB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpIHx8ICgx
LGV2YWwpKCJ0aGlzIik7DQotfSBjYXRjaChlKSB7DQotCS8vIFRoaXMgd29ya3MgaWYgdGhlIHdp
bmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlDQotCWlmKHR5cGVvZiB3aW5kb3cgPT09ICJvYmpl
Y3QiKQ0KLQkJZyA9IHdpbmRvdzsNCi19DQotDQotLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVk
LCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLg0KLS8vIFdlIHJldHVybiB1bmRlZmluZWQs
IGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzDQotLy8gZWFzaWVyIHRvIGhhbmRsZSB0
aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufQ0KLQ0KLW1vZHVsZS5leHBvcnRzID0gZzsNCit2
YXIgZzsKKworLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGUKK2cgPSAoZnVuY3Rpb24o
KSB7CisJcmV0dXJuIHRoaXM7Cit9KSgpOworCit0cnkgeworCS8vIFRoaXMgd29ya3MgaWYgZXZh
bCBpcyBhbGxvd2VkIChzZWUgQ1NQKQorCWcgPSBnIHx8IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIp
KCkgfHwgKDEsZXZhbCkoInRoaXMiKTsKK30gY2F0Y2goZSkgeworCS8vIFRoaXMgd29ya3MgaWYg
dGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlCisJaWYodHlwZW9mIHdpbmRvdyA9PT0g
Im9iamVjdCIpCisJCWcgPSB3aW5kb3c7Cit9CisKKy8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5l
ZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi4KKy8vIFdlIHJldHVybiB1bmRlZmluZWQs
IGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzCisvLyBlYXNpZXIgdG8gaGFuZGxlIHRo
aXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59CisKK21vZHVsZS5leHBvcnRzID0gZzsKIAogCiAv
KioqLyB9KSwKQEAgLTEwNDA1LDE1ICsxMDQwNSwxNSBAQCB0cmF2ZXJzZS5yZW1vdmVQcm9wZXJ0
aWVzID0gZnVuY3Rpb24gKHRyCiAgIHJldHVybiB0cmVlOwogfTsKIAotZnVuY3Rpb24gaGFzQmxh
Y2tsaXN0ZWRUeXBlKHBhdGgsIHN0YXRlKSB7CitmdW5jdGlvbiBoYXNCbG9ja2xpc3RlZFR5cGUo
cGF0aCwgc3RhdGUpIHsKICAgaWYgKHBhdGgubm9kZS50eXBlID09PSBzdGF0ZS50eXBlKSB7CiAg
ICAgc3RhdGUuaGFzID0gdHJ1ZTsKICAgICBwYXRoLnN0b3AoKTsKICAgfQogfQogCi10cmF2ZXJz
ZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlLCB0eXBlLCBibGFja2xpc3RUeXBlcykg
ewotICBpZiAoKDAsIF9pbmNsdWRlczIuZGVmYXVsdCkoYmxhY2tsaXN0VHlwZXMsIHRyZWUudHlw
ZSkpIHJldHVybiBmYWxzZTsKK3RyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2Nv
cGUsIHR5cGUsIGJsb2NrbGlzdFR5cGVzKSB7CisgIGlmICgoMCwgX2luY2x1ZGVzMi5kZWZhdWx0
KShibG9ja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwogCiAgIGlmICh0cmVl
LnR5cGUgPT09IHR5cGUpIHJldHVybiB0cnVlOwogCkBAIC0xMDQyMyw4ICsxMDQyMyw4IEBAIHRy
YXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2NvcGUKICAgfTsKIAogICB0cmF2ZXJz
ZSh0cmVlLCB7Ci0gICAgYmxhY2tsaXN0OiBibGFja2xpc3RUeXBlcywKLSAgICBlbnRlcjogaGFz
QmxhY2tsaXN0ZWRUeXBlCisgICAgYmxvY2tsaXN0OiBibG9ja2xpc3RUeXBlcywKKyAgICBlbnRl
cjogaGFzQmxvY2tsaXN0ZWRUeXBlCiAgIH0sIHNjb3BlLCBzdGF0ZSk7CiAKICAgcmV0dXJuIHN0
YXRlLmhhczsKQEAgLTEzMjI4LDggKzEzMjI4LDggQEAgbW9kdWxlLmV4cG9ydHMgPSAhX193ZWJw
YWNrX3JlcXVpcmVfXyg2MgogLyogNTUgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMpIHsKIAotLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKF9fd2VicGFja19h
bWRfb3B0aW9uc19fKSB7LyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqLw0KLW1v
ZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187DQorLyogV0VCUEFDSyBWQVIg
SU5KRUNUSU9OICovKGZ1bmN0aW9uKF9fd2VicGFja19hbWRfb3B0aW9uc19fKSB7LyogZ2xvYmFs
cyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqLworbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tf
YW1kX29wdGlvbnNfXzsKIAogLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9y
dHMsIHt9KSkKIApAQCAtMzcwMTIsNyArMzcwMTIsNyBAQCBmdW5jdGlvbiBUeXBlZEFycmF5U3Bl
Y2llc0NyZWF0ZShyZWFsbSwgCiB2YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09
PSAnZnVuY3Rpb24nOwogCiAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqLwotdmFyIGdsb2Jh
bE9iamVjdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVz
bGludC1kaXNhYmxlLWxpbmUgaWQtYmxhY2tsaXN0Cit2YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9m
IHNlbGYgPT09ICdvYmplY3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGlu
ZSBpZC1ibG9ja2xpc3QKIAogdmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1
bmRlZmluZWQnOwogdmFyIG1hcEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnOwpA
QCAtMTEzODQwLDcgKzExMzg0MCw3IEBAIG1vZHVsZS5leHBvcnRzID0gIntcInZlcnNpb25cIjoz
LFwic291cmMKIC8qIDQxMSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewog
Ci1tb2R1bGUuZXhwb3J0cyA9ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3Jr
LiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIw
MDYtMjAxNyBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8q
IVxuV2ViIEJ1aWxkOiBodHRwczovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3
MTY3YzU4MDdiMTczZDVkZWZmNjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVz
Y3JpcHRpb246IFRoZSBoZWFydCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbmNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJv
aWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9v
VG9vbHMgcHJvZHVjdGlvbiB0ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxu
XG5pbnNwaXJhdGlvbjpcbiAgLSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFz
ZS5qc10oaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5
cmlnaHQgKGMpIDIwMDYgRGVhbiBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClc
biAgLSBTb21lIGZ1bmN0aW9uYWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDov
L3Byb3RvdHlwZWpzLm9yZykgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24s
IFtNSVQgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNl
LnBocClcblxucHJvdmlkZXM6IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5j
ZU9mLCBOYXRpdmVdXG5cbi4uLlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJh
bWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQg
KGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWlj
YW5lLykuKi9cbihmdW5jdGlvbigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAn
MS42LjAnLFxuXHRidWlsZDogJzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVl
MmInXG59O1xuXG4vLyB0eXBlT2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlw
ZU9mID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7
XG5cdGlmIChpdGVtLiRmYW1pbHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5c
dGlmIChpdGVtLm5vZGVOYW1lKXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4g
J2VsZW1lbnQnO1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRl
c3QoaXRlbS5ub2RlVmFsdWUpID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNl
IGlmICh0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBp
biBpdGVtKSByZXR1cm4gJ2FyZ3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1
cm4gJ2NvbGxlY3Rpb24nO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFy
IGluc3RhbmNlT2YgPSB0aGlzLmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xu
XHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0
ZW0uJGNvbnN0cnVjdG9yIHx8IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rv
cil7XG5cdFx0aWYgKGNvbnN0cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNv
bnN0cnVjdG9yID0gY29uc3RydWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlm
ICghaXRlbS5oYXNPd25Qcm9wZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0
cmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkg
PSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVu
dW1lcmFibGVzID0gdHJ1ZTtcbmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJs
ZXMgPSBudWxsO1xuaWYgKGVudW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVy
dHknLCAndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywg
J3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBm
b3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVt
ZXJhYmxlcykgZm9yICh2YXIgaSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFy
IGsgPSBlbnVtZXJhYmxlc1tpXTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28g
b3ZlcmxvYWRTZXR0ZXIgY2FuIGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0
aW9uLCB3aXRob3V0IHN3YXBwaW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHku
Y2FsbChvYmplY3QsIGspKSBmbi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8q
PC9sdElFOD4qL1xuXG4vLyBGdW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0
aGlzLkZ1bmN0aW9uO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5j
dGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihh
LCBiKXtcblx0XHRpZiAoYSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFs
IHx8IHR5cGVvZiBhICE9ICdzdHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5j
YWxsKHRoaXMsIGssIGFba10pO1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmpl
Y3RFbnVtYmVyYWJsZUtleShhLCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHRzZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0g
ZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rp
b24oYSl7XG5cdFx0dmFyIGFyZ3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmlu
ZycpIGFyZ3MgPSBhO1xuXHRcdGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0g
YXJndW1lbnRzO1xuXHRcdGVsc2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAo
YXJncyl7XG5cdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJn
cy5sZW5ndGg7IGkrKykgcmVzdWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0p
O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0
fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0
ZW5kID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVy
bG9hZFNldHRlcigpO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24o
a2V5LCB2YWx1ZSl7XG5cdHRoaXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRT
ZXR0ZXIoKTtcblxuLy8gRnJvbVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7
XG5cbkFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkg
cmV0dXJuIFtdO1xuXHRyZXR1cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBp
dGVtICE9ICdzdHJpbmcnKSA/ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xp
Y2UuY2FsbChpdGVtKSA6IFtpdGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlv
bihpdGVtKXtcblx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZl
cnQgPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5c
dHJldHVybiBpc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5j
b252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxu
RnVuY3Rpb24uZnJvbSA9IEZ1bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5j
b252ZXJ0O1xuU3RyaW5nLmZyb20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVj
dFxuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhp
cy4kaGlkZGVuID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBm
dW5jdGlvbigpe1xuXHRcdHRoaXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbi8vIFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlv
bihuYW1lLCBvYmplY3Qpe1xuXHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xv
d2VyQ2FzZSgpO1xuXHRcdHZhciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJl
dHVybiAodHlwZU9mKGl0ZW0pID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsg
bmFtZV0gPSB0eXBlQ2hlY2s7XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVj
dC5wcm90b3R5cGUuJGZhbWlseSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7
XG5cdFx0XHR9KS5oaWRlKCk7XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09
IG51bGwpIHJldHVybiBudWxsO1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4k
Y29uc3RydWN0b3IgPSBUeXBlO1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9i
amVjdDtcblxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnBy
b3RvdHlwZS50b1N0cmluZztcblxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtc
blx0cmV0dXJuIChpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXIn
ICYmIHRvU3RyaW5nLmNhbGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxu
dmFyIGhvb2tzID0ge307XG5cbnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFy
IHR5cGUgPSB0eXBlT2Yob2JqZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8
fCAoaG9va3NbdHlwZV0gPSBbXSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFt
ZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5c
dHZhciBob29rcyA9IGhvb2tzT2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29r
cy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9m
KGhvb2spID09ICd0eXBlJykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0
XHRlbHNlIGhvb2suY2FsbCh0aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZp
b3VzID0gdGhpcy5wcm90b3R5cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFw
cmV2aW91cy4kcHJvdGVjdGVkKSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRp
ZiAodGhpc1tuYW1lXSA9PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4
dGVuZC5jYWxsKHRoaXMsIG5hbWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2Qu
YXBwbHkoaXRlbSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIg
ZXh0ZW5kID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2Qu
JGhpZGRlbikgcmV0dXJuO1xuXHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJl
dmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhv
ZDtcbn07XG5cblR5cGUuaW1wbGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVy
bG9hZFNldHRlcigpLFxuXG5cdGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0
YWxpYXM6IGZ1bmN0aW9uKG5hbWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlz
LCBuYW1lLCB0aGlzLnByb3RvdHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCks
XG5cblx0bWlycm9yOiBmdW5jdGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9v
ayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlw
ZSk7XG5cbi8vIERlZmF1bHQgVHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2Jq
ZWN0LCBtZXRob2RzKXtcblx0dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRw
cm90b3R5cGUgPSBvYmplY3QucHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5l
dyBUeXBlKG5hbWUsIG9iamVjdCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5l
cmljID0gb2JqZWN0W2tleV0sXG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0
aWYgKGdlbmVyaWMpIGdlbmVyaWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8p
IG9iamVjdC5pbXBsZW1lbnQoa2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlz
VHlwZSl7XG5cdFx0dmFyIG1ldGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNF
bnVtZXJhYmxlKG1ldGhvZHNbMF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rp
b24oZm4pe1xuXHRcdFx0aWYgKCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwg
PSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBl
LCBwcm90b3R5cGVbbWV0aG9kc1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9y
ICh2YXIga2V5IGluIHByb3RvdHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXld
LCBrZXkpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3Ry
aW5nJywgU3RyaW5nLCBbXG5cdCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29u
dGFpbnMnLCAnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBs
YWNlJywgJ3NlYXJjaCcsXG5cdCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5n
JywgJ3RyaW0nLCAndG9Mb3dlckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJh
eSwgW1xuXHQncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGlj
ZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAn
bGFzdEluZGV4T2YnLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUn
LCAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJl
ciwgW1xuXHQndG9FeHBvbmVudGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3Rv
UHJlY2lzaW9uJ1xuXSkoJ0Z1bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwn
LCAnYmluZCdcbl0pKCdSZWdFeHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdP
YmplY3QnLCBPYmplY3QsIFtcblx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQ
cm9wZXJ0aWVzJywgJ2tleXMnLFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yJywgJ2dldE93blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMn
LCAnaXNFeHRlbnNpYmxlJywgJ3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVu
J1xuXSkoJ0RhdGUnLCBEYXRlLCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5v
dmVybG9hZFNldHRlcigpO1xuXG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0
dXJuICsobmV3IERhdGUpO1xufSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5c
bi8vIGZpeGVzIE5hTiByZXR1cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZh
bWlseSA9IGZ1bmN0aW9uKCl7XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDog
J251bGwnO1xufS5oaWRlKCk7XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgn
cmFuZG9tJywgZnVuY3Rpb24obWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJh
bmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNo
LCBrZXlzXG5cbkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBm
dW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsg
aSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0s
IGksIHRoaXMpO1xuXHRcdH1cblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlv
bihmbiwgYmluZCl7XG5cdFx0QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0
aW9uKG9iamVjdCl7XG5cdFx0dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVj
dCl7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2go
ayk7XG5cdFx0fVxuXHRcdC8qPGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxl
S2V5KG9iamVjdCwgZnVuY3Rpb24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5c
dFx0Lyo8L2x0SUU4PiovXG5cdFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVu
Y3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNo
KGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9i
amVjdCk7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVh
Y2g7XG5cblxuLy8gQXJyYXkgJiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFw
cGVuZGluZ1xuXG52YXIgY2xvbmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVP
ZihpdGVtKSl7XG5cdFx0Y2FzZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNh
c2UgJ29iamVjdCc6IHJldHVybiBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0
dXJuIGl0ZW07XG5cdH1cbn07XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigp
e1xuXHR2YXIgaSA9IHRoaXMubGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUg
KGktLSkgY2xvbmVbaV0gPSBjbG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtc
blxudmFyIG1lcmdlT25lID0gZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0
Y2ggKHR5cGVPZihjdXJyZW50KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBl
T2Yoc291cmNlW2tleV0pID09ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1
cnJlbnQpO1xuXHRcdFx0ZWxzZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtc
blx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNs
b25lKCk7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxu
XHRyZXR1cm4gc291cmNlO1xufTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0
aW9uKHNvdXJjZSwgaywgdil7XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJu
IG1lcmdlT25lKHNvdXJjZSwgaywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07
XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2Jq
ZWN0W2tleV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBm
dW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBp
biBvYmplY3QpIGNsb25lW2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4g
Y2xvbmU7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2
YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBl
eHRlbmRlZCA9IGFyZ3VtZW50c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRl
bmRlZCkgb3JpZ2luYWxba2V5XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBv
cmlnaW5hbDtcblx0fVxuXG59KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3Qn
LCAnV2hpdGVTcGFjZScsICdUZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVh
Y2goZnVuY3Rpb24obmFtZSl7XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJ
RFxuXG52YXIgVUlEID0gRGF0ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBm
dW5jdGlvbigpe1xuXHRyZXR1cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0p
KCk7XG5cbi8qXG4tLS1cblxubmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFy
cmF5IFByb3RvdHlwZXMgbGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJy
YXlcblxuLi4uXG4qL1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZl
cnk6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVu
Z3RoID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2Fs
bChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIg
cmVzdWx0cyA9IFtdO1xuXHRcdGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3Ro
ID4+PiAwOyBpIDwgbDsgaSsrKSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tp
XTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNo
KHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjog
ZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAw
O1xuXHRcdGZvciAodmFyIGkgPSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJv
bSkgOiBmcm9tIHx8IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0g
aXRlbSkgcmV0dXJuIGk7XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1
bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJl
c3VsdHMgPSBBcnJheShsZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
Kyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhp
c1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNv
bWU6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVu
Z3RoID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxs
KGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJu
IGZhbHNlO1xuXHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9
IG51bGw7XG5cdFx0fSk7XG5cdH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtc
blx0XHR2YXIgYXJncyA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRo
aXMubWFwKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBw
bHkoaXRlbSwgYXJncyk7XG5cdFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihr
ZXlzKXtcblx0XHR2YXIgb2JqID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBr
ZXlzLmxlbmd0aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tl
eXNbaV1dID0gdGhpc1tpXTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0
aW9uKG9iamVjdCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVj
dCl7XG5cdFx0XHRcdGlmIChvYmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0
W2tleV0gPSB0aGlzW2ldO1xuXHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0
XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xu
XHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhp
cy5pbmRleE9mKGl0ZW0sIGZyb20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24o
YXJyYXkpe1xuXHRcdHRoaXMucHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVu
Z3RoKSA/IHRoaXNbdGhpcy5sZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9t
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFu
ZG9tKDAsIHRoaXMubGVuZ3RoIC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5j
dGlvbihpdGVtKXtcblx0XHRpZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVt
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMu
aW5jbHVkZShhcnJheVtpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1
bmN0aW9uKGl0ZW0pe1xuXHRcdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0
XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3Ro
ID0gMDtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBhcnJheSA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRp
ZiAodHlwZSA9PSAnbnVsbCcpIGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQo
KHR5cGUgPT0gJ2FycmF5JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1
bWVudHMnIHx8IGluc3RhbmNlT2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhp
c1tpXSkgOiB0aGlzW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBp
Y2s6IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8
IGw7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0
XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5
KXtcblx0XHRpZiAodGhpcy5sZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9
IHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkg
dmFsdWUgKz0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9
KTtcblx0XHRyZXR1cm4gKGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxc
blxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMp
IHJldHVybiBudWxsO1xuXHRcdGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAm
JiAhYXJyYXkpIHJldHVybiAndHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRm
b3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAw
KS50b1N0cmluZygxNik7XG5cdFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyAr
IGJpdCA6IGJpdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4
LmpvaW4oJycpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxu
XG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwg
YmluZCwgcGFzcywgYW5kIGRlbGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rp
b24uZXh0ZW5kKHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAw
LCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0
XHRyZXR1cm4gYXJndW1lbnRzW2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRc
dHJldHVybiBudWxsO1xuXHR9XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0
dGVtcHQ6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhp
cy5hcHBseShiaW5kLCBBcnJheS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5c
blx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVu
Y3Rpb24odGhhdCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50
cy5sZW5ndGggPiAxID8gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRG
ID0gZnVuY3Rpb24oKXt9O1xuXG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZh
ciBjb250ZXh0ID0gdGhhdCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0
aGlzIGluc3RhbmNlb2YgYm91bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90
eXBlO1xuXHRcdFx0XHRjb250ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0
ID0gKCFhcmdzICYmICFsZW5ndGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0
XHRcdDogc2VsZi5hcHBseShjb250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFy
cmF5LnNsaWNlKGFyZ3VtZW50cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJu
IGNvbnRleHQgPT0gdGhhdCA/IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4g
Ym91bmQ7XG5cdH0sXG5cdC8qPC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdz
LCBiaW5kKXtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJn
cyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRy
ZXR1cm4gc2VsZi5hcHBseShiaW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxc
blxuXHRkZWxheTogZnVuY3Rpb24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRU
aW1lb3V0KHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5
KTtcblx0fSxcblxuXHRwZXJpb2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdz
KXtcblx0XHRyZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6
IGFyZ3MpLCBiaW5kKSwgcGVyaW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5c
bm5hbWU6IE51bWJlclxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMg
bGlrZSBsaW1pdCwgcm91bmQsIHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4q
L1xuXG5OdW1iZXIuaW1wbGVtZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xu
XHRcdHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5c
dHJvdW5kOiBmdW5jdGlvbihwcmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEw
LCBwcmVjaXNpb24gfHwgMCkudG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDAp
O1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xu
XHR9LFxuXG5cdHRpbWVzOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzOyBpKyspIGZuLmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9h
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0
b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwg
MTApO1xuXHR9XG5cbn0pO1xuXG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1
bmN0aW9uKG1hdGgpe1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24o
bmFtZSl7XG5cdGlmICghTnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gTWF0aFtuYW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNv
bnZlcnQoYXJndW1lbnRzKSkpO1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9k
cyk7XG5cbn0pKFsnYWJzJywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwn
LCAnY29zJywgJ2V4cCcsICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2lu
JywgJ3NxcnQnLCAndGFuJ10pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlw
dGlvbjogQ29udGFpbnMgU3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxp
emUsIHRlc3QsIGFuZCB0b0ludC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBbVHlwZSwgQXJyYXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5T
dHJpbmcuaW1wbGVtZW50KHtcblxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3Ry
aW5nLCBpbmRleCl7XG5cdFx0cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRl
eCkgOiBTdHJpbmcodGhpcykpLmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVT
Nj5cblxuXHR0ZXN0OiBmdW5jdGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBl
T2YocmVnZXgpID09ICdyZWdleHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBw
YXJhbXMpKS50ZXN0KHRoaXMpO1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0
Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMr
L2csICcgJykudHJpbSgpO1xuXHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRc
dFx0cmV0dXJuIG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxu
XG5cdGh5cGhlbmF0ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxh
Y2UoL1tBLVpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2gu
Y2hhckF0KDApLnRvTG93ZXJDYXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9n
LCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0
XHR9KTtcblx0fSxcblxuXHRlc2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0
cmluZyh0aGlzKS5yZXBsYWNlKC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwk
MScpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJ
bnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24o
YXJyYXkpe1xuXHRcdHZhciBoZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSko
XFx3ezEsMn0pKFxcd3sxLDJ9KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSku
aGV4VG9SZ2IoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJy
YXkpe1xuXHRcdHZhciByZ2IgPSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRc
dHJldHVybiAocmdiKSA/IHJnYi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1
YnN0aXR1dGU6IGZ1bmN0aW9uKG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRo
aXMpLnJlcGxhY2UocmVnZXhwIHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24o
bWF0Y2gsIG5hbWUpe1xuXHRcdFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVy
biBtYXRjaC5zbGljZSgxKTtcblx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8g
b2JqZWN0W25hbWVdIDogJyc7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5c
bm5hbWU6IEJyb3dzZXJcblxuZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFp
bnMgQnJvd3NlciBpbml0aWFsaXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBC
cm93c2VyIEhhc2guXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
W0FycmF5LCBGdW5jdGlvbiwgTnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3Nlciwg
V2luZG93LCBEb2N1bWVudF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3Vt
ZW50ID0gdGhpcy5kb2N1bWVudDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlz
O1xuXG52YXIgcGFyc2UgPSBmdW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93
ZXJDYXNlKCk7XG5cdHBsYXRmb3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2Uo
KSA6ICcnKTtcblxuXHQvLyBjaHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5l
ZWQgdG8gY2hlY2sgZm9yIGVkZ2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdz
IGNocm9tZS5cblx0dmFyIFVBID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwu
XSspLyk7XG5cdGlmICghVUEpe1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94
fGNocm9tZXx0cmlkZW50fGNyaW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/
KHNhZmFyaXwoPzpydltcXHNcXC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQp
LykgfHwgW251bGwsICd1bmtub3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRl
bnQnKXtcblx0XHRVQVsxXSA9ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xu
XHR9IGVsc2UgaWYgKFVBWzFdID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5c
dH1cblxuXHRwbGF0Zm9ybSA9IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6
ICh1YS5tYXRjaCgvKD86d2Vib3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51
eC8pIHx8IFsnb3RoZXInXSlbMF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0g
PSAnd2luZG93cyc7XG5cblx0cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlw
ZS5leHRlbmQsXG5cdFx0bmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFd
LFxuXHRcdHZlcnNpb246IHBhcnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8g
VUFbNF0gOiBVQVsyXSksXG5cdFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIg
QnJvd3NlciA9IHRoaXMuQnJvd3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmln
YXRvci5wbGF0Zm9ybSk7XG5cbmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5k
b2N1bWVudE1vZGUpe1xuXHRCcm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7
XG59XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9j
dW1lbnQuZXZhbHVhdGUpLFxuXHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5
OiAhIShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilc
blx0fSxcblx0cGFyc2VVQTogcGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2Vy
LlJlcXVlc3QgPSAoZnVuY3Rpb24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAn
KTtcblx0fTtcblxuXHR2YXIgTVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0
aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rp
b24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRU
UDtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xu
XHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtc
blxufSkoKTtcblxuQnJvd3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xu
XG5cblxuLy8gU3RyaW5nIHNjcmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7
XG5cdGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5c
dFx0d2luZG93LmV4ZWNTY3JpcHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1
dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xu
XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFk
LnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcu
aW1wbGVtZW50KCdzdHJpcFNjcmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMg
PSAnJztcblx0dmFyIHRleHQgPSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10q
Pyk8XFwvc2NyaXB0Pi9naSwgZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNv
ZGUgKyAnXFxuJztcblx0XHRyZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkg
QnJvd3Nlci5leGVjKHNjcmlwdHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0
aW9uJykgZXhlYyhzY3JpcHRzLCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2lu
ZG93LCBEb2N1bWVudFxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3Vt
ZW50LFxuXHRXaW5kb3c6IHRoaXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5c
dEV2ZW50OiB0aGlzLkV2ZW50XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3Rv
ciA9IG5ldyBUeXBlKCdXaW5kb3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBG
dW5jdGlvbi5jb252ZXJ0KCd3aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rp
b24obmFtZSwgbWV0aG9kKXtcblx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMu
RG9jdW1lbnQgPSBkb2N1bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBm
dW5jdGlvbigpe30pO1xuXG5kb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9j
dW1lbnQnKS5oaWRlKCk7XG5cbkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qp
e1xuXHRkb2N1bWVudFtuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFk
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3Vt
ZW50LmV4ZWNDb21tYW5kKSB0cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3Vu
ZEltYWdlQ2FjaGUnLCBmYWxzZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5Piov
XG5pZiAodGhpcy5hdHRhY2hFdmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFy
IHVubG9hZEV2ZW50ID0gZnVuY3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9h
ZCcsIHVubG9hZEV2ZW50KTtcblx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRv
Y3VtZW50LndpbmRvdyA9IG51bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVu
dCA9IG51bGw7XG5cdH07XG5cdHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZl
bnQpO1xufVxuXG4vLyBJRSBmYWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9u
cyAocmVmZXJzIHRvIDxzZWxlY3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50
cnkge1xuXHRhcnJheUZyb20oZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUp
e1xuXHRBcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVt
ICE9ICdzdHJpbmcnICYmIFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAh
PSAnYXJyYXknKXtcblx0XHRcdHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5
KGkpO1xuXHRcdFx0d2hpbGUgKGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJu
IGFycmF5O1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZh
ciBwcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xp
Y2U7XG5cdFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGlj
ZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihu
YW1lKXtcblx0XHR2YXIgbWV0aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVd
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZl
cnQoaXRlbSksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4v
KjwvbHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVz
Y3JpcHRpb246IENvbnRhaW5zIHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5n
LCBleHRlbmRpbmcsIGFuZCBpbXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rp
b24sIE51bWJlcl1cblxucHJvdmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBDbGFzcyA9IHRoaXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihw
YXJhbXMpe1xuXHRpZiAoaW5zdGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2lu
aXRpYWxpemU6IHBhcmFtc307XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRy
ZXNldCh0aGlzKTtcblx0XHRpZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztc
blx0XHR0aGlzLiRjYWxsZXIgPSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0
dmFyIHZhbHVlID0gKHRoaXMuaW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhp
cywgYXJndW1lbnRzKSA6IHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBu
dWxsO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFt
cyk7XG5cblx0bmV3Q2xhc3MuJGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3Rv
dHlwZS4kY29uc3RydWN0b3IgPSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVu
dCA9IHBhcmVudDtcblxuXHRyZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1
bmN0aW9uKCl7XG5cdGlmICghdGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRo
b2QgXCJwYXJlbnRcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNh
bGxlci4kbmFtZSxcblx0XHRwYXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0
XHRwcmV2aW91cyA9IChwYXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5c
dGlmICghcHJldmlvdXMpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsg
J1wiIGhhcyBubyBwYXJlbnQuJyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1
bWVudHMpO1xufTtcblxudmFyIHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIg
a2V5IGluIG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNo
ICh0eXBlT2YodmFsdWUpKXtcblx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0g
ZnVuY3Rpb24oKXt9O1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmpl
Y3Rba2V5XSA9IHJlc2V0KG5ldyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJh
eSc6IG9iamVjdFtrZXldID0gdmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJl
dHVybiBvYmplY3Q7XG59O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9k
KXtcblx0aWYgKG1ldGhvZC4kb3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFy
IHdyYXBwZXIgPSBmdW5jdGlvbigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlz
LiRjYWxsZXIgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSAr
ICdcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwg
Y3VycmVudCA9IHRoaXMuJGNhbGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMu
JGNhbGxlciA9IHdyYXBwZXI7XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBh
cmd1bWVudHMpO1xuXHRcdHRoaXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2Fs
bGVyO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmln
aW46IG1ldGhvZCwgJG5hbWU6IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBp
bXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0
YXRvcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1tr
ZXldLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhp
cztcblx0fVxuXG5cdGlmICh0eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2
YWx1ZS4kaGlkZGVuKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJl
dGFpbikgPyB2YWx1ZSA6IHdyYXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0
T2JqZWN0Lm1lcmdlKHRoaXMucHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVy
biB0aGlzO1xufTtcblxudmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFz
cy4kcHJvdG90eXBpbmcgPSB0cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0
ZSBrbGFzcy4kcHJvdG90eXBpbmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxl
bWVudCgnaW1wbGVtZW50JywgaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5N
dXRhdG9ycyA9IHtcblxuXHRFeHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFy
ZW50ID0gcGFyZW50O1xuXHRcdHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtc
blx0fSxcblxuXHRJbXBsZW1lbnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVy
dChpdGVtcykuZWFjaChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBp
dGVtO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlz
LCBrZXksIGluc3RhbmNlW2tleV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59
KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgVXRpbGl0eSBDbGFzc2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBv
d24gQ2xhc3NlcyB0byBlYXNlIHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlk
ZXM6IFtDbGFzcy5FeHRyYXMsIENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxu
KGZ1bmN0aW9uKCl7XG5cbnRoaXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10s
XG5cblx0Y2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZs
YXR0ZW4oYXJndW1lbnRzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWlu
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNo
YWluLnNoaWZ0KCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNs
ZWFyQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtc
blx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmly
c3Qpe1xuXHRcdHJldHVybiBmaXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMu
RXZlbnRzID0gbmV3IENsYXNzKHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4sIGludGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5c
blx0XHRcblxuXHRcdHRoaXMuJGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwg
W10pLmluY2x1ZGUoZm4pO1xuXHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtc
blx0XHRmb3IgKHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNb
dHlwZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24o
dHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIg
ZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhp
cztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5j
dGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtc
blx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0
XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0
eXBlXTtcblx0XHRpZiAoZXZlbnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXgg
PSBldmVudHMuaW5kZXhPZihmbik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVu
dHNbaW5kZXhdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVu
dHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVu
dHMpID09ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3Zl
RXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0
XHRpZiAoZXZlbnRzKSBldmVudHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBp
biB0aGlzLiRldmVudHMpe1xuXHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29u
dGludWU7XG5cdFx0XHR2YXIgZm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2
YXIgaSA9IGZucy5sZW5ndGg7IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVt
b3ZlRXZlbnQodHlwZSwgZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbnRoaXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9u
czogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5t
ZXJnZS5hcHBseShudWxsLCBbe30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xu
XHRcdGlmICh0aGlzLmFkZEV2ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0
XHRpZiAodHlwZU9mKG9wdGlvbnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1a
XS8pLnRlc3Qob3B0aW9uKSkgY29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwg
b3B0aW9uc1tvcHRpb25dKTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxu
XHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6
IENsYXNzLlRoZW5hYmxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3Mg
dGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhl
bSBcInRoZW5hYmxlXCIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVu
Y3Rpb24oKXtcblxudmFyIFNUQVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAx
LFxuXHRTVEFURV9SRUpFQ1RFRCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxl
ID0gbmV3IENsYXNzKHtcblxuXHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRo
ZW5hYmxlUmVzdWx0OiBudWxsLFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29s
dmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0
KHRoaXMsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVT
dGF0ZTogZnVuY3Rpb24oKXtcblx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRc
dFx0Y2FzZSBTVEFURV9QRU5ESU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0
XHRjYXNlIFNUQVRFX0ZVTEZJTExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5c
dFx0XHRjYXNlIFNUQVRFX1JFSkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0
XHR9XG5cdH0sXG5cblx0cmVzZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWpl
Y3QodGhpcywgcmVhc29uKTtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHR0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYg
KHR5cGVvZiBvbkZ1bGZpbGxlZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRp
dHknO1xuXHRcdGlmICh0eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3Rl
ZCA9ICdUaHJvd2VyJztcblxuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5c
dFx0dGhpcy4kdGhlbmFibGVSZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFi
bGUsXG5cdFx0XHRmdWxmaWxsSGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5k
bGVyOiBvblJlamVjdGVkXG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAh
PT0gU1RBVEVfUEVORElORyl7XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1
cm4gdGhlbmFibGU7XG5cdH0sXG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5c
dFx0cmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhl
bmFibGUuZXh0ZW5kKHtcblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVu
YWJsZTtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJs
ZSA9IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgp
O1xuXHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhl
bmFibGU7XG5cdH0sXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFi
bGUgPSBuZXcgVGhlbmFibGUoKTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0
cmV0dXJuIHRoZW5hYmxlO1xuXHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVu
Y3Rpb24gcmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxl
U3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xu
XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEg
dGhlbmFibGUgd2l0aCBpdHNlbGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVv
ZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5c
dFx0XHR2YXIgdGhlbjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xu
XHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNl
cHRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtc
blx0XHRcdFx0dmFyIHJlc29sdmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7
XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0
dmFsdWUsXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRc
dFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5c
dFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRc
dFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29u
KXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJl
c29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29u
KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5c
dFx0XHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQp
e1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0
aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRc
dH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xu
XHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5c
dFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9
IFNUQVRFX0ZVTEZJTExFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5j
dGlvbiByZWplY3QodGhlbmFibGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVT
dGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0g
cmVhc29uO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5c
blx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUp
e1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRc
dHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxl
U3RhdGUgPSBTVEFURV9QRU5ESU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxl
KXtcblx0dmFyIHN0YXRlID0gdGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0g
dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVu
YWJsZVJlYWN0aW9ucyxcblx0XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklM
TEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0g
J2Z1bGZpbGxIYW5kbGVyJztcblx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7
XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWpl
Y3RIYW5kbGVyJztcblx0fVxuXG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhb
cmVzdWx0LCByZWFjdGlvbnMsIHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJl
c3VsdCwgcmVhY3Rpb25zLCB0eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMu
bGVuZ3RoOyBpIDwgbDsgKytpKXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5c
dFx0XHRoYW5kbGVyID0gcmVhY3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lk
ZW50aXR5Jyl7XG5cdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRc
dH0gZWxzZSBpZiAoaGFuZGxlciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlv
bi50aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0
Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0
aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBw
cm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1
bmN0aW9uJyl7XG5cdGRlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9m
IHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtc
bn0gZWxzZSB7XG5cdGRlZmVyID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDAp
O1xuXHR9O1xufVxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlw
dGlvbjogT2JqZWN0IGdlbmVyaWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rp
b24ob2JqZWN0LCBrZXlzKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkg
PSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ld
O1xuXHRcdFx0aWYgKGsgaW4gb2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1c
blx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4s
IGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5
cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5c
dFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmlu
ZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7
XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIg
cmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRm
b3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtl
eXNbaV0sIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1
ZSwga2V5LCBvYmplY3QpKSByZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJu
IHJlc3VsdHM7XG5cdH0sXG5cblx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsg
aSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRp
ZiAoIWZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwg
YmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFy
IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtc
blx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtc
blx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2Jq
ZWN0KXtcblx0XHR2YXIgdmFsdWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhv
YmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0
XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1c
blx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0
KXtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5
T2Y6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMo
b2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRc
dFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSBy
ZXR1cm4ga2V5O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczog
ZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3Qs
IHZhbHVlKSAhPSBudWxsO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVj
dCwgYmFzZSl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChv
YmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2Ug
KyAnWycgKyBrZXkgKyAnXSc7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBl
T2YodmFsdWUpKXtcblx0XHRcdFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVl
cnlTdHJpbmcodmFsdWUsIGtleSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0
XHRcdFx0dmFyIHFzID0ge307XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkp
e1xuXHRcdFx0XHRcdFx0cXNbaV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVz
dWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5c
dFx0XHRcdGRlZmF1bHQ6IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2
YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVz
aChyZXN1bHQpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtc
blx0fVxuXG59KTtcblxufSkoKTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxu
ZGVzY3JpcHRpb246IFN0YW5kYWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBT
bGljay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRz
ZXBhcmF0b3JJbmRleCxcblx0Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUg
PSB7fSxcblx0cmV2ZXJzZUNhY2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52
YXIgcGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJl
c3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0
cnVlKSByZXR1cm4gZXhwcmVzc2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24p
LnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7
XG5cdHZhciBjdXJyZW50Q2FjaGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7
XG5cdGlmIChjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhw
cmVzc2lvbl07XG5cdHBhcnNlZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9u
czogW10sXG5cdFx0cmF3OiBleHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5c
dFx0XHRyZXR1cm4gcGFyc2UodGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJh
dG9ySW5kZXggPSAtMTtcblx0d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHBy
ZXNzaW9uLnJlcGxhY2UocmVnZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJz
ZWQuZXhwcmVzc2lvbnMubGVuZ3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXdd
ID0gKHJldmVyc2VkKSA/IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZl
cnNlQ29tYmluYXRvciA9IGZ1bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9
PT0gJyEnKSByZXR1cm4gJyAnO1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVy
biAnISc7XG5cdGVsc2UgaWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmlu
YXRvci5yZXBsYWNlKC9eIS8sICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtc
bn07XG5cbnZhciByZXZlcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNz
aW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhw
cmVzc2lvbnMubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0
XHR2YXIgbGFzdCA9IHtwYXJ0czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29t
YmluYXRvcihleHBbMF0uY29tYmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBl
eHAubGVuZ3RoOyBqKyspe1xuXHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNl
eHAucmV2ZXJzZUNvbWJpbmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0
XHRjZXhwLmNvbWJpbmF0b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRl
IGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNo
KGxhc3QpO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4
cCA9IGZ1bmN0aW9uKHN0cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIw
MDggU3RldmVuIExldml0aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdl
eHAvPiBNSVQgTGljZW5zZVxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8u
XFxcXF4kfCwjXFxzXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1h
dGNoO1xuXHR9KTtcbn07XG5cbnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9i
aW4vZW52IHJ1YnlcbnB1dHMgXCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwp
fFxccysjLiokfFxccyt8XFxcXCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxc
blx0ICBcXFxccyogKCAsICkgXFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAg
ICAgXFxuXFxcblx0fCBcXFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5h
dG9yICAgICAgICAgXFxuXFxcblx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMg
Q29tYmluYXRvckNoaWxkcmVuIFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiAp
ICAgICAjIFRhZyAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisg
ICAgICAgKSAgICAgIyBJRCAgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5p
Y29kZT4rICAgICAgICkgICAgICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxc
XFsgIFxcXG5cdFx0XFxcXHMqICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAo
WypeJCF+fF0/PSkgICg/OiAgXFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtc
XFwiJ10/KSguKj8pXFxcXDkgXFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBc
XFxccyogIFxcXG5cdFxcXFxdKD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisg
KSg/OlxcXG5cdFxcXFwoICg/OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEy
KXwoKD86XFxcXChbXildK1xcXFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5c
dClcIlxuKi9cblx0XCJeKD86XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxc
XFxzKnwoXFxcXHMrKXwoPHVuaWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4o
PHVuaWNvZGU+Kyl8XFxcXFtcXFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0p
KD86XFxcXHMqKD86KFtcXFwiJ10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8
KDorKSg8dW5pY29kZT4rKSg/OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEz
KXwoKD86XFxcXChbXildK1xcXFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88
Y29tYmluYXRvcj4vLCAnWycgKyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykg
KyAnXScpXG5cdC5yZXBsYWNlKC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxc
dUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+
L2csICcoPzpbOlxcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEt
Zl0pJylcbik7XG5cbmZ1bmN0aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9y
LFxuXHRjb21iaW5hdG9yLFxuXHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0
aWQsXG5cdGNsYXNzTmFtZSxcblxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9y
LFxuXHRhdHRyaWJ1dGVRdW90ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2Vy
LFxuXHRwc2V1ZG9DbGFzcyxcblx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFs
dWUsXG5cdHBzZXVkb0NsYXNzVmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9y
SW5kZXggPT09IC0xKXtcblx0XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0g
PSBbXTtcblx0XHRjb21iaW5hdG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1
cm4gJyc7XG5cdH1cblxuXHRpZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwg
Y29tYmluYXRvckluZGV4ID09PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwg
JyAnO1xuXHRcdHZhciBjdXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFy
YXRvckluZGV4XTtcblx0XHRpZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5h
dG9ySW5kZXhdKVxuXHRcdFx0Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVy
c2VDb21iaW5hdG9yID0gcmV2ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVu
dFNlcGFyYXRvclsrK2NvbWJpbmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwg
dGFnOiAnKid9O1xuXHR9XG5cblx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lv
bnNbc2VwYXJhdG9ySW5kZXhdW2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xu
XHRcdGN1cnJlbnRQYXJzZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtc
blxuXHR9IGVsc2UgaWYgKGlkKXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShy
ZVVuZXNjYXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFt
ZSA9IGNsYXNzTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVu
dFBhcnNlZC5jbGFzc0xpc3QpIGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYg
KCFjdXJyZW50UGFyc2VkLmNsYXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRc
dGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFy
c2VkLmNsYXNzZXMucHVzaCh7XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhw
OiBuZXcgUmVnRXhwKCcoXnxcXFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxc
XFxzfCQpJylcblx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1
ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVl
O1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NW
YWx1ZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQ
YXJzZWQucHNldWRvcykgY3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBh
cnNlZC5wc2V1ZG9zLnB1c2goe1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5l
c2NhcGUsICcnKSxcblx0XHRcdHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTog
cHNldWRvTWFya2VyLmxlbmd0aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xu
XG5cdH0gZWxzZSBpZiAoYXR0cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1
dGVLZXkucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0
cmlidXRlVmFsdWUgfHwgJycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRl
c3QsIHJlZ2V4cDtcblxuXHRcdHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2Fz
ZSAnXj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0
cmlidXRlVmFsdWUpICAgICAgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdl
eHAgPSBuZXcgUmVnRXhwKCAgICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkg
KyckJyAgICAgICApOyBicmVhaztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdF
eHAoICcoXnxcXFxccyknKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQp
JyApOyBicmVhaztcblx0XHRcdGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAg
ICdeJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xu
XHRcdFx0Y2FzZSAgJz0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJu
IGF0dHJpYnV0ZVZhbHVlID09IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcq
PScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFs
dWUuaW5kZXhPZihhdHRyaWJ1dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0
Y2FzZSAnIT0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJp
YnV0ZVZhbHVlICE9IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0
ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07
XG5cdFx0fVxuXG5cdFx0aWYgKGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50
ZXN0KGF0dHJpYnV0ZU9wZXJhdG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4g
ZmFsc2U7XG5cdFx0fTtcblxuXHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtc
blx0XHRcdHJldHVybiB2YWx1ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRc
dGlmICghY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0
dHJpYnV0ZUtleSxcblx0XHRcdG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZh
bHVlOiBhdHRyaWJ1dGVWYWx1ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5c
blx0cmV0dXJuICcnO1xufTtcblxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xp
Y2sgfHwge30pO1xuXG5TbGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1
cm4gcGFyc2UoZXhwcmVzc2lvbik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVS
ZWdFeHA7XG5cbmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBs
eSgvKjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRz
IDogLyo8L0NvbW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxu
ZGVzY3JpcHRpb246IFRoZSBuZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJv
dmlkZXM6IFNsaWNrLkZpbmRlclxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47
KGZ1bmN0aW9uKCl7XG5cbnZhciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5c
dHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1
ZyBkZXRlY3Rpb25cblxubG9jYWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1
cm4gKC9cXHtcXHMqXFxbbmF0aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07
XG5cbmxvY2FsLmlzWE1MID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1l
bnQueG1sVmVyc2lvbikgfHwgKCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1
bWVudCkgPT0gJ1tvYmplY3QgWE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBl
ID09IDkgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59
O1xuXG5sb2NhbC5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252
ZXJ0IGVsZW1lbnRzIC8gd2luZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQg
Y2Fubm90IGJlIGV4dHJhcG9sYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2Rl
VHlwZSA9IGRvY3VtZW50Lm5vZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3Vt
ZW50XG5cdGVsc2UgaWYgKG5vZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1l
bnQ7IC8vIG5vZGVcblx0ZWxzZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRv
Y3VtZW50LmRvY3VtZW50OyAvLyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sg
aWYgaXQncyB0aGUgb2xkIGRvY3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3Vt
ZW50KSByZXR1cm47XG5cdHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBp
ZiB3ZSBoYXZlIGRvbmUgZmVhdHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVc
blxuXHR2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0g
dGhpcy5nZXRVSURYTUwocm9vdCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RV
aWRdLFxuXHRcdGZlYXR1cmU7XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUg
aW4gZmVhdHVyZXMpe1xuXHRcdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xu
XHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9v
dFVpZF0gPSB7fTtcblxuXHRmZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxE
b2N1bWVudCA9IHRoaXMuaXNYTUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJH
RUJUTlxuXHQ9IGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRH
ZXRzTmFtZVxuXHQ9IGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJy
b2tlbkdFQkNOXG5cdD0gZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJy
b2tlbkVtcHR5QXR0cmlidXRlUVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBm
ZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNl
bGVjdHNDbG9zZWQsIHN0YXJTZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NO
YW1lR0VCQ04sIGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0
dHJpYnV0ZUdldHRlcjtcblxuXHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztc
blx0dmFyIHRlc3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFy
IHRlc3RSb290ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnYm9keScpWzBdIHx8IHJvb3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtc
blxuXHQvLyBvbiBub24tSFRNTCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5
SWQgZG9lc250IHdvcmsgcHJvcGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGEgaWQ9XCInK2lkKydcIj48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9
ICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYg
KGZlYXR1cmVzLmlzSFRNTERvY3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkg
PSAnbm9uZSc7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1l
bnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVu
dHMgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxu
XHRcdC8vIElFIHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3RO
b2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9
IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5j
aGFyQXQoMCkgPT0gJy8nKTtcblx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJv
a2VuU3RhckdFQlROID0gc3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtc
blxuXHRcdC8vIElFIHJldHVybnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1
c3QgaWQgZm9yIGdldEVsZW1lbnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xu
XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBp
ZD1cIicrIGlkICsnXCI+PC9iPic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoaWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0
Y2ggKGUpe31cblxuXHRcdGlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxu
XHRcdFx0Ly8gU2FmYXJpIDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRz
XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJm
XCI+PC9hPjxhIGNsYXNzPVwiYlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNs
YXNzTmFtZSA9ICdiJztcblx0XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0
ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0
fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05h
bWUgZG9lc250IGRldGVjdHMgdGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRc
dFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwv
YT48YSBjbGFzcz1cImYgYiBhXCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFt
ZUdFQkNOID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0g
Mik7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0g
Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJD
Tjtcblx0XHR9XG5cblx0XHRpZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQv
LyBJRSA4IHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxl
Y3RvckFsbCgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVz
dE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5v
ZGUucXVlcnlTZWxlY3RvckFsbCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Ns
b3NlZFFTQSA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5u
b2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0
Ly8gU2FmYXJpIDMuMiBxdWVyeVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNl
IG9uIHF1aXJrc21vZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9
ICc8YSBjbGFzcz1cIk1pWFwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENh
c2VRU0EgPSAhdGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRc
dH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBz
ZWxlY3RlZCBvcHRpb25zIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRc
dHRlc3ROb2RlLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3Rl
ZFwiPmE8L29wdGlvbj48L3NlbGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2Vk
UVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDAp
O1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3Qg
cmVzdWx0cyBmb3IgYXR0clsqXiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxc
blx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwi
PjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0
Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRc
dFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMg
YW4gaW5wdXQgb2YgaWQgeCwgZm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5j
ZSB0byB0aGUgaW5wdXRcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxm
b3JtIGFjdGlvbj1cInNcIj48aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRi
cm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmli
dXRlKCdhY3Rpb24nKSAhPSAncycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2
ZSBtYXRjaGVzU2VsZWN0b3IgZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNT
ZWxlY3RvciA9IHJvb3QubWF0Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyBy
b290Lm1vek1hdGNoZXNTZWxlY3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0
XHRpZiAoZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYg
bWF0Y2hlc1NlbGVjdG9yIHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2Fu
IHVzZSBpdFxuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwg
JzpzbGljaycpO1xuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtc
blx0XHR9IGNhdGNoIChlKXt9XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBh
bmRvID0gMTtcblx0XHRkZWxldGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdl
dFVJRCA9IHRoaXMuZ2V0VUlESFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0
VUlEID0gdGhpcy5nZXRVSURYTUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0
Tm9kZSk7XG5cdHRlc3ROb2RlID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8g
Z2V0QXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRN
TERvY3VtZW50ICYmIGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwg
bmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0
XHRpZiAobWV0aG9kKSByZXR1cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0
ZU5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1
dGVOb2RlKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9u
KG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV07XG5cdFx0cmV0dXJuIChtZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0
dHJpYnV0ZShuYW1lKTtcblx0fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5o
YXNBdHRyaWJ1dGUgPSAocm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0
ZSkpID8gZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRy
aWJ1dGUoYXR0cmlidXRlKTtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0
bm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShu
b2RlICYmIChub2RlLnNwZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8v
IGNvbnRhaW5zXG5cdC8vIEZJWE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBi
ZSBkaWZmZXJlbnQgZm9yIHhtbCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290
Q29udGFpbnMgPSByb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRc
dG5hdGl2ZURvY3VtZW50Q29udGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShk
b2N1bWVudC5jb250YWlucyk7XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENv
bnRhaW5zICYmIG5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9k
ZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9v
dENvbnRhaW5zICYmICFuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQs
IG5vZGUpe1xuXHRcdC8vIElFOCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5c
blx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9
IDogKHJvb3QgJiYgcm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250
ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4
dCwgbm9kZSl7XG5cdFx0aWYgKG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0
KSByZXR1cm4gdHJ1ZTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xu
XHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5c
dC8vIGNyZWRpdHMgdG8gU2l6emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJl
cy5kb2N1bWVudFNvcnRlciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0
aW9uKGEsIGIpe1xuXHRcdGlmICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24oYikgJiA0ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJj
ZUluZGV4JyBpbiByb290KSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRl
eCB8fCAhYi5zb3VyY2VJbmRleCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXgg
LSBiLnNvdXJjZUluZGV4O1xuXHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9u
KGEsIGIpe1xuXHRcdGlmICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJl
dHVybiAwO1xuXHRcdHZhciBhUmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwg
YlJhbmdlID0gYi5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0
YXJ0KGEsIDApO1xuXHRcdGFSYW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0
KGIsIDApO1xuXHRcdGJSYW5nZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVs
bDtcblxuXHRyb290ID0gbnVsbDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRc
dHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBN
ZXRob2RcblxudmFyIHJlU2ltcGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCop
KSQvLFxuXHRyZUVtcHR5QXR0cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxc
blx0cXNhRmFpbEV4cENhY2hlID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRl
eHQsIGV4cHJlc3Npb24sIGFwcGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91
bmQgPSAoZmlyc3QpID8gbnVsbCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkg
cmV0dXJuIGZvdW5kO1xuXHRlbHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNv
bnRleHQuZG9jdW1lbnQ7IC8vIENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRv
Y3VtZW50XG5cdGVsc2UgaWYgKCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0
Ly8gc2V0dXBcblxuXHR2YXIgcGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0g
dGhpcy51bmlxdWVzID0ge30sXG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5s
ZW5ndGgpLFxuXHRcdGNvbnRleHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7
XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQg
OiBjb250ZXh0Lm93bmVyRG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5c
dC8vIGF2b2lkIGR1cGxpY2F0aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxu
XHRpZiAoaGFzT3RoZXJzKSBmb3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhp
cy5nZXRVSUQoZm91bmRbaV0pXSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3Ncblxu
XHRpZiAodHlwZW9mIGV4cHJlc3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEg
c3RyaW5nXG5cblx0XHQvKjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNp
bXBsZVNlbGVjdG9yID0gZXhwcmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRz
aW1wbGVTZWxlY3RvcnM6IGlmIChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wg
PSBzaW1wbGVTZWxlY3RvclsxXSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xu
XG5cdFx0XHRpZiAoIXN5bWJvbCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMu
YnJva2VuU3RhckdFQlROKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0g
Y29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSBy
ZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVz
W2krK107KXtcblx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJ
RChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBp
ZiAoc3ltYm9sID09ICcjJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8
ICFjb250ZXh0SXNEb2N1bWVudCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2Rl
ID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1
cm4gZm91bmQ7XG5cdFx0XHRcdGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1
dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5c
dFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFz
T3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtc
blxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMu
aXNIVE1MRG9jdW1lbnQgfHwgKCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRo
aXMuYnJva2VuR0VCQ04pICYmIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBs
ZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAm
JiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUobmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNb
MF0gfHwgbnVsbDtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xu
XHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSld
KSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0
XHRcdFx0dmFyIG1hdGNoQ2xhc3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2Nh
cGVSZWdFeHAobmFtZSkgKycoXFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0g
bm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5c
dFx0XHRcdFx0XHRpZiAoIShjbGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkp
KSBjb250aW51ZTtcblx0XHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRc
dFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3Vu
ZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRc
dGlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/
IG51bGwgOiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlk
ZT4qL1xuXG5cdFx0Lyo8cXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVj
dG9yOiBpZiAoY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlz
SFRNTERvY3VtZW50XG5cdFx0XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRc
dFx0XHQvL1RPRE86IG9ubHkgc2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQg
Y2FzZVxuXHRcdFx0XHR8fCB0aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhp
cy5icm9rZW5DaGVja2VkUVNBICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0x
KVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0
cmlidXRlLnRlc3QoZXhwcmVzc2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQg
Ly9BYm9ydCB3aGVuICFjb250ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhl
cmUgYXJlIG11bHRpcGxlIGV4cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8v
ICBzaW5jZSB3ZSBjdXJyZW50bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9y
IHNpbmdsZSBleHByZXNzaW9uIHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5k
ZXhPZignLCcpID4gLTFcblx0XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5c
dFx0XHQpIGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4
cHJlc3Npb24sIF9jb250ZXh0ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250
ZXh0SXNEb2N1bWVudCl7XG5cdFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0
XHRcdC8vIGNyZWRpdHMgdG8gQW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29u
dGV4dC5nZXRBdHRyaWJ1dGUoJ2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0
X2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lv
biA9ICcjJyArIHNsaWNraWQgKyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9
IF9jb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlm
IChmaXJzdCkgcmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVs
bDtcblx0XHRcdFx0ZWxzZSBub2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVz
c2lvbik7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJl
c3Npb25dID0gMTtcblx0XHRcdFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxs
eSB7XG5cdFx0XHRcdGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJy
ZW50SWQpIF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRc
dGVsc2UgX2NvbnRleHQucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQg
PSBfY29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2Vs
ZWN0c0Nsb3NlZFFTQSkgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
aWYgKG5vZGUubm9kZU5hbWUgPiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdl
dFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7
IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVz
W3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRc
dGlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5c
blx0XHR9XG5cdFx0Lyo8L3F1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQg
PSB0aGlzLlNsaWNrLnBhcnNlKGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkg
cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJl
IGlzIG5vIGV4cHJlc3Npb25cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVz
c2lvbi5TbGljayl7IC8vIGV4cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0
cGFyc2VkID0gZXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQu
ZG9jdW1lbnRFbGVtZW50IHx8IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBp
cyBhIG5vZGVcblx0XHQoZm91bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0g
ZXhwcmVzc2lvbjtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtc
blx0XHRyZXR1cm4gZm91bmQ7XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRo
LXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBz
ZWxlY3RvcnNcblxuXHR0aGlzLnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtc
blx0dGhpcy5wb3NOVEhUeXBlID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxu
XHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5c
dC8vIGlmIGFwcGVuZCBpcyBudWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9y
IHdpdGggb25lIGV4cHJlc3Npb24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0
aGlzLnB1c2ggPSAoIWhhc090aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAm
JiBwYXJzZWQuZXhwcmVzc2lvbnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6
IHRoaXMucHVzaFVJRDtcblxuXHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQv
LyBkZWZhdWx0IGVuZ2luZVxuXG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFn
LCBpZCwgY2xhc3NMaXN0LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3Vy
cmVudEl0ZW1zLCBjdXJyZW50RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVz
c2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3Vy
cmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJl
bnRCaXQgPSBjdXJyZW50RXhwcmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0g
J2NvbWJpbmF0b3I6JyArIGN1cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29t
YmluYXRvcl0pIGNvbnRpbnVlIHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hN
TERvY3VtZW50KSA/IGN1cnJlbnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2Uo
KTtcblx0XHRpZCAgICAgICAgID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3Vy
cmVudEJpdC5jbGFzc0xpc3Q7XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztc
blx0XHRhdHRyaWJ1dGVzID0gY3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAg
PSBjdXJyZW50Qml0LnBzZXVkb3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4
cHJlc3Npb24ubGVuZ3RoIC0gMSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0
XHRpZiAobGFzdEJpdCl7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhp
cy5mb3VuZCA9IGZvdW5kO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtc
blx0XHRcdHRoaXMuZm91bmQgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0
XHR0aGlzW2NvbWJpbmF0b3JdKGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3Vu
ZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYm
IGxhc3RCaXQpIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsr
KXtcblx0XHRcdFx0dGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3Vu
ZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3Vy
cmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRl
bXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7
XG5cdFx0fVxuXG5cdFx0Y3VycmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNo
b3VsZCBzb3J0IGlmIHRoZXJlIGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11
bHRpcGxlIGV4cHJlc3Npb25zLlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lv
bnMubGVuZ3RoID4gMSkpIHRoaXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAo
Zm91bmRbMF0gfHwgbnVsbCkgOiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHgg
PSAxO1xubG9jYWwudWlkayA9ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9
IGZ1bmN0aW9uKG5vZGUpe1xuXHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRr
KTtcblx0aWYgKCF1aWQpe1xuXHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0
cmlidXRlKHRoaXMudWlkaywgdWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwu
Z2V0VUlESFRNTCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIg
fHwgKG5vZGUudW5pcXVlTnVtYmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNl
ZCBvbiB0aGUgc2V0RG9jdW1lbnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0
ID0gZnVuY3Rpb24ocmVzdWx0cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJu
IHJlc3VsdHM7XG5cdHJlc3VsdHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJu
IHJlc3VsdHM7XG59O1xuXG4vKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxl
Y3RvcnM+Ki9cblxubG9jYWwuY2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihb
Ky1dP1xcZCopPyhbYS16XSspPyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1l
bnQgPSBmdW5jdGlvbihhcmd1bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0
aGlzLm1hdGNoTlRIKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNp
YWwgPSBwYXJzZWRbMl0gfHwgZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlm
IChhID09ICctJykgYSA9IC0xO1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2Vk
ID1cblx0XHQoc3BlY2lhbCA9PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwg
PT0gJ29kZCcpXHQ/IHthOiAyLCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7
YTogMiwgYjogMH0gOiB7YTogMCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2Fy
Z3VtZW50XSA9IHBhcnNlZCk7XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlv
bihjaGlsZCwgc2libGluZywgcG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24o
bm9kZSwgYXJndW1lbnQpe1xuXHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRp
ZiAoIXRoaXNbcG9zaXRpb25zXVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVu
dE5vZGU7XG5cdFx0XHRpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0g
cGFyZW50W2NoaWxkXSwgY291bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZh
ciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAo
ZWwubm9kZU5hbWUgIT0gbm9kZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRp
b25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0g
ZWxbc2libGluZ10pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRp
ZiAoZWwubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNd
W3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtz
aWJsaW5nXSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICdu
Jztcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJz
ZU5USEFyZ3VtZW50KGFyZ3VtZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xu
XHRcdHZhciBhID0gcGFyc2VkLmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNd
W3VpZF07XG5cdFx0aWYgKGEgPT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7
XG5cdFx0XHRpZiAocG9zIDwgYikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRp
ZiAoYiA8IHBvcykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAl
IGEpID09IDA7XG5cdH07XG59O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxl
Y3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5m
b3VuZC5wdXNoKG5vZGUpO1xufTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5n
ZXRVSUQobm9kZSk7XG5cdGlmICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVj
dG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0
aGlzLnVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9
XG59O1xuXG5sb2NhbC5tYXRjaE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlm
ICh0aGlzLmlzSFRNTERvY3VtZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0
XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9k
ZSwgc2VsZWN0b3IucmVwbGFjZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0v
ZywgJ1skMT1cIiQyXCJdJykpO1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5c
dHZhciBwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQp
IHJldHVybiB0cnVlO1xuXG5cdC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4
cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwg
Y3VycmVudEV4cHJlc3Npb247XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4
cHJlc3Npb25zW2ldKTsgaSsrKXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09
IDEpe1xuXHRcdFx0dmFyIGV4cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRo
aXMubWF0Y2hTZWxlY3Rvcihub2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBl
eHAudGFnLnRvVXBwZXJDYXNlKCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVz
LCBleHAucHNldWRvcykpIHJldHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xu
XHRcdH1cblx0fVxuXG5cdGlmIChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJl
dHVybiBmYWxzZTtcblxuXHR2YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBw
YXJzZWQpLCBpdGVtO1xuXHRmb3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlm
IChpdGVtID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xu
XG5sb2NhbC5tYXRjaFBzZXVkbyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0
dmFyIHBzZXVkb05hbWUgPSAncHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1l
XSkgcmV0dXJuIHRoaXNbcHNldWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmli
dXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQp
ID8gYXJndW1lbnQgPT0gYXR0cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRj
aFNlbGVjdG9yID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyl7XG5cdGlmICh0YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9j
dW1lbnQpID8gbm9kZS5ub2RlTmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0
XHRpZiAodGFnID09ICcqJyl7XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxz
ZTsgLy8gRml4IGZvciBjb21tZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Ug
e1xuXHRcdFx0aWYgKG5vZGVOYW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxu
XG5cdGlmIChpZCAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNl
O1xuXG5cdHZhciBpLCBwYXJ0LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2Vz
Lmxlbmd0aDsgaS0tOyl7XG5cdFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNz
Jyk7XG5cdFx0aWYgKCEoY2xzICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVy
biBmYWxzZTtcblx0fVxuXHRpZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5n
dGg7IGktLTspe1xuXHRcdHBhcnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJh
dG9yID8gIXBhcnQudGVzdCh0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRo
aXMuaGFzQXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlm
IChwc2V1ZG9zKSBmb3IgKGkgPSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBz
ZXVkb3NbaV07XG5cdFx0aWYgKCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0
LnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNv
bWJpbmF0b3JzID0ge1xuXG5cdCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkg
bGV2ZWxcblxuXHRcdHZhciBpLCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRN
TERvY3VtZW50KXtcblx0XHRcdGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlz
LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2Rl
LmFsbCkgfHwgKHRoaXMuaWRHZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9k
ZSgnaWQnKS5ub2RlVmFsdWUgIT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMg
YWxsIHRoZSBlbGVtZW50cyB3aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0
XHRcdC8vIGlmIHRoZXJlcyBqdXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxz
ZSBpdCB3aWxsIGJlIGEgY29sbGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxb
aWRdO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNo
aWxkcmVuWzBdKSBjaGlsZHJlbiA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsg
aXRlbSA9IGNoaWxkcmVuW2krK107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdl
dEF0dHJpYnV0ZU5vZGUoJ2lkJyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5u
b2RlVmFsdWUgPT0gaWQpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxs
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5c
dFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxu
XHRcdFx0XHRpZiAoIWl0ZW0pe1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRo
ZSBkb20gd2UgcmV0dXJuLCBlbHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0
QnlJZCBsYWJlbFxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkp
IHJldHVybjtcblx0XHRcdFx0XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBp
ZiAodGhpcy5kb2N1bWVudCAhPT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkg
cmV0dXJuO1xuXHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlD
bGFzczogaWYgKGNsYXNzZXMgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlz
LmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoY2xhc3NMaXN0LmpvaW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNo
aWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0
ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdl
dEJ5VGFnOiB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFn
KTtcblx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5
VGFnO1xuXHRcdFx0aWYgKCF0aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRc
dGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6
IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAv
LyBkaXJlY3QgY2hpbGRyZW5cblx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7
XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2Rl
Lm5leHRTaWJsaW5nKSk7XG5cdH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRc
dFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0
bm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5u
b2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6
IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAv
LyBuZXh0IHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xu
XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0g
dGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFr
O1xuXHRcdFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxc
blxuXHQnKysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1sn
Y29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyk7XG5cdFx0dGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBw
cmV2aW91cyBzaWJsaW5nc1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4n
XShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxu
XHQnISc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpeyAvLyBhbGwgcGFyZW50IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2Rl
ID0gbm9kZS5wYXJlbnROb2RlKSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVz
aChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxu
XHQnIT4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKXsgLy8gZGlyZWN0IHBhcmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVu
dE5vZGU7XG5cdFx0aWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBm
dW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8g
cHJldmlvdXMgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5n
KSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBp
ZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5c
dH0sXG5cblx0JyFeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyl7IC8vIGxhc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5c
dFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0
aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5u
b2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2Rl
KTtcblx0XHRcdGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJp
dFVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFy
IGMgaW4gY29tYmluYXRvcnMpIGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3Jz
W2NdO1xuXG52YXIgcHNldWRvcyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0
J2VtcHR5JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxk
O1xuXHRcdHJldHVybiAhKGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5p
bm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdu
b3QnOiBmdW5jdGlvbihub2RlLCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hO
b2RlKG5vZGUsIGV4cHJlc3Npb24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5v
ZGUsIHRleHQpe1xuXHRcdHJldHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVu
dCB8fCAnJykuaW5kZXhPZih0ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xu
XHR9LFxuXG5cdCdsYXN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2Rl
ID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxz
ZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZp
b3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2
YXIgbmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlm
IChuZXh0Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0
fSxcblxuXHQvKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2Nh
bC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyks
XG5cblx0J250aC1sYXN0LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQn
LCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBs
b2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRI
VHlwZScsIHRydWUpLFxuXG5cdCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNl
dWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1
ZSksXG5cblx0J2luZGV4JzogZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlz
Wydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0
J2V2ZW4nOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGls
ZCddKG5vZGUsICcybicpO1xuXHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRy
ZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0
Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0
b3JzPiovXG5cblx0J2ZpcnN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9k
ZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNT
aWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0
XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBm
YWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rp
b24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7
XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2Rl
TmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0
XHR3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0g
bm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwv
b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQn
ZW5hYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0
fSxcblxuXHQnZGlzYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNh
YmxlZDtcblx0fSxcblxuXHQnY2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBu
b2RlLmNoZWNrZWQgfHwgbm9kZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlv
bihub2RlKXtcblx0XHRyZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50
LmFjdGl2ZUVsZW1lbnQgPT09IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhp
cy5oYXNBdHRyaWJ1dGUobm9kZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVu
Y3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5c
dCdzZWxlY3RlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xu
XHR9XG5cblx0Lyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNl
dWRvcykgbG9jYWxbJ3BzZXVkbzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVz
IG1ldGhvZHNcblxudmFyIGF0dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJz
ID0ge1xuXG5cdCdmb3InOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRo
aXMpID8gdGhpcy5odG1sRm9yIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5c
dCdocmVmJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMu
Z2V0QXR0cmlidXRlKCdocmVmJywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9
LFxuXG5cdCdzdHlsZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRo
aXMuc3R5bGUuY3NzVGV4dCA6IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5c
dCd0YWJpbmRleCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdl
dEF0dHJpYnV0ZU5vZGUoJ3RhYmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYm
IGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVs
bDtcblx0fSxcblxuXHQndHlwZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0
cmlidXRlKCd0eXBlJyk7XG5cdH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xu
XHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBh
dHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0
dGVycy5NQVhMRU5HVEggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdl
dHRlcnMubWF4bGVuZ3RoO1xuXG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9
ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNs
aWNrIGZpbmRlclxuXG5TbGljay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9u
LCBhcHBlbmQpe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFw
cGVuZCk7XG59O1xuXG5TbGljay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7
XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7
XG59O1xuXG4vLyBTbGljayBjb250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0g
ZnVuY3Rpb24oY29udGFpbmVyLCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVy
KTtcblx0cmV0dXJuIGxvY2FsLmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBT
bGljayBhdHRyaWJ1dGUgZ2V0dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5v
ZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdl
dEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0
aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxv
Y2FsLmhhc0F0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxu
U2xpY2subWF0Y2ggPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYg
c2VsZWN0b3IpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09
IG5vZGUpIHJldHVybiB0cnVlO1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJu
IGxvY2FsLm1hdGNoTm9kZShub2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1
dGUgYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFt
ZSwgZm4pe1xuXHRsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0
aGlzO1xufTtcblxuU2xpY2subG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7
XG5cdHJldHVybiBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sg
cHNldWRvIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZu
KXtcblx0bG9jYWxbJ3BzZXVkbzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7
XG5cdFx0cmV0dXJuIGZuLmNhbGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhp
cztcbn07XG5cblNsaWNrLmxvb2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNl
dWRvID0gbG9jYWxbJ3BzZXVkbzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5j
dGlvbihhcmd1bWVudCl7XG5cdFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtc
blx0fTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3Jc
blxuU2xpY2sub3ZlcnJpZGUgPSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJp
ZGUocmVnZXhwLCBmbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2Nh
bC5pc1hNTDtcblxuU2xpY2sudWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2Fs
LmdldFVJREhUTUwobm9kZSk7XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBT
bGljaztcblxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVm
aW5lZCcpID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IEVsZW1lbnRcblxuZGVzY3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRl
bXMgaW4gTW9vVG9vbHMuIENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJz
IGZ1bmN0aW9uLCBhbmQgYW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1l
dGhvZHMgdG8gbGV0IHlvdSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFy
cmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGlj
ay5GaW5kZXJdXG5cbnByb3ZpZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUs
IFNlbGVjdG9yc11cblxuLi4uXG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1
bmN0aW9uKHRhZywgcHJvcHMpe1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVj
dG9yc1t0YWddO1xuXHRpZiAoa29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7
XG5cdGlmICh0eXBlb2YgdGFnICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5z
ZXQocHJvcHMpO1xuXG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3
LV0rJC8pLnRlc3QodGFnKSl7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhw
cmVzc2lvbnNbMF1bMF07XG5cdFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDog
cGFyc2VkLnRhZztcblx0XHRpZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3Bz
LmlkID0gcGFyc2VkLmlkO1xuXG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRl
cztcblx0XHRpZiAoYXR0cmlidXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1
dGVzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0
XHRcdGlmIChwcm9wc1thdHRyLmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChh
dHRyLnZhbHVlICE9IG51bGwgJiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5
XSA9IGF0dHIudmFsdWU7XG5cdFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVy
YXRvcikgcHJvcHNbYXR0ci5rZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNs
YXNzTGlzdCAmJiBwcm9wc1snY2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNl
ZC5jbGFzc0xpc3Quam9pbignICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1l
bnQodGFnLCBwcm9wcyk7XG59O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50
LnByb3RvdHlwZSA9IEJyb3dzZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5
IHJlcXVpcmUgdGhlIHdyYXBwaW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0g
KGZ1bmN0aW9uKGZpcmVFdmVudCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtc
blx0XHRcdHJldHVybiBmaXJlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtc
blx0fSkoRWxlbWVudC5wcm90b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1l
bnQnLCBFbGVtZW50KS5taXJyb3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5
cGVbbmFtZV0pIHJldHVybjtcblxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHJlc3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMg
PSB0cnVlO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysp
e1xuXHRcdFx0dmFyIGVsZW1lbnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxl
bWVudFtuYW1lXS5hcHBseShlbGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1l
bnRzICYmIHR5cGVPZihyZXN1bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAo
ZWxlbWVudHMpID8gbmV3IEVsZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRF
bGVtZW50cy5pbXBsZW1lbnQob2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5c
dEVsZW1lbnQucGFyZW50ID0gT2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRc
dCckY29uc3RydWN0b3InOiBFbGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVy
dCgnZWxlbWVudCcpLmhpZGUoKVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5h
bWUsIG1ldGhvZCl7XG5cdFx0RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0p
O1xufVxuXG5FbGVtZW50LkNvbnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5l
dyBUeXBlKCdJRnJhbWUnLCBmdW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhh
cmd1bWVudHMsIHtcblx0XHRwcm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTog
ZnVuY3Rpb24ob2JqKXtcblx0XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7
XG5cblx0dmFyIHByb3BzID0gcGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYg
KHBhcmFtcy5pZnJhbWUpIGlmcmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2
YXIgb25sb2FkID0gcHJvcHMub25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3Bz
Lm9ubG9hZDtcblx0cHJvcHMuaWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1l
LCBpZnJhbWUgPyAoaWZyYW1lLmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmlu
Zy51bmlxdWVJRCgpXS5waWNrKCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAn
aWZyYW1lJywgcHJvcHMpO1xuXG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9h
ZC5jYWxsKGlmcmFtZS5jb250ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1l
c1twcm9wcy5pZF0pIG9uTG9hZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcs
IG9uTG9hZCk7XG5cdHJldHVybiBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5F
bGVtZW50cyA9IGZ1bmN0aW9uKG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7
XG5cdFx0dmFyIHVuaXF1ZXMgPSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9
IG5vZGVzW2krK107KXtcblx0XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRc
dGlmICghdW5pcXVlc1t1aWRdKXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRc
dFx0dGhpcy5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMu
cHJvdG90eXBlID0ge2xlbmd0aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3
IFR5cGUoJ0VsZW1lbnRzJywgRWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5j
dGlvbihmaWx0ZXIsIGJpbmQpe1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRy
ZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0g
J3N0cmluZycpID8gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0
ZXIpO1xuXHRcdH0gOiBmaWx0ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIg
aSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVt
ID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0
aCsrXSA9IGl0ZW07XG5cdFx0fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xu
XHR9LnByb3RlY3QoKSxcblxuXHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9
IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkr
Kyl7XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRp
ZiAoaXRlbSkgaXRlbXMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3Rv
dHlwZS51bnNoaWZ0LmFwcGx5KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29u
Y2F0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlz
KTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysp
e1xuXHRcdFx0dmFyIGl0ZW0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1l
cmFibGUoaXRlbSkpIG5ld0VsZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxl
bWVudHMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xs
ZWN0aW9uW2ldKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6
IGZ1bmN0aW9uKCl7XG5cdFx0d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMu
bGVuZ3RoXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4o
ZnVuY3Rpb24oKXtcblxuLy8gRkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNw
bGljZSwgb2JqZWN0ID0geycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2Fs
bChvYmplY3QsIDEsIDEpO1xuaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQo
J3NwbGljZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFy
IHJlc3VsdCA9IHNwbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3Ro
ID49IHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7
XG59LnByb3RlY3QoKSk7XG5cbkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBu
YW1lKXtcblx0RWxlbWVudHMuaW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXku
bWlycm9yKEVsZW1lbnRzKTtcblxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0
c0hUTUw7XG50cnkge1xuXHRjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnPGlucHV0IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9
XG5cbnZhciBlc2NhcGVRdW90ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0
bWwpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtc
bi8qPC9sdElFOD4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBI
VE1MIG9mIHN0eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24o
KXtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0Zmxh
ZyA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFy
Z2luOiAwcHg7fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7
fVxuXHRyZXR1cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRuZXdFbGVtZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJv
cHMpe1xuXHRcdFx0aWYgKHByb3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNr
ZWQgPSBwcm9wcy5jaGVja2VkO1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcg
fHwgcHJvcHMudHlwZSA9PSAncmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52
YWx1ZSA9ICdvbic7XG5cdFx0XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBi
ZSBzZXQgYmVmb3JlIGNoYW5naW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYg
KCFjYW5DaGFuZ2VTdHlsZUhUTUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5
bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5
bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAo
cHJvcHMudHlwZSkgZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0
eWxlRWxlbWVudCkuc2V0KHByb3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRc
dFx0Lyo8bHRJRTg+Ki8vLyBGaXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGll
cyBpbiBJRSA8IDhcblx0XHRcdGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0
XHR0YWcgPSAnPCcgKyB0YWc7XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1l
PVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9w
cy50eXBlKSB0YWcgKz0gJyB0eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdc
Iic7XG5cdFx0XHRcdHRhZyArPSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRc
dFx0XHRkZWxldGUgcHJvcHMudHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3Bz
KTtcblx0fVxuXG59KTtcblxufSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdp
bmRvdyk7XG5TbGljay51aWRPZihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5c
blx0bmV3VGV4dE5vZGU6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRl
eHROb2RlKHRleHQpO1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy53aW5kb3c7XG5cdH0sXG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVz
ID0ge1xuXG5cdFx0XHRzdHJpbmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRc
dGlkID0gU2xpY2suZmluZChkb2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEn
KSk7XG5cdFx0XHRcdHJldHVybiAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51
bGw7XG5cdFx0XHR9LFxuXG5cdFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0
XHRcdFx0U2xpY2sudWlkT2YoZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWls
eSAmJiAhKC9eKD86b2JqZWN0fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRc
dFx0dmFyIGZpcmVFdmVudCA9IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBu
ZWVkZWQgaW4gSUU3LCBvciBlbHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1
bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwg
ZXZlbnQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVu
dC5Qcm90b3R5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5c
blx0XHRcdG9iamVjdDogZnVuY3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChv
YmoudG9FbGVtZW50KSByZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5v
Y2FzaCk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5
cGVzLnRleHRub2RlID0gdHlwZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRv
Y3VtZW50ID0gZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5c
dFx0cmV0dXJuIGZ1bmN0aW9uKGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwu
JGZhbWlseSAmJiBlbC51bmlxdWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0g
dHlwZU9mKGVsKTtcblx0XHRcdHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWws
IG5vY2FzaCwgZG9jIHx8IGRvY3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0p
O1xuXG5pZiAod2luZG93LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9u
KGVsLCBuYyl7XG5cdHJldHVybiBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xu
fSk7XG5cbldpbmRvdy5pbXBsZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB0aGlzLmRvY3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5p
bnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lv
bil7XG5cdFx0cmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVu
dHMpO1xuXHR9LFxuXG5cdGdldEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJl
dHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59
KTtcblxudmFyIGNvbnRhaW5zID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0
dXJuIFNsaWNrLmNvbnRhaW5zKHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQu
Y29udGFpbnMpIERvY3VtZW50LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7
XG5cblxuXG4vLyB0cmVlIHdhbGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlv
bihleHByZXNzaW9uLCBjb21iaW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29t
YmluYXRvcjtcblxuXHRleHByZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJl
c3Npb24pKTtcblxuXHR2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xu
XHRmb3IgKHZhciBpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25z
W2ldWzBdLmNvbWJpbmF0b3IgPSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xu
fTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAn
IX4nLFxuXHRnZXRQYXJlbnQ6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtc
blx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRy
ZXR1cm4gdGhpcy5nZXRFbGVtZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmlu
YXRvcikpO1xuXHR9KTtcbn0pO1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+
Jyxcblx0Z2V0QWxsUHJldmlvdXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRD
aGlsZHJlbjogJz4nLFxuXHRnZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3Is
IG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lv
bil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNz
aW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxu
XHRnZXRGaXJzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50Lmlk
KFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBd
KTtcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4g
ZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lv
biwgJz4nKSkuZ2V0TGFzdCgpKTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1l
bnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxu
XHRnZXRFbGVtZW50QnlJZDogZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChT
bGljay5maW5kKHRoaXMsICcjJyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQx
JykpKTtcblx0fSxcblxuXHRtYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJu
ICFleHByZXNzaW9uIHx8IFNsaWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0p
O1xuXG5cblxuaWYgKHdpbmRvdy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1
bmN0aW9uKHNlbGVjdG9yKXtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYg
KHR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRv
Y3VtZW50LCBzZWxlY3RvciwgbmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51
bWVyYWJsZShzZWxlY3RvcikpIHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5c
dHJldHVybiBuZXcgRWxlbWVudHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxu
dmFyIGluc2VydGVycyA9IHtcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQp
e1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkg
cGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjog
ZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVs
ZW1lbnQubmV4dFNpYmxpbmcpO1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwg
ZWxlbWVudCl7XG5cdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0
b3A6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KGNvbnRleHQsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmlu
c2lkZSA9IGluc2VydGVycy5ib3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3Bl
cnR5XG5cbnZhciBwcm9wZXJ0eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5c
bi8vIHByb3BlcnRpZXNcblxudmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xu
XHQndHlwZScsICd2YWx1ZScsICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRk
aW5nJywgJ2NlbGxTcGFjaW5nJywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3Bh
bicsICd0YWJJbmRleCcsICd1c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3Bl
cnRpZXNbcHJvcGVydHkudG9Mb3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0
aWVzLmh0bWwgPSAnaW5uZXJIVE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKS50ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4
dENvbnRlbnQnO1xuXG5PYmplY3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBr
ZXkpe1xuXHRwcm9wZXJ0eVNldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0
XHRub2RlW3JlYWxdID0gdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVu
Y3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJ
RTk+Ki9cbnByb3BlcnR5U2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5j
dGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBu
b2RlLnNldCgnaHRtbCcsIHZhbHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9
IHZhbHVlO1xuXHR9O1xufSkocHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRl
cnMudGV4dCA9IChmdW5jdGlvbihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5c
dFx0cmV0dXJuIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6
IGdldHRlcihub2RlKTtcblx0fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElF
OT4qL1xuXG4vLyBCb29sZWFuc1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3Jh
cCcsICdpc21hcCcsICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxl
ZCcsICdyZWFkT25seScsICdtdWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdk
ZWZlcicsICdkZWZhdWx0Q2hlY2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3Bs
YXknLFxuXHQnbG9vcCdcbl07XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChi
b29scywgZnVuY3Rpb24oYm9vbCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtc
blx0Ym9vbGVhbnNbbG93ZXJdID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1
bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0
cHJvcGVydHlHZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5v
ZGVbYm9vbF07XG5cdH07XG59KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5k
KHByb3BlcnR5U2V0dGVycywge1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtc
blx0XHQoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAn
JykgOiBub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6
IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5o
dG1sRm9yID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxu
XG5cdCdzdHlsZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBu
b2RlLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZh
bHVlKTtcblx0fSxcblxuXHQndmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9k
ZS52YWx1ZSA9ICh2YWx1ZSAhPSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnBy
b3BlcnR5R2V0dGVyc1snY2xhc3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFz
c05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmli
dXRlKCdjbGFzcycpO1xufTtcblxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0
aHJvd3NcbnRyeSB7IGVsLnR5cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5
cGUgIT0gJ2J1dHRvbicpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFs
dWUpe1xuXHRub2RlLnNldEF0dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7
XG4vKiA8L3dlYmtpdD4gKi9cblxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0g
SUU4IENhbm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVI
VE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
dHlsZScpLFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0g
JyNqdXN0VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7
XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5c
bnZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5w
dXRWYWx1ZSwgaHRtbDVJbnB1dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0
JztcbmlucHV0LnR5cGUgPSAnc3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZh
bHVlICE9ICd0JztcblxuLy8gIzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIg
d2hlbiB0cnlpbmcgdG8gdXNlIGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1
ZSA9ICcnO1xuXHRpbnB1dC50eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBp
bnB1dC50eXBlID09ICdlbWFpbCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxu
aWYgKHZvbGF0aWxlSW5wdXRWYWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0
dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVl
ID0gbm9kZS52YWx1ZTtcblx0XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2
YWx1ZTtcblx0fSBjYXRjaCAoZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwg
c2V0UHJvcGVydHkgKi9cblxuLyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRl
ID0gKGZ1bmN0aW9uKGRpdil7XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJu
IChkaXYuZ2V0QXR0cmlidXRlKCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0
ZXN0KXtcblx0dGVzdC5pbm5lckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9m
aXhcIiB2YWx1ZT1cInRoZSB1bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5j
bG9uZU5vZGUodHJ1ZSkuZmlyc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0Ns
YXNzTGlzdCA9ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52
YXIgY2xhc3NlcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNs
YXNzTmFtZSB8fCAnJykuY2xlYW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVy
biBjbGFzc05hbWVzLmZpbHRlcihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05h
bWUgIT09ICcnICYmICF1bmlxdWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFt
ZV0gPSBjbGFzc05hbWU7XG5cdH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rp
b24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVG
cm9tQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShu
YW1lKTtcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rp
b24obmFtZSwgdmFsdWUpe1xuXHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50
b0xvd2VyQ2FzZSgpXTtcblx0XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1
ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1
dGVXaGl0ZUxpc3Q7XG5cdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdo
aXRlTGlzdCA9IHRoaXMucmV0cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0
XHQvKiA8L2x0SUU5PiAqL1xuXG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRo
aXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRc
dGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1l
XTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMu
c2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5c
dFx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVd
ID0gdHJ1ZTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7
XG5cdFx0Zm9yICh2YXIgYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHko
YXR0cmlidXRlLCBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJv
cGVydHlHZXR0ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJu
IGdldHRlcih0aGlzKTtcblx0XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0
cmlidXRlKXtcblx0XHRcdHZhciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBh
dHRyaWJ1dGVXaGl0ZUxpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywg
e30pO1xuXHRcdFx0aWYgKCFhdHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFu
ZG8gJiYgIWF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRo
aXMub3V0ZXJIVE1MO1xuXHRcdFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQg
ZmluZCBtZW50aW9uIG9mIGF0dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIo
MCwgb3V0ZXIuc2VhcmNoKC9cXC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5h
bWUpIDwgMCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSA9
IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3Vs
dCA9IFNsaWNrLmdldEF0dHJpYnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQg
JiYgIVNsaWNrLmhhc0F0dHJpYnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9
LFxuXG5cdGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5j
b252ZXJ0KGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHks
IHRoaXMpLmFzc29jaWF0ZShhcmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rp
b24obmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0s
XG5cblx0cmVtb3ZlUHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3Vt
ZW50cywgdGhpcy5yZW1vdmVQcm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0c2V0OiBmdW5jdGlvbihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxl
bWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8g
cHJvcGVydHkuc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2
YWx1ZSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xu
XHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4g
KHByb3BlcnR5ICYmIHByb3BlcnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0
aGlzLmdldFByb3BlcnR5KHByb3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6
IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1tw
cm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2Uu
YXBwbHkodGhpcykgOiB0aGlzLnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUp
e1xuXHRcdHJldHVybiB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDog
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSku
Y29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8g
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRU
b0NsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFz
c05hbWUpe1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0
aGlzLmNsYXNzTmFtZSkuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJl
bW92ZUNsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNz
ZXMoY2xhc3NOYW1lKS5mb3JFYWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1l
cyA9IGNsYXNzZXModGhpcy5jbGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JF
YWNoKGNsYXNzTmFtZXMuZXJhc2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0g
Y2xhc3NOYW1lcy5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xl
Q2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxs
KSBmb3JjZSA9ICF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkg
PyB0aGlzLmFkZENsYXNzKGNsYXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7
XG5cdH0sXG5cblx0YWRvcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZy
YWdtZW50LCBlbGVtZW50cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxl
bWVudHMubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50
c1tpXSwgdHJ1ZSk7XG5cdFx0XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1l
bnQpO1xuXHRcdH1cblxuXHRcdGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVu
dCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0
ZXh0LCB3aGVyZSl7XG5cdFx0cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3
VGV4dE5vZGUodGV4dCksIHdoZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hl
cmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRy
dWUpLCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9u
KGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1
bWVudC5pZChlbCwgdHJ1ZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2Vz
OiBmdW5jdGlvbihlbCl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwu
cGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdHdyYXBzOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQo
ZWwsIHRydWUpO1xuXHRcdHJldHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7
XG5cdH0sXG5cblx0Z2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZElu
ZGV4OyAvLyBTYWZhcmkgMy4yLjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZl
cnQodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBv
cHRpb24uc2VsZWN0ZWQ7XG5cdFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygn
aW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0
eXBlID0gZWwudHlwZTtcblx0XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBl
ID09ICdzdWJtaXQnIHx8IHR5cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBl
ID09ICdpbWFnZScpIHJldHVybjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykg
PT0gJ3NlbGVjdCcpID8gZWwuZ2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRc
dFx0Ly8gSUVcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xu
XHRcdFx0fSkgOiAoKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFl
bC5jaGVja2VkKSA/IG51bGwgOiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZl
cnQodmFsdWUpLmVhY2goZnVuY3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0g
J3VuZGVmaW5lZCcpIHF1ZXJ5U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUp
ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5c
dFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBl
bmRIVE1MXG5cbnZhciBhcHBlbmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2lu
Jyxcblx0YWZ0ZXI6ICdhZnRlckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDog
J2FmdGVyQmVnaW4nLFxuXHRpbnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxl
bWVudCgnYXBwZW5kSFRNTCcsICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSkgPyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0
QWRqYWNlbnRIVE1MKGFwcGVuZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xu
XHRyZXR1cm4gdGhpcztcbn0gOiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0g
bmV3IEVsZW1lbnQoJ2RpdicsIHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNo
aWxkTm9kZXMsXG5cdFx0ZnJhZ21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFn
bWVudCkgcmV0dXJuIHRoaXM7XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFn
bWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5h
cHBlbmRDaGlsZChjaGlsZHJlbltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJl
IHx8ICdib3R0b20nXShmcmFnbWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZh
ciBjb2xsZWN0ZWQgPSB7fSwgc3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlk
KXtcblx0cmV0dXJuIChzdG9yYWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xu
XG52YXIgY2xlYW4gPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVt
YmVyO1xuXHRpZiAoaXRlbS5yZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlm
IChpdGVtLmNsZWFyQXR0cmlidXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVp
ZCAhPSBudWxsKXtcblx0XHRkZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3Jh
Z2VbdWlkXTtcblx0fVxuXHRyZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5w
dXQ6ICdjaGVja2VkJywgb3B0aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5c
bkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBj
aGlsZHJlbiA9IGNsZWFuKHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJy
YXkuZWFjaChjaGlsZHJlbiwgY2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0
XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5j
b252ZXJ0KHRoaXMuY2hpbGROb2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlz
LnBhcmVudE5vZGUpID8gdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztc
blx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVu
dHMgPSBjb250ZW50cyAhPT0gZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUo
Y29udGVudHMpLCBjZSA9IFtjbG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRl
bnRzKXtcblx0XHRcdGNlLmFwcGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykpKTtcblx0XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsg
aS0tOyl7XG5cdFx0XHR2YXIgbm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRp
ZiAoIWtlZXBpZCkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4q
L1xuXHRcdFx0aWYgKG5vZGUuY2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0
dHJpYnV0ZXMoKTtcblx0XHRcdFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0
XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5v
ZGUub3B0aW9ucyl7XG5cdFx0XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1l
bnQub3B0aW9ucztcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tq
XS5zZWxlY3RlZCA9IGVvW2pdLnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQv
KjwvbHRJRTk+Ki9cblx0XHRcdHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50
b0xvd2VyQ2FzZSgpXTtcblx0XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJv
cF0gPSBlbGVtZW50W3Byb3BdO1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhh
c0Nsb25lQnVnKXtcblx0XHRcdHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdv
YmplY3QnKSwgdG8gPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRc
dGZvciAoaSA9IGNvLmxlbmd0aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJI
VE1MO1xuXHRcdH1cblx0XHQvKjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xv
bmUpO1xuXHR9XG5cbn0pO1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdp
bXBsZW1lbnQnLCB7XG5cblx0YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRp
ZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0
XHRjb2xsZWN0ZWRbU2xpY2sudWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRo
aXMuYWRkRXZlbnRMaXN0ZW5lcikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFy
Z3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5
cGUsIGZuKXtcblx0XHRpZiAodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2
ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0
YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRy
ZXRyaWV2ZTogZnVuY3Rpb24ocHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0
KFNsaWNrLnVpZE9mKHRoaXMpKSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChk
Zmx0ICE9IG51bGwgJiYgcHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBk
Zmx0O1xuXHRcdHJldHVybiBwcm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRz
dG9yZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChT
bGljay51aWRPZih0aGlzKSk7XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0
XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3Jh
Z2VbcHJvcGVydHldO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4q
L1xuaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xu
XHR2YXIgZ2MgPSBmdW5jdGlvbigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4p
O1xuXHRcdGlmICh3aW5kb3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0
d2luZG93LnJlbW92ZUxpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRM
aXN0ZW5lcigndW5sb2FkJywgZ2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVy
dGllcyA9IHt9O1xuXG5cblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDog
ZnVuY3Rpb24oc3R5bGUpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxu
XG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9
LFxuXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xu
XHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xu
XG5FbGVtZW50LlByb3BlcnRpZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xu
XHRcdGlmIChodG1sID09IG51bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRt
bCkgPT0gJ2FycmF5JykgaHRtbCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xu
XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHls
ZVNoZWV0LmNzc1RleHQgPSBodG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhU
TUwgPSBodG1sO1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRt
bCcsICcnKTtcblx0fVxuXG59O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwg
c3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVl
O1xuXG4vKjxsdElFOT4qL1xuLy8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJh
cnRsZXR0LmNvbS9pbm5lcnNoaXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7XG52YXIgZnJhZ21lbnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1
cHBvcnRzSFRNTDVFbGVtZW50cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAo
IXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lk
ZSBhdWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIg
aGVhZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1t
YXJ5IHRpbWUgdmlkZW8nLnNwbGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpLCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdt
ZW50LmNyZWF0ZUVsZW1lbnQodGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5Piov
XG5cbi8qPElFPiovXG5zdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChm
dW5jdGlvbigpe1xuXHR2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScp
O1xuXHR0YWJsZS5pbm5lckhUTUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRy
dWU7XG59KTtcblxuLyo8bHRGRjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3RyJyksIGh0bWwgPSAnPHRkPjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0
c1RSSW5uZXJIVE1MID0gKHRyLmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9s
dEZGND4qL1xuXG5pZiAoIXN1cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5l
ckhUTUwgfHwgIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVz
Lmh0bWwuc2V0ID0gKGZ1bmN0aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xu
XHRcdFx0dGFibGU6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBb
MSwgJzxzZWxlY3Q+JywgJzwvc2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0
Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9k
eT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0
aW9ucy50aGVhZCA9IHRyYW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxu
XHRcdHJldHVybiBmdW5jdGlvbihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlm
ICh0aGlzLnN0eWxlU2hlZXQpIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8q
PC9sdElFOT4qL1xuXHRcdFx0dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycp
XTtcblx0XHRcdGlmICghd3JhcCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAs
ICcnLCAnJ107XG5cdFx0XHRpZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtc
blxuXHRcdFx0dmFyIGxldmVsID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpLCB0YXJnZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1
RWxlbWVudHMpIGZyYWdtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5p
bm5lckhUTUwgPSBbd3JhcFsxXSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xu
XHRcdFx0d2hpbGUgKGxldmVsLS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0
dGhpcy5lbXB0eSgpLmFkb3B0KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9y
dHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdy
YXBwZXIgPSBudWxsO1xuXHRcdH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0
KTtcbn1cbi8qPC9JRT4qL1xuXG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZm9ybScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9w
dGlvbj5zPC9vcHRpb24+PC9zZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFs
dWUgIT0gJ3MnKSBFbGVtZW50LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0dmFyIHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9
ICdzZWxlY3QnKSByZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0
dmFyIG9wdGlvbnMgPSB0aGlzLmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0
cmluZyh2YWx1ZSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsr
KXtcblx0XHRcdHZhciBvcHRpb24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9u
LmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIg
JiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xu
XHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9
IHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9u
ID0gdGhpcywgdGFnID0gb3B0aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxl
Y3QnICYmIHRhZyAhPSAnb3B0aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7
XG5cblx0XHRpZiAodGFnID09ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVj
dGVkKClbMF0pKSByZXR1cm4gJyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1
dGVOb2RlKCd2YWx1ZScpO1xuXHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBv
cHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0g
bnVsbDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9
IHtcblx0c2V0OiBmdW5jdGlvbihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRl
Tm9kZSgnaWQnKS52YWx1ZSA9IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIHRoaXMuaWQgfHwgbnVsbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhp
cy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xu
Lyo8L0lFPiovXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIHRoZSBFdmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jv
c3MtYnJvd3Nlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
V2luZG93LCBEb2N1bWVudCwgQXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJv
dmlkZXM6IEV2ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9
O1xudmFyIG5vcm1hbGl6ZVdoZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3Jt
YWxpemVkO1xuXHRpZiAoZXZlbnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50
LndoZWVsRGVsdGEgJSAxMjAgPT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53
aGVlbERlbHRhIC8gMTI7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRl
bHRhWSB8fCBldmVudC5kZXRhaWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQg
JSAzID09IDAgPyByYXdBbW91bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVy
biBub3JtYWxpemVkO1xufTtcblxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBU
eXBlKCdET01FdmVudCcsIGZ1bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0g
d2luZG93O1xuXHRldmVudCA9IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRl
bmRlZCkgcmV0dXJuIGV2ZW50O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVu
ZGVkID0gdHJ1ZTtcblx0dGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRy
b2wgPSBldmVudC5jdHJsS2V5O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5t
ZXRhID0gZXZlbnQubWV0YUtleTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBl
O1xuXHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdo
aWxlICh0YXJnZXQgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJl
bnROb2RlO1xuXHR0aGlzLnRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5
cGUuaW5kZXhPZigna2V5JykgPT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZl
bnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUg
IT0gJ2tleXByZXNzJykgdGhpcy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAn
a2V5ZG93bicgfHwgdHlwZSA9PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNv
ZGUgPCAxMjQpIHRoaXMua2V5ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAo
Y29kZSA+IDk1ICYmIGNvZGUgPCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0
XHRpZiAodGhpcy5rZXkgPT0gbnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNv
ZGUpLnRvTG93ZXJDYXNlKCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUg
PT0gJ2RibGNsaWNrJyB8fCB0eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwn
IHx8IHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0g
MCl7XG5cdFx0dmFyIGRvYyA9IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRN
b2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5i
b2R5O1xuXHRcdHRoaXMucGFnZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/
IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTog
KGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9j
LnNjcm9sbFRvcFxuXHRcdH07XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQu
cGFnZVggIT0gbnVsbCkgPyBldmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNs
aWVudFgsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdp
bi5wYWdlWU9mZnNldCA6IGV2ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdE
T01Nb3VzZVNjcm9sbCcgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwn
KSB0aGlzLndoZWVsID0gbm9ybWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdo
dENsaWNrID0gKGV2ZW50LndoaWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlm
ICh0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdt
b3VzZWVudGVyJyB8fCB0eXBlID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdl
dCA9IHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2
YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAn
ZnJvbScgOiAndG8nKSArICdFbGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxh
dGVkLm5vZGVUeXBlID09IDMpIHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0
aGlzLnJlbGF0ZWRUYXJnZXQgPSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxz
ZSBpZiAodHlwZS5pbmRleE9mKCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJl
JykgPT0gMCl7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMu
c2NhbGUgPSBldmVudC5zY2FsZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJn
ZXRUb3VjaGVzO1xuXHRcdHRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hl
cztcblx0XHR2YXIgdG91Y2hlcyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0
aWYgKHRvdWNoZXMgJiYgdG91Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBd
O1xuXHRcdFx0dGhpcy5wYWdlID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5c
dFx0XHR0aGlzLmNsaWVudCA9IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtc
blx0XHR9XG5cdH1cblxuXHRpZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRp
ZiAoIXRoaXMucGFnZSkgdGhpcy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50
KHtcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0
KCkuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlv
bigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9w
UHJvcGFnYXRpb24oKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtc
blx0XHRpZiAodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVm
YXVsdCgpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihj
b2RlLCBrZXkpe1xuXHRfa2V5c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5E
T01FdmVudC5kZWZpbmVLZXlzID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRy
dWUpO1xuXG5ET01FdmVudC5kZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24n
LCAnMzcnOiAnbGVmdCcsICczOSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3Bh
Y2UnLCAnOCc6ICdiYWNrc3BhY2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEz
JzogJ2VudGVyJ1xufSk7XG5cbn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVt
ZW50LkV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRl
YWxpbmcgd2l0aCBldmVudHMuIFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5k
IG1vdXNlbGVhdmUgY3VzdG9tIEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5w
cm92aWRlczogRWxlbWVudC5FdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMuZXZlbnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5h
ZGRFdmVudHMoZXZlbnRzKTtcbn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52
b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0
XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZl
bnRzW3R5cGVdKSBldmVudHNbdHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlm
IChldmVudHNbdHlwZV0ua2V5cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50
c1t0eXBlXS5rZXlzLnB1c2goZm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRj
dXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRc
dFx0c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRk
KSBjdXN0b20ub25BZGQuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNv
bmRpdGlvbil7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0
XHRpZiAoY3VzdG9tLmNvbmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZu
LmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xu
XHRcdFx0fVxuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZl
cnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0g
ZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFy
IG5hdGl2ZUV2ZW50ID0gRWxlbWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChu
YXRpdmVFdmVudCl7XG5cdFx0XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4g
PSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQs
IHNlbGYuZ2V0V2luZG93KCkpO1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBl
dmVudCkgPT09IGZhbHNlKSBldmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0
XHR0aGlzLmFkZExpc3RlbmVyKHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1c
blx0XHRldmVudHNbdHlwZV0udmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRz
ID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0
eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFy
IGluZGV4ID0gbGlzdC5rZXlzLmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0
dXJuIHRoaXM7XG5cdFx0dmFyIHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0
ZSBsaXN0LmtleXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0
dmFyIGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRc
dFx0aWYgKGN1c3RvbS5vblJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5
cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0
b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5h
dGl2ZUV2ZW50c1t0eXBlXSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1
bWVudHNbMl0pIDogdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdFx0Zm9yICh2YXIgZXZlbnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVu
dHNbZXZlbnRdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1
bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09
ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQo
dHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIg
YXR0YWNoZWQgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSBy
ZXR1cm4gdGhpcztcblx0XHRpZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNo
ZWQpIHRoaXMucmVtb3ZlRXZlbnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50
cycpO1xuXHRcdH0gZWxzZSBpZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtl
dmVudHNdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQo
ZXZlbnRzLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVu
dHNdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0
aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgn
ZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7
XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5
cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRo
aXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJv
bSwgdHlwZSl7XG5cdFx0ZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMg
PSBmcm9tLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7
XG5cdFx0aWYgKCF0eXBlKXtcblx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRo
aXMuY2xvbmVFdmVudHMoZnJvbSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0
eXBlXSl7XG5cdFx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRc
dFx0dGhpcy5hZGRFdmVudCh0eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRj
bGljazogMiwgZGJsY2xpY2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1l
bnU6IDIsIC8vbW91c2UgYnV0dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91
c2VTY3JvbGw6IDIsIC8vbW91c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwg
bW91c2Vtb3ZlOiAyLCBzZWxlY3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVt
ZW50XG5cdGtleWRvd246IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRv
cmllbnRhdGlvbmNoYW5nZTogMiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92
ZTogMiwgdG91Y2hlbmQ6IDIsIHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3Rh
cnQ6IDIsIGdlc3R1cmVjaGFuZ2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9j
dXM6IDIsIGJsdXI6IDIsIGNoYW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAy
LCBwYXN0ZTogMiwgaW5wdXQ6IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6
IDEsIGJlZm9yZXVubG9hZDogMiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVk
OiAxLCByZWFkeXN0YXRlY2hhbmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3Bz
dGF0ZTogMiwgcGFnZXNob3c6IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAx
LCBhYm9ydDogMSwgc2Nyb2xsOiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5F
dmVudHMgPSB7XG5cdG1vdXNld2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1l
bnQgPyAnd2hlZWwnIDogJ29ubW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcg
OiAnRE9NTW91c2VTY3JvbGwnXG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50
KXtcblx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9
PSBudWxsKSByZXR1cm4gdHJ1ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJl
dHVybiAocmVsYXRlZCAhPSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVP
Zih0aGlzKSAhPSAnZG9jdW1lbnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5c
bmlmICgnb25tb3VzZWVudGVyJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVt
ZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2Vs
ZWF2ZSA9IDI7XG5cdEVsZW1lbnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xu
XHRFbGVtZW50LkV2ZW50cy5tb3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxu
XHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZl
ID0ge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xu
fVxuXG4vKjxsdElFOT4qL1xuaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1l
bnQuTmF0aXZlRXZlbnRzLnByb3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hh
bmdlID0ge1xuXHRcdGJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlw
ZTtcblx0XHRcdHJldHVybiAodGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0g
J3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hh
bmdlJztcblx0XHR9LFxuXHRcdGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0
dXJuIGV2ZW50LnR5cGUgIT0gJ3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0
eU5hbWUgPT0gJ2NoZWNrZWQnO1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxu
fSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRp
b246IEV4dGVuZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxl
Z2F0ZSBtZXRob2QgZm9yIG1vcmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnBy
b3ZpZGVzOiBbRWxlbWVudC5EZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgZXZlbnRMaXN0ZW5lclN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xu
XG5FbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9j
dXNvdXQgPSAyO1xuXG52YXIgYnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2
ZW50LCB0YXJnZXQpe1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRp
ZiAobWF0Y2godGFyZ2V0LCBldmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRh
cmdldCk7XG5cdFx0dGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9
XG59O1xuXG52YXIgbWFwID0ge1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3Zl
cicsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3Vz
ZWxlYXZlOiB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQu
TW91c2VlbnRlckNoZWNrXG5cdH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChl
dmVudExpc3RlbmVyU3VwcG9ydCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9
LFxuXHRibHVyOiB7XG5cdFx0YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAn
Zm9jdXNvdXQnLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZh
ciBfa2V5ID0gJyRkZWxlZ2F0aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlw
ZSl7XG5cblx0cmV0dXJuIHtcblxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTog
ZnVuY3Rpb24oc2VsZiwgdWlkKXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5
ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3Qu
Zm9ybXMpIGZvciAodmFyIGkgPSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8v
IHRoZSBmb3JtIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxu
XHRcdFx0XHQvLyByZW1vdmVFdmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBl
dmVudCB3YXNcblx0XHRcdFx0Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5m
b3Jtc1tpXS5yZW1vdmVFdmVudCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0
LmZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwg
bWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0
LmdldCgndGFnJykgPT0gJ2Zvcm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQo
J2Zvcm0nKTtcblx0XHRcdGlmICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJz
ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRc
dGxpc3RlbmVyID0gbGlzdGVuZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0
XHRcdGZvcm1zID0gbGlzdGVuZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0
aWYgKGZvcm1zLmluZGV4T2YoZm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2go
Zm9ybSk7XG5cblx0XHRcdHZhciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJs
ZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9y
bS5hZGRFdmVudCh0eXBlLCBfZm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlz
dGVuZXJzW3VpZF0gPSBsaXN0ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAn
bGlzdGVuZXJzJywgbGlzdGVuZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNl
cnZlciA9IGZ1bmN0aW9uKHR5cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxc
blx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5c
dFx0XHR2YXIgZXZlbnRzID0ge2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3Zl
RXZlbnRzKGV2ZW50cyk7XG5cdFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9u
KGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0
KTtcblx0XHRcdH07XG5cdFx0XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0
fVxuXHR9O1xufTtcblxuaWYgKCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZCht
YXAsIHtcblx0c3VibWl0OiBmb3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9i
c2VydmVyKCdyZXNldCcpLFxuXHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRz
ZWxlY3Q6IGlucHV0T2JzZXJ2ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIg
cHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxc
blx0cmVtb3ZlRXZlbnQgPSBwcm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rp
b24ob2xkLCBtZXRob2Qpe1xuXHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUp
e1xuXHRcdGlmICh0eXBlLmluZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwo
dGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJz
ZSh0eXBlKS5leHByZXNzaW9uc1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5
ICE9ICdyZWxheScpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7
XG5cdFx0dmFyIG5ld1R5cGUgPSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNl
KDEpLmVhY2goZnVuY3Rpb24ocHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRv
LmtleSArIChwc2V1ZG8udmFsdWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5c
dFx0fSk7XG5cdFx0b2xkLmNhbGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2Qu
Y2FsbCh0aGlzLCBuZXdUeXBlLCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xu
fTtcblxudmFyIGRlbGVnYXRpb24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1h
dGNoLCBmbil7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywg
e30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91
aWQgaW4gc3RvcmVkKXtcblx0XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVk
W191aWRdLm1hdGNoID09IG1hdGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5
cGUgPSB0eXBlLCBfbWF0Y2ggPSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwg
e307XG5cdFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rp
b24odGFyZ2V0KXtcblx0XHRcdHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5c
dFx0fTtcblxuXHRcdHZhciBlbGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5c
dFx0aWYgKF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29u
ZGl0aW9uKXtcblx0XHRcdHZhciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29u
ZGl0aW9uIHx8IGVsZW1lbnRFdmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9u
KHRhcmdldCwgZXZlbnQpe1xuXHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAm
JiBjb25kaXRpb24uY2FsbCh0YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxu
XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIg
ZGVsZWdhdG9yID0gX21hcC5saXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRc
dGlmICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFy
Z2V0O1xuXHRcdFx0aWYgKHRhcmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVu
dCwgdGFyZ2V0LCB1aWQpO1xuXHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRc
dGlmICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFy
Z2V0O1xuXHRcdFx0aWYgKHRhcmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwg
dGFyZ2V0KTtcblx0XHR9O1xuXG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0
b3JlZFt1aWRdID0ge1xuXHRcdFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0
XHRkZWxlZ2F0b3I6IGRlbGVnYXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9y
ZWQ7XG5cdFx0cmV0dXJuIGFkZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFw
LmNhcHR1cmUpO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwg
Zm4sIF91aWQpe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycs
IHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRo
aXM7XG5cblx0XHRpZiAoX3VpZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3Ig
PSBzdG9yZWRbX3VpZF0uZGVsZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0
dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5y
ZW1vdmUodGhpcywgX3VpZCk7XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3Rv
cmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlz
LCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlk
LCBzO1xuXHRcdGlmIChmbikgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3Jl
ZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1
cm4gZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191
aWQpO1xuXHRcdH0gZWxzZSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVk
W19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2
ZW50LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9r
ZSgnaW1wbGVtZW50Jywge1xuXHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24u
YWRkRXZlbnQpLFxuXHRyZW1vdmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24u
cmVtb3ZlRXZlbnQpXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0
eWxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRo
IHRoZSBzdHlsZXMgb2YgRWxlbWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxl
bWVudC5TdHlsZVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3Vt
ZW50Lmh0bWwsIGVsO1xuXG4vLzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9l
cyBub3QgcmVtb3ZlIHN0eWxlcyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5
bGUuY29sb3IgPSBudWxsO1xudmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xv
ciA9PSAncmVkJztcblxuLy8gY2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciog
c2hvcnRoYW5kIHN0eWxlcyBpbiB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGlu
c3RlYWQgb2Ygd2lkdGgtc3R5bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIz
YWJjJztcbmVsLnN0eWxlLmJvcmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3Jv
bmdPcmRlciA9IGVsLnN0eWxlLmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJ
RTk+XG5cbnZhciBoYXNHZXRDb21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHls
ZSxcblx0c3VwcG9ydEJvcmRlclJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LnN0eWxlLmJvcmRlclJhZGl1cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVz
ID0ge3NldDogZnVuY3Rpb24oc3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19
O1xuXG52YXIgaGFzT3BhY2l0eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhh
c0ZpbHRlciA9IChodG1sLnN0eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBo
YVxcKG9wYWNpdHk9KFtcXGQuXSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rp
b24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0
eSk7XG5cdGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkg
PT0gbnVsbCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0
RmlsdGVyID0gZnVuY3Rpb24oZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9
IGVsZW1lbnQuc3R5bGUsXG5cdFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0
Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAu
dGVzdChmaWx0ZXIpID8gZmlsdGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAn
ICcgKyB2YWx1ZSkudHJpbSgpO1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0
cmlidXRlKCdmaWx0ZXInKTtcbn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhh
c09wYWNpdHkgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5v
cGFjaXR5ID0gb3BhY2l0eTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3Bh
Y2l0eSl7XG5cdGlmICghZWxlbWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0
eWxlLmhhc0xheW91dCkgZWxlbWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0g
bnVsbCB8fCBvcGFjaXR5ID09IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAn
Jyk7XG5cdFx0aWYgKG9wYWNpdHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNl
dEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxz
ZSB7XG5cdFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAo
b3BhY2l0eSAqIDEwMCkubGltaXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNl
dFZpc2liaWxpdHkpKTtcblxudmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9u
KGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVt
ZW50LmdldENvbXB1dGVkU3R5bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcn
KSA/IDEgOiBvcGFjaXR5LnRvRmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxl
bWVudCl7XG5cdHZhciBmaWx0ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5n
ZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikg
b3BhY2l0eSA9IGZpbHRlci5tYXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51
bGwgfHwgZmlsdGVyID09IG51bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5j
dGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0
eScpO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlz
aWJpbGl0eSA9PSAnaGlkZGVuJyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5c
bnZhciBmbG9hdE5hbWUgPSAoaHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZs
b2F0JyA6ICdjc3NGbG9hdCcsXG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDog
JzAlJywgY2VudGVyOiAnNTAlJywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRo
YXNCYWNrZ3JvdW5kUG9zaXRpb25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblgg
IT0gbnVsbCksXG5cdHByZWZpeFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2Ug
PSBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBh
dHRlcm4sICckMS0nKS5jYW1lbENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0
eWxlID0gZnVuY3Rpb24oc3R5bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNr
Z3JvdW5kUG9zaXRpb24nKXtcblx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAn
WCcpO1xuXHRcdHByb3BlcnR5ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUo
cHJvcGVydHkpO1xufTtcbi8vPC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdl
dENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1
dGVkU3R5bGUgJiYgdGhpcy5jdXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtj
YW1lbENhc2UocHJvcGVydHkpXTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERv
Y3VtZW50KHRoaXMpLmRlZmF1bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/
IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJl
dHVybiAoY29tcHV0ZWQpID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0g
ZmxvYXROYW1lKSA/ICdmbG9hdCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxc
blxuXHRzZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVy
dHkgPT0gJ29wYWNpdHknKXtcblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNl
RmxvYXQodmFsdWUpO1xuXHRcdFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1
cm4gdGhpcztcblx0XHR9XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zs
b2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAn
c3RyaW5nJyl7XG5cdFx0XHR2YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAn
QCcpLnNwbGl0KCcgJyk7XG5cdFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChm
dW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0
XHRyZXR1cm4gKHR5cGVPZih2YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywg
TWF0aC5yb3VuZCh2YWwpKSA6IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2Ug
aWYgKHZhbHVlID09IFN0cmluZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgu
cm91bmQodmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xu
XHRcdC8vPGx0SUU5PlxuXHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYg
ZG9lc05vdFJlbW92ZVN0eWxlcyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0
XHRyZW1vdmVTdHlsZSh0aGlzLnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElF
OT5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVy
dHkpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRo
aXMpO1xuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9h
dE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVy
dHkuaW5kZXhPZignYm9yZGVyUmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVy
VG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdo
dFJhZGl1cycsICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7
XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0
aGlzKS5qb2luKCcgJyk7XG5cdFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3Bl
cnR5XTtcblx0XHRpZiAoIXJlc3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRp
ZiAoRWxlbWVudC5TaG9ydFN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0
XHRyZXN1bHQgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVz
W3Byb3BlcnR5XSkgcmVzdWx0LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVy
biByZXN1bHQuam9pbignICcpO1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21w
dXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlv
blhZICYmIC9eYmFja2dyb3VuZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0
XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0
aW9uKHBvc2l0aW9uKXtcblx0XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtc
blx0XHRcdH0pIHx8ICcwcHgnO1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9
PSAnYmFja2dyb3VuZFBvc2l0aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0
KXtcblx0XHRcdHJlc3VsdCA9IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVz
dWx0Lm1hdGNoKC9yZ2JhP1xcKFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVz
dWx0ID0gcmVzdWx0LnJlcGxhY2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRc
dH1cblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHld
KXtcblx0XHRcdGlmICgoL14oaGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9w
eCQvLnRlc3QocmVzdWx0KSkpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3
aWR0aCcpID8gWydsZWZ0JywgJ3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7
XG5cdFx0XHRcdHZhbHVlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9
IHRoaXMuZ2V0U3R5bGUoJ2JvcmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRo
aXMuZ2V0U3R5bGUoJ3BhZGRpbmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlz
KTtcblx0XHRcdFx0cmV0dXJuIHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCld
IC0gc2l6ZSArICdweCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1h
cmdpbnxwYWRkaW5nLykudGVzdChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQp
KSl7XG5cdFx0XHRcdHJldHVybiAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+
XG5cdFx0aWYgKHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdo
dHxCb3R0b218TGVmdCk/JC8udGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xu
XHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAk
MyAkMScpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9
LFxuXG5cdHNldFN0eWxlczogZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBp
biBzdHlsZXMpIHRoaXMuc2V0U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0
ID0ge307XG5cdFx0QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtc
blx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xu
XHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRs
ZWZ0OiAnQHB4JywgdG9wOiAnQHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3
aWR0aDogJ0BweCcsIGhlaWdodDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAn
QHB4JywgbWluV2lkdGg6ICdAcHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29s
b3I6ICdyZ2IoQCwgQCwgQCknLCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3Np
dGlvbjogJ0BweCBAcHgnLCBjb2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4
JywgbGV0dGVyU3BhY2luZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChA
cHggQHB4IEBweCBAcHgpJyxcblx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzog
J0BweCBAcHggQHB4IEBweCcsIGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2Io
QCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBw
eCBAcHgnLCBib3JkZXJTdHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBA
KSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0An
LCAnem9vbSc6ICdAJywgZm9udFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0
eTogJ0AnLCBib3JkZXJSYWRpdXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVs
ZW1lbnQuU2hvcnRTdHlsZXMgPSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30s
IGJvcmRlcldpZHRoOiB7fSwgYm9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5b
J1RvcCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9u
KXtcblx0dmFyIFNob3J0ID0gRWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1l
bnQuU3R5bGVzO1xuXHRbJ21hcmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7
XG5cdFx0dmFyIHNkID0gc3R5bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9
IEFsbFtzZF0gPSAnQHB4Jztcblx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9u
O1xuXHRTaG9ydC5ib3JkZXJbYmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xu
XHR2YXIgYmR3ID0gYmQgKyAnV2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsg
J0NvbG9yJztcblx0U2hvcnRbYmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBT
aG9ydFtiZF1bYmR3XSA9IEFsbFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jk
c10gPSBTaG9ydFtiZF1bYmRzXSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xv
cltiZGNdID0gU2hvcnRbYmRdW2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7
XG5cbmlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNr
Z3JvdW5kUG9zaXRpb24gPSB7YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9z
aXRpb25ZOiAnQCd9O1xufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lv
bnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNj
cm9sbCwgb3IgcG9zaXRpb25pbmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBv
c2l0aW9uaW5nIGJhc2VkIG9uIHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29k
ZSBhbmQgc21hcnQgYnJvd3NlciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzL2xncGwuaHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBv
biBbWVVJXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vu
c2VdKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1
aXJlczogW0VsZW1lbnQsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1l
bnNpb25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpO1xuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENo
aWxkKGNoaWxkKTtcbnZhciBicm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50
ID09PSBlbGVtZW50KTtcbmVsZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21w
b25lbnRzID0gWydoZWlnaHQnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRl
clRvcFdpZHRoJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsn
d2lkdGgnLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcs
ICdib3JkZXJSaWdodFdpZHRoJ107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24o
ZWwpe1xuXG5cdHZhciBnQ1MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91
bmRzID0ge3g6IDAsIHk6IDB9O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihj
c3Mpe1xuXHRcdGJvdW5kcy55ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lk
dGhDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZs
b2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZz
ZXQgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykg
IT0gJ3N0YXRpYycgfHwgaXNCb2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1
bmN0aW9uKGVsKXtcblx0cmV0dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkk
L2kpLnRlc3QoZWwudGFnTmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Ny
b2xsVG86IGZ1bmN0aW9uKHgsIHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhp
cy5nZXRXaW5kb3coKS5zY3JvbGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5z
Y3JvbGxMZWZ0ID0geDtcblx0XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5
KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElF
OT5cblx0XHQvLyBUaGlzIGlmIGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0
ZSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRl
bi5cblx0XHRpZiAoIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zm
c2V0V2lkdGgsIHk6IHRoaXMub2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQv
LyBUaGlzIHN2ZyBzZWN0aW9uIHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBj
YW4gYmUgcmVtb3ZlZCB3aGVuIEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVn
IGluZm86IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4
NVxuXHRcdGlmICh0aGlzLmdldCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVT
aXplKHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5k
cy5oZWlnaHR9O1xuXHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtc
blx0XHR9XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNC
b2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0
cmV0dXJuIHt4OiB0aGlzLnNjcm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVy
biB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3Jv
bGxMZWZ0LCB5OiB0aGlzLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rp
b24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDog
MCwgeTogMH07XG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0
XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0g
ZWxlbWVudC5zY3JvbGxUb3A7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xu
XHRcdH1cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBi
cm9rZW5PZmZzZXRQYXJlbnQgPyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztc
blx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlv
bicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAo
c3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRT
dGF0aWMgOiBpc09mZnNldDtcblx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5v
ZGUpKXtcblx0XHRcdGlmIChpc09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtc
blx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVt
ZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1l
bnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0
XHRcdHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0
cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIg
aGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5c
blx0XHRpZiAoaGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRo
aXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0
aGlzLmdldERvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9
IGh0bWwuZ2V0U2Nyb2xsKCksXG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxz
KCksXG5cdFx0XHRcdGlzRml4ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0g
J2ZpeGVkJyk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9h
dCgpICsgZWxlbVNjcm9sbHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0
bWwuY2xpZW50TGVmdCxcblx0XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3Jv
bGxzLnkgKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxu
XHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6
IDAsIHk6IDB9O1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRc
dHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCAr
PSBlbGVtZW50Lm9mZnNldExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0
VG9wO1xuXG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5c
dFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxh
dGl2ZSl7XG5cdFx0dmFyIG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xs
ID0gdGhpcy5nZXRTY3JvbGxzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zm
c2V0LnggLSBzY3JvbGwueCxcblx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xu
XG5cdFx0aWYgKHJlbGF0aXZlICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkp
e1xuXHRcdFx0dmFyIHJlbGF0aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xu
XHRcdFx0cmV0dXJuIHt4OiBwb3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJv
cmRlcihyZWxhdGl2ZSksIHk6IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BC
b3JkZXIocmVsYXRpdmUpfTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5c
dGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMp
KSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3Np
dGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRT
aXplKCk7XG5cdFx0dmFyIG9iaiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0
b3A6IHBvc2l0aW9uLnksXG5cdFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXpl
Lnlcblx0XHR9O1xuXHRcdG9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9i
ai5ib3R0b20gPSBvYmoudG9wICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxu
XG5cdGNvbXB1dGVQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0
bGVmdDogb2JqLnggLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRv
cDogb2JqLnkgLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxc
blxuXHRzZXRQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHls
ZXModGhpcy5jb21wdXRlUG9zaXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50
LCBXaW5kb3ddLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBk
b2MuY2xpZW50V2lkdGgsIHk6IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9s
bDogZnVuY3Rpb24oKXtcblx0XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0
Q29tcGF0RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBk
b2Muc2Nyb2xsTGVmdCwgeTogd2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9
LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBh
dEVsZW1lbnQodGhpcyksXG5cdFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkg
PSB0aGlzLmdldERvY3VtZW50KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9j
LnNjcm9sbFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5z
Y3JvbGxIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBv
c2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0
Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUo
KTtcblx0XHRyZXR1cm4ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBz
aXplLngsIGhlaWdodDogc2l6ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8g
cHJpdmF0ZSBtZXRob2RzXG5cbnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRT
dHlsZTtcblxuZnVuY3Rpb24gc3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4g
c3R5bGVTdHJpbmcoZWxlbWVudCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0
aW9uIHRvcEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdi
b3JkZXItdG9wLXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5c
dHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxu
ZnVuY3Rpb24gaXNCb2R5KGVsZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSku
dGVzdChlbGVtZW50LnRhZ05hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVs
ZW1lbnQpe1xuXHR2YXIgZG9jID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFk
b2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0
bWwgOiBkb2MuYm9keTtcbn1cblxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtw
b3NpdGlvbjogJ3NldFBvc2l0aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9j
dW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0
aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRn
ZXRTY3JvbGxUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtc
blx0fSxcblxuXHRnZXRTY3JvbGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdl
dFNjcm9sbCgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRo
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxu
XG5cdGdldFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7
XG5cdH0sXG5cblx0Z2V0TGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3Np
dGlvbigpLng7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIHRoZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkg
YWxsIG90aGVyIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92
aWRlczogRnhcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9
IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENs
YXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWws
XG5cdFx0b25DYW5jZWw6IG5pbCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRm
cHM6IDYwLFxuXHRcdHVuaXQ6IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVz
OiBudWxsLFxuXHRcdGZyYW1lU2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxu
XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRo
aXMuc3ViamVjdCB8fCB0aGlzO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxc
blxuXHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtc
blx0XHRcdHJldHVybiAtKE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xu
XHR9LFxuXG5cdHN0ZXA6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFt
ZVNraXApe1xuXHRcdFx0dmFyIGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRo
aXMudGltZSkgOiAwLCBmcmFtZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0
dGhpcy50aW1lID0gbm93O1xuXHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNl
IHtcblx0XHRcdHRoaXMuZnJhbWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRo
aXMuZnJhbWVzKXtcblx0XHRcdHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1l
IC8gdGhpcy5mcmFtZXMpO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwg
dGhpcy50bywgZGVsdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMu
ZnJhbWVzO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywg
MSkpO1xuXHRcdFx0dGhpcy5zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24o
bm93KXtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20s
IHRvLCBkZWx0YSl7XG5cdFx0cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0
fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJl
dHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAn
Y2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6
IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZh
bHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9u
KGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztc
blx0XHR0aGlzLmZyb20gPSBmcm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1l
ID0gKHRoaXMub3B0aW9ucy5mcmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51
bGw7XG5cdFx0dGhpcy50cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFy
IGZyYW1lcyA9IHRoaXMub3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1
cmF0aW9uID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5E
dXJhdGlvbnNbZHVyYXRpb25dIHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUlu
dGVydmFsID0gMTAwMCAvIGZwcztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJv
dW5kKHRoaXMuZHVyYXRpb24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdl
dFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJs
ZSh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5p
bmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwo
dGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5m
cmFtZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7
XG5cdFx0XHRcdGlmICghdGhpcy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29t
cGxldGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJl
RXZlbnQoJ3N0b3AnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZl
KHRoaXMuc3ViamVjdCA9PT0gdGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRo
aXMuZnJhbWVzO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCku
Y2xlYXJDaGFpbigpO1xuXHRcdFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRyZXN1bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQo
KSkgcHVzaEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0g
aW5zdGFuY2VzW3RoaXMub3B0aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29u
dGFpbnModGhpcyk7XG5cdH0sXG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5c
bn0pO1xuXG5GeC5jb21wdXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJu
ICh0byAtIGZyb20pICogZGVsdGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9y
dCc6IDI1MCwgJ25vcm1hbCc6IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVy
c1xuXG52YXIgaW5zdGFuY2VzID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0
aW9uKCl7XG5cdHZhciBub3cgPSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5n
dGg7IGktLTspe1xuXHRcdHZhciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNl
KSBpbnN0YW5jZS5zdGVwKG5vdyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5j
dGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBz
XSA9IFtdKTtcblx0bGlzdC5wdXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNb
ZnBzXSA9IGxvb3AucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07
XG5cbnZhciBwdWxsSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3Rh
bmNlc1tmcHNdO1xuXHRpZiAobGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAo
IWxpc3QubGVuZ3RoICYmIHRpbWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBz
XTtcblx0XHRcdHRpbWVyc1tmcHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0
fVxuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlw
dGlvbjogQ29udGFpbnMgdGhlIENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4s
IEZ4Lk1vcnBoLCBGeC5FbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBbRngsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4u
XG4qL1xuXG5GeC5DU1MgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJl
cGFyZXMgdGhlIGJhc2UgZnJvbS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVt
ZW50LCBwcm9wZXJ0eSwgdmFsdWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVl
cyk7XG5cdFx0dmFyIGZyb20gPSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0
byA9PSBudWxsKXtcblx0XHRcdHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0
eWxlKHByb3BlcnR5KTtcblx0XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0
XHQvLyBhZGFwdGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21h
c3Rlci9meC5qcyNMMjk5XG5cdFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09
ICdzdHJpbmcnICYmIGZyb20uc2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxv
YXQoZnJvbSkgIT0gMCl7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsg
dW5pdCk7XG5cdFx0XHRcdHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9w
ZXJ0eSk7XG5cdFx0XHRcdC8vIElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhl
bFdpZHRoXG5cdFx0XHRcdGlmICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFs
dWUgPSBlbGVtZW50LnN0eWxlWygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5c
dFx0XHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9t
IERlYW4gRWR3YXJkcycgaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4
LjU0LjE1LyNjb21tZW50LTEwMjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0
eWxlLmxlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5c
dFx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0
ZWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRc
dFx0ZnJvbSA9ICh0byB8fCAxKSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZs
b2F0KGZyb20pIHx8IDApO1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9t
ICsgdW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShm
cm9tKSwgdG86IHRoaXMucGFyc2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGlu
dG8gYW4gYXJyYXlcblxuXHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVu
Y3Rpb24uY29udmVydCh2YWx1ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0
cmluZycpID8gdmFsdWUuc3BsaXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJl
dHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xu
XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2Vy
cywgZnVuY3Rpb24ocGFyc2VyKXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRc
dHZhciBwYXJzZWQgPSBwYXJzZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBw
YXJzZWQgPT09IDApIGZvdW5kID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0
XHRcdH0pO1xuXHRcdFx0Zm91bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5D
U1MuUGFyc2Vycy5TdHJpbmd9O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxu
XG5cdC8vY29tcHV0ZXMgYnkgYSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0
aGVpciBwYXJzZXJzLlxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5c
dFx0dmFyIGNvbXB1dGVkID0gW107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5n
dGgpKS50aW1lcyhmdW5jdGlvbihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9t
W2ldLnBhcnNlci5jb21wdXRlKGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBh
cnNlcjogZnJvbVtpXS5wYXJzZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0g
RnVuY3Rpb24uY29udmVydCgnZng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xu
XHR9LFxuXG5cdC8vc2VydmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5j
dGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1
ZScpIHZhbHVlID0gdGhpcy5wYXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5c
dFx0dmFsdWUuZWFjaChmdW5jdGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5j
b25jYXQoYml0LnBhcnNlci5zZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRy
ZXR1cm4gcmV0dXJuZWQ7XG5cdH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxl
bWVudFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0
KXtcblx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0
KSk7XG5cdH0sXG5cblx0Ly9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhl
IHZhbHVlcyBmb3IgYSBzZWxlY3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xu
XHRcdGlmIChGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVj
dG9yXTtcblx0XHR2YXIgdG8gPSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBz
ZWxlY3Rvci5lc2NhcGVSZWdFeHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0g
ZnVuY3Rpb24ocnVsZXMpe1xuXHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7
XG5cdFx0XHRcdGlmIChydWxlLm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5y
dWxlcyB8fCBydWxlLmNzc1J1bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0
XHRcdFx0aWYgKCFydWxlLnN0eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQg
PSAocnVsZS5zZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysv
LCBmdW5jdGlvbihtKXtcblx0XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0
XHR9KSA6IG51bGw7XG5cdFx0XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3Qu
dGVzdChzZWxlY3RvclRleHQpKSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQu
U3R5bGVzLCBmdW5jdGlvbih2YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHls
ZVtzdHlsZV0gfHwgRWxlbWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0
XHR2YWx1ZSA9IFN0cmluZyhydWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVd
ID0gKCgvXnJnYi8pLnRlc3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0
XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5z
dHlsZVNoZWV0cywgZnVuY3Rpb24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVm
O1xuXHRcdFx0aWYgKGhyZWYgJiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5k
ZXhPZihkb2N1bWVudC5kb21haW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBz
aGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7
XG5cdFx0fSk7XG5cdFx0cmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxu
XG59KTtcblxuRnguQ1NTLkNhY2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENv
bG9yOiB7XG5cdFx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRj
aCgvXiNbMC05YS1mXXszLDZ9JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRc
dFx0cmV0dXJuICgodmFsdWUgPSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihc
XGQrKS8pKSkgPyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9
LFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4g
ZnJvbS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChG
eC5jb21wdXRlKGZyb21baV0sIHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0
XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIp
O1xuXHRcdH1cblx0fSxcblxuXHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0
XHRjb21wdXRlOiBGeC5jb21wdXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7
XG5cdFx0XHRyZXR1cm4gKHVuaXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9
LFxuXG5cdFN0cmluZzoge1xuXHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0
XHRjb21wdXRlOiBmdW5jdGlvbih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9
LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1c
blx0fVxuXG59O1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlv
bjogRm9ybWVybHkgRnguU3R5bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9m
IENTUyBwcm9wZXJ0aWVzIGZvciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywg
b3IgQ1NTIGJhc2VkIHNlbGVjdG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xu
XG5GeC5Nb3JwaCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRp
YWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRo
aXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlv
bnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9
PSAnc3RyaW5nJykgbm93ID0gdGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5v
dykgdGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0
bywgZGVsdGEpe1xuXHRcdHZhciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5v
d1twXSA9IHRoaXMucGFyZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5v
dztcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlz
LmNoZWNrKHByb3BlcnRpZXMpKSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRp
ZXMgPT0gJ3N0cmluZycpIHByb3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0
XHR2YXIgZnJvbSA9IHt9LCB0byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7
XG5cdFx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVy
dGllc1twXSk7XG5cdFx0XHRmcm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBh
cnNlZC50bztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxu
XG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24o
b3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIG1vcnBoID0gdGhpcy5yZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0
XHRcdG1vcnBoID0gbmV3IEZ4Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0
dGhpcy5zdG9yZSgnbW9ycGgnLCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0
fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3Bz
KXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQg
d2l0aCBhbnkgb2YgdGhlIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5jcmVkaXRzOlxuICAtIEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0
dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXpl
ZCB0byBiZSB1c2VkIHdpdGggTW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczog
RnguVHJhbnNpdGlvbnNcblxuLi4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5z
aXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRp
b24gfHwgRnguVHJhbnNpdGlvbnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFu
cyA9PSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0
XHR0cmFucyA9IEZ4LlRyYW5zaXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8
fCB0cmFuc1tkYXRhWzBdLmNhcGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMg
PSB0cmFuc1snZWFzZScgKyBkYXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsy
XS5jYXBpdGFsaXplKCkgOiAnJyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxu
fSk7XG5cbkZ4LlRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRw
YXJhbXMgPSBBcnJheS5jb252ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihw
b3Mpe1xuXHRcdHJldHVybiB0cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJu
IE9iamVjdC5hcHBlbmQoZWFzZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91
dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBw
YXJhbXMpO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0
dXJuIChwb3MgPD0gMC41ID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFu
c2l0aW9uKDIgKiAoMSAtIHBvcyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5c
bkZ4LlRyYW5zaXRpb25zID0ge1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0
dXJuIHplcm87XG5cdH1cblxufTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0
aW9uKHRyYW5zaXRpb25zKXtcblx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykg
RnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9u
c1t0cmFuc2l0aW9uXSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzog
ZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtc
blx0fSxcblxuXHRFeHBvOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAq
IChwIC0gMSkpO1xuXHR9LFxuXG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0g
TWF0aC5zaW4oTWF0aC5hY29zKHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0
XHRyZXR1cm4gMSAtIE1hdGguY29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazog
ZnVuY3Rpb24ocCwgeCl7XG5cdFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4g
TWF0aC5wb3cocCwgMikgKiAoKHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1
bmN0aW9uKHApe1xuXHRcdHZhciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7
IGEgKz0gYiwgYiAvPSAyKXtcblx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRc
dFx0XHR2YWx1ZSA9IGIgKiBiIC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwg
Mik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5c
dH0sXG5cblx0RWxhc3RpYzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIs
IDEwICogLS1wKSAqIE1hdGguY29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEp
IC8gMyk7XG5cdH1cblxufSk7XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCdd
LmVhY2goZnVuY3Rpb24odHJhbnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRp
b25dID0gbmV3IEZ4LlRyYW5zaXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93
KHAsIGkgKyAyKTtcblx0fSk7XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5k
ZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBD
U1MgcHJvcGVydHkgZm9yIGFuIGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFk
ZSwgRWxlbWVudC5oaWdobGlnaHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Mo
e1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50
LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5p
ZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1
bmN0aW9uKHByb3BlcnR5LCBub3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xu
XHRcdFx0bm93ID0gcHJvcGVydHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwg
dGhpcy5vcHRpb25zLnByb3BlcnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1l
bnQsIHByb3BlcnR5LCBub3csIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAo
IXRoaXMuY2hlY2socHJvcGVydHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFy
Z3MgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMu
b3B0aW9ucy5wcm9wZXJ0eSB8fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMu
cHJlcGFyZSh0aGlzLmVsZW1lbnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0
aGlzLnBhcmVudChwYXJzZWQuZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVu
dC5Qcm9wZXJ0aWVzLnR3ZWVuID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0
dGhpcy5nZXQoJ3R3ZWVuJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhp
cy5yZXRyaWV2ZSgndHdlZW4nKTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3
IEZ4LlR3ZWVuKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdl
ZW4nLCB0d2Vlbik7XG5cdFx0fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVt
ZW50LmltcGxlbWVudCh7XG5cblx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7
XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0g
dGhpcy5nZXQoJ3R3ZWVuJyksIG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1
bWVudHMpLCB0b2dnbGU7XG5cdFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dn
bGUnO1xuXHRcdHN3aXRjaCAoYXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdz
dGFydCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdz
dGFydCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAn
c2V0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdz
ZXQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2
YXIgZmxhZyA9IHRoaXMucmV0cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNp
dHknKSA9PSAxKTtcblx0XHRcdFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9
IGZsYWcgPyAwIDogMTtcblx0XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xu
XHRcdFx0XHR0b2dnbGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1l
dGhvZCA9ICdzdGFydCc7XG5cdFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgn
ZmFkZTpmbGFnJyk7XG5cdFx0ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZh
ciB0byA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcp
e1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6
ICd2aXNpYmxlJyk7XG5cdFx0fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRj
aGFpbi5sZW5ndGgpe1xuXHRcdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0
dGhpcy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0
XHR0aGlzLmNhbGxDaGFpbigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRc
dHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0g
ZWxzZSB7XG5cdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVs
ZW1lbnQuZ2V0U3R5bGUoJ29wYWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQu
c2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWlu
KCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdo
bGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9
IHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tn
cm91bmQtY29sb3InKSk7XG5cdFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNm
ZmYnIDogZW5kO1xuXHRcdH1cblx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0
XHR0d2Vlbi5zdGFydCgnYmFja2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5k
KS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xv
cicsIHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNh
bGxDaGFpbigpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwg
YWxsIHB1cnBvc2UgUmVxdWVzdCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFp
biwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6
IFJlcXVlc3RcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rp
b24oKXt9LFxuXHRwcm9ncmVzc1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2Vy
LlJlcXVlc3QpO1xuXG52YXIgUmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5c
blx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxc
blxuXHRvcHRpb25zOiB7Lypcblx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxv
YWRzdGFydDogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlv
bihldmVudCwgeGhyKXt9LFxuXHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNh
bmNlbDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0
LCByZXNwb25zZVhNTCl7fSxcblx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRv
bkV4Y2VwdGlvbjogZnVuY3Rpb24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0
OiBmdW5jdGlvbigpe30sXG5cdFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdp
dGhDcmVkZW50aWFsczogZmFsc2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRc
dGhlYWRlcnM6IHtcblx0XHRcdCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxc
blx0XHRcdCdBY2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9u
L3htbCwgdGV4dC94bWwsICovKidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1h
dDogZmFsc2UsXG5cdFx0bWV0aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0
aXNTdWNjZXNzOiBudWxsLFxuXHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0
cnVlLFxuXHRcdGVuY29kaW5nOiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0
XHRldmFsUmVzcG9uc2U6IGZhbHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFs
c2Vcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnho
ciA9IG5ldyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7
XG5cdFx0dGhpcy5oZWFkZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25T
dGF0ZUNoYW5nZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYg
KHhoci5yZWFkeVN0YXRlICE9IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMu
cnVubmluZyA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRl
bXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRo
aXMuc3RhdHVzID0gKHN0YXR1cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQo
dGhpcykpO1xuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJv
Z3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xu
XHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0
XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4
dDogdGhpcy54aHIucmVzcG9uc2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1M
fTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVz
KSlcblx0XHRcdHRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2Uu
eG1sKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nl
c3M6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVy
biAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vz
c1NjcmlwdHM6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3Bv
bnNlIHx8ICgvKGVjbWF8amF2YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50
LXR5cGUnKSkpIHJldHVybiBCcm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3Ry
aXBTY3JpcHRzKHRoaXMub3B0aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2Vzczog
ZnVuY3Rpb24odGV4dCwgeG1sKXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3Jp
cHRzKHRleHQpLCB4bWwpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9
KTtcblx0fSxcblxuXHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQo
J2NvbXBsZXRlJywgYXJndW1lbnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNh
bGxDaGFpbigpO1xuXHR9LFxuXG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZh
aWx1cmUoKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54
aHJ9KTtcblx0fSxcblxuXHRvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZl
bnQoJ2NvbXBsZXRlJykuZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5c
dGxvYWRzdGFydDogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3Rh
cnQnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7
XG5cdH0sXG5cblx0dGltZW91dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGlt
ZW91dCcsIHRoaXMueGhyKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHho
cjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVl
KXtcblx0XHR0aGlzLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5h
dHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFk
ZXIobmFtZSk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24o
KXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlz
Lm9wdGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1
cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNz
KGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxz
ZTtcblx0fSxcblxuXHRzZW5kOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hl
Y2sob3B0aW9ucykpIHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9
IHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5u
aW5nID0gdHJ1ZTtcblxuXHRcdHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0
eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9w
dGlvbnN9O1xuXG5cdFx0dmFyIG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2Jq
ZWN0LmFwcGVuZCh7ZGF0YTogb2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0
aG9kfSwgb3B0aW9ucyk7XG5cdFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmlu
ZyhvcHRpb25zLnVybCksIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5c
blx0XHRzd2l0Y2ggKHR5cGVPZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9
IGRvY3VtZW50LmlkKGRhdGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdv
YmplY3QnOiBjYXNlICdoYXNoJzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xu
XHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQg
PSAnZm9ybWF0PScgKyB0aGlzLm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/
IGZvcm1hdCArICcmJyArIGRhdGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0
aW9ucy5lbXVsYXRpb24gJiYgIVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0
XHRcdHZhciBfbWV0aG9kID0gJ19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0
YSkgPyBfbWV0aG9kICsgJyYnICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9z
dCc7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcs
ICdwdXQnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9w
dGlvbnMuZW5jb2RpbmcpID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDog
Jyc7XG5cdFx0XHR0aGlzLmhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gt
d3d3LWZvcm0tdXJsZW5jb2RlZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkg
dXJsID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9u
ID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0
cmltUG9zaXRpb24gPSB1cmwuaW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAs
IHRyaW1Qb3NpdGlvbik7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1
cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVl
SUQoKTtcblxuXHRcdGlmIChkYXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdk
ZWxldGUnKSl7XG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/
JykgKyBkYXRhO1xuXHRcdFx0ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRo
aXMueGhyO1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0
ID0gdGhpcy5sb2Fkc3RhcnQuYmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhp
cy5wcm9ncmVzcy5iaW5kKHRoaXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1Vw
cGVyQ2FzZSgpLCB1cmwsIHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRo
aXMub3B0aW9ucy5wYXNzd29yZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRp
YWxzKSAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0
cnVlO1xuXG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5i
aW5kKHRoaXMpO1xuXG5cdFx0T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1
ZSwga2V5KXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwg
dmFsdWUpO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNl
cHRpb24nLCBba2V5LCB2YWx1ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhj
ZXB0aW9uJywgeGhyOiB4aHIsIGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMp
O1xuXG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRc
dFx0dGhpcy5yZXNldFRoZW5hYmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlz
LmZpcmVFdmVudCgncmVxdWVzdCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhp
cy5vcHRpb25zLmFzeW5jKSB0aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlz
Lm9wdGlvbnMudGltZW91dCkgdGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9w
dGlvbnMudGltZW91dCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2Vs
OiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0
aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFi
b3J0KCk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGlt
ZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVz
cyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIu
UmVxdWVzdCgpO1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVj
dCh7cmVhc29uOiAnY2FuY2VsJywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxudmFyIG1ldGhvZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0
ZScsICdwYXRjaCcsICdoZWFkJywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFU
Q0gnLCAnSEVBRCddLmVhY2goZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0g
ZnVuY3Rpb24oZGF0YSl7XG5cdFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9k
XG5cdFx0fTtcblx0XHRpZiAoZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0
cmV0dXJuIHRoaXMuc2VuZChvYmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50
KG1ldGhvZHMpO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0
aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtc
blx0XHRzZW5kLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcp
O1xuXHRcdGlmICghc2VuZCl7XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRk
YXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwg
J3Bvc3QnLCB1cmw6IHRoaXMuZ2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0
b3JlKCdzZW5kJywgc2VuZCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5c
bkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBz
ZW5kZXIgPSB0aGlzLmdldCgnc2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1
cmw6IHVybCB8fCBzZW5kZXIub3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3Jp
cHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1l
dGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3Zp
ZGVzOiBSZXF1ZXN0LkhUTUxcblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Mo
e1xuXG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFs
c2UsXG5cdFx0YXBwZW5kOiBmYWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0
ZXI6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBw
bGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBm
dW5jdGlvbih0ZXh0KXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2Ug
PSB0aGlzLnJlc3BvbnNlO1xuXG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRz
KGZ1bmN0aW9uKHNjcmlwdCl7XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xu
XHRcdH0pO1xuXG5cdFx0dmFyIG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5d
Kj4oW1xcc1xcU10qPyk8XFwvYm9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1s
ID0gbWF0Y2hbMV07XG5cdFx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1s
JywgcmVzcG9uc2UuaHRtbCk7XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVz
O1xuXHRcdHJlc3BvbnNlLmVsZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRl
ciB8fCAnKicpO1xuXG5cdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVz
cG9uc2UuZWxlbWVudHM7XG5cdFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRh
dGUgPSBkb2N1bWVudC5pZChvcHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRp
b25zLmZpbHRlcikgdXBkYXRlLmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2Ug
dXBkYXRlLnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9u
cy5hcHBlbmQpe1xuXHRcdFx0dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5k
KTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgp
LmluamVjdChhcHBlbmQpO1xuXHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJl
bigpKTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhy
ZXNwb25zZS5qYXZhc2NyaXB0KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUs
IHJlc3BvbnNlLmVsZW1lbnRzLCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtc
blx0XHR0aGlzLnJlc29sdmUoe3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25z
ZS5lbGVtZW50cywgaHRtbDogcmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2
YXNjcmlwdH0pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxu
XHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQn
KS5jYW5jZWwoKTtcblx0XHRsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRy
aWV2ZSgnbG9hZCcpO1xuXHRcdGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3Qu
SFRNTCh7ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAn
Z2V0J30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1
cm4gbG9hZDtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMs
IHtkYXRhOiBUeXBlLmlzT2JqZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlv
bjogSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxuU2VlQWxzbzogPGh0dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5
LCBTdHJpbmcsIE51bWJlciwgRnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9c
blxuaWYgKHR5cGVvZiBKU09OID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5c
bihmdW5jdGlvbigpe1xuXG52YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdc
XFxcdCcsICdcXG4nOiAnXFxcXG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdc
IicgOiAnXFxcXFwiJywgJ1xcXFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0
aW9uKGNocil7XG5cdHJldHVybiBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBj
aHIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFs
aWRhdGUgPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxc
XCg/OltcIlxcXFxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRc
dHJlcGxhY2UoL1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpc
XC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2Uo
Lyg/Ol58OnwsKSg/OlxccypcXFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxz
XSokLykudGVzdChzdHJpbmcpO1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/
IGZ1bmN0aW9uKG9iail7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0
aW9uKG9iail7XG5cdGlmIChvYmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xu
XG5cdHN3aXRjaCAodHlwZU9mKG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1
cm4gJ1wiJyArIG9iai5yZXBsYWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAn
XCInO1xuXHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04u
ZW5jb2RlKS5jbGVhbigpICsgJ10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxu
XHRcdFx0dmFyIHN0cmluZyA9IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2
YWx1ZSwga2V5KXtcblx0XHRcdFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0
XHRcdGlmIChqc29uKSBzdHJpbmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7
XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAn
bnVtYmVyJzogY2FzZSAnYm9vbGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxs
JzogcmV0dXJuICdudWxsJztcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1
cmUgPSB0cnVlO1xuXG5cbkpTT04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xu
XHRpZiAoIXN0cmluZyB8fCB0eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7
XG5cblx0aWYgKHNlY3VyZSA9PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNl
Y3VyZSl7XG5cdFx0aWYgKEpTT04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5c
dFx0aWYgKCFKU09OLnZhbGlkYXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3Vs
ZCBub3QgZGVjb2RlIHRoZSBpbnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVl
IGlzIG5vdCBzZWN1cmUuJyk7XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAn
KScpO1xufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVz
Y3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFs
IG1ldGhvZHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3Zp
ZGVzOiBSZXF1ZXN0LkpTT05cblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Mo
e1xuXG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjog
ZnVuY3Rpb24odGV4dCwgZXJyb3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRp
bml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtc
blx0XHRPYmplY3QuYXBwZW5kKHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBs
aWNhdGlvbi9qc29uJyxcblx0XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxc
blxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xu
XHRcdFx0anNvbiA9IHRoaXMucmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMu
b3B0aW9ucy5zZWN1cmUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2
ZW50KCdlcnJvcicsIFt0ZXh0LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRp
ZiAoanNvbiA9PSBudWxsKXtcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHR0aGlzLm9uU3VjY2Vzcyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNv
bjoganNvbiwgdGV4dDogdGV4dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5u
YW1lOiBDb29raWVcblxuZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywg
YW5kIGRlbGV0aW5nIGJyb3dzZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbmNyZWRpdHM6XG4gIC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVs
IEtvY2ggKGh0dHA6Ly9xdWlya3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJv
d3Nlcl1cblxucHJvdmlkZXM6IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcg
Q2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBh
dGg6ICcvJyxcblx0XHRkb21haW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRz
ZWN1cmU6IGZhbHNlLFxuXHRcdGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUs
XG5cdFx0aHR0cE9ubHk6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5
LCBvcHRpb25zKXtcblx0XHR0aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0
aW9ucyk7XG5cdH0sXG5cblx0d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmVuY29kZSkgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZG9tYWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9u
cy5kb21haW47XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScg
KyB0aGlzLm9wdGlvbnMucGF0aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0
XHRcdHZhciBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRp
bWUoKSArIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRc
dFx0dmFsdWUgKz0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0
XHRpZiAodGhpcy5vcHRpb25zLnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAo
dGhpcy5vcHRpb25zLmh0dHBPbmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5v
cHRpb25zLmRvY3VtZW50LmNvb2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0
aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMu
a2V5LmVzY2FwZVJlZ0V4cCgpICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBk
ZWNvZGVVUklDb21wb25lbnQodmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBm
dW5jdGlvbigpe1xuXHRcdG5ldyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhp
cy5vcHRpb25zLCB7ZHVyYXRpb246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fVxuXG59KTtcblxuQ29va2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9u
cyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtc
blxuQ29va2llLnJlYWQgPSBmdW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkp
LnJlYWQoKTtcbn07XG5cbkNvb2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtc
blx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxu
LS0tXG5cbm5hbWU6IERPTVJlYWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9t
IGV2ZW50IGRvbXJlYWR5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWly
ZXM6IFtCcm93c2VyLCBFbGVtZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJl
YWR5LCBEb21SZWFkeV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7
XG5cbnZhciByZWFkeSxcblx0bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxc
blx0dGltZXIsXG5cdHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
XG5cbnZhciBkb21yZWFkeSA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5c
dGlmICghcmVhZHkpe1xuXHRcdEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRv
Y3VtZW50LnJlbW92ZUxpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92
ZUxpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVF
dmVudCgnZG9tcmVhZHknKTtcblx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9
XG5cdC8vIGNsZWFudXAgc2NvcGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVt
ZW50ID0gbnVsbDtcbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkg
PSBjaGVja3MubGVuZ3RoOyBpLS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwg
PSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRp
bWVyID0gc2V0VGltZW91dChwb2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcign
RE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xs
IHRlY2huaXF1ZSBieSBEaWVnbyBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lF
Q29udGVudExvYWRlZC9cbi8vIHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhl
IERPTSBpcyBub3QgcmVhZHksIG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdv
cmtzID0gZnVuY3Rpb24oKXtcblx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4v
LyBJZiBkb1Njcm9sbCB3b3JrcyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWlu
ZSBkb21yZWFkeVxuLy8gICBlLmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Ny
b2xsICYmICFkb1Njcm9sbFdvcmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtc
blx0c2hvdWxkUG9sbCA9IHRydWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJl
YWR5U3RhdGUpIGNoZWNrcy5wdXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50
LnJlYWR5U3RhdGU7XG5cdHJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2Nv
bXBsZXRlJyk7XG59KTtcblxuaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBk
b2N1bWVudC5hZGRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hv
dWxkUG9sbCA9IHRydWU7XG5cbmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZl
bnRzLmRvbXJlYWR5ID0ge1xuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkg
Zm4uY2FsbCh0aGlzKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmly
ZXMgYmVmb3JlIGxvYWRcbkVsZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxc
blx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93
KSBmbi5jYWxsKHRoaXMpO1xuXHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMgPT0gd2luZG93KXtcblx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVu
dC5FdmVudHMubG9hZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRo
aXMgaXMgYmFzZWQgb24gdGhlIGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xv
YWQnLCBmdW5jdGlvbigpe1xuXHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9j
dW1lbnQpO1xuIgorbW9kdWxlLmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0
IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJp
Z2h0IChjKSAyMDA2LTIwMTcgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0
LykuKi8gXG4vKiFcbldlYiBCdWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVy
L2U0MjZhOWFlNzE2N2M1ODA3YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBD
b3JlXG5cbmRlc2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtW
YWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9y
czogVGhlIE1vb1Rvb2xzIHByb2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZl
bG9wZXJzLylcblxuaW5zcGlyYXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGly
ZWQgYnkgW0Jhc2UuanNdKGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9i
YXNlLykgQ29weXJpZ2h0IChjKSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGlj
ZW5zZS5waHApXG4gIC0gU29tZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUu
anNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBT
dGVwaGVuc29uLCBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9t
aXQtbGljZW5zZS5waHApXG5cbnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVP
ZiwgaW5zdGFuY2VPZiwgTmF0aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZh
c2NyaXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDog
Q29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHVi
LmNvbS9rYW1pY2FuZS8pLiovXG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0
dmVyc2lvbjogJzEuNi4wJyxcblx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2Yzdj
YTUxMTRlZTk1ZTJiJ1xufTtcblxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2Yg
PSB0aGlzLnR5cGVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1
cm4gJ251bGwnO1xuXHRpZiAoaXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1p
bHkoKTtcblxuXHRpZiAoaXRlbS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MSkgcmV0dXJuICdlbGVtZW50Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4g
KC9cXFMvKS50ZXN0KGl0ZW0ubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7
XG5cdH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAo
J2NhbGxlZScgaW4gaXRlbSkgcmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4g
aXRlbSkgcmV0dXJuICdjb2xsZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtc
bn07XG5cbnZhciBpbnN0YW5jZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwg
b2JqZWN0KXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3Ry
dWN0b3IgPSBpdGVtLiRjb25zdHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAo
Y29uc3RydWN0b3Ipe1xuXHRcdGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1
ZTtcblx0XHRjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElF
OD4qL1xuXHRpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0
SUU4PiovXG5cdHJldHVybiBpdGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093
blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+
Ki9cbnZhciBlbnVtZXJhYmxlcyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0p
IGVudW1lcmFibGVzID0gbnVsbDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hh
c093blByb3BlcnR5JywgJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51
bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xu
ZnVuY3Rpb24gZm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRpZiAoZW51bWVyYWJsZXMpIGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTsp
e1xuXHRcdHZhciBrID0gZW51bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXkt
dmFsdWUsIHNvIG92ZXJsb2FkU2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1l
dGhvZCBmdW5jdGlvbiwgd2l0aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093
blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xu
XHR9XG59XG4vKjwvbHRJRTg+Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1
bmN0aW9uID0gdGhpcy5GdW5jdGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0
dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4g
ZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYg
KHVzZVBsdXJhbCB8fCB0eXBlb2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGlu
IGEpIHNlbGYuY2FsbCh0aGlzLCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRm
b3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9h
ZEdldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0
dXJuIGZ1bmN0aW9uKGEpe1xuXHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBh
ICE9ICdzdHJpbmcnKSBhcmdzID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MSkgYXJncyA9IGFyZ3VtZW50cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07
XG5cdFx0aWYgKGFyZ3Mpe1xuXHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlz
LCBhcmdzW2ldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMs
IGEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJv
dG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1
ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9
IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59
Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlO1xuXG5BcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVt
ID09IG51bGwpIHJldHVybiBbXTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAm
JiB0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8g
aXRlbSA6IHNsaWNlLmNhbGwoaXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicp
ID8gaXRlbSA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51
bWJlci5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0
KGl0ZW0pO1xuXHRyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xu
XG5TdHJpbmcuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xu
fTtcblxuXG5cbkZ1bmN0aW9uLmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20g
PSBOdW1iZXIuY29udmVydDtcblN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhp
ZGUsIHByb3RlY3RcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuJGhpZGRlbiA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cHJvdGVjdDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBl
ID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9
IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5
cGVbJ2lzJyArIG5hbWVdID0gdHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5c
dFx0XHRvYmplY3QucHJvdG90eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0
dXJuIGxvd2VyO1xuXHRcdFx0fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYg
KG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xu
XHRvYmplY3QuJGNvbnN0cnVjdG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3Ry
dWN0b3IgPSBvYmplY3Q7XG5cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9
IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rp
b24oaXRlbSl7XG5cdHJldHVybiAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9
PSAnbnVtYmVyJyAmJiB0b1N0cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScg
KTtcbn07XG5cbnZhciBob29rcyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdHZhciB0eXBlID0gdHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9v
a3NbdHlwZV0gfHwgKGhvb2tzW3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJl
dHVybjtcblxuXHR2YXIgaG9va3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAw
OyBpIDwgaG9va3MubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0
aWYgKHR5cGVPZihob29rKSA9PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1l
dGhvZCk7XG5cdFx0ZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5c
dHZhciBwcmV2aW91cyA9IHRoaXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0g
bnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRo
b2Q7XG5cblx0aWYgKHRoaXNbbmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVu
Y3Rpb24nKSBleHRlbmQuY2FsbCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1
cm4gbWV0aG9kLmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xu
fTtcblxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2Qg
JiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtc
blx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFt
ZV0gPSBtZXRob2Q7XG59O1xuXG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBs
ZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRl
cigpLFxuXG5cdGFsaWFzOiBmdW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50
LmNhbGwodGhpcywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9h
ZFNldHRlcigpLFxuXG5cdG1pcnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlz
KS5wdXNoKGhvb2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgn
VHlwZScsIFR5cGUpO1xuXG4vLyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9u
KG5hbWUsIG9iamVjdCwgbWV0aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVj
dCksXG5cdFx0cHJvdG90eXBlID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBv
YmplY3QgPSBuZXcgVHlwZShuYW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0g
bWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxu
XHRcdFx0Z2VuZXJpYyA9IG9iamVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5
XTtcblxuXHRcdGlmIChnZW5lcmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBl
ICYmIHByb3RvKSBvYmplY3QuaW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxu
XG5cdGlmIChpc1R5cGUpe1xuXHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5w
cm9wZXJ0eUlzRW51bWVyYWJsZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhv
ZCA9IGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFy
IGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxs
KHByb3RvdHlwZSwgcHJvdG90eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1c
blx0XHRcdGZvciAodmFyIGtleSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90
b3R5cGVba2V5XSwga2V5KTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxu
Zm9yY2UoJ1N0cmluZycsIFN0cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29u
Y2F0JywgJ2NvbnRhaW5zJywgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVv
dGUnLCAncmVwbGFjZScsICdzZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywg
J3N1YnN0cmluZycsICd0cmltJywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0Fy
cmF5JywgQXJyYXksIFtcblx0J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdp
bmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21h
cCcsICdzb21lJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1i
ZXInLCBOdW1iZXIsIFtcblx0J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0
cmluZycsICd0b1ByZWNpc2lvbidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBs
eScsICdjYWxsJywgJ2JpbmQnXG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rl
c3QnXG5dKSgnT2JqZWN0JywgT2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHkn
LCAnZGVmaW5lUHJvcGVydGllcycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93
blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRF
eHRlbnNpb25zJywgJ2lzRXh0ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScs
ICdpc0Zyb3plbidcbl0pKCdEYXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQg
PSBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9u
KCl7XG5cdHJldHVybiArKG5ldyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJv
b2xlYW4pO1xuXG4vLyBmaXhlcyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJv
dG90eXBlLiRmYW1pbHkgPSBmdW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAn
bnVtYmVyJyA6ICdudWxsJztcbn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJl
ci5leHRlbmQoJ3JhbmRvbScsIGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxv
b3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9y
RWFjaCwgZWFjaCwga2V5c1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0
Zm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5k
LCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFj
aDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRr
ZXlzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIg
ayBpbiBvYmplY3Qpe1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkg
a2V5cy5wdXNoKGspO1xuXHRcdH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RF
bnVtYmVyYWJsZUtleShvYmplY3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xu
XHRcdH0pO1xuXHRcdC8qPC9sdElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZv
ckVhY2g6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVj
dCkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5
XSwga2V5LCBvYmplY3QpO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9i
amVjdC5mb3JFYWNoO1xuXG5cbi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJn
aW5nIGFuZCBhcHBlbmRpbmdcblxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dp
dGNoICh0eXBlT2YoaXRlbSkpe1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUo
KTtcblx0XHRjYXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRl
ZmF1bHQ6IHJldHVybiBpdGVtO1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywg
ZnVuY3Rpb24oKXtcblx0dmFyIGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7
XG5cdHdoaWxlIChpLS0pIGNsb25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNs
b25lO1xufSk7XG5cbnZhciBtZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50
KXtcblx0c3dpdGNoICh0eXBlT2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0
XHRpZiAodHlwZU9mKHNvdXJjZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJj
ZVtrZXldLCBjdXJyZW50KTtcblx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUo
Y3VycmVudCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0g
Y3VycmVudC5jbG9uZSgpOyBicmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJl
bnQ7XG5cdH1cblx0cmV0dXJuIHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1l
cmdlOiBmdW5jdGlvbihzb3VyY2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmlu
ZycpIHJldHVybiBtZXJnZU9uZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJn
dW1lbnRzW2ldO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNl
LCBrZXksIG9iamVjdFtrZXldKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxu
XHRjbG9uZTogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3Ig
KHZhciBrZXkgaW4gb2JqZWN0KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5c
dFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xu
XHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgZXh0ZW5kZWQgPSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gZXh0ZW5kZWQpIG9yaWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0
XHRyZXR1cm4gb3JpZ2luYWw7XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5c
blsnT2JqZWN0JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1
bWVudHMnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4v
LyBVbmlxdWUgSURcblxudmFyIFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3Vu
aXF1ZUlEJywgZnVuY3Rpb24oKXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7
XG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBBcnJheSBQcm90b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJv
dmlkZXM6IEFycmF5XG5cbi4uLlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1
PiovXG5cdGV2ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgIWZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0
aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1
ZSA9IHRoaXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJl
c3VsdHMucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5c
dGluZGV4T2Y6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aCA+Pj4gMDtcblx0XHRmb3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxl
bmd0aCArIGZyb20pIDogZnJvbSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5c
blx0bWFwOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3Ro
ID4+PiAwLCByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxs
KGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0
fSxcblxuXHRzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1
cm4gaXRlbSAhPSBudWxsO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0
aG9kTmFtZSl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRc
dHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhv
ZE5hbWVdLmFwcGx5KGl0ZW0sIGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTog
ZnVuY3Rpb24oa2V5cyl7XG5cdFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlz
Lmxlbmd0aCwga2V5cy5sZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIG9ialtrZXlzW2ldXSA9IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRs
aW5rOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtl
eSBpbiBvYmplY3Qpe1xuXHRcdFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0
XHRcdHJlc3VsdFtrZXldID0gdGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07
XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHJlc3VsdDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0
cmV0dXJuIHRoaXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLmxlbmd0aCkgPyB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5c
dGdldFJhbmRvbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNb
TnVtYmVyLnJhbmRvbSgwLCB0aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5j
bHVkZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlz
LnB1c2goaXRlbSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsg
aSsrKSB0aGlzLmluY2x1ZGUoYXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGVyYXNlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGkt
LTspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0
aGlzLmxlbmd0aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgYXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0p
O1xuXHRcdFx0aWYgKHR5cGUgPT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJy
YXkuY29uY2F0KCh0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlw
ZSA9PSAnYXJndW1lbnRzJyB8fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5m
bGF0dGVuKHRoaXNbaV0pIDogdGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0
fSxcblxuXHRwaWNrOiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRo
aXNbaV07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5j
dGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRc
dHZhciByZ2IgPSB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVu
Z3RoID09IDEpIHZhbHVlICs9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAx
Nik7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAn
KSc7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggPCAzKSByZXR1cm4gbnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlz
WzNdID09IDAgJiYgIWFycmF5KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0g
W107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0
aGlzW2ldIC0gMCkudG9TdHJpbmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0g
MSkgPyAnMCcgKyBiaXQgOiBiaXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6
ICcjJyArIGhleC5qb2luKCcnKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTog
RnVuY3Rpb25cblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlr
ZSBjcmVhdGUsIGJpbmQsIHBhc3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiov
XG5cbkZ1bmN0aW9uLmV4dGVuZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5
IHtcblx0XHRcdFx0cmV0dXJuIGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50
KHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0
cmV0dXJuIHRoaXMuYXBwbHkoYmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRj
aCAoZSl7fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5c
dGJpbmQ6IGZ1bmN0aW9uKHRoYXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3Mg
PSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxs
LFxuXHRcdFx0RiA9IGZ1bmN0aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7
XG5cdFx0XHR2YXIgY29udGV4dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5c
dFx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBz
ZWxmLnByb3RvdHlwZTtcblx0XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0
dmFyIHJlc3VsdCA9ICghYXJncyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250
ZXh0KVxuXHRcdFx0XHQ6IHNlbGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdz
LmNvbmNhdChBcnJheS5zbGljZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0
XHRcdHJldHVybiBjb250ZXh0ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5c
dFx0cmV0dXJuIGJvdW5kO1xuXHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVu
Y3Rpb24oYXJncywgYmluZCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9
IG51bGwpIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigp
e1xuXHRcdFx0cmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRc
dH07XG5cdH0sXG5cblx0ZGVsYXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRy
ZXR1cm4gc2V0VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJp
bmQpLCBkZWxheSk7XG5cdH0sXG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwg
YmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBu
dWxsID8gW10gOiBhcmdzKSwgYmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBOdW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQ
cm90b3R5cGVzIGxpa2UgbGltaXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVy
XG5cbi4uLlxuKi9cblxuTnVtYmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1p
biwgbWF4KXtcblx0XHRyZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtc
blx0fSxcblxuXHRyb3VuZDogZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBN
YXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVj
aXNpb24gOiAwKTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHBy
ZWNpc2lvbjtcblx0fSxcblxuXHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpczsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxu
XG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5c
dH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlz
LCBiYXNlIHx8IDEwKTtcblx0fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVz
Jyk7XG5cbihmdW5jdGlvbihtYXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNo
KGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNh
dChBcnJheS5jb252ZXJ0KGFyZ3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVt
ZW50KG1ldGhvZHMpO1xuXG59KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFu
MicsICdjZWlsJywgJ2NvcycsICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAn
cG93JywgJ3NpbicsICdzcXJ0JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNl
LCBjYXBpdGFsaXplLCB0ZXN0LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4u
LlxuKi9cblxuU3RyaW5nLmltcGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1
bmN0aW9uKHN0cmluZywgaW5kZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcyku
c2xpY2UoaW5kZXgpIDogU3RyaW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxc
blx0Ly88LyFFUzY+XG5cblx0dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0
dXJuICgodHlwZU9mKHJlZ2V4KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycg
KyByZWdleCwgcGFyYW1zKSkudGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xu
XHR9LFxuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVw
bGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1h
dGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9
KTtcblx0fSxcblxuXHRoeXBoZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0
aGlzKS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCct
JyArIG1hdGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRj
YXBpdGFsaXplOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgv
XFxiW2Etel0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJD
YXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0p
L2csICdcXFxcJDEnKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0
dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8o
XFx3ezEsMn0pKFxcd3sxLDJ9KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4
LnNsaWNlKDEpLmhleFRvUmdiKGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1
bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwz
fS9nKTtcblx0XHRyZXR1cm4gKHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0
fSxcblxuXHRzdWJzdGl0dXRlOiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyks
IGZ1bmN0aW9uKG1hdGNoLCBuYW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xc
XFwnKSByZXR1cm4gbWF0Y2guc2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAh
PSBudWxsKSA/IG9iamVjdFtuYW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBCcm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmpl
Y3QuIENvbnRhaW5zIEJyb3dzZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQs
IGFuZCB0aGUgQnJvd3NlciBIYXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFtBcnJheSwgRnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczog
W0Jyb3dzZXIsIFdpbmRvdywgRG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2lu
ZG93ID0gdGhpcztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEg
PSB1YS50b0xvd2VyQ2FzZSgpO1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRv
TG93ZXJDYXNlKCkgOiAnJyk7XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdl
IFVBLCBzbyBuZWVkIHRvIGNoZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tp
bmcgaWYgaXQncyBjaHJvbWUuXG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0o
W1xcd1xcZFxcLl0rKS8pO1xuXHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8
aWV8ZmlyZWZveHxjaHJvbWV8dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxk
XFwuXSspPy4qPyhzYWZhcml8KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xc
ZFxcLl0rKXwkKS8pIHx8IFtudWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFd
ID09ICd0cmlkZW50Jyl7XG5cdFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0g
PSBVQVs0XTtcblx0fSBlbHNlIGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdj
aHJvbWUnO1xuXHR9XG5cblx0cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8p
ID8gJ2lvcycgOiAodWEubWF0Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21h
Y3x3aW58bGludXgvKSB8fCBbJ290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicp
IHBsYXRmb3JtID0gJ3dpbmRvd3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlv
bi5wcm90b3R5cGUuZXh0ZW5kLFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFb
M10gOiBVQVsxXSxcblx0XHR2ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYm
IFVBWzRdKSA/IFVBWzRdIDogVUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xu
fTtcblxudmFyIEJyb3dzZXIgPSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFn
ZW50LCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYg
ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9j
dW1lbnRNb2RlO1xufVxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBh
dGg6ICEhKGRvY3VtZW50LmV2YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxc
blx0XHRxdWVyeTogISEoZG9jdW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2lu
ZG93LkpTT04pXG5cdH0sXG5cdHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3Rc
blxuQnJvd3Nlci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwyID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1M
Mi5YTUxIVFRQJyk7XG5cdH07XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0
dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0
dXJuIFhNTEhUVFA7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJu
IE1TWE1MMjtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hN
TDtcblx0fSk7XG5cbn0pKCk7XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5S
ZXF1ZXN0KTtcblxuXG5cbi8vIFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0
aW9uKHRleHQpe1xuXHRpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNT
Y3JpcHQpe1xuXHRcdHdpbmRvdy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZh
ciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQu
c2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0
ID0gdGV4dDtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9j
dW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtc
blxuU3RyaW5nLmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZh
ciBzY3JpcHRzID0gJyc7XG5cdHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+
KFtcXHNcXFNdKj8pPFxcL3NjcmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2Ny
aXB0cyArPSBjb2RlICsgJ1xcbic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMg
PT09IHRydWUpIEJyb3dzZXIuZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMp
ID09ICdmdW5jdGlvbicpIGV4ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7
XG5cbi8vIFdpbmRvdywgRG9jdW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDog
dGhpcy5Eb2N1bWVudCxcblx0V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5F
bGVtZW50LFxuXHRFdmVudDogdGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4k
Y29uc3RydWN0b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4k
ZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWly
cm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0p
O1xuXG50aGlzLkRvY3VtZW50ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0Rv
Y3VtZW50JywgZnVuY3Rpb24oKXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNv
bnZlcnQoJ2RvY3VtZW50JykuaGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFt
ZSwgbWV0aG9kKXtcblx0ZG9jdW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQu
aHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9j
dW1lbnQuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5c
bmlmIChkb2N1bWVudC5leGVjQ29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J0JhY2tncm91bmRJbWFnZUNhY2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4v
KjxsdElFOT4qL1xuaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5l
cil7XG5cdHZhciB1bmxvYWRFdmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVu
dCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50
Lmh0bWwgPSBkb2N1bWVudC53aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93
ID0gZG9jdW1lbnQgPSBudWxsO1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcs
IHVubG9hZEV2ZW50KTtcbn1cblxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxl
Y3Q+Lm9wdGlvbnMgKHJlZmVycyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5j
b252ZXJ0O1xudHJ5IHtcblx0YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59
IGNhdGNoIChlKXtcblx0QXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0
eXBlb2YgaXRlbSAhPSAnc3RyaW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBl
T2YoaXRlbSkgIT0gJ2FycmF5Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9
IG5ldyBBcnJheShpKTtcblx0XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0
XHRcdHJldHVybiBhcnJheTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0
fTtcblxuXHR2YXIgcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJv
dG90eXBlLnNsaWNlO1xuXHRbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2go
ZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRB
cnJheVtuYW1lXSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShB
cnJheS5jb252ZXJ0KGl0ZW0pLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5c
dH0pO1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENs
YXNzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2ls
eSBjcmVhdGluZywgZXh0ZW5kaW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJp
bmcsIEZ1bmN0aW9uLCBOdW1iZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG52YXIgQ2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywg
ZnVuY3Rpb24ocGFyYW1zKXtcblx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBh
cmFtcyA9IHtpbml0aWFsaXplOiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9u
KCl7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBu
dWxsO1xuXHRcdHZhciB2YWx1ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXpl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMu
Y2FsbGVyID0gbnVsbDtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxl
bWVudChwYXJhbXMpO1xuXG5cdG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3Rv
dHlwZS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBw
YXJlbnQgPSBmdW5jdGlvbigpe1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9y
KCdUaGUgbWV0aG9kIFwicGFyZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUg
PSB0aGlzLiRjYWxsZXIuJG5hbWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5w
YXJlbnQsXG5cdFx0cHJldmlvdXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0g
OiBudWxsO1xuXHRpZiAoIXByZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCIn
ICsgbmFtZSArICdcIiBoYXMgbm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xu
XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0
XHR2YXIgRiA9IGZ1bmN0aW9uKCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0
XHRcdFx0b2JqZWN0W2tleV0gPSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0
Y2FzZSAnYXJyYXknOiBvYmplY3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1c
blx0fVxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBr
ZXksIG1ldGhvZCl7XG5cdGlmIChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmln
aW47XG5cdHZhciB3cmFwcGVyID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0
ZWQgJiYgdGhpcy4kY2FsbGVyID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBc
IicgKyBrZXkgKyAnXCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhp
cy5jYWxsZXIsIGN1cnJlbnQgPSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJy
ZW50OyB0aGlzLiRjYWxsZXIgPSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNh
bGxlciA9IGNhbGxlcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBz
ZWxmLCAkb3JpZ2luOiBtZXRob2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59
O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYg
KENsYXNzLk11dGF0b3JzLmhhc093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3Mu
TXV0YXRvcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkg
cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtc
blx0XHRpZiAodmFsdWUuJGhpZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVb
a2V5XSA9IChyZXRhaW4pID8gdmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVs
c2Uge1xuXHRcdE9iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1c
blxuXHRyZXR1cm4gdGhpcztcbn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNz
KXtcblx0a2xhc3MuJHByb3RvdHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNz
O1xuXHRkZWxldGUga2xhc3MuJHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5D
bGFzcy5pbXBsZW1lbnQoJ2ltcGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtc
blxuQ2xhc3MuTXV0YXRvcnMgPSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0
XHR0aGlzLnBhcmVudCA9IHBhcmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNl
KHBhcmVudCk7XG5cdH0sXG5cblx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFy
cmF5LmNvbnZlcnQoaXRlbXMpLmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFu
Y2UgPSBuZXcgaXRlbTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50
LmNhbGwodGhpcywga2V5LCBpbnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0
fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIFV0aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBp
bnRvIHlvdXIgb3duIENsYXNzZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9u
IHRhc2tzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4u
Li5cbiovXG5cbihmdW5jdGlvbigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQk
Y2hhaW46IFtdLFxuXG5cdGNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVu
ZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNhbGxDaGFpbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkg
PyB0aGlzLiRjaGFpbi5zaGlmdCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0
fSxcblxuXHRjbGVhckNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9u
KHN0cmluZyl7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9u
KGZ1bGwsIGZpcnN0KXtcblx0XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59
O1xuXG50aGlzLkV2ZW50cyA9IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRk
RXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9u
KHR5cGUpO1xuXG5cdFx0XG5cblx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRz
W3R5cGVdIHx8IFtdKS5pbmNsdWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFs
ID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9u
KGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlw
ZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6
IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7
XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykg
cmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRz
LmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhp
cywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlz
LiRldmVudHNbdHlwZV07XG5cdFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0
dmFyIGluZGV4ID0gZXZlbnRzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBk
ZWxldGUgZXZlbnRzW2luZGV4XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0
eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0
aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztc
blx0XHR9XG5cdFx0aWYgKGV2ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRm
b3IgKHR5cGUgaW4gdGhpcy4kZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9
IHR5cGUpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0
XHRcdGZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0
XHR0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5c
dHNldE9wdGlvbnM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMg
PSBPYmplY3QubWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1
bWVudHMpKTtcblx0XHRpZiAodGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlv
bnMpe1xuXHRcdFx0aWYgKHR5cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwg
ISgvXm9uW0EtWl0vKS50ZXN0KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVu
dChvcHRpb24sIG9wdGlvbnNbb3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25d
O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0t
LVxuXG5uYW1lOiBDbGFzcy5UaGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGls
aXR5IENsYXNzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0
byBtYWtlIHRoZW0gXCJ0aGVuYWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVM
RklMTEVEID0gMSxcblx0U1RBVEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFz
cy5UaGVuYWJsZSA9IG5ldyBDbGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJ
TkcsXG5cdCR0aGVuYWJsZVJlc3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxc
blxuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xu
XHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dFRoZW5hYmxlU3RhdGU6IGZ1bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0
YXRlKXtcblx0XHRcdGNhc2UgU1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5n
JztcblxuXHRcdFx0Y2FzZSBTVEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmls
bGVkJztcblxuXHRcdFx0Y2FzZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWpl
Y3RlZCc7XG5cdFx0fVxuXHR9LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7
XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQp
e1xuXHRcdGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVk
ID0gJ0lkZW50aXR5Jztcblx0XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicp
IG9uUmVqZWN0ZWQgPSAnVGhyb3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFi
bGUoKTtcblxuXHRcdHRoaXMuJHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFi
bGU6IHRoZW5hYmxlLFxuXHRcdFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0
cmVqZWN0SGFuZGxlcjogb25SZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5h
YmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxu
XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVq
ZWN0ZWQpe1xuXHRcdHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxu
fSk7XG5cblRoZW5hYmxlLmV4dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHR2YXIgdGhlbmFibGU7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRc
dFx0dGhlbmFibGUgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcg
VGhlbmFibGUoKTtcblx0XHRcdHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFz
b24pO1xuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rp
b25zXG5cbmZ1bmN0aW9uIHJlc29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09
IHZhbHVlKXtcblx0XHRcdHJlamVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8g
cmVzb2x2ZSBhIHRoZW5hYmxlIHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVl
ICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0
aW9uJykpe1xuXHRcdFx0dmFyIHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFs
dWUudGhlbjtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVu
YWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0XHRcdHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihm
dW5jdGlvbigpe1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0
XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRc
dFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQg
PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtc
blx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0
aW9uKHJlYXNvbil7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0
XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFi
bGUsIHJlYXNvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRc
dFx0XHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAo
IXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0
XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUs
IHZhbHVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwg
dmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1
ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPSBTVEFURV9GVUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1c
bn1cblxuZnVuY3Rpb24gcmVqZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IHJlYXNvbjtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JF
SkVDVEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0
KHRoZW5hYmxlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5E
SU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFj
dCh0aGVuYWJsZSl7XG5cdHZhciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRc
dHJlc3VsdCA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVu
YWJsZS4kdGhlbmFibGVSZWFjdGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNU
QVRFX0ZVTEZJTExFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5c
dFx0dHlwZSA9ICdmdWxmaWxsSGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVf
UkVKRUNURUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5
cGUgPSAncmVqZWN0SGFuZGxlcic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFu
ZGxlLnBhc3MoW3Jlc3VsdCwgcmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9u
IGhhbmRsZShyZXN1bHQsIHJlYWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0g
cmVhY3Rpb25zLmxlbmd0aDsgaSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rp
b25zW2ldLFxuXHRcdFx0aGFuZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRs
ZXIgPT09ICdJZGVudGl0eScpe1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVz
dWx0KTtcblx0XHR9IGVsc2UgaWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWpl
Y3QocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5c
dFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlm
ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRp
Y2sgPT09ICdmdW5jdGlvbicpe1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2Ug
aWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJ
bW1lZGlhdGU7XG59IGVsc2Uge1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1l
b3V0KGZuLCAwKTtcblx0fTtcbn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3Rc
blxuZGVzY3JpcHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNo
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJz
ZXQ6IGZ1bmN0aW9uKG9iamVjdCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBr
ID0ga2V5c1tpXTtcblx0XHRcdGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtr
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihv
YmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0g
T2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBm
bi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biByZXN1bHRzO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVj
dCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZh
ciBrZXkgPSBrZXlzW2ldLCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwo
YmluZCwgdmFsdWUsIGtleSwgb2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZu
LCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2
YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ld
O1xuXHRcdFx0aWYgKCFmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9
IGtleXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0
dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2td
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0
aW9uKG9iamVjdCl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9
LFxuXG5cdGtleU9mOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9i
amVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsg
aSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09
PSB2YWx1ZSkgcmV0dXJuIGtleTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0
Y29udGFpbnM6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5
T2Yob2JqZWN0LCB2YWx1ZSkgIT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5j
dGlvbihvYmplY3QsIGJhc2Upe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2Jq
ZWN0LmVhY2gob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBr
ZXkgPSBiYXNlICsgJ1snICsga2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3
aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJy
YXknOlxuXHRcdFx0XHRcdHZhciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rp
b24odmFsLCBpKXtcblx0XHRcdFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRc
dFx0XHRcdHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklD
b21wb25lbnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5
U3RyaW5nLnB1c2gocmVzdWx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5q
b2luKCcmJyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5QYXJzZXJcbmRlc2NyaXB0aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5w
cm92aWRlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBh
cnNlZCxcblx0c2VwYXJhdG9ySW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQs
XG5cdGNhY2hlID0ge30sXG5cdHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xc
XFwvZztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5c
dGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5T
bGljayA9PT0gdHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBl
eHByZXNzaW9uKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFp
c1JldmVyc2VkO1xuXHR2YXIgY3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNo
ZSA6IGNhY2hlO1xuXHRpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVu
dENhY2hlW2V4cHJlc3Npb25dO1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0
ZXhwcmVzc2lvbnM6IFtdLFxuXHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5j
dGlvbigpe1xuXHRcdFx0cmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07
XG5cdHNlcGFyYXRvckluZGV4ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNz
aW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVu
Z3RoID0gcGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtw
YXJzZWQucmF3XSA9IChyZXZlcnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xu
XG52YXIgcmV2ZXJzZUNvbWJpbmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNv
bWJpbmF0b3IgPT09ICchJykgcmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0g
JyAnKSByZXR1cm4gJyEnO1xuXHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0
dXJuIGNvbWJpbmF0b3IucmVwbGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNv
bWJpbmF0b3I7XG59O1xuXG52YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2
YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0g
MDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lv
bnNbaV07XG5cdFx0dmFyIGxhc3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjog
cmV2ZXJzZUNvbWJpbmF0b3IoZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGog
PSAwOyBqIDwgZXhwLmxlbmd0aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRc
dFx0aWYgKCFjZXhwLnJldmVyc2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0g
JyAnO1xuXHRcdFx0Y2V4cC5jb21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0
XHRcdGRlbGV0ZSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZl
cnNlKCkucHVzaChsYXN0KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBl
c2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAo
YykgMjAwNy0yMDA4IFN0ZXZlbiBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9y
ZWdleC94cmVnZXhwLz4gTUlUIExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtc
XF17fSgpKis/LlxcXFxeJHwsI1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAn
XFxcXCcgKyBtYXRjaDtcblx0fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8q
XG4jIS91c3IvYmluL2VudiBydWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1Yigv
XFwoXFw/eFxcKXxcXHMrIy4qJHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIo
P3gpXig/OlxcXG5cdCAgXFxcXHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJh
dG9yICAgICAgICAgIFxcblxcXG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAg
ICMgQ29tYmluYXRvciAgICAgICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAg
ICAgICAgICAjIENvbWJpbmF0b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4r
IHwgXFxcXCogKSAgICAgIyBUYWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8
dW5pY29kZT4rICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxc
XC4gICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxu
XHR8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxc
blxcXG5cdFxcXFxbICBcXFxuXHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0
XHRcXFxccyogKFsqXiQhfnxdPz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRc
dFx0XHRcdChbXFxcIiddPykoLio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxc
blx0XHQpPyAgXFxcXHMqICBcXFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8
dW5pY29kZT4rICkoPzpcXFxuXHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwx
Ml0qKVxcXFwxMil8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxc
blx0KT9cXFxuXHQpXCJcbiovXG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJp
bmF0b3I+KylcXFxccyp8KFxcXFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2Rl
PispfFxcXFwuKDx1bmljb2RlPispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihb
Kl4kIX58XT89KSg/OlxcXFxzKig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxd
KD8hXFxcXF0pfCg6KykoPHVuaWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwx
M10qKVxcXFwxMyl8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQu
cmVwbGFjZSgvPGNvbWJpbmF0b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9
XFxcXDs8LycpICsgJ10nKVxuXHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxc
dTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgv
PHVuaWNvZGUxPi9nLCAnKD86WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG4pO1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5c
dHNlcGFyYXRvcixcblx0Y29tYmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRh
Z05hbWUsXG5cdGlkLFxuXHRjbGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1
dGVPcGVyYXRvcixcblx0YXR0cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBz
ZXVkb01hcmtlcixcblx0cHNldWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFz
c1F1b3RlZFZhbHVlLFxuXHRwc2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8
IHNlcGFyYXRvckluZGV4ID09PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJh
dG9ySW5kZXhdID0gW107XG5cdFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFy
YXRvcikgcmV0dXJuICcnO1xuXHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNo
aWxkcmVuIHx8IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21i
aW5hdG9yIHx8ICcgJztcblx0XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNz
aW9uc1tzZXBhcmF0b3JJbmRleF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0
b3JbY29tYmluYXRvckluZGV4XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvcklu
ZGV4XS5yZXZlcnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xu
XHRcdGN1cnJlbnRTZXBhcmF0b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNv
bWJpbmF0b3IsIHRhZzogJyonfTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2Vk
LmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0
YWdOYW1lKXtcblx0XHRjdXJyZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNj
YXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlk
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0
XHRjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRp
ZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtd
O1xuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0
Y3VycmVudFBhcnNlZC5jbGFzc2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0
XHRcdHJlZ2V4cDogbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05h
bWUpICsgJyhcXFxcc3wkKScpXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7
XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NR
dW90ZWRWYWx1ZTtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBz
ZXVkb0NsYXNzVmFsdWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYg
KCFjdXJyZW50UGFyc2VkLnBzZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRc
dGN1cnJlbnRQYXJzZWQucHNldWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVw
bGFjZShyZVVuZXNjYXBlLCAnJyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0
XHRcdHR5cGU6IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdc
blx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5
ID0gYXR0cmlidXRlS2V5LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZh
bHVlID0gKGF0dHJpYnV0ZVZhbHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxu
XHRcdHZhciB0ZXN0LCByZWdleHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtc
blx0XHRcdGNhc2UgJ149JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBl
UmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAn
JD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmli
dXRlVmFsdWUpICsnJCcgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAg
PSBuZXcgUmVnRXhwKCAnKF58XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAr
JyhcXFxcc3wkKScgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVn
RXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICAp
OyBicmVhaztcblx0XHRcdGNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnKj0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZh
bHVlICYmIHZhbHVlLmluZGV4T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVh
aztcblx0XHRcdGNhc2UgJyE9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJl
dHVybiBhdHRyaWJ1dGVWYWx1ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVm
YXVsdCAgIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7
XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15b
KiReXT0kLykudGVzdChhdHRyaWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRc
dFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRc
dH07XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5h
dHRyaWJ1dGVzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRc
dFx0a2V5OiBhdHRyaWJ1dGVLZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3Is
XG5cdFx0XHR2YWx1ZTogYXR0cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7
XG5cblx0fVxuXG5cdHJldHVybiAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9
ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0cmV0dXJuIHBhcnNlKGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhw
ID0gZXNjYXBlUmVnRXhwO1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztc
blxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcp
ID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5GaW5kZXJcbmRlc2NyaXB0aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVu
Z2luZS5cbnByb3ZpZGVzOiBTbGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4u
LlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNo
ZSA9IHt9LFxuXHR0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZl
YXR1cmUgLyBCdWcgZGV0ZWN0aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZu
KXtcblx0cmV0dXJuICgvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycg
KyBmbik7XG59O1xuXG5sb2NhbC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJu
ICghIWRvY3VtZW50LnhtbFZlcnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5n
LmNhbGwoZG9jdW1lbnQpID09ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVu
dC5ub2RlVHlwZSA9PSA5ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAn
SFRNTCcpO1xufTtcblxubG9jYWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5c
blx0Ly8gY29udmVydCBlbGVtZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlm
IGRvY3VtZW50IGNhbm5vdCBiZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxu
XHR2YXIgbm9kZVR5cGUgPSBkb2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkp
OyAvLyBkb2N1bWVudFxuXHRlbHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5v
d25lckRvY3VtZW50OyAvLyBub2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9j
dW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5c
dC8vIGNoZWNrIGlmIGl0J3MgdGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50
ID09PSBkb2N1bWVudCkgcmV0dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0
Ly8gY2hlY2sgaWYgd2UgaGF2ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1l
bnQgYmVmb3JlXG5cblx0dmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0
cm9vdFVpZCA9IHRoaXMuZ2V0VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXND
YWNoZVtyb290VWlkXSxcblx0XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9y
IChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tm
ZWF0dXJlXTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJl
c0NhY2hlW3Jvb3RVaWRdID0ge307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1
cmVzLmlzWE1MRG9jdW1lbnQgPSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5i
cm9rZW5TdGFyR0VCVE5cblx0PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZl
YXR1cmVzLmlkR2V0c05hbWVcblx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5HRUJDTlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3Vt
ZW50XG5cdD0gZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0
dmFyIHN0YXJTZWxlY3RzQ2xvc2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNl
Y29uZENsYXNzTmFtZUdFQkNOLCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJy
b2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191
bmlxdWVpZCc7XG5cdHZhciB0ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
O1xuXG5cdHZhciB0ZXN0Um9vdCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2JvZHknKVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0
ZXN0Tm9kZSk7XG5cblx0Ly8gb24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0
RWxlbWVudHNCeUlkIGRvZXNudCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJzxhIGlkPVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1M
RG9jdW1lbnQgPSAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7
fVxuXG5cdGlmIChmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZv
ciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3RO
b2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2Vs
ZWN0c0NvbW1lbnRzID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3Ro
ID4gMSk7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikg
Zm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5
IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0
ZWQgPSB0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVj
dHNDbG9zZWQgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0u
bm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZl
YXR1cmVzLmJyb2tlblN0YXJHRUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVj
dHNDbG9zZWQ7XG5cblx0XHQvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5z
dGVhZCBvZiBqdXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5c
dFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydc
Ij48L2E+PGIgaWQ9XCInKyBpZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFt
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtc
blx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSl7XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNo
ZXMgcmVzdWx0c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxh
IGNsYXNzPVwiZlwiPjwvYT48YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmly
c3RDaGlsZC5jbGFzc05hbWUgPSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFz
c05hbWUgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAy
KTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50
c0J5Q2xhc3NOYW1lIGRvZXNudCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJz
dCBvbmVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFz
cz1cImFcIj48L2E+PGEgY2xhc3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNv
bmRDbGFzc05hbWVHRUJDTiA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJyku
bGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9r
ZW5HRUJDTiA9IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xh
c3NOYW1lR0VCQ047XG5cdFx0fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwp
e1xuXHRcdFx0Ly8gSUUgOCByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9y
IHF1ZXJ5U2VsZWN0b3JBbGwoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5c
dFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3Rl
ZCA9IHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3Rh
clNlbGVjdHNDbG9zZWRRU0EgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2Vs
ZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRo
IG1peGVkY2FzZSBvbiBxdWlya3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5p
bm5lckhUTUwgPSAnPGEgY2xhc3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuTWl4ZWRDYXNlUVNBID0gIXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5n
dGg7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9u
dCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkg
e1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVk
PVwic2VsZWN0ZWRcIj5hPC9vcHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuQ2hlY2tlZFFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxl
bmd0aCA9PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMg
aW5jb3JyZWN0IHJlc3VsdHMgZm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNl
bGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEg
Y2xhc3M9XCJcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVR
U0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAh
PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBh
IGZvcm0gaGFzIGFuIGlucHV0IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMg
YSByZWZlcmVuY2UgdG8gdGhlIGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8Zm9ybSBhY3Rpb249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4n
O1xuXHRcdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxk
LmdldEF0dHJpYnV0ZSgnYWN0aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0
XHQvLyBuYXRpdmUgbWF0Y2hlc1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRp
dmVNYXRjaGVzU2VsZWN0b3IgPSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVj
dG9yIHx8Ki8gcm9vdC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2Vs
ZWN0b3I7XG5cdFx0aWYgKGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0
XHRcdC8vIGlmIG1hdGNoZXNTZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRh
eGVzIHdlIGNhbiB1c2UgaXRcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5j
YWxsKHJvb3QsICc6c2xpY2snKTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ciA9IG51bGw7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Qu
c2xpY2tfZXhwYW5kbyA9IDE7XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRm
ZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZl
YXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3Zl
Q2hpbGQodGVzdE5vZGUpO1xuXHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxs
O1xuXG5cdC8vIGdldEF0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0
dXJlcy5pc0hUTUxEb2N1bWVudCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0
aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNb
bmFtZV07XG5cdFx0aWYgKG1ldGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZh
ciBhdHRyaWJ1dGVOb2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVy
biAoYXR0cmlidXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0g
OiBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVH
ZXR0ZXJzW25hbWVdO1xuXHRcdHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDog
bm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuaGFzQXR0cmlidXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5o
YXNBdHRyaWJ1dGUpKSA/IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5v
ZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1
dGUpe1xuXHRcdG5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRy
ZXR1cm4gISEobm9kZSAmJiAobm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0
fTtcblxuXHQvLyBjb250YWluc1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlu
cyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIg
bmF0aXZlUm9vdENvbnRhaW5zID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRh
aW5zKSxcblx0XHRuYXRpdmVEb2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05h
dGl2ZUNvZGUoZG9jdW1lbnQuY29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5h
dGl2ZVJvb3RDb250YWlucyAmJiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNv
bnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDog
KG5hdGl2ZVJvb3RDb250YWlucyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlv
bihjb250ZXh0LCBub2RlKXtcblx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24g
ZG9jdW1lbnQuXG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBk
b2N1bWVudCkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhu
b2RlKTtcblx0fSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVu
Y3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEo
Y29udGV4dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0
aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9
PT0gY29udGV4dCkgcmV0dXJuIHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVu
dE5vZGUpKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIg
c29ydGluZ1xuXHQvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5c
blx0ZmVhdHVyZXMuZG9jdW1lbnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24g
fHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9
IDogKCdzb3VyY2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEu
c291cmNlSW5kZXggfHwgIWIuc291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNv
dXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkg
PyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRv
Y3VtZW50KSByZXR1cm4gMDtcblx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0
ZVJhbmdlKCksIGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFS
YW5nZS5zZXRTdGFydChhLCAwKTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5n
ZS5zZXRTdGFydChiLCAwKTtcblx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBh
UmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtc
blx0fSA6IG51bGw7XG5cblx0cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5c
bi8vIE1haW4gTWV0aG9kXG5cbnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/Oltc
XHctXSt8XFwqKSkkLyxcblx0cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8
JycpP1xcXS8sXG5cdHFzYUZhaWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5j
dGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQg
PSB0aGlzLmZvdW5kID0gKGZpcnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAo
IWNvbnRleHQpIHJldHVybiBmb3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNv
bnRleHQgPSBjb250ZXh0LmRvY3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5k
b3cgdG8gYSBkb2N1bWVudFxuXHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZv
dW5kO1xuXG5cdC8vIHNldHVwXG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0
dW5pcXVlcyA9IHRoaXMudW5pcXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAm
JiBhcHBlbmQubGVuZ3RoKSxcblx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVU
eXBlID09IDkpO1xuXG5cdGlmICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQg
PyBjb250ZXh0IDogY29udGV4dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250
ZXh0KTtcblxuXHQvLyBhdm9pZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBl
bmQgYXJyYXlcblx0aWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1
bmlxdWVzW3RoaXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24g
Y2hlY2tzXG5cblx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVz
c2lvbiBpcyBhIHN0cmluZ1xuXG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xu
XHRcdHZhciBzaW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rv
cik7XG5cdFx0c2ltcGxlU2VsZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2
YXIgc3ltYm9sID0gc2ltcGxlU2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxl
Y3RvclsyXTtcblxuXHRcdFx0aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcq
JyAmJiB0aGlzLmJyb2tlblN0YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0
XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlm
IChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0
XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxE
b2N1bWVudCB8fCAhY29udGV4dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0
XHRcdFx0bm9kZSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICgh
bm9kZSkgcmV0dXJuIGZvdW5kO1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUu
Z2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2Vs
ZWN0b3JzO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRc
dGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1
c2gobm9kZSk7XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0
aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSB8fCB0aGlzLmJyb2tlbkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0
dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVz
W2krK107KXtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0
VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVs
c2Uge1xuXHRcdFx0XHRcdHZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysg
U2xpY2suZXNjYXBlUmVnRXhwKG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMg
PSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0g
MDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xh
c3NOYW1lO1xuXHRcdFx0XHRcdFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChj
bGFzc05hbWUpKSkgY29udGludWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rl
O1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IChmaXJzdCkgPyBudWxsIDogZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3Rv
cnMtb3ZlcnJpZGU+Ki9cblxuXHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0
cXVlcnlTZWxlY3RvcjogaWYgKGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlm
ICghdGhpcy5pc0hUTUxEb2N1bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVz
c2lvbl1cblx0XHRcdFx0Ly9UT0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVh
bGx5IG1peGVkIGNhc2Vcblx0XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuQ2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVj
a2VkJykgPiAtMSlcblx0XHRcdFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYg
cmVFbXB0eUF0dHJpYnV0ZS50ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJ
c0RvY3VtZW50IC8vQWJvcnQgd2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRc
dFx0Ly8gIHRoZXJlIGFyZSBtdWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0
XHRcdFx0XHQvLyAgc2luY2Ugd2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290
ZWQgUVNBIGZvciBzaW5nbGUgZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHBy
ZXNzaW9uLmluZGV4T2YoJywnKSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlz
YWJsZVFTQVxuXHRcdFx0KSBicmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJl
c3Npb24gPSBleHByZXNzaW9uLCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRc
dGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVk
IFFTQVxuXHRcdFx0XHQvLyBjcmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVu
dElkID0gX2NvbnRleHQuZ2V0QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7
XG5cdFx0XHRcdF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0
X2V4cHJlc3Npb24gPSAnIycgKyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRc
dGNvbnRleHQgPSBfY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Np
b24pIHx8IG51bGw7XG5cdFx0XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwoX2V4cHJlc3Npb24pO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBD
YWNoZVtleHByZXNzaW9uXSA9IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0
XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0
XHRpZiAoY3VycmVudElkKSBfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtc
blx0XHRcdFx0XHRlbHNlIF9jb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0
XHRjb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRo
aXMuc3RhclNlbGVjdHNDbG9zZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1
ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBm
b3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMg
JiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5c
dFx0cGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNl
ZC5sZW5ndGgpIHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwp
eyAvLyB0aGVyZSBpcyBubyBleHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2Ug
aWYgKGV4cHJlc3Npb24uU2xpY2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9i
amVjdFxuXHRcdHBhcnNlZCA9IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlu
cyhjb250ZXh0LmRvY3VtZW50RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4
cHJlc3Npb24gaXMgYSBub2RlXG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikg
OiBmb3VuZCA9IGV4cHJlc3Npb247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBv
dGhlciBqdW5rXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9y
IHRoZSBudGggc2VsZWN0b3JzXG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhM
YXN0ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0
ID0ge307XG5cblx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3Rv
cnM+Ki9cblxuXHQvLyBpZiBhcHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmds
ZSBzZWxlY3RvciB3aXRoIG9uZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1
c2hVSURcblx0dGhpcy5wdXNoID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVu
Z3RoID09IDEgJiYgcGFyc2VkLmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5w
dXNoQXJyYXkgOiB0aGlzLnB1c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0g
W107XG5cblx0Ly8gZGVmYXVsdCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJp
bmF0b3IsIHRhZywgaWQsIGNsYXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztc
blx0dmFyIGN1cnJlbnRJdGVtcywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RC
aXQsIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChp
ID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9
IDA7IChjdXJyZW50Qml0ID0gY3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29t
YmluYXRvciA9ICdjb21iaW5hdG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYg
KCF0aGlzW2NvbWJpbmF0b3JdKSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0g
KHRoaXMuaXNYTUxEb2N1bWVudCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRv
VXBwZXJDYXNlKCk7XG5cdFx0aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NM
aXN0ICA9IGN1cnJlbnRCaXQuY2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0
LmNsYXNzZXM7XG5cdFx0YXR0cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRw
c2V1ZG9zICAgID0gY3VycmVudEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0g
KGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9
IHt9O1xuXG5cdFx0aWYgKGxhc3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztc
blx0XHRcdHRoaXMuZm91bmQgPSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlx
dWVzID0ge307XG5cdFx0XHR0aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09
IDApe1xuXHRcdFx0dGhpc1tjb21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RC
aXQgJiYgZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlm
IChmaXJzdCAmJiBsYXN0Qml0KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKyl7XG5cdFx0XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0
XHRpZiAoZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0g
MCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0o
Y3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBj
bGFzc0xpc3QpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1c
blxuXHQvLyBzaG91bGQgc29ydCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5
b3UgcGFzcyBtdWx0aXBsZSBleHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2Vk
LmV4cHJlc3Npb25zLmxlbmd0aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAo
Zmlyc3QpID8gKGZvdW5kWzBdIHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5s
b2NhbC51aWR4ID0gMTtcbmxvY2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5n
ZXRVSURYTUwgPSBmdW5jdGlvbihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRl
KHRoaXMudWlkayk7XG5cdGlmICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRu
b2RlLnNldEF0dHJpYnV0ZSh0aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07
XG5cbmxvY2FsLmdldFVJREhUTUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5p
cXVlTnVtYmVyIHx8IChub2RlLnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8v
IHNvcnQgYmFzZWQgb24gdGhlIHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxu
bG9jYWwuc29ydCA9IGZ1bmN0aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0
ZXIpIHJldHVybiByZXN1bHRzO1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7
XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1w
c2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNo
TlRIID0gL14oWystXT9cXGQqKT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJz
ZU5USEFyZ3VtZW50ID0gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1l
bnQubWF0Y2godGhpcy5tYXRjaE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5c
dHZhciBzcGVjaWFsID0gcGFyc2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8
fCAxO1xuXHRpZiAoYSA9PSAnLScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7
XG5cdHBhcnNlZCA9XG5cdFx0KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRc
dChzcGVjaWFsID09ICdvZGQnKVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdl
dmVuJylcdD8ge2E6IDIsIGI6IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5j
YWNoZU5USFthcmd1bWVudF0gPSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRv
ID0gZnVuY3Rpb24oY2hpbGQsIHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJu
IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9k
ZSk7XG5cdFx0aWYgKCF0aGlzW3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRc
dHZhciBlbCA9IHBhcmVudFtjaGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xu
XHRcdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0
XHRcdFx0aWYgKGVsLm5vZGVOYW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0
aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hp
bGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5c
dFx0XHRcdFx0aWYgKGVsLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNb
cG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAo
KGVsID0gZWxbc2libGluZ10pKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1
bWVudCB8fCAnbic7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8
IHRoaXMucGFyc2VOVEhBcmd1bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVy
biBmYWxzZTtcblx0XHR2YXIgYSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNb
cG9zaXRpb25zXVt1aWRdO1xuXHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRp
ZiAoYSA+IDApe1xuXHRcdFx0aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Ug
e1xuXHRcdFx0aWYgKGIgPCBwb3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgo
cG9zIC0gYikgJSBhKSA9PSAwO1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3Jz
PiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlz
Lm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cykpIHRoaXMuZm91bmQucHVzaChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMu
bWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KSl7XG5cdFx0dGhpcy51bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChu
b2RlKTtcblx0fVxufTtcblxubG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0
b3Ipe1xuXHRpZiAodGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3Rvcil7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ci5jYWxsKG5vZGUsIHNlbGVjdG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0r
PylcXHMqXFxdL2csICdbJDE9XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9
XG5cdH1cblxuXHR2YXIgcGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlm
ICghcGFyc2VkKSByZXR1cm4gdHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3Jz
XG5cdHZhciBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRl
ciA9IDAsIGksIGN1cnJlbnRFeHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJl
c3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCA9PSAxKXtcblx0XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0
XHRcdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBl
eHAudGFnIDogZXhwLnRhZy50b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAu
YXR0cmlidXRlcywgZXhwLnBzZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENv
dW50ZXIrKztcblx0XHR9XG5cdH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQu
bGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5k
b2N1bWVudCwgcGFyc2VkKSwgaXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107
KXtcblx0XHRpZiAoaXRlbSA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZh
bHNlO1xufTtcblxubG9jYWwubWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1
bWVudCl7XG5cdHZhciBwc2V1ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNb
cHNldWRvTmFtZV0pIHJldHVybiB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0
dmFyIGF0dHJpYnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4g
KGFyZ3VtZW50KSA/IGFyZ3VtZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxu
bG9jYWwubWF0Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhp
cy5pc1hNTERvY3VtZW50KSA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJD
YXNlKCk7XG5cdFx0aWYgKHRhZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSBy
ZXR1cm4gZmFsc2U7IC8vIEZpeCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdH1cblxuXHRpZiAoaWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJl
dHVybiBmYWxzZTtcblxuXHR2YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChp
ID0gY2xhc3Nlcy5sZW5ndGg7IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsICdjbGFzcycpO1xuXHRcdGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNs
cykpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJp
YnV0ZXMubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAo
cGFydC5vcGVyYXRvciA/ICFwYXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5r
ZXkpKSA6ICF0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtc
blx0fVxuXHRpZiAocHNldWRvcykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRc
dHBhcnQgPSBwc2V1ZG9zW2ldO1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0
LmtleSwgcGFydC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07
XG5cbnZhciBjb21iaW5hdG9ycyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBu
b2RlcywgYW55IGxldmVsXG5cblx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAo
dGhpcy5pc0hUTUxEb2N1bWVudCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRp
dGVtID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0
ZW0gJiYgbm9kZS5hbGwpIHx8ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0
dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lk
XSByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5v
ZGVcblx0XHRcdFx0XHQvLyBpZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVs
ZW1lbnQsIGVsc2UgaXQgd2lsbCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9
IG5vZGUuYWxsW2lkXTtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRc
dFx0aWYgKCFjaGlsZHJlblswXSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZv
ciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2Rl
ID0gaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAm
JiBpZE5vZGUubm9kZVZhbHVlID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0s
IHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5c
dFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4
dCBpcyBpbiB0aGUgZG9tIHdlIHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtp
bmcgdGhlIGdldEJ5SWQgbGFiZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJv
b3QsIG5vZGUpKSByZXR1cm47XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0
XHR9IGVsc2UgaWYgKHRoaXMuZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9k
ZSwgaXRlbSkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0
XHRcdGdldEJ5Q2xhc3M6IGlmIChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKGNsYXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGls
ZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBu
dWxsLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRnZXRCeVRhZzoge1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKHRhZyk7XG5cdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBi
cmVhayBnZXRCeVRhZztcblx0XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51
bGw7XG5cdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChp
dGVtLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0Jz4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gZGlyZWN0IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENo
aWxkKSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChu
b2RlID0gbm9kZS5uZXh0U2libGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9
PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBj
aGlsZFxuXHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0J34nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNp
YmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0
dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1
aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHR9XG5cdH0sXG5cblx0JysrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJs
aW5ncyBhbmQgcHJldmlvdXMgc2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21i
aW5hdG9yOiF+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyEnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKXsgLy8gYWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50
KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyE+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5c
blx0JyErJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZp
b3VzU2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7
XG5cdFx0fVxuXHR9LFxuXG5cdCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFz
dENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2li
bGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5n
ZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRc
dFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xu
XG5mb3IgKHZhciBjIGluIGNvbWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBj
b21iaW5hdG9yc1tjXTtcblxudmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qL1xuXG5cdCdlbXB0eSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUu
Zmlyc3RDaGlsZDtcblx0XHRyZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAm
JiAhKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0
fSxcblxuXHQnbm90JzogZnVuY3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0
aGlzLm1hdGNoTm9kZShub2RlLCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBm
dW5jdGlvbihub2RlLCB0ZXh0KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUu
dGV4dENvbnRlbnQgfHwgJycpLmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3Qt
Y2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3Vz
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBm
dW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0g
cHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFs
c2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNp
YmxpbmcpKSBpZiAobmV4dC5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywg
J3Bvc05USCcpLFxuXG5cdCdudGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygn
bGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1v
Zi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5n
JywgJ3Bvc05USFR5cGUnLCB0cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNy
ZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBl
TGFzdCcsIHRydWUpLFxuXG5cdCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRy
ZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xu
XHR9LFxuXG5cdCdldmVuJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVk
bzpudGgtY2hpbGQnXShub2RlLCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xu
XHR9LFxuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
LnByZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4g
ZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlw
ZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2Rl
Lm5vZGVOYW1lO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYg
KHByZXYubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9
IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5v
ZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0s
XG5cblx0Lyo8L29mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1
ZG9zXG5cblx0J2VuYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlz
YWJsZWQ7XG5cdH0sXG5cblx0J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
IG5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHRyZXR1cm4gbm9kZS5jaGVja2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3Vz
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhp
cy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50
eXBlIHx8IHRoaXMuaGFzQXR0cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQn
cm9vdCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtc
blx0fSxcblxuXHQnc2VsZWN0ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5z
ZWxlY3RlZDtcblx0fVxuXG5cdC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZh
ciBwIGluIHBzZXVkb3MpIGxvY2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8g
YXR0cmlidXRlcyBtZXRob2RzXG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmli
dXRlR2V0dGVycyA9IHtcblxuXHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1s
Rm9yJyBpbiB0aGlzKSA/IHRoaXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtc
blx0fSxcblxuXHQnaHJlZic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhp
cykgPyB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hy
ZWYnKTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5z
dHlsZSkgPyB0aGlzLnN0eWxlLmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtc
blx0fSxcblxuXHQndGFiaW5kZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2Rl
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH0sXG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldEF0dHJpYnV0ZSgndHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlv
bigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhM
ZW5ndGgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVj
aWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0
dHJpYnV0ZUdldHRlcnMuTUFYTEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9j
YWwuU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcn
O1xuXG4vLyBTbGljayBmaW5kZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwg
ZXhwcmVzc2lvbiwgYXBwZW5kKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQpO1xufTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4
cHJlc3Npb24pe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51
bGwsIHRydWUpO1xufTtcblxuLy8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5j
b250YWlucyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KGNvbnRhaW5lcik7XG5cdHJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xu
fTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBm
dW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVy
biBsb2NhbC5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1
dGUgPSBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5c
dHJldHVybiBsb2NhbC5oYXNBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBt
YXRjaGVyXG5cblNsaWNrLm1hdGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAo
IShub2RlICYmIHNlbGVjdG9yKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNl
bGVjdG9yID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7
XG5cdHJldHVybiBsb2NhbC5tYXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xp
Y2sgYXR0cmlidXRlIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1
bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xu
XHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0
aW9uKG5hbWUpe1xuXHRyZXR1cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5c
bi8vIFNsaWNrIHBzZXVkbyBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlv
bihuYW1lLCBmbil7XG5cdGxvY2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwg
YXJndW1lbnQpe1xuXHRcdHJldHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0
cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtc
blx0dmFyIHBzZXVkbyA9IGxvY2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSBy
ZXR1cm4gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBh
cmd1bWVudCk7XG5cdH07XG5cdHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVz
IGFjY2Vzc29yXG5cblNsaWNrLm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxv
Y2FsLm92ZXJyaWRlKHJlZ2V4cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlz
WE1MID0gbG9jYWwuaXNYTUw7XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJl
dHVybiBsb2NhbC5nZXRVSURIVE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlz
LlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRz
ICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBFbGVtZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1w
b3J0YW50IGl0ZW1zIGluIE1vb1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0
aGUgZG9sbGFycyBmdW5jdGlvbiwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGlt
ZS1zYXZlciBtZXRob2RzIHRvIGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRz
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERv
Y3VtZW50LCBBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBh
cnNlciwgU2xpY2suRmluZGVyXVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAk
JCwgSUZyYW1lLCBTZWxlY3RvcnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVs
ZW1lbnQgPSBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVu
dC5Db25zdHJ1Y3RvcnNbdGFnXTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0
b3IocHJvcHMpO1xuXHRpZiAodHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50
LmlkKHRhZykuc2V0KHByb3BzKTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlm
ICghKC9eW1xcdy1dKyQvKS50ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJz
ZSh0YWcpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykg
PyAnZGl2JyA6IHBhcnNlZC50YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBu
dWxsKSBwcm9wcy5pZCA9IHBhcnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2Vk
LmF0dHJpYnV0ZXM7XG5cdFx0aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBs
ID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0
ZXNbaV07XG5cdFx0XHRpZiAocHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5c
dFx0XHRpZiAoYXR0ci52YWx1ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9w
c1thdHRyLmtleV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYg
IWF0dHIub3BlcmF0b3IpIHByb3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYg
KHBhcnNlZC5jbGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNz
J10gPSBwYXJzZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVu
dC5uZXdFbGVtZW50KHRhZywgcHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtc
blx0RWxlbWVudC5wcm90b3R5cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJ
RTggYW5kIElFOSByZXF1aXJlIHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2Zp
cmVFdmVudCA9IChmdW5jdGlvbihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBl
LCBldmVudCl7XG5cdFx0XHRyZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQp
O1xuXHRcdH07XG5cdH0pKEVsZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBU
eXBlKCdFbGVtZW50JywgRWxlbWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJy
YXkucHJvdG90eXBlW25hbWVdKSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFt
ZV0gPSBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMs
IGVsZW1lbnRzID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0
c1tpXSA9IGVsZW1lbnRbbmFtZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50
cyA9IChlbGVtZW50cyAmJiB0eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5c
dH07XG5cblx0RWxlbWVudHMuaW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVs
ZW1lbnQpe1xuXHRFbGVtZW50LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlw
ZSA9IHtcblx0XHQnJGNvbnN0cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0
aW9uLmNvbnZlcnQoJ2VsZW1lbnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihm
dW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0
aG9kO1xuXHR9KTtcbn1cblxuRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJ
RnJhbWUgPSBuZXcgVHlwZSgnSUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFy
cmF5LmxpbmsoYXJndW1lbnRzLCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0
XHRpZnJhbWU6IGZ1bmN0aW9uKG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0
XHR9XG5cdH0pO1xuXG5cdHZhciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJh
bWU7XG5cdGlmIChwYXJhbXMuaWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZy
YW1lKTtcblx0dmFyIG9ubG9hZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRl
bGV0ZSBwcm9wcy5vbmxvYWQ7XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwg
cHJvcHMubmFtZSwgaWZyYW1lID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1l
XycgKyBTdHJpbmcudW5pcXVlSUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChp
ZnJhbWUgfHwgJ2lmcmFtZScsIHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtc
blx0XHRvbmxvYWQuY2FsbChpZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdp
bmRvdy5mcmFtZXNbcHJvcHMuaWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVu
ZXIoJ2xvYWQnLCBvbkxvYWQpO1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50
cyA9IHRoaXMuRWxlbWVudHMgPSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rl
cy5sZW5ndGgpe1xuXHRcdHZhciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9k
ZSk7XG5cdFx0XHRpZiAoIXVuaXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHRcdHRoaXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5c
bkVsZW1lbnRzLnByb3RvdHlwZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJy
YXk7XG5cbm5ldyBUeXBlKCdFbGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZp
bHRlcjogZnVuY3Rpb24oZmlsdGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRo
aXM7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihm
aWx0ZXIpID09ICdzdHJpbmcnKSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0u
bWF0Y2goZmlsdGVyKTtcblx0XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdHB1c2g6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkg
dGhpc1tsZW5ndGgrK10gPSBpdGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0g
bGVuZ3RoKTtcblx0fS5wcm90ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgaXRlbXMgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0p
O1xuXHRcdFx0aWYgKGl0ZW0pIGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBB
cnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdGNvbmNhdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxl
bWVudHModGhpcyk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRl
bHNlIG5ld0VsZW1lbnRzLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50
cztcblx0fS5wcm90ZWN0KCksXG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlz
LnB1c2goY29sbGVjdGlvbltpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRo
aXNbLS10aGlzLmxlbmd0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0p
O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnBy
b3RvdHlwZS5zcGxpY2UsIG9iamVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxu
c3BsaWNlLmNhbGwob2JqZWN0LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMu
aW1wbGVtZW50KCdzcGxpY2UnLCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5n
dGg7XG5cdHZhciByZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hp
bGUgKGxlbmd0aCA+PSB0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1
cm4gcmVzdWx0O1xufS5wcm90ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9u
KG1ldGhvZCwgbmFtZSl7XG5cdEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7
XG5cbkFycmF5Lm1pcnJvcihFbGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxl
bWVudEFjY2VwdHNIVE1MO1xudHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBj
YXRjaCAoZSl7fVxuXG52YXIgZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVy
biAoJycgKyBodG1sKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVv
dDsnKTtcbn07XG4vKjwvbHRJRTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENh
bm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0g
KGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScp
LFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0
VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0g
Y2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3Vt
ZW50LmltcGxlbWVudCh7XG5cblx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5c
dFx0aWYgKHByb3BzKXtcblx0XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRl
ZmF1bHRDaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAn
Y2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVs
bCkgcHJvcHMudmFsdWUgPSAnb24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhl
IHR5cGUgdG8gYmUgc2V0IGJlZm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRc
blx0XHRcdGlmICghY2FuQ2hhbmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRc
dFx0dmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5c
dFx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0
XHRcdFx0aWYgKHByb3BzLnR5cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4g
dGhpcy5pZChzdHlsZUVsZW1lbnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTk+Ki9cblx0XHRcdC8qPGx0SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBl
IHByb3BlcnRpZXMgaW4gSUUgPCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1M
KXtcblx0XHRcdFx0dGFnID0gJzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFn
ICs9ICcgbmFtZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0
XHRpZiAocHJvcHMudHlwZSkgdGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMu
dHlwZSkgKyAnXCInO1xuXHRcdFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
bmFtZTtcblx0XHRcdFx0ZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykp
LnNldChwcm9wcyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGlj
ay51aWRPZih3aW5kb3cpO1xuU2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBs
ZW1lbnQoe1xuXG5cdG5ld1RleHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhp
cy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMud2luZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRc
dHZhciB0eXBlcyA9IHtcblxuXHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mp
e1xuXHRcdFx0XHRpZCA9IFNsaWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9n
LCAnXFxcXCQxJykpO1xuXHRcdFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5v
Y2FzaCkgOiBudWxsO1xuXHRcdFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5v
Y2FzaCl7XG5cdFx0XHRcdFNsaWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYg
IWVsLiRmYW1pbHkgJiYgISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkp
e1xuXHRcdFx0XHRcdHZhciBmaXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8g
d3JhcHBpbmcgbmVlZGVkIGluIElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJl
RXZlbnQgPSBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2
ZW50KHR5cGUsIGV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQo
ZWwsIEVsZW1lbnQuUHJvdG90eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5c
dFx0XHR9LFxuXG5cdFx0XHRvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRc
dFx0XHRpZiAob2JqLnRvRWxlbWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVu
dChkb2MpLCBub2Nhc2gpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07
XG5cblx0XHR0eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cg
PSB0eXBlcy5kb2N1bWVudCA9IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5c
dFx0fTtcblxuXHRcdHJldHVybiBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYg
KGVsICYmIGVsLiRmYW1pbHkgJiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2
YXIgdHlwZSA9IHR5cGVPZihlbCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVz
W3R5cGVdKGVsLCBub2Nhc2gsIGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0
fSkoKVxuXG59KTtcblxuaWYgKHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQn
LCBmdW5jdGlvbihlbCwgbmMpe1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRv
Y3VtZW50KTtcbn0pO1xuXG5XaW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwg
RWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwg
bmV3IEVsZW1lbnRzKTtcblx0fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7
XG5cdH1cblxufSk7XG5cbnZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVu
dCl7XG5cdHJldHVybiBTbGljay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAo
IWRvY3VtZW50LmNvbnRhaW5zKSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQo
Y29udGFpbnMpO1xuXG5cblxuLy8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9y
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikg
cmV0dXJuIGNvbWJpbmF0b3I7XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5w
YXJzZShleHByZXNzaW9uKSk7XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHBy
ZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRl
eHByZXNzaW9uc1tpXVswXS5jb21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhw
cmVzc2lvbjtcbn07XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQ
cmV2aW91czogJyF+Jyxcblx0Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3Is
IG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lv
bil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Np
b24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRB
bGxOZXh0OiAnficsXG5cdGdldEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+
Jyxcblx0Z2V0Q2hpbGRyZW46ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0
b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxl
bWVudCh7XG5cblx0Z2V0Rmlyc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBk
b2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9u
LCAnPicpKVswXSk7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5c
dFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9y
KGV4cHJlc3Npb24sICc+JykpLmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5c
dGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7
XG5cdH0sXG5cblx0Z2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykv
ZywgJ1xcXFwkMScpKSk7XG5cdH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xu
XHRcdHJldHVybiAhZXhwcmVzc2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtc
blx0fVxuXG59KTtcblxuXG5cbmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVu
dCgnJCQnLCBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp
e1xuXHRcdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFy
Y2godGhpcy5kb2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAo
VHlwZS5pc0VudW1lcmFibGUoc2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9y
KTtcblx0fVxuXHRyZXR1cm4gbmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5z
ZXJ0ZXJzXG5cbnZhciBpbnNlcnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0
LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlm
IChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5c
blx0YWZ0ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShj
b250ZXh0LCBlbGVtZW50Lm5leHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5c
dH0sXG5cblx0dG9wOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmlu
c2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmlu
c2VydGVycy5pbnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkg
LyBzZXRQcm9wZXJ0eVxuXG52YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVy
cyA9IHt9O1xuXG4vLyBwcm9wZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5m
b3JFYWNoKFtcblx0J3R5cGUnLCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScs
ICdjZWxsUGFkZGluZycsICdjZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVy
JywgJ3Jvd1NwYW4nLCAndGFiSW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkp
e1xuXHRwcm9wZXJ0aWVzW3Byb3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtc
blxucHJvcGVydGllcy5odG1sID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJU
ZXh0JzogJ3RleHRDb250ZW50JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rp
b24ocmVhbCwga2V5KXtcblx0cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2
YWx1ZSl7XG5cdFx0bm9kZVtyZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNb
a2V5XSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7
XG5cbi8qPGx0SUU5PiovXG5wcm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRy
ZXR1cm4gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0g
J3N0eWxlJykgbm9kZS5zZXQoJ2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRp
ZXMudGV4dF0gPSB2YWx1ZTtcblx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJv
cGVydHlHZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5p
bm5lckhUTUwgOiBnZXR0ZXIobm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7
XG4vKjwvbHRJRTk+Ki9cblxuLy8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFj
dCcsICdub3dyYXAnLCAnaXNtYXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxu
XHQnZGlzYWJsZWQnLCAncmVhZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNp
emUnLFxuXHQnZGVmZXInLCAnZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xz
JywgJ2F1dG9wbGF5Jyxcblx0J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5
LmZvckVhY2goYm9vbHMsIGZ1bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93
ZXJDYXNlKCk7XG5cdGJvb2xlYW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1ts
b3dlcl0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7
XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRy
ZXR1cm4gISFub2RlW2Jvb2xdO1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2Jq
ZWN0LmFwcGVuZChwcm9wZXJ0eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2Rl
LCB2YWx1ZSl7XG5cdFx0KCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAo
dmFsdWUgfHwgJycpIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxu
XG5cdCdmb3InOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2Rl
KSA/IG5vZGUuaHRtbEZvciA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVl
KTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUu
c3R5bGUpID8gbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgn
c3R5bGUnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUp
e1xuXHRcdG5vZGUudmFsdWUgPSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5c
bn0pO1xuXG5wcm9wZXJ0eUdldHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0
dXJuICgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2Rl
LmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFk
b25seSBhbmQgdGhyb3dzXG50cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31c
bmlmIChlbC50eXBlICE9ICdidXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9u
KG5vZGUsIHZhbHVlKXtcblx0bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xu
ZWwgPSBudWxsO1xuLyogPC93ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4v
LyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNo
YW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2Lmlu
bmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYu
aW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9s
dElFOT4qL1xuXG52YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2
b2xhdGlsZUlucHV0VmFsdWUsIGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQu
dmFsdWUgPSAndCc7XG5pbnB1dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUg
PSBpbnB1dC52YWx1ZSAhPSAndCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBB
cmd1bWVudFwiIHdoZW4gdHJ5aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0
aW5wdXQudmFsdWUgPSAnJztcblx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRT
dXBwb3J0ID0gaW5wdXQudHlwZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9
IG51bGw7XG5cbmlmICh2b2xhdGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBw
cm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRc
dHZhciB2YWx1ZSA9IG5vZGUudmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2Rl
LnZhbHVlID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0
UHJvcGVydHksIHNldFByb3BlcnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dl
dEF0dHJpYnV0ZSA9IChmdW5jdGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7
XG5cdHJldHVybiAoZGl2LmdldEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xu
fSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAo
ZnVuY3Rpb24odGVzdCl7XG5cdHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9
XCJzaG91bGRfZml4XCIgdmFsdWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0
dXJuIHRlc3QuY2xvbmVOb2RlKHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0g
MTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5c
bnZhciBoYXNDbGFzc0xpc3QgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNz
TGlzdDtcblxudmFyIGNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NO
YW1lcyA9IChjbGFzc05hbWUgfHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9
O1xuXHRyZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRp
ZiAoY2xhc3NOYW1lICE9PSAnJyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVl
c1tjbGFzc05hbWVdID0gY2xhc3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlz
dCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52
YXIgcmVtb3ZlRnJvbUNsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlz
dC5yZW1vdmUobmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0
ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIo
dGhpcywgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2
YXIgYXR0cmlidXRlQWxsb3dMaXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBh
dHRyaWJ1dGVBbGxvd0xpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywg
e30pO1xuXHRcdFx0LyogPC9sdElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xu
XHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVBbGxv
d0xpc3RbbmFtZV07XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRc
dFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0
SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93
TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0
dHJpYnV0ZXMpe1xuXHRcdGZvciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNl
dFByb3BlcnR5KGF0dHJpYnV0ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdl
dHRlciA9IHByb3BlcnR5R2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0
ZXIpIHJldHVybiBnZXR0ZXIodGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xs
dXRlc0dldEF0dHJpYnV0ZSl7XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9k
ZShuYW1lKSwgYXR0cmlidXRlQWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFs
bG93TGlzdCcsIHt9KTtcblx0XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAo
YXR0ci5leHBhbmRvICYmICFhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIg
b3V0ZXIgPSB0aGlzLm91dGVySFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3Blbmlu
ZyB0YWcgYW5kIGZpbmQgbWVudGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0
ZXIuc3Vic3RyKDAsIG91dGVyLnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSku
aW5kZXhPZihuYW1lKSA8IDApIHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVBbGxvd0xp
c3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dHZhciByZXN1bHQgPSBTbGljay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJu
ICghcmVzdWx0ICYmICFTbGljay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJl
c3VsdDtcblx0fSxcblxuXHRnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdz
ID0gQXJyYXkuY29udmVydChhcmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdl
dFByb3BlcnR5LCB0aGlzKS5hc3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51
bGwpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXku
ZWFjaChhcmd1bWVudHMsIHRoaXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9w
ZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVy
dHkuc2V0KSA/IHByb3BlcnR5LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVy
dHkocHJvcCwgdmFsdWUpO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlv
bihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0cmV0dXJuIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5
KHRoaXMpIDogdGhpcy5nZXRQcm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxu
XG5cdGVyYXNlOiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlBy
b3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3Bl
cnR5LmVyYXNlLmFwcGx5KHRoaXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24o
Y2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5j
bGFzc05hbWUpLmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0Ns
YXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZv
ckVhY2goYWRkVG9DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1l
ICsgJyAnICsgdGhpcy5jbGFzc05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRyZW1vdmVDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFy
IGNsYXNzTmFtZXMgPSBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNz
TmFtZSkuZm9yRWFjaChjbGFzc05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNs
YXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9y
Y2UgPT0gbnVsbCkgZm9yY2UgPSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVy
biAoZm9yY2UpID8gdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhj
bGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQg
PSB0aGlzLCBmcmFnbWVudCwgZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJh
Z21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
aWQoZWxlbWVudHNbaV0sIHRydWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRD
aGlsZChlbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hp
bGQoZnJhZ21lbnQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDog
ZnVuY3Rpb24odGV4dCwgd2hlcmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1
bWVudCgpLm5ld1RleHROb2RlKHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rp
b24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50
LmlkKGVsLCB0cnVlKSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0
OiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10o
dGhpcywgZG9jdW1lbnQuaWQoZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZXBsYWNlczogZnVuY3Rpb24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUp
O1xuXHRcdGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHR3cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRv
Y3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihl
bCwgd2hlcmUpO1xuXHR9LFxuXG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
c2VsZWN0ZWRJbmRleDsgLy8gU2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhB
cnJheS5jb252ZXJ0KHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0
XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3Ry
aW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0
RWxlbWVudHMoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5c
dFx0XHR2YXIgdHlwZSA9IGVsLnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJs
ZWQgfHwgdHlwZSA9PSAnc3VibWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmls
ZScgfHwgdHlwZSA9PSAnaW1hZ2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5n
ZXQoJ3RhZycpID09ICdzZWxlY3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9w
dCl7XG5cdFx0XHRcdC8vIElFXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgn
dmFsdWUnKTtcblx0XHRcdH0pIDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2ti
b3gnKSAmJiAhZWwuY2hlY2tlZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRB
cnJheS5jb252ZXJ0KHZhbHVlKS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBl
b2YgdmFsICE9ICd1bmRlZmluZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVu
dChlbC5uYW1lKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xu
XHRcdH0pO1xuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5c
blxuLy8gYXBwZW5kSFRNTFxuXG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdi
ZWZvcmVCZWdpbicsXG5cdGFmdGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQn
LFxuXHR0b3A6ICdhZnRlckJlZ2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoJ2FwcGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0
aGlzLmluc2VydEFkamFjZW50SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSdd
LCBodG1sKTtcblx0cmV0dXJuIHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2
YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVu
ID0gdGVtcC5jaGlsZE5vZGVzLFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5c
dGlmICghZnJhZ21lbnQpIHJldHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7
XG5cdFx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2Vy
dGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztc
bn0pO1xuXG52YXIgY29sbGVjdGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1
bmN0aW9uKHVpZCl7XG5cdHJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7
fSkpO1xufTtcblxudmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVt
LnVuaXF1ZU51bWJlcjtcblx0aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50
cygpO1xuXHRpZiAoaXRlbS5jbGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7
XG5cdGlmICh1aWQgIT0gbnVsbCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3VpZF07XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVBy
b3BzID0ge2lucHV0OiAnY2hlY2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2
YWx1ZSd9O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtc
blx0XHR2YXIgY2hpbGRyZW4gPSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicp
O1xuXHRcdEFycmF5LmVhY2goY2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2Uo
dGhpcyk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5c
dFx0QXJyYXkuY29udmVydCh0aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiAodGhpcy5wYXJlbnROb2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlz
KSA6IHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xu
XHRcdGNvbnRlbnRzID0gY29udGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMu
Y2xvbmVOb2RlKGNvbnRlbnRzKSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRc
dGlmIChjb250ZW50cyl7XG5cdFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0
aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBj
ZS5sZW5ndGg7IGktLTspe1xuXHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ld
O1xuXHRcdFx0aWYgKCFrZWVwaWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0
Lyo8bHRJRTk+Ki9cblx0XHRcdGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5v
ZGUuY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1l
bnQpO1xuXHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0
XHRcdGlmIChub2RlLm9wdGlvbnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywg
ZW8gPSBlbGVtZW50Lm9wdGlvbnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsg
ai0tOykgbm9bal0uc2VsZWN0ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0
fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50
LnRhZ05hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3Bd
KSBub2RlW3Byb3BdID0gZWxlbWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xu
XHRcdGlmIChoYXNDbG9uZUJ1Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnb2JqZWN0JyksIHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0
Jyk7XG5cdFx0XHRmb3IgKGkgPSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRv
W2ldLm91dGVySFRNTDtcblx0XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3Vt
ZW50LmlkKGNsb25lKTtcblx0fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRd
Lmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBm
bil7XG5cdFx0aWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpe1xuXHRcdFx0Y29sbGVjdGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxu
XHRcdGlmICh0aGlzLmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBl
LCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsg
dHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBm
dW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxz
ZSB0aGlzLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmV0cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3Rv
cmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtc
blx0XHRpZiAoZGZsdCAhPSBudWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJv
cGVydHldID0gZGZsdDtcblx0XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5c
dH0sXG5cblx0c3RvcmU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3Jh
Z2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFs
dWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9w
ZXJ0eSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
Lyo8bHRJRTk+Ki9cbmlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKXtcblx0dmFyIGdjID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0
ZWQsIGNsZWFuKTtcblx0XHRpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFn
ZSgpO1xuXHRcdHdpbmRvdy5yZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3
aW5kb3cuYWRkTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMgPSB7fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtc
blxuXHRzZXQ6IGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHls
ZTtcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3Nz
VGV4dDtcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1Rl
eHQgPSAnJztcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5c
dH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bihodG1sKXtcblx0XHRpZiAoaHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAo
dHlwZU9mKGh0bWwpID09ICdhcnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAodGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwp
IHRoaXMuc3R5bGVTaGVldC5jc3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3Ro
aXMuaW5uZXJIVE1MID0gaHRtbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhp
cy5zZXQoJ2h0bWwnLCAnJyk7XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IHRydWUsIHN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJI
VE1MID0gdHJ1ZTtcblxuLyo8bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBo
dHRwOi8vamRiYXJ0bGV0dC5jb20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpO1xudmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2Pjwv
bmF2Pic7XG5zdXBwb3J0c0hUTUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09
IDEpO1xuaWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFy
dGljbGUgYXNpZGUgYXVkaW8gY2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1
cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNl
Y3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAo
bC0tKSBmcmFnbWVudC5jcmVhdGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8q
PC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9u
LmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgndGFibGUnKTtcblx0dGFibGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5c
dHJldHVybiB0cnVlO1xufSk7XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0cicpLCBodG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1s
O1xuc3VwcG9ydHNUUklubmVySFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51
bGw7XG4vKjwvbHRGRjQ+Ki9cblxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBw
b3J0c1RSSW5uZXJIVE1MIHx8ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQu
UHJvcGVydGllcy5odG1sLnNldCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0
aW9ucyA9IHtcblx0XHRcdHRhYmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRc
dHNlbGVjdDogWzEsICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwg
Jzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0
YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0
XHR0cmFuc2xhdGlvbnMudGhlYWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMu
dGJvZHk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5Piov
XG5cdFx0XHRpZiAodGhpcy5zdHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7
XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMu
Z2V0KCd0YWcnKV07XG5cdFx0XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykg
d3JhcCA9IFswLCAnJywgJyddO1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhp
cywgaHRtbCk7XG5cblx0XHRcdHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3Vw
cG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRc
dHdyYXBwZXIuaW5uZXJIVE1MID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5q
b2luKCcnKTtcblx0XHRcdHdoaWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGls
ZDtcblx0XHRcdHRoaXMuZW1wdHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRp
ZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7
XG5cdFx0XHR3cmFwcGVyID0gbnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGll
cy5odG1sLnNldCk7XG59XG4vKjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8
c2VsZWN0PjxvcHRpb24+czwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJz
dENoaWxkLnZhbHVlICE9ICdzJykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0
aWYgKHRhZyAhPSAnc2VsZWN0JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFs
dWUpO1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0
dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0
ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1
ZSA9IChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQo
J3RleHQnKTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24u
c2VsZWN0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIG9wdGlvbiA9IHRoaXMsIHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRh
ZyAhPSAnc2VsZWN0JyAmJiB0YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5
KCd2YWx1ZScpO1xuXG5cdFx0aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlv
bi5nZXRTZWxlY3RlZCgpWzBdKSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24u
Z2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVj
aWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50
ZXN0Rm9ybSA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3Bl
cnRpZXMuaWQgPSB7XG5cdHNldDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdl
dEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztc
blx0fVxufTtcbi8qPC9JRT4qL1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQg
b2JqZWN0IGNyb3NzLWJyb3dzZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmpl
Y3RdXG5cbnByb3ZpZGVzOiBFdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
X2tleXMgPSB7fTtcbnZhciBub3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xu
XHR2YXIgbm9ybWFsaXplZDtcblx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6
ZWQgPSBldmVudC53aGVlbERlbHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIw
IDogZXZlbnQud2hlZWxEZWx0YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQg
PSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0o
cmF3QW1vdW50ICUgMyA9PSAwID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0
fVxuXHRyZXR1cm4gbm9ybWFsaXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZl
bnQgPSBuZXcgVHlwZSgnRE9NRXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3
aW4pIHdpbiA9IHdpbmRvdztcblx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChl
dmVudC4kZXh0ZW5kZWQpIHJldHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0
aGlzLiRleHRlbmRlZCA9IHRydWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0
dGhpcy5jb250cm9sID0gZXZlbnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7
XG5cdHRoaXMubWV0YSA9IGV2ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0g
ZXZlbnQudHlwZTtcblx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVt
ZW50O1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0
YXJnZXQucGFyZW50Tm9kZTtcblx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xu
XG5cdGlmICh0eXBlLmluZGV4T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5j
b2RlID0gKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlm
dCB8fCB0eXBlICE9ICdrZXlwcmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYg
KHR5cGUgPT0gJ2tleWRvd24nIHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+
IDExMSAmJiBjb2RlIDwgMTI0KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRc
dGVsc2UgaWYgKGNvZGUgPiA5NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtc
blx0XHR9XG5cdFx0aWYgKHRoaXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlKS50b0xvd2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNr
JyB8fCB0eXBlID09ICdkYmxjbGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUg
PT0gJ3doZWVsJyB8fCB0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdt
b3VzZScpID09IDApe1xuXHRcdHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFk
b2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0
bWwgOiBkb2MuYm9keTtcblx0XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVgg
IT0gbnVsbCkgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxc
blx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xp
ZW50WSArIGRvYy5zY3JvbGxUb3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0
eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQg
OiBldmVudC5jbGllbnRYLFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQu
cGFnZVkgLSB3aW4ucGFnZVlPZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAo
dHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdt
b3VzZXdoZWVsJykgdGhpcy53aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRc
dHRoaXMucmlnaHRDbGljayA9IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAy
KTtcblx0XHRpZiAodHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwg
dHlwZSA9PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFy
IG92ZXJUYXJnZXQgPSB0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXIn
O1xuXHRcdFx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVy
VGFyZ2V0ID8gJ2Zyb20nIDogJ3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0
ZWQgJiYgcmVsYXRlZC5ub2RlVHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2Rl
O1xuXHRcdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0
fVxuXHR9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhP
ZignZ2VzdHVyZScpID09IDApe1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtc
blx0XHR0aGlzLnNjYWxlID0gZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0g
ZXZlbnQudGFyZ2V0VG91Y2hlcztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hh
bmdlZFRvdWNoZXM7XG5cdFx0dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3Vj
aGVzO1xuXHRcdGlmICh0b3VjaGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0g
dG91Y2hlc1swXTtcblx0XHRcdHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gu
cGFnZVl9O1xuXHRcdFx0dGhpcy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2gu
Y2xpZW50WX07XG5cdFx0fVxuXHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQg
PSB7fTtcblx0aWYgKCF0aGlzLnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50
LmltcGxlbWVudCh7XG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2
ZW50RGVmYXVsdCgpLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlv
bjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMu
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJs
ZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1
bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQu
cHJldmVudERlZmF1bHQoKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxz
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0g
ZnVuY3Rpb24oY29kZSwga2V5KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlz
O1xufTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9h
ZFNldHRlcih0cnVlKTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0
MCc6ICdkb3duJywgJzM3JzogJ2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywg
JzMyJzogJ3NwYWNlJywgJzgnOiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2Rl
bGV0ZScsICcxMyc6ICdlbnRlcidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxu
bmFtZTogRWxlbWVudC5FdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRo
b2RzIGZvciBkZWFsaW5nIHdpdGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3Vz
ZWVudGVyIGFuZCBtb3VzZWxlYXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBF
dmVudF1cblxucHJvdmlkZXM6IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdHRoaXMuYWRkRXZlbnRzKGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9j
dW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0
XHRpZiAoIWV2ZW50c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtd
fTtcblx0XHRpZiAoZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztc
blx0XHRldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBl
LFxuXHRcdFx0Y3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24g
PSBmbixcblx0XHRcdHNlbGYgPSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1
c3RvbS5vbkFkZCkgY3VzdG9tLm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYg
KGN1c3RvbS5jb25kaXRpb24pe1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkp
IHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0
XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5j
dGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2
YXIgZGVmbiA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9
O1xuXHRcdHZhciBuYXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtc
blx0XHRpZiAobmF0aXZlRXZlbnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRc
dFx0XHRkZWZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2
ZW50KGV2ZW50LCBzZWxmLmdldFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNh
bGwoc2VsZiwgZXZlbnQpID09PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRc
dFx0fVxuXHRcdFx0dGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJd
KTtcblx0XHR9XG5cdFx0ZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0
dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8
ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVd
O1xuXHRcdHZhciBpbmRleCA9IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXgg
PT0gLTEpIHJldHVybiB0aGlzO1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtc
blx0XHRkZWxldGUgbGlzdC5rZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5k
ZXhdO1xuXHRcdHZhciBjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3Vz
dG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRo
aXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNv
bnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAo
RWxlbWVudC5OYXRpdmVFdmVudHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2
YWx1ZSwgYXJndW1lbnRzWzJdKSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlv
bihldmVudHMpe1xuXHRcdGZvciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChl
dmVudCwgZXZlbnRzW2V2ZW50XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3Zl
RXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2Yo
ZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJl
bW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9
XG5cdFx0dmFyIGF0dGFjaGVkID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFh
dHRhY2hlZCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBl
IGluIGF0dGFjaGVkKSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWlu
YXRlKCdldmVudHMnKTtcblx0XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0
YXR0YWNoZWRbZXZlbnRzXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJl
bW92ZUV2ZW50KGV2ZW50cywgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0
YWNoZWRbZXZlbnRzXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2
ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMu
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJl
dHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRz
W3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5
KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5c
dFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1
bmN0aW9uKGZyb20sIHR5cGUpe1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2
YXIgZXZlbnRzID0gZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJl
dHVybiB0aGlzO1xuXHRcdGlmICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4g
ZXZlbnRzKSB0aGlzLmNsb25lRXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlm
IChldmVudHNbdHlwZV0pe1xuXHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihm
bil7XG5cdFx0XHRcdHRoaXMuYWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50
cyA9IHtcblx0Y2xpY2s6IDIsIGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIs
IGNvbnRleHRtZW51OiAyLCAvL21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6
IDIsIERPTU1vdXNlU2Nyb2xsOiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91
c2VvdXQ6IDIsIG1vdXNlbW92ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9t
b3VzZSBtb3ZlbWVudFxuXHRrZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5
Ym9hcmRcblx0b3JpZW50YXRpb25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAy
LCB0b3VjaG1vdmU6IDIsIHRvdWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0
Z2VzdHVyZXN0YXJ0OiAyLCBnZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0
dXJlXG5cdGZvY3VzOiAyLCBibHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIs
IHN1Ym1pdDogMiwgcGFzdGU6IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDog
MiwgdW5sb2FkOiAxLCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29u
dGVudExvYWRlZDogMSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5n
ZTogMSwgcG9wc3RhdGU6IDIsIHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxu
XHRlcnJvcjogMSwgYWJvcnQ6IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5c
bkVsZW1lbnQuRXZlbnRzID0ge1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwn
IGluIGRvY3VtZW50ID8gJ3doZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21v
dXNld2hlZWwnIDogJ0RPTU1vdXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5j
dGlvbihldmVudCl7XG5cdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYg
KHJlbGF0ZWQgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZh
bHNlO1xuXHRyZXR1cm4gKHJlbGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVs
JyAmJiB0eXBlT2YodGhpcykgIT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVk
KSk7XG59O1xuXG5pZiAoJ29ubW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZl
bnRzLm1vdXNlbGVhdmUgPSAyO1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xu
fSBlbHNlIHtcblx0RWxlbWVudC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91
c2VvdmVyJyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMu
bW91c2VsZWF2ZSA9IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcbn1cblxuLyo8bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIp
e1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQu
RXZlbnRzLmNoYW5nZSA9IHtcblx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUg
PSB0aGlzLnR5cGU7XG5cdFx0XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYm
ICh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFu
Z2UnIDogJ2NoYW5nZSc7XG5cdFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtc
blx0XHRcdHJldHVybiBldmVudC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZl
bnQucHJvcGVydHlOYW1lID09ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+
Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5c
bmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVk
ZSB0aGUgZGVsZWdhdGUgbWV0aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2
ZW50XVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVu
Y3Rpb24oKXtcblxudmFyIGV2ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcjtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZl
RXZlbnRzLmZvY3Vzb3V0ID0gMjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2Vs
Zil7XG5cdFx0aWYgKG1hdGNoKHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQs
IGV2ZW50LCB0YXJnZXQpO1xuXHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnRO
b2RlKTtcblx0fVxufTtcblxudmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6
ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0
fSxcblx0bW91c2VsZWF2ZToge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdm
b2N1cycgKyAoZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6
IHRydWVcblx0fSxcblx0Ymx1cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8g
J2JsdXInIDogJ2ZvY3Vzb3V0Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0
SUU5PiovXG52YXIgX2tleSA9ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1
bmN0aW9uKHR5cGUpe1xuXG5cdHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0
XHRyZW1vdmU6IGZ1bmN0aW9uKHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0
cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlz
dCAmJiBsaXN0LmZvcm1zKSBmb3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xu
XHRcdFx0XHQvLyB0aGUgZm9ybSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3Qg
aGF2ZSB0aGVcblx0XHRcdFx0Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQg
Y2FzZSB0aGUgZXZlbnQgd2FzXG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0
aWYgKGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQo
dHlwZSwgbGlzdC5mbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3Jt
ID0gKHRhcmdldC5nZXQoJ3RhZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQu
Z2V0UGFyZW50KCdmb3JtJyk7XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFy
IGxpc3RlbmVycyA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30p
LFxuXHRcdFx0XHRsaXN0ZW5lciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczog
W119LFxuXHRcdFx0XHRmb3JtcyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7
XG5cblx0XHRcdGlmIChmb3Jtcy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRm
b3Jtcy5wdXNoKGZvcm0pO1xuXG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRc
dFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtc
blx0XHRcdGZvcm0uYWRkRXZlbnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5c
blx0XHRcdGxpc3RlbmVyc1t1aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkg
KyB0eXBlICsgJ2xpc3RlbmVycycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFy
IGlucHV0T2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAn
Zm9jdXNpbicsXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0
YXJnZXQpe1xuXHRcdFx0dmFyIGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0
aGlzLnJlbW92ZUV2ZW50cyhldmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0g
PSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZl
bnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVu
dHMpO1xuXHRcdH1cblx0fTtcbn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVj
dC5hcHBlbmQobWFwLCB7XG5cdHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVz
ZXQ6IGZvcm1PYnNlcnZlcigncmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFu
Z2UnKSxcblx0c2VsZWN0OiBpbnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+
Ki9cblxudmFyIHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8u
YWRkRXZlbnQsXG5cdHJlbW92ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxh
eSA9IGZ1bmN0aW9uKG9sZCwgbWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1
c2VDYXB0dXJlKXtcblx0XHRpZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJu
IG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1
ZG9zWzBdLmtleSAhPSAncmVsYXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNl
dWRvcy5zbGljZSgxKS5lYWNoKGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6
JyArIHBzZXVkby5rZXkgKyAocHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJykn
IDogJycpO1xuXHRcdH0pO1xuXHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1
cm4gbWV0aG9kLmNhbGwodGhpcywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZu
KTtcblx0fTtcbn07XG5cbnZhciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlv
bih0eXBlLCBtYXRjaCwgZm4pe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRl
bGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBm
b3IgKHZhciBfdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZu
ICYmIHN0b3JlZFtfdWlkXS5tYXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5c
dFx0dmFyIF90eXBlID0gdHlwZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFw
W3R5cGVdIHx8IHt9O1xuXHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRj
aCA9IGZ1bmN0aW9uKHRhcmdldCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBf
bWF0Y2gpO1xuXHRcdH07XG5cblx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNb
X3R5cGVdO1xuXHRcdGlmIChfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVu
dEV2ZW50LmNvbmRpdGlvbil7XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24g
PSBfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2gg
PSBmdW5jdGlvbih0YXJnZXQsIGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0
LCBldmVudCkgJiYgY29uZGl0aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9
O1xuXHRcdH1cblxuXHRcdHZhciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7
XG5cdFx0dmFyIGRlbGVnYXRvciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNo
LCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7
fTtcblx0XHRzdG9yZWRbdWlkXSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjog
X2ZuLFxuXHRcdFx0ZGVsZWdhdG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5
cGVdID0gc3RvcmVkO1xuXHRcdHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVn
YXRvciwgX21hcC5jYXB0dXJlKTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlw
ZSwgbWF0Y2gsIGZuLCBfdWlkKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRk
ZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQp
IHJldHVybiB0aGlzO1xuXG5cdFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwg
ZGVsZWdhdG9yID0gc3RvcmVkW191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7
fTtcblx0XHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1v
dmUpIF9tYXAucmVtb3ZlKHRoaXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtc
blx0XHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50
LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRc
dHZhciBfX3VpZCwgcztcblx0XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRc
dHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9
PSBmbikgcmV0dXJuIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRj
aCwgZm4sIF9fdWlkKTtcblx0XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0
cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlv
bi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3Vt
ZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBk
ZWxlZ2F0aW9uLmFkZEV2ZW50KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBk
ZWxlZ2F0aW9uLnJlbW92ZUV2ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTog
RWxlbWVudC5TdHlsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJh
Y3Rpbmcgd2l0aCB0aGUgc3R5bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJv
dmlkZXM6IEVsZW1lbnQuU3R5bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0
bWwgPSBkb2N1bWVudC5odG1sLCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUs
IHdoaWNoIGRvZXMgbm90IHJlbW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5l
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVk
JztcbmVsLnN0eWxlLmNvbG9yID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwu
c3R5bGUuY29sb3IgPT0gJ3JlZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJu
cyBib3JkZXIqIHNob3J0aGFuZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0
aC1zdHlsZSBpbnN0ZWFkIG9mIHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHgg
c29saWQgIzEyM2FiYyc7XG5lbC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0Jv
cmRlcnNJbldyb25nT3JkZXIgPSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxs
O1xuLy88L2x0SUU5PlxuXG52YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENv
bXB1dGVkU3R5bGUsXG5cdHN1cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5zdHlsZS5ib3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0
aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0
eWxlcyk7XG59fTtcblxudmFyIGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51
bGwpLFxuXHRoYXNGaWx0ZXIgPSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxw
aGEgPSAvYWxwaGFcXChvcGFjaXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0
eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0
eScsIG9wYWNpdHkpO1xuXHRlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8
fCBvcGFjaXR5ID09IG51bGwgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5
PlxudmFyIHNldEZpbHRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2
YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBl
bGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIg
PSAocmVnZXhwLnRlc3QoZmlsdGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDog
ZmlsdGVyICsgJyAnICsgdmFsdWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxl
LnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3Bh
Y2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1l
bnQuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wYWNpdHkpe1xuXHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50
LmN1cnJlbnRTdHlsZS5oYXNMYXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChv
cGFjaXR5ID09IG51bGwgfHwgb3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwg
cmVBbHBoYSwgJycpO1xuXHRcdGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50
KSAhPSAxKSBzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScp
O1xuXHR9IGVsc2Uge1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3Bh
Y2l0eT0nICsgKG9wYWNpdHkgKiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5c
dH1cbn0gOiBzZXRWaXNpYmlsaXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkg
PyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNp
dHkgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSAnJykgPyAxIDogb3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1
bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8
IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlm
IChmaWx0ZXIpIG9wYWNpdHkgPSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSBudWxsIHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7
XG59IDogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2
ZSgnJG9wYWNpdHknKTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50
LnN0eWxlLnZpc2liaWxpdHkgPT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5
O1xufSkpO1xuXG52YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkg
PyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAn
MCUnLCB0b3A6ICcwJScsIGNlbnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEw
MCUnfSxcblx0aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5k
UG9zaXRpb25YICE9IG51bGwpLFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIg
Y2FtZWxDYXNlID0gZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFj
ZShwcmVmaXhQYXR0ZXJuLCAnJDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZh
ciByZW1vdmVTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0
eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHBy
b3BlcnR5ICsgJ1gnKTtcblx0XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3Zl
QXR0cmlidXRlKHByb3BlcnR5KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFo
YXNHZXRDb21wdXRlZFN0eWxlICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJy
ZW50U3R5bGVbY2FtZWxDYXNlKHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxl
bWVudC5nZXREb2N1bWVudCh0aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVm
YXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVs
bDtcblx0XHRyZXR1cm4gKGNvbXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHBy
b3BlcnR5ID09IGZsb2F0TmFtZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDog
Jyc7XG5cdH0sXG5cblx0c2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0
aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFs
dWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xu
XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3Bl
cnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2
YWx1ZSkgIT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9w
ZXJ0eV0gfHwgJ0AnKS5zcGxpdCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZh
bHVlKS5tYXAoZnVuY3Rpb24odmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAn
Jztcblx0XHRcdFx0cmV0dXJuICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVw
bGFjZSgnQCcsIE1hdGgucm91bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5c
dFx0fSBlbHNlIGlmICh2YWx1ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFs
dWUgPSBNYXRoLnJvdW5kKHZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0g
PSB2YWx1ZTtcblx0XHQvLzxsdElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09
IG51bGwpICYmIGRvZXNOb3RSZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1
dGUpe1xuXHRcdFx0cmVtb3ZlU3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0
aW9uKHByb3BlcnR5KXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0
T3BhY2l0eSh0aGlzKTtcblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxv
YXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVz
ICYmIHByb3BlcnR5LmluZGV4T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVy
biBbJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlv
bihjb3JuZXIpe1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xu
XHRcdFx0fSwgdGhpcykuam9pbignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5z
dHlsZVtwcm9wZXJ0eV07XG5cdFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcp
e1xuXHRcdFx0aWYgKEVsZW1lbnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkp
KXtcblx0XHRcdFx0cmVzdWx0ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5T
aG9ydFN0eWxlc1twcm9wZXJ0eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRc
dFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRo
aXMuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSAmJiAvXmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0
eSkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0
KS9nLCBmdW5jdGlvbihwb3NpdGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1tw
b3NpdGlvbl07XG5cdFx0XHR9KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYg
cHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0
aWYgKHJlc3VsdCl7XG5cdFx0XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBj
b2xvciA9IHJlc3VsdC5tYXRjaCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAo
Y29sb3IpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hl
eCgpKTtcblx0XHR9XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxl
W3Byb3BlcnR5XSl7XG5cdFx0XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0
eSkgJiYgISgvcHgkLy50ZXN0KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9w
ZXJ0eSA9PSAnd2lkdGgnKSA/IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10s
IHNpemUgPSAwO1xuXHRcdFx0XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dFx0c2l6ZSArPSB0aGlzLmdldFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRv
SW50KCkgKyB0aGlzLmdldFN0eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRc
dFx0fSwgdGhpcyk7XG5cdFx0XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2Fw
aXRhbGl6ZSgpXSAtIHNpemUgKyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlcigu
KylXaWR0aHxtYXJnaW58cGFkZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxv
YXQocmVzdWx0KSkpe1xuXHRcdFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dC8vPGx0SUU5PlxuXHRcdGlmIChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRl
cihUb3B8UmlnaHR8Qm90dG9tfExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChy
ZXN1bHQpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4r
KSQvLCAnJDIgJDMgJDEnKTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJl
c3VsdDtcblx0fSxcblxuXHRzZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2
YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0
aW9uKGtleSl7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9
LCB0aGlzKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxl
cyA9IHtcblx0bGVmdDogJ0BweCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAn
QHB4Jyxcblx0d2lkdGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1h
eEhlaWdodDogJ0BweCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFj
a2dyb3VuZENvbG9yOiAncmdiKEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNr
Z3JvdW5kUG9zaXRpb246ICdAcHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250
U2l6ZTogJ0BweCcsIGxldHRlclNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xp
cDogJ3JlY3QoQHB4IEBweCBAcHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcs
IHBhZGRpbmc6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkg
QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAn
QHB4IEBweCBAcHggQHB4JywgYm9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdy
Z2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6
SW5kZXg6ICdAJywgJ3pvb20nOiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0Bw
eCcsIG9wYWNpdHk6ICdAJywgYm9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxu
XG5cblxuXG5FbGVtZW50LlNob3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBi
b3JkZXI6IHt9LCBib3JkZXJXaWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6
IHt9fTtcblxuWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9u
KGRpcmVjdGlvbil7XG5cdHZhciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBB
bGwgPSBFbGVtZW50LlN0eWxlcztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rp
b24oc3R5bGUpe1xuXHRcdHZhciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0
eWxlXVtzZF0gPSBBbGxbc2RdID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyAr
IGRpcmVjdGlvbjtcblx0U2hvcnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAs
IEAsIEApJztcblx0dmFyIGJkdyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBi
ZGMgPSBiZCArICdDb2xvcic7XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0
aFtiZHddID0gU2hvcnRbYmRdW2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3Jk
ZXJTdHlsZVtiZHNdID0gU2hvcnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQu
Ym9yZGVyQ29sb3JbYmRjXSA9IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAs
IEApJztcbn0pO1xuXG5pZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRT
dHlsZXMuYmFja2dyb3VuZFBvc2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFj
a2dyb3VuZFBvc2l0aW9uWTogJ0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVu
dC5EaW1lbnNpb25zXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0
aCBzaXplLCBzY3JvbGwsIG9yIHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93
IG9iamVjdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0g
RWxlbWVudCBwb3NpdGlvbmluZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9v
Lm9yZy8pIGNvZGUgYW5kIHNtYXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6
Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lv
bnMgYmFzZWQgb24gW1lVSV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwg
W0JTRCBMaWNlbnNlXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1s
KS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0Vs
ZW1lbnQuRGltZW5zaW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVu
dC5hcHBlbmRDaGlsZChjaGlsZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9m
ZnNldFBhcmVudCA9PT0gZWxlbWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIg
aGVpZ2h0Q29tcG9uZW50cyA9IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRv
bScsICdib3JkZXJUb3BXaWR0aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBv
bmVudHMgPSBbJ3dpZHRoJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJM
ZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9
IGZ1bmN0aW9uKGVsKXtcblxuXHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwp
LFxuXHRcdGJvdW5kcyA9IHt4OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHdpZHRoQ29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLngg
Kz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxu
dmFyIGlzT2Zmc2V0ID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdw
b3NpdGlvbicpICE9ICdzdGF0aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRT
dGF0aWMgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFi
bGV8dGR8dGgpJC9pKS50ZXN0KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQo
e1xuXG5cdHNjcm9sbFRvOiBmdW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtc
blx0XHRcdHRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdHRoaXMuc2Nyb2xsTGVmdCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5c
dFx0Ly88bHRJRTk+XG5cdFx0Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5v
dCBjYWxjdWxhdGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJp
bGl0eSBoaWRkZW4uXG5cdFx0aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4
OiB0aGlzLm9mZnNldFdpZHRoLCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5
PlxuXG5cdFx0Ly8gVGhpcyBzdmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRl
U2l6ZSgpYCwgY2FuIGJlIHJlbW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxu
XHRcdC8vIEJ1ZyBpbmZvOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzA5ODVcblx0XHRpZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3Zn
Q2FsY3VsYXRlU2l6ZSh0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhp
cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRo
LCB5OiBib3VuZHMuaGVpZ2h0fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDog
MCwgeTogMH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6
ZSgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWln
aHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRo
aXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6
IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9s
bHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0
aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVu
dCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3Np
dGlvbi55ICs9IGVsZW1lbnQuc2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNl
dFBhcmVudDogYnJva2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVu
dCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50
LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNl
dENoZWNrID0gKHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/
IGlzT2Zmc2V0U3RhdGljIDogaXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVu
dC5wYXJlbnROb2RlKSl7XG5cdFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJu
IGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0
cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRc
dHRyeSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0O1xuXG5cdFx0aWYgKGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIg
Ym91bmQgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9j
dW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0
bWxTY3JvbGwgPSBodG1sLmdldFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMu
Z2V0U2Nyb2xscygpLFxuXHRcdFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3Np
dGlvbicpID09ICdmaXhlZCcpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5s
ZWZ0LnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3Jv
bGwueCkgLSBodG1sLmNsaWVudExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkg
KyBlbGVtU2Nyb2xscy55ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5j
bGllbnRUb3Bcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3Np
dGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRp
b247XG5cblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBv
c2l0aW9uLnggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVt
ZW50Lm9mZnNldFRvcDtcblxuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xu
XHRcdH1cblxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVu
Y3Rpb24ocmVsYXRpdmUpe1xuXHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0
XHRcdHNjcm9sbCA9IHRoaXMuZ2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0
XHRcdHg6IG9mZnNldC54IC0gc2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55
XG5cdFx0fTtcblxuXHRcdGlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChy
ZWxhdGl2ZSkpKXtcblx0XHRcdHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9z
aXRpb24oKTtcblx0XHRcdHJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24u
eCAtIGxlZnRCb3JkZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlv
bi55IC0gdG9wQm9yZGVyKHJlbGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtc
blx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlz
Qm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0
XHR2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9
IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54
LFxuXHRcdFx0dG9wOiBwb3NpdGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhl
aWdodDogc2l6ZS55XG5cdFx0fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0
aDtcblx0XHRvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9i
ajtcblx0fSxcblxuXHRjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJu
IHtcblx0XHRcdGxlZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0Jyks
XG5cdFx0XHR0b3A6IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRc
dH07XG5cdH0sXG5cblx0c2V0UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRo
aXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5c
bltEb2N1bWVudCwgV2luZG93XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJl
dHVybiB7eDogZG9jLmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxu
XHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCks
IGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhP
ZmZzZXQgfHwgZG9jLnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xs
VG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2Mg
PSBnZXRDb21wYXRFbGVtZW50KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5c
dFx0XHRib2R5ID0gdGhpcy5nZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1h
dGgubWF4KGRvYy5zY3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRo
Lm1heChkb2Muc2Nyb2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxc
blxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xu
XHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhp
cy5nZXRTaXplKCk7XG5cdFx0cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55
LCByaWdodDogc2l6ZS54LCBoZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxu
fSk7XG5cbi8vIHByaXZhdGUgbWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50Lmdl
dENvbXB1dGVkU3R5bGU7XG5cbmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtc
blx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5c
blxuXG5mdW5jdGlvbiB0b3BCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihl
bGVtZW50LCAnYm9yZGVyLXRvcC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVs
ZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRo
Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8
aHRtbCkkL2kpLnRlc3QoZWxlbWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0
RWxlbWVudChlbGVtZW50KXtcblx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0
cmV0dXJuICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVu
dC5hbGlhcyh7cG9zaXRpb246ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltX
aW5kb3csIERvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRI
ZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5c
blx0Z2V0V2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbCgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTY3JvbGwoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRT
Y3JvbGxXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCku
eDtcblx0fSxcblxuXHRnZXRUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9z
aXRpb24oKS55O1xuXHR9LFxuXG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0UG9zaXRpb24oKS54O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4
dGVuZGVkIGJ5IGFsbCBvdGhlciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJs
ZV1cblxucHJvdmlkZXM6IEZ4XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9
IHRoaXMuRnggPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBP
cHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25T
dGFydDogbmlsLFxuXHRcdG9uQ2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRc
dCovXG5cdFx0ZnBzOiA2MCxcblx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxu
XHRcdGZyYW1lczogbnVsbCxcblx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9y
ZSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1
YmplY3QgPSB0aGlzLnN1YmplY3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdH0sXG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24ocCl7XG5cdFx0XHRyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7
XG5cdFx0fTtcblx0fSxcblxuXHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZnJhbWVTa2lwKXtcblx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/
IChub3cgLSB0aGlzLnRpbWUpIDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZh
bDtcblx0XHRcdHRoaXMudGltZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMu
ZnJhbWUgPCB0aGlzLmZyYW1lcyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24o
dGhpcy5mcmFtZSAvIHRoaXMuZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0
aGlzLmZyb20sIHRoaXMudG8sIGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20s
IHRoaXMudG8sIDEpKTtcblx0XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6
IGZ1bmN0aW9uKG5vdyl7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5j
dGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBk
ZWx0YSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVu
bmluZygpKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0
XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2Fz
ZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7
IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0
OiBmdW5jdGlvbihmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0
dGhpcy5mcmFtZSA9ICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigp
O1xuXHRcdHZhciBmcmFtZXMgPSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlv
bnMuZnBzLCBkdXJhdGlvbiA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0
aW9uID0gRnguRHVyYXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRo
aXMuZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMg
fHwgTWF0aC5yb3VuZCh0aGlzLmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRp
ZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJl
c2V0VGhlbmFibGUodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0
YXJ0JywgdGhpcy5zdWJqZWN0KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVz
ID09IHRoaXMuZnJhbWUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50
KCdjaGFpbkNvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRc
dHRoaXMuZmlyZUV2ZW50KCdzdG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRo
aXMucmVzb2x2ZSh0aGlzLnN1YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtc
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMu
ZnJhbWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlz
LnN1YmplY3QpLmNsZWFyQ2hhaW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmlzUGF1c2VkKCkpIHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGlzdCA9IGluc3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAm
JiBsaXN0LmNvbnRhaW5zKHRoaXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmco
KTtcblx0fVxuXG59KTtcblxuRnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7
XG5cdHJldHVybiAodG8gLSBmcm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9u
cyA9IHsnc2hvcnQnOiAyNTAsICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGds
b2JhbCB0aW1lcnNcblxudmFyIGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxv
b3AgPSBmdW5jdGlvbigpe1xuXHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9
IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlm
IChpbnN0YW5jZSkgaW5zdGFuY2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3Rh
bmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5z
dGFuY2VzW2Zwc10gPSBbXSk7XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBz
XSkgdGltZXJzW2Zwc10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwg
bGlzdCk7XG59O1xuXG52YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxp
c3QgPSBpbnN0YW5jZXNbZnBzXTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7
XG5cdFx0aWYgKCFsaXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5z
dGFuY2VzW2Zwc107XG5cdFx0XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zw
c10pO1xuXHRcdH1cblx0fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1Nc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5
IEZ4LlR3ZWVuLCBGeC5Nb3JwaCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRngu
Q1NTXG5cbi4uLlxuKi9cblxuRnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxc
blxuXHQvL3ByZXBhcmVzIHRoZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVu
Y3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29u
dmVydCh2YWx1ZXMpO1xuXHRcdHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtc
blx0XHRpZiAodG8gPT0gbnVsbCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxl
bWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51
bml0O1xuXHRcdFx0Ly8gYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIv
ZngvYmxvYi9tYXN0ZXIvZnguanMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBl
b2YgZnJvbSA9PSAnc3RyaW5nJyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAm
JiBwYXJzZUZsb2F0KGZyb20pICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3Bl
cnR5LCB0byArIHVuaXQpO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExl
ZnQgb3IgcGl4ZWxXaWR0aFxuXHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRc
dFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxD
YXNlKCldO1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFk
YXB0ZWQgZnJvbSBEZWFuIEVkd2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAw
Ny8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0g
ZWxlbWVudC5zdHlsZS5sZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8g
KyB1bml0O1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0
XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0
XHR9XG5cdFx0XHRcdGZyb20gPSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkg
KiAocGFyc2VGbG9hdChmcm9tKSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9w
ZXJ0eSwgZnJvbSArIHVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRo
aXMucGFyc2UoZnJvbSksIHRvOiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMg
YSB2YWx1ZSBpbnRvIGFuIGFycmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2
YWx1ZSA9IEZ1bmN0aW9uLmNvbnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZh
bHVlID09ICdzdHJpbmcnKSA/IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVl
KTtcblx0XHRyZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJp
bmcodmFsKTtcblx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRngu
Q1NTLlBhcnNlcnMsIGZ1bmN0aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJu
O1xuXHRcdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChw
YXJzZWQgfHwgcGFyc2VkID09PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBh
cnNlcn07XG5cdFx0XHR9KTtcblx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBh
cnNlcjogRnguQ1NTLlBhcnNlcnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9
KTtcblx0fSxcblxuXHQvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0
cywgdXNpbmcgdGhlaXIgcGFyc2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywg
ZGVsdGEpe1xuXHRcdHZhciBjb21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0
aCwgdG8ubGVuZ3RoKSkudGltZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2
YWx1ZTogZnJvbVtpXS5wYXJzZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwg
ZGVsdGEpLCBwYXJzZXI6IGZyb21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQu
JGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBj
b21wdXRlZDtcblx0fSxcblxuXHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRz
ZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdm
eDpjc3M6dmFsdWUnKSB2YWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5l
ZCA9IFtdO1xuXHRcdHZhbHVlLmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0g
cmV0dXJuZWQuY29uY2F0KGJpdC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0
fSk7XG5cdFx0cmV0dXJuIHJldHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdl
IHRvIGFuIGVsZW1lbnRcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2
YWx1ZSwgdW5pdCl7XG5cdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2
YWx1ZSwgdW5pdCkpO1xuXHR9LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0
byBmaW5kIHRoZSB2YWx1ZXMgZm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNl
bGVjdG9yKXtcblx0XHRpZiAoRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5D
YWNoZVtzZWxlY3Rvcl07XG5cdFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdF
eHAoJ14nICsgc2VsZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJj
aFN0eWxlcyA9IGZ1bmN0aW9uKHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0
aW9uKHJ1bGUpe1xuXHRcdFx0XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5
bGVzKHJ1bGUucnVsZXMgfHwgcnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdGlmICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2Vs
ZWN0b3JUZXh0ID0gKHJ1bGUuc2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxh
Y2UoL15cXHcrLywgZnVuY3Rpb24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2Uo
KTtcblx0XHRcdFx0fSkgOiBudWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2Vs
ZWN0b3JUZXN0LnRlc3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFj
aChFbGVtZW50LlN0eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAo
IXJ1bGUuc3R5bGVbc3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47
XG5cdFx0XHRcdFx0dmFsdWUgPSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRc
dHRvW3N0eWxlXSA9ICgoL15yZ2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDog
dmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2go
ZG9jdW1lbnQuc3R5bGVTaGVldHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0g
c2hlZXQuaHJlZjtcblx0XHRcdGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAm
JiBocmVmLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFy
IHJ1bGVzID0gc2hlZXQucnVsZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHls
ZXMocnVsZXMpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0g
dG87XG5cdH1cblxufSk7XG5cbkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9
IHtcblxuXHRDb2xvcjoge1xuXHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAo
dmFsdWUubWF0Y2goL14jWzAtOWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0
cnVlKTtcblx0XHRcdHJldHVybiAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxc
ZCspLFxccyooXFxkKykvKSkpID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFs
c2U7XG5cdFx0fSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRc
dFx0cmV0dXJuIGZyb20ubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1h
dGgucm91bmQoRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xu
XHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5t
YXAoTnVtYmVyKTtcblx0XHR9XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNl
RmxvYXQsXG5cdFx0Y29tcHV0ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUsIHVuaXQpe1xuXHRcdFx0cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xu
XHRcdH1cblx0fSxcblxuXHRTdHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChm
YWxzZSksXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBv
bmU7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVy
bztcblx0XHR9XG5cdH1cblxufTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxu
ZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55
IG51bWJlciBvZiBDU1MgcHJvcGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qg
b2YgcnVsZXMsIG9yIENTUyBiYXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5c
bi4uLlxuKi9cblxuRnguTW9ycGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxc
blxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVs
ZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBh
cmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5
cGVvZiBub3cgPT0gJ3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2
YXIgcCBpbiBub3cpIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9w
dGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rp
b24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBp
biBmcm9tKSBub3dbcF0gPSB0aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRc
dHJldHVybiBub3c7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRc
dGlmICghdGhpcy5jaGVjayhwcm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVv
ZiBwcm9wZXJ0aWVzID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVy
dGllcyk7XG5cdFx0dmFyIGZyb20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHBy
b3BlcnRpZXMpe1xuXHRcdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQs
IHAsIHByb3BlcnRpZXNbcF0pO1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0
dG9bcF0gPSBwYXJzZWQudG87XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0
byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6
IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9w
dGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFt
b3JwaCl7XG5cdFx0XHRtb3JwaCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9
KTtcblx0XHRcdHRoaXMuc3RvcmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4g
bW9ycGg7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5j
dGlvbihwcm9wcyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25z
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0
byBiZSB1c2VkIHdpdGggYW55IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQ
ZW5uZXIsIDxodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFu
ZCBvcHRpbWl6ZWQgdG8gYmUgdXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxu
cHJvdmlkZXM6IEZ4LlRyYW5zaXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxu
XHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9u
cy50cmFuc2l0aW9uIHx8IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0
eXBlb2YgdHJhbnMgPT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgn
OicpO1xuXHRcdFx0dHJhbnMgPSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNb
ZGF0YVswXV0gfHwgdHJhbnNbZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFb
MV0pIHRyYW5zID0gdHJhbnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsy
XSA/IGRhdGFbMl0uY2FwaXRhbGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5z
O1xuXHR9XG5cbn0pO1xuXG5GeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFy
YW1zKXtcblx0cGFyYW1zID0gQXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0g
ZnVuY3Rpb24ocG9zKXtcblx0XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07
XG5cdHJldHVybiBPYmplY3QuYXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxu
XHRcdGVhc2VPdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24o
MSAtIHBvcywgcGFyYW1zKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAocG9zIDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6
ICgyIC0gdHJhbnNpdGlvbigyICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0
fSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8p
e1xuXHRcdHJldHVybiB6ZXJvO1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRl
bmQgPSBmdW5jdGlvbih0cmFuc2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJh
bnNpdGlvbnMpIEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24o
dHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtc
blxuXHRQb3c6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhb
MF0gfHwgNik7XG5cdH0sXG5cblx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgu
cG93KDIsIDggKiAocCAtIDEpKTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRy
ZXR1cm4gMSAtIE1hdGguc2luKE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rp
b24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxu
XG5cdEJhY2s6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0
Qm91bmNlOiBmdW5jdGlvbihwKXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAs
IGIgPSAxOyAxOyBhICs9IGIsIGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAv
IDExKXtcblx0XHRcdFx0dmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEg
KiBwKSAvIDQsIDIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHZhbHVlO1xuXHR9LFxuXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBN
YXRoLnBvdygyLCAxMCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYg
eFswXSB8fCAxKSAvIDMpO1xuXHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQn
LCAnUXVpbnQnXS5lYWNoKGZ1bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9u
c1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVy
biBNYXRoLnBvdyhwLCBpICsgMik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRngu
VHdlZW5cblxuZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNp
dGlvbiBhbnkgQ1NTIHByb3BlcnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBF
bGVtZW50LmZhZGUsIEVsZW1lbnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rp
b24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0g
ZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5c
blx0c2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0
aCA9PSAxKXtcblx0XHRcdG5vdyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnBy
b3BlcnR5IHx8IHRoaXMub3B0aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIo
dGhpcy5lbGVtZW50LCBwcm9wZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7
XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xu
XHRcdHZhciBhcmdzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVy
dHkgPSB0aGlzLm9wdGlvbnMucHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJz
ZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0
XHRyZXR1cm4gdGhpcy5wYXJlbnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7
XG5cbkVsZW1lbnQuUHJvcGVydGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0
d2VlbiA9IHRoaXMucmV0cmlldmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0
d2VlbiA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMu
c3RvcmUoJ3R3ZWVuJywgdHdlZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxu
fTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0
byk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2
YXIgZmFkZSA9IHRoaXMuZ2V0KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5h
cHBlbmQoYXJndW1lbnRzKSwgdG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3Nb
MV0gPSAndG9nZ2xlJztcblx0XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93Jzog
bWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBt
ZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpc
blx0XHRcdFx0dmFyIGZsYWcgPSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0
eWxlKCdvcGFjaXR5JykgPT0gMSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRc
dGFyZ3NbMV0gPSBmbGFnID8gMCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycs
ICFmbGFnKTtcblx0XHRcdFx0dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRk
ZWZhdWx0OiBtZXRob2QgPSAnc3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5l
bGltaW5hdGUoJ2ZhZGU6ZmxhZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdz
KTtcblx0XHR2YXIgdG8gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9k
ID09ICdzZXQnKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8g
J2hpZGRlbicgOiAndmlzaWJsZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRp
ZiAoZmFkZS4kY2hhaW4ubGVuZ3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xu
XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7
XG5cdFx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRc
dH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRp
ZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhp
cy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlz
LmNhbGxDaGFpbigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0aGlnaGxpZ2h0OiBmdW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5c
dFx0XHRlbmQgPSB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJl
bnQnKSA/ICcjZmZmJyA6IGVuZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3
ZWVuJyk7XG5cdFx0dHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2Zm
ZmY4OCcsIGVuZCkuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tn
cm91bmQtY29sb3InLCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0
XHR0d2Vlbi5jYWxsQ2hhaW4oKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246
IFBvd2VyZnVsIGFsbCBwdXJwb3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3Qu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxl
bWVudCwgQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5c
bnByb3ZpZGVzOiBSZXF1ZXN0XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0
eSA9IGZ1bmN0aW9uKCl7fSxcblx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBu
ZXcgQnJvd3Nlci5SZXF1ZXN0KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcg
Q2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5U
aGVuYWJsZV0sXG5cblx0b3B0aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30s
XG5cdFx0b25Mb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVz
czogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30s
XG5cdFx0b25DYW5jZWw6IGZ1bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJl
c3BvbnNlVGV4dCwgcmVzcG9uc2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIp
e30sXG5cdFx0b25FeGNlcHRpb246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRc
dG9uVGltZW91dDogZnVuY3Rpb24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAn
Jyxcblx0XHR3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRh
OiAnJyxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRw
UmVxdWVzdCcsXG5cdFx0XHQnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBh
cHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxc
blx0XHRmb3JtYXQ6IGZhbHNlLFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25v
cmUnLFxuXHRcdGlzU3VjY2VzczogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJs
RW5jb2RlZDogdHJ1ZSxcblx0XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czog
ZmFsc2UsXG5cdFx0ZXZhbFJlc3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5v
Q2FjaGU6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHRoaXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9
LFxuXG5cdG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhy
O1xuXHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtc
blx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVu
Y3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7
XG5cdFx0XHR0aGlzLnN0YXR1cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5c
dFx0fS5iaW5kKHRoaXMpKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5c
dFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQg
PSBlbXB0eTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50
aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3Bv
bnNlID0ge3RleHQ6IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5y
ZXNwb25zZVhNTH07XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0
aGlzLnN0YXR1cykpXG5cdFx0XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlz
LnJlc3BvbnNlLnhtbCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5c
blx0aXNTdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztc
blx0XHRyZXR1cm4gKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRp
c1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxu
XG5cdHByb2Nlc3NTY3JpcHRzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25z
LmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRl
cignQ29udGVudC10eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVy
biB0ZXh0LnN0cmlwU2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5c
dHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5w
cm9jZXNzU2NyaXB0cyh0ZXh0KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQs
IHhtbDogeG1sfSk7XG5cdH0sXG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJn
dW1lbnRzKS5jYWxsQ2hhaW4oKTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMub25GYWlsdXJlKCk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4
aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtc
blx0fSxcblxuXHRsb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVu
dCgnbG9hZHN0YXJ0JywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBm
dW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0
aGlzLnhocl0pO1xuXHR9LFxuXG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJl
RXZlbnQoJ3RpbWVvdXQnLCB0aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3Rp
bWVvdXQnLCB4aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihu
YW1lLCB2YWx1ZSl7XG5cdFx0dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4g
RnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJl
c3BvbnNlSGVhZGVyKG5hbWUpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6
IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYg
KCF0aGlzLmNoZWNrKG9wdGlvbnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5p
c1N1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRc
dHRoaXMucnVubmluZyA9IHRydWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtc
blx0XHRpZiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9
IHtkYXRhOiBvcHRpb25zfTtcblxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0
aW9ucyA9IE9iamVjdC5hcHBlbmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhv
ZDogb2xkLm1ldGhvZH0sIG9wdGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1
cmwgPSBTdHJpbmcob3B0aW9ucy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2Vy
Q2FzZSgpO1xuXG5cdFx0c3dpdGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVu
dCc6IGRhdGEgPSBkb2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmlu
ZyhkYXRhKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2
YXIgZm9ybWF0ID0gJ2Zvcm1hdD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEg
PSAoZGF0YSkgPyBmb3JtYXQgKyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZW11bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0
aG9kKSl7XG5cdFx0XHR2YXIgX21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRk
YXRhID0gKGRhdGEpID8gX21ldGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0
aG9kID0gJ3Bvc3QnO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAm
JiBbJ3Bvc3QnLCAncHV0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2Rpbmcg
PSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5l
bmNvZGluZyA6ICcnO1xuXHRcdFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0
aWYgKCF1cmwpIHVybCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRy
aW1Qb3NpdGlvbiA9IHVybC5sYXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24g
PiAtMSAmJiAodHJpbVBvc2l0aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJs
LnN1YnN0cigwLCB0cmltUG9zaXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hl
KVxuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3Ry
aW5nLnVuaXF1ZUlEKCk7XG5cblx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1l
dGhvZCA9PSAnZGVsZXRlJykpe1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEg
PyAnJicgOiAnPycpICsgZGF0YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZh
ciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5v
bmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9n
cmVzcyA9IHRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3Blbiht
ZXRob2QudG9VcHBlckNhc2UoKSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9u
cy51c2VyLCB0aGlzLm9wdGlvbnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndp
dGhDcmVkZW50aWFscykgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRl
bnRpYWxzID0gdHJ1ZTtcblxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3Rh
dGVDaGFuZ2UuYmluZCh0aGlzKTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVu
Y3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhl
YWRlcihrZXksIHZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVF
dmVudCgnZXhjZXB0aW9uJywgW2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3Jl
YXNvbjogJ2V4Y2VwdGlvbicsIHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0
XHR9LCB0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRp
bmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9
XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0
XHRpZiAoIXRoaXMub3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxz
ZSBpZiAodGhpcy5vcHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVs
YXkodGhpcy5vcHRpb25zLnRpbWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRo
aXM7XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xu
XHRcdHhoci5hYm9ydCgpO1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91
dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIu
b25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhy
Lm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5l
dyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0
dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1
dCcsICdkZWxldGUnLCAncGF0Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVM
RVRFJywgJ1BBVENIJywgJ0hFQUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNb
bWV0aG9kXSA9IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRo
b2Q6IG1ldGhvZFxuXHRcdH07XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBk
YXRhO1xuXHRcdHJldHVybiB0aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0
LmltcGxlbWVudChtZXRob2RzKTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0
c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJyku
Y2FuY2VsKCk7XG5cdFx0c2VuZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmll
dmUoJ3NlbmQnKTtcblx0XHRpZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtc
blx0XHRcdFx0ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21l
dGhvZCcpIHx8ICdwb3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRc
dFx0dGhpcy5zdG9yZSgnc2VuZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0
fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtc
blx0XHR2YXIgc2VuZGVyID0gdGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0
YTogdGhpcywgdXJsOiB1cmwgfHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1M
XG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRk
aXRpb25hbCBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0
XVxuXG5wcm92aWRlczogUmVxdWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1
cGRhdGU6IGZhbHNlLFxuXHRcdGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUs
XG5cdFx0ZmlsdGVyOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0
L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0
c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMs
IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0
cmlwU2NyaXB0cyhmdW5jdGlvbihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9
IHNjcmlwdDtcblx0XHR9KTtcblxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2go
Lzxib2R5W14+XSo+KFtcXHNcXFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVz
cG9uc2UuaHRtbCA9IG1hdGNoWzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdicp
LnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAu
Y2hpbGROb2Rlcztcblx0XHRyZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0
aW9ucy5maWx0ZXIgfHwgJyonKTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2Uu
dHJlZSA9IHJlc3BvbnNlLmVsZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0
XHR2YXIgdXBkYXRlID0gZG9jdW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0
XHRpZiAob3B0aW9ucy5maWx0ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5c
dFx0XHRlbHNlIHVwZGF0ZS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2Ug
aWYgKG9wdGlvbnMuYXBwZW5kKXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRp
b25zLmFwcGVuZCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRz
LnJldmVyc2UoKS5pbmplY3QoYXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAu
Z2V0Q2hpbGRyZW4oKSk7XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93
c2VyLmV4ZWMocmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNw
b25zZS50cmVlLCByZXNwb25zZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2
YXNjcmlwdCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50
czogcmVzcG9uc2UuZWxlbWVudHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJl
c3BvbnNlLmphdmFzY3JpcHR9KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxv
YWQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMu
Z2V0KCdsb2FkJykuY2FuY2VsKCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9
IHRoaXMucmV0cmlldmUoJ2xvYWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5l
dyBSZXF1ZXN0LkhUTUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMs
IG1ldGhvZDogJ2dldCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9
XG5cdFx0cmV0dXJuIGxvYWQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dGxvYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5Lmxpbmso
YXJndW1lbnRzLCB7ZGF0YTogVHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxu
ZGVzY3JpcHRpb246IEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cblNlZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWly
ZXM6IFtBcnJheSwgU3RyaW5nLCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxu
XG4uLi5cbiovXG5cbmlmICh0eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0g
e307XG5cblxuXG4oZnVuY3Rpb24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYics
ICdcXHQnOiAnXFxcXHQnLCAnXFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAn
XFxcXHInLCAnXCInIDogJ1xcXFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2Nh
cGUgPSBmdW5jdGlvbihjaHIpe1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAo
JzAwMDAnICsgY2hyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xu
XG5KU09OLnZhbGlkYXRlID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJl
cGxhY2UoL1xcXFwoPzpbXCJcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5c
blx0XHRcdFx0XHRyZXBsYWNlKC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8
LT9cXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0
XHRyZXBsYWNlKC8oPzpefDp8LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15b
XFxdLDp7fVxcc10qJC8pLnRlc3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5z
dHJpbmdpZnkgPyBmdW5jdGlvbihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtc
bn0gOiBmdW5jdGlvbihvYmope1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50
b0pTT04oKTtcblxuXHRzd2l0Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxu
XHRcdFx0cmV0dXJuICdcIicgKyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBl
c2NhcGUpICsgJ1wiJztcblx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2Jq
Lm1hcChKU09OLmVuY29kZSkuY2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNl
ICdoYXNoJzpcblx0XHRcdHZhciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFs
dWUpO1xuXHRcdFx0XHRpZiAoanNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6
JyArIGpzb24pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xu
XHRcdGNhc2UgJ251bWJlcic6IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0
Y2FzZSAnbnVsbCc6IHJldHVybiAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5c
bkpTT04uc2VjdXJlID0gdHJ1ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywg
c2VjdXJlKXtcblx0aWYgKCFzdHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJl
dHVybiBudWxsO1xuXG5cdGlmIChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7
XG5cdGlmIChzZWN1cmUpe1xuXHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShz
dHJpbmcpO1xuXHRcdGlmICghSlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3Io
J0pTT04gY291bGQgbm90IGRlY29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5k
IHRoZSB2YWx1ZSBpcyBub3Qgc2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsg
c3RyaW5nICsgJyknKTtcbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5K
U09OXG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGgg
YWRkaXRpb25hbCBtZXRob2RzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09O
XVxuXG5wcm92aWRlczogUmVxdWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
Km9uRXJyb3I6IGZ1bmN0aW9uKHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5c
dH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQo
b3B0aW9ucyk7XG5cdFx0T2JqZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2Nl
cHQnOiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0
fSk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5c
dFx0dHJ5IHtcblx0XHRcdGpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0
ZXh0LCB0aGlzLm9wdGlvbnMuc2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0
aGlzLmZpcmVFdmVudCgnZXJyb3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0
XHR9XG5cdFx0aWYgKGpzb24gPT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0dGhpcy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJl
c29sdmUoe2pzb246IGpzb24sIHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogQ29va2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcs
IHJlYWRpbmcsIGFuZCBkZWxldGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkg
UGV0ZXItUGF1bCBLb2NoIChodHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09w
dGlvbnMsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29v
a2llID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6
IHtcblx0XHRwYXRoOiAnLycsXG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFs
c2UsXG5cdFx0c2VjdXJlOiBmYWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5j
b2RlOiB0cnVlLFxuXHRcdGh0dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRP
cHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5lbmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVl
KTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0
aGlzLm9wdGlvbnMuZG9tYWluO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0g
JzsgcGF0aD0nICsgdGhpcy5vcHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJh
dGlvbil7XG5cdFx0XHR2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUo
ZGF0ZS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAx
MDAwKTtcblx0XHRcdHZhbHVlICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtc
blx0XHR9XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xu
XHRcdHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVl
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IHZhbHVlID0gdGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxz
KicgKyB0aGlzLmtleS5lc2NhcGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAo
dmFsdWUpID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0
ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVy
Z2Uoe30sIHRoaXMub3B0aW9ucywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUsIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZh
bHVlKTtcbn07XG5cbkNvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBD
b29raWUoa2V5KS5yZWFkKCk7XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwg
b3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xu
fTtcblxuLypcbi0tLVxuXG5uYW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
dGhlIGN1c3RvbSBldmVudCBkb21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbQnJvd3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlk
ZXM6IFtET01SZWFkeSwgRG9tUmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywg
ZG9jdW1lbnQpe1xuXG52YXIgcmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNo
b3VsZFBvbGwsXG5cdHRpbWVyLFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpO1xuXG52YXIgZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQo
dGltZXIpO1xuXHRpZiAoIXJlYWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1
ZTtcblx0XHRkb2N1bWVudC5yZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJl
YWR5KS5yZW1vdmVMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1
bWVudC5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVh
ZHknKTtcblx0fVxuXHQvLyBjbGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cg
PSB0ZXN0RWxlbWVudCA9IG51bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRm
b3IgKHZhciBpID0gY2hlY2tzLmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRk
b21yZWFkeSgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5c
bnZhciBwb2xsID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFj
aGVjaygpKSB0aW1lciA9IHNldFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRk
TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4v
LyBkb1Njcm9sbCB0ZWNobmlxdWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53
Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93
cyB3aGVuIHRoZSBET00gaXMgbm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIg
ZG9TY3JvbGxXb3JrcyA9IGZ1bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9T
Y3JvbGwoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuLy8gSWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0
byBkZXRlcm1pbmUgZG9tcmVhZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxl
bWVudC5kb1Njcm9sbCAmJiAhZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3Jv
bGxXb3Jrcyk7XG5cdHNob3VsZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChk
b2N1bWVudC5yZWFkeVN0YXRlKSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUg
PSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0
YXRlID09ICdjb21wbGV0ZScpO1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBk
b2N1bWVudCkgZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5lbHNlIHNob3VsZFBvbGwgPSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5F
bGVtZW50LkV2ZW50cy5kb21yZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRp
ZiAocmVhZHkpIGZuLmNhbGwodGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRv
bXJlYWR5IGZpcmVzIGJlZm9yZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNl
OiAnbG9hZCcsXG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlz
ID09IHdpbmRvdykgZm4uY2FsbCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdGlmICh0aGlzID09IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVs
ZXRlIEVsZW1lbnQuRXZlbnRzLmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59
O1xuXG4vLyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFk
ZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3
aW5kb3csIGRvY3VtZW50KTtcbiIKIAogLyoqKi8gfSksCiAvKiA0MTIgKi8KQEAgLTExMzg5NCwx
MyArMTEzODk0LDEzIEBAIG1vZHVsZS5leHBvcnRzID0gIi8qanNoaW50IHF1b3RtYXJrOiBmYWwK
IC8qIDQyMCAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUu
ZXhwb3J0cyA9ICIvLyBsaWJzL2pxdWVyeS9qcXVlcnkuZC50c1xuLyogKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLlxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXG50aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxu
TGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxu
VEhJUyBDT0RFIElTIFBST1ZJREVEICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWVxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5D
TFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxuV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNI
QU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXG5cblNlZSB0aGUgQXBhY2hlIFZlcnNpb24g
Mi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xu
YW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog
Ki9cblxuLy8gVHlwaW5nIGZvciB0aGUgalF1ZXJ5IGxpYnJhcnksIHZlcnNpb24gMS4xMC54IC8g
Mi4wLnhcbi8vIFByb2plY3Q6IGh0dHA6Ly9qcXVlcnkuY29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6
IEJvcmlzIFlhbmtvdiA8aHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292Lz4sIENocmlzdGlh
biBIb2ZmbWVpc3RlciA8aHR0cHM6Ly9naXRodWIuY29tL2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZl
bnRvbiwgRGl1bGxlaSBHb21lcyA8aHR0cHM6Ly9naXRodWIuY29tL0RpdWxsZWk+LCBUYXNzIEls
aW9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS90YXNvaWxpPiwgSmFzb24gU3dlYXJpbmdlbiwg
U2VhbiBIaWxsIDxodHRwczovL2dpdGh1Yi5jb20vc2VhbnNraT4sIEd1dXMgR29vc3NlbnMgPGh0
dHBzOi8vZ2l0aHViLmNvbS9HdXV6PiwgS2VsbHkgU3VtbWVybGluIDxodHRwczovL2dpdGh1Yi5j
b20va3N1bW1lcmxpbj4sIEJhc2FyYXQgQWxpIFN5ZWQgPGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNh
cmF0PiwgTmljaG9sYXMgV29sdmVyc29uIDxodHRwczovL2dpdGh1Yi5jb20vbndvbHZlcnNvbj4s
IERlcmVrIENpY2Vyb25lIDxodHRwczovL2dpdGh1Yi5jb20vZGVyZWtjaWNlcm9uZT4sIEFuZHJl
dyBHYXNwYXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9BbmRyZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNv
biBGaXNoZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qYW1lc2hmaXNoZXI+LCBTZWlraWNoaSBLb25k
byA8aHR0cHM6Ly9naXRodWIuY29tL3NlaWtpY2hpPiwgQmVuamFtaW4gSmFja21hbiA8aHR0cHM6
Ly9naXRodWIuY29tL2JlbmphbWluamFja21hbj4sIFBvdWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0
aHViLmNvbS9zMDkzMjk0PiwgSm9zaCBTdHJvYmwgPGh0dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ry
b2JsPiwgSm9obiBSZWlsbHkgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hubnlyZWlsbHkvPlxuLy8g
RGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlw
ZWRcblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBBSkFYIHNldHRpbmcgdGhhdCB3aWxsIGNv
bmZpZ3VyZSB0aGUgQUpBWCByZXF1ZXN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5n
cyB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzZW50IGluIHRoZSByZXF1ZXN0
IGhlYWRlciB0aGF0IHRlbGxzIHRoZSBzZXJ2ZXIgd2hhdCBraW5kIG9mIHJlc3BvbnNlIGl0IHdp
bGwgYWNjZXB0IGluIHJldHVybi4gSWYgdGhlIGFjY2VwdHMgc2V0dGluZyBuZWVkcyBtb2RpZmlj
YXRpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVw
KCkgbWV0aG9kLlxuICAgICAqL1xuICAgIGFjY2VwdHM/OiBhbnk7XG4gICAgLyoqXG4gICAgICog
QnkgZGVmYXVsdCwgYWxsIHJlcXVlc3RzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IChpLmUuIHRo
aXMgaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCkuIElmIHlvdSBuZWVkIHN5bmNocm9ub3VzIHJl
cXVlc3RzLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2UuIENyb3NzLWRvbWFpbiByZXF1ZXN0cyBh
bmQgZGF0YVR5cGU6IFwianNvbnBcIiByZXF1ZXN0cyBkbyBub3Qgc3VwcG9ydCBzeW5jaHJvbm91
cyBvcGVyYXRpb24uIE5vdGUgdGhhdCBzeW5jaHJvbm91cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJp
bHkgbG9jayB0aGUgYnJvd3NlciwgZGlzYWJsaW5nIGFueSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1
ZXN0IGlzIGFjdGl2ZS4gQXMgb2YgalF1ZXJ5IDEuOCwgdGhlIHVzZSBvZiBhc3luYzogZmFsc2Ug
d2l0aCBqcVhIUiAoJC5EZWZlcnJlZCkgaXMgZGVwcmVjYXRlZDsgeW91IG11c3QgdXNlIHRoZSBz
dWNjZXNzL2Vycm9yL2NvbXBsZXRlIGNhbGxiYWNrIG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUgY29y
cmVzcG9uZGluZyBtZXRob2RzIG9mIHRoZSBqcVhIUiBvYmplY3Qgc3VjaCBhcyBqcVhIUi5kb25l
KCkgb3IgdGhlIGRlcHJlY2F0ZWQganFYSFIuc3VjY2VzcygpLlxuICAgICAqL1xuICAgIGFzeW5j
PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIHByZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0
aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54
LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGJlZm9yZSBpdCBpcyBzZW50LiBVc2UgdGhpcyB0byBz
ZXQgY3VzdG9tIGhlYWRlcnMsIGV0Yy4gVGhlIGpxWEhSIGFuZCBzZXR0aW5ncyBvYmplY3RzIGFy
ZSBwYXNzZWQgYXMgYXJndW1lbnRzLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuIFJldHVybmluZyBm
YWxzZSBpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbiB3aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4g
QXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGJlZm9yZVNlbmQgb3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJl
Z2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBiZWZvcmVTZW5k
PyAoanFYSFI6IEpRdWVyeVhIUiwgc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IGFueTtc
biAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVk
IHBhZ2VzIG5vdCB0byBiZSBjYWNoZWQgYnkgdGhlIGJyb3dzZXIuIE5vdGU6IFNldHRpbmcgY2Fj
aGUgdG8gZmFsc2Ugd2lsbCBvbmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSEVBRCBhbmQgR0VUIHJl
cXVlc3RzLiBJdCB3b3JrcyBieSBhcHBlbmRpbmcgXCJfPXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdF
VCBwYXJhbWV0ZXJzLiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBuZWVkZWQgZm9yIG90aGVyIHR5cGVz
IG9mIHJlcXVlc3RzLCBleGNlcHQgaW4gSUU4IHdoZW4gYSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwg
dGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBieSBhIEdFVC5cbiAgICAgKi9cbiAgICBj
YWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQg
d2hlbiB0aGUgcmVxdWVzdCBmaW5pc2hlcyAoYWZ0ZXIgc3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJh
Y2tzIGFyZSBleGVjdXRlZCkuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0d28gYXJndW1lbnRz
OiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBhbmQg
YSBzdHJpbmcgY2F0ZWdvcml6aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vz
c1wiLCBcIm5vdG1vZGlmaWVkXCIsIFwiZXJyb3JcIiwgXCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwg
b3IgXCJwYXJzZXJlcnJvclwiKS4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRp
bmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBi
ZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGNv
bXBsZXRlPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nKTogYW55O1xuICAg
IC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBzdHJpbmcvcmVndWxhci1leHByZXNzaW9uIHBhaXJz
IHRoYXQgZGV0ZXJtaW5lIGhvdyBqUXVlcnkgd2lsbCBwYXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVu
IGl0cyBjb250ZW50IHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29u
dGVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvL0FjY29yZGluZyB0byBqUXVl
cnkuYWpheCBzb3VyY2UgY29kZSwgYWpheCdzIG9wdGlvbiBhY3R1YWxseSBhbGxvd3MgY29udGVu
dFR5cGUgdG8gc2V0IHRvIFwiZmFsc2VcIlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jp
c3lhbmtvdi9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzc0MlxuICAgIC8qKlxuICAgICAqIFdoZW4g
c2VuZGluZyBkYXRhIHRvIHRoZSBzZXJ2ZXIsIHVzZSB0aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVs
dCBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwi
LCB3aGljaCBpcyBmaW5lIGZvciBtb3N0IGNhc2VzLiBJZiB5b3UgZXhwbGljaXRseSBwYXNzIGlu
IGEgY29udGVudC10eXBlIHRvICQuYWpheCgpLCB0aGVuIGl0IGlzIGFsd2F5cyBzZW50IHRvIHRo
ZSBzZXJ2ZXIgKGV2ZW4gaWYgbm8gZGF0YSBpcyBzZW50KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVz
dCBzcGVjaWZpY2F0aW9uIGRpY3RhdGVzIHRoYXQgdGhlIGNoYXJzZXQgaXMgYWx3YXlzIFVURi04
OyBzcGVjaWZ5aW5nIGFub3RoZXIgY2hhcnNldCB3aWxsIG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0
byBjaGFuZ2UgdGhlIGVuY29kaW5nLlxuICAgICAqL1xuICAgIGNvbnRlbnRUeXBlPzogYW55O1xu
ICAgIC8qKlxuICAgICAqIFRoaXMgb2JqZWN0IHdpbGwgYmUgbWFkZSB0aGUgY29udGV4dCBvZiBh
bGwgQWpheC1yZWxhdGVkIGNhbGxiYWNrcy4gQnkgZGVmYXVsdCwgdGhlIGNvbnRleHQgaXMgYW4g
b2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgYWpheCBzZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxs
ICgkLmFqYXhTZXR0aW5ncyBtZXJnZWQgd2l0aCB0aGUgc2V0dGluZ3MgcGFzc2VkIHRvICQuYWph
eCkuXG4gICAgICovXG4gICAgY29udGV4dD86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhVHlwZS10by1kYXRhVHlwZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZl
cnRlcidzIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2
YWx1ZSBvZiB0aGUgcmVzcG9uc2UuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAg
Y29udmVydGVycz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIElm
IHlvdSB3aXNoIHRvIGZvcmNlIGEgY3Jvc3NEb21haW4gcmVxdWVzdCAoc3VjaCBhcyBKU09OUCkg
b24gdGhlIHNhbWUgZG9tYWluLCBzZXQgdGhlIHZhbHVlIG9mIGNyb3NzRG9tYWluIHRvIHRydWUu
IFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5v
dGhlciBkb21haW4uICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY3Jvc3NEb21h
aW4/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERhdGEgdG8gYmUgc2VudCB0byB0aGUgc2Vy
dmVyLiBJdCBpcyBjb252ZXJ0ZWQgdG8gYSBxdWVyeSBzdHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEg
c3RyaW5nLiBJdCdzIGFwcGVuZGVkIHRvIHRoZSB1cmwgZm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHBy
b2Nlc3NEYXRhIG9wdGlvbiB0byBwcmV2ZW50IHRoaXMgYXV0b21hdGljIHByb2Nlc3NpbmcuIE9i
amVjdCBtdXN0IGJlIEtleS9WYWx1ZSBwYWlycy4gSWYgdmFsdWUgaXMgYW4gQXJyYXksIGpRdWVy
eSBzZXJpYWxpemVzIG11bHRpcGxlIHZhbHVlcyB3aXRoIHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2
YWx1ZSBvZiB0aGUgdHJhZGl0aW9uYWwgc2V0dGluZyAoZGVzY3JpYmVkIGJlbG93KS5cbiAgICAg
Ki9cbiAgICBkYXRhPzogYW55O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNl
ZCB0byBoYW5kbGUgdGhlIHJhdyByZXNwb25zZSBkYXRhIG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMg
aXMgYSBwcmUtZmlsdGVyaW5nIGZ1bmN0aW9uIHRvIHNhbml0aXplIHRoZSByZXNwb25zZS4gWW91
IHNob3VsZCByZXR1cm4gdGhlIHNhbml0aXplZCBkYXRhLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0
d28gYXJndW1lbnRzOiBUaGUgcmF3IGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0
aGUgJ2RhdGFUeXBlJyBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6
IGFueSwgdHk6IGFueSk6IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRo
YXQgeW91J3JlIGV4cGVjdGluZyBiYWNrIGZyb20gdGhlIHNlcnZlci4gSWYgbm9uZSBpcyBzcGVj
aWZpZWQsIGpRdWVyeSB3aWxsIHRyeSB0byBpbmZlciBpdCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBl
IG9mIHRoZSByZXNwb25zZSAoYW4gWE1MIE1JTUUgdHlwZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40
IEpTT04gd2lsbCB5aWVsZCBhIEphdmFTY3JpcHQgb2JqZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwg
ZXhlY3V0ZSB0aGUgc2NyaXB0LCBhbmQgYW55dGhpbmcgZWxzZSB3aWxsIGJlIHJldHVybmVkIGFz
IGEgc3RyaW5nKS5cbiAgICAgKi9cbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAg
ICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1
bmN0aW9uIHJlY2VpdmVzIHRocmVlIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40
LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QsIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUg
b2YgZXJyb3IgdGhhdCBvY2N1cnJlZCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwg
aWYgb25lIG9jY3VycmVkLiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQg
KGJlc2lkZXMgbnVsbCkgYXJlIFwidGltZW91dFwiLCBcImVycm9yXCIsIFwiYWJvcnRcIiwgYW5k
IFwicGFyc2VyZXJyb3JcIi4gV2hlbiBhbiBIVFRQIGVycm9yIG9jY3VycywgZXJyb3JUaHJvd24g
cmVjZWl2ZXMgdGhlIHRleHR1YWwgcG9ydGlvbiBvZiB0aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMg
XCJOb3QgRm91bmRcIiBvciBcIkludGVybmFsIFNlcnZlciBFcnJvci5cIiBBcyBvZiBqUXVlcnkg
MS41LCB0aGUgZXJyb3Igc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4g
RWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIg
aXMgbm90IGNhbGxlZCBmb3IgY3Jvc3MtZG9tYWluIHNjcmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpT
T05QIHJlcXVlc3RzLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgZXJyb3I/
IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGVycm9yVGhyb3c6IHN0cmlu
Zyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXgg
ZXZlbnQgaGFuZGxlcnMgZm9yIHRoaXMgcmVxdWVzdC4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0
IHRvIGZhbHNlIHRvIHByZXZlbnQgdGhlIGdsb2JhbCBoYW5kbGVycyBsaWtlIGFqYXhTdGFydCBv
ciBhamF4U3RvcCBmcm9tIGJlaW5nIHRyaWdnZXJlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBjb250
cm9sIHZhcmlvdXMgQWpheCBFdmVudHMuXG4gICAgICovXG4gICAgZ2xvYmFsPzogYm9vbGVhbjtc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgYWRkaXRpb25hbCBoZWFkZXIga2V5L3ZhbHVl
IHBhaXJzIHRvIHNlbmQgYWxvbmcgd2l0aCByZXF1ZXN0cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVl
c3QgdHJhbnNwb3J0LiBUaGUgaGVhZGVyIFgtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0
IGlzIGFsd2F5cyBhZGRlZCwgYnV0IGl0cyBkZWZhdWx0IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNh
biBiZSBjaGFuZ2VkIGhlcmUuIFZhbHVlcyBpbiB0aGUgaGVhZGVycyBzZXR0aW5nIGNhbiBhbHNv
IGJlIG92ZXJ3cml0dGVuIGZyb20gd2l0aGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVy
c2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106
IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNz
ZnVsIG9ubHkgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVl
c3QuIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyB0aGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIuIERl
ZmF1bHQgdmFsdWUgaXMgZmFsc2UsIGlnbm9yaW5nIHRoZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQg
dGhpcyB0ZWNobmlxdWUgYWxzbyBjaGVja3MgdGhlICdldGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNl
cnZlciB0byBjYXRjaCB1bm1vZGlmaWVkIGRhdGEuXG4gICAgICovXG4gICAgaWZNb2RpZmllZD86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQg
dG8gYmUgcmVjb2duaXplZCBhcyBcImxvY2FsLFwiIChlLmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZl
biBpZiBqUXVlcnkgZG9lcyBub3QgcmVjb2duaXplIGl0IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhl
IGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIGN1cnJlbnRseSByZWNvZ25pemVkIGFzIGxvY2FsOiBm
aWxlLCAqLWV4dGVuc2lvbiwgYW5kIHdpZGdldC4gSWYgdGhlIGlzTG9jYWwgc2V0dGluZyBuZWVk
cyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQu
YWpheFNldHVwKCkgbWV0aG9kLiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAg
aXNMb2NhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9uIG5hbWUgaW4gYSBqc29ucCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNl
ZCBpbnN0ZWFkIG9mICdjYWxsYmFjaycgaW4gdGhlICdjYWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBx
dWVyeSBzdHJpbmcgaW4gdGhlIHVybC4gU28ge2pzb25wOidvbkpTT05QTG9hZCd9IHdvdWxkIHJl
c3VsdCBpbiAnb25KU09OUExvYWQ9PycgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVy
eSAxLjUsIHNldHRpbmcgdGhlIGpzb25wIG9wdGlvbiB0byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkg
ZnJvbSBhZGRpbmcgdGhlIFwiP2NhbGxiYWNrXCIgc3RyaW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1w
dGluZyB0byB1c2UgXCI9P1wiIGZvciB0cmFuc2Zvcm1hdGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ug
c2hvdWxkIGFsc28gZXhwbGljaXRseSBzZXQgdGhlIGpzb25wQ2FsbGJhY2sgc2V0dGluZy4gRm9y
IGV4YW1wbGUsIHsganNvbnA6IGZhbHNlLCBqc29ucENhbGxiYWNrOiBcImNhbGxiYWNrTmFtZVwi
IH1cbiAgICAgKi9cbiAgICBqc29ucD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5
IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGZvciBhIEpTT05QIHJlcXVlc3QuIFRoaXMgdmFs
dWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHJhbmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGJ5IGpRdWVyeS4gSXQgaXMgcHJlZmVyYWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVy
YXRlIGEgdW5pcXVlIG5hbWUgYXMgaXQnbGwgbWFrZSBpdCBlYXNpZXIgdG8gbWFuYWdlIHRoZSBy
ZXF1ZXN0cyBhbmQgcHJvdmlkZSBjYWxsYmFja3MgYW5kIGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5
IHdhbnQgdG8gc3BlY2lmeSB0aGUgY2FsbGJhY2sgd2hlbiB5b3Ugd2FudCB0byBlbmFibGUgYmV0
dGVyIGJyb3dzZXIgY2FjaGluZyBvZiBHRVQgcmVxdWVzdHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlv
dSBjYW4gYWxzbyB1c2UgYSBmdW5jdGlvbiBmb3IgdGhpcyBzZXR0aW5nLCBpbiB3aGljaCBjYXNl
IHRoZSB2YWx1ZSBvZiBqc29ucENhbGxiYWNrIGlzIHNldCB0byB0aGUgcmV0dXJuIHZhbHVlIG9m
IHRoYXQgZnVuY3Rpb24uXG4gICAgICovXG4gICAganNvbnBDYWxsYmFjaz86IGFueTtcbiAgICAv
KipcbiAgICAgKiBBIG1pbWUgdHlwZSB0byBvdmVycmlkZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZl
cnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIG1pbWVUeXBlPzogc3RyaW5nO1xuICAg
IC8qKlxuICAgICAqIEEgcGFzc3dvcmQgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGlu
IHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAg
ICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwg
ZGF0YSBwYXNzZWQgaW4gdG8gdGhlIGRhdGEgb3B0aW9uIGFzIGFuIG9iamVjdCAodGVjaG5pY2Fs
bHksIGFueXRoaW5nIG90aGVyIHRoYW4gYSBzdHJpbmcpIHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0
cmFuc2Zvcm1lZCBpbnRvIGEgcXVlcnkgc3RyaW5nLCBmaXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNv
bnRlbnQtdHlwZSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ug
d2FudCB0byBzZW5kIGEgRE9NRG9jdW1lbnQsIG9yIG90aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwg
c2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLlxuICAgICAqL1xuICAgIHByb2Nlc3NEYXRhPzogYm9v
bGVhbjtcbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0
cmFuc3BvcnQgaXMgdXNlZCAoZS5nLiwgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIHdpdGggXCJqc29u
cFwiIG9yIFwic2NyaXB0XCIgZGF0YVR5cGUgYW5kIFwiR0VUXCIgdHlwZSkuIFNldHMgdGhlIGNo
YXJzZXQgYXR0cmlidXRlIG9uIHRoZSBzY3JpcHQgdGFnIHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVz
ZWQgd2hlbiB0aGUgY2hhcmFjdGVyIHNldCBvbiB0aGUgbG9jYWwgcGFnZSBpcyBub3QgdGhlIHNh
bWUgYXMgdGhlIG9uZSBvbiB0aGUgcmVtb3RlIHNjcmlwdC5cbiAgICAgKi9cbiAgICBzY3JpcHRD
aGFyc2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBudW1lcmljIEhU
VFAgY29kZXMgYW5kIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFz
IHRoZSBjb3JyZXNwb25kaW5nIGNvZGUuIGYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhl
IHN0YXR1cyBjb2RlIGZ1bmN0aW9ucyB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1
Y2Nlc3MgY2FsbGJhY2s7IGlmIGl0IHJlc3VsdHMgaW4gYW4gZXJyb3IgKGluY2x1ZGluZyAzeHgg
cmVkaXJlY3QpLCB0aGV5IHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZXJyb3IgY2Fs
bGJhY2suICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgc3RhdHVzQ29kZT86IHsg
W2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUg
Y2FsbGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQg
dGhyZWUgYXJndW1lbnRzOiBUaGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1h
dHRlZCBhY2NvcmRpbmcgdG8gdGhlIGRhdGFUeXBlIHBhcmFtZXRlcjsgYSBzdHJpbmcgZGVzY3Jp
YmluZyB0aGUgc3RhdHVzOyBhbmQgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBS
ZXF1ZXN0KSBvYmplY3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBzdWNjZXNzIHNldHRpbmcgY2Fu
IGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxs
ZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/
IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUik6IGFueTtc
biAgICAvKipcbiAgICAgKiBTZXQgYSB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0aGUg
cmVxdWVzdC4gVGhpcyB3aWxsIG92ZXJyaWRlIGFueSBnbG9iYWwgdGltZW91dCBzZXQgd2l0aCAk
LmFqYXhTZXR1cCgpLiBUaGUgdGltZW91dCBwZXJpb2Qgc3RhcnRzIGF0IHRoZSBwb2ludCB0aGUg
JC5hamF4IGNhbGwgaXMgbWFkZTsgaWYgc2V2ZXJhbCBvdGhlciByZXF1ZXN0cyBhcmUgaW4gcHJv
Z3Jlc3MgYW5kIHRoZSBicm93c2VyIGhhcyBubyBjb25uZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlz
IHBvc3NpYmxlIGZvciBhIHJlcXVlc3QgdG8gdGltZSBvdXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50
LiBJbiBqUXVlcnkgMS40LnggYW5kIGJlbG93LCB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdp
bGwgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiB0aGUgcmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vz
c2luZyBhbnkgb2JqZWN0IG1lbWJlcnMgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZv
eCAzLjArIG9ubHksIHNjcmlwdCBhbmQgSlNPTlAgcmVxdWVzdHMgY2Fubm90IGJlIGNhbmNlbGxl
ZCBieSBhIHRpbWVvdXQ7IHRoZSBzY3JpcHQgd2lsbCBydW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFm
dGVyIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAgICAgKi9cbiAgICB0aW1lb3V0PzogbnVtYmVyO1xu
ICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0
cmFkaXRpb25hbCBzdHlsZSBvZiBwYXJhbSBzZXJpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHRy
YWRpdGlvbmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0
IHRvIG1ha2UgKFwiUE9TVFwiIG9yIFwiR0VUXCIpLCBkZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6
IE90aGVyIEhUVFAgcmVxdWVzdCBtZXRob2RzLCBzdWNoIGFzIFBVVCBhbmQgREVMRVRFLCBjYW4g
YWxzbyBiZSB1c2VkIGhlcmUsIGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93
c2Vycy5cbiAgICAgKi9cbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqL1xuICAgIHVybD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHVzZXJuYW1lIHRvIGJl
IHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBh
dXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xu
ICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZvciBjcmVhdGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qg
b2JqZWN0LiBEZWZhdWx0cyB0byB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGF2YWlsYWJsZSAoSUUp
LCB0aGUgWE1MSHR0cFJlcXVlc3Qgb3RoZXJ3aXNlLiBPdmVycmlkZSB0byBwcm92aWRlIHlvdXIg
b3duIGltcGxlbWVudGF0aW9uIGZvciBYTUxIdHRwUmVxdWVzdCBvciBlbmhhbmNlbWVudHMgdG8g
dGhlIGZhY3RvcnkuXG4gICAgICovXG4gICAgeGhyPzogYW55O1xuICAgIC8qKlxuICAgICAqIEFu
IG9iamVjdCBvZiBmaWVsZE5hbWUtZmllbGRWYWx1ZSBwYWlycyB0byBzZXQgb24gdGhlIG5hdGl2
ZSBYSFIgb2JqZWN0LiBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgaXQgdG8gc2V0IHdpdGhDcmVk
ZW50aWFscyB0byB0cnVlIGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBq
UXVlcnkgMS41LCB0aGUgd2l0aENyZWRlbnRpYWxzIHByb3BlcnR5IHdhcyBub3QgcHJvcGFnYXRl
ZCB0byB0aGUgbmF0aXZlIFhIUiBhbmQgdGh1cyBDT1JTIHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3
b3VsZCBpZ25vcmUgdGhpcyBmbGFnLiBGb3IgdGhpcyByZWFzb24sIHdlIHJlY29tbWVuZCB1c2lu
ZyBqUXVlcnkgMS41LjErIHNob3VsZCB5b3UgcmVxdWlyZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lv
biBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgeGhyRmllbGRzPzogeyBba2V5OiBzdHJpbmdd
OiBhbnk7IH07XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUganFYSFIgb2JqZWN0XG4q
L1xuaW50ZXJmYWNlIEpRdWVyeVhIUiBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9t
aXNlPGFueT4ge1xuICAgIG92ZXJyaWRlTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGFueTtc
biAgICBhYm9ydChzdGF0dXNUZXh0Pzogc3RyaW5nKTogdm9pZDtcbn1cblxuLypcbiAgICBJbnRl
cmZhY2UgZm9yIHRoZSBKUXVlcnkgY2FsbGJhY2tcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJh
Y2sge1xuICAgIGFkZCguLi5jYWxsYmFja3M6IGFueVtdKTogYW55O1xuICAgIGRpc2FibGUoKTog
YW55O1xuICAgIGVtcHR5KCk6IGFueTtcbiAgICBmaXJlKC4uLmFyZ3VtZW50czogYW55W10pOiBh
bnk7XG4gICAgZmlyZWQoKTogYm9vbGVhbjtcbiAgICBmaXJlV2l0aChjb250ZXh0OiBhbnksIC4u
LmFyZ3M6IGFueVtdKTogYW55O1xuICAgIGhhcyhjYWxsYmFjazogYW55KTogYm9vbGVhbjtcbiAg
ICBsb2NrKCk6IGFueTtcbiAgICBsb2NrZWQoKTogYm9vbGVhbjtcbiAgICByZW1vdmUoLi4uY2Fs
bGJhY2tzOiBhbnlbXSk6IGFueTtcbn1cblxuLypcbiAgICBBbGxvd3MgalF1ZXJ5IFByb21pc2Vz
IHRvIGludGVyb3Agd2l0aCBub24talF1ZXJ5IHByb21pc2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eUdlbmVyaWNQcm9taXNlPFQ+IHtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9
PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVq
ZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdl
bmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbn1cblxuLypcbiAg
ICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgcHJvbWlzZSwgcGFydCBvZiBjYWxsYmFja3Ncbiov
XG5pbnRlcmZhY2UgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBv
ZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlz
ZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47
XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8
VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8
VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47
XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlz
ZTxUPjtcblxuICAgIC8vIERlcHJlY2F0ZWQgLSBnaXZlbiBubyB0eXBpbmdzXG4gICAgcGlwZShk
b25lRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBmYWlsRmlsdGVyPzogKHg6IGFueSkgPT4gYW55
LCBwcm9ncmVzc0ZpbHRlcj86ICh4OiBhbnkpID0+IGFueSk6IEpRdWVyeVByb21pc2U8YW55Pjtc
blxuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4u
LnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlb
XSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZh
bHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29u
czogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBh
bnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQp
ID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpR
dWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1
ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBK
UXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55
W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG5cbiAgICAvLyBCZWNhdXNlIEpRdWVyeSBQ
cm9taXNlcyBTdWNrXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9
PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICgu
Li5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhl
bjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAo
Li4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRo
ZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4u
cmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzog
KC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0
aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9t
aXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBK
UXVlcnlQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBk
ZWZlcnJlZCwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8
VD4gZXh0ZW5kcyBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9m
IGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG5cbiAgICBub3RpZnkoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcbiAgICBub3RpZnlXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVl
cnlEZWZlcnJlZDxUPjtcblxuICAgIHJlamVjdCguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuICAgIHJlamVjdFdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVzb2x2ZSh2YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxU
PjtcbiAgICByZXNvbHZlKC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAg
cmVzb2x2ZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIHN0YXRlKCk6IHN0cmluZztcblxuICAgIHByb21pc2UodGFyZ2V0PzogYW55KTog
SlF1ZXJ5UHJvbWlzZTxUPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBl
eHRlbnNpb24gb2YgdGhlIFczQyBldmVudCBvYmplY3RcbiovXG5cbmludGVyZmFjZSBCYXNlSlF1
ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBFdmVudCB7XG4gICAgZGF0YTogYW55O1xuICAgIGRlbGVn
YXRlVGFyZ2V0OiBFbGVtZW50O1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuO1xu
ICAgIGlzSW1tZWRpYXRlUHJvcG9nYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgaXNQcm9w
YWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBw
cmV2ZW50RGVmYXVsdCgpOiBhbnk7XG4gICAgcmVsYXRlZFRhcmdldDogRWxlbWVudDtcbiAgICBy
ZXN1bHQ6IGFueTtcbiAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBz
dG9wUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBu
dW1iZXI7XG4gICAgd2hpY2g6IG51bWJlcjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xufVxuXG5p
bnRlcmZhY2UgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9i
amVjdCB7XG4gICAgYWx0S2V5OiBib29sZWFuO1xuICAgIGN0cmxLZXk6IGJvb2xlYW47XG4gICAg
bWV0YUtleTogYm9vbGVhbjtcbiAgICBzaGlmdEtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNl
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtc
biAgICBidXR0b246IG51bWJlcjtcbiAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50WTog
bnVtYmVyO1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAg
cGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVyO1xuICAgIHNjcmVlblg6IG51bWJlcjtc
biAgICBzY3JlZW5ZOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlLZXlFdmVudE9iamVj
dCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGNoYXI6IGFueTtcbiAgICBj
aGFyQ29kZTogbnVtYmVyO1xuICAgIGtleTogYW55O1xuICAgIGtleUNvZGU6IG51bWJlcjtcbn1c
blxuaW50ZXJmYWNlIEpRdWVyeVBvcFN0YXRlRXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5
RXZlbnRPYmplY3Qge1xuICAgIG9yaWdpbmFsRXZlbnQ6IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmlu
dGVyZmFjZSBKUXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCwg
SlF1ZXJ5SW5wdXRFdmVudE9iamVjdCwgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5
RXZlbnRPYmplY3QsIEpRdWVyeVBvcFN0YXRlRXZlbnRPYmplY3Qge1xufVxuXG4vKlxuICAgIENv
bGxlY3Rpb24gb2YgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBicm93c2VyXG4qL1xuXG5pbnRl
cmZhY2UgSlF1ZXJ5U3VwcG9ydCB7XG4gICAgYWpheD86IGJvb2xlYW47XG4gICAgYm94TW9kZWw/
OiBib29sZWFuO1xuICAgIGNoYW5nZUJ1YmJsZXM/OiBib29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/
OiBib29sZWFuO1xuICAgIGNoZWNrT24/OiBib29sZWFuO1xuICAgIGNvcnM/OiBib29sZWFuO1xu
ICAgIGNzc0Zsb2F0PzogYm9vbGVhbjtcbiAgICBocmVmTm9ybWFsaXplZD86IGJvb2xlYW47XG4g
ICAgaHRtbFNlcmlhbGl6ZT86IGJvb2xlYW47XG4gICAgbGVhZGluZ1doaXRlc3BhY2U/OiBib29s
ZWFuO1xuICAgIG5vQ2xvbmVDaGVja2VkPzogYm9vbGVhbjtcbiAgICBub0Nsb25lRXZlbnQ/OiBi
b29sZWFuO1xuICAgIG9wYWNpdHk/OiBib29sZWFuO1xuICAgIG9wdERpc2FibGVkPzogYm9vbGVh
bjtcbiAgICBvcHRTZWxlY3RlZD86IGJvb2xlYW47XG4gICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xl
YW47XG4gICAgc3R5bGU/OiBib29sZWFuO1xuICAgIHN1Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xu
ICAgIHRib2R5PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBhcmFtIHtcbiAgICAo
b2JqOiBhbnkpOiBzdHJpbmc7XG4gICAgKG9iajogYW55LCB0cmFkaXRpb25hbDogYm9vbGVhbik6
IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gY29uc3RydWN0IGpR
dWVyeSBldmVudHMgKHdpdGggJC5FdmVudCkuIEl0IGlzXG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkg
aW5zdGVhZCBvZiBpbmxpbmUgaW4gSlF1ZXJ5U3RhdGljIHRvIGFsbG93XG4gKiBvdmVycmlkaW5n
IHRoZSBjb25zdHJ1Y3Rpb24gZnVuY3Rpb24gd2l0aCBzcGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1
cm5pbmcgc3BlY2lmaWMgZXZlbnQgb2JqZWN0cy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50
Q29uc3RydWN0b3Ige1xuICAgIChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6
IEpRdWVyeUV2ZW50T2JqZWN0O1xuICAgIG5ldyAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRp
ZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNl
IHVzZWQgdG8gc3BlY2lmeSBlYXNpbmcgZnVuY3Rpb25zLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5
RWFzaW5nIHtcbiAgICBsaW5lYXIocDogbnVtYmVyKTogbnVtYmVyO1xuICAgIHN3aW5nKHA6IG51
bWJlcik6IG51bWJlcjtcbn1cblxuLypcbiAgICBTdGF0aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRo
b3NlIG9uICQgYW5kIGpRdWVyeSB0aGVtc2VsdmVzKVxuKi9cbmludGVyZmFjZSBKUXVlcnlTdGF0
aWMge1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWph
eCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkv
dmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdz
IGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAk
LmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgoc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0
aW5ncyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91
cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmlu
ZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAg
KiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJl
IHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBj
YW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAg
ICBhamF4KHVybDogc3RyaW5nLCBzZXR0aW5ncz86IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVy
eVhIUjtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1v
ZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVm
b3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBkYXRhVHlwZXMgQW4gb3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3Bh
Y2Utc2VwYXJhdGVkIGRhdGFUeXBlc1xuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0
byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xu
ICAgIGFqYXhQcmVmaWx0ZXIoZGF0YVR5cGVzOiBzdHJpbmcsIGhhbmRsZXI6IChvcHRzOiBhbnks
IG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBh
bnkpOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9y
IG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQg
YmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBB
amF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6
IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIp
ID0+IGFueSk6IHZvaWQ7XG5cbiAgICBhamF4U2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncztc
blxuICAgICAvKipcbiAgICAgICogU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCBy
ZXF1ZXN0cy4gSXRzIHVzZSBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAgICAqXG4gICAgICAqIEBw
YXJhbSBvcHRpb25zIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUg
ZGVmYXVsdCBBamF4IHJlcXVlc3QuIEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbC5cbiAgICAgICov
XG4gICAgYWpheFNldHVwKG9wdGlvbnM6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAg
ICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nl
c3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1
Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVk
IGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwg
c2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/
OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBk
YXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUg
cmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0
cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAq
IEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0
aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2Yg
ZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNz
ICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3Ry
aW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3Ry
aW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5
WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBI
VFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250
YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFy
YW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2
ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1
bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICog
QHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVy
LiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwp
LlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86
IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55
LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpT
T04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3Qu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0
byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5c
biAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwg
dGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIg
dXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0
cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAg
ICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRv
IHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNh
bGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
XG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vz
cz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEg
ZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5n
IHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/
OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhS
OiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGEg
SmF2YVNjcmlwdCBmaWxlIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3Qs
IHRoZW4gZXhlY3V0ZSBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29u
dGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldFNjcmlwdCh1cmw6IHN0cmluZywgc3Vj
Y2Vzcz86IChzY3JpcHQ6IHN0cmluZywgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG5cbiAgICBwYXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAg
ICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NU
IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcg
dGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNj
ZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBz
dWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVs
bCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEg
ZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1s
LCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJp
bmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4g
ICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwg
dG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWlu
IG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVx
dWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMg
ZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlz
IHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBk
YXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVs
dDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAg
ICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5n
IHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNh
biBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUg
b2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1
ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1
cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0
dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6
IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEEgbXVsdGktcHVycG9zZSBjYWxsYmFja3Mg
bGlzdCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIHBvd2VyZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJh
Y2sgbGlzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBv
ZiBzcGFjZS1zZXBhcmF0ZWQgZmxhZ3MgdGhhdCBjaGFuZ2UgaG93IHRoZSBjYWxsYmFjayBsaXN0
IGJlaGF2ZXMuXG4gICAgICovXG4gICAgQ2FsbGJhY2tzKGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5
Q2FsbGJhY2s7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyBvciByZWxlYXNlcyB0aGUgZXhlY3V0
aW9uIG9mIGpRdWVyeSdzIHJlYWR5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvbGQg
SW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlYWR5IGhvbGQgaXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJl
bGVhc2VkXG4gICAgICovXG4gICAgaG9sZFJlYWR5KGhvbGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4g
ICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgKGVsZW1l
bnQ6IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgKG9iamVjdDoge30pOiBKUXVlcnk7XG4gICAgKGVs
ZW1lbnRBcnJheTogRWxlbWVudFtdKTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IEpRdWVyeSk6IEpR
dWVyeTtcbiAgICAoZnVuYzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgKGFycmF5OiBhbnlbXSk6
IEpRdWVyeTtcbiAgICAoKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVsaW5xdWlzaCBq
UXVlcnkncyBjb250cm9sIG9mIHRoZSAkIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFt
IHJlbW92ZUFsbCBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1
ZXJ5IHZhcmlhYmxlcyBmcm9tIHRoZSBnbG9iYWwgc2NvcGUgKGluY2x1ZGluZyBqUXVlcnkgaXRz
ZWxmKS5cbiAgICAgKi9cbiAgICBub0NvbmZsaWN0KHJlbW92ZUFsbD86IGJvb2xlYW4pOiBPYmpl
Y3Q7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNr
IGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVk
IG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxh
aW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRz
OiBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPltdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipc
biAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNl
ZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCBy
ZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZl
cnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBv
YmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2Fs
bGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVm
ZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBv
ciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZl
cnJlZHM6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGNzc0hvb2tzOiB7IFtrZXk6
IHN0cmluZ106IGFueTsgfTtcbiAgICBjc3NOdW1iZXI6IGFueTtcblxuICAgIC8qKlxuICAgICAq
IFN0b3JlIGFyYml0cmFyeSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1l
bnQuIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAg
ICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQu
XG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgZGF0YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBk
YXRhPFQ+KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAg
LyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxl
bWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhl
IGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAg
ICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0Llxu
ICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBhbnk7XG4g
ICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUg
ZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3Ig
dGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4g
ICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50KTogYW55O1xuXG4gICAgZGVxdWV1ZShl
bGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBoYXNEYXRh
KGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVu
dCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVu
dCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xu
XG4gICAgcmVtb3ZlRGF0YShlbGVtZW50OiBFbGVtZW50LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5
O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBEZWZlcnJlZDxUPihiZWZvcmVTdGFydD86IChkZWZl
cnJlZDogSlF1ZXJ5RGVmZXJyZWQ8VD4pID0+IGFueSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4g
ICAgLy8gRWZmZWN0c1xuICAgIGZ4OiB7IHRpY2s6ICgpID0+IHZvaWQ7IGludGVydmFsOiBudW1i
ZXI7IHN0b3A6ICgpID0+IHZvaWQ7IHNwZWVkczogeyBzbG93OiBudW1iZXI7IGZhc3Q6IG51bWJl
cjsgfTsgb2ZmOiBib29sZWFuOyBzdGVwOiBhbnk7IH07XG5cbiAgICAvLyBFdmVudHNcbiAgICBw
cm94eShmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIGNvbnRleHQ6IGFueSwgLi4uYXJnczog
YW55W10pOiBhbnk7XG4gICAgcHJveHkoY29udGV4dDogYW55LCBuYW1lOiBzdHJpbmcsIC4uLmFy
Z3M6IGFueVtdKTogYW55O1xuXG4gICAgRXZlbnQ6IEpRdWVyeUV2ZW50Q29uc3RydWN0b3I7XG5c
biAgICAvLyBJbnRlcm5hbHNcbiAgICBlcnJvcihtZXNzYWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZXhwcjogYW55O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86
IERlY2lkZSBob3cgd2Ugd2FudCB0byB0eXBlIHRoaXNcbiAgICBpc1JlYWR5OiBib29sZWFuO1xu
XG4gICAgLy8gUHJvcGVydGllc1xuICAgIHN1cHBvcnQ6IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAv
LyBVdGlsaXRpZXNcbiAgICBjb250YWlucyhjb250YWluZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDog
RWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBlYWNoKGNvbGxlY3Rpb246IGFueSwgY2FsbGJhY2s6
IChpbmRleEluQXJyYXk6IGFueSwgdmFsdWVPZkVsZW1lbnQ6IGFueSkgPT4gYW55KTogYW55O1xu
ICAgIGVhY2goY29sbGVjdGlvbjogSlF1ZXJ5LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVt
YmVyLCB2YWx1ZU9mRWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGFueSk6IGFueTtcbiAgICBlYWNo
PFQ+KGNvbGxlY3Rpb246IFRbXSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFs
dWVPZkVsZW1lbnQ6IFQpID0+IGFueSk6IGFueTtcblxuICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwg
Li4ub2JqczogYW55W10pOiBhbnk7XG4gICAgZXh0ZW5kKGRlZXA6IGJvb2xlYW4sIHRhcmdldDog
YW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcblxuICAgIGdsb2JhbEV2YWwoY29kZTogc3RyaW5n
KTogYW55O1xuXG4gICAgZ3JlcDxUPihhcnJheTogVFtdLCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6
IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBib29sZWFuLCBpbnZlcnQ/OiBib29sZWFuKTog
VFtdO1xuXG4gICAgaW5BcnJheTxUPih2YWx1ZTogVCwgYXJyYXk6IFRbXSwgZnJvbUluZGV4Pzog
bnVtYmVyKTogbnVtYmVyO1xuXG4gICAgaXNBcnJheShvYmo6IGFueSk6IGJvb2xlYW47XG4gICAg
aXNFbXB0eU9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNGdW5jdGlvbihvYmo6IGFu
eSk6IGJvb2xlYW47XG4gICAgaXNOdW1lcmljKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgIGlz
UGxhaW5PYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzV2luZG93KG9iajogYW55KTog
Ym9vbGVhbjtcbiAgICBpc1hNTERvYyhub2RlOiBOb2RlKTogYm9vbGVhbjtcblxuICAgIG1ha2VB
cnJheShvYmo6IGFueSk6IGFueVtdO1xuXG4gICAgbWFwPFQsIFU+KGFycmF5OiBUW10sIGNhbGxi
YWNrOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBVKTogVVtd
O1xuICAgIG1hcChhcnJheTogYW55LCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBhbnksIGlu
ZGV4SW5BcnJheTogYW55KSA9PiBhbnkpOiBhbnk7XG5cbiAgICBtZXJnZTxUPihmaXJzdDogVFtd
LCBzZWNvbmQ6IFRbXSk6IFRbXTtcbiAgICBtZXJnZTxULFU+KGZpcnN0OiBUW10sIHNlY29uZDog
VVtdKTogYW55W107XG5cbiAgICBub29wKCk6IGFueTtcblxuICAgIG5vdygpOiBudW1iZXI7XG5c
biAgICBwYXJzZUpTT04oanNvbjogc3RyaW5nKTogYW55O1xuXG4gICAgLyoqXG4gICAgICogUGFy
c2VzIGEgc3RyaW5nIGludG8gYW4gWE1MIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGRhdGFhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICovXG4gICAg
cGFyc2VYTUwoZGF0YTogc3RyaW5nKTogWE1MRG9jdW1lbnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50
OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xu
XG4gICAgdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZztcblxuICAgIHR5cGUob2JqOiBhbnkpOiBz
dHJpbmc7XG5cbiAgICB1bmlxdWUoYXJyOiBhbnlbXSk6IGFueVtdO1xuXG4gICAgLyoqXG4gICAg
ICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gYXJyYXkgb2YgRE9NIG5vZGVzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGRhdGEgSFRNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICogQHBhcmFt
IGNvbnRleHQgRE9NIGVsZW1lbnQgdG8gc2VydmUgYXMgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhl
IEhUTUwgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIGtlZXBTY3JpcHRz
IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBp
biB0aGUgSFRNTCBzdHJpbmdcbiAgICAgKi9cbiAgICBwYXJzZUhUTUwoZGF0YTogc3RyaW5nLCBj
b250ZXh0PzogSFRNTEVsZW1lbnQsIGtlZXBTY3JpcHRzPzogYm9vbGVhbik6IGFueVtdO1xuXG4g
ICAgQW5pbWF0aW9uKGVsZW06IGFueSwgcHJvcGVydGllczogYW55LCBvcHRpb25zOiBhbnkpOiBh
bnk7XG5cbiAgICBlYXNpbmc6IEpRdWVyeUVhc2luZztcbn1cblxuLypcbiAgICBUaGUgalF1ZXJ5
IGluc3RhbmNlIG1lbWJlcnNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4g
ICAgYWpheENvbXBsZXRlKGhhbmRsZXI6IGFueSk6IEpRdWVyeTtcbiAgICBhamF4RXJyb3IoaGFu
ZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFNlbmQoaGFuZGxlcjogKGV2ZW50OiBhbnks
IGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgYWpheFN0YXJ0KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4
U3RvcChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxl
cjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBsb2FkKHVybDogc3RyaW5nLCBkYXRhPzogYW55LCBj
b21wbGV0ZT86IGFueSk6IEpRdWVyeTtcblxuICAgIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAg
c2VyaWFsaXplQXJyYXkoKTogYW55W107XG5cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xh
c3MoY2xhc3NOYW1lczogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZENsYXNzKGZ1bmM6IChpbmRl
eDogYW55LCBjdXJyZW50Q2xhc3M6IGFueSkgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8g
aHR0cDovL2FwaS5qcXVlcnkuY29tL2FkZEJhY2svXG4gICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuXG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJp
bmc7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7
XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBhdHRy
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhdHRyKG1hcDogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgaGFzQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgaHRtbCgpOiBz
dHJpbmc7XG4gICAgaHRtbChodG1sU3RyaW5nOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbCho
dG1sQ29udGVudDogKGluZGV4OiBudW1iZXIsIG9sZGh0bWw6IHN0cmluZykgPT4gc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIGh0bWwob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBwcm9wKHByb3Bl
cnR5TmFtZTogc3RyaW5nKTogYW55O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZh
bHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChtYXA6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9w
KHByb3BlcnR5TmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1
ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6
IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUNsYXNzKGNsYXNzTmFtZT86IHN0cmluZyk6
IEpRdWVyeTtcbiAgICByZW1vdmVDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZVByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICB0b2dnbGVDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgc3d0Y2g/OiBib29s
ZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtc
biAgICB0b2dnbGVDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnksIHN3dGNoOiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHZhbCgpOiBhbnk7XG4gICAgdmFsKHZhbHVlOiBzdHJp
bmdbXSk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB2YWwo
dmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB2YWwoZnVuYzogKGluZGV4OiBhbnksIHZhbHVl
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUg
b2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBt
YXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENT
UyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJp
bmc7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0
aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVy
dHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUg
dG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTog
c3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUg
b3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxu
ICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAg
ICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRo
ZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0
eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0
byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBz
dHJpbmcsIHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25l
IG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5c
biAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAg
ICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXJbXSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9y
IHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9w
ZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5j
dGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVt
ZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNl
dCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3Bl
cnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+
IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHBy
b3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0g
dmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUg
Y3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1l
bnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4g
ICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVl
OiBudW1iZXIpID0+IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9y
IG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1
ZSBwYWlycyB0byBzZXQuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnRpZXM6IE9iamVjdCk6IEpR
dWVyeTtcblxuICAgIGhlaWdodCgpOiBudW1iZXI7XG4gICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIp
OiBKUXVlcnk7XG4gICAgaGVpZ2h0KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0
KGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
aW5uZXJIZWlnaHQoKTogbnVtYmVyO1xuICAgIGlubmVySGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBK
UXVlcnk7XG5cbiAgICBpbm5lcldpZHRoKCk6IG51bWJlcjtcbiAgICBpbm5lcldpZHRoKHZhbHVl
OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXQoKTogeyBsZWZ0OiBudW1iZXI7IHRvcDog
bnVtYmVyOyB9O1xuICAgIG9mZnNldChjb29yZGluYXRlczogYW55KTogSlF1ZXJ5O1xuICAgIG9m
ZnNldChmdW5jOiAoaW5kZXg6IGFueSwgY29vcmRzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91
dGVySGVpZ2h0KHZhbHVlOiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5
O1xuXG4gICAgb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAg
ICBvdXRlcldpZHRoKHZhbHVlOiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1
ZXJ5O1xuXG4gICAgcG9zaXRpb24oKTogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xu
XG4gICAgc2Nyb2xsTGVmdCgpOiBudW1iZXI7XG4gICAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVy
KTogSlF1ZXJ5O1xuXG4gICAgc2Nyb2xsVG9wKCk6IG51bWJlcjtcbiAgICBzY3JvbGxUb3AodmFs
dWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHdpZHRoKCk6IG51bWJlcjtcbiAgICB3aWR0aCh2
YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHdpZHRoKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgd2lkdGgoZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvLyBEYXRhXG4gICAgY2xlYXJRdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICBkYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAg
IGRhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICBkYXRhKGtl
eT86IHN0cmluZyk6IGFueTtcblxuICAgIGRlcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1
ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShuYW1lT3JMaXN0PzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
Ly8gRGVmZXJyZWRcbiAgICBwcm9taXNlKHR5cGU/OiBhbnksIHRhcmdldD86IGFueSk6IEpRdWVy
eVByb21pc2U8YW55PjtcblxuICAgIC8vIEVmZmVjdHNcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6
IGFueSwgZHVyYXRpb24/OiBhbnksIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAg
YW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcs
IGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBh
bnksIG9wdGlvbnM6IHsgZHVyYXRpb24/OiBhbnk7IGVhc2luZz86IHN0cmluZzsgY29tcGxldGU/
OiBGdW5jdGlvbjsgc3RlcD86IEZ1bmN0aW9uOyBxdWV1ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNp
bmc/OiBhbnk7IH0pOiBKUXVlcnk7XG5cbiAgICBkZWxheShkdXJhdGlvbjogbnVtYmVyLCBxdWV1
ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVPdXQoZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/
OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBm
YWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/
OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJh
dGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvZ2dsZShkdXJh
dGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxu
ICAgIGZpbmlzaCgpOiBKUXVlcnk7XG5cbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJp
bmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlRG93bihkdXJh
dGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVEb3duKGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
ICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3Ry
aW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJv
b2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgc3RvcChxdWV1ZT86IGFu
eSwgY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5c
biAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAg
IHRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcbiAgICB0b2dnbGUoc2hvd09ySGlkZTogYm9vbGVhbik6IEpRdWVyeTtcblxuICAg
IC8vIEV2ZW50c1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE6IGFueSwgcHJldmVudEJ1
YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2
ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6
IEpRdWVyeTtcblxuICAgIGJsdXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJsdXIoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjaGFuZ2VcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIGNoYW5nZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0
IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGV2ZW50RGF0YT86IGFueSwgaGFu
ZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2xpY2tcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjbGlj
ayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNr
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0
YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGRibGNsaWNrKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgZGJsY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBk
YmxjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55
LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJm
b2N1c1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBmb2N1cyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vz
KGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzaW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzaW4oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBmb2N1c291dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZv
Y3Vzb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHR3byBo
YW5kbGVycyB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUg
bW91c2UgcG9pbnRlciBlbnRlcnMgYW5kIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaGFuZGxlckluIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3Vz
ZSBwb2ludGVyIGVudGVycyB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlck91dCBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnksIGhhbmRsZXJPdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgc2luZ2xl
IGhhbmRsZXIgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhl
IG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaGFuZGxlckluT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBt
b3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAg
aG92ZXIoaGFuZGxlckluT3V0OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleWRvd25cIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleWRvd24oKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlkb3duXCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGtleWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUga2V5ZG93blwiXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtl
eWRvd24oZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0
aGUgXCJrZXlwcmVzc1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5cHJl
c3MoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChl
dmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5dXBcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIGtleXVwKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxv
YWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2Fk
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChldmVudERhdGE/OiBh
bnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZG93blwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2
YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91
c2Vkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZWRvd24oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJtb3VzZWVudGVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBt
b3VzZWVudGVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNl
IGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGV2ZW50RGF0
YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vs
ZWF2ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZSgpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVk
IHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxl
bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKCk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vt
b3ZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1v
dmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0
aGUgXCJtb3VzZW91dFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vv
dXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdmVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5c
biAgICAgKi9cbiAgICBtb3VzZW92ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3Zlclwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihldmVudERhdGE6
IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIg
SmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2V1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
dXAoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFu
IGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgb2ZmKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBu
YW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRv
d24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3Ig
QSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0
byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50
KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRz
OiBzdHJpbmcsIHNlbGVjdG9yPzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBh
biBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9y
ZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9y
IGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwi
LCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5j
dGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFs
IHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50cyBBbiBvYmplY3Qgd2hlcmUgdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3Ig
bW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMs
IGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBoYW5kbGVyIGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0
dGFjaGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0
b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkg
d2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czog
eyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBv
ciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1
Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBh
cyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxz
ZS4gUmVzdCBwYXJhbWV0ZXIgYXJncyBpcyBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQg
dG8galF1ZXJ5LnRyaWdnZXIoKS4gTm90ZSB0aGF0IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0
aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBtdXN0IGJlIG1hcmtlZCBhcyBvcHRpb25hbCAoPyBz
eW50YXgpLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBv
bmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5t
eVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBm
aWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdn
ZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZl
bnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1l
bnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBh
IHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5c
biAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3Ig
bW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9w
dGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdp
blwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIg
dGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhl
IGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMg
YWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4g
ICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZl
bnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUg
dmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9u
IHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czog
c3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBB
dHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRv
IHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4g
b2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3Bh
Y2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhl
IHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhl
IGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBm
aWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwg
Y2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVs
ZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRs
ZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbihl
dmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IGFueSwgZGF0YT86IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZl
bnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNl
IHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMs
IHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUg
ZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVu
dCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcg
Y29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwi
Y2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBh
cmFtIGRhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IG9uZShldmVudHM6IHN0cmluZywgZGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBB
dHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVy
IGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBc
ImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRl
ZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxl
Y3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFs
bG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1
cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3Ry
aW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3Ig
dGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVs
ZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBh
cmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMg
b2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBz
ZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVk
IHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0
YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4g
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBh
bHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9l
cyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rv
cjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRs
ZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQg
YXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2Vu
dCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5h
bWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2Vs
ZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVs
ZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVs
bCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hl
cyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBh
c3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxu
ICAgICAqL1xuICAgIG9uZShldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rv
cj86IHN0cmluZywgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuXG4gICAgLyoqXG4gICAgICogU3Bl
Y2lmeSBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRl
ciB0aGUgRE9NIGlzIHJlYWR5LlxuICAgICAqL1xuICAgIHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9u
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJyZXNpemVcIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHJlc2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3Jp
cHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVz
aXplKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVz
aXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xs
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzY3JvbGwoKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIHNjcm9sbChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Ny
b2xsKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
InNlbGVjdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2VsZWN0KCk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Vs
ZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBzZWxlY3QoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIHNlbGVjdChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJzdWJtaXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHN1Ym1p
dCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgc3VibWl0KGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXIoZXZlbnRU
eXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55W10pOiBKUXVlcnk7XG4gICAgdHJp
Z2dlcihldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VySGFu
ZGxlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVj
dDtcblxuICAgIHVuYmluZChldmVudFR5cGU/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50
VHlwZTogc3RyaW5nLCBmbHM6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2dDogYW55
KTogSlF1ZXJ5O1xuXG4gICAgdW5kZWxlZ2F0ZSgpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShz
ZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVj
dG9yOiBhbnksIGV2ZW50czogYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUobmFtZXNwYWNl
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB1bmxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVubG9hZChldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAgICBjb250ZXh0OiBFbGVtZW50O1xuICAg
IGpxdWVyeTogc3RyaW5nO1xuXG4gICAgZXJyb3IoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGVycm9yKGV2ZW50RGF0YTogYW55
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hT
dGFjayhlbGVtZW50czogYW55W10sIG5hbWU6IGFueSwgYXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvLyBNYW5pcHVsYXRpb25cbiAgICBhZnRlciguLi5jb250ZW50OiBhbnlbXSk6IEpR
dWVyeTtcbiAgICBhZnRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgYXBwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAo
aW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0
YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIGJlZm9yZSguLi5jb250ZW50OiBhbnlbXSk6IEpR
dWVyeTtcbiAgICBiZWZvcmUoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIGNsb25lKHdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZl
bnRzPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIGRldGFjaChzZWxlY3Rvcj86IGFueSk6IEpR
dWVyeTtcblxuICAgIGVtcHR5KCk6IEpRdWVyeTtcblxuICAgIGluc2VydEFmdGVyKHRhcmdldDog
YW55KTogSlF1ZXJ5O1xuICAgIGluc2VydEJlZm9yZSh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxu
ICAgIHByZXBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgcHJlcGVuZChmdW5j
OiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5k
VG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICByZXBsYWNlQWxsKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVw
bGFjZVdpdGgoZnVuYzogYW55KTogSlF1ZXJ5O1xuXG4gICAgdGV4dCgpOiBzdHJpbmc7XG4gICAg
dGV4dCh0ZXh0U3RyaW5nOiBhbnkpOiBKUXVlcnk7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5k
ZXg6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b0Fy
cmF5KCk6IGFueVtdO1xuXG4gICAgdW53cmFwKCk6IEpRdWVyeTtcblxuICAgIHdyYXAod3JhcHBp
bmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3JhcChmdW5jOiAoaW5kZXg6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcEFsbCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVy
eTtcblxuICAgIHdyYXBJbm5lcih3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3
cmFwSW5uZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1p
c2NlbGxhbmVvdXNcbiAgICBlYWNoKGZ1bmM6IChpbmRleDogYW55LCBlbGVtOiBFbGVtZW50KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBnZXQoaW5kZXg/OiBudW1iZXIpOiBhbnk7XG5cbiAgICBp
bmRleCgpOiBudW1iZXI7XG4gICAgaW5kZXgoc2VsZWN0b3I6IHN0cmluZyk6IG51bWJlcjtcbiAg
ICBpbmRleChlbGVtZW50OiBhbnkpOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAg
bGVuZ3RoOiBudW1iZXI7XG4gICAgc2VsZWN0b3I6IHN0cmluZztcbiAgICBbeDogc3RyaW5nXTog
YW55O1xuICAgIFt4OiBudW1iZXJdOiBIVE1MRWxlbWVudDtcblxuICAgIC8vIFRyYXZlcnNpbmdc
biAgICBhZGQoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICBh
ZGQoLi4uZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFkZChodG1sOiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgYWRkKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2Vs
ZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogRWxlbWVudCk6
IEpRdWVyeTtcbiAgICBjbG9zZXN0KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qo
ZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRl
eHQ/OiBFbGVtZW50KTogYW55W107XG5cbiAgICBjb250ZW50cygpOiBKUXVlcnk7XG5cbiAgICBl
bmQoKTogSlF1ZXJ5O1xuXG4gICAgZXEoaW5kZXg6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGZp
bHRlcihzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihlbGVtZW50OiBhbnkpOiBKUXVlcnk7
XG4gICAgZmlsdGVyKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmluZChzZWxlY3Rvcjog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbmQoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZp
bmQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaXJzdCgpOiBKUXVlcnk7XG5cbiAgICBo
YXMoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoYXMoY29udGFpbmVkOiBFbGVtZW50
KTogSlF1ZXJ5O1xuXG4gICAgaXMoc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgaXMo
ZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IGJvb2xlYW47XG4gICAgaXMoZWxlbWVudDogYW55
KTogYm9vbGVhbjtcbiAgICBpcyhvYmo6IEpRdWVyeSk6IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6
IEpRdWVyeTtcblxuICAgIG1hcChjYWxsYmFjazogKGluZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVs
ZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG5leHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICBuZXh0QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
bmV4dFVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4g
ICAgbmV4dFVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgbmV4dFVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgbm90KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbm90KGZ1bmM6IChpbmRl
eDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgbm90KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtc
biAgICBub3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXRQYXJlbnQoKTogSlF1
ZXJ5O1xuXG4gICAgcGFyZW50KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFy
ZW50cyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHNVbnRpbChzZWxl
Y3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRp
bChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVu
dHNVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBy
ZXYoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2QWxsKHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldlVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0
ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJldlVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJldlVudGlsKG9iaj86IEpRdWVyeSwgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2libGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICBzbGljZShzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVl
cnk7XG5cbiAgICAvLyBVdGlsaXRpZXNcblxuICAgIHF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6
IGFueVtdO1xuICAgIHF1ZXVlKHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6
IGFueSk6IEpRdWVyeTtcbiAgICBxdWV1ZShuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVy
eTtcbn1cbmRlY2xhcmUgbW9kdWxlIFwianF1ZXJ5XCIge1xuICAgIGV4cG9ydCA9ICQ7XG59XG5k
ZWNsYXJlIHZhciBqUXVlcnk6IEpRdWVyeVN0YXRpYztcbmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0
YXRpYztcbi8vIGxpYnMvYW5ndWxhci9hbmd1bGFyLmQudHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMg
Zm9yIEFuZ3VsYXIgSlMgMS4wXG4vLyBQcm9qZWN0OiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8g
RGVmaW5pdGlvbnMgYnk6IERpZWdvIFZpbGFyIDxodHRwOi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFy
PlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0
ZWx5VHlwZWRcblxuXG5cbmRlY2xhcmUgdmFyIGFuZ3VsYXI6IG5nLklBbmd1bGFyU3RhdGljO1xu
XG4vLyBTdXBwb3J0IGZvciBwYWlubGVzcyBkZXBlbmRlbmN5IGluamVjdGlvblxuaW50ZXJmYWNl
IEZ1bmN0aW9uIHtcbiAgICAkaW5qZWN0OnN0cmluZ1tdO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4vLyBuZyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG5kZWNsYXJlIG1vZHVsZSBuZyB7XG5cbiAgICAvLyBBbGwgc2VydmljZSBwcm92aWRlcnMgZXh0
ZW5kIHRoaXMgaW50ZXJmYWNlXG4gICAgaW50ZXJmYWNlIElTZXJ2aWNlUHJvdmlkZXIge1xuICAg
ICAgICAkZ2V0OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
QW5ndWxhclN0YXRpY1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaVxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4g
ICAgICAgIGJpbmQoY29udGV4dDogYW55LCBmbjogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTog
RnVuY3Rpb247XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBh
bnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6
IEpRdWVyeSwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAg
ICBib290c3RyYXAoZWxlbWVudDogRWxlbWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5q
ZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogRG9jdW1lbnQsIG1vZHVs
ZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgY29weShzb3VyY2U6
IGFueSwgZGVzdGluYXRpb24/OiBhbnkpOiBhbnk7XG4gICAgICAgIGVsZW1lbnQ6IElBdWdtZW50
ZWRKUXVlcnlTdGF0aWM7XG4gICAgICAgIGVxdWFscyh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkp
OiBib29sZWFuO1xuICAgICAgICBleHRlbmQoZGVzdGluYXRpb246IGFueSwgLi4uc291cmNlczog
YW55W10pOiBhbnk7XG4gICAgICAgIGZvckVhY2gob2JqOiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6
IGFueSwga2V5OiBhbnkpID0+IGFueSwgY29udGV4dD86IGFueSk6IGFueTtcbiAgICAgICAgZnJv
bUpzb24oanNvbjogc3RyaW5nKTogYW55O1xuICAgICAgICBpZGVudGl0eShhcmc/OiBhbnkpOiBh
bnk7XG4gICAgICAgIGluamVjdG9yKG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vy
dmljZTtcbiAgICAgICAgaXNBcnJheSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNE
YXRlKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RlZmluZWQodmFsdWU6IGFueSk6
IGJvb2xlYW47XG4gICAgICAgIGlzRWxlbWVudCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAg
ICAgaXNGdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNOdW1iZXIodmFs
dWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFu
O1xuICAgICAgICBpc1N0cmluZyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNVbmRl
ZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGxvd2VyY2FzZShzdHI6IHN0cmlu
Zyk6IHN0cmluZztcbiAgICAgICAgLyoqIGNvbnN0cnVjdCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRp
b25cblx0XHRvZmZpY2lhbCBkb2NzOiBJbnRlcmZhY2UgZm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIg
bW9kdWxlcy5cblx0XHRzZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIu
TW9kdWxlXG5cdFx0Ki9cbiAgICAgICAgbW9kdWxlKFxuICAgICAgICAgICAgLyoqIG5hbWUgb2Yg
eW91ciBtb2R1bGUgeW91IHdhbnQgdG8gY3JlYXRlICovXG4gICAgICAgICAgICBuYW1lOiBzdHJp
bmcsXG4gICAgICAgICAgICAvKiogbmFtZSBvZiBtb2R1bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9c
biAgICAgICAgICAgIHJlcXVpcmVzPzogc3RyaW5nW10sXG4gICAgICAgICAgICBjb25maWdGdW5j
dGlvbj86IGFueSk6IElNb2R1bGU7XG4gICAgICAgIG5vb3AoLi4uYXJnczogYW55W10pOiB2b2lk
O1xuICAgICAgICB0b0pzb24ob2JqOiBhbnksIHByZXR0eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4g
ICAgICAgIHVwcGVyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgdmVyc2lvbjog
e1xuICAgICAgICAgICAgZnVsbDogc3RyaW5nO1xuICAgICAgICAgICAgbWFqb3I6IG51bWJlcjtc
biAgICAgICAgICAgIG1pbm9yOiBudW1iZXI7XG4gICAgICAgICAgICBkb3Q6IG51bWJlcjtcbiAg
ICAgICAgICAgIGNvZGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTW9kdWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElNb2R1bGUge1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBh
bmltYXRpb25GYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4g
ICAgICAgIGFuaW1hdGlvbihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIC8qKiBj
b25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lz
dGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5c
dFx0ICovXG4gICAgICAgIGNvbmZpZyhjb25maWdGbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAg
ICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhv
ZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUg
bG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWcoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246
IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTog
YW55KTogSU1vZHVsZTtcbiAgICAgICAgY29uc3RhbnQob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9y
OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBp
bmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb250
cm9sbGVyKG9iamVjdCA6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1l
OiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAg
ZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTog
SU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAg
ICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90
YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGZhY3Rvcnkob2JqZWN0OiBP
YmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0
b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAg
ZmlsdGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTog
c3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xu
ICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9y
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG9iamVjdDogT2JqZWN0KTogSU1v
ZHVsZTtcbiAgICAgICAgcnVuKGluaXRpYWxpemF0aW9uRnVuY3Rpb246IEZ1bmN0aW9uKTogSU1v
ZHVsZTtcbiAgICAgICAgcnVuKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1
bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGlubGluZUFu
bm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2Uob2Jq
ZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVl
OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7
XG5cbiAgICAgICAgLy8gUHJvcGVydGllc1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAg
IHJlcXVpcmVzOiBzdHJpbmdbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBBdHRyaWJ1dGVzXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElBdHRyaWJ1dGVzIHtcblx0Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8g
YmUgYWJsZSB0byBhY2Nlc3MgdGhlIHNjb3BlZCBhdHRyaWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVs
ZWdhbnRcblx0Ly8gYmVjYXVzZSB5b3UgaGF2ZSB0byB1c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQg
b2YgYXR0cnMuZm9vIGJ1dCBJIGRvbid0IGtub3cgb2YgYSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMg
c2hvdWxkIHJlYWxseSBiZSBsaW1pdGVkIHRvIHJldHVybiBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMg
dGhpcyBwcm9ibGVtOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xNzIwMTg1NC8xNjU2NTZc
blx0W25hbWU6IHN0cmluZ106IGFueTtcblxuICAgICAgICAvLyBBZGRzIHRoZSBDU1MgY2xhc3Mg
dmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlXG4gICAgICAg
IC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24g
d2lsbCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAg
ICAgICAgJGFkZENsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFJl
bW92ZXMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFt
ZXRlciBmcm9tIHRoZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFi
bGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGZvclxuICAgICAgICAvLyB0
aGUgY2xhc3MgcmVtb3ZhbC5cbiAgICAgICAgJHJlbW92ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcp
OiB2b2lkO1xuXG4gICAgICAgIC8vIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4g
ICAgICAgICRzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8v
IE9ic2VydmVzIGFuIGludGVycG9sYXRlZCBhdHRyaWJ1dGUuXG4gICAgICAgIC8vIFRoZSBvYnNl
cnZlciBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25jZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2Vz
dFxuICAgICAgICAvLyBmb2xsb3dpbmcgY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0aGVu
IGludm9rZWQgd2hlbmV2ZXIgdGhlXG4gICAgICAgIC8vIGludGVycG9sYXRlZCB2YWx1ZSBjaGFu
Z2VzLlxuICAgICAgICAkb2JzZXJ2ZShuYW1lOiBzdHJpbmcsIGZuOih2YWx1ZT86YW55KT0+YW55
KTogRnVuY3Rpb247XG5cbiAgICAgICAgLy8gQSBtYXAgb2YgRE9NIGVsZW1lbnQgYXR0cmlidXRl
IG5hbWVzIHRvIHRoZSBub3JtYWxpemVkIG5hbWUuIFRoaXMgaXMgbmVlZGVkXG4gICAgICAgIC8v
IHRvIGRvIHJldmVyc2UgbG9va3VwIGZyb20gbm9ybWFsaXplZCBuYW1lIGJhY2sgdG8gYWN0dWFs
IG5hbWUuXG4gICAgICAgICRhdHRyOiBPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gRm9ybUNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOmZvcm0uRm9ybUNvbnRyb2xsZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZvcm1Db250cm9sbGVyIHtcbiAgICAgICAg
JHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2
YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRlcnJv
cjogYW55O1xuICAgICAgICAkYWRkQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xs
ZXIpOiB2b2lkO1xuICAgICAgICAkcmVtb3ZlQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENv
bnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkc2V0RGlydHkoKTogdm9pZDtcbiAgICAgICAgJHNl
dFByaXN0aW5lKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuZGlyZWN0aXZlOm5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU5nTW9kZWxDb250cm9sbGVyIHtcbiAgICAgICAg
JHJlbmRlcigpOiB2b2lkO1xuICAgICAgICAkc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9yS2V5
OiBzdHJpbmcsIGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lkO1xuICAgICAgICAvLyBEb2N1bWVudGF0
aW9uIHN0YXRlcyB2aWV3VmFsdWUgYW5kIG1vZGVsVmFsdWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90
aGVyXG4gICAgICAgIC8vIHR5cGVzIGRvIHdvcmsgYW5kIGl0J3MgY29tbW9uIHRvIHVzZSB0aGVt
LlxuICAgICAgICAkc2V0Vmlld1ZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgICAgICAkdmll
d1ZhbHVlOiBhbnk7XG5cbiAgICAgICAgJG1vZGVsVmFsdWU6IGFueTtcblxuICAgICAgICAkcGFy
c2VyczogSU1vZGVsUGFyc2VyW107XG4gICAgICAgICRmb3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0
ZXJbXTtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtc
biAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAg
ICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxQYXJz
ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SU1vZGVsRm9ybWF0dGVyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2NvcGVcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZS5TY29wZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJU2NvcGUge1xuICAgICAgICAkYXBwbHkoKTogYW55O1xu
ICAgICAgICAkYXBwbHkoZXhwOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IChz
Y29wZTogSVNjb3BlKSA9PiBhbnkpOiBhbnk7XG5cbiAgICAgICAgJGJyb2FkY2FzdChuYW1lOiBz
dHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJFdmVudDtcbiAgICAgICAgJGRlc3Ryb3ko
KTogdm9pZDtcbiAgICAgICAgJGRpZ2VzdCgpOiB2b2lkO1xuICAgICAgICAkZW1pdChuYW1lOiBz
dHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJFdmVudDtcblxuICAgICAgICAvLyBEb2N1
bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24g
Y291bnRzIG9uIGl0XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IHN0cmluZywgYXJncz86IE9i
amVjdCk6IGFueTtcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+
IGFueSwgYXJncz86IE9iamVjdCk6IGFueTtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNh
eXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0
XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZDtcbiAgICAgICAg
JGV2YWxBc3luYyhleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogdm9pZDtcblxu
ICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZSBieSB0aGUgaW1wbGVtZW50YXRpb24gY2hlY2tp
bmcgc3RyYXRlZ3lcbiAgICAgICAgJG5ldyhpc29sYXRlPzogYm9vbGVhbik6IElTY29wZTtcblxu
ICAgICAgICAkb24obmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBJQW5ndWxhckV2ZW50
LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoKHdh
dGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/
OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0
cmluZywgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElT
Y29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAg
ICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVu
ZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAg
ICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5l
cj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnks
IG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaENv
bGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFu
eSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG4gICAg
ICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4g
YW55LCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2Nv
cGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgICRwYXJlbnQ6IElTY29wZTtcblxuICAg
ICAgICAkaWQ6IG51bWJlcjtcblxuICAgICAgICAvLyBIaWRkZW4gbWVtYmVyc1xuICAgICAgICAk
JGlzb2xhdGVCaW5kaW5nczogYW55O1xuICAgICAgICAkJHBoYXNlOiBhbnk7XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElBbmd1bGFyRXZlbnQge1xuICAgICAgICB0YXJnZXRTY29wZTogSVNjb3Bl
O1xuICAgICAgICBjdXJyZW50U2NvcGU6IElTY29wZTtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xu
ICAgICAgICBwcmV2ZW50RGVmYXVsdDogRnVuY3Rpb247XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50
ZWQ6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gQXZhaWxhYmxlIG9ubHkgZXZlbnRzIHRoYXQgd2Vy
ZSAkZW1pdC10ZWRcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uPzogRnVuY3Rpb247XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gV2luZG93U2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kd2luZG93XG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElXaW5kb3dTZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBCcm93c2VyU2VydmljZVxuICAgIC8v
IFRPRE8gdW5kb2N1bWVudGVkLCBzbyB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBzb3VyY2Ug
Y29kZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQnJvd3NlclNlcnZp
Y2Uge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0aW1lb3V0XG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElUaW1lb3V0U2VydmljZSB7XG4gICAg
ICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVh
bik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+
KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRl
cnZhbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGludGVydmFsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnZh
bFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIsIGNvdW50
PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAg
ICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmlsdGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJRmlsdGVyU2VydmljZSB7XG4gICAgICAgIChuYW1lOiBz
dHJpbmcpOiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUZpbHRlclByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmlu
ZywgZmlsdGVyRmFjdG9yeTogRnVuY3Rpb24pOiBJU2VydmljZVByb3ZpZGVyO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2FsZVNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2FsZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYWxlU2VydmljZSB7XG4gICAgICAgIGlkOiBzdHJp
bmc7XG5cbiAgICAgICAgLy8gVGhlc2UgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIC8vIENo
ZWNrIGFuZ3VsYXIncyBpMThuIGZpbGVzIGZvciBleGVtcGxlc1xuICAgICAgICBOVU1CRVJfRk9S
TUFUUzogSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIERBVEVUSU1FX0ZP
Uk1BVFM6IElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIHBsdXJhbENh
dDogKG51bTogYW55KSA9PiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVO
dW1iZXJGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgREVDSU1BTF9TRVA6IHN0cmluZztcbiAg
ICAgICAgR1JPVVBfU0VQOiBzdHJpbmc7XG4gICAgICAgIFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVy
UGF0dGVybkRlc2NyaXB0b3JbXTtcbiAgICAgICAgQ1VSUkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvciB7XG4gICAg
ICAgIG1pbkludDogbnVtYmVyO1xuICAgICAgICBtaW5GcmFjOiBudW1iZXI7XG4gICAgICAgIG1h
eEZyYWM6IG51bWJlcjtcbiAgICAgICAgcG9zUHJlOiBzdHJpbmc7XG4gICAgICAgIHBvc1N1Zjog
c3RyaW5nO1xuICAgICAgICBuZWdQcmU6IHN0cmluZztcbiAgICAgICAgbmVnU3VmOiBzdHJpbmc7
XG4gICAgICAgIGdTaXplOiBudW1iZXI7XG4gICAgICAgIGxnU2l6ZTogbnVtYmVyO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAg
ICAgTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVE1PTlRIOiBzdHJpbmdbXTtcbiAgICAg
ICAgREFZOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlREQVk6IHN0cmluZ1tdO1xuICAgICAgICBB
TVBNUzogc3RyaW5nW107XG4gICAgICAgIG1lZGl1bTogc3RyaW5nO1xuICAgICAgICBzaG9ydDog
c3RyaW5nO1xuICAgICAgICBmdWxsRGF0ZTogc3RyaW5nO1xuICAgICAgICBsb25nRGF0ZTogc3Ry
aW5nO1xuICAgICAgICBtZWRpdW1EYXRlOiBzdHJpbmc7XG4gICAgICAgIHNob3J0RGF0ZTogc3Ry
aW5nO1xuICAgICAgICBtZWRpdW1UaW1lOiBzdHJpbmc7XG4gICAgICAgIHNob3J0VGltZTogc3Ry
aW5nO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvZ1NlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gICAgICAgIGRl
YnVnOiBJTG9nQ2FsbDtcbiAgICAgICAgZXJyb3I6IElMb2dDYWxsO1xuICAgICAgICBpbmZvOiBJ
TG9nQ2FsbDtcbiAgICAgICAgbG9nOiBJTG9nQ2FsbDtcbiAgICAgICAgd2FybjogSUxvZ0NhbGw7
XG4gICAgfVxuXG4gICAgLy8gV2UgZGVmaW5lIHRoaXMgYXMgc2VwYXJldGUgaW50ZXJmYWNlIHNv
IHdlIGNhbiByZW9wZW4gaXQgbGF0ZXIgZm9yXG4gICAgLy8gdGhlIG5nTW9jayBtb2R1bGUuXG4g
ICAgaW50ZXJmYWNlIElMb2dDYWxsIHtcbiAgICAgICAgKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBQYXJzZVNlcnZpY2VcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHBhcnNlXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElQYXJzZVNlcnZpY2Uge1xuICAgICAgICAo
ZXhwcmVzc2lvbjogc3RyaW5nKTogSUNvbXBpbGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUNvbXBpbGVkRXhwcmVzc2lvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnksIGxv
Y2Fscz86IGFueSk6IGFueTtcblxuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQs
IHVuZGVmaW5lZCBpcyBnb25uYSBiZSB1c2VkIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvblxuICAg
ICAgICAvLyBkb2VzIG5vdCBjaGVjayB0aGUgcGFyYW1ldGVyLiBMZXQncyBmb3JjZSBhIHZhbHVl
IGZvciBjb25zaXN0ZW5jeS4gSWYgY29uc3VtZXJcbiAgICAgICAgLy8gd2hhbnRzIHRvIHVuZGVm
aW5lIGl0LCBwYXNzIHRoZSB1bmRlZmluZWQgdmFsdWUgZXhwbGljaXRseS5cbiAgICAgICAgYXNz
aWduKGNvbnRleHQ6IGFueSwgdmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBMb2NhdGlvblNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGV2X2d1aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtc
biAgICAgICAgYWJzVXJsKCk6IHN0cmluZztcbiAgICAgICAgaGFzaCgpOiBzdHJpbmc7XG4gICAg
ICAgIGhhc2gobmV3SGFzaDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgaG9z
dCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKG5ld1Bh
dGg6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHBvcnQoKTogbnVtYmVyO1xu
ICAgICAgICBwcm90b2NvbCgpOiBzdHJpbmc7XG4gICAgICAgIHJlcGxhY2UoKTogSUxvY2F0aW9u
U2VydmljZTtcbiAgICAgICAgc2VhcmNoKCk6IGFueTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRl
cnNNYXA6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6
IHN0cmluZywgcGFyYW1ldGVyVmFsdWU6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAg
IHVybCgpOiBzdHJpbmc7XG4gICAgICAgIHVybCh1cmw6IHN0cmluZyk6IElMb2NhdGlvblNlcnZp
Y2U7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblByb3ZpZGVyIGV4dGVuZHMgSVNl
cnZpY2VQcm92aWRlciB7XG4gICAgICAgIGhhc2hQcmVmaXgoKTogc3RyaW5nO1xuICAgICAgICBo
YXNoUHJlZml4KHByZWZpeDogc3RyaW5nKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0
bWw1TW9kZSgpOiBib29sZWFuO1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHRo
YXQgcGFyYW1ldGVyIGlzIHN0cmluZywgYnV0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHRl
c3RzIGl0IGFzIGJvb2xlYW4sIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2VcbiAgICAgICAgLy8gc2lu
Y2UgdGhpcyBpcyBhIHRvZ2dsZXJcbiAgICAgICAgaHRtbDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6
IElMb2NhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIERvY3VtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kZG9jdW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SURvY3VtZW50U2VydmljZSBleHRlbmRzIERvY3VtZW50IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBFeGNlcHRpb25IYW5kbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZXhjZXB0aW9uSGFuZGxlclxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRXhjZXB0aW9uSGFuZGxlclNlcnZpY2Uge1xuICAg
ICAgICAoZXhjZXB0aW9uOiBFcnJvciwgY2F1c2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RFbGVtZW50U2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdEVsZW1lbnRcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RFbGVtZW50U2VydmljZSBleHRl
bmRzIEpRdWVyeSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUVNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHFcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVFTZXJ2aWNlIHtcbiAgICAgICAgYWxsKHBy
b21pc2VzOiBJUHJvbWlzZTxhbnk+W10pOiBJUHJvbWlzZTxhbnlbXT47XG4gICAgICAgIGRlZmVy
PFQ+KCk6IElEZWZlcnJlZDxUPjtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IElQcm9t
aXNlPHZvaWQ+O1xuICAgICAgICB3aGVuPFQ+KHZhbHVlOiBUKTogSVByb21pc2U8VD47XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhlbjxUUmVzdWx0Pihz
dWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0
PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86
IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxU
UmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElQcm9taXNlPFRS
ZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxi
YWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0
aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gVFJlc3Vs
dCwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJh
Y2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG5cblxuICAgICAg
ICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElIdHRwUHJvbWlz
ZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0Pihv
blJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8
VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFu
eSkgPT4gVFJlc3VsdCk6IElQcm9taXNlPFRSZXN1bHQ+O1xuXG4gICAgICAgIGZpbmFsbHk8VFJl
c3VsdD4oZmluYWxseUNhbGxiYWNrOiAoKT0+YW55KTpJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSURlZmVycmVkPFQ+IHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZT86
IFQpOiB2b2lkO1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogdm9pZDtcbiAgICAgICAg
bm90aWZ5KHN0YXRlPzphbnkpOiB2b2lkO1xuICAgICAgICBwcm9taXNlOiBJUHJvbWlzZTxUPjtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmNob3JTY3JvbGxTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRhbmNob3JT
Y3JvbGxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9s
bFNlcnZpY2Uge1xuICAgICAgICAoKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFu
Y2hvclNjcm9sbFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRp
c2FibGVBdXRvU2Nyb2xsaW5nKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gQ2FjaGVGYWN0b3J5U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kY2FjaGVGYWN0b3J5XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElDYWNoZUZhY3RvcnlTZXJ2aWNlIHtcbiAgICAgICAgLy8gTGV0cyBu
b3QgZm9jZSB0aGUgb3B0aW9uc01hcCB0byBoYXZlIHRoZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4g
dGhvdWdoXG4gICAgICAgIC8vIGl0J3MgdGhlIE9OTFkgb3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhl
IGltcGxlbWVudGF0aW9uIHRvZGF5LCBhIGNvbnN1bWVyXG4gICAgICAgIC8vIG1pZ2h0IGZpbmQg
aXQgdXNlZnVsIHRvIGFzc29jaWF0ZSBzb21lIG90aGVyIG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9i
amVjdC5cbiAgICAgICAgLy8oY2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0
eTogbnVtYmVyOyB9KTogQ2FjaGVPYmplY3Q7XG4gICAgICAgIChjYWNoZUlkOiBzdHJpbmcsIG9w
dGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0pOiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAg
ICAgLy8gTWV0aG9kcyBiZWxsb3cgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIGluZm8oKTog
YW55O1xuICAgICAgICBnZXQgKGNhY2hlSWQ6IHN0cmluZyk6IElDYWNoZU9iamVjdDtcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUNhY2hlT2JqZWN0IHtcbiAgICAgICAgaW5mbygpOiB7XG4gICAg
ICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuXG4gICAgICAg
ICAgICAvLyBOb3QgZ2FyYW50ZWVkIHRvIGhhdmUsIHNpbmNlIGl0J3MgYSBub24tbWFuZGF0b3J5
IG9wdGlvblxuICAgICAgICAgICAgLy9jYXBhY2l0eTogbnVtYmVyO1xuICAgICAgICB9O1xuICAg
ICAgICBwdXQoa2V5OiBzdHJpbmcsIHZhbHVlPzogYW55KTogdm9pZDtcbiAgICAgICAgZ2V0IChr
ZXk6IHN0cmluZyk6IGFueTtcbiAgICAgICAgcmVtb3ZlKGtleTogc3RyaW5nKTogdm9pZDtcbiAg
ICAgICAgcmVtb3ZlQWxsKCk6IHZvaWQ7XG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb21waWxlU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb21waWxlU2VydmljZSB7XG4gICAg
ICAgIChlbGVtZW50OiBzdHJpbmcsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rp
b24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAg
ICAgICAoZWxlbWVudDogRWxlbWVudCwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5j
dGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4g
ICAgICAgIChlbGVtZW50OiBKUXVlcnksIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVu
Y3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQ
cm92aWRlciB7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rv
cnk6IEZ1bmN0aW9uKTogSUNvbXBpbGVQcm92aWRlcjtcblxuICAgICAgICAvLyBVbmRvY3VtZW50
ZWQsIGJ1dCBpdCBpcyB0aGVyZS4uLlxuICAgICAgICBkaXJlY3RpdmUoZGlyZWN0aXZlc01hcDog
YW55KTogSUNvbXBpbGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRl
TGlua2luZ0Z1bmN0aW9uIHtcbiAgICAgICAgLy8gTGV0J3MgaGludCBidXQgbm90IGZvcmNlIGNs
b25lQXR0YWNoRm4ncyBzaWduYXR1cmVcbiAgICAgICAgKHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0
YWNoRm4/OiAoY2xvbmVkRWxlbWVudD86IEpRdWVyeSwgc2NvcGU/OiBJU2NvcGUpID0+IGFueSk6
IEpRdWVyeTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb250cm9s
bGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
Y29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
Y29udHJvbGxlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElDb250cm9sbGVyU2VydmljZSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0
aW9uIGRvZXNuJ3Qgc3RhdGUgdGhpcywgbG9jYWxzIGFyZSBvcHRpb25hbFxuICAgICAgICAoY29u
dHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAg
ICAoY29udHJvbGxlck5hbWU6IHN0cmluZywgbG9jYWxzPzogYW55KTogYW55O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJQ29udHJvbGxlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRl
ciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9y
OiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZGVwZW5k
ZW5jeUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUh0dHBTZXJ2aWNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBh
bmQgdXJsIG11c3QgYmUgcHJvdmlkZWQuLi5cbiAgICAgICAgKGNvbmZpZzogSVJlcXVlc3RDb25m
aWcpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZ2V0ICh1cmw6IHN0cmluZywgUmVxdWVz
dENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWxldGUgKHVybDog
c3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAg
IGhlYWQodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55
PjtcbiAgICAgICAganNvbnAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0
cFByb21pc2U8YW55PjtcbiAgICAgICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1
ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHB1dCh1cmw6IHN0
cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47
XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcblxuICAgICAgICAvLyBGb3IgZGVi
dWdnaW5nLCBCVVQgaXQgaXMgZG9jdW1lbnRlZCBhcyBwdWJsaWMsIHNvLi4uXG4gICAgICAgIHBl
bmRpbmdSZXF1ZXN0czogYW55W107XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBqdXN0IGZvciBo
aW50aW5nLlxuICAgIC8vIFNvbWUgb3BldGlvbnMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBkZXBl
bmRpbmcgb24gdGhlIHJlcXVlc3QuXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRodHRwI1VzYWdlIGZvciBvcHRpb25zIGV4cGxhbmF0aW9uc1xuICAgIGludGVy
ZmFjZSBJUmVxdWVzdENvbmZpZyB7XG4gICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgICB1
cmw6IHN0cmluZztcbiAgICAgICAgcGFyYW1zPzogYW55O1xuXG4gICAgICAgIC8vIFhYWCBpdCBo
YXMgaXQncyBvd24gc3RydWN0dXJlLi4uICBwZXJoYXBzIHdlIHNob3VsZCBkZWZpbmUgaXQgaW4g
dGhlIGZ1dHVyZVxuICAgICAgICBoZWFkZXJzPzogYW55O1xuXG4gICAgICAgIGNhY2hlPzogYW55
O1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuXG4gICAgICAgIC8vIFRoZXNl
IGFjY2VwdCBtdWx0aXBsZSB0eXBlcywgc28gbGV0J3MgZGVmaW5lIHRoZW0gYXMgYW55XG4gICAg
ICAgIGRhdGE/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q/OiBhbnk7XG4gICAgICAg
IHRyYW5zZm9ybVJlc3BvbnNlPzogYW55O1xuICAgICAgICB0aW1lb3V0PzogYW55OyAvLyBudW1i
ZXIgfCBwcm9taXNlXG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNr
PFQ+IHtcbiAgICAgICAgKGRhdGE6IFQsIHN0YXR1czogbnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVy
TmFtZTogc3RyaW5nKSA9PiBzdHJpbmcsIGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiB2b2lkO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPiB7XG4gICAg
ICAgIGRhdGE/OiBUO1xuICAgICAgICBzdGF0dXM/OiBudW1iZXI7XG4gICAgICAgIGhlYWRlcnM/
OiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZz86IElSZXF1
ZXN0Q29uZmlnO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5k
cyBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHN1Y2Nlc3MoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNh
bGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAgICBlcnJvcihjYWxsYmFjazogSUh0
dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIHRoZW48VFJl
c3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJn
PFQ+KSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VD
YWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNr
QXJnPFQ+KSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTog
SUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92
aWRlciB7XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcbiAgICAgICAgaW50ZXJj
ZXB0b3JzOiBhbnlbXTtcbiAgICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvcnM6IGFueVtdO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBCYWNrZW5kU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRc
biAgICAvLyBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3Rs
eS5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBCYWNrZW5kU2Vy
dmljZSB7XG4gICAgICAgIC8vIFhYWCBQZXJoYXBzIGRlZmluZSBjYWxsYmFjayBzaWduYXR1cmUg
aW4gdGhlIGZ1dHVyZVxuICAgICAgICAobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBwb3N0
PzogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uLCBoZWFkZXJzPzogYW55LCB0aW1lb3V0PzogbnVt
YmVyLCB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnBvbGF0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xu
ICAgICAgICAodGV4dDogc3RyaW5nLCBtdXN0SGF2ZUV4cHJlc3Npb24/OiBib29sZWFuKTogSUlu
dGVycG9sYXRpb25GdW5jdGlvbjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAg
ICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJw
b2xhdGlvbkZ1bmN0aW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSk6IHN0cmluZztcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVBy
b3ZpZGVyIHtcbiAgICAgICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5
bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgICAgIGVuZFN5
bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIGVuZFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVy
cG9sYXRlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
VGVtcGxhdGVDYWNoZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHRlbXBsYXRlQ2FjaGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlIGV4dGVuZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RTY29wZVNlcnZpY2UgZXh0ZW5kcyBJU2Nv
cGUge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuXHRpbnRlcmZhY2UgSVNDRVNlcnZpY2Uge1xuXHRcdGdldFRydXN0ZWQodHlw
ZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZh
bHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEh0bWwodmFsdWU6IGFueSk6IGFueTtcblx0
XHRnZXRUcnVzdGVkSnModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkUmVzb3VyY2VV
cmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7
XG5cdFx0cGFyc2UodHlwZTogc3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDog
YW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNDc3MoZXhwcmVzc2lvbjogc3Ry
aW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSHRt
bChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55
O1xuXHRcdHBhcnNlQXNKcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2Nh
bHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNSZXNvdXJjZVVybChleHByZXNzaW9uOiBzdHJp
bmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNVcmwo
ZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtc
blx0XHR0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFz
SHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNKcyh2YWx1ZTogYW55KTogYW55O1xu
XHRcdHRydXN0QXNSZXNvdXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNVcmwo
dmFsdWU6IGFueSk6IGFueTtcblx0XHRpc0VuYWJsZWQoKTogYm9vbGVhbjtcblx0fVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlk
ZXIge1xuICAgICAgICBlbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAg
ICAgICBnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4g
ICAgICAgIHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICB2
YWx1ZU9mKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZp
Y2VQcm92aWRlciB7XG4gICAgICAgIHJlc291cmNlVXJsQmxhY2tsaXN0KGJsYWNrbGlzdDogYW55
W10pOiB2b2lkO1xuICAgICAgICByZXNvdXJjZVVybFdoaXRlbGlzdCh3aGl0ZWxpc3Q6IGFueVtd
KTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEaXJlY3Rp
dmVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQ
cm92aWRlciNkaXJlY3RpdmVcbiAgICAvLyBhbmQgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9n
dWlkZS9kaXJlY3RpdmVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGludGVyZmFjZSBJ
RGlyZWN0aXZle1xuICAgICAgICBjb21waWxlPzpcbiAgICAgICAgICAgICh0ZW1wbGF0ZUVsZW1l
bnQ6IGFueSxcbiAgICAgICAgICAgIHRlbXBsYXRlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4g
ICAgICAgICAgICB0cmFuc2NsdWRlOiAoc2NvcGU6IElTY29wZSwgY2xvbmVMaW5raW5nRm46IEZ1
bmN0aW9uKSA9PiB2b2lkXG4gICAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgY29udHJvbGxl
cj86IGFueTtcbiAgICAgICAgY29udHJvbGxlckFzPzogc3RyaW5nO1xuICAgICAgICBsaW5rPzpc
biAgICAgICAgICAgIChzY29wZTogSVNjb3BlLFxuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50
OiBhbnksXG4gICAgICAgICAgICBpbnN0YW5jZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAg
ICAgICAgICAgY29udHJvbGxlcjogYW55XG4gICAgICAgICAgICApID0+IHZvaWQ7XG4gICAgICAg
IG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHByaW9yaXR5PzogbnVtYmVyO1xuICAgICAgICByZXBs
YWNlPzogYm9vbGVhbjtcbiAgICAgICAgcmVxdWlyZT86IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/
OiBzdHJpbmc7XG4gICAgICAgIHNjb3BlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZT86IGFueTtc
biAgICAgICAgdGVtcGxhdGVVcmw/OiBhbnk7XG4gICAgICAgIHRlcm1pbmFsPzogYm9vbGVhbjtc
biAgICAgICAgdHJhbnNjbHVkZT86IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBhbmd1bGFyLmVsZW1lbnRcbiAgICAvLyB3aGVuIGNhbGxpbmcgYW5ndWxhci5l
bGVtZW50LCBhbmd1bGFyIHJldHVybnMgYSBqUXVlcnkgb2JqZWN0LFxuICAgIC8vIGF1Z21lbnRl
ZCB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBsaWtlIGUuZy4gc2NvcGUuXG4gICAgLy8gc2VlOiBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeVN0YXRpYyBleHRlbmRz
IEpRdWVyeVN0YXRpYyB7XG4gICAgICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVu
dGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiB7fSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAg
ICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAg
IChvYmplY3Q6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChmdW5jOiBGdW5j
dGlvbik6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChhcnJheTogYW55W10pOiBJQXVnbWVu
dGVkSlF1ZXJ5O1xuICAgICAgICAoKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeSBleHRlbmRzIEpRdWVyeSB7XG4gICAgICAgIC8vIFRP
RE86IGV2ZW50cywgaG93IHRvIGRlZmluZT9cbiAgICAgICAgLy8kZGVzdHJveVxuXG4gICAgICAg
IGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQo
ZWxlbWVudDogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChvYmo6IEpRdWVy
eSk6IElBdWdtZW50ZWRKUXVlcnk7XG5cbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcp
OiBhbnk7XG4gICAgICAgIGluamVjdG9yKCk6IGFueTtcbiAgICAgICAgc2NvcGUoKTogSVNjb3Bl
O1xuXG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVl
cnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSk6
IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxu
ICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQVVUTyBtb2R1bGUgKGFu
Z3VsYXIuanMpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgZXhwb3J0IG1vZHVsZSBhdXRv
IHtcblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBJbmplY3RvclNlcnZpY2Vc
biAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJGluamVj
dG9yXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJSW5qZWN0b3JT
ZXJ2aWNlIHtcbiAgICAgICAgICAgIGFubm90YXRlKGZuOiBGdW5jdGlvbik6IHN0cmluZ1tdO1xu
ICAgICAgICAgICAgYW5ub3RhdGUoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogc3Ry
aW5nW107XG4gICAgICAgICAgICBnZXQgKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgICAg
IGluc3RhbnRpYXRlKHR5cGVDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFu
eTtcbiAgICAgICAgICAgIGludm9rZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBh
bnk7XG4gICAgICAgICAgICBpbnZva2UoZnVuYzogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnksIGxv
Y2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgICAgIC8vIFByb3ZpZGVTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9BVVRPLiRwcm92aWRlXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
ICAgIGludGVyZmFjZSBJUHJvdmlkZVNlcnZpY2Uge1xuICAgICAgICAgICAgLy8gRG9jdW1lbnRh
dGlvbiBzYXlzIGl0IHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxc
biAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5c
biAgICAgICAgICAgIC8vIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtc
biAgICAgICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5c
biAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcjogRnVuY3Rpb24p
OiB2b2lkO1xuICAgICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9ySW5s
aW5lOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2Vy
dmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAg
ICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBh
bnlbXSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBz
dHJpbmcsIHByb3ZpZGVyOiBuZy5JU2VydmljZVByb3ZpZGVyKTogbmcuSVNlcnZpY2VQcm92aWRl
cjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29u
c3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHNl
cnZpY2UobmFtZTogc3RyaW5nLCBjb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVBy
b3ZpZGVyO1xuICAgICAgICAgICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogbmcu
SVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuLy8gbW9kZWxzL1RvZG9J
dGVtLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0
IGNsYXNzIFRvZG9JdGVtIHtcbiAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBwdWJs
aWMgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgICAgIHB1YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5c
biAgICAgICAgICAgICkgeyB9XG4gICAgfVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRz
XG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TY29wZSBleHRlbmRz
IG5nLklTY29wZSB7XG5cdFx0dG9kb3M6IFRvZG9JdGVtW107XG5cdFx0bmV3VG9kbzogc3RyaW5n
O1xuXHRcdGVkaXRlZFRvZG86IFRvZG9JdGVtO1xuXHRcdG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07
XG5cdFx0cmVtYWluaW5nQ291bnQ6IG51bWJlcjtcblx0XHRkb25lQ291bnQ6IG51bWJlcjtcblx0
XHRhbGxDaGVja2VkOiBib29sZWFuO1xuXHRcdHJldmVydGVkOiBib29sZWFuO1xuXHRcdHN0YXR1
c0ZpbHRlcjogeyBjb21wbGV0ZWQ/OiBib29sZWFuIH07XG5cdFx0bG9jYXRpb246IG5nLklMb2Nh
dGlvblNlcnZpY2U7XG5cdFx0dm06IFRvZG9DdHJsO1xuXHR9XG59XG4vLyBpbnRlcmZhY2VzL0lU
b2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2Rv
U3RvcmFnZSB7XG5cdFx0Z2V0ICgpOiBUb2RvSXRlbVtdO1xuXHRcdHB1dCh0b2RvczogVG9kb0l0
ZW1bXSk7XG5cdH1cbn0vLyBkaXJlY3RpdmVzL1RvZG9Gb2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mg
e1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBm
b2N1cyBvbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlIGV4cHJlc3Npb24g
aXQgYmluZHMgdG8gZXZhbHVhdGVzIHRvIHRydWUuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24g
dG9kb0ZvY3VzKCR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtc
blx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBK
UXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJp
YnV0ZXMudG9kb0ZvY3VzLCBuZXd2YWwgPT4ge1xuXHRcdFx0XHRcdGlmIChuZXd2YWwpIHtcblx0
XHRcdFx0XHRcdCR0aW1lb3V0KCgpID0+IGVsZW1lbnRbMF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xu
XHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9G
b2N1cy4kaW5qZWN0ID0gWyckdGltZW91dCddO1xuXG59Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50
c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAq
IERpcmVjdGl2ZSB0aGF0IGV4ZWN1dGVzIGFuIGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVudCBp
dCBpcyBhcHBsaWVkIHRvIGxvc2VzIGZvY3VzLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlv
biB0b2RvQmx1cigpOiBuZy5JRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAg
ICAgIGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVz
OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7
ICRzY29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvQmx1cik7IH0pO1xuICAgICAgICAgICAgICAg
ICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgnYmx1cicpOyB9
KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyBkaXJlY3RpdmVzL1Rv
ZG9Fc2NhcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0
IEVTQ0FQRV9LRVkgPSAyNztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgY2FuY2VscyBl
ZGl0aW5nIGEgdG9kbyBpZiB0aGUgdXNlciBwcmVzc2VzIHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0
ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Fc2NhcGUoKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJu
IHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRy
aWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5iaW5kKCdrZXlkb3duJywgKGV2ZW50
KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0
XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvRXNjYXBlKTtcblx0XHRcdFx0
XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdCRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4g
eyBlbGVtZW50LnVuYmluZCgna2V5ZG93bicpOyB9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59
XG4vLyBzZXJ2aWNlcy9Ub2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ug
c3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIFNlcnZpY2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJl
dHJpZXZlcyBUT0RPcyBmcm9tIGxvY2FsU3RvcmFnZS5cbiAgICAgKi9cbiAgICBleHBvcnQgY2xh
c3MgVG9kb1N0b3JhZ2UgaW1wbGVtZW50cyBJVG9kb1N0b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JB
R0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzLXR5cGVzY3JpcHQnO1xuXG4gICAgICAgIGdldCAoKTog
VG9kb0l0ZW1bXSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2Uu
Z2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQpIHx8ICdbXScpO1xuICAgICAgICB9XG5cbiAgICAgICAg
cHV0KHRvZG9zOiBUb2RvSXRlbVtdKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRl
bSh0aGlzLlNUT1JBR0VfSUQsIEpTT04uc3RyaW5naWZ5KHRvZG9zKSk7XG4gICAgICAgIH1cbiAg
ICB9XG59Ly8gY29udHJvbGxlcnMvVG9kb0N0cmwudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3Vz
ZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWFpbiBjb250cm9sbGVyIGZvciB0aGUgYXBw
LiBUaGUgY29udHJvbGxlcjpcblx0ICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2Rl
bCB2aWEgdGhlIHRvZG9TdG9yYWdlIHNlcnZpY2Vcblx0ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0
byB0aGUgdGVtcGxhdGUgYW5kIHByb3ZpZGVzIGV2ZW50IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBv
cnQgY2xhc3MgVG9kb0N0cmwge1xuXG5cdFx0cHJpdmF0ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxu
XHRcdC8vICRpbmplY3QgYW5ub3RhdGlvbi5cblx0XHQvLyBJdCBwcm92aWRlcyAkaW5qZWN0b3Ig
d2l0aCBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNpZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBj
b25zdHJ1Y3RvclxuXHRcdC8vIGl0IGlzIGJldHRlciB0byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBj
b25zdHJ1Y3RvciwgYmVjYXVzZSB0aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoIGluIGNvdW50IGFu
ZCB0eXBlLlxuXHRcdC8vIFNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpXG5c
dFx0cHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xuXHRcdFx0JyRzY29wZScsXG5cdFx0XHQnJGxv
Y2F0aW9uJyxcblx0XHRcdCd0b2RvU3RvcmFnZScsXG5cdFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRc
dF07XG5cblx0XHQvLyBkZXBlbmRlbmNpZXMgYXJlIGluamVjdGVkIHZpYSBBbmd1bGFySlMgJGlu
amVjdG9yXG5cdFx0Ly8gY29udHJvbGxlcidzIG5hbWUgaXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNh
dGlvbi50cyBhbmQgc3BlY2lmaWVkIGZyb20gbmctY29udHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5k
ZXguaHRtbFxuXHRcdGNvbnN0cnVjdG9yKFxuXHRcdFx0cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2Nv
cGUsXG5cdFx0XHRwcml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcblx0XHRc
dHByaXZhdGUgdG9kb1N0b3JhZ2U6IElUb2RvU3RvcmFnZSxcblx0XHRcdHByaXZhdGUgZmlsdGVy
RmlsdGVyXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnRvZG9zID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0
b3JhZ2UuZ2V0KCk7XG5cblx0XHRcdCRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0XHQkc2NvcGUu
ZWRpdGVkVG9kbyA9IG51bGw7XG5cblx0XHRcdC8vICd2bScgc3RhbmRzIGZvciAndmlldyBtb2Rl
bCcuIFdlJ3JlIGFkZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbGxlciB0byB0aGUgc2Nv
cGVcblx0XHRcdC8vIGZvciBpdHMgbWV0aG9kcyB0byBiZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAv
IEhUTUxcblx0XHRcdCRzY29wZS52bSA9IHRoaXM7XG5cblx0XHRcdC8vIHdhdGNoaW5nIGZvciBl
dmVudHMvY2hhbmdlcyBpbiBzY29wZSwgd2hpY2ggYXJlIGNhdXNlZCBieSB2aWV3L3VzZXIgaW5w
dXRcblx0XHRcdC8vIGlmIHlvdSBzdWJzY3JpYmUgdG8gc2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZl
dGltZSBsb25nZXIgdGhhbiB0aGlzIGNvbnRyb2xsZXIsIG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3Jp
YmUuXG5cdFx0XHQkc2NvcGUuJHdhdGNoKCd0b2RvcycsICgpID0+IHRoaXMub25Ub2RvcygpLCB0
cnVlKTtcblx0XHRcdCRzY29wZS4kd2F0Y2goJ2xvY2F0aW9uLnBhdGgoKScsIHBhdGggPT4gdGhp
cy5vblBhdGgocGF0aCkpXG5cblx0XHRcdGlmICgkbG9jYXRpb24ucGF0aCgpID09PSAnJykgJGxv
Y2F0aW9uLnBhdGgoJy8nKTtcblx0XHRcdCRzY29wZS5sb2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0
XHR9XG5cblx0XHRvblBhdGgocGF0aDogc3RyaW5nKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0
dXNGaWx0ZXIgPSAocGF0aCA9PT0gJy9hY3RpdmUnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiBm
YWxzZSB9IDogKHBhdGggPT09ICcvY29tcGxldGVkJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDog
dHJ1ZSB9IDoge307XG5cdFx0fVxuXG5cdFx0b25Ub2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3Bl
LnJlbWFpbmluZ0NvdW50ID0gdGhpcy5maWx0ZXJGaWx0ZXIodGhpcy50b2RvcywgeyBjb21wbGV0
ZWQ6IGZhbHNlIH0pLmxlbmd0aDtcblx0XHRcdHRoaXMuJHNjb3BlLmRvbmVDb3VudCA9IHRoaXMu
dG9kb3MubGVuZ3RoIC0gdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRz
Y29wZS5hbGxDaGVja2VkID0gIXRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50XG5cdFx0XHR0aGlz
LnRvZG9TdG9yYWdlLnB1dCh0aGlzLnRvZG9zKTtcblx0XHR9XG5cblx0XHRhZGRUb2RvKCkge1xu
XHRcdFx0dmFyIG5ld1RvZG8gOiBzdHJpbmcgPSB0aGlzLiRzY29wZS5uZXdUb2RvLnRyaW0oKTtc
blx0XHRcdGlmICghbmV3VG9kby5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxu
XG5cdFx0XHR0aGlzLnRvZG9zLnB1c2gobmV3IFRvZG9JdGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5c
dFx0XHR0aGlzLiRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9k
b0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0
ZW07XG5cblx0XHRcdC8vIENsb25lIHRoZSBvcmlnaW5hbCB0b2RvIGluIGNhc2UgZWRpdGluZyBp
cyBjYW5jZWxsZWQuXG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4
dGVuZCh7fSwgdG9kb0l0ZW0pO1xuXHRcdH1cblxuXHRcdHJldmVydEVkaXRzKHRvZG9JdGVtOiBU
b2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvc1t0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0p
XSA9IHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbztcblx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVk
ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRkb25lRWRpdGluZyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtc
blx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUu
b3JpZ2luYWxUb2RvID0gbnVsbDtcblx0XHRcdGlmICh0aGlzLiRzY29wZS5yZXZlcnRlZCkge1xu
XHRcdFx0XHQvLyBUb2RvIGVkaXRzIHdlcmUgcmV2ZXJ0ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRc
dHRoaXMuJHNjb3BlLnJldmVydGVkID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxu
XHRcdFx0dG9kb0l0ZW0udGl0bGUgPSB0b2RvSXRlbS50aXRsZS50cmltKCk7XG5cdFx0XHRpZiAo
IXRvZG9JdGVtLnRpdGxlKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5c
dFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVtb3ZlVG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0
XHRcdHRoaXMudG9kb3Muc3BsaWNlKHRoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSksIDEpO1xu
XHRcdH1cblxuXHRcdGNsZWFyRG9uZVRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUudG9kb3Mg
PSB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIodG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNv
bXBsZXRlZCk7XG5cdFx0fVxuXG5cdFx0bWFya0FsbChjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0
XHRcdHRoaXMudG9kb3MuZm9yRWFjaCh0b2RvSXRlbSA9PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9
IGNvbXBsZXRlZDsgfSk7XG5cdFx0fVxuXHR9XG5cbn1cbi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8q
KlxuICogVGhlIG1haW4gVG9kb01WQyBhcHAgbW9kdWxlLlxuICpcbiAqIEB0eXBlIHthbmd1bGFy
Lk1vZHVsZX1cbiAqL1xubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2
YXIgdG9kb212YyA9IGFuZ3VsYXIubW9kdWxlKCd0b2RvbXZjJywgW10pXG4gICAgICAgICAgICAu
Y29udHJvbGxlcigndG9kb0N0cmwnLCBUb2RvQ3RybClcbiAgICAgICAgICAgIC5kaXJlY3RpdmUo
J3RvZG9CbHVyJywgdG9kb0JsdXIpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMn
LCB0b2RvRm9jdXMpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgdG9kb0Vz
Y2FwZSlcbiAgICAgICAgICAgIC5zZXJ2aWNlKCd0b2RvU3RvcmFnZScsIFRvZG9TdG9yYWdlKTtc
bn1cbiIKK21vZHVsZS5leHBvcnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
SUNFTlNFLTIuMFxuXG5USElTIENPREUgSVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBP
UiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLFxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBB
cGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiAqL1xuXG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVy
c2lvbiAxLjEwLnggLyAyLjAueFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBE
ZWZpbml0aW9ucyBieTogQm9yaXMgWWFua292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5r
b3YvPiwgQ2hyaXN0aWFuIEhvZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlz
dGVyPiwgU3RldmUgRmVudG9uLCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1
bGxlaT4sIFRhc3MgSWxpb3BvdWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNv
biBTd2VhcmluZ2VuLCBTZWFuIEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1
cyBHb29zc2VucyA8aHR0cHM6Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0
dHBzOi8vZ2l0aHViLmNvbS9rc3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9n
aXRodWIuY29tL2Jhc2FyYXQ+LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNv
bS9ud29sdmVyc29uPiwgRGVyZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2Np
Y2Vyb25lPiwgQW5kcmV3IEdhc3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4s
IEphbWVzIEhhcnJpc29uIEZpc2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4s
IFNlaWtpY2hpIEtvbmRvIDxodHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBK
YWNrbWFuIDxodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNl
biA8aHR0cHM6Ly9naXRodWIuY29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRo
dWIuY29tL0pvc2hTdHJvYmw+LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5u
eXJlaWxseS8+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292
L0RlZmluaXRlbHlUeXBlZFxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGlu
ZyB0aGF0IHdpbGwgY29uZmlndXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1
ZXJ5QWpheFNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQg
aW4gdGhlIHJlcXVlc3QgaGVhZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2Yg
cmVzcG9uc2UgaXQgd2lsbCBhY2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5n
IG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0
aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAg
ICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9u
b3VzbHkgKGkuZS4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQg
c3luY2hyb25vdXMgcmVxdWVzdHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9t
YWluIHJlcXVlc3RzIGFuZCBkYXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBw
b3J0IHN5bmNocm9ub3VzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3Rz
IG1heSB0ZW1wb3JhcmlseSBsb2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMg
d2hpbGUgdGhlIHJlcXVlc3QgaXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9m
IGFzeW5jOiBmYWxzZSB3aXRoIGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3Ug
bXVzdCB1c2UgdGhlIHN1Y2Nlc3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0
ZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNo
IGFzIGpxWEhSLmRvbmUoKSBvciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAg
ICovXG4gICAgYXN5bmM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3Qg
Y2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChp
biBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQu
IFVzZSB0aGlzIHRvIHNldCBjdXN0b20gaGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRp
bmdzIG9iamVjdHMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVu
dC4gUmV0dXJuaW5nIGZhbHNlIGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2Vs
IHRoZSByZXF1ZXN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2ls
bCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xu
ICAgIGJlZm9yZVNlbmQ/IChqcVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNl
dHRpbmdzKTogYW55O1xuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBm
b3JjZSByZXF1ZXN0ZWQgcGFnZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90
ZTogU2V0dGluZyBjYWNoZSB0byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBI
RUFEIGFuZCBHRVQgcmVxdWVzdHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFt
cH1cIiB0byB0aGUgR0VUIHBhcmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBm
b3Igb3RoZXIgdHlwZXMgb2YgcmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMg
bWFkZSB0byBhIFVSTCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxu
ICAgICAqL1xuICAgIGNhY2hlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9u
IHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFu
ZCBlcnJvciBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2Vk
IHR3byBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVz
dCkgb2JqZWN0IGFuZCBhIHN0cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVx
dWVzdCAoXCJzdWNjZXNzXCIsIFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRc
IiwgXCJhYm9ydFwiLCBvciBcInBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUg
Y29tcGxldGUgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBm
dW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4g
ICAgICovXG4gICAgY29tcGxldGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJp
bmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4
cHJlc3Npb24gcGFpcnMgdGhhdCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSBy
ZXNwb25zZSwgZ2l2ZW4gaXRzIGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAg
ICAgKi9cbiAgICBjb250ZW50cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNj
b3JkaW5nIHRvIGpRdWVyeS5hamF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5
IGFsbG93cyBjb250ZW50VHlwZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9n
aXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoq
XG4gICAgICogV2hlbiBzZW5kaW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVu
dCB0eXBlLiBEZWZhdWx0IGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBj
aGFyc2V0PVVURi04XCIsIHdoaWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBs
aWNpdGx5IHBhc3MgaW4gYSBjb250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3
YXlzIHNlbnQgdG8gdGhlIHNlcnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzND
IFhNTEh0dHBSZXF1ZXN0IHNwZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBp
cyBhbHdheXMgVVRGLTg7IHNwZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNl
IHRoZSBicm93c2VyIHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVu
dFR5cGU/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRo
ZSBjb250ZXh0IG9mIGFsbCBBamF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUg
Y29udGV4dCBpcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVz
ZWQgaW4gdGhlIGNhbGwgKCQuYWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBw
YXNzZWQgdG8gJC5hamF4KS5cbiAgICAgKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxu
ICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRl
cnMuIEVhY2ggY29udmVydGVyJ3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhl
IHRyYW5zZm9ybWVkIHZhbHVlIG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlc
biAgICAgKi9cbiAgICBjb252ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAg
LyoqXG4gICAgICogSWYgeW91IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChz
dWNoIGFzIEpTT05QKSBvbiB0aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NE
b21haW4gdG8gdHJ1ZS4gVGhpcyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRp
cmVjdGlvbiB0byBhbm90aGVyIGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9c
biAgICBjcm9zc0RvbWFpbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBz
ZW50IHRvIHRoZSBzZXJ2ZXIuIEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYg
bm90IGFscmVhZHkgYSBzdHJpbmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJl
cXVlc3RzLiBTZWUgcHJvY2Vzc0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMg
cHJvY2Vzc2luZy4gT2JqZWN0IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBh
biBBcnJheSwgalF1ZXJ5IHNlcmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkg
YmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQg
YmVsb3cpLlxuICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5j
dGlvbiB0byBiZSB1c2VkIHRvIGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0
cFJlcXVlc3QuVGhpcyBpcyBhIHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhl
IHJlc3BvbnNlLiBZb3Ugc2hvdWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5j
dGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRo
ZSBzZXJ2ZXIgYW5kIHRoZSAnZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRh
RmlsdGVyPyAoZGF0YTogYW55LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0
eXBlIG9mIGRhdGEgdGhhdCB5b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJ
ZiBub25lIGlzIHNwZWNpZmllZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9u
IHRoZSBNSU1FIHR5cGUgb2YgdGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWll
bGQgWE1MLCBpbiAxLjQgSlNPTiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEu
NCBzY3JpcHQgd2lsbCBleGVjdXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwg
YmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5n
O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0
IGZhaWxzLiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIg
KGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3Jp
YmluZyB0aGUgdHlwZSBvZiBlcnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNl
cHRpb24gb2JqZWN0LCBpZiBvbmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNl
Y29uZCBhcmd1bWVudCAoYmVzaWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwg
XCJhYm9ydFwiLCBhbmQgXCJwYXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJz
LCBlcnJvclRocm93biByZWNlaXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0
YXR1cywgc3VjaCBhcyBcIk5vdCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwi
IEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkg
b2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6
IFRoaXMgaGFuZGxlciBpcyBub3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBj
cm9zcy1kb21haW4gSlNPTlAgcmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAg
Ki9cbiAgICBlcnJvcj8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJy
b3JUaHJvdzogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dl
ciBnbG9iYWwgQWpheCBldmVudCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVs
dCBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxp
a2UgYWpheFN0YXJ0IG9yIGFqYXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBi
ZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9i
YWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhl
YWRlciBrZXkvdmFsdWUgcGFpcnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRo
ZSBYTUxIdHRwUmVxdWVzdCB0cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDog
WE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJl
cXVlc3QgdmFsdWUgY2FuIGJlIGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNl
dHRpbmcgY2FuIGFsc28gYmUgb3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQg
ZnVuY3Rpb24uICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsg
W2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0
IHRvIGJlIHN1Y2Nlc3NmdWwgb25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2Ug
dGhlIGxhc3QgcmVxdWVzdC4gVGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlm
aWVkIGhlYWRlci4gRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4g
SW4galF1ZXJ5IDEuNCB0aGlzIHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNp
ZmllZCBieSB0aGUgc2VydmVyIHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAg
ICBpZk1vZGlmaWVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVu
dCBlbnZpcm9ubWVudCB0byBiZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZp
bGVzeXN0ZW0pLCBldmVuIGlmIGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBi
eSBkZWZhdWx0LiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6
ZWQgYXMgbG9jYWw6IGZpbGUsICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2Nh
bCBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28g
b25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlc
biAgICAgKi9cbiAgICBpc0xvY2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlk
ZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFs
dWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8n
IHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBM
b2FkJ30gd291bGQgcmVzdWx0IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZl
ci4gQXMgb2YgalF1ZXJ5IDEuNSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHBy
ZXZlbnRzIGpRdWVyeSBmcm9tIGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhl
IFVSTCBvciBhdHRlbXB0aW5nIHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0
aGlzIGNhc2UsIHlvdSBzaG91bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFj
ayBzZXR0aW5nLiBGb3IgZXhhbXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwi
Y2FsbGJhY2tOYW1lXCIgfVxuICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxu
ICAgICAqIFNwZWNpZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVx
dWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxl
dCBqUXVlcnkgZ2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0
byBtYW5hZ2UgdGhlIHJlcXVlc3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFu
ZGxpbmcuIFlvdSBtYXkgd2FudCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50
IHRvIGVuYWJsZSBiZXR0ZXIgYnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2Yg
alF1ZXJ5IDEuNSwgeW91IGNhbiBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcs
IGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSBy
ZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNr
PzogYW55O1xuICAgIC8qKlxuICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIg
bWltZSB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/
OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1M
SHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24g
cmVxdWVzdC5cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAg
KiBCeSBkZWZhdWx0LCBkYXRhIHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2Jq
ZWN0ICh0ZWNobmljYWxseSwgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBw
cm9jZXNzZWQgYW5kIHRyYW5zZm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8g
dGhlIGRlZmF1bHQgY29udGVudC10eXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv
ZGVkXCIuIElmIHlvdSB3YW50IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXBy
b2Nlc3NlZCBkYXRhLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJv
Y2Vzc0RhdGE/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRo
ZSBcInNjcmlwdFwiIHRyYW5zcG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVz
dHMgd2l0aCBcImpzb25wXCIgb3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBl
KS4gU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0
aGUgcmVxdWVzdC4gVXNlZCB3aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdl
IGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAq
L1xuICAgIHNjcmlwdENoYXJzZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0
IG9mIG51bWVyaWMgSFRUUCBjb2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRo
ZSByZXNwb25zZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBz
dWNjZXNzZnVsLCB0aGUgc3RhdHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1l
dGVycyBhcyB0aGUgc3VjY2VzcyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAo
aW5jbHVkaW5nIDN4eCByZWRpcmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFz
IHRoZSBlcnJvciBjYWxsYmFjay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBz
dGF0dXNDb2RlPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBm
dW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlv
biBnZXRzIHBhc3NlZCB0aHJlZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhl
IHNlcnZlciwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBh
IHN0cmluZyBkZXNjcmliaW5nIHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAx
LjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nl
c3Mgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlv
biB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICov
XG4gICAgc3VjY2Vzcz8gKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1
ZXJ5WEhSKTogYW55O1xuICAgIC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vj
b25kcykgZm9yIHRoZSByZXF1ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1l
b3V0IHNldCB3aXRoICQuYWpheFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQg
dGhlIHBvaW50IHRoZSAkLmFqYXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVl
c3RzIGFyZSBpbiBwcm9ncmVzcyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2
YWlsYWJsZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUg
aXQgY2FuIGJlIHNlbnQuIEluIGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVx
dWVzdCBvYmplY3Qgd2lsbCBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRp
bWVzIG91dDsgYWNjZXNzaW5nIGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0
aW9uLiBJbiBGaXJlZm94IDMuMCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5u
b3QgYmUgY2FuY2VsbGVkIGJ5IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlm
IGl0IGFycml2ZXMgYWZ0ZXIgdGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVv
dXQ/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lz
aCB0byB1c2UgdGhlIHRyYWRpdGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4g
ICAgICovXG4gICAgdHJhZGl0aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0
eXBlIG9mIHJlcXVlc3QgdG8gbWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMg
XCJHRVRcIi4gTm90ZTogT3RoZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFu
ZCBERUxFVEUsIGNhbiBhbHNvIGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoq
XG4gICAgICogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0
IGlzIHNlbnQuXG4gICAgICovXG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEg
dXNlcm5hbWUgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFu
IEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5h
bWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBY
TUxIdHRwUmVxdWVzdCBvYmplY3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4g
YXZhaWxhYmxlIChJRSksIHRoZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRv
IHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVu
aGFuY2VtZW50cyB0byB0aGUgZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAg
LyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNl
dCBvbiB0aGUgbmF0aXZlIFhIUiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0
byBzZXQgd2l0aENyZWRlbnRpYWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBp
ZiBuZWVkZWQuIEluIGpRdWVyeSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2Fz
IG5vdCBwcm9wYWdhdGVkIHRvIHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMg
cmVxdWlyaW5nIGl0IHdvdWxkIGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2Ug
cmVjb21tZW5kIHVzaW5nIGpRdWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ug
b2YgaXQuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7
IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBq
cVhIUiBvYmplY3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVl
c3QsIEpRdWVyeVByb21pc2U8YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTog
c3RyaW5nKTogYW55O1xuICAgIGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxu
XG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFj
ZSBKUXVlcnlDYWxsYmFjayB7XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4g
ICAgZGlzYWJsZSgpOiBhbnk7XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1l
bnRzOiBhbnlbXSk6IGFueTtcbiAgICBmaXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNv
bnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkp
OiBib29sZWFuO1xuICAgIGxvY2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAg
IHJlbW92ZSguLi5jYWxsYmFja3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBq
UXVlcnkgUHJvbWlzZXMgdG8gaW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxs
OiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4g
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTog
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTog
VCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2
YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjog
YW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+
O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9m
IGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5l
cmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6
IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10p
OiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTog
SlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTog
SlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10p
OiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGlu
Z3NcbiAgICBwaXBlKGRvbmVGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAo
eDogYW55KSA9PiBhbnksIHByb2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxhbnk+O1xuXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwg
b25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJv
Z3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4o
b25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVj
dD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lv
bjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlb
XSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZh
bHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29u
czogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnBy
b2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJl
Y2F1c2UgSlF1ZXJ5IFByb21pc2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZh
bHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBv
blByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlz
ZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwg
b25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21p
c2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBv
blJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4s
IG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9t
aXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1
ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBK
UXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55
W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZv
ciB0aGUgSlF1ZXJ5IGRlZmVycmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBK
UXVlcnlEZWZlcnJlZDxUPiBleHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVy
aWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczog
VFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFu
eVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlb
XSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczog
YW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdz
OiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtd
KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFy
Z3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcbiAgICByZXNvbHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0
YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBv
ZiB0aGUgSlF1ZXJ5IGV4dGVuc2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50
ZXJmYWNlIEJhc2VKUXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBh
bnk7XG4gICAgZGVsZWdhdGVUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVk
KCk6IGJvb2xlYW47XG4gICAgaXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVh
bjtcbiAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTog
c3RyaW5nO1xuICAgIHByZXZlbnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBF
bGVtZW50O1xuICAgIHJlc3VsdDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigp
OiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7
XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJv
b2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFz
ZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTog
Ym9vbGVhbjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xu
fVxuXG5pbnRlcmZhY2UgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0
RXZlbnRPYmplY3Qge1xuICAgIGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtc
biAgICBjbGllbnRZOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6
IG51bWJlcjtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2Ny
ZWVuWDogbnVtYmVyO1xuICAgIHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVy
eUtleUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hh
cjogYW55O1xuICAgIGNoYXJDb2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29k
ZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRl
bmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVF
dmVudDtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVy
eUV2ZW50T2JqZWN0LCBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0LCBKUXVlcnlLZXlFdmVudE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59
XG5cbi8qXG4gICAgQ29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dz
ZXJcbiovXG5cbmludGVyZmFjZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtc
biAgICBib3hNb2RlbD86IGJvb2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4g
ICAgY2hlY2tDbG9uZT86IGJvb2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29y
cz86IGJvb2xlYW47XG4gICAgY3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVk
PzogYm9vbGVhbjtcbiAgICBodG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hp
dGVzcGFjZT86IGJvb2xlYW47XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5v
Q2xvbmVFdmVudD86IGJvb2xlYW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlz
YWJsZWQ/OiBib29sZWFuO1xuICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRF
dmFsPyAoKTogYm9vbGVhbjtcbiAgICBzdHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxl
cz86IGJvb2xlYW47XG4gICAgdGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5
UGFyYW0ge1xuICAgIChvYmo6IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlv
bmFsOiBib29sZWFuKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0
byBjb25zdHJ1Y3QgalF1ZXJ5IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmlu
ZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dc
biAqIG92ZXJyaWRpbmcgdGhlIGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0
cmluZ3NcbiAqIHJldHVybmluZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZh
Y2UgSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9w
ZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcs
IGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAq
IFRoZSBpbnRlcmZhY2UgdXNlZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmlu
dGVyZmFjZSBKUXVlcnlFYXNpbmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4g
ICAgc3dpbmcocDogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJz
IG9mIGpRdWVyeSAodGhvc2Ugb24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJm
YWNlIEpRdWVyeVN0YXRpYyB7XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJv
bm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdz
IEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0
LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55
IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczog
SlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0g
YW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBp
cyBzZW50LlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMg
dGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25h
bC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgp
LlxuICAgICAqL1xuICAgIGFqYXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNl
dHRpbmdzKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4
IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBp
cyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGRhdGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBv
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVz
dHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxl
cjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBK
UXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBB
amF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVz
dCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVl
cyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlciho
YW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFY
SFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5
QWpheFNldHRpbmdzO1xuXG4gICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9y
IGZ1dHVyZSBBamF4IHJlcXVlc3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAg
ICpcbiAgICAgICogQHBhcmFtIG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQg
Y29uZmlndXJlIHRoZSBkZWZhdWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlv
bmFsLlxuICAgICAgKi9cbiAgICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdz
KTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNp
bmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmlu
ZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAg
KiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYg
dGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9m
IGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVz
cyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0
cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpR
dWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipc
biAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVz
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJM
IHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFp
biBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJl
cXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlz
IGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlw
ZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50
ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAg
ICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBz
dHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNl
cnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJs
IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50
LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNl
bnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNz
IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNj
ZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBm
cm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNj
cmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3Ry
aW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1
ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxu
ICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VU
IEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFp
bmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFt
IHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1
ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/
OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVz
dCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0
aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJh
bSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVx
dWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzog
T2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjog
SlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09O
LWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6
IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6
IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxu
ICAgICAqIExvYWQgYSBKYXZhU2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VU
IEhUVFAgcmVxdWVzdCwgdGhlbiBleGVjdXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVy
bCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2Vu
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVy
bDogc3RyaW5nLCBzdWNjZXNzPzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVl
cnlQYXJhbTtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNp
bmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAg
ICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlm
IHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwg
YnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhl
IHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGln
ZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAg
cG9zdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhI
UjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRU
UCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRh
aW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJh
bSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZl
ciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQg
aWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4g
ICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUg
c2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRl
eHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3Qs
IHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHBy
b3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRh
VHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDog
SW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAg
Ki9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6
IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFU
eXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJw
b3NlIGNhbGxiYWNrcyBsaXN0IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRv
IG1hbmFnZSBjYWxsYmFjayBsaXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBv
cHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhl
IGNhbGxiYWNrIGxpc3QgYmVoYXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBz
dHJpbmcpOiBKUXVlcnlDYWxsYmFjaztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVh
c2VzIHRoZSBleGVjdXRpb24gb2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaG9sZCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyBy
ZXF1ZXN0ZWQgb3IgcmVsZWFzZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVh
bik6IHZvaWQ7XG5cbiAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVy
eTtcbiAgICAoZWxlbWVudDogRWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpR
dWVyeTtcbiAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVj
dDogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAo
YXJyYXk6IGFueVtdKTogSlF1ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBSZWxpbnF1aXNoIGpRdWVyeSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gcmVtb3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8g
cmVtb3ZlIGFsbCBqUXVlcnkgdmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVk
aW5nIGpRdWVyeSBpdHNlbGYpLlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzog
Ym9vbGVhbik6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4
ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVz
dWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRz
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBv
YmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxU
PiguLi5kZWZlcnJlZHM6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNl
PFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sg
ZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQg
b2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFp
biBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6
IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkg
dG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0
cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBl
dmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVy
cmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3
aGVuPFQ+KC4uLmRlZmVycmVkczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3Nz
SG9va3M6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4g
ICAgLyoqXG4gICAgICogU3RvcmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBz
cGVjaWZpZWQgZWxlbWVudC4gUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRo
IHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBv
ZiBkYXRhIHRvIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxu
ICAgICAqL1xuICAgIGRhdGE8VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVl
OiBUKTogVDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3Rv
cmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwg
dmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0
aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2Yg
ZGF0YSB0byBzZXQuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0
cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEg
c3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFt
ZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0
aCB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5c
biAgICBkZXF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtc
blxuICAgIGhhc0RhdGEoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShl
bGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShl
bGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBh
bnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9y
ZVN0YXJ0PzogKGRlZmVycmVkOiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsg
aW50ZXJ2YWw6IG51bWJlcjsgc3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJl
cjsgZmFzdDogbnVtYmVyOyB9OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8v
IEV2ZW50c1xuICAgIHByb3h5KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4dDog
YW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6
IHN0cmluZywgLi4uYXJnczogYW55W10pOiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRD
b25zdHJ1Y3RvcjtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6
IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46
IGFueTsgIC8vVE9ETzogRGVjaWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVh
ZHk6IGJvb2xlYW47XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3Vw
cG9ydDtcblxuICAgIC8vIFV0aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVu
dCwgY29udGFpbmVkOiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjog
YW55LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9
PiBhbnkpOiBhbnk7XG4gICAgZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5k
ZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTog
YW55O1xuICAgIGVhY2g8VD4oY29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJh
eTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5k
KHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9v
bGVhbiwgdGFyZ2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZh
bChjb2RlOiBzdHJpbmcpOiBhbnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChl
bGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVy
dD86IGJvb2xlYW4pOiBUW107XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtd
LCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTog
Ym9vbGVhbjtcbiAgICBpc0VtcHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1
bmN0aW9uKG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJv
b2xlYW47XG4gICAgaXNQbGFpbk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5k
b3cob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFu
O1xuXG4gICAgbWFrZUFycmF5KG9iajogYW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJy
YXk6IFRbXSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1i
ZXIpID0+IFUpOiBVW107XG4gICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9m
QXJyYXk6IGFueSwgaW5kZXhJbkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdl
PFQ+KGZpcnN0OiBUW10sIHNlY29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6
IFRbXSwgc2Vjb25kOiBVW10pOiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93
KCk6IG51bWJlcjtcblxuICAgIHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAv
KipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZGF0YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRc
biAgICAgKi9cbiAgICBwYXJzZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAg
IHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55
W10pOiBKUXVlcnk7XG5cbiAgICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlw
ZShvYmo6IGFueSk6IHN0cmluZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5c
biAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9k
ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRc
biAgICAgKiBAcGFyYW0gY29udGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4
dCBpbiB3aGljaCB0aGUgSFRNTCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFy
YW0ga2VlcFNjcmlwdHMgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNj
cmlwdHMgcGFzc2VkIGluIHRoZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChk
YXRhOiBzdHJpbmcsIGNvbnRleHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFu
KTogYW55W107XG5cbiAgICBBbmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9w
dGlvbnM6IGFueSk6IGFueTtcblxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxu
ICAgIFRoZSBqUXVlcnkgaW5zdGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xu
ICAgIC8vIEFKQVhcbiAgICBhamF4Q29tcGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAg
IGFqYXhFcnJvcihoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFu
eSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVy
OiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGFqYXhTdG9wKGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4
U3VjY2VzcyhoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwg
ZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcs
IGRhdGE/OiBhbnksIGNvbXBsZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6
IHN0cmluZztcbiAgICBzZXJpYWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0
ZXNcbiAgICBhZGRDbGFzcyhjbGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xh
c3MoZnVuYzogKGluZGV4OiBhbnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVl
cnk7XG5cbiAgICAvLyBodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNr
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6
IHN0cmluZyk6IHN0cmluZztcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IEpRdWVyeTtcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGlu
ZGV4OiBhbnksIGF0dHI6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBoYXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5c
biAgICBodG1sKCk6IHN0cmluZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBodG1sKGh0bWxDb250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5n
KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxu
ICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5h
bWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1
ZXJ5O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBv
bGRQcm9wZXJ0eVZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIo
YXR0cmlidXRlTmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NO
YW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55
LCBjbHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5h
bWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5n
LCBzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29s
ZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFu
eSwgc3d0Y2g6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2
YWwodmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIHZhbCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5k
ZXg6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
R2V0IHRoZSB2YWx1ZSBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBp
biB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJv
cGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6
IHN0cmluZyk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHBy
b3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0g
dmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3Mo
cHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNo
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHBy
b3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUg
cHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJv
cGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2
YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhw
cm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRj
aGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBw
cm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhl
IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6
IG51bWJlcltdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1Mg
cHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJh
bSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRo
ZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxl
bWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9c
biAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFs
dWU6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUg
b3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxu
ICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0
LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlv
biBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50
cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6
IG51bWJlciwgdmFsdWU6IG51bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9m
IHByb3BlcnR5LXZhbHVlIHBhaXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGll
czogT2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQo
dmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBoZWlnaHQoZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBpbm5lckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFs
dWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlu
bmVyV2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6
IG51bWJlcjsgdG9wOiBudW1iZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBK
UXVlcnk7XG4gICAgb2Zmc2V0KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBu
dW1iZXI7XG4gICAgb3V0ZXJIZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJv
b2xlYW4pOiBKUXVlcnk7XG5cbiAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFu
KTogbnVtYmVyO1xuICAgIG91dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86
IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0
OiBudW1iZXI7IH07XG5cbiAgICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0
KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAg
IHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVy
O1xuICAgIHdpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFt
ZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiBKUXVlcnk7XG4gICAgZGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5
O1xuICAgIGRhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0
PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1h
dGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6
IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVh
c2luZz86IHN0cmluZywgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRl
KHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3Ry
aW5nOyBjb21wbGV0ZT86IEZ1bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVh
bjsgc3BlY2lhbEVhc2luZz86IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9u
OiBudW1iZXIsIHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJh
dGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
ZmFkZU91dChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFk
ZU91dChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcblxuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBu
dW1iZXIsIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBm
YWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBm
YWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/
OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnks
IGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1
cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
c2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBz
bGlkZURvd24oZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzog
YW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55
LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChj
bGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBz
dG9wKHF1ZXVlPzogYW55LCBjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVh
bik6IEpRdWVyeTtcblxuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkp
OiBKUXVlcnk7XG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTog
SlF1ZXJ5O1xuXG4gICAgLy8gRXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTog
YW55LCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBl
OiBzdHJpbmcsIHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5l
dmVudHM6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5n
ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5n
ZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnRE
YXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqL1xuICAgIGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
Y2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJkYmxjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2so
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGRibGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRl
KHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcImZvY3VzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBm
b2N1cygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgZm9jdXMoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9i
amVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgZm9jdXNvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIEJpbmQgdHdvIGhhbmRsZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVj
dXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRl
IHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVy
IGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYSBzaW5nbGUgaGFuZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhl
Y3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5c
biAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhl
IFwia2V5ZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImtleWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBrZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAga2V5ZG93bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBUcmlnZ2VyIHRoZSBcImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAg
Ki9cbiAgICBrZXlwcmVzcygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86
IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgbG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2Fk
KGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91
c2Vkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJt
b3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBtb3VzZWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIG1vdXNlZG93bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIG1vdXNlZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxl
bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlciho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQg
d2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
ZW50ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJtb3VzZWxlYXZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBt
b3VzZWxlYXZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNl
IGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0
YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vt
b3ZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3Vz
ZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBtb3VzZW1vdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlbW92ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAg
Ki9cbiAgICBtb3VzZW91dCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBv
biBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
b3ZlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vv
dmVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwibW91c2V1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1
cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBtb3VzZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgbW91c2V1cChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBw
YXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdp
bmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVk
IGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xu
ICAgIG9mZihldmVudHM6IHN0cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwg
bmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlk
b3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwg
b3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3Ry
aW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVw
cmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9u
YWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25z
IHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2Vs
ZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBh
c3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAg
ICBvZmYoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5j
dGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBc
ImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMg
YWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRv
ZXMgcmV0dXJuIGZhbHNlLiBSZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJh
bWV0ZXJzIHBhc3NlZCB0byBqUXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBw
YXJhbWV0ZXJzIG9uIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFz
IG9wdGlvbmFsICg/IHN5bnRheCkuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIg
ZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRl
ZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIg
b3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0
b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1l
bnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9t
aXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUg
c2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxz
byBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMg
cmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjog
c3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rp
b24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVu
dCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJr
ZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3Ry
aW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRo
YXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQs
IHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0
ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUg
aGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQg
Zm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4g
ICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3Ig
bW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBv
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUg
Y2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0
b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1l
bnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBv
ciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0
aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3Nl
ZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAg
ICAqL1xuICAgIG9uKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzog
YW55LCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFu
ZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRl
ZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlw
dCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9t
IGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShl
dmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4g
ZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBv
bmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlw
ZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1l
cy5cbiAgICAgKiBAcGFyYW0gZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50
cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBl
dmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMg
XCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMg
bnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJl
YWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZh
bHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNp
bXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcs
IHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRv
IGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1v
c3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRo
ZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBl
dmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFs
d2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAg
ICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50
LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZh
bHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0
aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBz
dHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxl
ciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5n
IGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBh
bmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxl
ciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0g
c2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0
aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBz
ZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQg
d2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRh
IERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBl
dmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBh
bnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAv
KipcbiAgICAgKiBTcGVjaWZ5IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMg
ZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGFmdGVyIHRoZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFu
ZGxlcjogRnVuY3Rpb24pOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
InJlc2l6ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVz
aXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICByZXNpemUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIHJlc2l6ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJzY3JvbGxcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9s
bCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBzY3JvbGwoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwic2VsZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBzZWxlY3QoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgc3VibWl0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
dHJpZ2dlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpR
dWVyeTtcbiAgICB0cmlnZ2VyKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxu
ICAgIHRyaWdnZXJIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6
IGFueVtdKTogT2JqZWN0O1xuXG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxl
cj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICB1bmJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1
bmJpbmQoZXZ0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAg
ICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVu
ZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxl
Z2F0ZShuYW1lc3BhY2U6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5s
b2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6
IEVsZW1lbnQ7XG4gICAganF1ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3Io
ZXZlbnREYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVl
cnk7XG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6
IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRl
bnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBhcHBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAg
YXBwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIGFwcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRl
bnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgY2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVw
V2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVj
dG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0
QWZ0ZXIodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55
KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAg
ICBwcmVwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIHByZXBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxl
Y3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICByZXBsYWNlV2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6
IHN0cmluZztcbiAgICB0ZXh0KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRl
eHRTdHJpbmc6IChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIHRvQXJyYXkoKTogYW55W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4g
ICAgd3JhcCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChp
bmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVu
dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTog
SlF1ZXJ5O1xuICAgIHdyYXBJbm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVs
ZW06IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6
IGFueTtcblxuICAgIGluZGV4KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5n
KTogbnVtYmVyO1xuICAgIGluZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFBy
b3BlcnRpZXNcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAg
IFt4OiBzdHJpbmddOiBhbnk7XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAg
Ly8gVHJhdmVyc2luZ1xuICAgIGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTog
SlF1ZXJ5O1xuICAgIGFkZCguLi5lbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0
bWw6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAg
ICBjaGlsZHJlbihzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0
b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRl
eHQ/OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7
XG4gICAgY2xvc2VzdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3Rv
cnM6IGFueSwgY29udGV4dD86IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpR
dWVyeTtcblxuICAgIGVuZCgpOiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1
ZXJ5O1xuXG4gICAgZmlsdGVyKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVy
KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6
IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBm
aW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBK
UXVlcnk7XG4gICAgZmluZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpR
dWVyeTtcblxuICAgIGhhcyhzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250
YWluZWQ6IEVsZW1lbnQpOiBKUXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9v
bGVhbjtcbiAgICBpcyhmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBp
cyhlbGVtZW50OiBhbnkpOiBib29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtc
blxuICAgIGxhc3QoKTogSlF1ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwg
ZG9tRWxlbWVudDogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rv
cj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICBuZXh0VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBu
b3QoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDog
YW55KTogSlF1ZXJ5O1xuICAgIG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNl
dFBhcmVudCgpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVl
cnk7XG5cbiAgICBwYXJlbnRzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFy
ZW50c1VudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4g
ICAgcGFyZW50c1VudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgcGFyZW50c1VudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1
ZXJ5O1xuXG4gICAgcHJldihzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZB
bGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/
OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVu
dD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2Jq
PzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxl
Y3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86
IG51bWJlcik6IEpRdWVyeTtcblxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVO
YW1lPzogc3RyaW5nKTogYW55W107XG4gICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1
ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFj
azogYW55KTogSlF1ZXJ5O1xufVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhw
b3J0ID0gJDtcbn1cbmRlY2xhcmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2
YXIgJDogSlF1ZXJ5U3RhdGljO1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlw
ZSBkZWZpbml0aW9ucyBmb3IgQW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1
bGFyanMub3JnXG4vLyBEZWZpbml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIu
Y29tL2RpZWdvdmlsYXI+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2Jvcmlz
eWFua292L0RlZmluaXRlbHlUeXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFu
Z3VsYXJTdGF0aWM7XG5cbi8vIFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0
aW9uXG5pbnRlcmZhY2UgRnVuY3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbmRlY2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNl
IHByb3ZpZGVycyBleHRlbmQgdGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQ
cm92aWRlciB7XG4gICAgICAgICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBBbmd1bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1
bGFyU3RhdGljIHtcbiAgICAgICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4u
YXJnczogYW55W10pOiBGdW5jdGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmlu
ZywgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290
c3RyYXAoZWxlbWVudDogSlF1ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNl
cnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55
W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBE
b2N1bWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAg
ICBjb3B5KHNvdXJjZTogYW55LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxl
bWVudDogSUF1Z21lbnRlZEpRdWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55
LCB2YWx1ZTI6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55
LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRl
cmF0b3I6ICh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55
O1xuICAgICAgICBmcm9tSnNvbihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5
KGFyZz86IGFueSk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0
by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFu
O1xuICAgICAgICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5l
ZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBi
b29sZWFuO1xuICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6
IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xu
ICAgICAgICBpc1VuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJj
YXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5n
dWxhciBhcHBsaWNhdGlvblxuXHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmln
dXJpbmcgYW5ndWxhciBtb2R1bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvYW5ndWxhci5Nb2R1bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAg
ICAvKiogbmFtZSBvZiB5b3VyIG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAg
ICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMg
ZGVwZW5kcyBvbiAqL1xuICAgICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAg
ICAgIGNvbmZpZ0Z1bmN0aW9uPzogYW55KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdz
OiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVh
bik6IHN0cmluZztcbiAgICAgICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAg
ICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBt
YWpvcjogbnVtYmVyO1xuICAgICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRv
dDogbnVtYmVyO1xuICAgICAgICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihu
YW1lOiBzdHJpbmcsIGFuaW1hdGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAg
ICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtd
KTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtc
biAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBt
ZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9k
dWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6
IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0
VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9y
bWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5v
dGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9s
bGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIGNvbnRyb2xsZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAg
ZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9k
dWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5j
dGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3Qp
OiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlG
dW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmlu
ZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFj
dG9yeShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJp
bmcsIGZpbHRlckZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBm
aWx0ZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9k
dWxlO1xuICAgICAgICBmaWx0ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBw
cm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlv
bik6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0
OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246
IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAg
ICAgc2VydmljZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6
IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2Jq
ZWN0KTogSU1vZHVsZTtcblxuICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0
cmluZztcbiAgICAgICAgcmVxdWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlz
IG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0
J3Mgbm90IHZlcnkgZWxlZ2FudFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1sn
Zm9vJ10gaW5zdGVhZCBvZiBhdHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3
YXlcblx0Ly8gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBi
dXQgaXQgY3JlYXRlcyB0aGlzIHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3
MjAxODU0LzE2NTY1NlxuXHRbbmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMg
dGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0
byB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVu
IGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNz
IGFkZGl0aW9uLlxuICAgICAgICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5c
biAgICAgICAgLy8gUmVtb3ZlcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUg
Y2xhc3NWYWwgcGFyYW1ldGVyIGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1h
dGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9y
XG4gICAgICAgIC8vIHRoZSBjbGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xh
c3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJp
YnV0ZSB2YWx1ZS5cbiAgICAgICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7
XG5cbiAgICAgICAgLy8gT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAg
ICAgLy8gVGhlIG9ic2VydmVyIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0
aGUgbmV4dCAkZGlnZXN0XG4gICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9i
c2VydmVyIGlzIHRoZW4gaW52b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xh
dGVkIHZhbHVlIGNoYW5nZXMuXG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZh
bHVlPzphbnkpPT5hbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxl
bWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVk
ZWRcbiAgICAgICAgLy8gdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUg
YmFjayB0byBhY3R1YWwgbmFtZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJv
bGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xs
ZXIge1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVh
bjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtc
biAgICAgICAgJGVycm9yOiBhbnk7XG4gICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklO
Z01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6
IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lk
O1xuICAgICAgICAkc2V0UHJpc3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBOZ01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxl
clxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xs
ZXIge1xuICAgICAgICAkcmVuZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxp
ZGF0aW9uRXJyb3JLZXk6IHN0cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAg
IC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBh
IHN0cmluZyBidXQgb3RoZXJcbiAgICAgICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21t
b24gdG8gdXNlIHRoZW0uXG4gICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7
XG4gICAgICAgICR2aWV3VmFsdWU6IGFueTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xu
XG4gICAgICAgICRwYXJzZXJzOiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6
IElNb2RlbEZvcm1hdHRlcltdO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0
aW5lOiBib29sZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDog
Ym9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElNb2RlbFBhcnNlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJTW9kZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFu
eTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRh
cHBseSgpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAg
JGFwcGx5KGV4cDogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJv
YWRjYXN0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAg
ICAgICAkZGVzdHJveSgpOiB2b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAg
ICRlbWl0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4g
ICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwg
aW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3Ry
aW5nLCBhcmdzPzogT2JqZWN0KTogYW55O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2Nv
cGU6IElTY29wZSkgPT4gYW55LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERv
Y3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRv
biBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2
b2lkO1xuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBh
bnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1l
bnRhdGlvbiBjaGVja2luZyBzdHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFu
KTogSVNjb3BlO1xuXG4gICAgICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6
IElBbmd1bGFyRXZlbnQsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAg
ICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBv
YmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNo
RXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTog
YW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1
bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkg
PT4gYW55LCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVu
Y3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9
PiBhbnksIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJ
U2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAg
ICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6
IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBG
dW5jdGlvbjtcbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29w
ZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFu
eSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDog
SVNjb3BlO1xuXG4gICAgICAgICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1i
ZXJzXG4gICAgICAgICQkaXNvbGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFu
eTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdl
dFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBu
YW1lOiBzdHJpbmc7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAg
ZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBl
dmVudHMgdGhhdCB3ZXJlICRlbWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5j
dGlvbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0
ZW5kcyBXaW5kb3cge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJT
ZXJ2aWNlXG4gICAgLy8gVE9ETyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZy
b20gdGhlIHNvdXJjZSBjb2RlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElCcm93c2VyU2VydmljZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGlt
ZW91dFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JHRpbWVvdXRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRT
ZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tl
QXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6
IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEludGVydmFsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kaW50ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUludGVydmFsU2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6
IG51bWJlciwgY291bnQ/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNl
PGFueT47XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAg
ICAgICAgKG5hbWU6IHN0cmluZyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJ
RmlsdGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0
ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlk
ZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAg
ICAgICAgaWQ6IHN0cmluZztcblxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRc
biAgICAgICAgLy8gQ2hlY2sgYW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAg
ICAgIE5VTUJFUl9GT1JNQVRTOiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAg
ICAgREFURVRJTUVfRk9STUFUUzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAg
ICAgICAgcGx1cmFsQ2F0OiAobnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NF
UDogc3RyaW5nO1xuICAgICAgICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6
IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06
IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNj
cmlwdG9yIHtcbiAgICAgICAgbWluSW50OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJl
cjtcbiAgICAgICAgbWF4RnJhYzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAg
ICAgICAgcG9zU3VmOiBzdHJpbmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBu
ZWdTdWY6IHN0cmluZztcbiAgICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBu
dW1iZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2Ny
aXB0b3Ige1xuICAgICAgICBNT05USDogc3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0
cmluZ1tdO1xuICAgICAgICBEQVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5n
W107XG4gICAgICAgIEFNUE1TOiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4g
ICAgICAgIHNob3J0OiBzdHJpbmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAg
IGxvbmdEYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAg
c2hvcnREYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAg
c2hvcnRUaW1lOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gTG9nU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kbG9nXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNl
IHtcbiAgICAgICAgZGVidWc6IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4g
ICAgICAgIGluZm86IElMb2dDYWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3
YXJuOiBJTG9nQ2FsbDtcbiAgICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0
ZSBpbnRlcmZhY2Ugc28gd2UgY2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdN
b2NrIG1vZHVsZS5cbiAgICBpbnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczog
YW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBh
cnNlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
cGFyc2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2Vydmlj
ZSB7XG4gICAgICAgIChleHByZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNv
bnRleHQ6IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlz
IG5vdCBwcm92aWRlZCwgdW5kZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxl
bWVudGF0aW9uXG4gICAgICAgIC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdz
IGZvcmNlIGEgdmFsdWUgZm9yIGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3
aGFudHMgdG8gdW5kZWZpbmUgaXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5
LlxuICAgICAgICBhc3NpZ24oY29udGV4dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2Vydmlj
ZXMuJGxvY2F0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2Nh
dGlvblNlcnZpY2Uge1xuICAgICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6
IHN0cmluZztcbiAgICAgICAgaGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNl
O1xuICAgICAgICBob3N0KCk6IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAg
ICAgIHBhdGgobmV3UGF0aDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9y
dCgpOiBudW1iZXI7XG4gICAgICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFj
ZSgpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBz
ZWFyY2gocGFyYW1ldGVyc01hcDogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2Vh
cmNoKHBhcmFtZXRlcjogc3RyaW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2Vy
dmljZTtcbiAgICAgICAgdXJsKCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTog
SUxvY2F0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlk
ZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJp
bmc7XG4gICAgICAgIGhhc2hQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRl
cjtcbiAgICAgICAgaHRtbDVNb2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRh
dGlvbiBzdGF0ZXMgdGhhdCBwYXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1w
bGVtZW50YXRpb24gdGVzdHMgaXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxu
ICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0
aXZlOiBib29sZWFuKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gRG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVy
U2VydmljZSB7XG4gICAgICAgIChleGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZv
aWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290
RWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1l
bnRTZXJ2aWNlIGV4dGVuZHMgSlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBRU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kcVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xu
ICAgICAgICBhbGwocHJvbWlzZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtc
biAgICAgICAgZGVmZXI8VD4oKTogSURlZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29u
PzogYW55KTogSVByb21pc2U8dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJv
bWlzZTxUPjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0
aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQ
cm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5v
dGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xu
ICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkg
PT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFu
eSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3Vs
dD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVl
OiBUKSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0
LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0
PjtcblxuXG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkg
PT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNh
dGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3Vs
dD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3Rl
ZDogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAg
ICAgZmluYWxseTxUUmVzdWx0PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRS
ZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICBy
ZXNvbHZlKHZhbHVlPzogVCk6IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2
b2lkO1xuICAgICAgICBub3RpZnkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6
IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFu
Y2hvclNjcm9sbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGFuY2hvclNjcm9sbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJQW5jaG9yU2Nyb2xsU2VydmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVy
IHtcbiAgICAgICAgZGlzYWJsZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAg
ICAgICAvLyBMZXRzIG5vdCBmb2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5
IG1lbWJlci4gRXZlbiB0aG91Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29u
c2lkZXJlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAg
Ly8gbWlnaHQgZmluZCBpdCB1c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0
byB0aGUgY2FjaGUgb2JqZWN0LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNN
YXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hl
SWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9i
amVjdDtcblxuICAgICAgICAvLyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAg
ICAgICAgaW5mbygpOiBhbnk7XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hl
T2JqZWN0O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBp
bmZvKCk6IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1i
ZXI7XG5cbiAgICAgICAgICAgIC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBh
IG5vbi1tYW5kYXRvcnkgb3B0aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4g
ICAgICAgIH07XG4gICAgICAgIHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xu
ICAgICAgICBnZXQgKGtleTogc3RyaW5nKTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJp
bmcpOiB2b2lkO1xuICAgICAgICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgp
OiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21w
aWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxl
UHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVT
ZXJ2aWNlIHtcbiAgICAgICAgKGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0
ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5n
RnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBs
YXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtp
bmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1w
bGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5r
aW5nRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0
ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywg
ZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAg
IC8vIFVuZG9jdW1lbnRlZCwgYnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShk
aXJlY3RpdmVzTWFwOiBhbnkpOiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1
dCBub3QgZm9yY2UgY2xvbmVBdHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElT
Y29wZSwgY2xvbmVBdHRhY2hGbj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElT
Y29wZSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIENvbnRyb2xsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRjb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRjb250cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2gg
dGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFs
XG4gICAgICAgIChjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkp
OiBhbnk7XG4gICAgICAgIChjb250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBh
bnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJ
U2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9s
bGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTog
c3RyaW5nLCBkZXBlbmRlbmN5QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBs
ZWFzdCBtb2V0aG9kIGFuZCB1cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmln
OiBJUmVxdWVzdENvbmZpZyk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDog
c3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAg
IGRlbGV0ZSAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8
YW55PjtcbiAgICAgICAgaGVhZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElI
dHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZp
Zz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBk
YXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAg
ICAgcHV0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0
cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAg
ICAgIC8vIEZvciBkZWJ1Z2dpbmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28u
Li5cbiAgICAgICAgcGVuZGluZ1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlz
IGlzIGp1c3QgZm9yIGhpbnRpbmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUg
YXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRp
b25zXG4gICAgaW50ZXJmYWNlIElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJp
bmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAg
ICAgLy8gWFhYIGl0IGhhcyBpdCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxk
IGRlZmluZSBpdCBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAg
ICAgY2FjaGU/OiBhbnk7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAg
ICAgICAgLy8gVGhlc2UgYWNjZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhl
bSBhcyBhbnlcbiAgICAgICAgZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86
IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/
OiBhbnk7IC8vIG51bWJlciB8IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQ
cm9taXNlQ2FsbGJhY2s8VD4ge1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhl
YWRlcnM6IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENv
bmZpZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNr
QXJnPFQ+IHtcbiAgICAgICAgZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAg
ICAgICAgaGVhZGVycz86IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAg
Y29uZmlnPzogSVJlcXVlc3RDb25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJv
bWlzZTxUPiBleHRlbmRzIElQcm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazog
SUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9y
KGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAg
ICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9t
aXNlQ2FsbGJhY2tBcmc8VD4pID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6
IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0Pjtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQ
cm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNr
PzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21p
c2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5k
cyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xu
ICAgICAgICBpbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9y
czogYW55W107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJh
Y2tlbmRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRodHRwQmFja2VuZFxuICAgIC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBz
ZXJ2aWNlIGRpcmVjdGx5LlxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
SHR0cEJhY2tlbmRTZXJ2aWNlIHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxi
YWNrIHNpZ25hdHVyZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJs
OiBzdHJpbmcsIHBvc3Q/OiBhbnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnks
IHRpbWVvdXQ/OiBudW1iZXIsIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRl
UHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9s
YXRlU2VydmljZSB7XG4gICAgICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86
IGJvb2xlYW4pOiBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTog
c3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElJbnRlcnBvbGF0aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55KTog
c3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRl
bmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4g
ICAgICAgIHN0YXJ0U3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtc
biAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBz
dHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBUZW1wbGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVP
YmplY3Qge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29w
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2Vydmlj
ZSBleHRlbmRzIElTY29wZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NF
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2Nl
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0
Z2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdl
dFRydXN0ZWRDc3ModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTog
YW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRy
dXN0ZWRSZXNvdXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFs
dWU6IGFueSk6IGFueTtcblx0XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmlu
Zyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0Nzcyhl
eHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xu
XHRcdHBhcnNlQXNIdG1sKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2Fs
czogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250
ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4
cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5c
dFx0cGFyc2VBc1VybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6
IGFueSkgPT4gYW55O1xuXHRcdHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55
O1xuXHRcdHRydXN0QXNIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVl
OiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0dHJ1c3RBc1VybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFu
O1xuXHR9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMg
SVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lk
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVs
ZWdhdGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRl
U2VydmljZSB7XG4gICAgICAgIGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6
IGFueSk6IGFueTtcbiAgICAgICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBh
bnk7XG4gICAgICAgIHZhbHVlT2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIg
ZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbG9ja2xpc3Qo
YmxvY2tsaXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJsQWxsb3dMaXN0KGFs
bG93bGlzdDogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIERpcmVjdGl2ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2d1aWRlL2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4g
ICAgaW50ZXJmYWNlIElEaXJlY3RpdmV7XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAg
KHRlbXBsYXRlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJ
QXR0cmlidXRlcyxcbiAgICAgICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9u
ZUxpbmtpbmdGbjogRnVuY3Rpb24pID0+IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAg
ICAgICBjb250cm9sbGVyPzogYW55O1xuICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4g
ICAgICAgIGxpbms/OlxuICAgICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBp
bnN0YW5jZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0
dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4g
dm9pZDtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7
XG4gICAgICAgIHJlcGxhY2U/OiBib29sZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAg
ICAgICByZXN0cmljdD86IHN0cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRl
bXBsYXRlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWlu
YWw/OiBib29sZWFuO1xuICAgICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2Fs
bGluZyBhbmd1bGFyLmVsZW1lbnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4g
ICAgLy8gYXVnbWVudGVkIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5c
biAgICAvLyBzZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVu
dFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5
U3RhdGljIGV4dGVuZHMgSlF1ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcs
IGNvbnRleHQ/OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxl
bWVudCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRl
ZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpR
dWVyeTtcbiAgICAgICAgKG9iamVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAg
ICAgKGZ1bmM6IEZ1bmN0aW9uKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBh
bnlbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtc
biAgICAgICAgLy8gVE9ETzogZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0
cm95XG5cbiAgICAgICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgZmluZChlbGVtZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBm
aW5kKG9iajogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVy
KG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBz
Y29wZSgpOiBJU2NvcGU7XG5cbiAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFs
dWU6IGFueSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmlu
Zyk6IGFueTtcblxuXG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBB
VVRPIG1vZHVsZSAoYW5ndWxhci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBv
cnQgbW9kdWxlIGF1dG8ge1xuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIElu
amVjdG9yU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvQVVUTy4kaW5qZWN0b3JcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJm
YWNlIElJbmplY3RvclNlcnZpY2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9u
KTogc3RyaW5nW107XG4gICAgICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlv
bjogYW55W10pOiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55
O1xuICAgICAgICAgICAgaW5zdGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9j
YWxzPzogYW55KTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0
aW9uOiBhbnlbXSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29u
dGV4dD86IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAgICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAg
ICAvLyBEb2N1bWVudGF0aW9uIHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5j
ZSwgYnV0IGFjdHVhbFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0
dXJuIGFueXRoaW5nLlxuICAgICAgICAgICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogYW55O1xuICAgICAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTog
YW55KTogdm9pZDtcblxuICAgICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3Jh
dG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5n
LCBkZWNvcmF0b3JJbmxpbmU6IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFt
ZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNl
UHJvdmlkZXI7XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHBy
b3ZpZGVyKG5hbWU6IHN0cmluZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5J
U2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2
aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xu
ICAgICAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6
IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZh
bHVlOiBhbnkpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4v
LyBtb2RlbHMvVG9kb0l0ZW0udHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7
XG5cbiAgICBleHBvcnQgY2xhc3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAg
ICAgICAgICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBs
ZXRlZDogYm9vbGVhblxuICAgICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2Vz
L0lUb2RvU2NvcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9k
b1Njb3BlIGV4dGVuZHMgbmcuSVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRu
ZXdUb2RvOiBzdHJpbmc7XG5cdFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxU
b2RvOiBUb2RvSXRlbTtcblx0XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3Vu
dDogbnVtYmVyO1xuXHRcdGFsbENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xl
YW47XG5cdFx0c3RhdHVzRmlsdGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2Nh
dGlvbjogbmcuSUxvY2F0aW9uU2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8v
IGludGVyZmFjZXMvSVRvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBp
bnRlcmZhY2UgSVRvZG9TdG9yYWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0
KHRvZG9zOiBUb2RvSXRlbVtdKTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5c
bm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZl
IHRoYXQgcGxhY2VzIGZvY3VzIG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0
aGUgZXhwcmVzc2lvbiBpdCBiaW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4
cG9ydCBmdW5jdGlvbiB0b2RvRm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5n
LklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2Nv
cGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29w
ZS4kd2F0Y2goYXR0cmlidXRlcy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYg
KG5ld3ZhbCkge1xuXHRcdFx0XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygp
LCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xu
XHR9XG5cblx0dG9kb0ZvY3VzLiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3Rp
dmVzL1RvZG9CbHVyLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4g
ICAgLyoqXG4gICAgICogRGlyZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVu
IHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAg
ZXhwb3J0IGZ1bmN0aW9uIHRvZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1
cm4ge1xuICAgICAgICAgICAgbGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVl
cnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgn
Ymx1cicsICgpID0+IHsgJHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4g
ICAgICAgICAgICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5i
aW5kKCdibHVyJyk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8v
IGRpcmVjdGl2ZXMvVG9kb0VzY2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmlj
dCc7XG5cblx0Y29uc3QgRVNDQVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUg
dGhhdCBjYW5jZWxzIGVkaXRpbmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBr
ZXkuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZl
IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50
OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tl
eWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVND
QVBFX0tFWSkge1xuXHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2Nh
cGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRl
c3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxu
XHRcdH07XG5cdH1cbn1cbi8vIHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2Rv
cyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBw
ZXJzaXN0cyBhbmQgcmV0cmlldmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xu
ICAgIGV4cG9ydCBjbGFzcyBUb2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5c
biAgICAgICAgU1RPUkFHRV9JRCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAg
ICAgICAgZ2V0ICgpOiBUb2RvSXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNl
KGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAg
IH1cblxuICAgICAgICBwdXQodG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2Fs
U3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtc
biAgICAgICAgfVxuICAgIH1cbn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUg
dG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xs
ZXIgZm9yIHRoZSBhcHAuIFRoZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVy
c2lzdHMgdGhlIG1vZGVsIHZpYSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9z
ZXMgdGhlIG1vZGVsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNc
blx0ICovXG5cdGV4cG9ydCBjbGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBU
b2RvSXRlbVtdO1xuXG5cdFx0Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3Zp
ZGVzICRpbmplY3RvciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBp
bmplY3RlZCBpbnRvIGNvbnN0cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQg
Y2xvc2UgdG8gdGhlIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0
Y2ggaW4gY291bnQgYW5kIHR5cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvZ3VpZGUvZGlcblx0XHRwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3Bl
Jyxcblx0XHRcdCckbG9jYXRpb24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0
ZXJGaWx0ZXInXG5cdFx0XTtcblxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlh
IEFuZ3VsYXJKUyAkaW5qZWN0b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3Rl
cmVkIGluIEFwcGxpY2F0aW9uLnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0
dHJpYnV0ZSBpbiBpbmRleC5odG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRz
Y29wZTogSVRvZG9TY29wZSxcblx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25T
ZXJ2aWNlLFxuXHRcdFx0cHJpdmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0
cHJpdmF0ZSBmaWx0ZXJGaWx0ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUu
dG9kb3MgPSB0b2RvU3RvcmFnZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztc
blx0XHRcdCRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMg
Zm9yICd2aWV3IG1vZGVsJy4gV2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9s
bGVyIHRvIHRoZSBzY29wZVxuXHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2li
bGUgZnJvbSB2aWV3IC8gSFRNTFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8g
d2F0Y2hpbmcgZm9yIGV2ZW50cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5
IHZpZXcvdXNlciBpbnB1dFxuXHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBl
dmVudCB3aXRoIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJl
IHlvdSB1bnN1YnNjcmliZS5cblx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhp
cy5vblRvZG9zKCksIHRydWUpO1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgp
JywgcGF0aCA9PiB0aGlzLm9uUGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRo
KCkgPT09ICcnKSAkbG9jYXRpb24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0g
JGxvY2F0aW9uO1xuXHRcdH1cblxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRo
aXMuJHNjb3BlLnN0YXR1c0ZpbHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0
eyBjb21wbGV0ZWQ6IGZhbHNlIH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRc
dHsgY29tcGxldGVkOiB0cnVlIH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRc
dFx0dGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRv
ZG9zLCB7IGNvbXBsZXRlZDogZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9u
ZUNvdW50ID0gdGhpcy50b2Rvcy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtc
blx0XHRcdHRoaXMuJHNjb3BlLmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291
bnRcblx0XHRcdHRoaXMudG9kb1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRc
dGFkZFRvZG8oKSB7XG5cdFx0XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5l
d1RvZG8udHJpbSgpO1xuXHRcdFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1
cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9k
bywgZmFsc2UpKTtcblx0XHRcdHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0
XHRlZGl0VG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRl
ZFRvZG8gPSB0b2RvSXRlbTtcblxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4g
Y2FzZSBlZGl0aW5nIGlzIGNhbmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9k
byA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRp
dHModG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5k
ZXhPZih0b2RvSXRlbSldID0gdGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4k
c2NvcGUucmV2ZXJ0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVt
OiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0
XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3Bl
LnJldmVydGVkKSB7XG5cdFx0XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qg
c2F2ZS5cblx0XHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1
cm47XG5cdFx0XHR9XG5cdFx0XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0o
KTtcblx0XHRcdGlmICghdG9kb0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2Rv
KHRvZG9JdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBU
b2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRv
ZG9JdGVtKSwgMSk7XG5cdFx0fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlz
LiRzY29wZS50b2RvcyA9IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9
PiAhdG9kb0l0ZW0uY29tcGxldGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDog
Ym9vbGVhbikge1xuXHRcdFx0dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0
ZW0uY29tcGxldGVkID0gY29tcGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGlj
YXRpb24udHNcblxuLyoqXG4gKiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICog
QHR5cGUge2FuZ3VsYXIuTW9kdWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3Ry
aWN0JztcblxuICAgIHZhciB0b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlc
biAgICAgICAgICAgIC5jb250cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAg
ICAgLmRpcmVjdGl2ZSgndG9kb0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3Rp
dmUoJ3RvZG9Gb2N1cycsIHRvZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9F
c2NhcGUnLCB0b2RvRXNjYXBlKVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywg
VG9kb1N0b3JhZ2UpO1xufVxuIgogCiAvKioqLyB9KSwKIC8qIDQyMSAqLwogLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJz
Y29yZS5qcyAxLjguM1xuLy8gICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMp
IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRp
dmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAv
LyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0
aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Agb24g
dGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3Vz
IHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSBy
b290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBl
ZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3Rv
ID0gT2JqZWN0LnByb3RvdHlwZSwgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4g
IC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8g
Y29yZSBwcm90b3R5cGVzLlxuICB2YXJcbiAgICBwdXNoICAgICAgICAgICAgID0gQXJyYXlQcm90
by5wdXNoLFxuICAgIHNsaWNlICAgICAgICAgICAgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIHRv
U3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAg
ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1Kiog
bmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8v
IGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJh
eS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5h
dGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5kLFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAg
ICA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBz
dXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtc
blxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3Qg
Zm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGlu
c3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJl
dHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8g
RXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8g
YmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBvbGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3
ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4g
IGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1v
ZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMg
PSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxz
ZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5W
RVJTSU9OID0gJzEuOC4zJztcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMg
YW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBw
YXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRl
cnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihmdW5j
LCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVy
biBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xu
ICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1
bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1cm4g
ZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4
dCwgdmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlv
bih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChj
b250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2Ug
NDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24p
IHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUs
IGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlv
bigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBBIG1vc3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBj
YWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBj
b2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8g
aWRlbnRpdHksIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBh
IHByb3BlcnR5IGFjY2Vzc29yLlxuICB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCwg
YXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4g
ICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250
ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5tYXRj
aGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRl
cmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwg
Y29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZv
ciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1
bmN0aW9uKGtleXNGdW5jLCB1bmRlZmluZWRPbmx5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9i
aikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAobGVu
Z3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4
ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFy
Z3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAg
ICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
OyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIXVu
ZGVmaW5lZE9ubHkgfHwgb2JqW2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5
XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xu
XG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhh
dCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJv
dG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAg
ICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAg
Q3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xu
ICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4g
IHZhciBwcm9wZXJ0eSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmop
IHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07
XG4gIH07XG5cbiAgLy8gSGVscGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5l
IHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJh
eSBvciBhcyBhbiBvYmplY3RcbiAgLy8gUmVsYXRlZDogaHR0cDovL3Blb3BsZS5tb3ppbGxhLm9y
Zy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEg
dmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJB
WV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4gIHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0
eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtc
biAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBl
b2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJS
QVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1l
bnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRp
dGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMg
YXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJh
dGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShv
YmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3Ro
OyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAg
IH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0g
MCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVy
YXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJl
dHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRo
ZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rp
b24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9i
aiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1
bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4
XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtl
eV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xu
XG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0
LlxuICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJh
dG9yIGZ1bmN0aW9uIGFzIHVzaW5nIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFp
biBmdW5jdGlvbiB3aWxsIGRlb3B0aW1pemUgdGhlLCBzZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24g
aXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCkge1xuICAg
ICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xu
ICAgICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAg
ICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBv
YmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIGl0ZXJhdGVlID0g
b3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCk7XG4gICAgICB2YXIga2V5cyA9ICFpc0Fy
cmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChrZXlzIHx8
IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAx
O1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbml0aWFsIHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlk
ZWQuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbWVtbyA9IG9i
altrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAg
ICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBp
bmRleCwgbGVuZ3RoKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAg
YSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAv
LyBvciBgZm9sZGxgLlxuICBfLnJlZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJl
ZHVjZSgxKTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2Us
IGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVh
dGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2Vz
IGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3Qg
PSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG4gICAg
aWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGtleSA9IF8uZmluZEluZGV4KG9iaiwgcHJl
ZGljYXRlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gXy5maW5kS2V5KG9i
aiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYm
IGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRo
ZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxl
Y3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNv
bnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRp
Y2F0ZSwgY29udGV4dCk7XG4gICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBs
aXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMu
cHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbiAg
Xy5yZWplY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVy
biBfLmZpbHRlcihvYmosIF8ubmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtc
blxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1
dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVu
Y3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVk
aWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5r
ZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBj
dXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRp
Y2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAg
ICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0
IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFs
aWFzZWQgYXMgYGFueWAuXG4gIF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xu
ICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAg
IGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/
IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5
XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxz
ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlu
cyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZXNg
IGFuZCBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBfLmluY2x1ZGVzID0gXy5pbmNsdWRlID0g
ZnVuY3Rpb24ob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5
TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4
ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBfLmluZGV4
T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0
aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8u
aW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7
XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBmdW5j
ID0gaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9kXTtcbiAgICAgIHJldHVybiBmdW5jID09
IG51bGwgPyBmdW5jIDogZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG5c
biAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDog
ZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4g
ICAgcmV0dXJuIF8ubWFwKG9iaiwgXy5wcm9wZXJ0eShrZXkpKTtcbiAgfTtcblxuICAvLyBDb252
ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rp
bmcgb25seSBvYmplY3RzXG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFp
cnMuXG4gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmls
dGVyKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVy
c2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9i
amVjdFxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZp
bmRXaGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maW5kKG9iaiwg
Xy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1l
bnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1heCA9IGZ1bmN0aW9uKG9i
aiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0
Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAo
aXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxp
a2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVu
Z3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2Jq
W2ldO1xuICAgICAgICBpZiAodmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2
YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9
IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRl
eCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21wdXRl
ZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAgcmVz
dWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAg
IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJl
dHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5c
biAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJl
c3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUs
IGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4g
ICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAg
IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA8IHJlc3VsdCkge1xu
ICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNl
IHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNo
KG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0g
aXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFz
dENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5
KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0g
Y29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0
O1xuICB9O1xuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZl
cnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgdmFyIHNldCA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZh
bHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVmZmxl
ZCA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRleCA8
IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAg
ICAgIGlmIChyYW5kICE9PSBpbmRleCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07
XG4gICAgICBzaHVmZmxlZFtyYW5kXSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBz
aHVmZmxlZDtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEg
Y29sbGVjdGlvbi5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNp
bmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQg
YWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmos
IG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFp
c0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtf
LnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxlKG9i
aikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVj
dCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5z
b3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUg
PSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBm
dW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZh
bHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYTogaXRl
cmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9u
KGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIg
YiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEg
PiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09
PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0g
cmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFs
IGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAg
dmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2Jq
LCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRl
cmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlv
bih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRl
eCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0p
O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUg
b2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRy
aWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBj
cml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtl
eSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUp
OyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUg
b2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0
IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1
bmlxdWUuXG4gIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkg
e1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5j
ZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xu
ICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9u
IHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91cChm
dW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkp
KSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU2Fm
ZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAg
Xy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAg
ICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKGlz
QXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVy
biBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9i
aiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5s
ZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0
aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBn
aXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBz
YXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVk
aWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQp
O1xuICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlv
bih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSA/
IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZh
aWxdO1xuICB9O1xuXG4gIC8vIEFycmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS1c
blxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiog
d2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNl
ZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxvd3Mg
aXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBm
dW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJu
IHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4g
ICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVz
cGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoq
bioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVk
aW5nIHRoZSBsYXN0IE4uXG4gIF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkg
e1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5n
dGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRo
ZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhl
IGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlvbihh
cnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtc
biAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0g
MV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0g
bikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5
IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNp
YWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2ls
bCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3Qg
PSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1
cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xu
XG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21w
YWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRl
bnRpdHkpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJz
aXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwg
c2hhbGxvdywgc3RyaWN0LCBzdGFydEluZGV4KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdLCBpZHgg
PSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0
aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07
XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8u
aXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvL2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBv
ZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0XG4gICAgICAgIGlmICghc2hhbGxvdykgdmFsdWUg
PSBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBzdHJpY3QpO1xuICAgICAgICB2YXIgaiA9IDAsIGxl
biA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47XG4gICAgICAg
IHdoaWxlIChqIDwgbGVuKSB7XG4gICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107
XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRb
aWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07
XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVm
YXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwg
c2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4g
IH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBj
b250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFy
cmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBv
ZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwg
eW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFs
aWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXks
IGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4oaXNT
b3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlz
U29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVl
ICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1
bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGgg
PSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9
IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1
ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgICAgaWYg
KCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNl
ZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYg
KCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21w
dXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9
IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5w
dXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxu
ICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3Rp
bmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8u
dW5pb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1lbnRz
LCB0cnVlLCB0cnVlKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRh
aW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJy
YXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3Vs
dCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3Ig
KHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7
XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0
LCBpdGVtKSkgY29udGludWU7XG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7
IGorKykge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJl
YWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRl
bSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gVGFrZSB0aGUgZGlm
ZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxu
ICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdp
bGwgcmVtYWluLlxuICBfLmRpZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBy
ZXN0ID0gZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUsIDEpO1xuICAgIHJldHVybiBfLmZp
bHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJl
c3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUg
bGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFu
IGluZGV4IGdvIHRvZ2V0aGVyLlxuICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBf
LnVuemlwKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56
aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5
J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXNcbiAgXy51bnppcCA9IGZ1bmN0aW9uKGFycmF5
KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRMZW5ndGgpLmxl
bmd0aCB8fCAwO1xuICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0W2lu
ZGV4XSA9IF8ucGx1Y2soYXJyYXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEg
c2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxs
ZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxu
ICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24obGlz
dCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZh
bHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVs
c2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxu
ICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlv
biB0byBjcmVhdGUgdGhlIGZpbmRJbmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5jdGlvbnNcbiAg
ZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNi
KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5
KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZv
ciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAg
ICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRl
eDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJu
cyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0
ZSB0ZXN0XG4gIF8uZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4g
IF8uZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxuICAv
LyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGlu
ZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8g
bWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1
bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBj
YihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtc
biAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxv
dyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIp
O1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7
IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBH
ZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0SW5kZXhPZiBm
dW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5k
LCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7
XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAo
dHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAg
ICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAg
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4o
aWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0g
ZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBz
b3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBp
dGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAg
ICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIF8u
aXNOYU4pO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9
XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYg
aWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBp
dGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1c
blxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFu
IGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRl
ZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBp
biBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBi
aW5hcnkgc2VhcmNoLlxuICBfLmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZpbmRJ
bmRleCwgXy5zb3J0ZWRJbmRleCk7XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRl
cigtMSwgXy5maW5kTGFzdEluZGV4KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5
IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRo
ZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9u
IGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMu
aHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xu
ICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAg
c3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0
aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2
YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwg
bGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0
O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAoYWhl
bSkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERldGVybWluZXMg
d2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvclxuICAvLyBvciBh
IG5vcm1hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1
dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGlu
Z0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJv
dW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZh
ciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3Vs
dCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVz
dWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVh
dGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwg
YW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3Jp
cHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8u
YmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBm
dW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNs
aWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRo
cm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xu
ICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBib3VuZCA9
IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29u
dGV4dCwgdGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgfTtc
biAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rp
b24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBh
cmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2Ag
Y29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBjb21i
aW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZpbGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVu
Y3Rpb24oZnVuYykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywg
MSk7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAw
LCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5n
dGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBh
cmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91
bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxl
bmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhl
Y3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJl
dHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1l
dGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBt
ZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2Fs
bGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5k
QWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5n
dGgsIGtleTtcbiAgICBpZiAobGVuZ3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBt
dXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAga2V5ID0gYXJndW1lbnRzW2ldO1xuICAgICAgb2JqW2tleV0gPSBf
LmJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAg
Ly8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5c
biAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUg
PSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAg
ICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpIDoga2V5KTtcbiAgICAgIGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRy
ZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVth
ZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVt
b2l6ZTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJl
ciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3Vt
ZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2
YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91
dChmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAg
fSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQg
dG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4g
IF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1
bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9z
dCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhl
IHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0
aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8v
IGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGlu
ZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRp
b24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24o
ZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4g
ICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFv
cHRpb25zKSBvcHRpb25zID0ge307XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAg
ICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtcbiAg
ICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBh
cmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAg
ICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0g
bm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAg
ICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJl
bWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQp
IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9
IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3Vs
dCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29u
dGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25z
LnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRl
ciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAg
fTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGlu
dWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0
aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8g
TiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVu
Y3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcu
XG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2
YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIg
bGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFt
cDtcblxuICAgICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgICB0aW1l
b3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAg
ICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAg
ICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBpZiAoIXRp
bWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07
XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAg
IGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAgdmFy
IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQpIHRp
bWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSB7XG4g
ICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNvbnRl
eHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9
O1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBh
cmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3Vt
ZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkg
ZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMs
IHdyYXBwZXIpIHtcbiAgICByZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xu
XG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNh
dGUuXG4gIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtc
biAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21w
b3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUg
cmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9
IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9
IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9
IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVz
dWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5z
IGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBO
dGggY2FsbC5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJu
IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBm
dW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAv
LyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1
dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGlt
ZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAg
ICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9u
IHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4g
IC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4g
IF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9u
c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24n
dCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFy
IGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9T
dHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3Rv
dHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0Vu
dW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICBmdW5j
dGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4
ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmou
Y29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25zdHJ1Y3Rvcikg
JiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVj
dG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAg
ICBpZiAoXy5oYXMob2JqLCBwcm9wKSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkga2V5cy5w
dXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5v
bkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBv
YmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSB7XG4g
ICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRy
aWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVn
YXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2BcbiAgXy5rZXlz
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtc
biAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5
cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtl
eXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1Zykg
Y29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xu
XG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBf
LmFsbEtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0
dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5
cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBj
b2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5c
biAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBf
LnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4g
ICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5n
dGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVl
c1tpXSA9IG9ialtrZXlzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxu
ICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNo
IGVsZW1lbnQgb2YgdGhlIG9iamVjdFxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1
cm5zIGFuIG9iamVjdFxuICBfLm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNv
bnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIg
a2V5cyA9ICBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAg
ICAgICAgICByZXN1bHRzID0ge30sXG4gICAgICAgICAgY3VycmVudEtleTtcbiAgICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY3VycmVu
dEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0
ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0
dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qg
b2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtcbiAg
ICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtc
biAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ldXV07
XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtleXMg
YW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUu
XG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAg
IHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtl
eXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpba2V5c1tpXV1d
ID0ga2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1
cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBv
YmplY3QuXG4gIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRo
b2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIg
a2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1
c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBF
eHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWlu
IG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4g
IC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGlu
IHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3Qv
YXNzaWduKVxuICBfLmV4dGVuZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5rZXlz
KTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2Vz
IGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUs
IGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAg
IHZhciBrZXlzID0gXy5rZXlzKG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtc
biAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtcbiAg
ICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFp
bmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2Jq
ZWN0LCBvaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9i
amVjdCwgaXRlcmF0ZWUsIGtleXM7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0
O1xuICAgIGlmIChfLmlzRnVuY3Rpb24ob2l0ZXJhdGVlKSkge1xuICAgICAga2V5cyA9IF8uYWxs
S2V5cyhvYmopO1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4
dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2Us
IGZhbHNlLCAxKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7
IHJldHVybiBrZXkgaW4gb2JqOyB9O1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxu
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXld
O1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFs
dWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNv
cHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBf
Lm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNG
dW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUp
O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRz
LCBmYWxzZSwgZmFsc2UsIDEpLCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2
YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xuICAg
ICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtc
biAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0
aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxu
ICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3Rv
dHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQg
dGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBf
LmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0g
YmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0
LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hh
bGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1
cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9
O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1
cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBc
InRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3Bl
cmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRh
cCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xu
ICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBo
YXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0
aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0
aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7
XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJz
W2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9
XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29t
cGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBi
LCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4g
YDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtI
YXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5w
aHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwg
MSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5
IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0g
bnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMu
XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0
YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFt
ZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNz
TmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xh
c3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25z
LCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2Ug
J1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmlu
Z3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2Fz
ZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29y
cmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAg
aXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAg
ICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0n
OlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxu
ICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTlxuICAgICAgICBpZiAo
K2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFy
aXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1
cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAn
W29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAg
Ly8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMu
IERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXBy
ZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVw
cmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAg
ICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xh
c3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAg
ICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVy
biBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMg
YXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBm
cm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3Rv
ciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAh
KF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5z
dGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3Rv
cicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtc
biAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0
dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVy
ZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJh
dGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBv
YmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107
XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVu
Z3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVy
Zm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAg
ICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0g
PT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQg
dGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAg
YVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVs
eSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAg
ICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJp
c29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxl
bmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0
aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGls
ZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0
YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAg
IC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtl
eTtcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90
aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNv
bXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09IGxl
bmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIC8v
IERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4g
ICAgICAgIGlmICghKF8uaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywg
YlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRo
ZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAg
YVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtc
blxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3Rz
IGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBl
cShhLCBiKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVj
dCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24t
cHJvcGVydGllcy5cbiAgXy5pc0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9
PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5pc0Fy
cmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJldHVy
biBvYmoubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09IDA7
XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxl
bWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBl
ID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBE
ZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBu
YXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxs
KG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJp
YWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIg
dHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlw
ZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1l
dGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0
ZSwgaXNSZWdFeHAsIGlzRXJyb3IuXG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbics
ICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9u
KG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0
dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAg
fTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9k
IGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkg
aW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJn
dW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJl
dHVybiBfLmhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gT3B0aW1pemUg
YGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIHR5cGVvZiBidWdz
IGluIG9sZCB2OCxcbiAgLy8gSUUgMTEgKCMxNjIxKSwgYW5kIGluIFNhZmFyaSA4ICgjMTkyOSku
XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAn
b2JqZWN0Jykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0
dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAg
Ly8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxv
YXQob2JqKSk7XG4gIH07XG5cbiAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlz
IHRoZSBvbmx5IG51bWJlciB3aGljaCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxuICBfLmlzTmFO
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIF8uaXNOdW1iZXIob2JqKSAmJiBvYmogIT09
ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNC
b29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmog
PT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xu
ICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwg
PSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8v
IElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0
Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVy
dHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJv
dG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBvYmog
IT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBV
dGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRl
cnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJs
ZSB0byBpdHNcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICBy
b290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAg
Ly8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVl
cy5cbiAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xu
ICB9O1xuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVs
IG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4g
IH07XG5cbiAgXy5ub29wID0gZnVuY3Rpb24oKXt9O1xuXG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0
eTtcblxuICAvLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCBy
ZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG4gIF8ucHJvcGVydHlPZiA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IGZ1bmN0aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkg
e1xuICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBh
IHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0
IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBm
dW5jdGlvbihhdHRycykge1xuICAgIGF0dHJzID0gXy5leHRlbmRPd24oe30sIGF0dHJzKTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0
cnMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4g
IF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1
bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRl
cmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1
bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1
cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBf
LnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4g
ICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsg
TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAv
LyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFz
IGFuIGludGVnZXIuXG4gIF8ubm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0
dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xuXG4gICAvLyBMaXN0IG9mIEhUTUwgZW50
aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7
JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7
JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuICB2YXIg
dW5lc2NhcGVNYXAgPSBfLmludmVydChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3Ig
ZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlv
bi5cbiAgdmFyIGNyZWF0ZUVzY2FwZXIgPSBmdW5jdGlvbihtYXApIHtcbiAgICB2YXIgZXNjYXBl
ciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xu
ICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNj
YXBlZFxuICAgIHZhciBzb3VyY2UgPSAnKD86JyArIF8ua2V5cyhtYXApLmpvaW4oJ3wnKSArICcp
JztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNl
UmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5n
KSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4g
ICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBs
YWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBfLmVzY2FwZSA9
IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcbiAgXy51bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIo
dW5lc2NhcGVNYXApO1xuXG4gIC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5
YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3RgIGFz
IGNvbnRleHQ7IG90aGVyd2lzZSwgcmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9i
amVjdCwgcHJvcGVydHksIGZhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51
bGwgPyB2b2lkIDAgOiBvYmplY3RbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAw
KSB7XG4gICAgICB2YWx1ZSA9IGZhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0
aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdl
bmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGll
bnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBp
ZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFy
IGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQg
OiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxl
IHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRl
IHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0
dGluZ3MgPSB7XG4gICAgZXZhbHVhdGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGlu
dGVycG9sYXRlIDogLzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAvPCUt
KFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRl
U2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xh
dGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xu
ICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5c
biAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkg
Y2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0g
e1xuICAgIFwiJ1wiOiAgICAgIFwiJ1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAgICAn
XFxyJzogICAgICdyJyxcbiAgICAnXFxuJzogICAgICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAy
OCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxc
XHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgdmFyIGVzY2FwZUNoYXIgPSBmdW5j
dGlvbihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtc
blxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNp
ZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBh
cmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3Jy
ZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjog
YG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4g
IF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAg
ICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xu
ICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5n
cyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNz
aW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAo
c2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRl
cnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwg
bm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8g
Q29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBw
cm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9
J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBp
bnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xp
Y2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVyLCBlc2NhcGVDaGFyKTtcbiAgICAgIGlu
ZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAg
ICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpf
LmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4g
ICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1u
dWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAg
ICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAg
fVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVj
ZSB0aGUgY29ycmVjdCBvZmZlc3QuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAg
c291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNp
ZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5n
cy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxu
JztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5q
b2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50
cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAg
dHJ5IHtcbiAgICAgIHZhciByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUg
fHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJj
ZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0g
ZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8p
O1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252
ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3Mu
dmFyaWFibGUgfHwgJ29iaic7XG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBh
cmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7
XG4gIH07XG5cbiAgLy8gQWRkIGEgXCJjaGFpblwiIGZ1bmN0aW9uLiBTdGFydCBjaGFpbmluZyBh
IHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHtc
biAgICB2YXIgaW5zdGFuY2UgPSBfKG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtc
biAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0tLS0t
LS0tLVxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1
cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhp
cyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRlcnNj
b3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5c
biAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5z
dGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlv
dXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1p
eGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0
aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAg
IF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3Ro
aXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAg
ICAgIHJldHVybiByZXN1bHQodGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9O1xu
ICAgIH0pO1xuICB9O1xuXG4gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25z
IHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxsIG11
dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydwb3AnLCAn
cHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwg
ZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAg
IF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5f
d3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAo
KG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09
IDApIGRlbGV0ZSBvYmpbMF07XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG9iaik7XG4gICAg
fTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhl
IHdyYXBwZXIuXG4gIF8uZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9u
KG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3Rv
dHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRo
b2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAg
Ly8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3Qu
XG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dy
YXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1l
dGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMg
YW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90
b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJp
bmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJycgKyB0aGlzLl93cmFwcGVkO1xuICB9O1xu
XG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmls
aXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJu
IHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNl
IGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdp
c3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlz
IGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxl
ZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBs
b2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5c
biAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJl
cXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQp
IHtcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1
cm4gXztcbiAgICB9KTtcbiAgfVxufS5jYWxsKHRoaXMpKTtcbiIKK21vZHVsZS5leHBvcnRzID0g
Ii8vICAgICBVbmRlcnNjb3JlLmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5v
cmdcbi8vICAgICAoYykgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBh
bmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBt
YXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0
aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAg
Ly8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9y
IGBleHBvcnRzYCBvbiB0aGUgc2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2
ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3Vz
VW5kZXJzY29yZSA9IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAo
YnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3Rv
dHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5w
cm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNw
ZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAg
ICAgPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8u
c2xpY2UsXG4gICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhh
c093blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipF
Q01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9w
ZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJy
YXkgICAgICA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0
LmtleXMsXG4gICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0
aXZlQ3JlYXRlICAgICAgID0gT2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiBy
ZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0g
ZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRl
cnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xu
ICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5z
dGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtc
biAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMq
Kiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWly
ZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xv
YmFsIG9iamVjdC5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAg
IGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xu
ICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5f
ID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2
ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9u
IHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25c
biAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVk
IGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9
IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09
IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6
IGFyZ0NvdW50KSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAg
ICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBj
YXNlIDI6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1
bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzog
cmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1
cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9
O1xuICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRl
eCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3Vt
dWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAg
cmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJn
dW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9u
IHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2gg
ZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCU
IGVpdGhlclxuICAvLyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5
IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZh
bHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4g
Xy5pZGVudGl0eTtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXpl
Q2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkp
IHJldHVybiBfLm1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtc
biAgfTtcbiAgXy5pdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0
dXJuIGNiKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJu
YWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0
ZUFzc2lnbmVyID0gZnVuY3Rpb24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1
cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtc
biAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAg
Zm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2
YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVu
Yyhzb3VyY2UpLFxuICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAg
ICAgICAgIGlmICghdW5kZWZpbmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5
XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEg
bmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUg
PSBmdW5jdGlvbihwcm90b3R5cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkg
cmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJv
dG90eXBlKTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0
ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1
bHQ7XG4gIH07XG5cbiAgdmFyIHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJu
IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2Jq
W2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9k
cyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJh
dGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVv
cGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxu
ICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxu
ICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExl
bmd0aCA9IHByb3BlcnR5KCdsZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24o
Y29sbGVjdGlvbikge1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4g
ICAgcmV0dXJuIHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVu
Z3RoIDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9u
c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4g
YGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBv
YmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJz
ZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFj
aCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9w
dGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYg
KGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7
XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4g
ICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7
XG4gICAgICAgIGl0ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1c
biAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMg
b2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNv
bGxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUg
PSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2Jq
KSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgs
XG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5
cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVl
KG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJl
c3VsdHM7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5n
IGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBP
cHRpbWl6ZWQgaXRlcmF0b3IgZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAg
IC8vIGluIHRoZSBtYWluIGZ1bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5c
biAgICBmdW5jdGlvbiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwg
bGVuZ3RoKSB7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5k
ZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhd
IDogaW5kZXg7XG4gICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0s
IGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5c
biAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAg
ICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZh
ciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVu
Z3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8g
MCA6IGxlbmd0aCAtIDE7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYg
bm9uZSBpcyBwcm92aWRlZC5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAg
ICAgICBtZW1vID0gb2JqW2tleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5k
ZXggKz0gZGlyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUs
IG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVj
ZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2Eg
YGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5q
ZWN0ID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJz
aW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0g
Xy5mb2xkciA9IGNyZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1
ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZp
bmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAg
dmFyIGtleTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5k
SW5kZXgob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkg
PSBfLmZpbmRLZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5
ICE9PSB2b2lkIDAgJiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8v
IFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFs
aWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmos
IHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGlj
YXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2
YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBs
aXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztc
biAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0
ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0
KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNv
bnRleHQpO1xuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVu
dHMgbWF0Y2ggYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5
ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRp
Y2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxp
a2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5s
ZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
e1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAg
ICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0
dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1p
bmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGgg
dGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0
ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMo
b2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJl
bnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUo
b2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4g
ICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Ig
b2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2Vk
IGFzIGBpbmNsdWRlc2AgYW5kIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMg
PSBfLmluY2x1ZGUgPSBmdW5jdGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAg
ICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5
cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAg
cmV0dXJuIF8uaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAv
LyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29s
bGVjdGlvbi5cbiAgXy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBh
cmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVu
Y3Rpb24obWV0aG9kKTtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xu
ICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAg
cmV0dXJuIGZ1bmMgPT0gbnVsbCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAg
ICB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBj
YXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24o
b2JqLCBrZXkpIHtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9
O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZp
bHRlcmA6IHNlbGVjdGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBg
a2V5OnZhbHVlYCBwYWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAg
ICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBD
b252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGlu
ZyB0aGUgZmlyc3Qgb2JqZWN0XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAg
cGFpcnMuXG4gIF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVy
biBfLmZpbmQob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhl
IG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4
ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAt
SW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1
dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBv
YmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAg
ICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAg
ICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAg
ICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0
ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1
dGVkIHx8IGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtc
biAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21w
dXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQg
Y29tcHV0YXRpb24pLlxuICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQp
IHtcbiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxu
ICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2Jq
ICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVl
cyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVl
IDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAg
IH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7
XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAg
ICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAo
Y29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3Vs
dCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBs
YXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAg
IHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5n
IHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXSho
dHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBf
LnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2Jq
KSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4g
ICAgdmFyIHNodWZmbGVkID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAs
IHJhbmQ7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20o
MCwgaW5kZXgpO1xuICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBz
aHVmZmxlZFtyYW5kXTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9
XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20g
dmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVk
LCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1
YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9
IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7
XG4gICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAg
ICByZXR1cm4gb2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVy
biBfLnNodWZmbGUob2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8g
U29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0
ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtc
biAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVj
ayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJu
IHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAg
IGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0p
LnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJp
YTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xu
ICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYg
KGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJu
IGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAg
Ly8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBv
cGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVy
biBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0g
e307XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFj
aChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0
ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBr
ZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVy
IGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0
IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVz
dWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tl
eV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAv
LyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8g
YGdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZh
bHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0
LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8g
Q291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3Jp
dGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnks
IG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291
bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhh
cyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9
KTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5n
IGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikg
cmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2Jq
KTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0
eSk7XG4gICAgcmV0dXJuIF8udmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmop
IHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlr
ZShvYmopID8gb2JqLmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBT
cGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxs
IHNhdGlzZnkgdGhlIGdpdmVuXG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50
cyBhbGwgZG8gbm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5j
dGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRp
Y2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFj
aChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1
ZSwga2V5LCBvYmopID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJl
dHVybiBbcGFzcywgZmFpbF07XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0t
LS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4g
UGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhl
IGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNr
XG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVh
ZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9
PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVy
biBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBu
KTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9m
IHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmpl
Y3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhl
IGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJy
YXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4
KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtc
blxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3
aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFz
dCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSBy
ZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVth
cnJheS5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBh
cnJheS5sZW5ndGggLSBuKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0
aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3Bg
LlxuICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2lu
ZyBhbiAqKm4qKiB3aWxsIHJldHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJy
YXkuXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFy
ZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAx
IDogbik7XG4gIH07XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFy
cmF5LlxuICBfLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRl
cihhcnJheSwgXy5pZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRp
b24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1
bmN0aW9uKGlucHV0LCBzaGFsbG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0
cHV0ID0gW10sIGlkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVu
Z3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFs
dWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJh
eSh2YWx1ZSkgfHwgXy5pc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBj
dXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFz
aGFsbG93KSB2YWx1ZSA9IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAg
IHZhciBqID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9
IGxlbjtcbiAgICAgICAgd2hpbGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4Kytd
ID0gdmFsdWVbaisrXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4g
ICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJu
IG91dHB1dDtcbiAgfTtcblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vy
c2l2ZWx5IChieSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1
bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxs
b3csIGZhbHNlKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0
aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0
ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGlj
ZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUt
ZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8v
IGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29y
aXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBm
dW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFf
LmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAg
IGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAg
ICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7
XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/
IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkg
e1xuICAgICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVl
KTtcbiAgICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkg
e1xuICAgICAgICBpZiAoIV8uY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAg
c2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAg
ICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAg
ICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVz
dWx0O1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5p
b246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWlu
IGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxh
dHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFy
cmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8v
IHBhc3NlZC1pbiBhcnJheXMuXG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVu
Z3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwg
bGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5j
b250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBq
IDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNb
al0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSBy
ZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAv
LyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBv
dGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUg
Zmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5
KSB7XG4gICAgdmFyIHJlc3QgPSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4g
ICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4g
IV8uY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dl
dGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQg
c2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7
XG4gICAgcmV0dXJuIF8udW56aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50
IG9mIF8uemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4g
IC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0g
ZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXks
IGdldExlbmd0aCkubGVuZ3RoIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7
XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4g
ICAgICByZXN1bHRbaW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4g
UGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMs
IG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlz
LCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3Qg
PSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7
XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tp
XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1b
MV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2Vu
ZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4
IGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtc
biAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAg
cHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBn
ZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGgg
LSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9
IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5
KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1c
blxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFz
c2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRl
eEZpbmRlcigxKTtcbiAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5k
ZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0
aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNl
cnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNv
cnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAg
ICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBp
dGVyYXRlZShvYmopO1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtc
biAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxv
dyArIGhpZ2gpIC8gMik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkg
bG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xu
ICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5k
IGxhc3RJbmRleE9mIGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIs
IHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5
LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5
KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIg
PiAwKSB7XG4gICAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBs
ZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49
IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAg
ICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4g
ICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFy
cmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9
PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwg
aSwgbGVuZ3RoKSwgXy5pc05hTik7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkg
OiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAx
OyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFy
cmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7
XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9j
Y3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0g
aXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdl
IGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29y
dGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4Rmlu
ZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNy
ZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFu
IGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBv
cnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAg
Ly8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJy
YXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBz
dG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0
IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5c
biAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3Rl
cCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBp
ZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5n
ZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8v
IEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAg
Ly8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVj
dG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50
c1xuICB2YXIgZXhlY3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBj
b250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0
IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwg
YXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtc
biAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAo
Xy5pc09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9
O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3Np
Z25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVz
IHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2
YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChu
YXRpdmVCaW5kICYmIGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQu
YXBwbHkoZnVuYywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5j
dGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBh
IGZ1bmN0aW9uJyk7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4g
ICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1
bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50
cykpKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkg
YXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUg
b2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBk
eW5hbWljIGB0aGlzYCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxs
b3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBf
LnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZh
ciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJn
cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9z
aXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24g
PCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAg
ICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xu
ICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2Yg
YW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xu
ICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmlu
ZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRv
IGl0LlxuICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0g
YXJndW1lbnRzLmxlbmd0aCwga2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVy
cm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChp
ID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAg
ICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9i
ajtcbiAgfTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5n
IGl0cyByZXN1bHRzLlxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAg
ICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6
ZS5jYWNoZTtcbiAgICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cykgOiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVz
cykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAg
cmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xu
ICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0
aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQg
d2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywg
d2FpdCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJl
dHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxs
LCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwg
c2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAg
Ly8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAv
LyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRy
aWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUu
IE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2gg
YXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBk
dXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9u
IG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBk
aXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0
bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFy
Z3MsIHJlc3VsdDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0g
MDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5j
dGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAg
OiBfLm5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFw
cGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9
IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0g
Xy5ub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxz
ZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBw
cmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7
XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAg
ICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAg
ICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztc
biAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYg
KCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1l
b3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBz
ZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3Vs
dDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9u
ZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dl
cmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2Fs
bGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0
cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9m
IHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVk
aWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3Vs
dDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5v
dygpIC0gdGltZXN0YW1wO1xuXG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7
XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAg
ICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlh
dGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAg
ICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4g
ICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQg
PSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93
KCk7XG4gICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlm
ICghdGltZW91dCkgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYg
KGNhbGxOb3cpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtc
biAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4g
cmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24g
cGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0
byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8g
Y29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0g
ZnVuY3Rpb24oZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwg
ZnVuYyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFz
c2VkLWluIHByZWRpY2F0ZS5cbiAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlz
LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRo
YXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8g
Y29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5c
biAgXy5jb21wb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4g
ICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtc
biAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0u
Y2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xu
XG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBh
bmQgYWZ0ZXIgdGhlIE50aCBjYWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMp
IHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAg
ICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9
O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVj
dXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUg
PSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5j
dGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1
bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1
cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5v
IG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0
aWFsaXphdGlvbi5cbiAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBP
YmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElF
IDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMg
bWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNF
bnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1
ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAg
ICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmlu
ZyddO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAg
dmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25z
dHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9u
KGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4g
ICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29u
c3RydWN0b3InO1xuICAgIGlmIChfLmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMs
IHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4g
ICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHBy
b3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5
cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAg
fVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGll
cy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5r
ZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2Jq
KSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmop
O1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFz
KG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlm
IChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJu
IGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBh
biBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09i
amVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBr
ZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYg
KGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4g
a2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHBy
b3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBf
LmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVl
cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFs
dWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0
ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRv
IF8ubWFwIGl0IHJldHVybnMgYW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2Jq
LCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRl
eHQpO1xuICAgIHZhciBrZXlzID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtl
eXMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5
O1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xu
ICAgICAgICBjdXJyZW50S2V5ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVu
dEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAg
ICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVj
dCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9
IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwg
b2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIElu
dmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJl
IHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVz
dWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0
W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9
O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFp
bGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5j
dGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtc
biAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtr
ZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xu
ICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGll
cyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8u
YWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3du
IHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9P
YmplY3RzL09iamVjdC9hc3NpZ24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVB
c3NpZ25lcihfLmtleXMpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmpl
Y3QgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihv
YmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwg
Y29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBr
ZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSBy
ZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmpl
Y3Qgb25seSBjb250YWluaW5nIHRoZSBhbGxvd2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sg
PSBmdW5jdGlvbihvYmplY3QsIG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQg
PSB7fSwgb2JqID0gb2JqZWN0LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwp
IHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAg
ICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0
ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJn
dW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1
ZSwga2V5LCBvYmopIHsgcmV0dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qo
b2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZh
bHVlID0gb2JqW2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVz
dWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAg
Ly8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsb2NrbGlzdGVkIHBy
b3BlcnRpZXMuXG4gIF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtc
biAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5l
Z2F0ZShpdGVyYXRlZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxh
dHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRl
ZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtl
eXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBk
ZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtl
eXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0
aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVz
IGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRl
ZCBvYmplY3QuXG4gIF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAg
IHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4
dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8v
IENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5j
bG9uZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4g
b2JqO1xuICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQo
e30sIG9iaik7XG4gIH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmos
IGFuZCB0aGVuIHJldHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMg
bWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIg
dG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUg
Y2hhaW4uXG4gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVy
Y2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRo
ZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5p
c01hdGNoID0gZnVuY3Rpb24ob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlz
KGF0dHJzKSwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSBy
ZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4g
ICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJu
IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFs
IHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9
IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVj
dHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAg
IC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2Ny
aXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1
cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNv
biBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09
IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdy
YXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xu
ICAgIGlmIChiIGluc3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBg
W1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtc
biAgICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4g
ICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3Vs
YXIgZXhwcmVzc2lvbnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVl
LlxuICAgICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNv
ZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2Ev
aScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVz
IGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsg
dGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwi
NVwiKWAuXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tv
YmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5v
bi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFO
XG4gICAgICAgIGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFu
IGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMu
XG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7
XG4gICAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVh
bl0nOlxuICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJp
bWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1p
bGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBt
aWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBl
cXVpdmFsZW50LlxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBh
cmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVB
cnJheXMpIHtcbiAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAn
b2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50
IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5
YHNcbiAgICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3Ig
PSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3Ig
IT09IGJDdG9yICYmICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFD
dG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9y
KSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAg
cmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9y
IGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4g
ICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywg
YWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBu
ZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9
IGFTdGFjayB8fCBbXTtcbiAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0
aCA9IGFTdGFjay5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5l
YXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBu
dW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChh
U3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1c
blxuICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQg
b2JqZWN0cy5cbiAgICBhU3RhY2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAg
IC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVB
cnJheXMpIHtcbiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYg
YSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7
XG4gICAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8g
RGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGll
cy5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwg
YltsZW5ndGhdLCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9
IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9
IF8ua2V5cyhhKSwga2V5O1xuICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBF
bnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVy
dGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIp
Lmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0p
IHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtl
eXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJb
a2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAg
ICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQg
b2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVy
biB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sg
aWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7
XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0
cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBl
bnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtc
biAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShv
YmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50
cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmop
Lmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1l
bnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAm
JiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4g
YXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4g
IF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJu
IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJ
cyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1
bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQg
c29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBp
c051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRz
JywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJy
b3InXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFt
ZSArICddJztcbiAgICB9O1xuICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9u
IG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRo
ZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5p
c0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9i
aikge1xuICAgICAgcmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxu
ICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNv
bWUgdHlwZW9mIGJ1Z3MgaW4gb2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2Fm
YXJpIDggKCMxOTI5KS5cbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Yg
SW50OEFycmF5ICE9ICdvYmplY3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAg
IH07XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8u
aXNGaW5pdGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAh
aXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUg
YE5hTmA/IChOYU4gaXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2Vs
ZikuXG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihv
YmopICYmIG9iaiAhPT0gK29iajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9v
bGVhbj9cbiAgXy5pc0Jvb2xlYW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09
PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVj
dCBCb29sZWFuXSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxs
P1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7
XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRl
ZmluZWQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07
XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMg
YSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRz
LCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4g
ICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xu
ICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5c
biAgLy8gUnVuIFVuZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0
aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJl
ZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0
aW9uKCkge1xuICAgIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhp
cztcbiAgfTtcblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRl
ZmF1bHQgaXRlcmF0ZWVzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBy
ZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25z
LiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVu
Y3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFs
dWU7XG4gICAgfTtcbiAgfTtcblxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9w
ZXJ0eSA9IHByb3BlcnR5O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVu
IG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDog
ZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxu
ICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBo
YXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9
IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7
fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlz
TWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAq
Km4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7
XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0g
b3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9
O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGlu
Y2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4
ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAg
IHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkp
O1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVu
dCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlv
bigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExp
c3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4g
ICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAg
ICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsn
XG4gIH07XG4gIHZhciB1bmVzY2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8g
RnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRN
TCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xu
ICAgIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0
Y2hdO1xuICAgIH07XG4gICAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBu
ZWVkcyB0byBiZSBlc2NhcGVkXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCku
am9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4g
ICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBm
dW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAn
JyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmlu
Zy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07
XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0g
Y3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBu
YW1lZCBgcHJvcGVydHlgIGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAg
Ly8gYG9iamVjdGAgYXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0
ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUg
PSBvYmplY3QgPT0gbnVsbCA/IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZh
bHVlID09PSB2b2lkIDApIHtcbiAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJl
dHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4g
IH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0
aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9N
IGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVm
aXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXgg
PyBwcmVmaXggKyBpZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUg
dXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xs
b3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4g
IF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/
KSU+L2csXG4gICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2Nh
cGUgICAgICA6IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21p
emluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxu
ICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVk
IG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRj
aCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVk
IHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAg
dmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAg
J1xcXFwnLFxuICAgICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdc
XHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIg
ZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNj
YXBlQ2hhciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNb
bWF0Y2hdO1xuICB9O1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxh
ciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxh
dGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxc
biAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNv
ZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRT
ZXR0aW5ncykge1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0g
b2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50
ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSBy
ZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVn
RXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAg
KHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5n
cy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdn
Jyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmlu
ZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNv
dXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1h
dGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3Vy
Y2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNo
YXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChl
c2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBc
IikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50
ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBv
bGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1
YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19w
Kz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1
cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtc
biAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJs
ZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAg
ICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsg
c291cmNlICsgJ31cXG4nO1xuXG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJy
YXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19q
LmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19w
O1xcbic7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0
aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtc
biAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2
YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwo
dGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNv
dXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1l
bnQgPSBzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAn
ZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJl
dHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0
YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5f
Y2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAg
Ly8gLS0tLS0tLS0tLS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVu
Y3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2Vk
IE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhl
XG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWlu
ZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVk
aWF0ZSByZXN1bHRzLlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xu
ICAgIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtc
blxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBv
YmplY3QuXG4gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlv
bnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2Jq
W25hbWVdO1xuICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAg
dmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJn
dW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3Mp
KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJz
Y29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4g
IC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8u
ZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2Un
LCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJv
dG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZh
ciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRz
KTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYg
b2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhp
cywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1
bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVd
O1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVz
dWx0KHRoaXMsIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9
O1xuICB9KTtcblxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBj
aGFpbmVkIG9iamVjdC5cbiAgXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICBy
ZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJv
eHkgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2gg
YXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZh
bHVlT2YgPSBfLnByb3RvdHlwZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnBy
b3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dy
YXBwZWQ7XG4gIH07XG5cbiAgLy8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQg
Zm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5m
b3JjZSBuZXh0LXR1cm4gc2VtYW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxc
biAgLy8gcHJhY3RpY2UgZm9yIEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1
bmRlcnNjb3JlIHJlZ2lzdGVyc1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtl
IGpRdWVyeSwgaXQgaXMgYSBiYXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3Vn
aCB0byBiZSBidW5kbGVkIGluIGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2Zc
biAgLy8gYW4gQU1EIGxvYWQgcmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4g
ZXJyb3Igd2hlbiBhblxuICAvLyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUg
b2YgYSBsb2FkZXIgcmVxdWVzdC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicg
JiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigp
IHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgogCiAv
KioqLyB9KSwKIC8qIDQyMiAqLwpAQCAtMTQ5MDI4LDcgKzE0OTAyOCw3IEBAIHZhciBKU0hJTlQg
PSAoZnVuY3Rpb24oKSB7CiAKICAgZnVuY3Rpb24gY29tYmluZShkZXN0LCBzcmMpIHsKICAgICBP
YmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgaWYgKF8uaGFz
KEpTSElOVC5ibGFja2xpc3QsIG5hbWUpKSByZXR1cm47CisgICAgICBpZiAoXy5oYXMoSlNISU5U
LmJsb2NrbGlzdCwgbmFtZSkpIHJldHVybjsKICAgICAgIGRlc3RbbmFtZV0gPSBzcmNbbmFtZV07
CiAgICAgfSk7CiAgIH0KQEAgLTE0OTMxMyw3ICsxNDkzMTMsNyBAQCB2YXIgSlNISU5UID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICAgIGtleSA9IGtleS5zbGljZSgxKTsKICAgICAgICAgICB2YWwg
PSBmYWxzZTsKIAotICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rba2V5XSA9IGtleTsKKyAgICAg
ICAgICBKU0hJTlQuYmxvY2tsaXN0W2tleV0gPSBrZXk7CiAgICAgICAgICAgZGVsZXRlIHByZWRl
ZmluZWRba2V5XTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBwcmVkZWZba2V5XSA9ICh2
YWwgPT09ICJ0cnVlIik7CkBAIC0xNTQxMjAsNyArMTU0MTIwLDcgQEAgdmFyIEpTSElOVCA9IChm
dW5jdGlvbigpIHsKICAgICAgIEpTSElOVC5lcnJvcnMgPSBbXTsKICAgICAgIEpTSElOVC51bmRl
ZnMgPSBbXTsKICAgICAgIEpTSElOVC5pbnRlcm5hbHMgPSBbXTsKLSAgICAgIEpTSElOVC5ibGFj
a2xpc3QgPSB7fTsKKyAgICAgIEpTSElOVC5ibG9ja2xpc3QgPSB7fTsKICAgICAgIEpTSElOVC5z
Y29wZSA9ICIobWFpbikiOwogICAgIH0KIApAQCAtMTU0MTQ5LDcgKzE1NDE0OSw3IEBAIHZhciBK
U0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAKICAgICAgICAgaWYgKGl0ZW1bMF0gPT09ICItIikgewog
ICAgICAgICAgIHNsaWNlID0gaXRlbS5zbGljZSgxKTsKLSAgICAgICAgICBKU0hJTlQuYmxhY2ts
aXN0W3NsaWNlXSA9IHNsaWNlOworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rbc2xpY2VdID0g
c2xpY2U7CiAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gcHJlZGVmaW5lZCBpZiB0aGVyZQogICAg
ICAgICAgIGRlbGV0ZSBwcmVkZWZpbmVkW3NsaWNlXTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE5
NTgyOSw3ICsxOTU4MjksNyBAQCBmdW5jdGlvbiBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobm9k
ZSkgCiAJdmFyIHJlZ2V4U2luZ2xlRXNjYXBlID0gL1siJ1xcXGJcZlxuXHJcdF0vOwogCiAJdmFy
IHJlZ2V4RGlnaXQgPSAvWzAtOV0vOwotCXZhciByZWdleFdoaXRlbGlzdCA9IC9bICEjLSZcKC1c
W1xdLX5dLzsKKwl2YXIgcmVnZXhBbGxvd0xpc3QgPSAvWyAhIy0mXCgtXFtcXS1+XS87CiAKIAl2
YXIganNlc2MgPSBmdW5jdGlvbihhcmd1bWVudCwgb3B0aW9ucykgewogCQkvLyBIYW5kbGUgb3B0
aW9ucwpAQCAtMTk2MDA0LDcgKzE5NjAwNCw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNw
ZWNpZmllcihub2RlKSAKIAkJCQl9CiAJCQl9CiAJCQlpZiAoIW9wdGlvbnMuZXNjYXBlRXZlcnl0
aGluZykgewotCQkJCWlmIChyZWdleFdoaXRlbGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKKwkJCQlp
ZiAocmVnZXhBbGxvd0xpc3QudGVzdChjaGFyYWN0ZXIpKSB7CiAJCQkJCS8vIEl04oCZcyBhIHBy
aW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYCJgLCBgJ2Agb3IgYFxgLAogCQkJ
CQkvLyBzbyBkb27igJl0IGVzY2FwZSBpdC4KIAkJCQkJcmVzdWx0ICs9IGNoYXJhY3RlcjsKQEAg
LTIwOTMzNCw3ICsyMDkzMzQsNyBAQCB2YXIgX2dldEl0ZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWly
ZURlZmF1CiAKIGV4cG9ydHMuY2FsbCA9IGNhbGw7CiBleHBvcnRzLl9jYWxsID0gX2NhbGw7Ci1l
eHBvcnRzLmlzQmxhY2tsaXN0ZWQgPSBpc0JsYWNrbGlzdGVkOworZXhwb3J0cy5pc0Jsb2NrbGlz
dGVkID0gaXNCbG9ja2xpc3RlZDsKIGV4cG9ydHMudmlzaXQgPSB2aXNpdDsKIGV4cG9ydHMuc2tp
cCA9IHNraXA7CiBleHBvcnRzLnNraXBLZXkgPSBza2lwS2V5OwpAQCAtMjA5NDEwLDkgKzIwOTQx
MCw5IEBAIGZ1bmN0aW9uIF9jYWxsKGZucykgewogICByZXR1cm4gZmFsc2U7CiB9CiAKLWZ1bmN0
aW9uIGlzQmxhY2tsaXN0ZWQoKSB7Ci0gIHZhciBibGFja2xpc3QgPSB0aGlzLm9wdHMuYmxhY2ts
aXN0OwotICByZXR1cm4gYmxhY2tsaXN0ICYmIGJsYWNrbGlzdC5pbmRleE9mKHRoaXMubm9kZS50
eXBlKSA+IC0xOworZnVuY3Rpb24gaXNCbG9ja2xpc3RlZCgpIHsKKyAgdmFyIGJsb2NrbGlzdCA9
IHRoaXMub3B0cy5ibG9ja2xpc3Q7CisgIHJldHVybiBibG9ja2xpc3QgJiYgYmxvY2tsaXN0Lmlu
ZGV4T2YodGhpcy5ub2RlLnR5cGUpID4gLTE7CiB9CiAKIGZ1bmN0aW9uIHZpc2l0KCkgewpAQCAt
MjA5NDIwLDcgKzIwOTQyMCw3IEBAIGZ1bmN0aW9uIHZpc2l0KCkgewogICAgIHJldHVybiBmYWxz
ZTsKICAgfQogCi0gIGlmICh0aGlzLmlzQmxhY2tsaXN0ZWQoKSkgeworICBpZiAodGhpcy5pc0Js
b2NrbGlzdGVkKCkpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIApAQCAtMjExMDc4LDcgKzIx
MTA3OCw3IEBAIGZ1bmN0aW9uIHNob3VsZElnbm9yZUtleShrZXkpIHsKIAogICBpZiAoa2V5ID09
PSAiZW50ZXIiIHx8IGtleSA9PT0gImV4aXQiIHx8IGtleSA9PT0gInNob3VsZFNraXAiKSByZXR1
cm4gdHJ1ZTsKIAotICBpZiAoa2V5ID09PSAiYmxhY2tsaXN0IiB8fCBrZXkgPT09ICJub1Njb3Bl
IiB8fCBrZXkgPT09ICJza2lwS2V5cyIpIHJldHVybiB0cnVlOworICBpZiAoa2V5ID09PSAiYmxv
Y2tsaXN0IiB8fCBrZXkgPT09ICJub1Njb3BlIiB8fCBrZXkgPT09ICJza2lwS2V5cyIpIHJldHVy
biB0cnVlOwogCiAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIyMjc2OCw3ICsyMjI3NjgsNyBAQCBm
dW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgCiAKIGNvbnN0IGxpZmVjeWNs
ZU1ldGhvZHMgPSBuZXcgU2V0KFsiY29tcG9uZW50V2lsbFVubW91bnQiLCAiY29tcG9uZW50RGlk
TW91bnQiLCAiY29tcG9uZW50V2lsbE1vdW50IiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJjb21w
b25lbnRXaWxsVXBkYXRlIiwgImNvbXBvbmVudERpZENhdGNoIiwgImNvbXBvbmVudFdpbGxSZWNl
aXZlUHJvcHMiXSk7CiAKLWNvbnN0IHdoaXRlbGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQoWyJw
cm9wcyIsICJjb250ZXh0IiwgInJlZnMiXSk7Citjb25zdCBhbGxvd2xpc3RlZFByb3BlcnRpZXMg
PSBuZXcgU2V0KFsicHJvcHMiLCAiY29udGV4dCIsICJyZWZzIl0pOwogCiBmdW5jdGlvbiBnZXRJ
bml0aWFsUHJvcHMocmVhbG0sIGNvbXBvbmVudFR5cGUpIHsKICAgbGV0IHByb3BzTmFtZSA9IG51
bGw7CkBAIC0yMjI5MzgsNyArMjIyOTM4LDcgQEAgZnVuY3Rpb24gZXZhbHVhdGVDbGFzc0NvbnN0
cnVjdG9yKHJlYWxtLAogICAgIGxldCBpbnN0YW5jZSA9ICgwLCBfaW5kZXgyLkNvbnN0cnVjdCko
cmVhbG0sIGNvbnN0cnVjdG9yRnVuYywgW3Byb3BzLCBjb250ZXh0XSk7CiAgICAgKDAsIF9pbnZh
cmlhbnQyLmRlZmF1bHQpKGluc3RhbmNlIGluc3RhbmNlb2YgX2luZGV4Lk9iamVjdFZhbHVlKTsK
ICAgICBmb3IgKGxldCBbcHJvcGVydHlOYW1lXSBvZiBpbnN0YW5jZS5wcm9wZXJ0aWVzKSB7Ci0g
ICAgICBpZiAoIXdoaXRlbGlzdGVkUHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkgeworICAg
ICAgaWYgKCFhbGxvd2xpc3RlZFByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFtZSkpIHsKICAgICAg
ICAgaW5zdGFuY2VQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eU5hbWUpOwogICAgICAgfQogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416738</attachid>
            <date>2020-12-23 21:15:30 -0800</date>
            <delta_ts>2021-01-02 15:00:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>2095872</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzEwODEpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIwLTEyLTIzICBC
ZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbm9uLWluY2x1
c2l2ZSBsYW5ndWFnZSBmcm9tIEpldFN0cmVhbSAyLjAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3RyZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9y
LXBheWxvYWQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNwZWN0b3Iu
UmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2Zvcm1h
dFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuc3R5bGVGb3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRPTU5vZGUuV2ViSW5zcGVjdG9yLlJlc291cmNlLldlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLmlzQWxs
b3dsaXN0ZWRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUu
X2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuaXNXaGl0ZWxpc3RlZFByb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBKZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanM6
CisKIDIwMjAtMTItMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01vdGlvbk1hcmtdIEluY3JlYXNlIHRoZSB3YXJtLXVwIHRpbWUgZm9yIGVhY2ggc3Vi
LXRlc3QgZnJvbSAxMDBtcyB0byAxMDAwbXMKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9yLXBheWxvYWQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9hZC5qcwkocmV2
aXNpb24gMjcxMDY3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9p
bnNwZWN0b3ItcGF5bG9hZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNTgwOSw5ICs1ODA5LDkgQEAg
ZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqLHRva2VuKQogZnVuY3Rpb24gaW50ZWdlckZvcm1h
dHRlcihvYmopCiB7bGV0IHZhbHVlPXR5cGVvZiBvYmoudmFsdWU9PT0ibnVtYmVyIj9vYmoudmFs
dWU6b2JqLmRlc2NyaXB0aW9uO3JldHVybiBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzLmQodmFs
dWUpO30KIHZhciBjdXJyZW50U3R5bGU9bnVsbDtmdW5jdGlvbiBzdHlsZUZvcm1hdHRlcihvYmop
Ci17Y3VycmVudFN0eWxlPXt9O3ZhciBidWZmZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpO2J1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIixvYmouZGVzY3JpcHRpb24pO2Zvcih2YXIg
aT0wO2k8YnVmZmVyLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBwcm9wZXJ0eT1idWZmZXIuc3R5bGVb
aV07aWYoaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KSkKK3tjdXJyZW50U3R5bGU9e307
dmFyIGJ1ZmZlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7YnVmZmVyLnNldEF0dHJp
YnV0ZSgic3R5bGUiLG9iai5kZXNjcmlwdGlvbik7Zm9yKHZhciBpPTA7aTxidWZmZXIuc3R5bGUu
bGVuZ3RoO2krKyl7dmFyIHByb3BlcnR5PWJ1ZmZlci5zdHlsZVtpXTtpZihpc0FsbG93bGlzdGVk
UHJvcGVydHkocHJvcGVydHkpKQogY3VycmVudFN0eWxlW3Byb3BlcnR5XT1idWZmZXIuc3R5bGVb
cHJvcGVydHldO319Ci1mdW5jdGlvbiBpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCitm
dW5jdGlvbiBpc0FsbG93bGlzdGVkUHJvcGVydHkocHJvcGVydHkpCiB7Zm9yKHZhciBwcmVmaXgg
b2ZbImJhY2tncm91bmQiLCJib3JkZXIiLCJjb2xvciIsImZvbnQiLCJsaW5lIiwibWFyZ2luIiwi
cGFkZGluZyIsInRleHQiXSl7aWYocHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXgpfHxwcm9wZXJ0
eS5zdGFydHNXaXRoKCItd2Via2l0LSIrcHJlZml4KSkKIHJldHVybiB0cnVlO30KIHJldHVybiBm
YWxzZTt9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVu
Y2htYXJrL2NsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIv
d2ViLXRvb2xpbmctYmVuY2htYXJrL2NsaS5qcwkocmV2aXNpb24gMjcxMDY3KQorKysgUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanMJKHdvcmtp
bmcgY29weSkKQEAgLTUzNTQsMzcgKzUzNTQsMzcgQEAgaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJl
cicpIF9fZSA9IGNvcmU7IAogLyogMTYgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHsNCi0JaWYoIW1vZHVs
ZS53ZWJwYWNrUG9seWZpbGwpIHsNCi0JCW1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9
Ow0KLQkJbW9kdWxlLnBhdGhzID0gW107DQotCQkvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVk
IGJ5IGRlZmF1bHQNCi0JCWlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtd
Ow0KLQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgImxvYWRlZCIsIHsNCi0JCQllbnVt
ZXJhYmxlOiB0cnVlLA0KLQkJCWdldDogZnVuY3Rpb24oKSB7DQotCQkJCXJldHVybiBtb2R1bGUu
bDsNCi0JCQl9DQotCQl9KTsNCi0JCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICJpZCIs
IHsNCi0JCQllbnVtZXJhYmxlOiB0cnVlLA0KLQkJCWdldDogZnVuY3Rpb24oKSB7DQotCQkJCXJl
dHVybiBtb2R1bGUuaTsNCi0JCQl9DQotCQl9KTsNCi0JCW1vZHVsZS53ZWJwYWNrUG9seWZpbGwg
PSAxOw0KLQl9DQotCXJldHVybiBtb2R1bGU7DQotfTsNCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKG1vZHVsZSkgeworCWlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7CisJCW1vZHVsZS5k
ZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9OworCQltb2R1bGUucGF0aHMgPSBbXTsKKwkJLy8gbW9k
dWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0CisJCWlmKCFtb2R1bGUuY2hpbGRyZW4p
IG1vZHVsZS5jaGlsZHJlbiA9IFtdOworCQlPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAi
bG9hZGVkIiwgeworCQkJZW51bWVyYWJsZTogdHJ1ZSwKKwkJCWdldDogZnVuY3Rpb24oKSB7CisJ
CQkJcmV0dXJuIG1vZHVsZS5sOworCQkJfQorCQl9KTsKKwkJT2JqZWN0LmRlZmluZVByb3BlcnR5
KG1vZHVsZSwgImlkIiwgeworCQkJZW51bWVyYWJsZTogdHJ1ZSwKKwkJCWdldDogZnVuY3Rpb24o
KSB7CisJCQkJcmV0dXJuIG1vZHVsZS5pOworCQkJfQorCQl9KTsKKwkJbW9kdWxlLndlYnBhY2tQ
b2x5ZmlsbCA9IDE7CisJfQorCXJldHVybiBtb2R1bGU7Cit9OwogCiAKIC8qKiovIH0pLAogLyog
MTcgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbigpIHsNCi0JdGhyb3cgbmV3IEVycm9yKCJkZWZpbmUgY2Fubm90IGJlIHVz
ZWQgaW5kaXJlY3QiKTsNCi19Ow0KK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7CisJdGhy
b3cgbmV3IEVycm9yKCJkZWZpbmUgY2Fubm90IGJlIHVzZWQgaW5kaXJlY3QiKTsKK307CiAKIAog
LyoqKi8gfSksCkBAIC03MjQ5LDI3ICs3MjQ5LDI3IEBAIGZ1bmN0aW9uIENhbGwocmVhbG0sIEYs
IFYsIGFyZ3NMaXN0KSB7CiAvKiAyMSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cykgewogCi12YXIgZzsNCi0NCi0vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZQ0KLWcg
PSAoZnVuY3Rpb24oKSB7DQotCXJldHVybiB0aGlzOw0KLX0pKCk7DQotDQotdHJ5IHsNCi0JLy8g
VGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApDQotCWcgPSBnIHx8IEZ1bmN0
aW9uKCJyZXR1cm4gdGhpcyIpKCkgfHwgKDEsZXZhbCkoInRoaXMiKTsNCi19IGNhdGNoKGUpIHsN
Ci0JLy8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGUNCi0J
aWYodHlwZW9mIHdpbmRvdyA9PT0gIm9iamVjdCIpDQotCQlnID0gd2luZG93Ow0KLX0NCi0NCi0v
LyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4u
DQotLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0
J3MNCi0vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59DQot
DQotbW9kdWxlLmV4cG9ydHMgPSBnOw0KK3ZhciBnOworCisvLyBUaGlzIHdvcmtzIGluIG5vbi1z
dHJpY3QgbW9kZQorZyA9IChmdW5jdGlvbigpIHsKKwlyZXR1cm4gdGhpczsKK30pKCk7CisKK3Ry
eSB7CisJLy8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApCisJZyA9IGcg
fHwgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKSB8fCAoMSxldmFsKSgidGhpcyIpOworfSBjYXRj
aChlKSB7CisJLy8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFi
bGUKKwlpZih0eXBlb2Ygd2luZG93ID09PSAib2JqZWN0IikKKwkJZyA9IHdpbmRvdzsKK30KKwor
Ly8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4u
LgorLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0
J3MKKy8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn0KKwor
bW9kdWxlLmV4cG9ydHMgPSBnOwogCiAKIC8qKiovIH0pLApAQCAtMTA0MDUsMTUgKzEwNDA1LDE1
IEBAIHRyYXZlcnNlLnJlbW92ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAodHIKICAgcmV0dXJuIHRy
ZWU7CiB9OwogCi1mdW5jdGlvbiBoYXNCbGFja2xpc3RlZFR5cGUocGF0aCwgc3RhdGUpIHsKK2Z1
bmN0aW9uIGhhc0Jsb2NrbGlzdGVkVHlwZShwYXRoLCBzdGF0ZSkgewogICBpZiAocGF0aC5ub2Rl
LnR5cGUgPT09IHN0YXRlLnR5cGUpIHsKICAgICBzdGF0ZS5oYXMgPSB0cnVlOwogICAgIHBhdGgu
c3RvcCgpOwogICB9CiB9CiAKLXRyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2Nv
cGUsIHR5cGUsIGJsYWNrbGlzdFR5cGVzKSB7Ci0gIGlmICgoMCwgX2luY2x1ZGVzMi5kZWZhdWx0
KShibGFja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwordHJhdmVyc2UuaGFz
VHlwZSA9IGZ1bmN0aW9uICh0cmVlLCBzY29wZSwgdHlwZSwgYmxvY2tsaXN0VHlwZXMpIHsKKyAg
aWYgKCgwLCBfaW5jbHVkZXMyLmRlZmF1bHQpKGJsb2NrbGlzdFR5cGVzLCB0cmVlLnR5cGUpKSBy
ZXR1cm4gZmFsc2U7CiAKICAgaWYgKHRyZWUudHlwZSA9PT0gdHlwZSkgcmV0dXJuIHRydWU7CiAK
QEAgLTEwNDIzLDggKzEwNDIzLDggQEAgdHJhdmVyc2UuaGFzVHlwZSA9IGZ1bmN0aW9uICh0cmVl
LCBzY29wZQogICB9OwogCiAgIHRyYXZlcnNlKHRyZWUsIHsKLSAgICBibGFja2xpc3Q6IGJsYWNr
bGlzdFR5cGVzLAotICAgIGVudGVyOiBoYXNCbGFja2xpc3RlZFR5cGUKKyAgICBibG9ja2xpc3Q6
IGJsb2NrbGlzdFR5cGVzLAorICAgIGVudGVyOiBoYXNCbG9ja2xpc3RlZFR5cGUKICAgfSwgc2Nv
cGUsIHN0YXRlKTsKIAogICByZXR1cm4gc3RhdGUuaGFzOwpAQCAtMTMyMjgsOCArMTMyMjgsOCBA
QCBtb2R1bGUuZXhwb3J0cyA9ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDYyCiAvKiA1NSAqLwogLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi0vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJ
T04gKi8oZnVuY3Rpb24oX193ZWJwYWNrX2FtZF9vcHRpb25zX18pIHsvKiBnbG9iYWxzIF9fd2Vi
cGFja19hbWRfb3B0aW9uc19fICovDQotbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29w
dGlvbnNfXzsNCisvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oX193ZWJwYWNr
X2FtZF9vcHRpb25zX18pIHsvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovCitt
b2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fOwogCiAvKiBXRUJQQUNLIFZB
UiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywge30pKQogCkBAIC0zNzAxMiw3ICszNzAxMiw3
IEBAIGZ1bmN0aW9uIFR5cGVkQXJyYXlTcGVjaWVzQ3JlYXRlKHJlYWxtLCAKIHZhciBwcm9taXNl
RXhpc3RzID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbic7CiAKIC8qIGVzbGludC1kaXNh
YmxlIG5vLXVuZGVmICovCi12YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmpl
Y3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibGFja2xpc3QK
K3ZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDogZ2xv
YmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsb2NrbGlzdAogCiB2YXIgc3ltYm9sRXhp
c3RzID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCc7CiB2YXIgbWFwRXhpc3RzID0gdHlw
ZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCc7CkBAIC0xMTM4NDAsNyArMTEzODQwLDcgQEAgbW9kdWxl
LmV4cG9ydHMgPSAie1widmVyc2lvblwiOjMsXCJzb3VyYwogLyogNDExICovCiAvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8qIE1vb1Rvb2xz
OiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBj
b3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3IFtWYWxlcmlvIFByb2lldHRpXShodHRw
czovL21vb3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIgQnVpbGQ6IGh0dHBzOi8vbW9vdG9vbHMu
bmV0L2NvcmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgwN2IxNzNkNWRlZmY2NzNmY1xuKi9cbi8q
XG4tLS1cblxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlvbjogVGhlIGhlYXJ0IG9mIE1vb1Rvb2xz
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY29weXJpZ2h0OiBDb3B5cmlnaHQg
KGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWlj
YW5lLykuXG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0dHA6Ly9t
b290b29scy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3BpcmF0aW9uOlxuICAtIENsYXNzIGltcGxl
bWVudGF0aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUv
d2VibG9nLzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2FyZHMsIFtH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9s
aWNlbnNlcy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBpbnNwaXJl
ZCBieSBbUHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmlnaHQgKGMp
IDIwMDUtMjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJj
ZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuXG5wcm92aWRlczogW0NvcmUsIE1vb1Rv
b2xzLCBUeXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV1cblxuLi4uXG4qL1xuLyohIE1v
b1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRp
XShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4qL1xuKGZ1bmN0aW9uKCl7XG5cbnRoaXMu
TW9vVG9vbHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcsXG5cdGJ1aWxkOiAnNTI5NDIyODcyYWRm
ZmY0MDFiOTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07XG5cbi8vIHR5cGVPZiwgaW5zdGFuY2VP
ZlxuXG52YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0
ZW0gPT0gbnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYgKGl0ZW0uJGZhbWlseSAhPSBudWxsKSBy
ZXR1cm4gaXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0ZW0ubm9kZU5hbWUpe1xuXHRcdGlmIChp
dGVtLm5vZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVudCc7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5
cGUgPT0gMykgcmV0dXJuICgvXFxTLykudGVzdChpdGVtLm5vZGVWYWx1ZSkgPyAndGV4dG5vZGUn
IDogJ3doaXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVt
YmVyJyl7XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0pIHJldHVybiAnYXJndW1lbnRzJztcblx0
XHRpZiAoJ2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29sbGVjdGlvbic7XG5cdH1cblxuXHRyZXR1
cm4gdHlwZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFuY2VPZiA9
IGZ1bmN0aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBmYWxz
ZTtcblx0dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5jb25zdHJ1
Y3Rvcjtcblx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0XHRpZiAoY29uc3RydWN0b3IgPT09IG9i
amVjdCkgcmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5wYXJlbnQ7
XG5cdH1cblx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVtLmhhc093blByb3BlcnR5KSByZXR1cm4g
ZmFsc2U7XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVjdDtc
bn07XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHk7XG5cbi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJsZXMgPSB0cnVlO1xuZm9yICh2YXIgaSBp
biB7dG9TdHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7XG5pZiAoZW51bWVyYWJsZXMpIGVu
dW1lcmFibGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2Yn
LCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAn
Y29uc3RydWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmpl
Y3QsIGZuLCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51bWVyYWJs
ZXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVudW1lcmFibGVzW2ldO1xuXHRcdC8vIHNp
Z25hdHVyZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9hZFNldHRlciBjYW4gZGlyZWN0bHkgcGFz
cyB0aGVcblx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdpdGhvdXQgc3dhcHBpbmcgYXJndW1lbnRz
LlxuXHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwoYmluZCwg
aywgb2JqZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4PiovXG5cbi8vIEZ1bmN0aW9uIG92ZXJs
b2FkaW5nXG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247XG5cbkZ1bmN0aW9uLnByb3Rv
dHlwZS5vdmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0g
dGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmIChhID09IG51bGwpIHJldHVy
biB0aGlzO1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlwZW9mIGEgIT0gJ3N0cmluZycpe1xuXHRc
dFx0Zm9yICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhpcywgaywgYVtrXSk7XG5cdFx0XHQvKjxs
dElFOD4qL1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KGEsIHNlbGYsIHRoaXMp
O1xuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuY2FsbCh0aGlz
LCBhLCBiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5w
cm90b3R5cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2Vs
ZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtcblx0XHR2YXIgYXJncywgcmVzdWx0O1xu
XHRcdGlmICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJncyA9IGE7XG5cdFx0ZWxzZSBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0ZWxzZSBpZiAodXNlUGx1
cmFsKSBhcmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtcblx0XHRcdHJlc3VsdCA9IHt9O1xuXHRc
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJnc1tpXV0g
PSBzZWxmLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9
IHNlbGYuY2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn07
XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0
dGhpc1trZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbkZ1bmN0aW9uLnByb3Rv
dHlwZS5pbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpcy5wcm90b3R5cGVb
a2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG4vLyBGcm9tXG5cbnZhciBzbGlj
ZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0
ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107XG5cdHJldHVybiAoVHlwZS5pc0Vu
dW1lcmFibGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVPZihpdGVt
KSA9PSAnYXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dO1xufTtcblxu
RnVuY3Rpb24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKHR5cGVPZihpdGVt
KSA9PSAnZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBpdGVtO1xu
XHR9O1xufTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgbnVt
YmVyID0gcGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJuIGlzRmluaXRlKG51bWJlcikgPyBudW1i
ZXIgOiBudWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0
dXJuIGl0ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlvbi5mcm9tID0gRnVuY3Rpb24uY29udmVy
dDtcbk51bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7XG5TdHJpbmcuZnJvbSA9IFN0cmluZy5j
b252ZXJ0O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0
aGlkZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRkZW4gPSB0cnVlO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kcHJvdGVjdGVk
ID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLy8gVHlwZVxuXG52YXIg
VHlwZSA9IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCl7XG5cdGlmIChuYW1lKXtc
blx0XHR2YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHR5cGVDaGVjayA9
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gbG93ZXIpO1xu
XHRcdH07XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVDaGVjaztcblx0XHRpZiAob2Jq
ZWN0ICE9IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0gKGZ1bmN0aW9u
KCl7XG5cdFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRcdH0pLmhpZGUoKTtcblx0XHRcdFxuXHRc
dH1cblx0fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0b2JqZWN0
LmV4dGVuZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1Y3RvciA9IFR5cGU7XG5cdG9iamVjdC5w
cm90b3R5cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xuXG5cdHJldHVybiBvYmplY3Q7XG59O1xu
XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5UeXBlLmlzRW51
bWVyYWJsZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKGl0ZW0gIT0gbnVsbCAmJiB0eXBl
b2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9TdHJpbmcuY2FsbChpdGVtKSAhPSAnW29i
amVjdCBGdW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9va3MgPSB7fTtcblxudmFyIGhvb2tzT2Yg
PSBmdW5jdGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90eXBl
KTtcblx0cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29rc1t0eXBlXSA9IFtdKTtcbn07XG5cbnZh
ciBpbXBsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1l
dGhvZC4kaGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTtcblxu
XHRmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgaG9vayA9
IGhvb2tzW2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykgPT0gJ3R5cGUnKSBpbXBsZW1lbnQuY2Fs
bChob29rLCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2UgaG9vay5jYWxsKHRoaXMsIG5hbWUsIG1l
dGhvZCk7XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTtcblx0
aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXMucHJvdG90
eXBlW25hbWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlzW25hbWVdID09IG51bGwgJiYgdHlwZU9m
KG1ldGhvZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNhbGwodGhpcywgbmFtZSwgZnVuY3Rpb24o
aXRlbSl7XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShpdGVtLCBzbGljZS5jYWxsKGFyZ3VtZW50
cywgMSkpO1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qp
e1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cdHZhciBwcmV2aW91
cyA9IHRoaXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJv
dGVjdGVkKSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtcblxuVHlwZS5pbXBsZW1lbnQoe1xuXG5c
dGltcGxlbWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0ZXh0ZW5kOiBleHRl
bmQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczogZnVuY3Rpb24obmFtZSwgZXhpc3Rpbmcp
e1xuXHRcdGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUsIHRoaXMucHJvdG90eXBlW2V4aXN0aW5n
XSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRtaXJyb3I6IGZ1bmN0aW9uKGhvb2spe1xu
XHRcdGhvb2tzT2YodGhpcykucHVzaChob29rKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxubmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxuLy8gRGVmYXVsdCBUeXBlc1xuXG52YXIg
Zm9yY2UgPSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1ldGhvZHMpe1xuXHR2YXIgaXNUeXBlID0g
KG9iamVjdCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlwZSA9IG9iamVjdC5wcm90b3R5cGU7XG5c
blx0aWYgKGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTtcblxuXHRmb3Ig
KHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHR2YXIga2V5
ID0gbWV0aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBvYmplY3Rba2V5XSxcblx0XHRcdHByb3Rv
ID0gcHJvdG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2VuZXJpYykgZ2VuZXJpYy5wcm90ZWN0KCk7
XG5cdFx0aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0LmltcGxlbWVudChrZXksIHByb3RvLnBy
b3RlY3QoKSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtcblx0XHR2YXIgbWV0aG9kc0VudW1lcmFi
bGUgPSBwcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUobWV0aG9kc1swXSk7XG5cdFx0b2Jq
ZWN0LmZvckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoIW1ldGhvZHNFbnVt
ZXJhYmxlKSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtc
blx0XHRcdFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVttZXRob2RzW2ldXSwgbWV0aG9k
c1tpXSk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gcHJvdG90eXBlKSBmbi5jYWxs
KHByb3RvdHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVy
biBmb3JjZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBTdHJpbmcsIFtcblx0J2NoYXJBdCcsICdj
aGFyQ29kZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycsICdpbmRleE9mJywgJ2xhc3RJbmRleE9m
JywgJ21hdGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNoJyxcblx0J3NsaWNlJywgJ3Nw
bGl0JywgJ3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJpbScsICd0b0xvd2VyQ2FzZScsICd0b1Vw
cGVyQ2FzZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5cdCdwb3AnLCAncHVzaCcsICdyZXZlcnNl
JywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4n
LCAnc2xpY2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdmaWx0ZXInLCAnZm9yRWFj
aCcsICdldmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAnY29u
dGFpbnMnXG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5cdCd0b0V4cG9uZW50aWFsJywgJ3RvRml4
ZWQnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nXG5dKSgnRnVuY3Rpb24nLCBGdW5j
dGlvbiwgW1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5kJ1xuXSkoJ1JlZ0V4cCcsIFJlZ0V4cCwg
W1xuXHQnZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcsIE9iamVjdCwgW1xuXHQnY3JlYXRlJywg
J2RlZmluZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAna2V5cycsXG5cdCdnZXRQcm90
b3R5cGVPZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlOYW1l
cycsXG5cdCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4dGVuc2libGUnLCAnc2VhbCcsICdpc1Nl
YWxlZCcsICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgnRGF0ZScsIERhdGUsIFsnbm93J10pO1xu
XG5PYmplY3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCk7XG5cbkRhdGUuZXh0ZW5k
KCdub3cnLCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhuZXcgRGF0ZSk7XG59KTtcblxubmV3IFR5
cGUoJ0Jvb2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4ZXMgTmFOIHJldHVybmluZyBhcyBOdW1i
ZXJcblxuTnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXtcblx0cmV0dXJuIGlz
RmluaXRlKHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7XG59LmhpZGUoKTtcblxuLy8gTnVtYmVy
LnJhbmRvbVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1heCl7XG5c
dHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4p
O1xufSk7XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNcblxuQXJyYXkuaW1wbGVtZW50KHtcblxu
XHQvKjwhRVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRo
aXMpIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxuXHQvKjwv
IUVTNT4qL1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRBcnJheS5mb3JFYWNo
KHRoaXMsIGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuT2JqZWN0
LmV4dGVuZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIga2V5cyA9IFtd
O1xuXHRcdGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5j
YWxsKG9iamVjdCwgaykpIGtleXMucHVzaChrKTtcblx0XHR9XG5cdFx0Lyo8bHRJRTg+Ki9cblx0
XHRmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmdW5jdGlvbihrKXtcblx0XHRc
dGtleXMucHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwvbHRJRTg+Ki9cblx0XHRyZXR1cm4ga2V5
cztcblx0fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHRP
YmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdGZuLmNhbGwo
YmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9KTtcblx0fVxuXG59KTtcblxu
T2JqZWN0LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxuXG4vLyBBcnJheSAmIE9iamVjdCBjbG9u
aW5nLCBPYmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nXG5cbnZhciBjbG9uZU9mID0gZnVuY3Rp
b24oaXRlbSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0pKXtcblx0XHRjYXNlICdhcnJheSc6IHJl
dHVybiBpdGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2JqZWN0JzogcmV0dXJuIE9iamVjdC5jbG9u
ZShpdGVtKTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRlbTtcblx0fVxufTtcblxuQXJyYXkuaW1w
bGVtZW50KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBpID0gdGhpcy5sZW5ndGgsIGNsb25l
ID0gbmV3IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2YodGhpc1tp
XSk7XG5cdHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIgbWVyZ2VPbmUgPSBmdW5jdGlvbihzb3Vy
Y2UsIGtleSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXtcblx0XHRjYXNl
ICdvYmplY3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3VyY2Vba2V5XSkgPT0gJ29iamVjdCcpIE9i
amVjdC5tZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7XG5cdFx0XHRlbHNlIHNvdXJjZVtrZXld
ID0gT2JqZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXkn
OiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogc291
cmNlW2tleV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVybiBzb3VyY2U7XG59O1xuXG5PYmplY3Qu
ZXh0ZW5kKHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXtcblx0XHRpZiAodHlw
ZU9mKGspID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VPbmUoc291cmNlLCBrLCB2KTtcblx0XHRm
b3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
dmFyIG9iamVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3Qp
IG1lcmdlT25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5XSk7XG5cdFx0fVxuXHRcdHJldHVybiBz
b3VyY2U7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGNsb25l
ID0ge307XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgY2xvbmVba2V5XSA9IGNsb25lT2Yo
b2JqZWN0W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0
aW9uKG9yaWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVkID0gYXJndW1lbnRzW2ldIHx8IHt9O1xu
XHRcdFx0Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBvcmlnaW5hbFtrZXldID0gZXh0ZW5kZWRb
a2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsO1xuXHR9XG5cbn0pO1xuXG4vLyBPYmpl
Y3QtbGVzcyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0ZVNwYWNlJywgJ1RleHROb2RlJywgJ0Nv
bGxlY3Rpb24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0bmV3IFR5cGUo
bmFtZSk7XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZhciBVSUQgPSBEYXRlLm5vdygpO1xuXG5T
dHJpbmcuZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiAoVUlEKyspLnRv
U3RyaW5nKDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBBcnJheVxu
XG5kZXNjcmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gsIGNvbnRh
aW5zLCBhbmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogW1R5cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4uLi5cbiovXG5cbkFycmF5LmltcGxlbWVu
dCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZv
ciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0
aWYgKChpIGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1
cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVu
Y3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0gW107XG5cdFx0Zm9yICh2YXIgdmFs
dWUsIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspIGlmIChpIGluIHRo
aXMpe1xuXHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFs
dWUsIGksIHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVz
dWx0cztcblx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHR2YXIg
bGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0Zm9yICh2YXIgaSA9IChmcm9tIDwgMCkg
PyBNYXRoLm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0aDsgaSsr
KXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0
dXJuIC0xO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciBsZW5n
dGggPSB0aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG5cdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSByZXN1
bHRzW2ldID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZv
ciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0
aWYgKChpIGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVy
biB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5c
blx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtcblx0XHR9KTtcblx0fSxcblxuXHRpbnZv
a2U6IGZ1bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuc2xpY2UoYXJn
dW1lbnRzLCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRy
ZXR1cm4gaXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdzKTtcblx0XHR9KTtcblx0fSxc
blxuXHRhc3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xuXHRcdHZhciBvYmogPSB7fSwgbGVuZ3Ro
ID0gTWF0aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0gPSB0aGlzW2ldO1xuXHRcdHJldHVybiBv
Ymo7XG5cdH0sXG5cblx0bGluazogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgcmVzdWx0ID0g
e307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHRcdFx0aWYgKG9iamVjdFtrZXldKHRo
aXNbaV0pKXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHRoaXNbaV07XG5cdFx0XHRcdFx0ZGVs
ZXRlIG9iamVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKGl0
ZW0sIGZyb20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4T2YoaXRlbSwgZnJvbSkgIT0gLTE7XG5c
dH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dGhpcy5wdXNoLmFwcGx5KHRo
aXMsIGFycmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIDog
bnVsbDtcblx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlz
Lmxlbmd0aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0gOiBudWxs
O1xuXHR9LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICghdGhpcy5jb250
YWlucyhpdGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNvbWJpbmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5
Lmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5W2ldKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0Zm9yICh2YXIgaSA9
IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSB0aGlzLnNw
bGljZShpLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1
bmN0aW9uKCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGZsYXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0Zm9yICh2
YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgdHlwZSA9
IHR5cGVPZih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBlID09ICdudWxsJykgY29udGludWU7XG5c
dFx0XHRhcnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ2Nv
bGxlY3Rpb24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlzW2ldLCBB
cnJheSkpID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNbaV0pO1xuXHRcdH1cblx0XHRy
ZXR1cm4gYXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldICE9
IG51bGwpIHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxu
XHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCAhPSAzKSBy
ZXR1cm4gbnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpe1xuXHRc
dFx0aWYgKHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybiBw
YXJzZUludCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoYXJyYXkpID8gcmdiIDog
J3JnYignICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7
XG5cdFx0aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRoaXMubGVu
Z3RoID09IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3BhcmVudCc7
XG5cdFx0dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKXtcblx0
XHRcdHZhciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2KTtcblx0XHRcdGhleC5wdXNo
KChiaXQubGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTtcblx0XHR9XG5cdFx0cmV0dXJu
IChhcnJheSkgPyBoZXggOiAnIycgKyBoZXguam9pbignJyk7XG5cdH1cblxufSk7XG5cblxuXG4v
KlxuLS0tXG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBGdW5jdGlv
biBQcm90b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogRnVu
Y3Rpb25cblxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRlbmQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0
aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhcmd1bWVudHNbaV0oKTtcblx0XHRc
dH0gY2F0Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxufSk7XG5cbkZ1
bmN0aW9uLmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oYXJncywgYmluZCl7XG5c
dFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZlcnQoYXJn
cykpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdC8q
PCFFUzUtYmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0aGF0KXtcblx0XHR2YXIgc2VsZiA9IHRo
aXMsXG5cdFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGljZShhcmd1
bWVudHMsIDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5jdGlvbigpe307XG5cblx0XHR2YXIgYm91
bmQgPSBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRleHQgPSB0aGF0LCBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCl7XG5cdFx0XHRc
dEYucHJvdG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5cdFx0XHRcdGNvbnRleHQgPSBuZXcgRjtc
blx0XHRcdH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFyZ3MgJiYgIWxlbmd0aClcblx0XHRcdFx0
PyBzZWxmLmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBzZWxmLmFwcGx5KGNvbnRleHQsIGFyZ3Mg
JiYgbGVuZ3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBhcmdzIHx8
IGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0IDogY29u
dGV4dDtcblx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtcblx0fSxcblx0Lyo8LyFFUzUtYmluZD4q
L1xuXG5cdHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHZhciBzZWxmID0gdGhpcztc
blx0XHRpZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRy
ZXR1cm4gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBzZWxmLmFwcGx5KGJpbmQsIGFyZ3MgfHwg
YXJndW1lbnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRlbGF5OiBmdW5jdGlvbihkZWxheSwgYmlu
ZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQodGhpcy5wYXNzKChhcmdzID09IG51bGwg
PyBbXSA6IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9LFxuXG5cdHBlcmlvZGljYWw6IGZ1bmN0
aW9uKHBlcmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRJbnRlcnZhbCh0aGlz
LnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBwZXJpb2RpY2FsKTtcblx0
fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogTnVtYmVyXG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMsIGFuZCBj
ZWlsLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxu
cHJvdmlkZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51bWJlci5pbXBsZW1lbnQoe1xuXG5cdGxp
bWl0OiBmdW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5t
YXgobWluLCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uKHByZWNpc2lvbil7XG5c
dFx0cHJlY2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVkKHByZWNp
c2lvbiA8IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQodGhpcyAq
IHByZWNpc2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5cblx0dGltZXM6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChiaW5kLCBp
LCB0aGlzKTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJz
ZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1
cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH1cblxufSk7XG5cbk51bWJlci5hbGlh
cygnZWFjaCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24obWF0aCl7XG5cbnZhciBtZXRob2RzID0g
e307XG5cbm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtcblx0aWYgKCFOdW1iZXJbbmFtZV0pIG1l
dGhvZHNbbmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBNYXRoW25hbWVdLmFwcGx5KG51
bGwsIFt0aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChhcmd1bWVudHMpKSk7XG5cdH07XG59KTtc
blxuTnVtYmVyLmltcGxlbWVudChtZXRob2RzKTtcblxufSkoWydhYnMnLCAnYWNvcycsICdhc2lu
JywgJ2F0YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3MnLCAnZXhwJywgJ2Zsb29yJywgJ2xvZycs
ICdtYXgnLCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3FydCcsICd0YW4nXSk7XG5cbi8qXG4tLS1c
blxubmFtZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJvdG90eXBl
cyBsaWtlIGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlLCBBcnJheV1cblxucHJvdmlk
ZXM6IFN0cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5pbXBsZW1lbnQoe1xuXG5cdC8vPCFFUzY+
XG5cdGNvbnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGluZGV4KXtcblx0XHRyZXR1cm4gKGluZGV4
ID8gU3RyaW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhPZihzdHJp
bmcpID4gLTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5cdHRlc3Q6IGZ1bmN0aW9uKHJlZ2V4LCBw
YXJhbXMpe1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8gcmVnZXgg
OiBuZXcgUmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7XG5cdH0sXG5cblx0
dHJpbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15cXHMr
fFxccyskL2csICcnKTtcblx0fSxcblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
U3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5cdH0sXG5cblx0Y2Ft
ZWxDYXNlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvLVxc
RC9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBw
ZXJDYXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlwaGVuYXRlOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gpe1xu
XHRcdFx0cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0
fSk7XG5cdH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5n
KHRoaXMpLnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVy
biBtYXRjaC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGVzY2FwZVJlZ0V4cDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4qKz9eJHt9
KCl8W1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9u
KGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0fSxcblxu
XHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9
LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIGhleCA9IFN0cmluZyh0
aGlzKS5tYXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwyfSkoXFx3ezEsMn0pJC8pO1xuXHRcdHJl
dHVybiAoaGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsO1xuXHR9LFxu
XG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIHJnYiA9IFN0cmluZyh0aGlz
KS5tYXRjaCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSGV4KGFy
cmF5KSA6IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdl
eHApe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShyZWdleHAgfHwgKC9cXFxcP1xc
eyhbXnt9XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7XG5cdFx0XHRpZiAobWF0Y2gu
Y2hhckF0KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNoLnNsaWNlKDEpO1xuXHRcdFx0cmV0dXJu
IChvYmplY3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0gOiAnJztcblx0XHR9KTtcblx0
fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogQnJvd3NlclxuXG5kZXNjcmlwdGlvbjog
VGhlIEJyb3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93c2VyIGluaXRpYWxpemF0aW9uLCBXaW5k
b3cgYW5kIERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIgSGFzaC5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIEZ1bmN0aW9uLCBOdW1iZXIsIFN0cmlu
Z11cblxucHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3csIERvY3VtZW50XVxuXG4uLi5cbiovXG5c
bihmdW5jdGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xudmFyIHdpbmRv
dyA9IGRvY3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKHVhLCBw
bGF0Zm9ybSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcblx0cGxhdGZvcm0gPSAocGxhdGZv
cm0gPyBwbGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycpO1xuXG5cdC8vIGNocm9tZSBpcyBpbmNs
dWRlZCBpbiB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBjaGVjayBmb3IgZWRnZSBmaXJzdCxcblx0
Ly8gYmVmb3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLlxuXHR2YXIgVUEgPSB1YS5tYXRjaCgv
KGVkZ2UpW1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtcblx0aWYgKCFVQSl7XG5cdFx0VUEgPSB1
YS5tYXRjaCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVyc2lvbilb
XFxzXFwvOl0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJpfCg/OnJ2W1xcc1xcLzpdfHZlcnNpb25b
XFxzXFwvOl0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXTtcblx0
fVxuXG5cdGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xuXHRcdFVBWzFdID0gJ2llJztcblx0XHRp
ZiAoVUFbNF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxzZSBpZiAoVUFbMV0gPT0gJ2NyaW9zJyl7
XG5cdFx0VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5cdHBsYXRmb3JtID0gdWEubWF0Y2goL2lw
KD86YWR8b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRyb2lkKS8p
IHx8IHVhLm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhlciddKVswXTtcblx0aWYgKHBs
YXRmb3JtID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJztcblxuXHRyZXR1cm4ge1xuXHRc
dGV4dGVuZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxcblx0XHRuYW1lOiAoVUFbMV0gPT0g
J3ZlcnNpb24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0dmVyc2lvbjogcGFyc2VGbG9hdCgoVUFb
MV0gPT0gJ29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6IFVBWzJdKSxcblx0XHRwbGF0Zm9ybTog
cGxhdGZvcm1cblx0fTtcbn07XG5cbnZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0gcGFyc2Uo
bmF2aWdhdG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuaWYgKEJyb3dzZXIu
bmFtZSA9PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSl7XG5cdEJyb3dzZXIudmVyc2lv
biA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuQnJvd3Nlci5leHRlbmQoe1xuXHRGZWF0
dXJlczoge1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5ldmFsdWF0ZSksXG5cdFx0YWlyOiAhISh3
aW5kb3cucnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpLFxu
XHRcdGpzb246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxuXHRwYXJzZVVBOiBwYXJzZVxufSk7XG5c
blxuXG4vLyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVzdCA9IChmdW5jdGlvbigpe1xuXG5cdHZh
ciBYTUxIVFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
XG5cdH07XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3Rp
dmVYT2JqZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHZhciBNU1hNTCA9IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcp
O1xuXHR9O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0WE1M
SFRUUCgpO1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1M
MigpO1xuXHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwoKTtc
blx0XHRyZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgpO1xuXG5Ccm93c2VyLkZlYXR1cmVzLnho
ciA9ICEhKEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4vLyBTdHJpbmcgc2NyaXB0c1xuXG5Ccm93
c2VyLmV4ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcblx0
aWYgKHdpbmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTtcblx0
fSBlbHNlIHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0
Jyk7XG5cdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtc
blx0XHRzY3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChz
Y3JpcHQpO1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0fVxuXHRy
ZXR1cm4gdGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1lbnQoJ3N0cmlwU2NyaXB0cycsIGZ1bmN0
aW9uKGV4ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xuXHR2YXIgdGV4dCA9IHRoaXMucmVwbGFj
ZSgvPHNjcmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihhbGws
IGNvZGUpe1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdcXG4nO1xuXHRcdHJldHVybiAnJztcblx0
fSk7XG5cdGlmIChleGVjID09PSB0cnVlKSBCcm93c2VyLmV4ZWMoc2NyaXB0cyk7XG5cdGVsc2Ug
aWYgKHR5cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBleGVjKHNjcmlwdHMsIHRleHQpO1xuXHRy
ZXR1cm4gdGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERvY3VtZW50XG5cbkJyb3dzZXIuZXh0ZW5k
KHtcblx0RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5cdFdpbmRvdzogdGhpcy5XaW5kb3csXG5c
dEVsZW1lbnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6IHRoaXMuRXZlbnRcbn0pO1xuXG50aGlz
LldpbmRvdyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ1dpbmRvdycsIGZ1bmN0aW9u
KCl7fSk7XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ3dpbmRvdycpLmhpZGUo
KTtcblxuV2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHR3aW5kb3dbbmFt
ZV0gPSBtZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVudCA9IGRvY3VtZW50LiRjb25zdHJ1Y3Rv
ciA9IG5ldyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9uKCl7fSk7XG5cbmRvY3VtZW50LiRmYW1p
bHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcpLmhpZGUoKTtcblxuRG9jdW1lbnQubWly
cm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRvY3VtZW50W25hbWVdID0gbWV0aG9kO1xu
fSk7XG5cbmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5pZiAoIWRv
Y3VtZW50LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnaGVhZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7XG5cdGRvY3Vt
ZW50LmV4ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VDYWNoZScsIGZhbHNlLCB0cnVlKTtcbn0g
Y2F0Y2ggKGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0aGlzLmF0dGFjaEV2ZW50ICYmICF0aGlz
LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2FkRXZlbnQgPSBmdW5jdGlvbigpe1xuXHRc
dHRoaXMuZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xuXHRcdGRvY3VtZW50
LmhlYWQgPSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDtcblx0XHR3aW5k
b3cgPSB0aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVsbDtcblx0fTtcblx0dGhpcy5hdHRhY2hF
dmVudCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59XG5cbi8vIElFIGZhaWxzIG9uIGNvbGxl
Y3Rpb25zIGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZlcnMgdG8gPHNlbGVjdD4pXG52YXIgYXJy
YXlGcm9tID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5cdGFycmF5RnJvbShkb2N1bWVudC5odG1s
LmNoaWxkTm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihp
dGVtKXtcblx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycgJiYgVHlwZS5pc0VudW1lcmFi
bGUoaXRlbSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJheScpe1xuXHRcdFx0dmFyIGkgPSBpdGVt
Lmxlbmd0aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5cdFx0XHR3aGlsZSAoaS0tKSBhcnJheVtp
XSA9IGl0ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJh
eUZyb20oaXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSxc
blx0XHRzbGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0Wydwb3AnLCAncHVzaCcsICdyZXZlcnNl
JywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4n
LCAnc2xpY2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSBwcm90b3R5
cGVbbmFtZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVy
biBtZXRob2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1bWVudHMs
IDEpKTtcblx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNzIEZ1
bmN0aW9uIGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGluZyBy
ZXVzYWJsZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWly
ZXM6IFtBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXVxuXG5wcm92aWRlczogQ2xhc3Nc
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIENsYXNzID0gdGhpcy5DbGFzcyA9IG5l
dyBUeXBlKCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7XG5cdGlmIChpbnN0YW5jZU9mKHBhcmFt
cywgRnVuY3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6ZTogcGFyYW1zfTtcblxuXHR2YXIgbmV3
Q2xhc3MgPSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdGlmIChuZXdDbGFzcy4k
cHJvdG90eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IG51bGw7XG5cdFx0
dGhpcy4kZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXplKSA/
IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcztcblx0XHR0aGlz
LiRjYWxsZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LmV4
dGVuZCh0aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxuXHRuZXdDbGFzcy4kY29uc3RydWN0b3Ig
PSBDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG5ld0NsYXNzO1xu
XHRuZXdDbGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFyZW50O1xuXG5cdHJldHVybiBuZXdDbGFz
cztcbn0pO1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24oKXtcblx0aWYgKCF0aGlzLiRjYWxsZXIp
IHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBhcmVudFwiIGNhbm5vdCBiZSBjYWxsZWQu
Jyk7XG5cdHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRuYW1lLFxuXHRcdHBhcmVudCA9IHRoaXMu
JGNhbGxlci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZpb3VzID0gKHBhcmVudCkgPyBwYXJlbnQu
cHJvdG90eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVycm9y
KCdUaGUgbWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFzIG5vIHBhcmVudC4nKTtcblx0cmV0dXJu
IHByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgcmVzZXQgPSBmdW5j
dGlvbihvYmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHR2YXIgdmFsdWUg
PSBvYmplY3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0Y2FzZSAn
b2JqZWN0Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlvbigpe307XG5cdFx0XHRcdEYucHJvdG90
eXBlID0gdmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXldID0gcmVzZXQobmV3IEYpO1xuXHRcdFx0
XHRicmVhaztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5jbG9uZSgp
OyBicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB3cmFwID0g
ZnVuY3Rpb24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kLiRvcmlnaW4pIG1ldGhv
ZCA9IG1ldGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KG1ldGhvZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBuZXcgRXJy
b3IoJ1RoZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdFx0
dmFyIGNhbGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyO1xuXHRcdHRo
aXMuY2FsbGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3JhcHBlcjtcblx0XHR2YXIgcmVz
dWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0dGhpcy4kY2FsbGVyID0g
Y3VycmVudDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fS5l
eHRlbmQoeyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7XG5cdHJl
dHVybiB3cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUs
IHJldGFpbil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcblx0
XHR2YWx1ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYg
KHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKHR5cGVPZih2YWx1ZSkg
PT0gJ2Z1bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRoaWRkZW4pIHJldHVybiB0aGlzO1xuXHRc
dHRoaXMucHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlzLCBrZXks
IHZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5cGUsIGtl
eSwgdmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG52YXIgZ2V0SW5zdGFuY2Ug
PSBmdW5jdGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7XG5cdHZhciBw
cm90byA9IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZztcblx0cmV0dXJu
IHByb3RvO1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1lbnQub3Zl
cmxvYWRTZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3JzID0ge1xuXG5cdEV4dGVuZHM6IGZ1bmN0
aW9uKHBhcmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5wcm90b3R5
cGUgPSBnZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxuXG5cdEltcGxlbWVudHM6IGZ1bmN0aW9u
KGl0ZW1zKXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pe1xu
XHRcdFx0dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gaW5z
dGFuY2UpIGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1ZSk7XG5c
dFx0fSwgdGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3Mu
RXh0cmFzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhhdCBjYW4g
YmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4ZWN1dGlv
biBvZiBtYW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4sIEV2ZW50
cywgT3B0aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudGhpcy5DaGFpbiA9IG5l
dyBDbGFzcyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRjaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0
aGlzLiRjaGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlz
LiRjaGFpbi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpIDogZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlz
LiRjaGFpbi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgcmVt
b3ZlT24gPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15vbihb
QS1aXSkvLCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5cdFx0cmV0dXJuIGZpcnN0LnRvTG93ZXJD
YXNlKCk7XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMgPSBuZXcgQ2xhc3Moe1xuXG5cdCRldmVu
dHM6IHt9LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwpe1xuXHRc
dHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxuXG5cdFx0dGhpcy4kZXZlbnRzW3R5cGVd
ID0gKHRoaXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5jbHVkZShmbik7XG5cdFx0aWYgKGludGVy
bmFsKSBmbi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YWRk
RXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAodmFyIHR5cGUgaW4gZXZlbnRzKSB0
aGlzLmFkZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dHlwZSA9
IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5c
dFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFy
Z3MpO1xuXHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4u
ZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdz
KTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVu
dDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2
YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmIChldmVudHMgJiYgIWZuLmlu
dGVybmFsKXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTtcblx0XHRcdGlm
IChpbmRleCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07XG5cdFx0fVxuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIg
dHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0
eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRc
dFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChldmVudHMpIGV2ZW50cyA9IHJlbW92ZU9u
KGV2ZW50cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMuJGV2ZW50cyl7XG5cdFx0XHRpZiAoZXZl
bnRzICYmIGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtcblx0XHRcdHZhciBmbnMgPSB0aGlzLiRl
dmVudHNbdHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0gZm5zLmxlbmd0aDsgaS0tOykgaWYgKGkg
aW4gZm5zKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudCh0eXBlLCBmbnNbaV0pO1xuXHRcdFx0
fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudGhpcy5PcHRpb25zID0g
bmV3IENsYXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb25z
ID0gdGhpcy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFwcGx5KG51bGwsIFt7fSwgdGhpcy5vcHRp
b25zXS5hcHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnQpIGZvciAodmFy
IG9wdGlvbiBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAh
PSAnZnVuY3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTtcblx0
XHRcdHRoaXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pO1xuXHRcdFx0ZGVsZXRl
IG9wdGlvbnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuVGhlbmFibGVcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlv
dXIgb3duIENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhlbmFibGVcIi5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLlRo
ZW5hYmxlXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgU1RBVEVfUEVORElORyA9
IDAsXG5cdFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNUQVRFX1JFSkVDVEVEID0gMjtcblxudmFy
IFRoZW5hYmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3Moe1xuXG5cdCR0aGVuYWJsZVN0
YXRlOiBTVEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVSZXN1bHQ6IG51bGwsXG5cdCR0aGVuYWJs
ZVJlYWN0aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHJlc29s
dmUodGhpcywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlamVjdDogZnVu
Y3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHN3aXRjaCAo
dGhpcy4kdGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNlIFNUQVRFX1BFTkRJTkc6XG5cdFx0XHRc
dHJldHVybiAncGVuZGluZyc7XG5cblx0XHRcdGNhc2UgU1RBVEVfRlVMRklMTEVEOlxuXHRcdFx0
XHRyZXR1cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNhc2UgU1RBVEVfUkVKRUNURUQ6XG5cdFx0
XHRcdHJldHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0fSxcblxuXHRyZXNldFRoZW5hYmxlOiBm
dW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJlc2V0KHRo
aXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRoZW46IGZ1bmN0aW9uKG9uRnVsZmls
bGVkLCBvblJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAnZnVuY3Rp
b24nKSBvbkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5cdFx0aWYgKHR5cGVvZiBvblJlamVjdGVk
ICE9PSAnZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Rocm93ZXInO1xuXG5cdFx0dmFyIHRoZW5h
YmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlzLiR0aGVuYWJsZVJlYWN0aW9ucy5wdXNo
KHtcblx0XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0XHRcdGZ1bGZpbGxIYW5kbGVyOiBvbkZ1
bGZpbGxlZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9uUmVqZWN0ZWRcblx0XHR9KTtcblxuXHRc
dGlmICh0aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHRcdHJlYWN0
KHRoaXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblxuXHQnY2F0Y2gn
OiBmdW5jdGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVq
ZWN0ZWQpO1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5leHRlbmQoe1xuXHRyZXNvbHZlOiBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9m
IFRoZW5hYmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRc
dHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCB2YWx1
ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblx0cmVqZWN0OiBmdW5jdGlv
bihyZWFzb24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdHJlamVj
dCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH1cbn0pO1xuXG4v
LyBQcml2YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSl7
XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0
aWYgKHRoZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRyZWplY3QodGhlbmFibGUsIG5ldyBUeXBl
RXJyb3IoJ1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJsZSB3aXRoIGl0c2VsZi4nKSk7XG5cdFx0
fSBlbHNlIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yg
dmFsdWUgPT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZhciB0aGVuO1xuXHRcdFx0dHJ5IHtcblx0
XHRcdFx0dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRc
dFx0XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlw
ZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHR2YXIgcmVzb2x2ZWQgPSBmYWxzZTtc
blx0XHRcdFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0
dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24o
bmV4dFZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRc
dFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodGhlbmFi
bGUsIG5leHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRc
dFx0XHRcdFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRcdFx0XHRcdFx0XHRcdGlmICghcmVzb2x2
ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRc
dFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0
XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xu
XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1
ZTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0XHRc
dFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRm
dWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZ1
bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZnVsZmls
bCh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNU
QVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVlO1xuXHRc
dHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfRlVMRklMTEVEO1xuXG5cdFx0cmVhY3Qo
dGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKXtc
blx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0
aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxl
U3RhdGUgPSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxu
XG5mdW5jdGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0
ZSAhPT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gbnVs
bDtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG5cdH1cbn1c
blxuZnVuY3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2YXIgc3RhdGUgPSB0aGVuYWJsZS4kdGhl
bmFibGVTdGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQsXG5cdFx0
cmVhY3Rpb25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zLFxuXHRcdHR5cGU7XG5cblx0
aWYgKHN0YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJl
YWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmlsbEhhbmRsZXInO1xuXHR9IGVsc2UgaWYg
KHN0YXRlID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlv
bnMgPSBbXTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRsZXInO1xuXHR9XG5cblx0aWYgKHR5cGUp
e1xuXHRcdGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQsIHJlYWN0aW9ucywgdHlwZV0pKTtcblx0
fVxufVxuXG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCByZWFjdGlvbnMsIHR5cGUpe1xuXHRmb3Ig
KHZhciBpID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpe1xuXHRcdHZhciBy
ZWFjdGlvbiA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhhbmRsZXIgPSByZWFjdGlvblt0eXBlXTtc
blxuXHRcdGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHknKXtcblx0XHRcdHJlc29sdmUocmVhY3Rp
b24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGlmIChoYW5kbGVyID09PSAnVGhyb3dl
cicpe1xuXHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxz
ZSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCBoYW5k
bGVyKHJlc3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0
KHJlYWN0aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxu
XG52YXIgZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHR5cGVv
ZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKXtcblx0ZGVmZXIgPSBwcm9jZXNzLm5l
eHRUaWNrO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyl7
XG5cdGRlZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIHtcblx0ZGVmZXIgPSBmdW5jdGlvbihm
bil7XG5cdFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07XG59XG5cbn0pKCk7XG5cbi8qXG4tLS1c
blxubmFtZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBPYmplY3QgZ2VuZXJpYyBtZXRob2RzXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRl
czogW09iamVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuT2JqZWN0LmV4
dGVuZCh7XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmplY3QsIGtleXMpe1xuXHRcdHZhciByZXN1
bHRzID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkr
Kyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHRpZiAoayBpbiBvYmplY3QpIHJlc3Vs
dHNba10gPSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5c
dG1hcDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtc
blx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7
IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0
cmVzdWx0c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xu
XHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBP
YmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7
IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0
XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNba2V5XSA9
IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRldmVyeTogZnVu
Y3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmpl
Y3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2
YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwg
a2V5KSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRz
b21lOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5r
ZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtc
blx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgb2JqZWN0
W2tleV0sIGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0s
XG5cblx0dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0
XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkg
PCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRcdHZhbHVl
cy5wdXNoKG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0
Z2V0TGVuZ3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvYmpl
Y3QpLmxlbmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5c
dFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBp
IDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlm
IChvYmplY3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBrZXk7XG5cdFx0fVxuXHRcdHJldHVybiBu
dWxsO1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHRy
ZXR1cm4gT2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7XG5cdH0sXG5cblx0dG9R
dWVyeVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNlKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcg
PSBbXTtcblxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7XG5c
dFx0XHRpZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJztcblx0XHRcdHZhciBy
ZXN1bHQ7XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0XHRjYXNlICdvYmpl
Y3QnOiByZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1ZSwga2V5KTsgYnJlYWs7XG5c
dFx0XHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2YXIgcXMgPSB7fTtcblx0XHRcdFx0XHR2
YWx1ZS5lYWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdFx0XHRxc1tpXSA9IHZhbDtcblx0
XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyhxcywg
a2V5KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogcmVzdWx0ID0ga2V5ICsg
Jz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1
ZSAhPSBudWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1
cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG5cblxuLypc
bi0tLVxubmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBDU1MzIFNl
bGVjdG9yIHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0
aW9uKCl7XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRvckluZGV4LFxuXHRjb21iaW5hdG9ySW5k
ZXgsXG5cdHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxuXHRyZXZlcnNlQ2FjaGUgPSB7fSxcblx0
cmVVbmVzY2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24s
IGlzUmV2ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0
aWYgKGV4cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJldHVybiBleHByZXNzaW9uO1xuXHRleHBy
ZXNzaW9uID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xu
XHRyZXZlcnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFyIGN1cnJlbnRDYWNoZSA9IChyZXZlcnNl
ZCkgPyByZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYgKGN1cnJlbnRDYWNoZVtleHByZXNzaW9u
XSkgcmV0dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXTtcblx0cGFyc2VkID0ge1xuXHRcdFNs
aWNrOiB0cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxcblx0XHRyYXc6IGV4cHJlc3Npb24sXG5c
dFx0cmV2ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBwYXJzZSh0aGlzLnJhdywgdHJ1
ZSk7XG5cdFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRleCA9IC0xO1xuXHR3aGlsZSAoZXhwcmVz
c2lvbiAhPSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNlcikp
KTtcblx0cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGg7XG5cdHJldHVy
biBjdXJyZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2ZXJzZWQpID8gcmV2ZXJzZShwYXJzZWQp
IDogcGFyc2VkO1xufTtcblxudmFyIHJldmVyc2VDb21iaW5hdG9yID0gZnVuY3Rpb24oY29tYmlu
YXRvcil7XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7XG5cdGVsc2UgaWYg
KGNvbWJpbmF0b3IgPT09ICcgJykgcmV0dXJuICchJztcblx0ZWxzZSBpZiAoKC9eIS8pLnRlc3Qo
Y29tYmluYXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJlcGxhY2UoL14hLywgJycpO1xuXHRlbHNl
IHJldHVybiAnIScgKyBjb21iaW5hdG9yO1xufTtcblxudmFyIHJldmVyc2UgPSBmdW5jdGlvbihl
eHByZXNzaW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztc
blx0Zm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFy
IGV4cCA9IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAn
KicsIGNvbWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07XG5c
blx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5ndGg7IGorKyl7XG5cdFx0XHR2YXIgY2V4
cCA9IGV4cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZlcnNlQ29tYmluYXRvcikgY2V4cC5yZXZl
cnNlQ29tYmluYXRvciA9ICcgJztcblx0XHRcdGNleHAuY29tYmluYXRvciA9IGNleHAucmV2ZXJz
ZUNvbWJpbmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHR9
XG5cblx0XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Np
b247XG59O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKXsvLyBDcmVkaXQ6
IFhSZWdFeHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2ZW4gTGV2aXRoYW4gPGh0dHA6Ly9zdGV2
ZW5sZXZpdGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1JVCBMaWNlbnNlXG5cdHJldHVybiBzdHJp
bmcucmVwbGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8LCNcXHNdL2csIGZ1bmN0aW9uKG1hdGNo
KXtcblx0XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5cdH0pO1xufTtcblxudmFyIHJlZ2V4cCA9
IG5ldyBSZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYgcnVieVxucHV0cyBcIlxcdFxcdFwiICsg
REFUQS5yZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMuKiR8XFxzK3xcXFxcJHxcXFxcbi8sJycp
XG5fX0VORF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxcXFxzKiAoICwgKSBcXFxccyogICAgICAg
ICAgICAgICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5cXFxuXHR8IFxcXFxzKiAoIDxjb21iaW5h
dG9yPisgKSBcXFxccyogICAjIENvbWJpbmF0b3IgICAgICAgICBcXG5cXFxuXHR8ICAgICAgKCBc
XFxccysgKSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXFxuXFxcblx0fCAg
ICAgICggPHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMgVGFnICAgICAgICAgICAgICAgIFxcblxc
XG5cdHwgXFxcXCMgICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIElEICAgICAgICAgICAgICAg
ICBcXG5cXFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05hbWUg
ICAgICAgICAgXFxuXFxcblx0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJp
YnV0ZSAgICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxcblx0XHRcXFxccyogKDx1bmljb2RlMT4r
KSAgKD86ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58XT89KSAgKD86ICBcXFxuXHRcdFx0XHRc
XFxccyogKD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8pKC4qPylcXFxcOSBcXFxuXHRcdFx0XHQp
XFxcblx0XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAgXFxcblx0XFxcXF0oPyFcXFxcXSkgXFxu
XFxcblx0fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxcblx0XFxcXCggKD86XFxcblx0XHQoPzoo
W1xcXCInXSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSsp
XFxcblx0KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4qL1xuXHRcIl4oPzpcXFxccyooLClcXFxc
cyp8XFxcXHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChcXFxccyspfCg8dW5pY29kZT4rfFxcXFwq
KXxcXFxcIyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29kZT4rKXxcXFxcW1xcXFxzKig8dW5pY29k
ZTE+KykoPzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxccyooPzooW1xcXCInXT8pKC4qPylcXFxc
OSkpKT9cXFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1bmljb2RlPispKD86XFxcXCgoPzooPzoo
W1xcXCInXSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSsp
KVxcXFwpKT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5hdG9yPi8sICdbJyArIGVzY2FwZVJlZ0V4
cCgnPit+YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylcblx0LnJlcGxhY2UoLzx1bmljb2RlPi9n
LCAnKD86W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0p
Jylcblx0LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFxcXHdcXFxcdTAwYTEtXFxcXHVG
RkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuKTtcblxuZnVuY3Rpb24gcGFyc2VyKFxu
XHRyYXdNYXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNvbWJpbmF0b3IsXG5cdGNvbWJpbmF0b3JD
aGlsZHJlbixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0Y2xhc3NOYW1lLFxuXG5cdGF0dHJpYnV0
ZUtleSxcblx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0dHJpYnV0ZVF1b3RlLFxuXHRhdHRyaWJ1
dGVWYWx1ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBzZXVkb0NsYXNzLFxuXHRwc2V1ZG9RdW90
ZSxcblx0cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0cHNldWRvQ2xhc3NWYWx1ZVxuKXtcblx0
aWYgKHNlcGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdHBhcnNlZC5leHBy
ZXNzaW9uc1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xuXHRcdGNvbWJpbmF0b3JJbmRleCA9IC0x
O1xuXHRcdGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztcblx0fVxuXG5cdGlmIChjb21iaW5hdG9y
IHx8IGNvbWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5hdG9ySW5kZXggPT09IC0xKXtcblx0XHRj
b21iaW5hdG9yID0gY29tYmluYXRvciB8fCAnICc7XG5cdFx0dmFyIGN1cnJlbnRTZXBhcmF0b3Ig
PSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdO1xuXHRcdGlmIChyZXZlcnNlZCAm
JiBjdXJyZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0pXG5cdFx0XHRjdXJyZW50U2VwYXJh
dG9yW2NvbWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJpbmF0b3IgPSByZXZlcnNlQ29tYmluYXRv
cihjb21iaW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4XSA9
IHtjb21iaW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307XG5cdH1cblxuXHR2YXIgY3VycmVu
dFBhcnNlZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRleF1bY29tYmluYXRvcklu
ZGV4XTtcblxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3VycmVudFBhcnNlZC50YWcgPSB0YWdOYW1l
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoaWQpe1xuXHRcdGN1cnJl
bnRQYXJzZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYg
KGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UocmVVbmVzY2Fw
ZSwgJycpO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCkgY3VycmVudFBhcnNl
ZC5jbGFzc0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3VycmVu
dFBhcnNlZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFzc0xpc3QucHVzaChj
bGFzc05hbWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3Nlcy5wdXNoKHtcblx0XHRcdHZhbHVl
OiBjbGFzc05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBlc2Nh
cGVSZWdFeHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCknKVxuXHRcdH0pO1xuXG5cdH0gZWxzZSBp
ZiAocHNldWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVl
IHx8IHBzZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVk
b0NsYXNzVmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpIDog
bnVsbDtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5wc2V1ZG9zKSBjdXJyZW50UGFyc2VkLnBz
ZXVkb3MgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBzZXVkb3MucHVzaCh7XG5cdFx0XHRrZXk6
IHBzZXVkb0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpLFxuXHRcdFx0dmFsdWU6IHBzZXVk
b0NsYXNzVmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9NYXJrZXIubGVuZ3RoID09IDEgPyAnY2xh
c3MnIDogJ2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChhdHRyaWJ1dGVLZXkpe1xu
XHRcdGF0dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtc
blx0XHRhdHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8fCAnJykucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVnZXhwO1xuXG5cdFx0c3dpdGNoIChhdHRy
aWJ1dGVPcGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAg
ICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBicmVh
aztcblx0XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAgZXNj
YXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnfj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxcXFxzKScrIGVzY2FwZVJlZ0V4cChh
dHRyaWJ1dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfD0nIDog
cmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFs
dWUpICsnKC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICAnPScgOiB0ZXN0ID0gZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgPT0gdmFsdWU7XG5cdFx0
XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5c
dFx0XHRcdHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0x
O1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgIT0gdmFsdWU7XG5cdFx0XHR9OyBi
cmVhaztcblx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dHJldHVybiAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRlVmFs
dWUgPT0gJycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0g
ZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0aWYgKCF0ZXN0
KSB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlICYmIHJlZ2V4cC50
ZXN0KHZhbHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMp
IGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuYXR0cmli
dXRlcy5wdXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRlS2V5LFxuXHRcdFx0b3BlcmF0b3I6IGF0
dHJpYnV0ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0dHJpYnV0ZVZhbHVlLFxuXHRcdFx0dGVz
dDogdGVzdFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1cm4gJyc7XG59O1xuXG4vLyBTbGljayBO
U1xuXG52YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnBhcnNlID0gZnVu
Y3Rpb24oZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJzZShleHByZXNzaW9uKTtcbn07XG5cblNs
aWNrLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlz
LlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRz
ICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypc
bi0tLVxubmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlwdGlvbjogVGhlIG5ldywgc3VwZXJmYXN0
IGNzcyBzZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczogU2xpY2suRmluZGVyXG5yZXF1aXJlczog
U2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIGxvY2FsID0ge30s
XG5cdGZlYXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRv
U3RyaW5nO1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVjdGlvblxuXG5sb2NhbC5pc05hdGl2ZUNv
ZGUgPSBmdW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xce1xccypcXFtuYXRpdmUgY29kZVxcXVxc
cypcXH0vKS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9jYWwuaXNYTUwgPSBmdW5jdGlvbihkb2N1
bWVudCl7XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1bWVudC54
bWwpIHx8ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1bWVudF0n
KSB8fFxuXHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQubm9kZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxvY2FsLnNldERvY3VtZW50ID0gZnVuY3Rp
b24oZG9jdW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJndW1lbnRz
IHRvIGRvY3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0aGUgZnVu
Y3Rpb24gcmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7XG5cdGlm
IChub2RlVHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0ZWxzZSBpZiAobm9kZVR5cGUpIGRvY3Vt
ZW50ID0gZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZVxuXHRlbHNlIGlmIChkb2N1bWVu
dC5uYXZpZ2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRvd1xuXHRl
bHNlIHJldHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnRcblxuXHRp
ZiAodGhpcy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjtcblx0dGhpcy5kb2N1bWVudCA9
IGRvY3VtZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRldGVjdGlv
biBvbiB0aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdldFVJRFhNTChyb290KSxcblx0XHRmZWF0
dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5cdFx0ZmVhdHVyZTtcblxuXHRpZiAoZmVh
dHVyZXMpe1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0XHR0aGlzW2ZlYXR1
cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdGZl
YXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9O1xuXG5cdGZlYXR1cmVzLnJvb3Qg
PSByb290O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1bWVudCk7
XG5cblx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5cdD0gZmVhdHVyZXMuc3RhclNlbGVjdHND
bG9zZWRRU0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1lXG5cdD0gZmVhdHVyZXMuYnJva2VuTWl4
ZWRDYXNlUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VCQ05cblx0PSBmZWF0dXJlcy5icm9rZW5D
aGVja2VkUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Fcblx0PSBmZWF0
dXJlcy5pc0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvclxu
XHQ9IGZhbHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Nsb3NlZCwgc3RhclNlbGVjdHNDb21tZW50
cyxcblx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVudHNCeUNs
YXNzTmFtZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyO1xuXG5cdHZhciBzZWxlY3Rl
ZCwgaWQgPSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIgdGVzdE5vZGUgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5IHx8IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDtcblx0dGVzdFJv
b3QuYXBwZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8vIG9uIG5vbi1IVE1MIGRvY3VtZW50cyBp
bm5lckhUTUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2VzbnQgd29yayBwcm9wZXJseVxuXHR0cnkg
e1xuXHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBpZD1cIicraWQrJ1wiPjwvYT4nO1xuXHRc
dGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7
XG5cdH0gY2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQpe1xuXG5c
dFx0dGVzdE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuXHRcdC8vIElFIHJldHVybnMg
Y29tbWVudCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1
bWVudHNcblx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCcn
KSk7XG5cdFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjbG9zZWQgbm9kZXMg
KEVHOlwiPC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRv
Y3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+
Jztcblx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtc
blx0XHRcdHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3Ro
ICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdH0gY2F0Y2gg
KGUpe307XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4gPSBzdGFyU2VsZWN0c0NvbW1l
bnRzIHx8IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBlbGVtZW50cyB3
aXRoIHRoZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBmb3IgZ2V0RWxlbWVudHNCeUlkIGZvciBz
b21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEg
bmFtZT1cIicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysgaWQgKydcIj48L2I+Jztcblx0XHRcdGZl
YXR1cmVzLmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgPT09IHRlc3RO
b2RlLmZpcnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0aWYgKHRlc3ROb2RlLmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIGdldEVsZW1lbnRz
QnlDbGFzc05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2Rl
LmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+PGEgY2xhc3M9XCJiXCI+PC9hPic7XG5c
dFx0XHRcdHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGg7XG5cdFx0
XHRcdHRlc3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InO1xuXHRcdFx0XHRjYWNoZWRH
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
J2InKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBPcGVy
YSA5LjYgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2VzbnQgZGV0ZWN0cyB0aGUgY2xhc3MgaWYg
aXRzIG5vdCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5l
ckhUTUwgPSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNsYXNzPVwiZiBiIGFcIj48L2E+Jztcblx0
XHRcdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04gPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRc
dFx0ZmVhdHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8
IGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRcdH1cblxuXHRcdGlmICh0ZXN0Tm9kZS5x
dWVyeVNlbGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVH
OlwiPC9mb28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxsKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRz
XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztc
blx0XHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XG5cdFx0
XHRcdGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBID0gKHNlbGVjdGVkICYmICEhc2VsZWN0
ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRc
dFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIHF1ZXJ5U2VsZWN0b3JBbGwg
ZG9lc250IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVpcmtzbW9kZVxuXHRcdFx0dHJ5IHtcblx0
XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiTWlYXCI+PC9hPic7XG5cdFx0
XHRcdGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9y
QWxsKCcuTWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBXZWJr
aXQgYW5kIE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlTZWxlY3Rv
ckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxzZWxlY3Q+
PG9wdGlvbiBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cdFx0
XHRcdGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFs
bCgnOmNoZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0
XHQvLyBJRSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09XCJcIiBzZWxl
Y3RvcnMgb24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tl
bkVtcHR5QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9
XCJcIl0nKS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHR9XG5cblx0
XHQvLyBJRTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdldEF0dHJp
YnV0ZSh4KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dFxuXHRcdHRyeSB7XG5cdFx0
XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0aW9uPVwic1wiPjxpbnB1dCBpZD1cImFj
dGlvblwiLz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIgPSAodGVz
dE5vZGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7XG5cdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlvblxuXG5c
dFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8IC8qcm9v
dC5tc01hdGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qu
d2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2Vs
ZWN0b3IpIHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVzU2VsZWN0b3IgdHJvd3MgZXJyb3JzIG9u
IGluY29ycmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVN
YXRjaGVzU2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNrJyk7XG5cdFx0XHRmZWF0dXJlcy5uYXRp
dmVNYXRjaGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHR9XG5cblx0
dHJ5IHtcblx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAxO1xuXHRcdGRlbGV0ZSByb290LnNsaWNr
X2V4cGFuZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MO1xuXHR9IGNh
dGNoIChlKXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDtcblx0fVxuXG5c
dHRlc3RSb290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtcblx0dGVzdE5vZGUgPSBzZWxlY3RlZCA9
IHRlc3RSb290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5nZXRB
dHRyaWJ1dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgJiYgYnJva2VuRm9ybUF0dHJpYnV0
ZUdldHRlcikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmIChtZXRob2QpIHJldHVybiBtZXRob2QuY2Fs
bChub2RlKTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShu
YW1lKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFs
dWUgOiBudWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9
IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRyZXR1cm4gKG1ldGhvZCkgPyBtZXRo
b2QuY2FsbChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9O1xuXG5cdC8vIGhh
c0F0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMuaXNO
YXRpdmVDb2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUp
e1xuXHRcdHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHR9IDogZnVuY3Rp
b24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0
dHJpYnV0ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUuc3BlY2lmaWVkIHx8IG5vZGUu
bm9kZVZhbHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFpbnNcblx0Ly8gRklYTUU6IEFkZCBzcGVj
czogbG9jYWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgeG1sIGFuZCBodG1sIGRv
Y3VtZW50cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlucyA9IHJvb3QgJiYgdGhpcy5pc05hdGl2
ZUNvZGUocm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZlRG9jdW1lbnRDb250YWlucyA9IGRvY3Vt
ZW50ICYmIHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50LmNvbnRhaW5zKTtcblxuXHRmZWF0dXJl
cy5jb250YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMgJiYgbmF0aXZlRG9jdW1lbnRDb250YWlu
cykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dC5jb250YWlu
cyhub2RlKTtcblx0fSA6IChuYXRpdmVSb290Q29udGFpbnMgJiYgIW5hdGl2ZURvY3VtZW50Q29u
dGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0Ly8gSUU4IGRvZXMgbm90IGhh
dmUgLmNvbnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8
ICgoY29udGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogY29u
dGV4dCkuY29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9vdCAmJiByb290LmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0
ID09PSBub2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiAx
Nik7XG5cdH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRpZiAobm9kZSkgZG8ge1xu
XHRcdFx0aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlO1xuXHRcdH0gd2hpbGUgKChu
b2RlID0gbm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdC8v
IGRvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3JlZGl0cyB0byBTaXp6bGUgKGh0dHA6Ly9z
aXp6bGVqcy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3VtZW50U29ydGVyID0gKHJvb3QuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSByZXR1cm4gMDtc
blx0XHRyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEgPT09
IGIgPyAwIDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgnIGluIHJvb3QpID8gZnVuY3Rpb24oYSwg
Yil7XG5cdFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4gMDtc
blx0XHRyZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cdH0gOiAoZG9jdW1l
bnQuY3JlYXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLm93bmVyRG9jdW1l
bnQgfHwgIWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7XG5cdFx0dmFyIGFSYW5nZSA9IGEub3du
ZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2UgPSBiLm93bmVyRG9jdW1lbnQuY3JlYXRl
UmFuZ2UoKTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7XG5cdFx0YVJhbmdlLnNldEVuZChh
LCAwKTtcblx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7XG5cdFx0YlJhbmdlLnNldEVuZChiLCAw
KTtcblx0XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9U
T19FTkQsIGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5cdHJvb3QgPSBudWxsO1xuXG5cdGZvciAo
ZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1
cmVdO1xuXHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxuXG52YXIgcmVTaW1wbGVTZWxlY3RvciA9
IC9eKFsjLl0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5cdHJlRW1wdHlBdHRyaWJ1dGUgPSAvXFxb
LitbKiReXT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FGYWlsRXhwQ2FjaGUgPSB7fTtcblxubG9j
YWwuc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBmaXJzdCl7
XG5cblx0dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChmaXJzdCkgPyBudWxsIDogKGFwcGVuZCB8
fCBbXSk7XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7XG5cdGVsc2UgaWYgKGNvbnRl
eHQubmF2aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVydCB0aGUg
bm9kZSBmcm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRcblx0ZWxzZSBpZiAoIWNvbnRleHQubm9k
ZVR5cGUpIHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1cFxuXG5cdHZhciBwYXJzZWQsIGksIG5v
ZGUsIG5vZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSxcblx0XHRoYXNPdGhl
cnMgPSAhIShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCksXG5cdFx0Y29udGV4dElzRG9jdW1lbnQg
PSAoY29udGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRpZiAodGhpcy5kb2N1bWVudCAhPT0gKGNv
bnRleHRJc0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRleHQub3duZXJEb2N1bWVudCkpIHRoaXMu
c2V0RG9jdW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMgYWxy
ZWFkeSBpbiB0aGUgYXBwZW5kIGFycmF5XG5cdGlmIChoYXNPdGhlcnMpIGZvciAoaSA9IGZvdW5k
Lmxlbmd0aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJRChmb3VuZFtpXSldID0gdHJ1ZTtcblxu
XHQvLyBleHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3Ry
aW5nJyl7IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdcblxuXHRcdC8qPHNpbXBsZS1zZWxlY3Rv
cnMtb3ZlcnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2VsZWN0b3IgPSBleHByZXNzaW9uLm1hdGNo
KHJlU2ltcGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNlbGVj
dG9yKXtcblxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLFxuXHRcdFx0XHRu
YW1lID0gc2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRcdGlmICghc3ltYm9sKXtcblxuXHRcdFx0
XHRpZiAobmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5TdGFyR0VCVE4pIGJyZWFrIHNpbXBsZVNl
bGVjdG9ycztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5h
bWUpO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0
XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdGlmICghKGhhc090
aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5c
dFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJyMnKXtcblxuXHRcdFx0XHRp
ZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVhayBzaW1w
bGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG5hbWUp
O1xuXHRcdFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3VuZDtcblx0XHRcdFx0aWYgKHRoaXMuaWRH
ZXRzTmFtZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IG5hbWUp
IGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZSB8
fCBudWxsO1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChu
b2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAn
Licpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250ZXh0Lmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4dC5xdWVy
eVNlbGVjdG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAoY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0
XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTtcblx0XHRcdFx0
XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRcdGZvciAoaSA9
IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYg
dW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRc
dH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2hDbGFzcyA9IG5ldyBSZWdF
eHAoJyhefFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4cChuYW1lKSArJyhcXFxcc3wkKScpO1xu
XHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRc
dFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRjbGFz
c05hbWUgPSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRcdGlmICghKGNsYXNzTmFtZSAmJiBt
YXRjaENsYXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aWYgKGZp
cnN0KSByZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVz
W3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRc
dFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5k
KTtcblx0XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8q
PC9zaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cblx0XHQvKjxxdWVyeS1zZWxlY3Rvci1v
dmVycmlkZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwpe1xuXG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnRcblx0XHRcdFx0fHwgcXNhRmFp
bEV4cENhY2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8vVE9ETzogb25seSBza2lwIHdoZW4gZXhw
cmVzc2lvbiBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5cdFx0XHRcdHx8IHRoaXMuYnJva2VuTWl4
ZWRDYXNlUVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhwcmVzc2lv
bi5pbmRleE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkVtcHR5
QXR0cmlidXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSlcblx0XHRc
dFx0fHwgKCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0IHdoZW4gIWNvbnRleHRJc0RvY3VtZW50
IGFuZC4uLlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgaW4g
dGhlIHNlbGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5IGZpeCBu
b24tZG9jdW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0b3JzXG5c
dFx0XHRcdFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcsJykgPiAtMVxuXHRcdFx0XHQpXG5cdFx0
XHRcdHx8IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkgYnJlYWsgcXVlcnlTZWxlY3Rvcjtcblxu
XHRcdFx0dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250ZXh0LCBj
dXJyZW50SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0Ly8gbm9u
LWRvY3VtZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8gY3JlZGl0cyB0byBBbmRyZXcgRHVwb250
XG5cdFx0XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2xpY2tp
ZCA9ICdzbGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2xp
Y2tpZCk7XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMnICsgc2xpY2tpZCArICcgJyArIF9leHBy
ZXNzaW9uO1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1c
blxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gY29udGV4dC5xdWVyeVNl
bGVjdG9yKF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRcdFx0XHRlbHNlIG5vZGVzID0gY29udGV4
dC5xdWVyeVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRc
dFx0XHRxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxO1xuXHRcdFx0XHRicmVhayBxdWVy
eVNlbGVjdG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1
bWVudCl7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkgX2NvbnRleHQuc2V0QXR0cmlidXRlKCdp
ZCcsIGN1cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBfY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUo
J2lkJyk7XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9
XG5cblx0XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAwOyBub2Rl
ID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA+ICdAJyAmJiAhKGhh
c090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7
XG5cdFx0XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVz
aChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5k
KTtcblx0XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvcXVlcnktc2VsZWN0b3It
b3ZlcnJpZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVzc2lvbik7
XG5cdFx0aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhw
cmVzc2lvbiA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVzc2lvblxuXHRcdHJldHVybiBm
b3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lvbiBpcyBh
IHBhcnNlZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQgPSBleHByZXNzaW9uO1xuXHR9IGVsc2Ug
aWYgKHRoaXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4dCwgZXhw
cmVzc2lvbikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZVxuXHRcdChmb3VuZCkgPyBmb3VuZC5w
dXNoKGV4cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNzaW9uO1xuXHRcdHJldHVybiBmb3VuZDtc
blx0fSBlbHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdC8q
PHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGNh
Y2hlIGVsZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9yc1xuXG5cdHRoaXMucG9zTlRIID0ge307
XG5cdHRoaXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGUgPSB7fTtcblx0dGhp
cy5wb3NOVEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8q
PC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYgYXBwZW5kIGlzIG51bGwgYW5kIHRoZXJl
IGlzIG9ubHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2UgcHVzaEFy
cmF5LCBlbHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVzaCA9ICghaGFzT3RoZXJzICYmIChmaXJz
dCB8fCAocGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNlZC5leHByZXNzaW9uc1swXS5sZW5ndGgg
PT0gMSkpKSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5wdXNoVUlEO1xuXG5cdGlmIChmb3VuZCA9
PSBudWxsKSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1bHQgZW5naW5lXG5cblx0dmFyIGosIG0s
IG47XG5cdHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNzaW9uLCBj
dXJyZW50Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucztcblxu
XHRzZWFyY2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ld
KTsgaSsrKSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9IGN1cnJlbnRFeHByZXNzaW9uW2pdKTsg
aisrKXtcblxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJpdC5jb21i
aW5hdG9yO1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNoO1xuXG5c
dFx0dGFnICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gY3VycmVudEJpdC50YWcgOiBj
dXJyZW50Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRcdGlkICAgICAgICAgPSBjdXJyZW50Qml0
LmlkO1xuXHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNzTGlzdDtcblx0XHRjbGFzc2Vz
ICAgID0gY3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0dHJpYnV0ZXMgPSBjdXJyZW50Qml0LmF0
dHJpYnV0ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJlbnRCaXQucHNldWRvcztcblx0XHRsYXN0
Qml0ICAgID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggLSAxKSk7XG5cblx0XHR0
aGlzLmJpdFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChsYXN0Qml0KXtcblx0XHRcdHRoaXMudW5p
cXVlcyA9IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5kID0gZm91bmQ7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0dGhpcy5mb3VuZCA9IFtdO1xuXHRcdH1c
blxuXHRcdGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNbY29tYmluYXRvcl0oY29udGV4dCwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdGlm
IChmaXJzdCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCkgZm9yIChtID0gMCwgbiA9IGN1cnJl
bnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRcdFx0XHR0aGlzW2NvbWJpbmF0b3JdKGN1
cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xh
c3NMaXN0KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdFx0
fSBlbHNlIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKSB0
aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9XG5cblx0XHRjdXJyZW50SXRlbXMgPSB0
aGlzLmZvdW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5vZGVzIGlu
IGFwcGVuZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuXG5cdGlmIChoYXNP
dGhlcnMgfHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGggPiAxKSkgdGhpcy5zb3J0KGZvdW5k
KTtcblxuXHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5kO1xufTtc
blxuLy8gVXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5sb2NhbC51aWRrID0gJ3NsaWNrLXVuaXF1
ZWlkJztcblxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHZhciB1aWQgPSBu
b2RlLmdldEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRpZiAoIXVpZCl7XG5cdFx0dWlkID0gdGhp
cy51aWR4Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpO1xuXHR9XG5c
dHJldHVybiB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURIVE1MID0gZnVuY3Rpb24obm9kZSl7XG5c
dHJldHVybiBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0aGlzLnVp
ZHgrKyk7XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1bWVudFNv
cnRlciBtZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXtcblx0aWYgKCF0
aGlzLmRvY3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0cztcblx0cmVzdWx0cy5zb3J0KHRoaXMu
ZG9jdW1lbnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qPHBzZXVkby1zZWxl
Y3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5jYWNoZU5USCA9IHt9
O1xuXG5sb2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxkKik/KFthLXpdKyk/KFsrLV1cXGQrKT8k
LztcblxubG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0dmFy
IHBhcnNlZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgpO1xuXHRpZiAoIXBhcnNlZCkg
cmV0dXJuIGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBhcnNlZFsyXSB8fCBmYWxzZTtcblx0dmFy
IGEgPSBwYXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0gJy0nKSBhID0gLTE7XG5cdHZhciBiID0g
K3BhcnNlZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRcdChzcGVjaWFsID09ICduJylcdD8ge2E6
IGEsIGI6IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2RkJylcdD8ge2E6IDIsIGI6IDF9IDpcblx0
XHQoc3BlY2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBhfTtcblxu
XHRyZXR1cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFyc2VkKTtcbn07XG5cbmxvY2Fs
LmNyZWF0ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlvbnMsIG9m
VHlwZSl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0dmFyIHVpZCA9
IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0pe1xuXHRc
dFx0dmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1
cm4gZmFsc2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7XG5cdFx0
XHRpZiAob2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0
XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkgY29udGlu
dWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsr
O1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fSBlbHNlIHtc
blx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtc
blx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5c
dFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dGFyZ3VtZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLmNhY2hl
TlRIW2FyZ3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpO1xuXHRcdGlm
ICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIGEgPSBwYXJzZWQuYSwgYiA9IHBhcnNl
ZC5iLCBwb3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtcblx0XHRpZiAoYSA9PSAwKSByZXR1cm4g
YiA9PSBwb3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRcdGlmIChwb3MgPCBiKSByZXR1cm4gZmFs
c2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwgcG9zKSByZXR1cm4gZmFsc2U7XG5cdFx0
fVxuXHRcdHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDtcblx0fTtcbn07XG5cbi8qPC9udGgt
cHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLnB1c2hB
cnJheSA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3Mpe1xuXHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG59O1xuXG5sb2NhbC5w
dXNoVUlEID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0aWYgKCF0aGlzLnVuaXF1
ZXNbdWlkXSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHR0
aGlzLmZvdW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5cbmxvY2FsLm1hdGNoTm9kZSA9IGZ1bmN0
aW9uKG5vZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5u
YXRpdmVNYXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXRp
dmVNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cXFsoW149XSsp
PVxccyooW14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQxPVwiJDJcIl0nKSk7XG5cdFx0fSBjYXRj
aCAobWF0Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2Uo
c2VsZWN0b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7XG5cblx0Ly8gc2ltcGxlIChz
aW5nbGUpIHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnMs
IHNpbXBsZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50RXhwcmVzc2lvbjtcblx0Zm9yIChpID0g
MDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspe1xuXHRcdGlmIChj
dXJyZW50RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5cdFx0XHR2YXIgZXhwID0gY3VycmVudEV4
cHJlc3Npb25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsICh0aGlzLmlz
WE1MRG9jdW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcudG9VcHBlckNhc2UoKSwgZXhwLmlkLCBl
eHAuY2xhc3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5wc2V1ZG9zKSkgcmV0dXJuIHRydWU7XG5c
dFx0XHRzaW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNpbXBsZUV4cENv
dW50ZXIgPT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBub2RlcyA9IHRo
aXMuc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07XG5cdGZvciAoaSA9IDA7IGl0
ZW0gPSBub2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0cnVlO1xu
XHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2FsLm1hdGNoUHNldWRvID0gZnVuY3Rpb24o
bm9kZSwgbmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86JyArIG5h
bWU7XG5cdGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1cm4gdGhpc1twc2V1ZG9OYW1lXShub2Rl
LCBhcmd1bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBu
YW1lKTtcblx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUgOiAhIWF0
dHJpYnV0ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRhZyl7XG5cdFx0dmFy
IG5vZGVOYW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDogbm9kZS5u
b2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0YWcgPT0gJyonKXtcblx0XHRcdGlmIChu
b2RlTmFtZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9kZXMgYW5k
IGNsb3NlZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAobm9kZU5hbWUgIT0gdGFnKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlkICYmIG5vZGUuZ2V0QXR0cmlidXRl
KCdpZCcpICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIGksIHBhcnQsIGNscztcblx0aWYg
KGNsYXNzZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3RoOyBpLS07KXtcblx0XHRjbHMgPSB0aGlz
LmdldEF0dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0XHRpZiAoIShjbHMgJiYgY2xhc3Nlc1tp
XS5yZWdleHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVz
KSBmb3IgKGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IGF0dHJpYnV0
ZXNbaV07XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0QXR0cmli
dXRlKG5vZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkp
KSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVkb3MpIGZvciAoaSA9IHBzZXVkb3MubGVu
Z3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tpXTtcblx0XHRpZiAoIXRoaXMubWF0Y2hQ
c2V1ZG8obm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0
cmV0dXJuIHRydWU7XG59O1xuXG52YXIgY29tYmluYXRvcnMgPSB7XG5cblx0JyAnOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3Qp
eyAvLyBhbGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxuXG5cdFx0dmFyIGksIGl0ZW0sIGNoaWxk
cmVuO1xuXG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpe1xuXHRcdFx0Z2V0QnlJZDogaWYg
KGlkKXtcblx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xu
XHRcdFx0XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1lICYmIGl0
ZW0gJiYgaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkpe1xuXHRc
dFx0XHRcdC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIHdpdGggdGhhdCBuYW1l
IG9yIGlkIGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmVzIGp1c3Qgb25lIGl0IHdp
bGwgcmV0dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9uXG5cdFx0
XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlbikg
cmV0dXJuO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2NoaWxkcmVu
XTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspe1xuXHRcdFx0
XHRcdFx0dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTtcblx0XHRcdFx0
XHRcdGlmIChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBpZCl7XG5cdFx0XHRcdFx0XHRc
dHRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXRlbSl7XG5cdFx0XHRcdFx0
Ly8gaWYgdGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ugd2lsbCB0
cnkgR0VCVE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsXG5cdFx0XHRcdFx0aWYgKHRoaXMu
Y29udGFpbnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuO1xuXHRcdFx0XHRcdGVsc2UgYnJlYWsg
Z2V0QnlJZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2RlICYmICF0
aGlzLmNvbnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47XG5cdFx0XHRcdHRoaXMucHVzaChpdGVt
LCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1
cm47XG5cdFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBpZiAoY2xhc3NlcyAmJiBub2RlLmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRjaGlsZHJl
biA9IG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcpKTtcblx0
XHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlDbGFz
cztcblx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2go
aXRlbSwgdGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVy
bjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6IHtcblx0XHRcdGNoaWxkcmVuID0gbm9k
ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hp
bGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5cdFx0XHRpZiAoIXRoaXMuYnJva2VuU3Rh
ckdFQlROKSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2kr
K107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyk7XG5cdFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBjaGlsZHJlblxuXHRcdGlmICgobm9k
ZSA9IG5vZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEp
IHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKTtcblx0fSxcblxuXHQnKyc6
IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAv
LyBuZXh0IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYg
KG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5c
blx0J14nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKXsgLy8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdGlm
IChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1sn
Y29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyk7XG5cdFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3Ncblx0XHR3aGlsZSAoKG5v
ZGUgPSBub2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBj
b250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0
aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9
IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcrKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcgYW5kIHBy
ZXZpb3VzIHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiErJ10o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0
J35+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyl7IC8vIG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0dGhpc1snY29t
YmluYXRvcjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdFx0dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMgdXAgdG8g
ZG9jdW1lbnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAobm9kZSAh
PT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgcGFyZW50IChvbmUgbGV2
ZWwpXG5cdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRpZiAobm9kZSAhPT0gdGhpcy5k
b2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3MpO1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nXG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0
XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnIV4nOiBmdW5jdGlvbihub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbGFzdCBjaGlsZFxuXHRc
dG5vZGUgPSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5u
b2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0JyF+
JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
IC8vIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1Np
YmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0
dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1
aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHR9XG5cdH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxbJ2NvbWJp
bmF0b3I6JyArIGNdID0gY29tYmluYXRvcnNbY107XG5cbnZhciBwc2V1ZG9zID0ge1xuXG5cdC8q
PHBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHknOiBmdW5jdGlvbihub2RlKXtcblx0XHR2
YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0cmV0dXJuICEoY2hpbGQgJiYgY2hpbGQu
bm9kZVR5cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8
ICcnKS5sZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1bmN0aW9uKG5vZGUsIGV4cHJlc3Npb24p
e1xuXHRcdHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7XG5cdH0sXG5c
blx0J2NvbnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7XG5cdFx0cmV0dXJuIChub2RlLmlu
bmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5pbmRleE9mKHRleHQpID4gLTE7XG5c
dH0sXG5cblx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2Rl
ID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4g
ZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3QtY2hpbGQnOiBmdW5jdGlv
bihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5c
dCdvbmx5LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlO1xuXHRc
dHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZVR5cGUg
PT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5l
eHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZh
bHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPG50aC1wc2V1ZG8tc2VsZWN0b3Jz
PiovXG5cblx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcs
ICduZXh0U2libGluZycsICdwb3NOVEgnKSxcblxuXHQnbnRoLWxhc3QtY2hpbGQnOiBsb2NhbC5j
cmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRITGFz
dCcpLFxuXG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGls
ZCcsICduZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSksXG5cblx0J250aC1sYXN0LW9m
LXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxp
bmcnLCAncG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxuXHQnaW5kZXgnOiBmdW5jdGlvbihub2Rl
LCBpbmRleCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnJyAr
IChpbmRleCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJl
dHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuJyk7XG5cdH0sXG5cblx0J29k
ZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10o
bm9kZSwgJzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxu
XHQvKjxvZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZmlyc3Qtb2YtdHlwZSc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hp
bGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBu
b2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0
LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVO
YW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2Rl
TmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxu
XG5cdCdvbmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGUs
IG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZp
b3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7
XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxp
bmcpKSBpZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJl
dHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxu
XHQvLyBjdXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdjaGVja2VkJzogZnVu
Y3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVjdGVkO1xu
XHR9LFxuXG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzLmlzSFRN
TERvY3VtZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSAmJiAobm9k
ZS5ocmVmIHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCAndGFiaW5kZXgn
KSk7XG5cdH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUg
PT09IHRoaXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVjdGVkJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0cmV0dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKjwvcHNldWRvLXNlbGVjdG9ycz4q
L1xufTtcblxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBwXSA9IHBz
ZXVkb3NbcF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9kc1xuXG52YXIgYXR0cmlidXRlR2V0dGVy
cyA9IGxvY2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5cblx0J2Zvcic6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlzLmdldEF0
dHJpYnV0ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biAoJ2hyZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6IHRoaXMu
Z2V0QXR0cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHlsZS5jc3NUZXh0IDogdGhpcy5nZXRBdHRy
aWJ1dGUoJ3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmluZGV4JzogZnVuY3Rpb24oKXtcblx0XHR2
YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTtcblx0
XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0
cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9LFxuXG5cdCd0eXBlJzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcblx0fSxcblxuXHQnbWF4
bGVuZ3RoJzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0
cmlidXRlTm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0
dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtc
blx0fVxuXG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0ZUdldHRl
cnMubWF4TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5ndGg7XG5cbi8vIFNsaWNrXG5c
bnZhciBTbGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGljay52
ZXJzaW9uID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmluZGVyXG5cblNsaWNrLnNlYXJjaCA9IGZ1
bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7XG5cdHJldHVybiBsb2NhbC5zZWFy
Y2goY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtcbn07XG5cblNsaWNrLmZpbmQgPSBmdW5j
dGlvbihjb250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0
LCBleHByZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5cbi8vIFNsaWNrIGNvbnRhaW5tZW50IGNo
ZWNrZXJcblxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlvbihjb250YWluZXIsIG5vZGUpe1xuXHRs
b2NhbC5zZXREb2N1bWVudChjb250YWluZXIpO1xuXHRyZXR1cm4gbG9jYWwuY29udGFpbnMoY29u
dGFpbmVyLCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBnZXR0ZXJcblxuU2xpY2su
Z2V0QXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxu
U2xpY2suaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERv
Y3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFzQXR0cmlidXRlKG5vZGUsIG5hbWUpO1xu
fTtcblxuLy8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5vZGUsIHNl
bGVjdG9yKXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTtcblx0aWYg
KCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdGxvY2FsLnNl
dERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNlbGVjdG9y
KTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVBdHRy
aWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxvY2FsLmF0dHJpYnV0ZUdldHRl
cnNbbmFtZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBBdHRyaWJ1
dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0dXJuIGxvY2FsLmF0dHJpYnV0ZUdldHRl
cnNbbmFtZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8gYWNjZXNzb3JcblxuU2xpY2suZGVmaW5l
UHNldWRvID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbFsncHNldWRvOicgKyBuYW1lXSA9
IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gZm4uY2FsbChub2RlLCBhcmd1
bWVudCk7XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9va3VwUHNldWRvID0g
ZnVuY3Rpb24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBuYW1lXTtc
blx0aWYgKHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gcHNl
dWRvLmNhbGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8v
IFNsaWNrIG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGljay5vdmVycmlkZSA9IGZ1bmN0aW9uKHJl
Z2V4cCwgZm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdleHAsIGZuKTtcblx0cmV0dXJuIHRoaXM7
XG59O1xuXG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1MO1xuXG5TbGljay51aWRPZiA9IGZ1bmN0
aW9uKG5vZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChub2RlKTtcbn07XG5cbmlmICgh
dGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4q
Lyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpT
PiovdGhpcyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudFxuXG5kZXNjcmlwdGlvbjogT25l
IG9mIHRoZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBNb29Ub29scy4gQ29udGFpbnMgdGhlIGRv
bGxhciBmdW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rpb24sIGFuZCBhbiBoYW5kZnVsIG9mIGNy
b3NzLWJyb3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0byBsZXQgeW91IGVhc2lseSB3b3JrIHdp
dGggSFRNTCBFbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBbV2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE9iamVjdCwg
TnVtYmVyLCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl1cblxucHJvdmlkZXM6IFtFbGVtZW50
LCBFbGVtZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0b3JzXVxuXG4uLi5cbiovXG5cbnZhciBF
bGVtZW50ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdHZhciBrb25z
dHJ1Y3RvciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107XG5cdGlmIChrb25zdHJ1Y3Rvcikg
cmV0dXJuIGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYgKHR5cGVvZiB0YWcgIT0gJ3N0cmluZycp
IHJldHVybiBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7XG5cblx0aWYgKCFwcm9wcykgcHJv
cHMgPSB7fTtcblxuXHRpZiAoISgvXltcXHctXSskLykudGVzdCh0YWcpKXtcblx0XHR2YXIgcGFy
c2VkID0gU2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9uc1swXVswXTtcblx0XHR0YWcgPSAocGFy
c2VkLnRhZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnO1xuXHRcdGlmIChwYXJzZWQuaWQg
JiYgcHJvcHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQuaWQ7XG5cblx0XHR2YXIgYXR0
cmlidXRlcyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRcdGlmIChhdHRyaWJ1dGVzKSBmb3IgKHZh
ciBhdHRyLCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYgKHByb3BzW2F0dHIua2V5XSAhPSBudWxs
KSBjb250aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJh
dG9yID09ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTtcblx0XHRcdGVsc2UgaWYg
KCFhdHRyLnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVlO1xu
XHRcdH1cblxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0ICYmIHByb3BzWydjbGFzcyddID09IG51
bGwpIHByb3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNzTGlzdC5qb2luKCcgJyk7XG5cdH1cblxu
XHRyZXR1cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTtcbn07XG5cblxuaWYgKEJy
b3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVtZW50LnBy
b3RvdHlwZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWlyZSB0aGUgd3JhcHBpbmcuXG5cdEVsZW1l
bnQucHJvdG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXtcblx0XHRyZXR1
cm4gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGZpcmVFdmVudC5jYWxsKHRo
aXMsIHR5cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShFbGVtZW50LnByb3RvdHlwZS5maXJlRXZl
bnQpO1xufVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVsZW1lbnQpLm1pcnJvcihmdW5jdGlvbihu
YW1lKXtcblx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuO1xuXG5cdHZhciBvYmog
PSB7fTtcblx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdLCBh
cmdzID0gYXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXNbaV0s
IHJlc3VsdCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3Mp
O1xuXHRcdFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1l
bnQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50cykgPyBuZXcgRWxlbWVudHMocmVzdWx0
cykgOiByZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRzLmltcGxlbWVudChvYmopO1xufSk7XG5c
bmlmICghQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wYXJlbnQgPSBPYmplY3Q7XG5cblx0
RWxlbWVudC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25zdHJ1Y3Rvcic6IEVsZW1lbnQsXG5cdFx0
JyRmYW1pbHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50JykuaGlkZSgpXG5cdH07XG5cblx0
RWxlbWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0XHRFbGVtZW50LlByb3Rv
dHlwZVtuYW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5cbkVsZW1lbnQuQ29uc3RydWN0b3JzID0g
e307XG5cblxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9uKCl7XG5c
dHZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge1xuXHRcdHByb3BlcnRpZXM6IFR5
cGUuaXNPYmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlvbihvYmope1xuXHRcdFx0cmV0dXJuIChv
YmogIT0gbnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgcHJvcHMgPSBwYXJhbXMucHJvcGVy
dGllcyB8fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0gZG9jdW1l
bnQuaWQocGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxvYWQgPSBwcm9wcy5vbmxvYWQgfHwgZnVu
Y3Rpb24oKXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2FkO1xuXHRwcm9wcy5pZCA9IHByb3BzLm5h
bWUgPSBbcHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwgaWZyYW1l
Lm5hbWUpIDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTtcblx0aWZyYW1l
ID0gbmV3IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUnLCBwcm9wcyk7XG5cblx0dmFyIG9uTG9h
ZCA9IGZ1bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwoaWZyYW1lLmNvbnRlbnRXaW5kb3cpO1xu
XHR9O1xuXG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7XG5cdGVsc2Ug
aWZyYW1lLmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcblx0cmV0dXJuIGlmcmFtZTtcbn0p
O1xuXG52YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMpe1xuXHRp
ZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2YXIgdW5pcXVlcyA9IHt9LCBub2RlO1xu
XHRcdGZvciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0dmFyIHVpZCA9
IFNsaWNrLnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1bmlxdWVzW3VpZF0pe1xuXHRcdFx0XHR1
bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5c
dFx0fVxuXHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTtcbkVsZW1l
bnRzLnBhcmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50cykuaW1w
bGVtZW50KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlciwgYmluZCl7XG5cdFx0aWYgKCFm
aWx0ZXIpIHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVy
KHRoaXMsICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVtKXtcblx0
XHRcdHJldHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5cdFx0fSA6IGZpbHRlciwgYmluZCkpO1xu
XHR9LnByb3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsZW5ndGggPSB0
aGlzLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xu
XHRcdFx0aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0gaXRlbTtcblx0XHR9XG5cdFx0cmV0dXJu
ICh0aGlzLmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHVuc2hpZnQ6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBh
cmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQu
aWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0pO1xuXHRc
dH1cblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywgaXRlbXMp
O1xuXHR9LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG5ld0Vs
ZW1lbnRzID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJn
dW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3VtZW50c1tp
XTtcblx0XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMuYXBwZW5k
KGl0ZW0pO1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRy
ZXR1cm4gbmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGFwcGVuZDogZnVuY3Rpb24o
Y29sbGVjdGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsg
aSA8IGw7IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LnByb3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR3aGlsZSAodGhpcy5s
ZW5ndGgpIGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LnByb3RlY3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG4vLyBGRiwgSUVcbnZhciBz
cGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBvYmplY3QgPSB7JzAnOiAwLCAnMSc6IDEs
IGxlbmd0aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVjdCwgMSwgMSk7XG5pZiAob2JqZWN0WzFd
ID09IDEpIEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNlJywgZnVuY3Rpb24oKXtcblx0dmFyIGxl
bmd0aCA9IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzW2xl
bmd0aC0tXTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJvdGVjdCgpKTtcblxuQXJyYXkuZm9yRWFj
aE1ldGhvZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xuXHRFbGVtZW50cy5pbXBsZW1lbnQobmFt
ZSwgbWV0aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3IoRWxlbWVudHMpO1xuXG4vKjxsdElFOD4q
L1xudmFyIGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtcbnRyeSB7XG5cdGNyZWF0ZUVsZW1lbnRB
Y2NlcHRzSFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aW5wdXQgbmFtZT14PicpLm5h
bWUgPT0gJ3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFyIGVzY2FwZVF1b3RlcyA9IGZ1bmN0aW9u
KGh0bWwpe1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBs
YWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0SUU4PiovXG5cbi8qPGx0SUU5PiovXG4v
LyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNo
YW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2Lmlu
bmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYu
aW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9s
dElFOT4qL1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld0VsZW1lbnQ6IGZ1bmN0aW9u
KHRhZywgcHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5cdFx0XHRpZiAocHJvcHMuY2hlY2tlZCAh
PSBudWxsKSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cdFx0XHRpZiAo
KHByb3BzLnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09ICdyYWRpbycpICYmIHBy
b3BzLnZhbHVlID09IG51bGwpIHByb3BzLnZhbHVlID0gJ29uJztcblx0XHRcdC8qPGx0SUU5Piov
IC8vIElFIG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBiZWZvcmUgY2hhbmdpbmcgY29udGVudCBv
ZiBzdHlsZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNoYW5nZVN0eWxlSFRNTCAmJiB0YWcgPT0g
J3N0eWxlJyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdzdHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0eXBlJywg
J3RleHQvY3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSBkZWxldGUgcHJvcHMudHlwZTtc
blx0XHRcdFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpO1xuXHRcdFx0
fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxsdElFOD4qLy8vIEZpeCBmb3IgcmVhZG9u
bHkgbmFtZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOFxuXHRcdFx0aWYgKGNyZWF0ZUVs
ZW1lbnRBY2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9ICc8JyArIHRhZztcblx0XHRcdFx0aWYg
KHByb3BzLm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLm5hbWUp
ICsgJ1wiJztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIHRhZyArPSAnIHR5cGU9XCInICsgZXNj
YXBlUXVvdGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0XHRcdFx0dGFnICs9ICc+Jztcblx0XHRc
dFx0ZGVsZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0
fVxuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlkKHRoaXMuY3Jl
YXRlRWxlbWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4oZnVu
Y3Rpb24oKXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtcblNsaWNrLnVpZE9mKGRvY3VtZW50KTtc
blxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdUZXh0Tm9kZTogZnVuY3Rpb24odGV4dCl7
XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdH0sXG5cblx0Z2V0RG9j
dW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0V2luZG93
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndpbmRvdztcblx0fSxcblxuXHRpZDogKGZ1
bmN0aW9uKCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5cblx0XHRcdHN0cmluZzogZnVuY3Rpb24o
aWQsIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBTbGljay5maW5kKGRvYywgJyMnICsgaWQu
cmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0XHRcdFx0cmV0dXJuIChpZCkgPyB0eXBl
cy5lbGVtZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0XHRcdH0sXG5cblx0XHRcdGVsZW1lbnQ6
IGZ1bmN0aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRTbGljay51aWRPZihlbCk7XG5cdFx0XHRc
dGlmICghbm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQpJC9pKS50
ZXN0KGVsLnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIgZmlyZUV2ZW50ID0gZWwuZmlyZUV2ZW50
O1xuXHRcdFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBpbiBJRTcsIG9yIGVsc2UgY3Jhc2hcblx0
XHRcdFx0XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0XHRc
dFx0cmV0dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0
XHRPYmplY3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3RvdHlwZSk7XG5cdFx0XHRcdH1cblx0XHRc
dFx0cmV0dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0b2JqZWN0OiBmdW5jdGlvbihvYmosIG5v
Y2FzaCwgZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0VsZW1lbnQpIHJldHVybiB0eXBlcy5lbGVt
ZW50KG9iai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5c
dFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4dG5vZGUgPSB0eXBlcy53aGl0ZXNwYWNl
ID0gdHlwZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQgPSBmdW5jdGlvbih6ZXJvKXtcblx0XHRc
dHJldHVybiB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWwsIG5vY2FzaCwg
ZG9jKXtcblx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5ICYmIGVsLnVuaXF1ZU51bWJlcikgcmV0
dXJuIGVsO1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YoZWwpO1xuXHRcdFx0cmV0dXJuICh0eXBl
c1t0eXBlXSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNoLCBkb2MgfHwgZG9jdW1lbnQpIDogbnVs
bDtcblx0XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlmICh3aW5kb3cuJCA9PSBudWxsKSBXaW5k
b3cuaW1wbGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5jKXtcblx0cmV0dXJuIGRvY3VtZW50Lmlk
KGVsLCBuYywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxuV2luZG93LmltcGxlbWVudCh7XG5cblx0
Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQ7XG5cdH0s
XG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0p
O1xuXG5bRG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEVs
ZW1lbnRzOiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gU2xpY2suc2VhcmNoKHRo
aXMsIGV4cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudDogZnVu
Y3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhp
cywgZXhwcmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52YXIgY29udGFpbnMgPSB7Y29udGFpbnM6
IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xpY2suY29udGFpbnModGhpcywgZWxlbWVu
dCk7XG59fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlucykgRG9jdW1lbnQuaW1wbGVtZW50KGNv
bnRhaW5zKTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY29udGFpbnMpIEVs
ZW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5cbi8vIHRyZWUgd2Fsa2luZ1xuXG52YXIg
aW5qZWN0Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNvbWJpbmF0b3Ipe1xuXHRp
ZiAoIWV4cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yO1xuXG5cdGV4cHJlc3Npb24gPSBPYmpl
Y3QuY2xvbmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpO1xuXG5cdHZhciBleHByZXNzaW9ucyA9
IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSBleHByZXNzaW9ucy5sZW5n
dGg7IGktLTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0uY29tYmluYXRvciA9IGNvbWJpbmF0b3I7
XG5cblx0cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldE5l
eHQ6ICd+Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5cdGdldFBhcmVudDogJyEnXG59LCBmdW5j
dGlvbihjb21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1
bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5qZWN0Q29t
YmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbk9iamVjdC5m
b3JFYWNoKHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRnZXRBbGxQcmV2aW91czogJyF+Jyxcblx0
Z2V0U2libGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVuOiAnPicsXG5cdGdldFBhcmVudHM6ICch
J1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1lbnQo
bWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50
cyhpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtc
blxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZpcnN0OiBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJp
bmF0b3IoZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywg
aW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKS5nZXRMYXN0KCkpO1xuXHR9LFxuXG5c
dGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50Lndp
bmRvdztcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cy5vd25lckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbihpZCl7
XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcnICsgaWQp
LnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xuXHR9LFxuXG5cdG1hdGNoOiBmdW5jdGlv
bihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0Y2godGhp
cywgZXhwcmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxuXG5pZiAod2luZG93LiQkID09IG51bGwp
IFdpbmRvdy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRpZiAoYXJndW1l
bnRzLmxlbmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9mIHNlbGVjdG9yID09ICdzdHJpbmcnKSBy
ZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHNlbGVjdG9yLCBuZXcgRWxlbWVudHMp
O1xuXHRcdGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBF
bGVtZW50cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJuIG5ldyBFbGVtZW50cyhhcmd1bWVudHMp
O1xufSk7XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5zZXJ0ZXJzID0ge1xuXG5cdGJlZm9yZTog
ZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVs
ZW1lbnQpO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0
XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVu
dC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2libGluZyk7XG5cdH0sXG5cblx0
Ym90dG9tOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50LmFwcGVuZENo
aWxkKGNvbnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7
XG5cdFx0ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENoaWxkKTtc
blx0fVxuXG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTtcblxuXG5c
bi8vIGdldFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxudmFyIHByb3BlcnR5R2V0dGVycyA9IHt9
LCBwcm9wZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJvcGVydGllc1xuXG52YXIgcHJvcGVydGll
cyA9IHt9O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBlJywgJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1
ZScsICdhY2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAnY2VsbFNwYWNpbmcnLCAnY29sU3Bhbics
XG5cdCdmcmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCdcbl0sIGZ1
bmN0aW9uKHByb3BlcnR5KXtcblx0cHJvcGVydGllc1twcm9wZXJ0eS50b0xvd2VyQ2FzZSgpXSA9
IHByb3BlcnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRtbCA9ICdpbm5lckhUTUwnO1xucHJvcGVy
dGllcy50ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnRleHRDb250ZW50ID09
IG51bGwpID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVudCc7XG5cbk9iamVjdC5mb3JFYWNoKHBy
b3BlcnRpZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5cdHByb3BlcnR5U2V0dGVyc1trZXldID0g
ZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbcmVhbF0gPSB2YWx1ZTtcblx0fTtcblx0
cHJvcGVydHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZVty
ZWFsXTtcblx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xucHJvcGVydHlTZXR0ZXJzLnRleHQgPSAo
ZnVuY3Rpb24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRpZiAobm9k
ZS5nZXQoJ3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpO1xuXHRcdGVs
c2Ugbm9kZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7XG5cdH07XG59KShwcm9wZXJ0eVNldHRl
cnMudGV4dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRlcil7XG5c
dHJldHVybiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUuZ2V0KCd0YWcnKSA9PSAn
c3R5bGUnKSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUpO1xuXHR9O1xufSkocHJvcGVy
dHlHZXR0ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5cbi8vIEJvb2xlYW5zXG5cbnZhciBib29s
cyA9IFtcblx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lzbWFwJywgJ2RlY2xhcmUnLCAnbm9zaGFk
ZScsICdjaGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxlJywgJ3Nl
bGVjdGVkJywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywgJ2F1dG9m
b2N1cycsICdjb250cm9scycsICdhdXRvcGxheScsXG5cdCdsb29wJ1xuXTtcblxudmFyIGJvb2xl
YW5zID0ge307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBmdW5jdGlvbihib29sKXtcblx0dmFyIGxv
d2VyID0gYm9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29sZWFuc1tsb3dlcl0gPSBib29sO1xuXHRw
cm9wZXJ0eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVb
Ym9vbF0gPSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0gZnVuY3Rp
b24obm9kZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29sXTtcblx0fTtcbn0pO1xuXG4vLyBTcGVj
aWFsIGNhc2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7XG5cblx0J2NsYXNz
JzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5v
ZGUuY2xhc3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycs
IHZhbHVlKTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgn
aHRtbEZvcicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3IgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmli
dXRlKCdmb3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24obm9kZSwgdmFs
dWUpe1xuXHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5bGUuY3NzVGV4dCA9IHZhbHVlIDogbm9k
ZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xuXHR9LFxuXG5cdCd2YWx1ZSc6IGZ1bmN0
aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwpID8gdmFs
dWUgOiAnJztcblx0fVxuXG59KTtcblxucHJvcGVydHlHZXR0ZXJzWydjbGFzcyddID0gZnVuY3Rp
b24obm9kZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFt
ZSB8fCBudWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG59O1xuXG4vKiA8d2Via2l0
PiAqL1xudmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyBJRSBz
ZXRzIHR5cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xudHJ5IHsgZWwudHlwZSA9ICdidXR0b24n
OyB9IGNhdGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAnYnV0dG9uJykgcHJvcGVydHlTZXR0ZXJz
LnR5cGUgPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdG5vZGUuc2V0QXR0cmlidXRlKCd0eXBl
JywgdmFsdWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwvd2Via2l0PiAqL1xuXG4vKjxJRT4qL1xu
XG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVs
ZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0
cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5c
dFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxh
Zztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnaW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVlLCBodG1sNUlucHV0U3VwcG9ydDtcblxu
Ly8gIzIxNzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5wdXQudHlwZSA9ICdzdWJtaXQnO1xudm9s
YXRpbGVJbnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0gJ3QnO1xuXG4vLyAjMjQ0MyAtIElFIHRo
cm93cyBcIkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUgaW5wdXQg
dHlwZXNcbnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7XG5cdGlucHV0LnR5cGUgPSAnZW1haWwn
O1xuXHRodG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJztcbn0gY2F0Y2gg
KGUpe31cblxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8ICFodG1s
NUlucHV0U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB0eXBl
KXtcblx0dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuXHRcdG5vZGUudHlwZSA9
IHR5cGU7XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKXt9XG59O1xuLyo8
L0lFPiovXG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSAqL1xuXG4vKiA8bHRJRTk+ICov
XG52YXIgcG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oZGl2KXtcblx0ZGl2LnJhbmRv
bSA9ICdhdHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5nZXRBdHRyaWJ1dGUoJ3JhbmRvbScpID09
ICdhdHRyaWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxudmFy
IGhhc0Nsb25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xuXHR0ZXN0LmlubmVySFRNTCA9ICc8b2Jq
ZWN0PjxwYXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZhbHVlPVwidGhlIHVua25vd25cIiAvPjwv
b2JqZWN0Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9kZSh0cnVlKS5maXJzdENoaWxkLmNoaWxk
Tm9kZXMubGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4v
KiA8L2x0SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0ID0gISFkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1lIHx8ICcnKS5jbGVhbigpLnNwbGl0KCcg
JyksIHVuaXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9uKGNs
YXNzTmFtZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0gJycgJiYgIXVuaXF1ZXNbY2xhc3NOYW1l
XSkgcmV0dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNsYXNzTmFtZTtcblx0fSk7XG59O1xuXG52
YXIgYWRkVG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QuYWRk
KG5hbWUpO1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtc
blx0dGhpcy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQo
e1xuXG5cdHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIHNldHRl
ciA9IHByb3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChzZXR0ZXIp
e1xuXHRcdFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogPGx0
SUU5PiAqL1xuXHRcdFx0dmFyIGF0dHJpYnV0ZVdoaXRlTGlzdDtcblx0XHRcdGlmIChwb2xsdXRl
c0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJp
YnV0ZVdoaXRlTGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJRTk+ICovXG5cblx0XHRcdGlmICh2
YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0
XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBkZWxl
dGUgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2YWx1ZSk7
XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRl
KSBhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAq
L1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXRQcm9wZXJ0
aWVzOiBmdW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRmb3IgKHZhciBhdHRyaWJ1dGUgaW4gYXR0
cmlidXRlcykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbYXR0cmlidXRl
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5h
bWUpe1xuXHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgp
XTtcblx0XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMpO1xuXHRcdC8qIDxsdElFOT4g
Ki9cblx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpe1xuXHRcdFx0dmFyIGF0dHIgPSB0aGlz
LmdldEF0dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0ZVdoaXRlTGlzdCA9IHRoaXMucmV0cmll
dmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHRpZiAoIWF0dHIpIHJldHVybiBu
dWxsO1xuXHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAhYXR0cmlidXRlV2hpdGVMaXN0W25hbWVd
KXtcblx0XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRlckhUTUw7XG5cdFx0XHRcdC8vIHNlZ21l
bnQgYnkgdGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRlIG5hbWVc
blx0XHRcdFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRlci5zZWFyY2goL1xcLz9bJ1wiXT8+KD8h
W148XSo8WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0
YXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Lyog
PC9sdElFOT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xpY2suZ2V0QXR0cmlidXRlKHRoaXMsIG5h
bWUpO1xuXHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xpY2suaGFzQXR0cmlidXRlKHRoaXMsIG5h
bWUpKSA/IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0Z2V0UHJvcGVydGllczogZnVuY3Rpb24o
KXtcblx0XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKTtcblx0XHRyZXR1cm4g
YXJncy5tYXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcykuYXNzb2NpYXRlKGFyZ3MpO1xuXHR9LFxu
XG5cdHJlbW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRQ
cm9wZXJ0eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlv
bigpe1xuXHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5LCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVl
KXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0KHBy
b3BlcnR5ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSkg
OiB0aGlzLnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxu
XG5cdGdldDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9w
ZXJ0aWVzW3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/IHBy
b3BlcnR5LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7XG5cdH0ub3Zl
cmxvYWRHZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3Bl
cnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0
eS5lcmFzZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3ZlUHJvcGVy
dHkocHJvcCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGhhc0NsYXNz
TGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3NMaXN0LmNv
bnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVy
biBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9LFxuXG5c
dGFkZENsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNz
ZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBj
bGFzc2VzKGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xhc3NOYW1lKS5qb2luKCcgJyk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0
aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2gocmVtb3ZlRnJv
bUNsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFz
c05hbWUpe1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSk7XG5c
dFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xhc3NOYW1l
cyk7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVzLmpvaW4oJyAnKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3Jj
ZSl7XG5cdFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNlID0gIXRoaXMuaGFzQ2xhc3MoY2xhc3NO
YW1lKTtcblx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1lKSA6IHRo
aXMucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZG9wdDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQsIGVsZW1lbnRzID0gQXJyYXkuZmxhdHRl
bihhcmd1bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCA+
IDEpIHBhcmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
O1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgZWxl
bWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTtcblx0XHRcdGlmIChlbGVtZW50
KSBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyYWdtZW50
KSB0aGlzLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGFwcGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXtcblx0XHRyZXR1cm4gdGhpcy5n
cmFiKHRoaXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUpO1xuXHR9LFxu
XG5cdGdyYWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdi
b3R0b20nXShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hl
cmUgfHwgJ2JvdHRvbSddKHRoaXMsIGRvY3VtZW50LmlkKGVsLCB0cnVlKSk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXtcblx0XHRlbCA9IGRvY3Vt
ZW50LmlkKGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLCBl
bCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcHM6IGZ1bmN0aW9uKGVsLCB3aGVy
ZSl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHRoaXMucmVw
bGFjZXMoZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxcblxuXHRnZXRTZWxlY3RlZDogZnVuY3Rp
b24oKXtcblx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8vIFNhZmFyaSAzLjIuMVxuXHRcdHJldHVy
biBuZXcgRWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5jdGlv
bihvcHRpb24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZDtcblx0XHR9KSk7XG5cdH0s
XG5cblx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBb
XTtcblx0XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2go
ZnVuY3Rpb24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBlbC50eXBlO1xuXHRcdFx0aWYgKCFlbC5u
YW1lIHx8IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAncmVzZXQn
IHx8IHR5cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG5cdFx0XHR2
YXIgdmFsdWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxlY3RlZCgp
Lm1hcChmdW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJRVxuXHRcdFx0XHRyZXR1cm4gZG9jdW1l
bnQuaWQob3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9KSA6ICgodHlwZSA9PSAncmFkaW8nIHx8
IHR5cGUgPT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNrZWQpID8gbnVsbCA6IGVsLmdldCgndmFs
dWUnKTtcblxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2YWwpe1xu
XHRcdFx0XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVzaChl
bmNvZGVVUklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFs
KSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicp
O1xuXHR9XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxcblxudmFyIGFwcGVuZEluc2VydGVycyA9
IHtcblx0YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRhZnRlcjogJ2FmdGVyRW5kJyxcblx0Ym90
dG9tOiAnYmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJCZWdpbicsXG5cdGluc2lkZTogJ2JlZm9y
ZUVuZCdcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNlcnRBZGph
Y2VudEhUTUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0aW9uKGh0
bWwsIHdoZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2VudEhUTUwoYXBwZW5kSW5zZXJ0ZXJzW3do
ZXJlIHx8ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVybiB0aGlzO1xufSA6IGZ1bmN0aW9uKGh0
bWwsIHdoZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6IGh0bWx9
KSxcblx0XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rlcyxcblx0XHRmcmFnbWVudCA9IHRlbXAu
Zmlyc3RDaGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSByZXR1cm4gdGhpcztcblx0aWYgKGNoaWxk
cmVuLmxlbmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwg
bDsgaSsrKXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcblx0XHR9
XG5cdH1cblxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGZyYWdtZW50LCB0aGlzKTtc
blx0cmV0dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0ge307
XG5cbnZhciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRyZXR1cm4gKHN0b3JhZ2VbdWlkXSB8fCAo
c3RvcmFnZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0ZW0pe1xu
XHR2YXIgdWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5cdGlmIChpdGVtLnJlbW92ZUV2ZW50cykg
aXRlbS5yZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBpdGVtLmNs
ZWFyQXR0cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51bGwpe1xuXHRcdGRlbGV0ZSBjb2xsZWN0
ZWRbdWlkXTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRdO1xuXHR9XG5cdHJldHVybiBpdGVtO1xu
fTtcblxudmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdzZWxlY3Rl
ZCcsIHRleHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGRlc3Ry
b3k6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVuID0gY2xlYW4odGhpcykuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNoKGNoaWxkcmVuLCBjbGVhbik7XG5cdFx0
RWxlbWVudC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGVtcHR5
OiBmdW5jdGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVs
ZW1lbnQuZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihjb250
ZW50cywga2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTtcblx0XHR2
YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwgdGUgPSBb
dGhpc10sIGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xuXHRcdFx0Y2UuYXBwZW5kKEFycmF5LmNv
bnZlcnQoY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdFx0dGUuYXBwZW5k
KEFycmF5LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0fVxu
XG5cdFx0Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtcblx0XHRcdHZhciBub2RlID0gY2VbaV0s
IGVsZW1lbnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0dHJpYnV0
ZSgnaWQnKTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAobm9kZS5jbGVhckF0dHJpYnV0
ZXMpe1xuXHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRlcygpO1xuXHRcdFx0XHRub2RlLm1lcmdl
QXR0cmlidXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3VuaXF1
ZU51bWJlcicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRpb25zKXtcblx0XHRcdFx0XHR2YXIgbm8g
PSBub2RlLm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zO1xuXHRcdFx0XHRcdGZvciAodmFy
IGogPSBuby5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0ZWQ7XG5c
dFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHByb3AgPSBm
b3JtUHJvcHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdFx0aWYgKHByb3Ag
JiYgZWxlbWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07XG5cdFx0fVxuXG5c
dFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVCdWcpe1xuXHRcdFx0dmFyIGNvID0gY2xv
bmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChpID0gY28ubGVuZ3RoOyBpLS07KSBjb1tp
XS5vdXRlckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5cdFx0fVxuXHRcdC8qPC9sdElFOT4qL1xu
XHRcdHJldHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5cdH1cblxufSk7XG5cbltFbGVtZW50LCBX
aW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRMaXN0ZW5lcjog
ZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxlY3RlZFtTbGljay51aWRPZih0aGlzKV0g
PSB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRFdmVudExpc3RlbmVyKSB0aGlzLmFkZEV2
ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuYXR0
YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRy
ZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh0aGlzLnJlbW92ZUV2
ZW50TGlzdGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVu
dHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0eSwgZGZs
dCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9wID0gc3Rv
cmFnZVtwcm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0gbnVsbCAmJiBwcm9wID09IG51bGwpIHBy
b3AgPSBzdG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5cdFx0cmV0dXJuIHByb3AgIT0gbnVsbCA/
IHByb3AgOiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUp
e1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRzdG9yYWdl
W3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVsaW1pbmF0
ZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9m
KHRoaXMpKTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBnYyA9IGZ1bmN0aW9uKCl7XG5cdFx0T2Jq
ZWN0LmVhY2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0aWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFn
ZSkgQ29sbGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cucmVtb3ZlTGlzdGVuZXIoJ3VubG9hZCcs
IGdjKTtcblx0fTtcblx0d2luZG93LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG59XG4vKjwv
bHRJRTk+Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307XG5cblxuXG5FbGVtZW50LlByb3Bl
cnRpZXMuc3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihzdHlsZSl7XG5cdFx0dGhpcy5zdHls
ZS5jc3NUZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0
dGhpcy5zdHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVz
LnRhZyA9IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudGFnTmFtZS50
b0xvd2VyQ2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy5odG1sID0ge1xu
XG5cdHNldDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYgKGh0bWwgPT0gbnVsbCkgaHRtbCA9ICcn
O1xuXHRcdGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRtbC5qb2lu
KCcnKTtcblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKHRoaXMuc3R5bGVTaGVldCAmJiAhY2Fu
Q2hhbmdlU3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGh0bWw7XG5cdFx0ZWxz
ZSAvKjwvbHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdH0sXG5cdGVyYXNlOiBmdW5j
dGlvbigpe1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycpO1xuXHR9XG5cbn07XG5cbnZhciBzdXBw
b3J0c0hUTUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gdHJ1ZSwg
c3VwcG9ydHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8qPGx0SUU5PiovXG4vLyB0ZWNobmlxdWUg
YnkgamRiYXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQuY29tL2lubmVyc2hpdi9cbnZhciBkaXYg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBmcmFnbWVudDtcbmRpdi5pbm5l
ckhUTUwgPSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gKGRpdi5jaGls
ZE5vZGVzLmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblx0dmFy
IHRhZ3MgPSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxz
IGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91
dHB1dCBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAnKTtcblx0
ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGwgPSB0YWdzLmxl
bmd0aDtcblx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3JlYXRlRWxlbWVudCh0YWdzW2xdKTtcbn1c
bmRpdiA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbnN1cHBvcnRzVGFibGVJbm5l
ckhUTUwgPSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdHZhciB0YWJsZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRhYmxlLmlubmVySFRNTCA9ICc8dHI+PHRk
PjwvdGQ+PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0pO1xuXG4vKjxsdEZGND4qL1xudmFyIHRy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwgaHRtbCA9ICc8dGQ+PC90ZD4nO1xudHIu
aW5uZXJIVE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5lckhUTUwgPSAodHIuaW5uZXJIVE1MID09
IGh0bWwpO1xudHIgPSBudWxsO1xuLyo8L2x0RkY0PiovXG5cbmlmICghc3VwcG9ydHNUYWJsZUlu
bmVySFRNTCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8fCAhc3VwcG9ydHNIVE1MNUVsZW1lbnRz
KXtcblxuXHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0KXtcblxu
XHRcdHZhciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0YWJsZTogWzEsICc8dGFibGU+JywgJzwv
dGFibGU+J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNlbGVjdD4nLCAnPC9zZWxlY3Q+J10sXG5c
dFx0XHR0Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG5c
dFx0XHR0cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+
J11cblx0XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25zLnRmb290
ID0gdHJhbnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGh0bWwpe1xuXG5c
dFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMuc3R5bGVTaGVldCkgcmV0dXJuIHNldC5j
YWxsKHRoaXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgd3JhcCA9IHRy
YW5zbGF0aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRcdFx0aWYgKCF3cmFwICYmICFzdXBwb3J0
c0hUTUw1RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcnXTtcblx0XHRcdGlmICghd3JhcCkgcmV0
dXJuIHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0XHR2YXIgbGV2ZWwgPSB3cmFwWzBdLCB3
cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHRhcmdldCA9IHdyYXBwZXI7
XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQuYXBwZW5kQ2hpbGQo
d3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRNTCA9IFt3cmFwWzFdLCBodG1sLCB3cmFw
WzJdXS5mbGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3aGlsZSAobGV2ZWwtLSkgdGFyZ2V0ID0g
dGFyZ2V0LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVtcHR5KCkuYWRvcHQodGFyZ2V0LmNoaWxk
Tm9kZXMpO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LnJlbW92
ZUNoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9IG51bGw7XG5cdFx0fTtcblxuXHR9KShF
bGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxuLyo8L0lFPiovXG5cbi8qPGx0SUU5Piov
XG52YXIgdGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG50ZXN0Rm9y
bS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4nO1xuXG5p
ZiAodGVzdEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAncycpIEVsZW1lbnQuUHJvcGVydGllcy52
YWx1ZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGFnID0gdGhpcy5n
ZXQoJ3RhZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcpIHJldHVybiB0aGlzLnNldFByb3Bl
cnR5KCd2YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxlbWVudHMo
J29wdGlvbicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIG9wdGlvbiA9IG9wdGlvbnNb
aV0sXG5cdFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKSxcblx0
XHRcdFx0b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFs
dWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IHZhbHVl
KSByZXR1cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0OiBm
dW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0KCd0YWcn
KTtcblxuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYgdGFnICE9ICdvcHRpb24nKSByZXR1cm4g
dGhpcy5nZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRcdGlmICh0YWcgPT0gJ3NlbGVjdCcgJiYg
IShvcHRpb24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVswXSkpIHJldHVybiAnJztcblxuXHRcdHZh
ciBhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7XG5cdFx0cmV0dXJuIChh
dHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQn
KTtcblx0fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiov
XG5pZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9kZSgnaWQn
KSkgRWxlbWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKGlkKXtcblx0XHR0
aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7XG5cdH0sXG5c
dGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5pZCB8fCBudWxsO1xuXHR9LFxuXHRl
cmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdp
ZCcpLnZhbHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+Ki9cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5cGUsIHRv
IG1ha2UgdGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgRnVuY3Rp
b24sIFN0cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczogRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVu
Y3Rpb24oKXtcblxudmFyIF9rZXlzID0ge307XG52YXIgbm9ybWFsaXplV2hlZWxTcGVlZCA9IGZ1
bmN0aW9uKGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7XG5cdGlmIChldmVudC53aGVlbERlbHRh
KXtcblx0XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxEZWx0YSAlIDEyMCA9PSAwID8gZXZlbnQu
d2hlZWxEZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVsdGEgLyAxMjtcblx0fSBlbHNlIHtcblx0
XHR2YXIgcmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8IGV2ZW50LmRldGFpbCB8fCAwO1xuXHRc
dG5vcm1hbGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMgOiByYXdB
bW91bnQgKiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZWQ7XG59O1xuXG52YXIgRE9NRXZl
bnQgPSB0aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RPTUV2ZW50JywgZnVuY3Rpb24oZXZlbnQs
IHdpbil7XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2lu
LmV2ZW50O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7XG5cdHRoaXMuZXZl
bnQgPSBldmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0cnVlO1xuXHR0aGlzLnNoaWZ0ID0gZXZl
bnQuc2hpZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2ZW50LmN0cmxLZXk7XG5cdHRoaXMuYWx0
ID0gZXZlbnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBldmVudC5tZXRhS2V5O1xuXHR2YXIgdHlw
ZSA9IHRoaXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQg
fHwgZXZlbnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUg
PT0gMykgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdHRoaXMudGFyZ2V0ID0gZG9jdW1l
bnQuaWQodGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRleE9mKCdrZXknKSA9PSAwKXtcblx0XHR2
YXIgY29kZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtcblx0
XHRpZiAoIXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5cHJlc3MnKSB0aGlzLmtleSA9IF9rZXlz
W2NvZGVdO1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3duJyB8fCB0eXBlID09ICdrZXl1cCcpe1xu
XHRcdFx0aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEyNCkgdGhpcy5rZXkgPSAnZicgKyAoY29k
ZSAtIDExMSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4gOTUgJiYgY29kZSA8IDEwNikgdGhpcy5r
ZXkgPSBjb2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmtleSA9PSBudWxsKSB0aGlzLmtl
eSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKTtcblx0fSBlbHNlIGlm
ICh0eXBlID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0gJ2NvbnRl
eHRtZW51JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8
IHR5cGUuaW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0XHR2YXIgZG9jID0gd2luLmRvY3VtZW50
O1xuXHRcdGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFD
b21wYXQnKSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5cdFx0dGhpcy5wYWdlID0ge1xuXHRcdFx0
eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYICsg
ZG9jLnNjcm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5w
YWdlWSA6IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wXG5cdFx0fTtcblx0XHR0aGlzLmNs
aWVudCA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIC0g
d2luLnBhZ2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxcblx0XHRcdHk6IChldmVudC5wYWdlWSAh
PSBudWxsKSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xpZW50WVxu
XHRcdH07XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlID09ICd3aGVl
bCcgfHwgdHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMud2hlZWwgPSBub3JtYWxpemVXaGVlbFNw
ZWVkKGV2ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0gMyB8fCBl
dmVudC5idXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9
PSAnbW91c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21vdXNlbGVh
dmUnKXtcblx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBl
ID09ICdtb3VzZWVudGVyJztcblx0XHRcdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdl
dCB8fCBldmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQnXTtcblx0
XHRcdHdoaWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJl
bGF0ZWQucGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3VtZW50Lmlk
KHJlbGF0ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNoJykgPT0g
MCB8fCB0eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXtcblx0XHR0aGlzLnJvdGF0aW9uID0g
ZXZlbnQucm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9IGV2ZW50LnNjYWxlO1xuXHRcdHRoaXMu
dGFyZ2V0VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7XG5cdFx0dGhpcy5jaGFuZ2VkVG91
Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRcdHZhciB0b3VjaGVzID0gdGhpcy50b3Vj
aGVzID0gZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXtcblx0
XHRcdHZhciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0XHR0aGlzLnBhZ2UgPSB7eDogdG91Y2gu
cGFnZVgsIHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRoaXMuY2xpZW50ID0ge3g6IHRvdWNoLmNs
aWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhpcy5jbGll
bnQpIHRoaXMuY2xpZW50ID0ge307XG5cdGlmICghdGhpcy5wYWdlKSB0aGlzLnBhZ2UgPSB7fTtc
bn0pO1xuXG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fSxcblxu
XHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGVsc2UgdGhpcy5l
dmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBy
ZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnByZXZlbnREZWZh
dWx0KSB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LnJl
dHVyblZhbHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkRPTUV2
ZW50LmRlZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtleSl7XG5cdF9rZXlzW2NvZGVdID0ga2V5
O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50LmRlZmluZUtleXMgPSBET01FdmVudC5k
ZWZpbmVLZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleXMoe1xu
XHQnMzgnOiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6ICdsZWZ0JywgJzM5JzogJ3JpZ2h0Jyxc
blx0JzI3JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4JzogJ2JhY2tzcGFjZScsICc5JzogJ3Rh
YicsXG5cdCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInXG59KTtcblxufSkoKTtcblxuXG5c
blxuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIEVsZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBmaWxlIGFs
c28gaW5jbHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVudCBFdmVu
dHMsIGlmIG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBbRWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVzOiBFbGVtZW50LkV2ZW50XG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBm
dW5jdGlvbihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50cyhldmVudHMpO1xufX07XG5cbltFbGVt
ZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRFdmVu
dDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdl
dmVudHMnLCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlz
OiBbXSwgdmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50c1t0eXBlXS5rZXlzLmNvbnRhaW5zKGZu
KSkgcmV0dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMucHVzaChmbik7XG5cdFx0dmFy
IHJlYWxUeXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdLFxu
XHRcdFx0Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxmID0gdGhpcztcblx0XHRpZiAoY3VzdG9t
KXtcblx0XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3RvbS5vbkFkZC5jYWxsKHRoaXMsIGZuLCB0
eXBlKTtcblx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uKXtcblx0XHRcdFx0Y29uZGl0aW9uID0g
ZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uLmNhbGwodGhp
cywgZXZlbnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdFx0
cmV0dXJuIHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2Up
IHJlYWxUeXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBl
KTtcblx0XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZuLmNh
bGwoc2VsZik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZlRXZlbnQgPSBFbGVtZW50Lk5hdGl2ZUV2
ZW50c1tyZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2ZW50KXtcblx0XHRcdGlmIChuYXRpdmVF
dmVudCA9PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRl
dmVudCA9IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5kb3coKSk7XG5cdFx0XHRcdFx0
aWYgKGNvbmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0b3AoKTtc
blx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWRkTGlzdGVuZXIocmVhbFR5cGUsIGRl
Zm4sIGFyZ3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2ZW50c1t0eXBlXS52YWx1ZXMucHVzaChk
ZWZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24o
dHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0
XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHR2YXIgbGlz
dCA9IGV2ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXggPSBsaXN0LmtleXMuaW5kZXhPZihmbik7
XG5cdFx0aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpcztcblx0XHR2YXIgdmFsdWUgPSBsaXN0
LnZhbHVlc1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qua2V5c1tpbmRleF07XG5cdFx0ZGVsZXRl
IGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlw
ZV07XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uUmVtb3ZlKSBjdXN0b20u
b25SZW1vdmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHR5
cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRc
dH1cblx0XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZlbnRzW3R5cGVdKSA/IHRoaXMucmVtb3Zl
TGlzdGVuZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1syXSkgOiB0aGlzO1xuXHR9LFxuXG5cdGFk
ZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciBldmVudCBpbiBldmVudHMp
IHRoaXMuYWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtc
blx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGlu
IGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0
dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50
cycpO1xuXHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICghZXZlbnRzKXtc
blx0XHRcdGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhpcy5yZW1vdmVFdmVudHModHlwZSk7XG5c
dFx0XHR0aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5cdFx0fSBlbHNlIGlmIChhdHRhY2hlZFtl
dmVudHNdKXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtc
blx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xu
XHRcdFx0ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHZh
ciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAh
ZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdz
KTtcblxuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYg
KGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5
KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNsb25lRXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXtcblx0XHRmcm9tID0gZG9jdW1lbnQu
aWQoZnJvbSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20ucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRc
dGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIXR5cGUpe1xuXHRcdFx0Zm9yICh2
YXIgZXZlbnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9uZUV2ZW50cyhmcm9tLCBldmVudFR5cGUp
O1xuXHRcdH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtcblx0XHRcdGV2ZW50c1t0eXBlXS5rZXlz
LmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50KHR5cGUsIGZuKTtcblx0
XHRcdH0sIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRWxl
bWVudC5OYXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAyLCBkYmxjbGljazogMiwgbW91c2V1cDog
MiwgbW91c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwgLy9tb3VzZSBidXR0b25zXG5cdHdoZWVs
OiAyLCBtb3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVlbFxuXHRt
b3VzZW92ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1vdmU6IDIsIHNlbGVjdHN0YXJ0OiAyLCBz
ZWxlY3RlbmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0a2V5ZG93bjogMiwga2V5cHJlc3M6IDIs
IGtleXVwOiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBtb2JpbGVc
blx0dG91Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0b3VjaGVuZDogMiwgdG91Y2hjYW5jZWw6
IDIsIC8vIHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwgZ2VzdHVy
ZWVuZDogMiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAyLCByZXNl
dDogMiwgc2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9mb3JtIGVs
ZW1lbnRzXG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVmb3JldW5sb2FkOiAyLCByZXNpemU6IDEs
IG1vdmU6IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJlYWR5c3RhdGVjaGFuZ2U6IDEsIC8vd2lu
ZG93XG5cdGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAyLCBwYWdlc2hvdzogMiwgcGFnZWhpZGU6
IDIsIC8vIGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1lc3NhZ2U6
IDIgLy9taXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9IHtcblx0bW91c2V3aGVlbDoge1xuXHRc
dGJhc2U6ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdoZWVsJyBp
biBkb2N1bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNjcm9sbCdcblx0fVxufTtcblxu
dmFyIGNoZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0
ZWRUYXJnZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwpIHJldHVybiB0cnVlO1xuXHRpZiAoIXJl
bGF0ZWQpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYgcmVsYXRl
ZC5wcmVmaXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYgIXRoaXMu
Y29udGFpbnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdvbm1vdXNlZW50ZXInIGluIGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50ZXIgPSBF
bGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjtcblx0RWxlbWVudC5Nb3VzZWVudGVy
Q2hlY2sgPSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlZW50ZXIgPSB7
XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xuXG5c
dEVsZW1lbnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0
XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8qPGx0SUU5PiovXG5pZiAoIXdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMucHJvcGVydHljaGFuZ2Ug
PSAyO1xuXHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7XG5cdFx0YmFzZTogZnVuY3Rpb24oKXtc
blx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRcdFx0cmV0dXJuICh0aGlzLmdldCgndGFn
JykgPT0gJ2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94Jykp
ID8gJ3Byb3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xuXHRcdH0sXG5cdFx0Y29uZGl0aW9uOiBm
dW5jdGlvbihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVydHljaGFu
Z2UnIHx8IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7XG5cdFx0fVxuXHR9
O1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1l
bnQuRGVsZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUg
b2JqZWN0IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZpY2llbnQg
ZXZlbnQgbWFuYWdlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBbRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRpb25dXG5c
bi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBldmVudExpc3RlbmVyU3VwcG9ydCA9ICEh
d2luZG93LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3VzaW4g
PSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7XG5cbnZhciBidWJibGVVcCA9IGZ1
bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdHdoaWxlICh0YXJnZXQg
JiYgdGFyZ2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkgcmV0dXJu
IGZuLmNhbGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtcblx0XHR0YXJnZXQgPSBkb2N1bWVudC5p
ZCh0YXJnZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5cbnZhciBtYXAgPSB7XG5cdG1vdXNlZW50
ZXI6IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91
c2VlbnRlckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6IHtcblx0XHRiYXNlOiAnbW91c2VvdXQn
LFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0Zm9jdXM6
IHtcblx0XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycgOiAnaW4n
KSxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJsdXI6IHtcblx0XHRiYXNlOiBldmVudExp
c3RlbmVyU3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsXG5cdFx0Y2FwdHVyZTogdHJ1ZVxu
XHR9XG59O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkgPSAnJGRlbGVnYXRpb246JztcbnZhciBm
b3JtT2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxuXHRyZXR1cm4ge1xuXG5cdFx0YmFzZTog
J2ZvY3VzaW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxmLCB1aWQpe1xuXHRcdFx0dmFy
IGxpc3QgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KVt1aWRd
O1xuXHRcdFx0aWYgKGxpc3QgJiYgbGlzdC5mb3JtcykgZm9yICh2YXIgaSA9IGxpc3QuZm9ybXMu
bGVuZ3RoOyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBkZXN0cm95
ZWQsIHNvIGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRcdC8vIHJlbW92ZUV2ZW50IG1ldGhvZCBh
bnltb3JlLiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdhc1xuXHRcdFx0XHQvLyByZW1vdmVkIGFz
IHdlbGwuXG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0LmZvcm1z
W2ldLnJlbW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9LFxuXG5c
dFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCl7
XG5cdFx0XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8gdGFyZ2V0
IDogZXZlbnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpO1xuXHRcdFx0aWYgKCFmb3JtKSByZXR1
cm47XG5cblx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsg
J2xpc3RlbmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVuZXIgPSBsaXN0ZW5lcnNbdWlkXSB8fCB7
Zm9ybXM6IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9ybXMgPSBsaXN0ZW5lci5mb3JtcywgZm5z
ID0gbGlzdGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAhPSAtMSkg
cmV0dXJuO1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtcblxuXHRcdFx0dmFyIF9mbiA9IGZ1bmN0
aW9uKGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFy
Z2V0KTtcblx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2ZW50KHR5cGUsIF9mbik7XG5cdFx0XHRm
bnMucHVzaChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNbdWlkXSA9IGxpc3RlbmVyO1xuXHRcdFx0
c2VsZi5zdG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCBsaXN0ZW5lcnMpO1xuXHRcdH1c
blx0fTtcbn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cdHJldHVy
biB7XG5cdFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZhciBldmVudHMgPSB7Ymx1cjogZnVuY3Rp
b24oKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMoZXZlbnRzKTtcblx0XHRcdH19O1xuXHRc
dFx0ZXZlbnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGV2ZW50LnRhcmdl
dC5hZGRFdmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07XG59O1xuXG5pZiAoIWV2ZW50TGlzdGVu
ZXJTdXBwb3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xuXHRzdWJtaXQ6IGZvcm1PYnNlcnZlcign
c3VibWl0JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksXG5cdGNoYW5nZTogaW5w
dXRPYnNlcnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDogaW5wdXRPYnNlcnZlcignc2VsZWN0Jylc
bn0pO1xuLyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLFxuXHRh
ZGRFdmVudCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1vdmVFdmVudCA9IHByb3RvLnJlbW92ZUV2
ZW50O1xuXG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQsIG1ldGhvZCl7XG5cdHJldHVybiBmdW5j
dGlvbih0eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0aWYgKHR5cGUuaW5kZXhPZignOnJlbGF5
JykgPT0gLTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5c
dFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRc
dGlmIChwYXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5jYWxsKHRo
aXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgbmV3VHlwZSA9IHBhcnNlZC50YWc7
XG5cdFx0cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFjaChmdW5jdGlvbihwc2V1ZG8pe1xuXHRc
dFx0bmV3VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsgKHBzZXVkby52YWx1ZSA/ICcoJyArIHBz
ZXVkby52YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtcblx0XHRvbGQuY2FsbCh0aGlzLCB0eXBl
LCBmbik7XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIG5ld1R5cGUsIHBhcnNlZC5wc2V1
ZG9zWzBdLnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52YXIgZGVsZWdhdGlvbiA9IHtcblxuXHRh
ZGRFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRo
aXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5c
dFx0aWYgKHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0aWYgKHN0b3Jl
ZFtfdWlkXS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0ubWF0Y2ggPT0gbWF0Y2gpIHJldHVybiB0
aGlzO1xuXHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5cGUsIF9tYXRjaCA9IG1hdGNoLCBfZm4g
PSBmbiwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90
eXBlO1xuXG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpe1xuXHRcdFx0cmV0dXJuIFNsaWNr
Lm1hdGNoKHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xuXG5cdFx0dmFyIGVsZW1lbnRFdmVudCA9
IEVsZW1lbnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAoX21hcC5jb25kaXRpb24gfHwgZWxlbWVu
dEV2ZW50ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24pe1xuXHRcdFx0dmFyIF9fbWF0Y2ggPSBt
YXRjaCwgY29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNvbmRpdGlv
bjtcblx0XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVudCl7XG5cdFx0XHRcdHJldHVy
biBfX21hdGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRpdGlvbi5jYWxsKHRhcmdldCwgZXZlbnQs
IHR5cGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgc2VsZiA9IHRoaXMsIHVpZCA9IFN0
cmluZy51bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0b3IgPSBfbWFwLmxpc3RlbiA/IGZ1bmN0
aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQu
dGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBfbWFwLmxp
c3RlbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCk7XG5cdFx0fSA6IGZ1bmN0
aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQu
dGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBidWJibGVV
cChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdH07XG5cblx0XHRpZiAoIXN0
b3JlZCkgc3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3VpZF0gPSB7XG5cdFx0XHRtYXRjaDogX21h
dGNoLFxuXHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVnYXRvcjogZGVsZWdhdG9yXG5cdFx0fTtc
blx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRyZXR1cm4gYWRkRXZlbnQuY2FsbCh0
aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdH0sXG5cblx0cmVtb3ZlRXZl
bnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3VpZCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0
aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xu
XHRcdGlmICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxuXHRcdGlmIChfdWlkKXtcblx0XHRcdHZh
ciBfdHlwZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3JlZFtfdWlkXS5kZWxlZ2F0b3IsIF9tYXAg
PSBtYXBbdHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXHRc
dFx0aWYgKF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0aGlzLCBfdWlkKTtcblx0XHRcdGRlbGV0
ZSBzdG9yZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRcdHJl
dHVybiByZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJl
KTtcblx0XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5cdFx0aWYgKGZuKSBmb3IgKF9fdWlkIGlu
IHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09
IG1hdGNoICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwo
dGhpcywgdHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5cdFx0fSBlbHNlIGZvciAoX191aWQgaW4g
c3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0g
bWF0Y2gpIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgcy5m
biwgX191aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59O1xuXG5bRWxlbWVu
dCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cdGFkZEV2ZW50OiBy
ZWxheShhZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVudCksXG5cdHJlbW92ZUV2ZW50OiByZWxh
eShyZW1vdmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVFdmVudClcbn0pO1xuXG59KSgpO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1l
dGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBpbiBhIGZh
c2hpb25hYmxlIHdheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBFbGVtZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0eWxlXG5cbi4uLlxuKi9cblxuKGZ1bmN0
aW9uKCl7XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRtbCwgZWw7XG5cbi8vPGx0SUU5PlxuLy8g
Q2hlY2sgZm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCByZW1vdmUgc3R5bGVzIHdoZW4gdGhleSdy
ZSBzZXQgdG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsLnN0
eWxlLmNvbG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xvciA9IG51bGw7XG52YXIgZG9lc05vdFJl
bW92ZVN0eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdyZWQnO1xuXG4vLyBjaGVjayBmb3Igb2xk
SUUsIHdoaWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhhbmQgc3R5bGVzIGluIHRoZSB3cm9uZyBv
cmRlciAoY29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBvZiB3aWR0aC1zdHlsZS1jb2xvcilcbnZh
ciBib3JkZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xuZWwuc3R5bGUuYm9yZGVyID0gYm9yZGVy
O1xudmFyIHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyID0gZWwuc3R5bGUuYm9yZGVyICE9IGJv
cmRlcjtcbmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxudmFyIGhhc0dldENvbXB1dGVkU3R5bGUg
PSAhIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRzdXBwb3J0Qm9yZGVyUmFkaXVzID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51bGw7XG5c
bkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMpe1xuXHR0
aGlzLnNldFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZhciBoYXNPcGFjaXR5ID0gKGh0bWwuc3R5
bGUub3BhY2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVyID0gKGh0bWwuc3R5bGUuZmlsdGVyICE9
IG51bGwpLFxuXHRyZUFscGhhID0gL2FscGhhXFwob3BhY2l0eT0oW1xcZC5dKylcXCkvaTtcblxu
dmFyIHNldFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVu
dC5zdG9yZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5
ID0gb3BhY2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxsID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7
XG59O1xuXG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIgPSBmdW5jdGlvbihlbGVtZW50LCByZWdl
eHAsIHZhbHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRmaWx0ZXIgPSBz
dHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8fCAnJztc
blx0c3R5bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVwbGFjZShy
ZWdleHAsIHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50cmltKCk7XG5cdGlmICghc3R5
bGUuZmlsdGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xufTtcbi8vPC9sdElF
OT5cblxudmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9w
YWNpdHkpe1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xufSA6IChoYXNGaWx0
ZXIgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0aWYgKCFlbGVtZW50LmN1cnJlbnRT
dHlsZSB8fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxlLnpv
b20gPSAxO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8IG9wYWNpdHkgPT0gMSl7XG5cdFx0c2V0
RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0XHRpZiAob3BhY2l0eSA9PSAxICYmIGdl
dE9wYWNpdHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBo
YShvcGFjaXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVB
bHBoYSwgJ2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5ICogMTAwKS5saW1pdCgwLCAxMDApLnJv
dW5kKCkgKyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJpbGl0eSkpO1xuXG52YXIgZ2V0T3BhY2l0
eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxl
bWVudC5zdHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnb3BhY2l0eScp
O1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNpdHkudG9GbG9hdCgpO1xufSA6
IChoYXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIGZpbHRlciA9IChlbGVtZW50
LnN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpKSxcblx0
XHRvcGFjaXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJlQWxwaGEp
O1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBmaWx0ZXIgPT0gbnVsbCkgPyAxIDogKG9w
YWNpdHlbMV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9
IGVsZW1lbnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5cdGlmIChvcGFjaXR5ID09IG51bGwpIG9w
YWNpdHkgPSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6IDEpO1xu
XHRyZXR1cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZsb2F0TmFtZSA9IChodG1sLnN0eWxlLmNz
c0Zsb2F0ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyxcblx0bmFtZWRQb3Np
dGlvbnMgPSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBjZW50ZXI6ICc1MCUnLCByaWdodDogJzEw
MCUnLCBib3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tncm91bmRQb3NpdGlvblhZID0gKGh0bWwu
c3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSxcblx0cHJlZml4UGF0dGVybiA9IC9e
LShtcyktLztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cmV0dXJu
IHByb3BlcnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwgJyQxLScpLmNhbWVsQ2FzZSgpO1xufTtc
blxuLy88bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcHJvcGVydHkp
e1xuXHRpZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpe1xuXHRcdHN0eWxlLnJl
bW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5cdFx0cHJvcGVydHkgKz0gJ1knO1xuXHR9
XG5cdHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG59O1xuLy88L2x0SUU5PlxuXG5F
bGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0ZWRTdHlsZTogZnVuY3Rpb24ocHJvcGVy
dHkpe1xuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRTdHlsZSkg
cmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldO1xuXHRcdHZhciBk
ZWZhdWx0VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQodGhpcykuZGVmYXVsdFZpZXcsXG5cdFx0
XHRjb21wdXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0
aGlzLCBudWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRlZC5nZXRQ
cm9wZXJ0eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHByb3BlcnR5
Lmh5cGhlbmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0
eSwgdmFsdWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpe1xuXHRcdFx0aWYgKHZh
bHVlICE9IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cdFx0XHRzZXRPcGFjaXR5
KHRoaXMsIHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRwcm9wZXJ0eSA9
IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xu
XHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcnKXtcblx0XHRcdHZhciBtYXAgPSAoRWxl
bWVudC5TdHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3BsaXQoJyAnKTtcblx0XHRcdHZhbHVlID0g
QXJyYXkuY29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdGlmICgh
bWFwW2ldKSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVybiAodHlwZU9mKHZhbCkgPT0gJ251bWJl
cicpID8gbWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsO1xuXHRcdFx0
fSkuam9pbignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJlcih2YWx1
ZSkpKXtcblx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMu
c3R5bGVbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKCh2YWx1ZSA9
PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90UmVtb3ZlU3R5bGVzICYmIHRoaXMuc3R5
bGUucmVtb3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92ZVN0eWxlKHRoaXMuc3R5bGUsIHByb3Bl
cnR5KTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdvcGFj
aXR5JykgcmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2Uo
cHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAoc3Vw
cG9ydEJvcmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRleE9mKCdib3JkZXJSYWRpdXMnKSAhPSAt
MSl7XG5cdFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0
UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbUxlZnRSYWRp
dXMnXS5tYXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVbY29y
bmVyXSB8fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpvaW4oJyAnKTtcblx0XHR9XG5cdFx0dmFy
IHJlc3VsdCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xuXHRcdGlmICghcmVzdWx0IHx8IHByb3Bl
cnR5ID09ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVtZW50LlNob3J0U3R5bGVzLmhhc093blBy
b3BlcnR5KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3VsdCA9IFtdO1xuXHRcdFx0XHRmb3IgKHZh
ciBzIGluIEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVydHldKSByZXN1bHQucHVzaCh0aGlzLmdl
dFN0eWxlKHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdFx0XHR9XG5c
dFx0XHRyZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRcdH1cblx0
XHRpZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRpb25bWFld
PyQvLnRlc3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvKHRvcHxy
aWdodHxib3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24pe1xuXHRcdFx0XHRyZXR1cm4g
bmFtZWRQb3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0fSkgfHwgJzBweCc7XG5cdFx0fVxuXHRc
dGlmICghcmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKSByZXR1cm4g
JzBweCAwcHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRcdFx0cmVzdWx0ID0gU3RyaW5nKHJlc3Vs
dCk7XG5cdFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3JnYmE/XFwoW1xcZFxccyxdK1xc
KS8pO1xuXHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xvclswXSwg
Y29sb3JbMF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHls
ZSAmJiAhdGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRcdFx0aWYgKCgvXihoZWlnaHR8d2lkdGgp
JC8pLnRlc3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1bHQpKSl7XG5cdFx0XHRcdHZh
ciB2YWx1ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQnXSA6IFsn
dG9wJywgJ2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRcdFx0dmFsdWVzLmVhY2goZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5nZXRTdHlsZSgnYm9yZGVyLScgKyB2YWx1
ZSArICctd2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRTdHlsZSgncGFkZGluZy0nICsgdmFsdWUp
LnRvSW50KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gdGhpc1snb2Zmc2V0
JyArIHByb3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4Jztcblx0XHRcdH1cblx0XHRc
dGlmICgoL15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5KSAm
JiBpc05hTihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0XHRcdFx0cmV0dXJuICcwcHgnO1xuXHRc
dFx0fVxuXHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRpZiAocmV0dXJuc0JvcmRlcnNJbldyb25n
T3JkZXIgJiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRvbXxMZWZ0KT8kLy50ZXN0KHByb3BlcnR5
KSAmJiAvXiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoL14o
LispXFxzKC4rKVxccyguKykkLywgJyQyICQzICQxJyk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5c
blxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0c2V0U3R5bGVzOiBmdW5jdGlvbihzdHls
ZXMpe1xuXHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxlcykgdGhpcy5zZXRTdHlsZShzdHlsZSwg
c3R5bGVzW3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGVzOiBm
dW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRBcnJheS5mbGF0dGVuKGFyZ3Vt
ZW50cykuZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmdldFN0
eWxlKGtleSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59KTtc
blxuRWxlbWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206
ICdAcHgnLCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4JywgbWF4
V2lkdGg6ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1pbkhlaWdo
dDogJ0BweCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tncm91bmRT
aXplOiAnQHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAnQHB4IEBweCcsIGNvbG9yOiAncmdiKEAs
IEAsIEApJyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4JywgbGluZUhl
aWdodDogJ0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBweCknLFxuXHRtYXJnaW46ICdA
cHggQHB4IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyOiAnQHB4
IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCknLFxu
XHRib3JkZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlclN0eWxlOiAnQCBAIEAgQCcs
IGJvcmRlckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdi
KEAsIEAsIEApJyxcblx0ekluZGV4OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0OiAnQCcs
IHRleHRJbmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0BweCBAcHgg
QHB4IEBweCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJnaW46IHt9
LCBwYWRkaW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJTdHlsZTog
e30sIGJvcmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0
J10uZWFjaChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2YXIgU2hvcnQgPSBFbGVtZW50LlNob3J0
U3R5bGVzO1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7XG5cdFsnbWFyZ2luJywgJ3BhZGRp
bmcnXS5lYWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlv
bjtcblx0XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdAcHgnO1xuXHR9KTtcblx0dmFy
IGJkID0gJ2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNob3J0LmJvcmRlcltiZF0gPSBBbGxbYmRd
ID0gJ0BweCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBiZHcgPSBiZCArICdXaWR0aCcsIGJkcyA9
IGJkICsgJ1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InO1xuXHRTaG9ydFtiZF0gPSB7fTtcblx0
U2hvcnQuYm9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2JkXVtiZHddID0gQWxsW2Jkd10gPSAnQHB4
Jztcblx0U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jkc10g
PSAnQCc7XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFsbFti
ZGNdID0gJ3JnYihALCBALCBAKSc7XG59KTtcblxuaWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZ
KSBFbGVtZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3JvdW5kUG9z
aXRpb25YOiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307XG59KSgpO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0
aG9kcyB0byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVtZW50
cyBhbmQgdGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5jcmVkaXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9v
XShodHRwOi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQ
TCBMaWNlbnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS5cbiAgLSBW
aWV3cG9ydCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28u
Y29tL3l1aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20v
eXVpL2xpY2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHlsZV1c
blxucHJvdmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9u
KCl7XG5cbnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG5cdGNo
aWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbGVtZW50LnN0eWxlLmhlaWdo
dCA9ICcwJztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xudmFyIGJyb2tlbk9mZnNldFBh
cmVudCA9IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQpO1xuZWxlbWVudCA9IGNoaWxk
ID0gbnVsbDtcblxudmFyIGhlaWdodENvbXBvbmVudHMgPSBbJ2hlaWdodCcsICdwYWRkaW5nVG9w
JywgJ3BhZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lkdGgnLCAnYm9yZGVyQm90dG9tV2lkdGgn
XSxcblx0d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5n
UmlnaHQnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnXTtcblxudmFyIHN2
Z0NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5cblx0dmFyIGdDUyA9IHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7eDogMCwgeTogMH07XG5cblx0aGVpZ2h0
Q29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnkgKz0gcGFyc2VGbG9h
dChnQ1NbY3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mp
e1xuXHRcdGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0cmV0dXJu
IGJvdW5kcztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJuIHN0
eWxlU3RyaW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpO1xufTtc
blxudmFyIGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gaXNPZmZzZXQo
ZWwpIHx8ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChlbC50YWdOYW1lKTtcbn07XG5cbkVs
ZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSl7XG5cdFx0aWYg
KGlzQm9keSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKHgsIHkpO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExlZnQgPSB4O1xuXHRcdFx0dGhpcy5zY3Jv
bGxUb3AgPSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTaXplOiBm
dW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygp
LmdldFNpemUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRcdC8vIFRoaXMgaWYgY2xhdXNlIGlzIGJl
Y2F1c2UgSUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvZiBlbGVt
ZW50cyB3aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRcdGlmICghd2luZG93LmdldENvbXB1dGVk
U3R5bGUpIHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRIZWlnaHR9
O1xuXHRcdC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIsIGNhbGxp
bmcgYHN2Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4ZWQgdGhl
IHN2ZyBzaXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxh
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0aWYgKHRoaXMuZ2V0KCd0YWcnKSA9PSAn
c3ZnJykgcmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhpcyk7XG5cblx0XHR0cnkge1xuXHRcdFx0
dmFyIGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRyZXR1cm4g
e3g6IGJvdW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07XG5cdFx0fSBjYXRjaCAoZSl7XG5c
dFx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1cblx0fSxcblxuXHRnZXRTY3JvbGxTaXpl
OiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRv
dygpLmdldFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsV2lkdGgsIHk6
IHRoaXMuc2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7
XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQsIHk6IHRoaXMuc2Nyb2xsVG9wfTtcblx0
fSxcblxuXHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5w
YXJlbnROb2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHR3aGlsZSAoZWxlbWVudCAm
JiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5zY3JvbGxM
ZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdGVsZW1l
bnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0
fSxcblxuXHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9mZnNldFBhcmVudCA/IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5
bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5c
blx0XHR2YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24n
KSA9PSAnc3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6IGlzT2Zmc2V0O1xuXHRcdHdoaWxlICgo
ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xuXHRcdFx0aWYgKGlzT2Zmc2V0Q2hlY2so
ZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSA6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxl
bWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0
dXJuIG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50
O1xuXHRcdH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRnZXRPZmZz
ZXRzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3QgPSB0aGlz
LmdldEJvdW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlmIChoYXNHZXRCb3VuZGluZ0NsaWVudFJl
Y3Qpe1xuXHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcblx0
XHRcdFx0aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1l
bnQpLFxuXHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3JvbGwoKSxcblx0XHRcdFx0ZWxl
bVNjcm9sbHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0XHRcdFx0aXNGaXhlZCA9IChzdHlsZVN0
cmluZyh0aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKTtcblxuXHRcdFx0cmV0dXJuIHtcblx0
XHRcdFx0eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy54ICsgKChpc0ZpeGVk
KSA/IDAgOiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGllbnRMZWZ0LFxuXHRcdFx0XHR5OiBib3Vu
ZC50b3AudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNj
cm9sbC55KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBlbGVt
ZW50ID0gdGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0aWYgKGlzQm9keSh0aGlz
KSkgcmV0dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVt
ZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDtcblx0XHRcdHBv
c2l0aW9uLnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5cblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50
Lm9mZnNldFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0
Z2V0UG9zaXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtcblx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5n
ZXRPZmZzZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmdldFNjcm9sbHMoKTtcblx0XHR2YXIg
cG9zaXRpb24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAtIHNjcm9sbC54LFxuXHRcdFx0eTogb2Zm
c2V0LnkgLSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRpZiAocmVsYXRpdmUgJiYgKHJlbGF0aXZl
ID0gZG9jdW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0XHR2YXIgcmVsYXRpdmVQb3NpdGlvbiA9
IHJlbGF0aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRyZXR1cm4ge3g6IHBvc2l0aW9uLnggLSBy
ZWxhdGl2ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJlbGF0aXZlKSwgeTogcG9zaXRpb24ueSAt
IHJlbGF0aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihyZWxhdGl2ZSl9O1xuXHRcdH1cblx0XHRy
ZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGVsZW1l
bnQpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENv
b3JkaW5hdGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihlbGVtZW50
KSxcblx0XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHR2YXIgb2JqID0ge1xuXHRcdFx0
bGVmdDogcG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9zaXRpb24ueSxcblx0XHRcdHdpZHRoOiBz
aXplLngsXG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRcdH07XG5cdFx0b2JqLnJpZ2h0ID0gb2Jq
LmxlZnQgKyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRvbSA9IG9iai50b3AgKyBvYmouaGVpZ2h0
O1xuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlvbihv
Ymope1xuXHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBvYmoueCAtIHN0eWxlTnVtYmVyKHRoaXMs
ICdtYXJnaW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmoueSAtIHN0eWxlTnVtYmVyKHRoaXMsICdt
YXJnaW4tdG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlvbihvYmop
e1xuXHRcdHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihvYmopKTtc
blx0fVxuXG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRvd10uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVu
dCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGllbnRXaWR0aCwgeTogZG9jLmNsaWVudEhl
aWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdHZhciB3aW4gPSB0
aGlzLmdldFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVy
biB7eDogd2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3JvbGxMZWZ0LCB5OiB3aW4ucGFnZVlPZmZz
ZXQgfHwgZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24o
KXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKSxcblx0XHRcdG1pbiA9IHRo
aXMuZ2V0U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5c
dFx0cmV0dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xsV2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgs
IG1pbi54KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQs
IG1pbi55KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHt4OiAwLCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHJldHVybiB7dG9wOiAwLCBsZWZ0OiAw
LCBib3R0b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwgaGVpZ2h0OiBzaXplLnksIHdpZHRoOiBz
aXplLnh9O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRlIG1ldGhvZHNcblxudmFyIHN0eWxlU3Ry
aW5nID0gRWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xuXG5mdW5jdGlvbiBzdHlsZU51bWJlcihl
bGVtZW50LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHlsZSkudG9J
bnQoKSB8fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1
cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbn1cblxuZnVuY3Rp
b24gbGVmdEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdi
b3JkZXItbGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7XG5cdHJl
dHVybiAoL14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7XG59XG5cbmZ1
bmN0aW9uIGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7XG5cdHZhciBkb2MgPSBlbGVtZW50Lmdl
dERvY3VtZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2Rl
ID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xufVxuXG59KSgpO1xuXG4v
L2FsaWFzZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7IC8vY29t
cGF0YWJpbGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdpbXBsZW1l
bnQnLCB7XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNp
emUoKS55O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LmdldFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbExlZnQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDtcblx0fSxcblxuXHRnZXRTY3Jv
bGxIZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLnk7
XG5cdH0sXG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMu
Z2V0U2Nyb2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiB0aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxcblxuXHRnZXRMZWZ0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDtcblx0fVxuXG59KTtcblxuLypcbi0t
LVxuXG5uYW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGJhc2ljIGFuaW1hdGlv
biBsb2dpYyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3RoZXIgRnggQ2xhc3Nlcy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9u
cywgQ2xhc3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBGeFxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bigpe1xuXG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBb
Q2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHtc
blx0XHQvKlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRvbkNhbmNlbDogbmlsLFxuXHRcdG9uQ29t
cGxldGU6IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAsXG5cdFx0dW5pdDogZmFsc2UsXG5cdFx0
ZHVyYXRpb246IDUwMCxcblx0XHRmcmFtZXM6IG51bGwsXG5cdFx0ZnJhbWVTa2lwOiB0cnVlLFxu
XHRcdGxpbms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9u
cyl7XG5cdFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7XG5cdFx0dGhpcy5z
ZXRPcHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0cmV0dXJuIC0oTWF0aC5jb3MoTWF0aC5Q
SSAqIHApIC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5cblx0c3RlcDogZnVuY3Rpb24obm93KXtc
blx0XHRpZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7XG5cdFx0XHR2YXIgZGlmZiA9ICh0aGlz
LnRpbWUgIT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRpZmYgLyB0
aGlzLmZyYW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRpbWUgPSBub3c7XG5cdFx0XHR0aGlzLmZy
YW1lICs9IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSsrO1xuXHRcdH1c
blxuXHRcdGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpe1xuXHRcdFx0dmFyIGRlbHRhID0g
dGhpcy50cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7XG5cdFx0XHR0aGlzLnNl
dCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNv
bXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0XHR9
XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdHJldHVybiBub3c7XG5cdH0sXG5c
blx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRyZXR1cm4gRnguY29t
cHV0ZShmcm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRc
dGlmICghdGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9w
dGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4g
dHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFy
Z3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtc
blx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVj
ayhmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZnJvbSA9IGZyb207XG5cdFx0dGhp
cy50byA9IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCkgPyAw
IDogLTE7XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zaXRpb24gPSB0aGlz
LmdldFRyYW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVzID0gdGhpcy5vcHRpb25zLmZyYW1lcywg
ZnBzID0gdGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZHVyYXRpb247
XG5cdFx0dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9uc1tkdXJhdGlvbl0gfHwgZHVyYXRpb24u
dG9JbnQoKTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXHRcdHRoaXMu
ZnJhbWVzID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbiAvIHRoaXMuZnJhbWVJ
bnRlcnZhbCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycp
e1xuXHRcdFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHRo
aXMuZmlyZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0cHVzaEluc3RhbmNlLmNh
bGwodGhpcywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBmdW5jdGlv
bigpe1xuXHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7
XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRc
dGlmICh0aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQo
J2NvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxDaGFpbigp
KSB0aGlzLmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9
IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVjdCk7XG5c
dFx0XHR9XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5zdWJqZWN0ID09PSB0aGlzID8gbnVsbCA6
IHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNl
bDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRp
bWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZw
cyk7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLmZpcmVFdmVu
dCgnY2FuY2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7XG5cdFx0XHR0aGlzLnJlamVj
dCh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwYXVz
ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRp
bWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZw
cyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlc3VtZTogZnVuY3Rpb24o
KXtcblx0XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlz
Lm9wdGlvbnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbdGhpcy5vcHRpb25zLmZwc107XG5c
dFx0cmV0dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTtcblx0fSxcblxuXHRpc1BhdXNl
ZDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1lcykgJiYg
IXRoaXMuaXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5cbkZ4LmNvbXB1dGUgPSBmdW5jdGlvbihm
cm9tLCB0bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207XG59
O1xuXG5GeC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6
IDEwMDB9O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZhciBpbnN0YW5jZXMgPSB7fSwgdGltZXJz
ID0ge307XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtcblx0dmFyIG5vdyA9IERhdGUubm93KCk7
XG5cdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGluc3RhbmNlID0g
dGhpc1tpXTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTtcblx0fVxufTtc
blxudmFyIHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFu
Y2VzW2Zwc10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10pO1xuXHRsaXN0LnB1c2godGhpcyk7XG5c
dGlmICghdGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0gbG9vcC5wZXJpb2RpY2FsKE1hdGgucm91
bmQoMTAwMCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFyIHB1bGxJbnN0YW5jZSA9IGZ1bmN0aW9u
KGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc107XG5cdGlmIChsaXN0KXtcblx0XHRs
aXN0LmVyYXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5sZW5ndGggJiYgdGltZXJzW2Zwc10pe1xu
XHRcdFx0ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRcdFx0dGltZXJzW2Zwc10gPSBjbGVhcklu
dGVydmFsKHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1c
blxubmFtZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ1NTIGFuaW1hdGlv
biBsb2dpYy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4LkVsZW1lbnRzLlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtGeCwgRWxlbWVudC5TdHlsZV1c
blxucHJvdmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5cbkZ4LkNTUyA9IG5ldyBDbGFzcyh7XG5c
blx0RXh0ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVjdFxu
XG5cdHByZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpe1xuXHRcdHZh
bHVlcyA9IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0XHR2YXIgZnJvbSA9IHZhbHVlc1swXSwg
dG8gPSB2YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51bGwpe1xuXHRcdFx0dG8gPSBmcm9tO1xu
XHRcdFx0ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0dmFyIHVuaXQg
PSB0aGlzLm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRo
dWIuY29tL3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4LmpzI0wyOTlcblx0XHRcdGlmICh1bml0
ICYmIGZyb20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmluZycgJiYgZnJvbS5zbGljZSgtdW5pdC5s
ZW5ndGgpICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9tKSAhPSAwKXtcblx0XHRcdFx0ZWxlbWVu
dC5zZXRTdHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxl
bWVudC5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gSUUgYW5kIE9wZXJh
IHN1cHBvcnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhcblx0XHRcdFx0aWYgKCEoL3B4JC8udGVz
dCh2YWx1ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbKCdwaXhlbC0nICsg
cHJvcGVydHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5c
dFx0XHRcdFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJpay5lYWUu
bmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxXG5cdFx0XHRc
dFx0XHR2YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQu
c3R5bGUubGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHls
ZS5waXhlbExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0O1xuXHRc
dFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9tID0gKHRvIHx8IDEpIC8gKHBhcnNlRmxv
YXQodmFsdWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJvbSkgfHwgMCk7XG5cdFx0XHRcdGVsZW1l
bnQuc2V0U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0
cmV0dXJuIHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9O1xuXHR9
LFxuXG5cdC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheVxuXG5cdHBhcnNlOiBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5jb252ZXJ0KHZhbHVlKSgpO1xuXHRcdHZh
bHVlID0gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDogQXJy
YXkuY29udmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2YWwpe1xu
XHRcdFx0dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRc
dE9iamVjdC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpe1xuXHRcdFx0XHRp
ZiAoZm91bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBhcnNlZCA9IHBhcnNlci5wYXJzZSh2YWwp
O1xuXHRcdFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBh
cnNlZCwgcGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7XG5cdFx0XHRmb3VuZCA9IGZvdW5kIHx8
IHt2YWx1ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307XG5cdFx0XHRyZXR1
cm4gZm91bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9jb21wdXRlcyBieSBhIGZyb20gYW5kIHRv
IHByZXBhcmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBhcnNlcnMuXG5cblx0Y29tcHV0ZTogZnVu
Y3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgY29tcHV0ZWQgPSBbXTtcblx0XHQoTWF0
aC5taW4oZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpe1xuXHRcdFx0
Y29tcHV0ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1
ZSwgdG9baV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pO1xuXHRcdH0p
O1xuXHRcdGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdmeDpjc3M6dmFsdWUn
KTtcblx0XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5cblx0Ly9zZXJ2ZXMgdGhlIHZhbHVlIGFz
IHNldHRhYmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRpZiAodHlw
ZU9mKHZhbHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtc
blx0XHR2YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7XG5c
dFx0XHRyZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52YWx1
ZSwgdW5pdCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXR1cm5lZDtcblx0fSxcblxuXHQvL3Jl
bmRlcnMgdGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5cblx0cmVuZGVyOiBmdW5jdGlvbihlbGVt
ZW50LCBwcm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVy
dHksIHRoaXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0fSxcblxuXHQvL3NlYXJjaGVzIGluc2lk
ZSB0aGUgcGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVzIGZvciBhIHNlbGVjdG9yXG5cblx0c2Vh
cmNoOiBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYgKEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0p
IHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xuXHRcdHZhciB0byA9IHt9LCBzZWxlY3Rv
clRlc3QgPSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9yLmVzY2FwZVJlZ0V4cCgpICsgJyQnKTtc
blxuXHRcdHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRBcnJheS5l
YWNoKHJ1bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRcdFx0aWYgKHJ1bGUubWVkaWEpe1xuXHRc
dFx0XHRcdHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpO1xuXHRcdFx0
XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGUpIHJldHVybjtc
blx0XHRcdFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxlLnNlbGVjdG9yVGV4dCkgPyBydWxlLnNl
bGVjdG9yVGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0aW9uKG0pe1xuXHRcdFx0XHRcdHJldHVy
biBtLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDogbnVsbDtcblx0XHRcdFx0aWYgKCFzZWxl
Y3RvclRleHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNlbGVjdG9yVGV4dCkpIHJldHVybjtcblx0
XHRcdFx0T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBzdHlsZSl7
XG5cdFx0XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0U3R5bGVz
W3N0eWxlXSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5
bGVdKTtcblx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9ecmdiLykudGVzdCh2YWx1ZSkpID8gdmFs
dWUucmdiVG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5c
blx0XHRBcnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVldCl7XG5c
dFx0XHR2YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0XHRpZiAoaHJlZiAmJiBocmVmLmluZGV4
T2YoJzovLycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgPT0gLTEpIHJl
dHVybjtcblx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xu
XHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gRnguQ1NTLkNh
Y2hlW3NlbGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xuXG5GeC5DU1MuQ2FjaGUgPSB7fTtcblxu
RnguQ1NTLlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtcblx0XHRwYXJzZTogZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4g
dmFsdWUuaGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNo
KC8oXFxkKyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykpKSA/IFt2YWx1ZVsxXSwgdmFsdWVbMl0s
IHZhbHVlWzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwg
dG8sIGRlbHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7XG5c
dFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0sIGRlbHRh
KSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
XHRyZXR1cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0fVxuXHR9LFxuXG5cdE51bWJlcjoge1xu
XHRcdHBhcnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1dGU6IEZ4LmNvbXB1dGUsXG5cdFx0c2Vy
dmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRcdHJldHVybiAodW5pdCkgPyB2YWx1ZSAr
IHVuaXQgOiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0U3RyaW5nOiB7XG5cdFx0cGFyc2U6IEZ1
bmN0aW9uLmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKHplcm8sIG9uZSl7
XG5cdFx0XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHplcm8pe1xu
XHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5cbn07XG5cblxuXG4vKlxuLS0tXG5cbm5h
bWU6IEZ4Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0
byB0cmFuc2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQg
dXNpbmcgYW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3Zp
ZGVzOiBGeC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1vcnBoID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9u
cyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVu
dCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihu
b3cpe1xuXHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJpbmcnKSBub3cgPSB0aGlzLnNlYXJjaChu
b3cpO1xuXHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHAs
IG5vd1twXSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIG5vdyA9IHt9O1xu
XHRcdGZvciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0gdGhpcy5wYXJlbnQoZnJvbVtwXSwgdG9b
cF0sIGRlbHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihw
cm9wZXJ0aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydGllcykpIHJldHVybiB0aGlz
O1xuXHRcdGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAnc3RyaW5nJykgcHJvcGVydGllcyA9IHRo
aXMuc2VhcmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBmcm9tID0ge30sIHRvID0ge307XG5cdFx0
Zm9yICh2YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBh
cmUodGhpcy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3BdKTtcblx0XHRcdGZyb21bcF0gPSBwYXJz
ZWQuZnJvbTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRvO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cy5wYXJlbnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubW9y
cGggPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgnbW9ycGgn
KS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9ycGggPSB0aGlzLnJldHJpZXZlKCdtb3Jw
aCcpO1xuXHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9ycGggPSBuZXcgRnguTW9ycGgodGhpcywg
e2xpbms6ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTtcblx0
XHR9XG5cdFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtc
blxuXHRtb3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLnN0YXJ0
KHByb3BzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1l
OiBGeC5UcmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2YgYWR2YW5j
ZWQgdHJhbnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nlcy5cblxu
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWFzaW5nIEVxdWF0
aW9ucyBieSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2lu
Zy8+LCBtb2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29scy5cblxu
cmVxdWlyZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFuc2l0aW9uc1xuXG4uLi5cbiovXG5cbkZ4
LmltcGxlbWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHJh
bnMgPSB0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJ
bk91dDtcblx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdzdHJpbmcnKXtcblx0XHRcdHZhciBkYXRh
ID0gdHJhbnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5zID0gRnguVHJhbnNpdGlvbnM7XG5cdFx0
XHR0cmFucyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5zW2RhdGFbMF0uY2FwaXRhbGl6ZSgpXTtc
blx0XHRcdGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5zWydlYXNlJyArIGRhdGFbMV0uY2FwaXRh
bGl6ZSgpICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0YWxpemUoKSA6ICcnKV07XG5cdFx0fVxu
XHRcdHJldHVybiB0cmFucztcblx0fVxuXG59KTtcblxuRnguVHJhbnNpdGlvbiA9IGZ1bmN0aW9u
KHRyYW5zaXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9IEFycmF5LmNvbnZlcnQocGFyYW1zKTtc
blx0dmFyIGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHRyYW5zaXRpb24ocG9z
LCBwYXJhbXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHtcblx0XHRl
YXNlSW46IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJu
IDEgLSB0cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7XG5cdFx0fSxcblx0XHRlYXNlSW5PdXQ6
IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0aW9uKDIg
KiBwb3MsIHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFyYW1zKSkp
IC8gMjtcblx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMgPSB7XG5cblx0bGluZWFy
OiBmdW5jdGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVybztcblx0fVxuXG59O1xuXG5cblxuRngu
VHJhbnNpdGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpe1xuXHRmb3IgKHZhciB0
cmFuc2l0aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5l
dyBGeC5UcmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTtcbn07XG5cbkZ4LlRyYW5z
aXRpb25zLmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0
aC5wb3cocCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxuXG5cdEV4cG86IGZ1bmN0aW9uKHApe1xu
XHRcdHJldHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAxKSk7XG5cdH0sXG5cblx0Q2lyYzogZnVu
Y3Rpb24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xuXHR9LFxu
XG5cdFNpbmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MocCAqIE1hdGgu
UEkgLyAyKTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlvbihwLCB4KXtcblx0XHR4ID0geCAmJiB4
WzBdIHx8IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEpICogcCAt
IHgpO1xuXHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24ocCl7XG5cdFx0dmFyIHZhbHVlO1xuXHRc
dGZvciAodmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89IDIpe1xuXHRcdFx0aWYgKHAg
Pj0gKDcgLSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZhbHVlID0gYiAqIGIgLSBNYXRoLnBvdygo
MTEgLSA2ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5c
dFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxuXHRFbGFzdGljOiBmdW5jdGlvbihwLCB4
KXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAtLXApICogTWF0aC5jb3MoMjAgKiBwICog
TWF0aC5QSSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtcblx0fVxuXG59KTtcblxuWydRdWFkJywg
J0N1YmljJywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBpKXtc
blx0RnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihmdW5jdGlv
bihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpO1xuXHR9KTtcbn0pO1xuXG4vKlxu
LS0tXG5cbm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZSwg
ZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVudC5cblxu
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlk
ZXM6IFtGeC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVtZW50LmhpZ2hsaWdodF1cblxuLi4uXG4q
L1xuXG5GeC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGlu
aXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9
IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9w
dGlvbnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7XG5cdFx0aWYg
KGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRub3cgPSBwcm9wZXJ0eTtcblx0XHRcdHBy
b3BlcnR5ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7XG5cdFx0fVxu
XHRcdHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRpb25z
LnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9w
ZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJvbSwgdG8p
KSByZXR1cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTtc
blx0XHR0aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Muc2hpZnQo
KTtcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhpcy5wcm9w
ZXJ0eSwgYXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBwYXJzZWQu
dG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7XG5cblx0c2V0
OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwoKS5zZXRP
cHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rp
b24oKXtcblx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpO1xuXHRcdGlmICgh
dHdlZW4pe1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdjYW5jZWwn
fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTtcblx0XHR9XG5cdFx0cmV0dXJu
IHR3ZWVuO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHR0d2VlbjogZnVu
Y3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5zdGFydChw
cm9wZXJ0eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZhZGU6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdldCgndHdlZW4nKSwgbWV0aG9kLCBhcmdz
ID0gWydvcGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyksIHRvZ2dsZTtcblx0XHRpZiAoYXJnc1sx
XSA9PSBudWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5cdFx0c3dpdGNoIChhcmdzWzFdKXtcblx0
XHRcdGNhc2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0
XHRjYXNlICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRc
dGNhc2UgJ3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpm
bGFnJywgdGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpO1xuXHRcdFx0XHRtZXRob2QgPSAn
c3RhcnQnO1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/IDAgOiAxO1xuXHRcdFx0XHR0aGlzLnN0
b3JlKCdmYWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRcdHRvZ2dsZSA9IHRydWU7XG5cdFx0XHRc
dGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0gJ3N0YXJ0Jztcblx0XHR9XG5cdFx0aWYg
KCF0b2dnbGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTtcblx0XHRmYWRlW21ldGhvZF0u
YXBwbHkoZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xu
XG5cdFx0aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmls
aXR5JywgdG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtcblx0XHR9IGVsc2UgaWYgKHRv
ICE9IDApe1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxlbmd0aCl7XG5cdFx0XHRcdGZhZGUuY2hh
aW4oZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxp
dHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHRcdH0p
O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2
aXNpYmxlJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rp
b24oKXtcblx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpKSByZXR1
cm47XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4n
KTtcblx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVuZCl7XG5c
dFx0aWYgKCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdp
bmFsJywgdGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpKTtcblx0XHRcdGVuZCA9IChl
bmQgPT0gJ3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBlbmQ7XG5cdFx0fVxuXHRcdHZhciB0d2Vl
biA9IHRoaXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVuLnN0YXJ0KCdiYWNrZ3JvdW5kLWNvbG9y
Jywgc3RhcnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlz
LnNldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9y
aWdpbmFsJykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWluKCk7XG5cdFx0fS5iaW5kKHRoaXMpKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0
XG5cbmRlc2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBVc2Vz
IFhNTEhUVFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWly
ZXM6IFtPYmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5h
YmxlLCBCcm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVzdFxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bigpe1xuXG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sXG5cdHByb2dyZXNzU3VwcG9ydCA9ICgn
b25wcm9ncmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVzdCk7XG5cbnZhciBSZXF1ZXN0ID0gdGhp
cy5SZXF1ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywg
T3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHsvKlxuXHRcdG9uUmVxdWVz
dDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCwgeGhyKXt9
LFxuXHRcdG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Db21wbGV0
ZTogZnVuY3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sXG5cdFx0b25TdWNj
ZXNzOiBmdW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKXt9LFxuXHRcdG9uRmFpbHVy
ZTogZnVuY3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0aW9uOiBmdW5jdGlvbihoZWFkZXJOYW1l
LCB2YWx1ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSxcblx0XHR1c2VyOiAnJyxc
blx0XHRwYXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqL1xuXHRcdHVy
bDogJycsXG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0J1gtUmVxdWVzdGVk
LVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0J0FjY2VwdCc6ICd0ZXh0L2phdmFzY3Jp
cHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH0sXG5c
dFx0YXN5bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxzZSxcblx0XHRtZXRob2Q6ICdwb3N0Jyxc
blx0XHRsaW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nlc3M6IG51bGwsXG5cdFx0ZW11bGF0aW9u
OiB0cnVlLFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5cdFx0ZW5jb2Rpbmc6ICd1dGYtOCcsXG5c
dFx0ZXZhbFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxSZXNwb25zZTogZmFsc2UsXG5cdFx0dGlt
ZW91dDogMCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0
aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRc
dHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlzLm9wdGlv
bnMuaGVhZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpe1xuXHRcdHZh
ciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAhdGhpcy5y
dW5uaW5nKSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0
dXMgPSAwO1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBzdGF0
dXMgPSB4aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0dXMgPSAoc3RhdHVzID09IDEyMjMpID8g
MjA0IDogc3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0g
eGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xl
YXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxu
XG5cdFx0dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5yZXNwb25zZVRleHQgfHwgJycs
IHhtbDogdGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaXNTdWNj
ZXNzLmNhbGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRcdFx0dGhpcy5zdWNjZXNzKHRoaXMucmVz
cG9uc2UudGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuZmFp
bHVyZSgpO1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc3RhdHVz
ID0gdGhpcy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMw
MCk7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAhIXRoaXMu
cnVubmluZztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0czogZnVuY3Rpb24odGV4dCl7XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwgKC8oZWNtYXxqYXZhKXNjcmlwdC8pLnRl
c3QodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpKSkgcmV0dXJuIEJyb3dzZXIuZXhlYyh0
ZXh0KTtcblx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3Jp
cHRzKTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0LCB4bWwpe1xuXHRcdHRoaXMu
b25TdWNjZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4dCksIHhtbCk7XG5cdFx0dGhpcy5yZXNv
bHZlKHt0ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9LFxuXG5cdG9uU3VjY2VzczogZnVuY3Rp
b24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVFdmVu
dCgnc3VjY2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7XG5cdH0sXG5cblx0ZmFpbHVyZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFz
b246ICdmYWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdG9uRmFpbHVyZTogZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQoJ2ZhaWx1
cmUnLCB0aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCl7XG5c
dFx0dGhpcy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxc
blxuXHRwcm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdwcm9n
cmVzcycsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHR0aW1lb3V0OiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0JywgdGhpcy54aHIpO1xuXHRcdHRoaXMucmVq
ZWN0KHtyZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdHNldEhl
YWRlcjogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHRoaXMuaGVhZGVyc1tuYW1lXSA9IHZh
bHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldEhlYWRlcjogZnVuY3Rpb24obmFt
ZSl7XG5cdFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHJldHVy
biB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcblx0XHR9LmJpbmQodGhpcykpO1xu
XHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1
cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2Nh
bmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0
aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxz
ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHNlbmQ6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7XG5cblx0
XHR0aGlzLm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5vcHRpb25zLmlzU3VjY2VzcyB8fCB0aGlz
LmlzU3VjY2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0dmFyIHR5cGUgPSB0
eXBlT2Yob3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnZWxl
bWVudCcpIG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307XG5cblx0XHR2YXIgb2xkID0gdGhpcy5v
cHRpb25zO1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJs
OiBvbGQudXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTtcblx0XHR2YXIgZGF0YSA9
IG9wdGlvbnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlvbnMudXJsKSwgbWV0aG9kID0gb3B0aW9u
cy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3aXRjaCAodHlwZU9mKGRhdGEpKXtcblx0
XHRcdGNhc2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVyeVN0cmlu
ZygpOyBicmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRhID0gT2Jq
ZWN0LnRvUXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5m
b3JtYXQpe1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3JtYXQ9JyArIHRoaXMub3B0aW9ucy5mb3Jt
YXQ7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0ICsgJyYnICsgZGF0YSA6IGZvcm1hdDtc
blx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAncG9z
dCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsg
bWV0aG9kO1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21l
dGhvZDtcblx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRp
b25zLnVybEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRc
dFx0dmFyIGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5lbmNvZGluZykgPyAnOyBjaGFyc2V0PScg
KyB0aGlzLm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0XHRcdHRoaXMuaGVhZGVyc1snQ29udGVu
dC10eXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyArIGVuY29kaW5n
O1xuXHRcdH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFt
ZTtcblxuXHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwubGFzdEluZGV4T2YoJy8nKTtcblx0XHRp
ZiAodHJpbVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9mKCcjJykp
ID4gLTEpIHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9uKTtcblxuXHRcdGlmICh0aGlz
Lm9wdGlvbnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8g
JyYnIDogJz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xuXG5cdFx0aWYgKGRhdGEgJiYgKG1ldGhv
ZCA9PSAnZ2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScpKXtcblx0XHRcdHVybCArPSAodXJsLmlu
ZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRhdGE7XG5cdFx0XHRkYXRhID0gbnVsbDtc
blx0XHR9XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9y
dCl7XG5cdFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlzLmxvYWRzdGFydC5iaW5kKHRoaXMpO1xu
XHRcdFx0eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7XG5cdFx0fVxu
XG5cdFx0eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCwgdGhpcy5vcHRpb25zLmFz
eW5jLCB0aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtcblx0XHRpZiAo
KHRoaXMub3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYmICd3aXRoQ3JlZGVudGlhbHMnIGluIHho
cikgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblx0XHR4aHIub25yZWFkeXN0YXRlY2hh
bmdlID0gdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG5cblx0XHRPYmplY3QuZWFjaCh0
aGlzLmhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
eGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0
XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7XG5cdFx0XHRc
dHRoaXMucmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24nLCB4aHI6IHhociwgZXhjZXB0aW9uOiBl
fSk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0
YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUoe3JlYXNvbjog
J3NlbmQnfSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7XG5cdFx0eGhy
LnNlbmQoZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25TdGF0ZUNo
YW5nZSgpO1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aW1lb3V0KSB0aGlzLnRpbWVyID0g
dGhpcy50aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50aW1lb3V0LCB0aGlzKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1
bm5pbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHZhciB4
aHIgPSB0aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5c
dFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtc
blx0XHR9XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9n
cmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5c
dFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5maXJlRXZlbnQo
J2NhbmNlbCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6IHhocn0p
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuWydn
ZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VUJywgJ1BP
U1QnLCAnUFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlvbihtZXRo
b2Qpe1xuXHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIgb2JqZWN0
ID0ge1xuXHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9O1xuXHRcdGlmIChkYXRhICE9IG51bGwp
IG9iamVjdC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7XG5cdH07
XG59KTtcblxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbkVsZW1lbnQuUHJvcGVydGll
cy5zZW5kID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIHNlbmQgPSB0
aGlzLmdldCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNlbmQuc2V0T3B0aW9ucyhvcHRpb25zKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNl
bmQgPSB0aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0aWYgKCFzZW5kKXtcblx0XHRcdHNlbmQg
PSBuZXcgUmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCBtZXRo
b2Q6IHRoaXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2FjdGlvbicp
XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNlbmQ6
IGZ1bmN0aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7XG5cdFx0
c2VuZGVyLnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJsIHx8IHNlbmRlci5vcHRpb25zLnVybH0p
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IFJlcXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVz
dCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIVE1M
IHJlc3BvbnNlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJlcXVlc3QuSFRNTFxuXG4uLi5cbiovXG5c
blJlcXVlc3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRv
cHRpb25zOiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0XHRhcHBlbmQ6IGZhbHNlLFxuXHRcdGV2
YWxTY3JpcHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFsc2UsXG5cdFx0aGVhZGVyczoge1xuXHRc
dFx0QWNjZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5c
dFx0fVxuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBvcHRpb25z
ID0gdGhpcy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRyZXNwb25z
ZS5odG1sID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2NyaXB0KXtcblx0XHRcdHJlc3Bv
bnNlLmphdmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7XG5cblx0XHR2YXIgbWF0Y2ggPSByZXNw
b25zZS5odG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9pKTtcblx0
XHRpZiAobWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTtcblx0XHR2YXIgdGVtcCA9IG5l
dyBFbGVtZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblxuXHRcdHJlc3Bv
bnNlLnRyZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0cmVzcG9uc2UuZWxlbWVudHMgPSB0ZW1w
LmdldEVsZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7XG5cblx0XHRpZiAob3B0aW9ucy5m
aWx0ZXIpIHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50cztcblx0XHRpZiAob3B0aW9u
cy51cGRhdGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRvY3VtZW50LmlkKG9wdGlvbnMudXBkYXRl
KS5lbXB0eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB1cGRhdGUuYWRvcHQocmVzcG9u
c2UuZWxlbWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRt
bCk7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7XG5cdFx0XHR2YXIgYXBwZW5kID0g
ZG9jdW1lbnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSBy
ZXNwb25zZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVuZCk7XG5cdFx0XHRlbHNlIGFw
cGVuZC5hZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5l
dmFsU2NyaXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXG5cdFx0dGhp
cy5vblN1Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0
bWwsIHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dHJlZTogcmVzcG9u
c2UudHJlZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1lbnRzLCBodG1sOiByZXNwb25zZS5odG1s
LCBqYXZhc2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0fSk7XG5cdH1cblxufSk7XG5cbkVsZW1l
bnQuUHJvcGVydGllcy5sb2FkID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0
dmFyIGxvYWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpO1xuXHRcdGxvYWQuc2V0T3B0aW9u
cyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCdsb2FkJyk7XG5cdFx0aWYgKCFsb2FkKXtc
blx0XHRcdGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtkYXRhOiB0aGlzLCBsaW5rOiAnY2FuY2Vs
JywgdXBkYXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdsb2Fk
JywgbG9hZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2FkO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZ2V0KCdsb2FkJyku
c2VuZChBcnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDogVHlw
ZS5pc1N0cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxu
XG5uYW1lOiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5TZWVBbHNvOiA8aHR0cDovL3d3dy5qc29u
Lm9yZy8+XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl1cblxu
cHJvdmlkZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5l
ZCcpIHRoaXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBzcGVjaWFsID0g
eydcXGInOiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0JywgJ1xcbic6ICdcXFxcbicsICdcXGYnOiAn
XFxcXGYnLCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdcXFxcXCInLCAnXFxcXCc6ICdcXFxcXFxc
XCd9O1xuXG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXtcblx0cmV0dXJuIHNwZWNpYWxbY2hy
XSB8fCAnXFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSku
c2xpY2UoLTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHN0
cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAtOWEtZkEt
Rl17NH0pL2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXCJbXlwiXFxcXFxcblxccl0qXCJ8
dHJ1ZXxmYWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/L2cs
ICddJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csICcnKTtc
blxuXHRyZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50ZXN0KHN0cmluZyk7XG59O1xuXG5KU09O
LmVuY29kZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rpb24ob2JqKXtcblx0cmV0dXJuIEpTT04u
c3RyaW5naWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2JqKXtcblx0aWYgKG9iaiAmJiBvYmoudG9K
U09OKSBvYmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dpdGNoICh0eXBlT2Yob2JqKSl7XG5cdFx0
Y2FzZSAnc3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCInICsgb2JqLnJlcGxhY2UoL1tcXHgwMC1c
XHgxZlxcXFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5cdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0
cmV0dXJuICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7XG5cdFx0Y2Fz
ZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2YXIgc3RyaW5nID0gW107XG5cdFx0XHRP
YmplY3QuZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0XHR2YXIganNvbiA9
IEpTT04uZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYgKGpzb24pIHN0cmluZy5wdXNoKEpTT04u
ZW5jb2RlKGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICd7JyAr
IHN0cmluZyArICd9Jztcblx0XHRjYXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzogcmV0dXJu
ICcnICsgb2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1cm4gJ251bGwnO1xuXHR9XG5cblx0cmV0
dXJuIG51bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRydWU7XG5cblxuSlNPTi5kZWNvZGUgPSBm
dW5jdGlvbihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJpbmcp
ICE9ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRpZiAoc2VjdXJlID09IG51bGwpIHNlY3Vy
ZSA9IEpTT04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtcblx0XHRpZiAoSlNPTi5wYXJzZSkgcmV0
dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAoIUpTT04udmFsaWRhdGUoc3RyaW5nKSkg
dGhyb3cgbmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0
eSBpcyBlbmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4nKTtcblx0fVxuXG5cdHJl
dHVybiBldmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVx
dWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2
aW5nIEpTT04gZGF0YS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBbUmVxdWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJlcXVlc3QuSlNPTlxuXG4uLi5cbiovXG5c
blJlcXVlc3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRv
cHRpb25zOiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqL1xuXHRc
dHNlY3VyZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xu
XHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9iamVjdC5hcHBlbmQodGhpcy5oZWFkZXJz
LCB7XG5cdFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0J1gtUmVxdWVz
dCc6ICdKU09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xu
XHRcdHZhciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRqc29uID0gdGhpcy5yZXNwb25zZS5qc29u
ID0gSlNPTi5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25zLnNlY3VyZSk7XG5cdFx0fSBjYXRjaCAo
ZXJyb3Ipe1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7XG5c
dFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29uID09IG51bGwpe1xuXHRcdFx0dGhpcy5m
YWlsdXJlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub25TdWNjZXNzKGpzb24sIHRleHQp
O1xuXHRcdFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7XG5cdFx0fVxu
XHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENvb2tpZVxuXG5kZXNjcmlwdGlvbjogQ2xh
c3MgZm9yIGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29raWVzLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBCYXNlZCBvbiB0
aGUgZnVuY3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3JnKS5c
blxucmVxdWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxuXG5wcm92aWRlczogQ29va2llXG5cbi4u
LlxuKi9cblxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogT3B0aW9u
cyxcblxuXHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8nLFxuXHRcdGRvbWFpbjogZmFsc2UsXG5c
dFx0ZHVyYXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTogZmFsc2UsXG5cdFx0ZG9jdW1lbnQ6IGRv
Y3VtZW50LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRodHRwT25seTogZmFsc2Vcblx0fSxcblxu
XHRpbml0aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRcdHRoaXMua2V5ID0ga2V5
O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHR3cml0ZTogZnVuY3Rp
b24odmFsdWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW5jb2RlKSB2YWx1ZSA9IGVuY29kZVVS
SUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kb21haW4pIHZhbHVlICs9
ICc7IGRvbWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFpbjtcblx0XHRpZiAodGhpcy5vcHRpb25z
LnBhdGgpIHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoO1xuXHRcdGlmICh0
aGlzLm9wdGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRc
dFx0ZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgdGhpcy5vcHRpb25zLmR1cmF0aW9uICog
MjQgKiA2MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1ZSArPSAnOyBleHBpcmVzPScgKyBkYXRl
LnRvR01UU3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1
ZSArPSAnOyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaHR0cE9ubHkpIHZhbHVlICs9
ICc7IEh0dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0gdGhpcy5r
ZXkgKyAnPScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFkOiBmdW5j
dGlvbigpe1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUubWF0
Y2goJyg/Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtdKikn
KTtcblx0XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVsxXSkgOiBu
dWxsO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0bmV3IENvb2tpZSh0aGlz
LmtleSwgT2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9KSkud3Jp
dGUoJycpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5Db29raWUud3JpdGUgPSBm
dW5jdGlvbihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBv
cHRpb25zKS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29raWUucmVhZCA9IGZ1bmN0aW9uKGtleSl7
XG5cdHJldHVybiBuZXcgQ29va2llKGtleSkucmVhZCgpO1xufTtcblxuQ29va2llLmRpc3Bvc2Ug
PSBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlv
bnMpLmRpc3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxubmFtZTogRE9NUmVhZHlcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQu
RXZlbnRdXG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XVxuXG4uLi5cbiovXG5cbihm
dW5jdGlvbih3aW5kb3csIGRvY3VtZW50KXtcblxudmFyIHJlYWR5LFxuXHRsb2FkZWQsXG5cdGNo
ZWNrcyA9IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1lcixcblx0dGVzdEVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIGRvbXJlYWR5ID0gZnVuY3Rpb24oKXtc
blx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFyZWFkeSl7XG5cdFx0QnJvd3Nlci5sb2Fk
ZWQgPSByZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ0RPTUNvbnRl
bnRMb2FkZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBj
aGVjayk7XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHRcdHdpbmRvdy5m
aXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8gY2xlYW51cCBzY29wZSB2YXJzXG5cdGRv
Y3VtZW50ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsO1xufTtcblxudmFyIGNoZWNrID0g
ZnVuY3Rpb24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlmIChjaGVj
a3NbaV0oKSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1
cm4gZmFsc2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0
aW1lcik7XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEwKTtcbn07
XG5cbmRvY3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpO1xu
XG4vKjxsdElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmluaSBodHRw
Oi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkL1xuLy8gdGVzdEVsZW1lbnQu
ZG9TY3JvbGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBpbiB0aGUg
dG9wIHdpbmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlvbigpe1xuXHR0cnkge1xuXHRc
dHRlc3RFbGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUp
e31cblx0cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRvU2Nyb2xsIHdvcmtzIGFscmVhZHksIGl0
IGNhbid0IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJlYWR5XG4vLyAgIGUuZy4gaW4gYW4gaWZy
YW1lXG5pZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYgIWRvU2Nyb2xsV29ya3MoKSl7XG5cdGNo
ZWNrcy5wdXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91bGRQb2xsID0gdHJ1ZTtcbn1cbi8qPC9s
dElFOD4qL1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24o
KXtcblx0dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcblx0cmV0dXJuIChzdGF0ZSA9
PSAnbG9hZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUnKTtcbn0pO1xuXG5pZiAoJ29ucmVhZHlz
dGF0ZWNoYW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50LmFkZExpc3RlbmVyKCdyZWFkeXN0YXRl
Y2hhbmdlJywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xsID0gdHJ1ZTtcblxuaWYgKHNob3VsZFBv
bGwpIHBvbGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9tcmVhZHkgPSB7XG5cdG9uQWRkOiBmdW5j
dGlvbihmbil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxsKHRoaXMpO1xuXHR9XG59O1xuXG4vLyBN
YWtlIHN1cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZFxuRWxlbWVudC5FdmVudHMu
bG9hZCA9IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlm
IChsb2FkZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNhbGwodGhpcyk7XG5cdH0sXG5cdGNvbmRp
dGlvbjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9PSB3aW5kb3cpe1xuXHRcdFx0ZG9tcmVh
ZHkoKTtcblx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2FkO1xuXHRcdH1cblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY3VzdG9tIGxvYWQg
ZXZlbnRcbndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9uKCl7XG5cdGxvYWRlZCA9IHRy
dWU7XG59KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7XG4iCittb2R1bGUuZXhwb3J0cyA9ICIv
KiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBbVmFsZXJpbyBQcm9p
ZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1aWxkOiBodHRwczov
L21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdiMTczZDVkZWZmNjcz
ZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3JpcHRpb246IFRoZSBoZWFydCBv
ZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNvcHlyaWdodDog
Q29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHVi
LmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9vbHMgcHJvZHVjdGlvbiB0ZWFt
IChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJhdGlvbjpcbiAgLSBD
bGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0cDovL2RlYW4uZWR3
YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMpIDIwMDYgRGVhbiBF
ZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwOi8vb3BlbnNv
dXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAgLSBTb21lIGZ1bmN0aW9uYWxp
dHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3Byb3RvdHlwZWpzLm9yZykgQ29w
eXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtNSVQgTGljZW5zZV0oaHR0cDov
L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxucHJvdmlkZXM6IFtD
b3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRpdmVdXG5cbi4uLlxu
Ki9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJp
byBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuKi9cbihmdW5jdGlvbigp
e1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxuXHRidWlsZDogJzUy
OTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmInXG59O1xuXG4vLyB0eXBlT2Ys
IGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9mID0gZnVuY3Rpb24oaXRlbSl7
XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cdGlmIChpdGVtLiRmYW1pbHkg
IT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlmIChpdGVtLm5vZGVOYW1lKXtc
blx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnO1xuXHRcdGlmIChp
dGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3QoaXRlbS5ub2RlVmFsdWUpID8g
J3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlmICh0eXBlb2YgaXRlbS5sZW5n
dGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4gJ2FyZ3Vt
ZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24nO1xuXHR9
XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGluc3RhbmNlT2YgPSB0aGlzLmlu
c3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRlbSA9PSBudWxsKSBy
ZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9yIHx8IGl0
ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0aWYgKGNvbnN0cnVj
dG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0cnVjdG9yID0gY29uc3RydWN0
b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0
eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0ZW0gaW5zdGFuY2Vv
ZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhh
c093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1lcmFibGVzID0gdHJ1ZTtcbmZv
ciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMgPSBudWxsO1xuaWYgKGVudW1l
cmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHknLCAndmFsdWVPZicsICdpc1By
b3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3Rv
U3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JFYWNoT2JqZWN0RW51bWJlcmFi
bGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJhYmxlcykgZm9yICh2YXIgaSA9
IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVtZXJhYmxlc1tpXTtc
blx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIgY2FuIGRp
cmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRob3V0IHN3YXBwaW5n
IGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBmbi5j
YWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9sdElFOD4qL1xuXG4vLyBGdW5j
dGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0aW9uO1xuXG5GdW5j
dGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2
YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoYSA9PSBu
dWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdzdHJp
bmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFba10pO1xu
XHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShhLCBz
ZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxm
LmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufTtcblxu
RnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXtc
blx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5cdFx0dmFyIGFyZ3Ms
IHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhO1xuXHRcdGVs
c2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJndW1lbnRzO1xuXHRcdGVsc2Ug
aWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJncyl7XG5cdFx0XHRyZXN1bHQg
PSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgcmVzdWx0
W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7
XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24oa2V5LCB2
YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG5GdW5j
dGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRoaXMu
cHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuLy8gRnJvbVxu
XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbkFycmF5LmNvbnZlcnQgPSBm
dW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHRyZXR1cm4g
KFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnKSA/ICh0
eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2UuY2FsbChpdGVtKSA6IFtpdGVt
XTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuICh0
eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtc
blx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJldHVybiBpc0Zpbml0ZShudW1i
ZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252ZXJ0ID0gZnVuY3Rpb24oaXRl
bSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVuY3Rpb24uZnJvbSA9IEZ1bmN0
aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0O1xuU3RyaW5nLmZyb20g
PSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxuXG5GdW5jdGlvbi5pbXBsZW1l
bnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVuID0gdHJ1ZTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
JHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8vIFR5
cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3Qpe1xuXHRp
ZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHZhciB0
eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiAodHlwZU9mKGl0ZW0pID09
IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hlY2s7XG5c
dFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5wcm90b3R5cGUuJGZhbWlseSA9
IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9KS5oaWRlKCk7XG5c
dFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBudWxsO1xu
XG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBlO1xu
XHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVjdDtcblxuXHRyZXR1cm4gb2Jq
ZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxu
VHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIChpdGVtICE9IG51
bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwoaXRl
bSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFyIGhvb2tzID0ge307XG5cbnZh
ciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0eXBlT2Yob2JqZWN0
LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAoaG9va3NbdHlwZV0gPSBbXSk7
XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1l
dGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZhciBob29rcyA9IGhvb2tzT2Yo
dGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKyl7XG5cdFx0
dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykgaW1w
bGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhvb2suY2FsbCh0aGlz
LCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3VzID0gdGhpcy5wcm90b3R5cGVb
bmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVkKSB0
aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAodGhpc1tuYW1lXSA9PSBudWxs
ICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5hbWUs
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBwbHkoaXRlbSwgc2xpY2UuY2Fs
bChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24obmFt
ZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXHR2
YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJl
dmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtcbn07XG5cblR5cGUuaW1wbGVt
ZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpLFxuXG5cdGV4
dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1bmN0aW9uKG5hbWUs
IGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0aGlzLnByb3RvdHlw
ZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0bWlycm9yOiBmdW5jdGlv
bihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7XG5cbi8vIERlZmF1bHQgVHlw
ZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXtcblx0dmFy
IGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90b3R5cGUgPSBvYmplY3QucHJv
dG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5hbWUsIG9iamVjdCk7
XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmljID0gb2JqZWN0W2tleV0sXG5c
dFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVyaWMpIGdlbmVyaWMu
cHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9iamVjdC5pbXBsZW1lbnQoa2V5
LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlwZSl7XG5cdFx0dmFyIG1ldGhv
ZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhvZHNbMF0p
O1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKCFt
ZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8
IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0aG9kc1tp
XV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIHByb3RvdHlw
ZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpO1xuXHRcdH07XG5cdH1c
blxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBbXG5cdCdj
aGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFpbnMnLCAnaW5kZXhPZicsICds
YXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNlJywgJ3NlYXJjaCcsXG5cdCdz
bGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9Mb3dlckNh
c2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwgW1xuXHQncG9wJywgJ3B1c2gn
LCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2NvbmNh
dCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnZmlsdGVy
JywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3JlZHVjZVJp
Z2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwgW1xuXHQndG9FeHBvbmVudGlh
bCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1bmN0
aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdcbl0pKCdSZWdFeHAn
LCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmplY3QnLCBPYmplY3QsIFtcblx0
J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tleXMnLFxu
XHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dldE93blBy
b3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxlJywgJ3Nl
YWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0RhdGUnLCBEYXRlLCBb
J25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigpO1xuXG5E
YXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJuICsobmV3IERhdGUpO1xufSk7
XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8vIGZpeGVzIE5hTiByZXR1cm5p
bmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9uKCl7XG5c
dHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251bGwnO1xufS5oaWRlKCk7XG5c
bi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFuZG9tJywgZnVuY3Rpb24obWlu
LCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiAr
IDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5cbkFycmF5LmltcGxl
bWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRp
ZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0
fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0QXJy
YXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7
XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFy
IGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7XG5cdFx0XHRpZiAoaGFzT3du
UHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7XG5cdFx0fVxuXHRcdC8qPGx0
SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVuY3Rpb24o
ayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0SUU4PiovXG5cdFx0
cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmlu
ZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0
XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fSk7XG5cdH1c
blxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7XG5cblxuLy8gQXJyYXkgJiBP
YmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xuXG52YXIgY2xvbmVP
ZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7XG5cdFx0Y2FzZSAn
YXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2UgJ29iamVjdCc6IHJldHVybiBP
YmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07XG5cdH1cbn07XG5c
bkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xuXHR2YXIgaSA9IHRoaXMubGVu
Z3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGktLSkgY2xvbmVbaV0gPSBjbG9u
ZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxudmFyIG1lcmdlT25lID0gZnVu
Y3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVPZihjdXJyZW50KSl7
XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yoc291cmNlW2tleV0pID09ICdv
YmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpO1xuXHRcdFx0ZWxzZSBz
b3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNh
c2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25lKCk7IGJyZWFrO1xuXHRcdGRl
ZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRyZXR1cm4gc291cmNlO1xufTtc
blxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgaywgdil7XG5c
dFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwgaywg
dik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRmb3IgKHZhciBrZXkg
aW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0W2tleV0pO1xuXHRcdH1cblx0
XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRc
dHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tleV0g
PSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0YXBw
ZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRlbmRlZCA9IGFyZ3VtZW50c1tp
XSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5XSA9
IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbDtcblx0fVxuXG59KTtc
blxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAnV2hpdGVTcGFjZScsICdUZXh0
Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2goZnVuY3Rpb24obmFtZSl7XG5c
dG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIgVUlEID0gRGF0ZS5u
b3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpe1xuXHRyZXR1cm4g
KFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMgbGlrZSBl
YWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlcblxuLi4uXG4qL1xuXG5BcnJh
eS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0aW9uKGZuLCBiaW5k
KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsr
KXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0
aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRm
aWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXHRcdGZv
ciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKSBp
ZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtcblx0XHRcdGlmIChmbi5jYWxs
KGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVuY3Rpb24oaXRlbSwgZnJvbSl7
XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXHRcdGZvciAodmFyIGkgPSAo
ZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9tIHx8IDA7IGkgPCBs
ZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG5cdFx0
fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0
XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShsZW5ndGgp
O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4g
dGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0
fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKGZuLCBiaW5k
KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsr
KXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRo
aXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHQvKjwv
IUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmZpbHRlcihm
dW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51bGw7XG5cdFx0fSk7XG5cdH0s
XG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0XHR2YXIgYXJncyA9IEFycmF5
LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0ZW0p
e1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7XG5cdFx0
fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlzKXtcblx0XHR2YXIgb2JqID0g
e30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7XG5cdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tpXTtcblx0
XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFy
IHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBs
OyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0XHRcdGlmIChvYmpl
Y3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzW2ldO1xuXHRc
dFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxu
XHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBm
dW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0sIGZyb20p
ICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHRoaXMucHVz
aC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0TGFz
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhpcy5sZW5n
dGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9tKDAsIHRoaXMubGVuZ3RoIC0g
MSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRpZiAo
IXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0Zm9yICh2YXIgaSA9IDAs
IGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtpXSk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGZv
ciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRl
bSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcnJheSA9IFtdO1xu
XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9PSAnbnVsbCcpIGNv
bnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5JyB8fCB0
eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3RhbmNlT2Yo
dGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTtcblx0
XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0aW9uKCl7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAo
dGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7
XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5sZW5n
dGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0aW9uKHZh
bHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7XG5cdFx0
XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGFycmF5
KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsO1xuXHRcdGlm
ICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAndHJh
bnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDM7
IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7XG5cdFx0
XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7XG5cdFx0fVxu
XHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycpO1xuXHR9XG5cbn0p
O1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5kZXNjcmlwdGlvbjogQ29udGFp
bnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFzcywgYW5kIGRlbGF5
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJv
dmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5kKHtcblxuXHRhdHRl
bXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXJndW1lbnRzW2ld
KCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5c
bn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKGFyZ3Ms
IGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBBcnJheS5j
b252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0
fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rpb24odGhhdCl7XG5cdFx0dmFy
IHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gQXJyYXku
c2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rpb24oKXt9O1xuXG5c
dFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBjb250ZXh0ID0gdGhhdCwgbGVu
Z3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQp
e1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBlO1xuXHRcdFx0XHRjb250ZXh0
ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdzICYmICFsZW5ndGgp
XG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRcdDogc2VsZi5hcHBseShjb250
ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNlKGFyZ3VtZW50cykp
IDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNvbnRleHQgPT0gdGhhdCA/IHJl
c3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5cdH0sXG5cdC8qPC8h
RVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR2YXIgc2Vs
ZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJn
cyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2VsZi5hcHBseShiaW5k
LCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxuXHRkZWxheTogZnVuY3Rpb24o
ZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHRoaXMucGFzcygoYXJn
cyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtcblx0fSxcblxuXHRwZXJpb2Rp
Y2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0SW50
ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVyaW9k
aWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IE51bWJlclxuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91bmQsIHRp
bWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xuXG5OdW1iZXIuaW1wbGVtZW50
KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRcdHJldHVybiBNYXRoLm1pbiht
YXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbihwcmVj
aXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCkudG9G
aXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xuXHRcdHJldHVybiBNYXRoLnJv
dW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdHRpbWVzOiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzOyBpKyspIGZuLmNh
bGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7
XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9XG5cbn0pO1xuXG5O
dW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0aW9uKG1hdGgpe1xuXG52YXIg
bWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdGlmICghTnVtYmVy
W25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gTWF0aFtuYW1l
XS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKSkpO1xu
XHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbn0pKFsnYWJzJywgJ2Fj
b3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdmbG9v
cicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10pO1xu
XG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgU3RyaW5n
IFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0b0ludC5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZSwgQXJyYXld
XG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJpbmcuaW1wbGVtZW50KHtcblxu
XHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5nLCBpbmRleCl7XG5cdFx0cmV0
dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkgOiBTdHJpbmcodGhpcykpLmlu
ZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0ZXN0OiBmdW5jdGlv
bihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdyZWdleHAn
KSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRoaXMpO1xu
XHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBs
YWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuXHR9
LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJl
cGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLmNoYXJB
dCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhlbmF0ZTogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9u
KG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hhckF0KDApLnRvTG93ZXJDYXNl
KCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBmdW5jdGlvbihtYXRjaCl7XG5c
dFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRlc2Nh
cGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8o
Wy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9LFxuXG5cdHRvSW50
OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7
XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0
aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciBoZXgg
PSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sxLDJ9KSQv
KTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpIDogbnVs
bDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciByZ2IgPSBT
dHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJldHVybiAocmdiKSA/IHJnYi5y
Z2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6IGZ1bmN0aW9uKG9i
amVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVnZXhwIHx8
ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5hbWUpe1xuXHRcdFx0
aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTtcblx0
XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDogJyc7XG5c
dFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEJyb3dzZXJcblxuZGVz
Y3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFsaXph
dGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBGdW5jdGlvbiwgTnVt
YmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVudF1cblxu
Li4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudDtc
bnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xuXG52YXIgcGFyc2UgPSBmdW5j
dGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG5cdHBsYXRmb3Jt
ID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6ICcnKTtcblxuXHQvLyBjaHJv
bWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIGVkZ2Ug
Zmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNocm9tZS5cblx0dmFyIFVBID0g
dWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSspLyk7XG5cdGlmICghVUEpe1xu
XHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx0cmlkZW50fGNyaW9z
fHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwoPzpydltcXHNcXC86
XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykgfHwgW251bGwsICd1bmtub3du
JywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0XHRVQVsxXSA9ICdp
ZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9IGVsc2UgaWYgKFVBWzFdID09
ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRwbGF0Zm9ybSA9IHVh
Lm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86d2Vib3N8
YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXInXSlbMF07
XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAnd2luZG93cyc7XG5cblx0cmV0
dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQsXG5cdFx0bmFtZTog
KFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxuXHRcdHZlcnNpb246IHBhcnNl
RmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFbNF0gOiBVQVsyXSksXG5cdFx0
cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJvd3NlciA9IHRoaXMuQnJvd3Nl
ciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbmlm
IChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpe1xuXHRCcm93
c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbkJyb3dzZXIuZXh0ZW5k
KHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLFxuXHRc
dGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1bWVudC5xdWVyeVNl
bGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0fSxcblx0cGFyc2VVQTogcGFy
c2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJlcXVlc3QgPSAoZnVuY3Rpb24o
KXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBYTUxIdHRw
UmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtcblx0fTtcblxuXHR2YXIgTVNY
TUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0
LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigp
e1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwgZnVuY3Rpb24oKXtc
blx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRc
dE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxufSkoKTtcblxuQnJvd3Nlci5G
ZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8gU3RyaW5nIHNjcmlw
dHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5cdGlmICghdGV4dCkgcmV0dXJu
IHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93LmV4ZWNTY3JpcHQo
dGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZh
c2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3VtZW50LmhlYWQuYXBw
ZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7
XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50KCdzdHJpcFNjcmlw
dHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAnJztcblx0dmFyIHRleHQgPSB0
aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8XFwvc2NyaXB0Pi9naSwgZnVu
Y3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxuJztcblx0XHRyZXR1
cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5leGVjKHNjcmlwdHMp
O1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRzLCB0
ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93LCBEb2N1bWVudFxuXG5Ccm93
c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50LFxuXHRXaW5kb3c6IHRoaXMu
V2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0aGlzLkV2ZW50XG59
KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdXaW5kb3cn
LCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCd3aW5k
b3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0
d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9jdW1lbnQgPSBkb2N1bWVudC4k
Y29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pO1xuXG5kb2N1
bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7XG5cbkRv
Y3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1bWVudFtuYW1lXSA9
IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKSB0cnkg
e1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZEltYWdlQ2FjaGUnLCBmYWxzZSwg
dHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5pZiAodGhpcy5hdHRhY2hFdmVu
dCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVubG9hZEV2ZW50ID0gZnVuY3Rp
b24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtcblx0
XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LndpbmRvdyA9IG51bGw7
XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7XG5cdH07XG5cdHRo
aXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xufVxuXG4vLyBJRSBmYWls
cyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxzZWxlY3Q+
KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkge1xuXHRhcnJheUZyb20oZG9j
dW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJheS5jb252ZXJ0ID0g
ZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYmIFR5cGUu
aXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXtcblx0XHRcdHZh
ciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpO1xuXHRcdFx0d2hpbGUgKGkt
LSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdH1cblx0XHRy
ZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBwcm90b3R5cGUgPSBBcnJheS5w
cm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7XG5cdFsncG9wJywgJ3B1c2gn
LCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2NvbmNh
dCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgbWV0aG9k
ID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRlbSl7XG5c
dFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQoaXRlbSksIHNsaWNlLmNhbGwo
YXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0p
KCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRo
ZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRpbmcsIGFuZCBpbXBs
ZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE51bWJlcl1cblxucHJvdmlk
ZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBDbGFzcyA9IHRoaXMu
Q2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJhbXMpe1xuXHRpZiAoaW5zdGFu
Y2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRpYWxpemU6IHBhcmFtc307XG5c
blx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRpZiAo
bmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLiRjYWxsZXIgPSBu
dWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFyIHZhbHVlID0gKHRoaXMuaW5p
dGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRoaXM7
XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsO1xuXHRcdHJldHVybiB2YWx1
ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7XG5cblx0bmV3Q2xhc3MuJGNv
bnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS4kY29uc3RydWN0b3IgPSBu
ZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDtcblxuXHRyZXR1
cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7XG5cdGlmICghdGhp
cy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJlbnRcIiBjYW5ub3Qg
YmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxlci4kbmFtZSxcblx0XHRwYXJl
bnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRwcmV2aW91cyA9IChwYXJlbnQp
ID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlmICghcHJldmlvdXMpIHRocm93
IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBubyBwYXJlbnQuJyk7
XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFyIHJl
c2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0
dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0
XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVuY3Rpb24oKXt9O1xuXHRcdFx0
XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9IHJlc2V0KG5ldyBG
KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IG9iamVjdFtrZXldID0gdmFs
dWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmplY3Q7XG59O1xuXG52
YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZC4kb3Jp
Z2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdyYXBwZXIgPSBmdW5jdGlvbigp
e1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVsbCkgdGhy
b3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdcIiBjYW5ub3QgYmUgY2FsbGVk
LicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3VycmVudCA9IHRoaXMuJGNhbGxl
cjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBwZXI7XG5c
dFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHRoaXMu
JGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuXHRcdHJldHVybiByZXN1
bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46IG1ldGhvZCwgJG5hbWU6IGtl
eX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlvbihr
ZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJvcGVydHko
a2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywgdmFsdWUp
O1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0fVxuXG5cdGlmICh0eXBl
T2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1ZS4kaGlkZGVuKSByZXR1cm4g
dGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFpbikgPyB2YWx1ZSA6IHdyYXAo
dGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1lcmdlKHRoaXMucHJv
dG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxudmFyIGdl
dEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90eXBpbmcgPSB0cnVl
O1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4kcHJvdG90eXBpbmc7
XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVudCgnaW1wbGVtZW50JywgaW1w
bGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9IHtcblxuXHRFeHRl
bmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xuXHRcdHRo
aXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0fSxcblxuXHRJbXBsZW1lbnRz
OiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChpdGVtcykuZWFjaChmdW5jdGlv
bihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRcdFx0Zm9yICh2YXIg
a2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBrZXksIGluc3RhbmNlW2tleV0s
IHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBDbGFzc2Vz
IHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBlYXNlIHRo
ZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5FeHRyYXMsIENo
YWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnRoaXMu
Q2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5cblx0Y2hhaW46IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0KCkuYXBwbHkodGhp
cywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46IGZ1bmN0aW9uKCl7
XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtc
blxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0cmV0dXJuIHN0cmluZy5yZXBs
YWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRcdHJldHVybiBmaXJz
dC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZlbnRzID0gbmV3IENsYXNzKHtc
blxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGludGVy
bmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0XHRcblxuXHRcdHRoaXMuJGV2
ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4pO1xuXHRc
dGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciB0eXBlIGlu
IGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xu
XHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRz
W3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXku
Y29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAo
ZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHko
dGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlw
ZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoZXZlbnRz
ICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBldmVudHMuaW5kZXhPZihmbik7
XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNbaW5kZXhdO1xuXHRcdH1cblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0
XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5
cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZlbnRzKSBldmVudHMg
PSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0aGlzLiRldmVudHMpe1xuXHRc
dFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGludWU7XG5cdFx0XHR2YXIgZm5z
ID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZucy5sZW5ndGg7IGkt
LTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5zW2ld
KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnRoaXMu
T3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczogZnVuY3Rpb24oKXtcblx0XHR2
YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBseShudWxsLCBbe30s
IHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRcdGlmICh0aGlzLmFkZEV2ZW50
KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRpZiAodHlwZU9mKG9wdGlvbnNb
b3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qob3B0aW9uKSkgY29u
dGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tvcHRpb25dKTtcblx0
XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9
XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLlRoZW5hYmxlXG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1wbGVtZW50
ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBcInRoZW5hYmxlXCIuXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6
IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIFNUQVRF
X1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFURV9SRUpFQ1RFRCA9
IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0gbmV3IENsYXNzKHtcblxuXHQk
dGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5hYmxlUmVzdWx0OiBudWxsLFxu
XHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtc
blx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRy
ZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0ZTogZnVuY3Rpb24oKXtcblx0
XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBTVEFURV9QRU5ESU5H
OlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX0ZVTEZJTExF
RDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX1JFSkVD
VEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9XG5cdH0sXG5cblx0cmVzZXRU
aGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0
XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0aGVuOiBmdW5jdGlv
bihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAh
PT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknO1xuXHRcdGlmICh0eXBlb2Yg
b25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9ICdUaHJvd2VyJztcblxuXHRc
dHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4kdGhlbmFibGVSZWFj
dGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0XHRmdWxmaWxsSGFu
ZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVyOiBvblJlamVjdGVkXG5cdFx0
fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7XG5c
dFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5c
blx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0cmV0dXJuIHRoaXMudGhlbihu
dWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFibGUuZXh0ZW5kKHtcblx0cmVz
b2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJsZTtcblx0XHRpZiAodmFsdWUg
aW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVlO1xuXHRcdH0gZWxz
ZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0cmVzb2x2ZSh0aGVu
YWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cdHJlamVj
dDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtc
blx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9
XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gcmVzb2x2ZSh0aGVuYWJs
ZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJ
Tkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVqZWN0KHRoZW5hYmxl
LCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBpdHNlbGYu
JykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcg
fHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIgdGhlbjtcblx0XHRc
dHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0
aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRc
dFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0dmFyIHJlc29sdmVk
ID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dHJ5IHtcblx0
XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRc
dGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5c
dFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNv
bHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRc
dFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRcdFx0XHRcdFx0XHRp
ZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRc
dFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRcdFx0XHRcdFx0XHR9
XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXhj
ZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRyZXNv
bHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9uKTtc
blx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtc
blx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7
XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0
aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0
YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSB2
YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExFRDtcblxu
XHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWplY3QodGhlbmFibGUs
IHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElO
Ryl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xuXHRcdHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7
XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xuXHRpZiAodGhlbmFibGUuJHRo
ZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJl
c3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9QRU5ESU5H
O1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtcblx0dmFyIHN0YXRlID0gdGhl
bmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhlbmFibGUuJHRoZW5hYmxlUmVz
dWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyxcblx0XHR0
eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0XHR0aGVuYWJsZS4k
dGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxIYW5kbGVyJztcblx0
fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RIYW5kbGVyJztcblx0fVxuXG5c
dGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVzdWx0LCByZWFjdGlvbnMsIHR5
cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25zLCB0eXBl
KXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgKytpKXtc
blx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5kbGVyID0gcmVhY3Rp
b25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7XG5cdFx0XHRyZXNv
bHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAoaGFuZGxlciA9
PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0KTtc
blx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVu
YWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0
XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0XHR9
XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVk
JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7XG5cdGRlZmVyID0g
cHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3Vu
ZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7XG5cdGRlZmVyID0g
ZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xuXHR9O1xufVxuXG59KSgpO1xu
XG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlvbjogT2JqZWN0IGdlbmVyaWMg
bWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVc
blxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXtcblx0
XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGsgaW4gb2Jq
ZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztc
blx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1
bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tp
XTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSwg
b2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZmlsdGVyOiBm
dW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZh
ciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtl
eXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV0sIHZhbHVlID0gb2JqZWN0
W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3QpKSByZXN1
bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0
ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0
LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKysp
e1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAoIWZuLmNhbGwoYmluZCwgb2Jq
ZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5c
dH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMg
PSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5n
dGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChmbi5jYWxsKGJp
bmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZh
bHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgdmFsdWVz
ID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFy
IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07XG5c
dFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVzO1xu
XHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRyZXR1cm4gT2JqZWN0
LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0aW9uKG9iamVjdCwg
dmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07
XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1cm4ga2V5O1xuXHRcdH1cblx0
XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24ob2JqZWN0LCB2YWx1
ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZhbHVlKSAhPSBudWxsO1xuXHR9
LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7XG5cdFx0dmFyIHF1
ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1bmN0aW9uKHZhbHVl
LCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAnWycgKyBrZXkgKyAnXSc7XG5c
dFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRcdFx0
Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWUsIGtleSk7
IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRcdFx0dmFyIHFzID0ge307XG5c
dFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRcdFx0cXNbaV0g
PSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlT
dHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IHJlc3Vs
dCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0
XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQpO1xuXHRcdH0pO1xu
XG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxufSkoKTtc
blxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRpb246IFN0YW5kYWxv
bmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGljay5QYXJzZXJcbi4uLlxuKi9c
blxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJbmRleCxcblx0Y29t
YmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0cmV2ZXJzZUNhY2hl
ID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlvbihl
eHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJu
IG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVlKSByZXR1cm4gZXhwcmVzc2lv
bjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15cXHMrfFxccysk
L2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBjdXJyZW50Q2FjaGUg
PSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5cdGlmIChjdXJyZW50Q2FjaGVb
ZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07XG5cdHBhcnNlZCA9
IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczogW10sXG5cdFx0cmF3OiBleHBy
ZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyc2UodGhp
cy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9ySW5kZXggPSAtMTtcblx0d2hp
bGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UocmVnZXhw
LCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3Ro
O1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJldmVy
c2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1bmN0
aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0gJyEnKSByZXR1cm4gJyAnO1xu
XHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAnISc7XG5cdGVsc2UgaWYgKCgv
XiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8sICcn
KTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07XG5cbnZhciByZXZlcnNlID0g
ZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhw
cmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKysp
e1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFzdCA9IHtwYXJ0czog
W10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmluYXRvcihleHBbMF0uY29tYmlu
YXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspe1xuXHRc
dFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0b3Ip
IGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNvbWJpbmF0b3IgPSBj
ZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJpbmF0
b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxhc3QpO1xuXHR9XG5cdHJldHVy
biBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmluZyl7
Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFuIDxo
dHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZVxuXHRy
ZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxcXF4kfCwjXFxzXS9nLCBmdW5j
dGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9KTtcbn07XG5cbnZh
ciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1YnlcbnB1dHMgXCJc
XHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxccysjLiokfFxccyt8XFxcXCR8
XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0ICBcXFxccyogKCAsICkgXFxc
XHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAgXFxuXFxcblx0fCBcXFxccyog
KCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9yICAgICAgICAgXFxuXFxcblx0
fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29tYmluYXRvckNoaWxkcmVuIFxc
blxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAgICAjIFRhZyAgICAgICAgICAg
ICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBJRCAgICAg
ICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29kZT4rICAgICAgICkgICAgICMg
Q2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsgIFxcXG5cdFx0XFxcXHMqICg8
dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWypeJCF+fF0/PSkgICg/OiAgXFxc
blx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwiJ10/KSguKj8pXFxcXDkgXFxc
blx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxccyogIFxcXG5cdFxcXFxdKD8h
XFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/OlxcXG5cdFxcXFwoICg/Olxc
XG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwoKD86XFxcXChbXildK1xcXFwp
fFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClcIlxuKi9cblx0XCJeKD86XFxc
XHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxcXHMrKXwoPHVuaWNv
ZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+Kyl8XFxcXFtcXFxc
cyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86XFxcXHMqKD86KFtcXFwiJ10/
KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDorKSg8dW5pY29kZT4rKSg/Olxc
XFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwoKD86XFxcXChbXildK1xcXFwp
fFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycgKyBl
c2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAnXScpXG5cdC5yZXBsYWNlKC88
dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFteXFxc
XHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2csICcoPzpbOlxcXFx3XFxcXHUw
MGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcbik7XG5cbmZ1bmN0aW9u
IHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxuXHRjb21iaW5hdG9yLFxuXHRj
b21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQsXG5cdGNsYXNzTmFtZSxcblxu
XHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRyaWJ1dGVRdW90ZSxc
blx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxuXHRwc2V1ZG9DbGFzcyxcblx0
cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBzZXVkb0NsYXNzVmFs
dWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXtcblx0XHRw
YXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0XHRjb21iaW5hdG9y
SW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7XG5cdH1cblxuXHRpZiAo
Y29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29tYmluYXRvckluZGV4ID09PSAt
MSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRcdHZhciBjdXJyZW50
U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTtcblx0XHRpZiAo
cmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdKVxuXHRcdFx0Y3Vy
cmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VDb21iaW5hdG9yID0gcmV2ZXJz
ZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNlcGFyYXRvclsrK2NvbWJpbmF0
b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFnOiAnKid9O1xuXHR9XG5cblx0
dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdW2Nv
bWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJlbnRQYXJzZWQudGFn
ID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGlkKXtc
blx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0
fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNl
KHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc0xpc3QpIGN1
cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNz
ZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3NM
aXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzZXMucHVzaCh7XG5c
dFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVnRXhwKCcoXnxcXFxc
cyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxzfCQpJylcblx0XHR9KTtcblxu
XHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRv
Q2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBzZXVkb0NsYXNzVmFs
dWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBsYWNlKHJlVW5lc2Nh
cGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3VycmVu
dFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1ZG9zLnB1c2goe1xu
XHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSxcblx0XHRcdHZh
bHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNldWRvTWFya2VyLmxlbmd0aCA9
PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAoYXR0cmli
dXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVwbGFjZShyZVVuZXNj
YXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycpLnJl
cGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4cDtcblxuXHRcdHN3
aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDogcmVnZXhwID0gbmV3
IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICAgICAgICAg
ICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAg
ICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAgICApOyBicmVhaztc
blx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICcoXnxcXFxccyknKyBlc2Nh
cGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyApOyBicmVhaztcblx0XHRcdGNh
c2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhwKGF0
dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAgJz0nIDogdGVz
dCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09IHZh
bHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZihhdHRyaWJ1dGVW
YWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0nIDogdGVzdCA9IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9IHZhbHVlO1xu
XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUp
e1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGF0
dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJpYnV0ZU9wZXJhdG9y
KSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHRc
dGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZSAm
JiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5h
dHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjdXJyZW50UGFy
c2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtleSxcblx0XHRcdG9w
ZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVlOiBhdHRyaWJ1dGVWYWx1ZSxc
blx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0cmV0dXJuICcnO1xufTtcblxu
Ly8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGljay5w
YXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gcGFyc2UoZXhwcmVzc2lvbik7
XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5cbmlmICghdGhpcy5T
bGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBl
b2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhp
cyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRpb246IFRoZSBuZXcs
IHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlkZXM6IFNsaWNrLkZpbmRlclxu
cmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZhciBs
b2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRvU3RyaW5nID0gT2JqZWN0LnBy
b3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb25cblxubG9jYWwu
aXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4gKC9cXHtcXHMqXFxbbmF0aXZl
IGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5cbmxvY2FsLmlzWE1MID0gZnVu
Y3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVyc2lvbikgfHwgKCEh
ZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVudCkgPT0gJ1tvYmplY3QgWE1M
RG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xuXG5sb2NhbC5zZXREb2N1bWVu
dCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1lbnRzIC8gd2luZG93
IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJhcG9sYXRl
ZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlwZSA9IGRvY3VtZW50Lm5vZGVU
eXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50XG5cdGVsc2UgaWYgKG5vZGVU
eXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGVcblx0ZWxzZSBp
ZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3VtZW50LmRvY3VtZW50OyAvLyB3
aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0aGUgb2xkIGRvY3Vt
ZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50KSByZXR1cm47XG5cdHRoaXMu
ZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUgZmVhdHVy
ZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxuXHR2YXIgcm9vdCA9IGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhpcy5nZXRVSURYTUwocm9vdCks
XG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRcdGZlYXR1cmU7XG5c
blx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdFx0
dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0XHRyZXR1cm47XG5c
dH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7fTtcblxuXHRmZWF0
dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMuaXNYTUwo
ZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9IGZlYXR1cmVzLnN0
YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxuXHQ9IGZlYXR1cmVz
LmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNOXG5cdD0gZmVhdHVy
ZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNB
XG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0dXJlcy5uYXRpdmVNYXRjaGVz
U2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0YXJTZWxl
Y3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04sIGNhY2hlZEdldEVs
ZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjtcblxuXHR2
YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0dmFyIHRlc3ROb2RlID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290ID0gZG9jdW1lbnQu
Ym9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHJvb3Q7
XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxuXHQvLyBvbiBub24tSFRNTCBk
b2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsgcHJvcGVy
bHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9XCInK2lkKydcIj48
L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZlYXR1cmVzLmlzSFRNTERvY3Vt
ZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHQvLyBJ
RSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9y
IHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
Q29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMgPSAodGVzdE5vZGUuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRcdC8vIElFIHJldHVybnMgY2xv
c2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBm
b3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
J2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChzZWxlY3RlZCAmJiAhIXNlbGVj
dGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0
XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3RhclNl
bGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8vIElFIHJldHVybnMg
ZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9yIGdldEVsZW1lbnRz
QnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJI
VE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1cIicrIGlkICsnXCI+PC9iPic7
XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQp
ID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdGlmICh0
ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBn
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0cnkge1xuXHRcdFx0
XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxhIGNsYXNzPVwiYlwi
PjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVu
Z3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9ICdiJztcblx0XHRc
dFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRc
dFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVjdHMgdGhl
IGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVz
dE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48YSBjbGFzcz1cImYgYiBhXCI+
PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3ROb2RlLmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChl
KXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVudHNCeUNs
YXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtcblx0XHR9XG5cblx0XHRpZiAo
dGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJldHVybnMgY2xvc2Vk
IG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZvciBzb21l
IGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJ2Zv
bzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgn
KicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxlY3RlZCAm
JiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0g
Jy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBxdWVyeVNl
bGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGVcblx0XHRc
dHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIk1pWFwiPjwv
YT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5vZGUucXVl
cnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRc
dFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25zIG9uIHF1
ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9
ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29wdGlvbj48L3NlbGVj
dD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBID0gKHRlc3ROb2RlLnF1ZXJ5
U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7
fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0clsqXiRd
PVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRc
dHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0
dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxs
KCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5c
dFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQgeCwgZm9y
bS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXRcblx0XHR0
cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj1cInNcIj48aW5w
dXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0
dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAhPSAncycp
O1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVzU2VsZWN0b3IgZnVu
Y3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3QubWF0Y2hl
cyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290Lm1vek1hdGNoZXNTZWxlY3Rv
ciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVhdHVyZXMubmF0aXZl
TWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRyb3dz
IGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxuXHRcdFx0ZmVhdHVy
ZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpO1xuXHRcdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0XHR9IGNhdGNoIChlKXt9XG5c
blx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRvID0gMTtcblx0XHRkZWxldGUg
cm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlESFRN
TDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURYTUw7
XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5cdHRlc3ROb2RlID0g
c2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmlidXRlXG5cblx0ZmVh
dHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tlbkZv
cm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhv
ZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0aG9kKSByZXR1cm4g
bWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0dHJp
YnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/IGF0dHJpYnV0ZU5v
ZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZh
ciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0cmV0dXJuIChtZXRo
b2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblx0fTtc
blxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1dGUgPSAocm9vdCAm
JiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkpID8gZnVuY3Rpb24obm9kZSwg
YXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTtcblx0
fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5vZGUuZ2V0QXR0cmli
dXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNpZmll
ZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5zXG5cdC8vIEZJWE1F
OiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHhtbCBh
bmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290ICYmIHRo
aXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5hdGl2ZURvY3VtZW50Q29udGFp
bnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1bWVudC5jb250YWlucyk7XG5c
blx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2ZURvY3Vt
ZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRl
eHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFuYXRpdmVE
b2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdC8vIElFOCBk
b2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0XHRyZXR1cm4gY29udGV4dCA9
PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKHJvb3QgJiYgcm9vdC5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1
cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
KG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0aWYgKG5v
ZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtcblx0XHR9
IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0
fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8vIGNyZWRpdHMgdG8gU2l6emxl
IChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9IChy
b290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICgh
YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikg
cmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0ID8g
LTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBpbiByb290KSA/IGZ1
bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJbmRleCkg
cmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXHR9
IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5v
d25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwO1xuXHRcdHZhciBhUmFu
Z2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRvY3Vt
ZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0KGEsIDApO1xuXHRcdGFSYW5n
ZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xuXHRcdGJSYW5nZS5z
ZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtcblxuXHRyb290ID0gbnVsbDtc
blxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0
dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRob2RcblxudmFyIHJlU2ltcGxl
U2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQvLFxuXHRyZUVtcHR5QXR0cmli
dXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0cXNhRmFpbEV4cENhY2hlID0g
e307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVu
ZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8gbnVsbCA6
IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kO1xuXHRlbHNl
IGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRleHQuZG9jdW1lbnQ7IC8vIENv
bnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3VtZW50XG5cdGVsc2UgaWYgKCFj
b250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBcblxuXHR2YXIgcGFy
c2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhpcy51bmlxdWVzID0ge30sXG5c
dFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxuXHRcdGNvbnRleHRJ
c0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5cblx0aWYgKHRoaXMuZG9jdW1l
bnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9jdW1l
bnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lkIGR1cGxpY2F0aW5n
IGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRpZiAoaGFzT3RoZXJzKSBmb3Ig
KGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQoZm91bmRbaV0pXSA9
IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRpZiAodHlwZW9mIGV4cHJlc3Np
b24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3RyaW5nXG5cblx0XHQvKjxzaW1w
bGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBsZVNlbGVjdG9yID0gZXhwcmVz
c2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1wbGVTZWxlY3RvcnM6IGlmIChz
aW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3RvclsxXSxc
blx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRpZiAoIXN5bWJvbCl7
XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlROKSBicmVh
ayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5
VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVs
bDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRp
ZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNo
KG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcjJyl7XG5c
blx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1bWVudCkg
YnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7XG5cdFx0XHRcdGlm
ICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1
ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0
dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhp
cy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxuXHRcdFx0fSBlbHNlIGlmIChz
eW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgKCgh
Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04pICYmIGNv
bnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0
aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7
XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobmFtZSk7
XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0
XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFz
T3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtc
blx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoQ2xhc3Mg
PSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkgKycoXFxc
XHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
JyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0
XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0XHRpZiAoIShjbGFz
c05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTtcblx0XHRcdFx0
XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMg
JiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0
XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRoaXMu
c29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDtcblxuXHRc
dH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXG5cdFx0Lyo8cXVlcnkt
c2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9yOiBpZiAoY29udGV4dC5xdWVy
eVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50XG5cdFx0XHRc
dHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0XHQvL1RPRE86IG9ubHkgc2tp
cCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRcdFx0XHR8fCB0aGlz
LmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5DaGVja2VkUVNBICYm
IGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0XHR8fCAodGhpcy5i
cm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmlidXRlLnRlc3QoZXhwcmVzc2lv
bikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFjb250ZXh0
SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11bHRpcGxlIGV4cHJl
c3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBzaW5jZSB3ZSBjdXJyZW50bHkg
b25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNzaW9uIHNl
bGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTFcblx0XHRc
dFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJyZWFrIHF1ZXJ5U2Vs
ZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24sIF9jb250ZXh0ID0g
Y29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5cdFx0
XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRcdC8vIGNyZWRpdHMgdG8gQW5k
cmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1dGUoJ2lk
JyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2NvbnRleHQuc2V0QXR0cmlidXRl
KCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNraWQgKyAn
ICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0LnBhcmVudE5vZGU7
XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIGNvbnRl
eHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtcblx0XHRcdFx0ZWxzZSBub2Rl
cyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7XG5cdFx0XHR9IGNhdGNo
IChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dID0gMTtcblx0XHRcdFx0
YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmICghY29u
dGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50SWQpIF9jb250ZXh0LnNldEF0
dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2NvbnRleHQucmVtb3Zl
QXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBfY29udGV4dDtcblx0XHRcdFx0
fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSkgZm9yIChp
ID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUgPiAn
QCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5w
dXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkp
IGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRoaXMu
c29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3F1ZXJ5
LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKGV4
cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kO1xuXHR9IGVs
c2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Npb25cblx0
XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8vIGV4cHJl
c3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFyc2VkID0gZXhwcmVzc2lvbjtc
blx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50IHx8IGNv
bnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGVcblx0XHQoZm91bmQp
ID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjtcblx0XHRyZXR1
cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1cm4gZm91bmQ7XG5c
dH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9c
blxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNcblxuXHR0aGlzLnBv
c05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBlID0g
e307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxl
Y3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFwcGVuZCBpcyBudWxs
IGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGV4cHJlc3Npb24g
dXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2ggPSAoIWhhc090aGVy
cyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVzc2lvbnNb
MF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDtcblxuXHRp
ZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0IGVuZ2luZVxuXG5c
dHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0LCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1zLCBjdXJyZW50RXhw
cmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVz
c2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBleHBy
ZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50RXhwcmVz
c2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0b3I6JyArIGN1cnJl
bnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRpbnVlIHNl
YXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1cnJlbnRC
aXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtcblx0XHRpZCAgICAgICAgID0g
Y3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xpc3Q7XG5c
dFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0XHRhdHRyaWJ1dGVzID0gY3Vy
cmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBzZXVkb3M7
XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoIC0gMSkp
O1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRpZiAobGFzdEJpdCl7XG5cdFx0
XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9IGZvdW5kO1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRoaXMuZm91bmQgPSBb
XTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0aGlzW2NvbWJpbmF0b3JdKGNv
bnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7
XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJj
aDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAobSA9IDAs
IG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtcblx0XHRcdFx0dGhpc1tjb21i
aW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJj
aDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8
IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxuXG5cdFx0Y3VycmVu
dEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3VsZCBzb3J0IGlmIHRoZXJlIGFy
ZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4cHJlc3Npb25zLlxu
XHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkpIHRoaXMu
c29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVsbCkgOiBm
b3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAxO1xubG9jYWwudWlkayA9ICdz
bGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHR2
YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtcblx0aWYgKCF1aWQpe1xuXHRc
dHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlkaywgdWlk
KTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0VUlESFRNTCA9IGZ1bmN0aW9u
KG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVlTnVtYmVy
ID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9jdW1lbnQg
ZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVzdWx0cyl7
XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7XG5cdHJlc3VsdHMu
c29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKjxw
c2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwuY2Fj
aGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xcZCopPyhbYS16XSspPyhb
Ky1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihhcmd1bWVu
dCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTtcblx0aWYg
KCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwgZmFs
c2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChhID09ICctJykgYSA9IC0xO1xu
XHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1cblx0XHQoc3BlY2lhbCA9PSAn
bicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcpXHQ/IHthOiAyLCBi
OiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjogMH0gOiB7YTogMCwg
YjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9IHBhcnNlZCk7XG59
O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwgc2libGluZywgcG9z
aXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xuXHRc
dHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAoIXRoaXNbcG9zaXRpb25zXVt1
aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIXBh
cmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFyZW50W2NoaWxkXSwgY291bnQg
PSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9k
ZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZU5hbWUgIT0gbm9kZU5h
bWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCld
ID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTtcblx0XHRc
dH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZVR5cGUgIT0gMSkg
Y29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBj
b3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fVxu
XHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztcblx0XHR2YXIgcGFyc2VkID0g
dGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5USEFyZ3VtZW50KGFyZ3VtZW50
KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBhID0gcGFyc2VkLmEs
IGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07XG5cdFx0aWYgKGEgPT0g
MCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5cdFx0XHRpZiAocG9zIDwgYikg
cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBvcykgcmV0dXJuIGZh
bHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7XG5cdH07XG59O1xu
XG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5s
b2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xufTtc
blxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdGlmICgh
dGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59O1xuXG5sb2NhbC5tYXRjaE5v
ZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlzSFRNTERvY3VtZW50
ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJu
IHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVwbGFjZSgv
XFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywgJ1skMT1cIiQyXCJdJykpO1xu
XHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZhciBwYXJzZWQgPSB0aGlzLlNs
aWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiB0cnVlO1xuXG5cdC8v
IHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4
cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Npb247XG5c
dGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsrKXtc
blx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpe1xuXHRcdFx0dmFyIGV4cCA9
IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2Rl
LCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJDYXNlKCks
IGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykpIHJldHVy
biB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRcdH1cblx0fVxuXG5cdGlmIChz
aW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuXHR2YXIg
bm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBpdGVtO1xuXHRmb3Ig
KGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChpdGVtID09PSBub2RlKSByZXR1
cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5tYXRjaFBzZXVkbyA9
IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFyIHBzZXVkb05hbWUgPSAncHNl
dWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNbcHNldWRv
TmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1
dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8gYXJndW1lbnQgPT0gYXR0cmli
dXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9yID0gZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0YWcp
e1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gbm9kZS5ub2RlTmFt
ZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRpZiAodGFnID09ICcqJyl7XG5c
dFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBjb21tZW50
IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG5vZGVOYW1l
ICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpZCAmJiBub2RlLmdl
dEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBpLCBwYXJ0LCBj
bHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7XG5cdFx0
Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0aWYgKCEoY2xzICYm
IGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAo
YXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTspe1xuXHRcdHBhcnQg
PSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVzdCh0aGlz
LmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRlKG5vZGUs
IHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9zKSBmb3IgKGkgPSBw
c2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07XG5cdFx0aWYgKCF0
aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJuIGZhbHNl
O1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJpbmF0b3JzID0ge1xuXG5cdCcg
JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywg
Y2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxuXHRcdHZhciBpLCBp
dGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERvY3VtZW50KXtcblx0XHRcdGdl
dEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMuaWRHZXRz
TmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0g
aWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyB3aXRo
IHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlmIHRoZXJlcyBqdXN0
IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxsIGJlIGEgY29sbGVj
dGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRdO1xuXHRcdFx0XHRcdGlmICgh
Y2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBdKSBjaGlsZHJlbiA9
IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107
KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyk7
XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQpe1xuXHRc
dFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRc
dFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWl0ZW0pe1xu
XHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBkb20gd2UgcmV0dXJuLCBlbHNl
IHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJZCBsYWJlbFxuXHRcdFx0XHRc
dGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjtcblx0XHRcdFx0XHRl
bHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCAhPT0g
bm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlz
LnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYgKGNsYXNzZXMgJiYg
bm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRc
dFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0LmpvaW4o
JyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFr
IGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykg
dGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7XG5cdFx0XHRjaGls
ZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcblx0XHRcdGlmICghKGNoaWxk
cmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRcdFx0aWYgKCF0aGlz
LmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBj
aGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRyZW5cblx0
XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRpZiAobm9kZS5ub2Rl
VHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7XG5cdH0s
XG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2li
bGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0
fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUuZmlyc3RDaGls
ZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRl
bHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzXG5cdFx0
d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5
cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5c
dFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRVbmlx
dWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnKysnOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJs
aW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29tYmluYXRvcjorJ10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29tYmlu
YXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xu
XHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBzaWJsaW5nc1xuXHRc
dHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1bmN0aW9uKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBhbGwgcGFyZW50IG5v
ZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSkg
aWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IHBhcmVu
dCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0aWYgKG5vZGUg
IT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ1xuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUg
PT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0JyFeJzogZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGxhc3Qg
Y2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOiErJ10o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9
LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
cHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51
ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlzLmJp
dFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7
XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMgaW4gY29tYmluYXRvcnMpIGxv
Y2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52YXIgcHNldWRvcyA9
IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2VtcHR5JzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHJldHVybiAhKGNoaWxk
ICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0
Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3QnOiBmdW5jdGlvbihub2RlLCBl
eHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUsIGV4cHJlc3Npb24p
O1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpe1xuXHRcdHJldHVy
biAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhPZih0ZXh0
KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0g
MSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LWNoaWxk
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykp
IGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtc
blx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0g
bm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChwcmV2
Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5cdFx0
d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBlID09IDEp
IHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjxudGgtcHNldWRv
LXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2Zp
cnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5cblx0J250aC1sYXN0LWNoaWxk
JzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywg
J3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8o
J2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlwZScsIHRydWUpLFxuXG5cdCdu
dGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJl
dmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0J2luZGV4JzogZnVu
Y3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10o
bm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBmdW5jdGlvbihub2Rl
KXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybicpO1xuXHR9
LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50
aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0
b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2ZpcnN0LW9m
LXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1l
O1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9k
ZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxc
blxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1lID0g
bm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYg
KG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHBy
ZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChwcmV2ID0g
cHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0
dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBuZXh0
Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxz
ZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2YtdHlwZS1wc2V1ZG8tc2VsZWN0
b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnZGlzYWJsZWQnOiBm
dW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnY2hl
Y2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmNoZWNrZWQgfHwgbm9kZS5z
ZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4g
dGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IG5v
ZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwg
J3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0
dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdzZWxlY3RlZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0Lyo8L3BzZXVkby1z
ZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3BzZXVkbzon
ICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNcblxudmFyIGF0dHJp
YnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5cdCdmb3InOiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1sRm9yIDog
dGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdocmVmJzogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJywg
MikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4dCA6IHRo
aXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRleCc6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ3RhYmlu
ZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lm
aWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQndHlwZSc6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG5cdH0s
XG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0
aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRcdHJldHVybiAoYXR0cmlidXRl
Tm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1
ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVycy5NQVhMRU5HVEggPSBhdHRy
aWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4bGVuZ3RoO1xuXG4v
LyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9KTtc
blxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRlclxuXG5TbGljay5z
ZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpe1xuXHRyZXR1cm4g
bG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7XG59O1xuXG5TbGljay5m
aW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5cdHJldHVybiBsb2NhbC5zZWFy
Y2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4vLyBTbGljayBjb250
YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVyLCBu
b2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtcblx0cmV0dXJuIGxvY2FsLmNv
bnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgZ2V0dGVy
XG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5z
ZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0ZShub2RlLCBuYW1l
KTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRs
b2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0ZShub2Rl
LCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xpY2subWF0Y2ggPSBmdW5jdGlv
bihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2VsZWN0b3IpKSByZXR1cm4gZmFs
c2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0cnVlO1xu
XHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLm1hdGNoTm9kZShub2Rl
LCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgYWNjZXNzb3JcblxuU2xpY2su
ZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbC5hdHRy
aWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9v
a3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5cdHJldHVybiBsb2NhbC5hdHRy
aWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNldWRvIGFjY2Vzc29yXG5cblNs
aWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWxbJ3BzZXVkbzon
ICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0dXJuIGZuLmNhbGwo
bm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxvb2t1
cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRvID0gbG9jYWxbJ3BzZXVkbzon
ICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7XG5cdFx0
cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIG51bGw7
XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3JcblxuU2xpY2sub3ZlcnJpZGUgPSBm
dW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUocmVnZXhwLCBmbik7XG5cdHJl
dHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDtcblxuU2xpY2sudWlk
T2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9kZSk7XG59
O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHkoLyo8
Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8q
PC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnRcblxuZGVzY3Jp
cHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMuIENvbnRh
aW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4gaGFu
ZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBlYXNp
bHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1bmN0aW9u
LCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJdXG5cbnByb3ZpZGVz
OiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc11cblxuLi4uXG4q
L1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJvcHMpe1xu
XHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9yc1t0YWddO1xuXHRpZiAoa29u
c3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0eXBlb2YgdGFnICE9
ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMpO1xuXG5cdGlmICgh
cHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0rJC8pLnRlc3QodGFnKSl7XG5c
dFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0
dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFyc2VkLnRhZztcblx0XHRpZiAo
cGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlkO1xuXG5c
dFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztcblx0XHRpZiAoYXR0cmlidXRl
cykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkr
Kyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRcdGlmIChwcm9wc1thdHRyLmtl
eV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRyLnZhbHVlICE9IG51bGwgJiYg
YXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9IGF0dHIudmFsdWU7XG5cdFx0
XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJvcHNbYXR0ci5rZXld
ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAmJiBwcm9wc1snY2xh
c3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xpc3Quam9pbignICcp
O1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQodGFnLCBwcm9wcyk7XG59O1xu
XG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnByb3RvdHlwZSA9IEJyb3dzZXIu
RWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdyYXBwaW5n
LlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9uKGZpcmVFdmVudCl7
XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdHJldHVybiBmaXJlRXZl
bnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0fSkoRWxlbWVudC5wcm90b3R5
cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJyb3Io
ZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVbbmFtZV0pIHJldHVybjtcblxu
XHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3Vs
dHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0cnVlO1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1lbnQg
PSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVudFtuYW1lXS5hcHBseShlbGVt
ZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5cGVPZihyZXN1bHQp
ID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxlbWVudHMpID8gbmV3IEVsZW1l
bnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVtZW50cy5pbXBsZW1lbnQob2Jq
KTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucGFyZW50ID0gT2Jq
ZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCckY29uc3RydWN0b3InOiBFbGVt
ZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgnZWxlbWVudCcpLmhpZGUoKVxu
XHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdFx0RWxl
bWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xufVxuXG5FbGVtZW50LkNvbnN0
cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUnLCBmdW5j
dGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtcblx0XHRwcm9w
ZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24ob2JqKXtcblx0XHRc
dHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHByb3BzID0gcGFy
YW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBhcmFtcy5pZnJhbWUpIGlmcmFt
ZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIgb25sb2FkID0gcHJvcHMub25s
b2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9ubG9hZDtcblx0cHJvcHMuaWQg
PSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUgPyAoaWZyYW1lLmlk
IHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51bmlxdWVJRCgpXS5waWNrKCk7
XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMpO1xuXG5c
dHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5jYWxsKGlmcmFtZS5jb250ZW50
V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1twcm9wcy5pZF0pIG9uTG9hZCgp
O1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG5cdHJldHVybiBp
ZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0aW9uKG5v
ZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFyIHVuaXF1ZXMgPSB7
fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRc
dHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlmICghdW5pcXVlc1t1aWRdKXtc
blx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wdXNoKG5vZGUpO1xu
XHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJvdG90eXBlID0ge2xlbmd0aDog
MH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5cGUoJ0VsZW1lbnRzJywgRWxl
bWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJpbmQpe1xu
XHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFy
cmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVuY3Rpb24o
aXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRcdH0gOiBmaWx0ZXIs
IGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVuY3Rpb24oKXtcblx0XHR2YXIg
bGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMu
bGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJndW1l
bnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07XG5cdFx0fVxu
XHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9LnByb3RlY3QoKSxcblxuXHR1
bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdGZvciAodmFyIGkg
PSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9
IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgaXRlbXMucHVzaChp
dGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KHRo
aXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5jdGlvbigpe1xuXHRc
dHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBh
cmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkpIG5ld0VsZW1l
bnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVudHMucHVzaChpdGVtKTtcblx0
XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRhcHBlbmQ6
IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sbGVjdGlv
bi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0d2hp
bGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVuY3Rpb24oKXtcblxuLy8gRkYs
IElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycwJzog
MCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpO1xuaWYg
KG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9uKCl7
XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9IHNwbGljZS5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3RoKSBkZWxl
dGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59LnByb3RlY3QoKSk7XG5cbkFy
cmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1lKXtcblx0RWxlbWVudHMuaW1w
bGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWlycm9yKEVsZW1lbnRzKTtcblxu
Lyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUw7XG50cnkge1xuXHRjcmVh
dGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlucHV0IG5h
bWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5cbnZhciBlc2NhcGVRdW90ZXMg
PSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwpLnJlcGxhY2UoLyYvZywgJyZh
bXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8qPC9sdElFOD4qL1xuXG4vKjxs
dElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRc
bnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xu
XHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0Zmxh
ZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0p
KCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdFbGVtZW50
OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMpe1xuXHRcdFx0aWYgKHByb3Bz
LmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xu
XHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PSAncmFk
aW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7XG5cdFx0XHQv
KjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNoYW5naW5n
IGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFjYW5DaGFuZ2VTdHlsZUhUTUwg
JiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVFbGVtZW50LnNldEF0dHJpYnV0
ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkgZGVsZXRlIHBy
b3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxlRWxlbWVudCkuc2V0KHByb3Bz
KTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJRTg+Ki8vLyBGaXgg
Zm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBpbiBJRSA8IDhcblx0XHRcdGlm
IChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAnPCcgKyB0YWc7XG5c
dFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwiJyArIGVzY2FwZVF1b3Rlcyhw
cm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSB0YWcgKz0gJyB0eXBl
PVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7XG5cdFx0XHRcdHRhZyArPSAn
Pic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMudHlw
ZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5p
ZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtcblx0fVxuXG59KTtcblxufSko
KTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRvdyk7XG5TbGljay51aWRPZihk
b2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3VGV4dE5vZGU6IGZ1bmN0
aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHR9LFxu
XG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy53aW5kb3c7XG5cdH0sXG5c
blx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0ge1xuXG5cdFx0XHRzdHJpbmc6
IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlkID0gU2xpY2suZmluZChkb2Ms
ICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7XG5cdFx0XHRcdHJldHVybiAo
aWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0XHR9LFxuXG5cdFx0
XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRcdFx0U2xpY2sudWlkT2YoZWwp
O1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAmJiAhKC9eKD86b2JqZWN0fGVt
YmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZpcmVFdmVudCA9IGVs
LmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBvciBlbHNl
IGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtc
blx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZlbnQpO1xuXHRcdFx0XHRcdH07
XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpO1xuXHRcdFx0
XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0XHRcdG9iamVjdDogZnVuY3Rp
b24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmoudG9FbGVtZW50KSByZXR1cm4g
dHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7XG5cdFx0XHRcdHJldHVy
biBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVzLnRleHRub2RlID0gdHlwZXMu
d2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3VtZW50ID0gZnVuY3Rpb24oemVy
byl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVs
LCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51bmlxdWVO
dW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKGVsKTtcblx0XHRcdHJl
dHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRvY3Vt
ZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xuXG5pZiAod2luZG93LiQgPT0g
bnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7XG5cdHJldHVybiBk
b2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7XG5cbldpbmRvdy5pbXBsZW1l
bnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmRvY3Vt
ZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcztc
blx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtc
blxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIFNsaWNr
LnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9LFxuXG5cdGdldEVs
ZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGlj
ay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtcblxudmFyIGNvbnRhaW5zID0g
e2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJuIFNsaWNrLmNvbnRhaW5zKHRo
aXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50Lmlt
cGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNv
bnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5cblxuXG4vLyB0cmVlIHdhbGtp
bmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjb21iaW5h
dG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjtcblxuXHRleHByZXNz
aW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Npb24pKTtcblxuXHR2YXIgZXhw
cmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gZXhwcmVz
c2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0b3IgPSBj
b21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxuT2JqZWN0LmZvckVhY2go
e1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4nLFxuXHRnZXRQYXJlbnQ6ICch
J1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1lbnQo
bWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50
KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xu
XG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0QWxsUHJldmlvdXM6
ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGlsZHJlbjogJz4nLFxuXHRnZXRQ
YXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1lbnQu
aW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRoaXMu
Z2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5c
dH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRGaXJzdDogZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBp
bmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtcblx0fSxcblxuXHRnZXRMYXN0
OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2Vh
cmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFzdCgpKTtc
blx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3duZXJE
b2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRnZXRFbGVtZW50QnlJZDogZnVu
Y3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsICcjJyAr
ICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpKTtcblx0fSxcblxuXHRtYXRj
aDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFleHByZXNzaW9uIHx8IFNsaWNr
Lm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xuXG5cblxuaWYgKHdpbmRvdy4k
JCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0
aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9PSAn
c3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3RvciwgbmV3
IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVyYWJsZShzZWxlY3RvcikpIHJl
dHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJldHVybiBuZXcgRWxlbWVudHMo
YXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFyIGluc2VydGVycyA9IHtcblxu
XHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShj
b250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oY29udGV4dCwgZWxl
bWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAocGFy
ZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQubmV4dFNpYmxpbmcpO1xu
XHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxlbWVu
dC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0aW9uKGNvbnRleHQs
IGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQuZmly
c3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lkZSA9IGluc2VydGVycy5ib3R0
b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZhciBwcm9wZXJ0eUdl
dHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8vIHByb3BlcnRpZXNcblxudmFy
IHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQndHlwZScsICd2YWx1ZScsICdk
ZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5nJywg
J2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3BhbicsICd0YWJJbmRleCcsICd1c2VN
YXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJvcGVydHkudG9Mb3dl
ckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwgPSAnaW5uZXJIVE1M
JztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS50ZXh0
Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENvbnRlbnQnO1xuXG5PYmplY3Qu
Zm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkpe1xuXHRwcm9wZXJ0eVNldHRl
cnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW3JlYWxdID0gdmFsdWU7
XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0
dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+Ki9cbnByb3BlcnR5U2V0dGVy
cy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5c
dFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2RlLnNldCgnaHRtbCcsIHZhbHVl
KTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlO1xuXHR9O1xufSkocHJv
cGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9IChmdW5jdGlvbihn
ZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlLmdldCgn
dGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdldHRlcihub2RlKTtcblx0fTtc
bn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4vLyBCb29sZWFuc1xu
XG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNsYXJl
JywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFkT25seScsICdtdWx0
aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZlcicsICdkZWZhdWx0Q2hlY2tl
ZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXknLFxuXHQnbG9vcCdcbl07XG5c
bnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24oYm9vbCl7
XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVhbnNbbG93ZXJdID0g
Ym9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtc
blx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2xvd2Vy
XSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVbYm9vbF07XG5cdH07XG59KTtc
blxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHByb3BlcnR5U2V0dGVycywge1xu
XG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2NsYXNzTmFtZScgaW4g
bm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykgOiBub2RlLnNldEF0dHJpYnV0
ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1sRm9yID0gdmFsdWUgOiBub2Rl
LnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0aW9u
KG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1RleHQgPSB2
YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTtcblx0fSxcblxuXHQndmFs
dWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9ICh2YWx1ZSAhPSBu
dWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3BlcnR5R2V0dGVyc1snY2xhc3Mn
XSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9k
ZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xufTtcblxu
LyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicp
O1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRyeSB7IGVsLnR5cGUg
PSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicpIHByb3Bl
cnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRub2RlLnNldEF0dHJp
YnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4vKiA8L3dlYmtpdD4gKi9cblxu
Lyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBv
ZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5c
dHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcgPSBm
YWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdpbjog
MHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31cblx0
cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZhciBpbnB1dCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwgaHRtbDVJbnB1dFN1
cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0JztcbmlucHV0LnR5cGUgPSAnc3Vi
bWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0JztcblxuLy8gIzI0
NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlpbmcgdG8gdXNlIGh0
bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xuXHRpbnB1dC50eXBl
ID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1dC50eXBlID09ICdlbWFpbCc7
XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0aWxlSW5wdXRWYWx1
ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24o
bm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52YWx1ZTtcblx0XHRu
b2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBjYXRjaCAoZSl7
fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi9cblxuLyog
PGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRpdil7XG5c
dGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChkaXYuZ2V0QXR0cmlidXRlKCdy
YW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0dGVzdC5pbm5lckhU
TUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhcIiB2YWx1ZT1cInRoZSB1bmtu
b3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUodHJ1ZSkuZmlyc3RD
aGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNzTGlzdCA9ICEhZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIgY2xhc3NlcyA9IGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJykuY2xlYW4o
KS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBjbGFzc05hbWVzLmZpbHRlcihm
dW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUgIT09ICcnICYmICF1bmlxdWVz
W2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7XG5cdH0p
O1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xh
c3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NMaXN0ID0gZnVuY3Rp
b24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbn07XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRc
dHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRp
ZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dGVBbGxvd0xpc3Q7XG5cdFx0XHRp
ZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93TGlzdCA9IHRoaXMucmV0cmll
dmUoJyRhdHRyaWJ1dGVBbGxvd0xpc3QnLCB7fSk7XG5cdFx0XHQvKiA8L2x0SUU5PiAqL1xuXG5c
dFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKG5h
bWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJp
YnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXTtcblx0XHRcdFx0LyogPC9sdElF
OT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsICcn
ICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dl
dEF0dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0Lyog
PC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5cdFx0Zm9yICh2YXIgYXR0cmli
dXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1dGVz
W2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5OiBm
dW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0ZXJzW25hbWUudG9M
b3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdldHRlcih0aGlzKTtcblx0XHQv
KiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKXtcblx0XHRcdHZhciBh
dHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVBbGxvd0xpc3QgPSB0
aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30pO1xuXHRcdFx0aWYgKCFhdHRy
KSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0dHJpYnV0ZUFsbG93
TGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MO1xuXHRcdFx0
XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmluZCBtZW50aW9uIG9mIGF0dHJp
YnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwgb3V0ZXIuc2VhcmNoKC9cXC8/
WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJuIG51bGw7
XG5cdFx0XHRcdGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0
fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0dHJpYnV0
ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNrLmhhc0F0dHJpYnV0
ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxuXG5cdGdldFByb3BlcnRpZXM6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50cyk7XG5c
dFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0ZShhcmdz
KTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0dXJu
IHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVydGll
czogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1vdmVQcm9w
ZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihw
cm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3Bd
O1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNhbGwodGhp
cywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5cdH0ub3ZlcmxvYWRT
ZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVs
ZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHByb3BlcnR5ICYmIHByb3BlcnR5
LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5KHByb3Ap
O1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKHByb3Ape1xuXHRc
dHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkg
JiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0aGlzLnJl
bW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhhc0NsYXNz
OiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiB0aGlzLmNs
YXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NOYW1lKTtc
blx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlzdCwgdGhpcyk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHRoaXMuY2xh
c3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSkuam9pbign
ICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBoYXNDbGFzc0xp
c3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNo
KHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXModGhpcy5jbGFz
c05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNzTmFtZXMuZXJhc2Us
IGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2luKCcgJyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNz
TmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhhc0Ns
YXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFkZENsYXNzKGNsYXNz
TmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRvcHQ6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9IEFy
cmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXHRcdGlm
IChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRc
dFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1ZSk7XG5cdFx0XHRp
ZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblxuXHRcdGlm
IChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7XG5cdFx0cmV0
dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUodGV4dCksIHdoZXJl
KTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3
aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5z
ZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7XG5cdFx0
ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hp
bGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBzOiBmdW5jdGlv
bihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdHJldHVy
biB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5cblx0Z2V0U2VsZWN0
ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkgMy4yLjFc
blx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQodGhpcy5vcHRpb25zKS5maWx0
ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQ7XG5cdFx0
fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHF1ZXJ5
U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4dGFy
ZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBlID0gZWwudHlwZTtcblx0XHRc
dGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8IHR5cGUg
PT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJldHVybjtc
blxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8gZWwuZ2V0
U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0Ly8gSUVcblx0XHRcdFx0cmV0
dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkgOiAoKHR5cGUgPT0g
J3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51bGwgOiBl
bC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQodmFsdWUpLmVhY2goZnVuY3Rp
b24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5U3Ry
aW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2RlVVJJQ29t
cG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5n
LmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5cbnZhciBhcHBlbmRJ
bnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0ZXI6ICdhZnRlckVu
ZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVnaW4nLFxuXHRpbnNp
ZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCgnYXBwZW5kSFRNTCcsICgn
aW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkgPyBm
dW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRIVE1MKGFwcGVuZElu
c2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4gdGhpcztcbn0gOiBm
dW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2RpdicsIHto
dG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsXG5cdFx0ZnJhZ21l
bnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0dXJuIHRoaXM7XG5c
dGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0
ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZHJlbltp
XSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShmcmFnbWVu
dCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0ZWQgPSB7fSwgc3Rv
cmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0dXJuIChzdG9yYWdl
W3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52YXIgY2xlYW4gPSBmdW5jdGlv
bihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRpZiAoaXRlbS5yZW1v
dmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChpdGVtLmNsZWFyQXR0cmlidXRl
cykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxsKXtcblx0XHRkZWxl
dGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtcblx0fVxuXHRyZXR1
cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywgb3B0aW9u
OiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtc
blxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGlsZHJlbiA9IGNsZWFuKHRoaXMp
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXkuZWFjaChjaGlsZHJlbiwgY2xl
YW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSxc
blxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252ZXJ0KHRoaXMuY2hpbGROb2Rl
cykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGRp
c3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBhcmVudE5vZGUpID8gdGhpcy5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVu
Y3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMgPSBjb250ZW50cyAhPT0gZmFs
c2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29udGVudHMpLCBjZSA9IFtjbG9u
ZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0XHRcdGNlLmFwcGVu
ZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHRc
dHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkp
O1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHR2YXIgbm9k
ZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAoIWtlZXBpZCkgbm9kZS5yZW1v
dmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKG5vZGUuY2xl
YXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0XHRcdFx0
bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmli
dXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUub3B0aW9ucyl7XG5cdFx0XHRc
dFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9ucztcblx0XHRcdFx0
XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVvW2pdLnNl
bGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZh
ciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRc
dGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVtZW50W3Byb3BdO1xu
XHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVnKXtcblx0XHRcdHZh
ciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSwgdG8gPSB0aGlzLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZvciAoaSA9IGNvLmxlbmd0aDsg
aS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRcdH1cblx0XHQvKjwv
bHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9XG5cbn0pO1xuXG5b
RWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0YWRk
TGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAod2luZG93LmF0dGFjaEV2ZW50
ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0ZWRbU2xpY2sudWlk
T2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcikg
dGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxz
ZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAodGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4s
ICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUs
IGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRyaWV2ZTogZnVuY3Rpb24ocHJv
cGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKSwg
cHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0ICE9IG51bGwgJiYgcHJvcCA9
PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRcdHJldHVybiBwcm9w
ICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9yZTogZnVuY3Rpb24ocHJvcGVy
dHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5c
dFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChT
bGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xuaWYgKHdpbmRvdy5hdHRhY2hF
dmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2MgPSBmdW5jdGlvbigp
e1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlmICh3aW5kb3cuQ29s
bGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2luZG93LnJlbW92ZUxpc3RlbmVy
KCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywgZ2Mp
O1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGllcyA9IHt9O1xuXG5cblxuRWxl
bWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVuY3Rpb24oc3R5bGUpe1xuXHRc
dHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5jdGlv
bigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQu
UHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMu
aHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRcdGlmIChodG1sID09IG51bGwp
IGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkgPT0gJ2FycmF5JykgaHRtbCA9
IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0aGlzLnN0eWxlU2hl
ZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQgPSBodG1s
O1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHR9LFxuXHRl
cmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcsICcnKTtcblx0fVxuXG59O1xu
XG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlubmVySFRN
TCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xuXG4vKjxsdElFOT4qL1xuLy8g
dGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5lcnNoaXYv
XG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgZnJhZ21lbnQ7
XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBvcnRzSFRNTDVFbGVtZW50cyA9
IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50
cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0YWxp
c3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1l
dGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8nLnNwbGl0
KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBs
ID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1lbnQodGFn
c1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5zdXBwb3J0
c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHR2YXIgdGFi
bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHR0YWJsZS5pbm5lckhUTUwg
PSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7XG59KTtcblxuLyo8bHRGRjQ+
Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAnPHRkPjwv
dGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJIVE1MID0gKHRyLmlu
bmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZGND4qL1xuXG5pZiAoIXN1cHBv
cnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBvcnRzSFRN
TDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0ID0gKGZ1bmN0aW9u
KHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRcdFx0dGFibGU6IFsxLCAnPHRh
YmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxlY3Q+JywgJzwvc2Vs
ZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3Rh
YmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9k
eT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9ucy50aGVhZCA9IHRyYW5zbGF0
aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRcdHJldHVybiBmdW5jdGlvbiho
dG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQpIHJl
dHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFy
IHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtcblx0XHRcdGlmICghd3JhcCAm
JiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107XG5cdFx0XHRpZiAo
IXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxuXHRcdFx0dmFyIGxldmVsID0g
d3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0YXJnZXQg
PSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LmFw
cGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5lckhUTUwgPSBbd3JhcFsxXSwg
aHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRcdFx0d2hpbGUgKGxldmVsLS0p
IHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0eSgpLmFkb3B0KHRh
cmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFn
bWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIgPSBudWxsO1xuXHRcdH07
XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8qPC9JRT4qL1xuXG4v
KjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScp
O1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+PC9zZWxl
Y3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVtZW50LlBy
b3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRh
ZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdzZWxlY3QnKSByZXR1cm4gdGhp
cy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLmdl
dEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBvcHRpb24g
PSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3Zh
bHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8g
b3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVl
ID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0fVxuXHR9LFxu
XG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0gdGhpcywgdGFnID0gb3B0aW9u
LmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAnb3B0aW9u
JykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRpZiAodGFnID09ICdz
ZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVkKClbMF0pKSByZXR1cm4gJyc7
XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpO1xuXHRc
dHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRpb24u
Z2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVsbDtcbi8qPC9sdElFOT4qL1xu
XG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmdldEF0dHJpYnV0
ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtcblx0c2V0OiBmdW5jdGlvbihp
ZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9IGlk
O1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgbnVsbDtc
blx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmli
dXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8L0lFPiovXG5cbn0pKCk7XG5c
bi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBFdmVu
dCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nlci5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwgQXJy
YXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlkZXM6IEV2ZW50XG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xudmFyIG5vcm1hbGl6ZVdoZWVs
U3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxpemVkO1xuXHRpZiAoZXZlbnQu
d2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50LndoZWVsRGVsdGEgJSAxMjAgPT0g
MCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVlbERlbHRhIC8gMTI7XG5cdH0g
ZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRhaWwg
fHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAzID09IDAgPyByYXdBbW91bnQg
LyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVkO1xufTtcblxu
dmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcsIGZ1bmN0
aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2luZG93O1xuXHRldmVudCA9IGV2
ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2ZW50O1xu
XHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1ZTtcblx0dGhpcy5z
aGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVudC5jdHJsS2V5O1xu
XHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRhID0gZXZlbnQubWV0YUtleTtc
blx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xuXHR2YXIgdGFyZ2V0ID0gZXZl
bnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0
Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHR0aGlzLnRhcmdl
dCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUuaW5kZXhPZigna2V5JykgPT0g
MCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5
Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykgdGhpcy5r
ZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5ZG93bicgfHwgdHlwZSA9PSAn
a2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUgPCAxMjQpIHRoaXMua2V5ID0g
J2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1ICYmIGNvZGUgPCAx
MDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRpZiAodGhpcy5rZXkgPT0gbnVs
bCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7XG5c
dH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2RibGNsaWNrJyB8fCB0eXBl
ID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ0RPTU1vdXNl
U2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0dmFyIGRvYyA9IHdp
bi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2Rl
ID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRcdHRoaXMucGFnZSA9
IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIDogZXZlbnQu
Y2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwp
ID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNjcm9sbFRvcFxuXHRcdH07XG5c
dFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBldmVu
dC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVudFgsXG5cdFx0XHR5OiAoZXZl
bnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5wYWdlWU9mZnNldCA6IGV2ZW50
LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlw
ZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0gbm9ybWFs
aXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENsaWNrID0gKGV2ZW50LndoaWNo
ID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0eXBlID09ICdtb3VzZW92ZXIn
IHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0eXBlID09
ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUgPT0gJ21vdXNlb3Zl
cicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJl
bGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJvbScgOiAndG8nKSArICdFbGVt
ZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVkLm5vZGVUeXBlID09IDMpIHJl
bGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBk
b2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZS5pbmRleE9mKCd0
b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykgPT0gMCl7XG5cdFx0dGhpcy5y
b3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBldmVudC5zY2FsZTtc
blx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXHRcdHRoaXMu
Y2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2YXIgdG91Y2hlcyA9
IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYgdG91Y2hl
c1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0dGhpcy5wYWdlID0g
e3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlzLmNsaWVudCA9IHt4
OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0XHR9XG5cdH1cblxuXHRpZiAo
IXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAoIXRoaXMucGFnZSkgdGhpcy5w
YWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtcblxuXHRzdG9wOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0aW9uKCk7
XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2
ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRl
bHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5w
cmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGVsc2UgdGhp
cy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0p
O1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkpe1xuXHRfa2V5c1tj
b2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01FdmVudC5kZWZpbmVLZXlzID0g
RE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5ET01FdmVudC5kZWZp
bmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAnMzcnOiAnbGVmdCcsICczOSc6
ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNrc3BhY2Un
LCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzogJ2VudGVyJ1xufSk7XG5cbn0p
KCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50XG5cbmRlc2NyaXB0
aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBldmVudHMuIFRo
aXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgY3VzdG9tIEVs
ZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92aWRlczogRWxlbWVudC5FdmVu
dFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50LlByb3BlcnRpZXMuZXZlbnRz
ID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRFdmVudHMoZXZlbnRzKTtcbn19
O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5c
blx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5y
ZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRzW3R5cGVdKSBldmVudHNbdHlw
ZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChldmVudHNbdHlwZV0ua2V5cy5j
b250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLnB1c2goZm4p
O1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBFbGVtZW50LkV2ZW50
c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cdFx0
aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2FsbCh0
aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7XG5cdFx0XHRcdGNv
bmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlv
bi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xu
XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1
c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwo
dGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVuY3Rpb24oKXtcblx0XHRcdHJl
dHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2ZW50ID0gRWxlbWVu
dC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVudCl7XG5cdFx0XHRp
ZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlvbihldmVudCl7XG5c
dFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0V2luZG93KCkpO1xu
XHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNlKSBldmVu
dC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkZExpc3RlbmVyKHJl
YWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0XHRldmVudHNbdHlwZV0udmFs
dWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6
IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZl
bnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5c
dFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGluZGV4ID0gbGlzdC5rZXlzLmlu
ZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIHZh
bHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LmtleXNbaW5kZXhdO1xu
XHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFyIGN1c3RvbSA9IEVsZW1lbnQu
RXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vblJlbW92
ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1c3Rv
bS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0
eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkgPyB0
aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpcztcblx0
fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgZXZlbnQg
aW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNbZXZlbnRdKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0
dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0XHRcdGZv
ciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtc
blx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0YWNoZWQgPSB0aGlzLnJldHJp
ZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpcztcblx0XHRpZiAo
IWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3ZlRXZlbnRz
KHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpO1xuXHRcdH0gZWxzZSBpZiAo
YXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVudHNdLmtleXMuZWFjaChmdW5j
dGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBmbik7XG5cdFx0XHR9
LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5
KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFl
dmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNv
bnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtc
blx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxz
ZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7XG5cdFx0ZnJvbSA9
IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBmcm9tLnJldHJpZXZlKCdldmVu
dHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCF0eXBlKXtcblx0
XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJvbSwg
ZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5cdFx0XHRldmVudHNb
dHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5hZGRFdmVudCh0eXBl
LCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGljazogMiwgZGJsY2xpY2s6IDIs
IG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0dG9u
c1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8vbW91c2Ug
d2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxlY3Rz
dGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50XG5cdGtleWRvd246IDIsIGtl
eXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmllbnRhdGlvbmNoYW5nZTogMiwg
Ly8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6IDIsIHRv
dWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVjaGFuZ2U6
IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJsdXI6IDIsIGNoYW5n
ZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBwYXN0ZTogMiwgaW5wdXQ6IDIs
IC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9hZDogMiwg
cmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRlY2hhbmdl
OiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNob3c6IDIs
IHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBhYm9ydDogMSwgc2Nyb2xsOiAx
LCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVudHMgPSB7XG5cdG1vdXNld2hl
ZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hlZWwnIDogJ29ubW91
c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAnRE9NTW91c2VTY3JvbGwnXG5c
dH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIHJlbGF0ZWQgPSBl
dmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBudWxsKSByZXR1cm4gdHJ1ZTtc
blx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAocmVsYXRlZCAhPSB0aGlz
ICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9jdW1lbnQn
ICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlmICgnb25tb3VzZWVudGVyJyBp
biBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3Vz
ZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2ZSA9IDI7XG5cdEVsZW1lbnQu
TW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRFbGVtZW50LkV2ZW50cy5tb3Vz
ZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogY2hlY2tc
blx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRcdGJhc2U6ICdtb3Vz
ZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxuXG4vKjxsdElFOT4qL1xuaWYg
KCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLnByb3Bl
cnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdlID0ge1xuXHRcdGJhc2U6IGZ1
bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0XHRcdHJldHVybiAodGhp
cy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdj
aGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJztcblx0XHR9LFxuXHRcdGNv
bmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUgIT0gJ3By
b3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0gJ2NoZWNrZWQnO1xu
XHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5u
YW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVsZW1l
bnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgZm9yIG1vcmUg
ZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EZWxl
Z2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZXZlbnRMaXN0ZW5lclN1
cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50
cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNvdXQgPSAyO1xuXG52YXIgYnVi
YmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHR3aGls
ZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAobWF0Y2godGFyZ2V0LCBldmVu
dCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7XG5cdFx0dGFyZ2V0ID0g
ZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59O1xuXG52YXIgbWFwID0ge1xu
XHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBF
bGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7XG5cdFx0YmFzZTog
J21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5cdH0s
XG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3VwcG9ydCA/
ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVyOiB7XG5cdFx0YmFz
ZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9jdXNvdXQnLFxuXHRcdGNhcHR1
cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0gJyRkZWxlZ2F0aW9u
Oic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cblx0cmV0dXJuIHtcblxu
XHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24oc2VsZiwgdWlkKXtc
blx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMn
LCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFyIGkgPSBs
aXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRoZSBmb3JtIG1heSBoYXZlIGJl
ZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQvLyByZW1vdmVFdmVu
dCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVudCB3YXNcblx0XHRcdFx0Ly8g
cmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCkg
bGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7XG5cdFx0XHR9XG5c
dFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFy
Z2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0LmdldCgndGFnJykgPT0gJ2Zvcm0n
KSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtcblx0XHRcdGlmICgh
Zm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5yZXRyaWV2ZShfa2V5
ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxpc3RlbmVyID0gbGlzdGVuZXJz
W3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1zID0gbGlzdGVuZXIu
Zm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYgKGZvcm1zLmluZGV4T2YoZm9y
bSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5cblx0XHRcdHZhciBf
Zm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwg
ZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVudCh0eXBlLCBfZm4p
O1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVuZXJzW3VpZF0gPSBsaXN0ZW5l
cjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywgbGlzdGVuZXJz
KTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUp
e1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0XHRsaXN0ZW46IGZ1bmN0aW9u
KHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0XHR2YXIgZXZlbnRzID0ge2Js
dXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2ZW50cyk7XG5cdFx0
XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0YnVi
YmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0XHRl
dmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xufTtcblxuaWYgKCFl
dmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHtcblx0c3VibWl0OiBmb3Jt
T2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2VydmVyKCdyZXNldCcpLFxuXHRj
aGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlucHV0T2JzZXJ2ZXIo
J3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJvdG8gPSBFbGVtZW50LnByb3Rv
dHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0cmVtb3ZlRXZlbnQgPSBwcm90
by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2Qpe1xuXHRy
ZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlmICh0eXBlLmluZGV4
T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNh
cHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0eXBlKS5leHByZXNzaW9uc1sw
XVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxheScpIHJldHVybiBv
bGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIG5ld1R5cGUgPSBw
YXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24ocHNl
dWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtleSArIChwc2V1ZG8udmFsdWUg
PyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0fSk7XG5cdFx0b2xkLmNhbGwo
dGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBuZXdUeXBlLCBw
YXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtcblxudmFyIGRlbGVnYXRpb24g
PSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7XG5cdFx0dmFyIHN0
b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdl
W3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQgaW4gc3RvcmVkKXtcblx0XHRc
dGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191aWRdLm1hdGNoID09IG1hdGNo
KSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBlLCBfbWF0Y2ggPSBt
YXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0dHlwZSA9IF9tYXAu
YmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0KXtcblx0XHRcdHJl
dHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxuXHRcdHZhciBlbGVt
ZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9tYXAuY29uZGl0aW9u
IHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0aW9uKXtcblx0XHRcdHZhciBf
X21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVu
dC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnQpe1xuXHRc
dFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRpb24uY2FsbCh0YXJn
ZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGYgPSB0aGlz
LCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVsZWdhdG9yID0gX21hcC5saXN0
ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2ZW50
ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRhcmdl
dCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpO1xuXHRc
dH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2ZW50
ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRhcmdl
dCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHR9O1xuXG5c
dFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRdID0ge1xuXHRcdFx0
bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0b3I6IGRlbGVnYXRv
clxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0cmV0dXJuIGFkZEV2
ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHR9LFxuXG5c
dHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQpe1xuXHRcdHZhciBz
dG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFn
ZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0XHRpZiAoX3VpZCl7
XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0uZGVsZWdh
dG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBf
dHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3VpZCk7XG5c
dFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7
XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9t
YXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRcdGlmIChmbikgZm9y
IChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAo
cy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5yZW1vdmVF
dmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpO1xuXHRcdH0gZWxzZSBmb3Ig
KF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChz
Lm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwg
bWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufTtc
blxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXHRh
ZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRkRXZlbnQpLFxuXHRyZW1vdmVF
dmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpXG59KTtcblxu
fSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxlXG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxlbWVu
dHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVudC5TdHlsZVxuXG4uLi5cbiov
XG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsO1xuXG4vLzxs
dElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0eWxlcyB3
aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUuY29sb3IgPSBudWxsO1xudmFy
IGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJztcblxuLy8gY2hl
Y2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxlcyBpbiB0
aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgtc3R5bGUt
Y29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJztcbmVsLnN0eWxlLmJvcmRl
ciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0eWxlLmJv
cmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZhciBoYXNHZXRDb21w
dXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxcblx0c3VwcG9ydEJvcmRlclJh
ZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJvcmRlclJhZGl1cyAh
PSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0ge3NldDogZnVuY3Rpb24oc3R5
bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xuXG52YXIgaGFzT3BhY2l0eSA9
IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9IChodG1sLnN0eWxl
LmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNpdHk9KFtcXGQuXSsp
XFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7
XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVsZW1lbnQuc3R5bGUu
dmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNpYmxlJyA6
ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0RmlsdGVyID0gZnVuY3Rpb24oZWxl
bWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG5cdFx0
ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVy
JykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVzdChmaWx0ZXIpID8gZmlsdGVy
LnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1ZSkudHJpbSgpO1xu
XHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTtcbn07
XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlvbihl
bGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTtcbn0g
OiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGlmICghZWxlbWVu
dC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkgZWxlbWVu
dC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBvcGFjaXR5ID09IDEp
e1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7XG5cdFx0aWYgKG9wYWNpdHkg
PT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50LCByZUFs
cGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0RmlsdGVyKGVs
ZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCkubGltaXQo
MCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZpc2liaWxpdHkpKTtcblxudmFy
IGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3Bh
Y2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUo
J29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5LnRvRmxv
YXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBmaWx0ZXIg
PSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0
ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3BhY2l0eSA9IGZpbHRlci5tYXRj
aChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwgfHwgZmlsdGVyID09IG51bGwp
ID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFy
IG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpO1xuXHRpZiAob3BhY2l0eSA9
PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9PSAnaGlkZGVuJyA/
IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZhciBmbG9hdE5hbWUgPSAoaHRt
bC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9hdCcsXG5c
dG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAnNTAlJywg
cmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3JvdW5kUG9zaXRpb25Y
WSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0gbnVsbCksXG5cdHByZWZpeFBh
dHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbihwcm9wZXJ0eSl7
XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5jYW1lbENh
c2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24oc3R5bGUs
IHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKXtcblx0
XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpO1xuXHRcdHByb3BlcnR5ICs9
ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xufTtcbi8vPC9s
dElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0
aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgdGhpcy5jdXJy
ZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1lbENhc2UocHJvcGVydHkpXTtc
blx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRlZmF1bHRW
aWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVybiAoY29tcHV0ZWQpID8gY29t
cHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxvYXROYW1lKSA/ICdmbG9hdCcg
OiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxuXHRzZXRTdHlsZTogZnVuY3Rp
b24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKXtcblx0
XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXHRcdFx0
c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0
cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHBy
b3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIg
bWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7XG5cdFx0
XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkpe1xuXHRc
dFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4gKHR5cGVPZih2YWwp
ID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0aC5yb3VuZCh2YWwpKSA6IHZh
bDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09IFN0cmluZyhO
dW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuXHRcdH1c
blx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0SUU5PlxuXHRcdGlm
ICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0eWxlcyAm
JiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVTdHlsZSh0aGlzLnN0
eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmIChwcm9wZXJ0
eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMpO1xuXHRcdHByb3BlcnR5ID0g
Y2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5c
dFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHkuaW5kZXhPZignYm9yZGVyUmFk
aXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3Jk
ZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJCb3R0
b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRcdHJldHVybiB0aGlz
LnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlzKS5qb2luKCcgJyk7XG5cdFx0
fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0XHRpZiAoIXJlc3Vs
dCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVudC5TaG9ydFN0eWxl
cy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQgPSBbXTtcblx0XHRc
dFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5XSkgcmVzdWx0LnB1
c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuam9pbignICcpO1xu
XHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtc
blx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZICYmIC9eYmFja2dyb3VuZFBv
c2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxh
Y2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0aW9uKXtcblx0XHRc
dFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0XHRcdH0pIHx8ICcwcHgnO1xu
XHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9u
JykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtcblx0XHRcdHJlc3VsdCA9IFN0
cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2JhP1xcKFtc
XGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2Uo
Y29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1cblx0XHRpZiAoIWhhc0dldENv
bXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtcblx0XHRcdGlmICgoL14oaGVp
Z2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQvLnRlc3QocmVzdWx0KSkpe1xu
XHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0JywgJ3Jp
Z2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRcdHZhbHVlcy5lYWNo
KGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0U3R5bGUoJ2JvcmRl
ci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3BhZGRpbmct
JyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJuIHRo
aXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0gc2l6ZSArICdweCc7XG5cdFx0
XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykudGVzdChw
cm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0XHRcdHJldHVybiAn
MHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKHJldHVybnNCb3Jk
ZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxCb3R0b218TGVmdCk/JC8udGVz
dChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5y
ZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAkMScpO1xuXHRcdH1cblx0XHQv
LzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNldFN0eWxlczogZnVu
Y3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHRoaXMuc2V0U3R5
bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0QXJyYXkuZmxh
dHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJlc3VsdFtrZXldID0g
dGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5c
dH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4JywgdG9wOiAnQHB4
JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0BweCcsIGhlaWdodDog
J0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4JywgbWluV2lkdGg6ICdAcHgn
LCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCknLCBi
YWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgnLCBjb2xv
cjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2luZzogJ0Bw
eCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgpJyxcblx0
bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0BweCBAcHggQHB4IEBweCcsIGJv
cmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAs
IEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHlsZTog
J0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAs
IEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9udFdl
aWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBib3JkZXJSYWRpdXM6
ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hvcnRTdHlsZXMgPSB7
bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJvcmRlcldpZHRoOiB7fSwgYm9y
ZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1RvcCcsICdSaWdodCcsICdCb3R0
b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtcblx0dmFyIFNob3J0ID0gRWxl
bWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzO1xuXHRbJ21hcmdp
bicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5cdFx0dmFyIHNkID0gc3R5bGUg
KyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4Jztcblx0
fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xuXHRTaG9ydC5ib3JkZXJbYmRd
ID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3ID0gYmQgKyAnV2lk
dGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJztcblx0U2hvcnRbYmRd
ID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9IEFsbFti
ZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1bYmRzXSA9
IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvcltiZGNdID0gU2hvcnRbYmRdW2Jk
Y10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5cbmlmIChoYXNCYWNrZ3JvdW5k
UG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24gPSB7YmFj
a2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAnQCd9O1xufSkoKTtc
blxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9sbCwgb3IgcG9zaXRpb25pbmcg
b2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0aW9uaW5nIGJhc2VkIG9uIHRo
ZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBhbmQgc21hcnQgYnJvd3NlciBm
aXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRt
bCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBbWVVJXShodHRwOi8vZGV2ZWxv
cGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6Ly9kZXZlbG9wZXIu
eWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEVsZW1l
bnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNpb25zXVxuXG4uLi5cbiovXG5c
bihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWxlbWVudC5z
dHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbnZhciBicm9r
ZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09PSBlbGVtZW50KTtcbmVsZW1l
bnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25lbnRzID0gWydoZWlnaHQnLCAn
cGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRvcFdpZHRoJywgJ2JvcmRlckJv
dHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGluZ0xlZnQn
LCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJ107
XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpe1xuXG5cdHZhciBnQ1MgPSB3
aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRzID0ge3g6IDAsIHk6IDB9O1xu
XG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy55ICs9
IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhDb21wb25lbnRzLmVhY2goZnVu
Y3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7
XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7XG5c
dHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycgfHwgaXNCb2R5
KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJu
IGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QoZWwudGFnTmFtZSk7
XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1bmN0aW9uKHgsIHkp
e1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5nZXRXaW5kb3coKS5zY3JvbGxU
byh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0geDtcblx0XHRc
dHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5n
ZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5cblx0XHQvLyBUaGlzIGlmIGNs
YXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBnZXRCb3VuZGluZ0NsaWVudFJl
Y3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRpZiAoIXdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRoaXMub2Zm
c2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2ZyBzZWN0aW9uIHVu
ZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4gYmUgcmVtb3ZlZCB3aGVuIEZG
IGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0dHBzOi8vYnVnemls
bGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlmICh0aGlzLmdldCgn
dGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXplKHRoaXMpO1xuXG5cdFx0dHJ5
IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRc
dFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9O1xuXHRcdH0gY2F0
Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0
U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhp
cy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9s
bFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5j
dGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdl
dFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5OiB0aGlzLnNjcm9s
bFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVu
dCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0d2hpbGUg
KGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1l
bnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5zY3JvbGxUb3A7XG5c
dFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdH1cblx0XHRyZXR1cm4gcG9z
aXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZzZXRQYXJlbnQgPyBm
dW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVsZW1l
bnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVy
biBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJpbmcoZWxlbWVudCwg
J3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0aWMgOiBpc09mZnNldDtcblx0
XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKXtcblx0XHRcdGlmIChpc09m
ZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAo
aXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdm
aXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlbGVtZW50Lm9m
ZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5c
blx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFzR2V0Qm91bmRpbmdDbGllbnRS
ZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0XHRpZiAoaGFzR2V0Qm91bmRp
bmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50KCkuZG9j
dW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xsKCksXG5c
dFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0XHRcdGlzRml4ZWQg
PSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7XG5cblx0XHRcdHJl
dHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueCAr
ICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCxcblx0XHRc
dFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnkgKyAoKGlzRml4ZWQpID8g
MCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRcdFx0fTtcblx0XHR9XG5cblx0
XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdGlmIChp
c0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdoaWxlIChlbGVtZW50ICYmICFp
c0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExlZnQ7
XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5cdFx0XHRlbGVtZW50
ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xu
XHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5cdFx0dmFyIG9mZnNl
dCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5nZXRTY3JvbGxzKCk7
XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0LnggLSBzY3JvbGwueCxcblx0
XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5cdFx0aWYgKHJlbGF0aXZlICYm
IChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0dmFyIHJlbGF0aXZl
UG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHt4OiBwb3Np
dGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRlcihyZWxhdGl2ZSksIHk6IHBv
c2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3JkZXIocmVsYXRpdmUpfTtcblx0
XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5j
dGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5k
b3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRp
b24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0dmFyIG9iaiA9
IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0aW9uLnksXG5cdFx0
XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9O1xuXHRcdG9iai5y
aWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5ib3R0b20gPSBvYmoudG9wICsg
b2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1dGVQb3NpdGlvbjog
ZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogb2JqLnggLSBzdHlsZU51
bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDogb2JqLnkgLSBzdHlsZU51bWJl
cih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxuXHRzZXRQb3NpdGlvbjogZnVu
Y3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9zaXRp
b24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgnaW1w
bGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENv
bXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgsIHk6IGRv
Yy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTtc
blx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwgeTogd2lu
LnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksXG5cdFx0
XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0aGlzLmdldERvY3VtZW50KCku
Ym9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBib2R5LnNj
cm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3JvbGxIZWlnaHQsIGJvZHkuc2Ny
b2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHRyZXR1cm4ge3RvcDog
MCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6ZS55
LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBtZXRob2RzXG5cbnZh
ciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxuZnVuY3Rpb24gc3R5
bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWxlbWVudCwg
c3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJvcmRlcihlbGVtZW50
KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRoJyk7XG59
XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihl
bGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gaXNCb2R5KGVsZW1l
bnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRhZ05hbWUp
O1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpe1xuXHR2YXIgZG9jID0g
ZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBkb2Mu
Y29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcbn1cblxu
fSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBvc2l0aW9u
J30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRdLmludm9r
ZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxUb3A6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0fSxcblxuXHRnZXRTY3JvbGxM
ZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7XG5cdH0sXG5c
blx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9s
bFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFRvcDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5cblx0Z2V0TGVmdDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7XG5cdH1cblxufSk7
XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBiYXNp
YyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNzZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0NoYWluLCBFdmVu
dHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRlczogRnhcblxuLi4uXG4qL1xu
XG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7XG5cblx0SW1w
bGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRv
cHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25DYW5jZWw6IG5pbCxc
blx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxuXHRcdHVuaXQ6IGZh
bHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxuXHRcdGZyYW1lU2tp
cDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0
aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlzO1xu
XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHRnZXRUcmFuc2l0aW9uOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0XHRcdHJldHVybiAtKE1hdGgu
Y29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9LFxuXG5cdHN0ZXA6IGZ1bmN0
aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApe1xuXHRcdFx0dmFyIGRp
ZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBmcmFtZXMg
PSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhpcy50aW1lID0gbm93O1xuXHRc
dFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJhbWUr
Kztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKXtcblx0XHRcdHZh
ciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8gdGhpcy5mcmFtZXMpO1xuXHRc
dFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEpKTtcblx0
XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhpcy5z
ZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpO1xuXHRcdFx0dGhpcy5zdG9w
KCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRyZXR1cm4gbm93
O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0cmV0
dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rp
b24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVybiB0cnVlO1xuXHRcdHN3aXRj
aCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwo
KTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxs
ZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1
cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRvKXtcblx0XHRpZiAo
IXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmZyb20gPSBmcm9t
O1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5mcmFt
ZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0dGhpcy50cmFuc2l0
aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9IHRoaXMub3B0aW9u
cy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRpb25z
LmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNbZHVyYXRpb25dIHx8
IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztc
blx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24gLyB0
aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0g
J3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1YmplY3QpO1xuXHRc
dH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpO1xuXHRcdHB1c2hJ
bnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c3Rv
cDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRp
bWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZw
cyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5cdFx0XHRcdHRoaXMu
ZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHRcdGlmICghdGhpcy5j
YWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1YmplY3Qp
O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0b3AnLCB0aGlzLnN1
YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRoaXMuc3ViamVjdCA9PT0gdGhp
cyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRc
dFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMu
b3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhp
cy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xlYXJDaGFpbigpO1xuXHRcdFx0
dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRc
dFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMu
b3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXN1bWU6
IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkgcHVzaEluc3RhbmNlLmNhbGwo
dGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aXNS
dW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5zdGFuY2VzW3RoaXMub3B0aW9u
cy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFpbnModGhpcyk7XG5cdH0sXG5c
blx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmZyYW1lIDwgdGhpcy5m
cmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0pO1xuXG5GeC5jb21wdXRlID0g
ZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0byAtIGZyb20pICogZGVsdGEg
KyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6IDI1MCwgJ25vcm1hbCc6IDUw
MCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xuXG52YXIgaW5zdGFuY2VzID0g
e30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdHZhciBub3cgPSBE
YXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdHZhciBp
bnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBpbnN0YW5jZS5zdGVwKG5vdyk7
XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlz
dCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtcblx0bGlzdC5wdXNo
KHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxvb3AucGVyaW9kaWNh
bChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5cbnZhciBwdWxsSW5zdGFuY2Ug
PSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdO1xuXHRpZiAobGlz
dCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxpc3QubGVuZ3RoICYmIHRpbWVy
c1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRcdHRpbWVyc1tmcHNd
ID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59O1xuXG59KSgpO1xu
XG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENT
UyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5FbGVtZW50
cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRngsIEVsZW1l
bnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4qL1xuXG5GeC5DU1MgPSBuZXcg
Q2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhlIGJhc2UgZnJvbS90
byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWVz
KXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0dmFyIGZyb20gPSB2
YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9PSBudWxsKXtcblx0XHRcdHRv
ID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTtcblx0XHRc
dHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFwdGVkIGZyb206IGh0
dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rlci9meC5qcyNMMjk5XG5cdFx0
XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdzdHJpbmcnICYmIGZyb20uc2xp
Y2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkgIT0gMCl7XG5cdFx0
XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7XG5cdFx0XHRcdHZhciB2
YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHRcdC8vIElF
IGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdpZHRoXG5cdFx0XHRcdGlmICgh
KC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlWygn
cGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0XHRcdFx0aWYgKHZhbHVlID09
IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3YXJkcycgaHR0cDov
L2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5
MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7XG5cdFx0XHRcdFx0
XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGVs
ZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0g
bGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9ICh0byB8fCAxKSAv
IChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0KGZyb20pIHx8IDApO1xuXHRc
dFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7XG5cdFx0XHR9XG5c
dFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9tKSwgdG86IHRoaXMucGFyc2Uo
dG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXlcblxuXHRwYXJz
ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2YWx1ZSko
KTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpID8gdmFsdWUuc3BsaXQo
JyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rp
b24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFyIGZvdW5kID0gZmFs
c2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFyc2VyKXtc
blx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZhciBwYXJzZWQgPSBwYXJzZXIu
cGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09IDApIGZvdW5kID0g
e3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRcdH0pO1xuXHRcdFx0Zm91bmQg
PSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vycy5TdHJpbmd9O1xu
XHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8vY29tcHV0ZXMgYnkgYSBm
cm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLlxuXG5cdGNv
bXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNvbXB1dGVkID0gW107
XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihp
KXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21wdXRlKGZy
b21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5wYXJzZXJ9
KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZng6
Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5cdC8vc2VydmVzIHRo
ZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5c
dFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5wYXJz
ZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0dmFsdWUuZWFjaChmdW5jdGlv
bihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25jYXQoYml0LnBhcnNlci5zZXJ2
ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmV0dXJuZWQ7XG5cdH0s
XG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5cdHJlbmRlcjogZnVu
Y3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtcblx0XHRlbGVtZW50LnNldFN0
eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7XG5cdH0sXG5cblx0Ly9zZWFy
Y2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxlY3Rv
clxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRcdGlmIChGeC5DU1MuQ2FjaGVb
c2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0XHR2YXIgdG8gPSB7
fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5lc2NhcGVSZWdFeHAo
KSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVuY3Rpb24ocnVsZXMpe1xuXHRc
dFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRcdGlmIChydWxlLm1l
ZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxlcyB8fCBydWxlLmNzc1J1bGVz
KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFydWxlLnN0eWxl
KSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRleHQp
ID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBmdW5jdGlvbihtKXtcblx0XHRc
dFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51bGw7XG5cdFx0XHRc
dGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVzdChzZWxlY3RvclRleHQpKSBy
ZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2YWx1
ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtzdHlsZV0gfHwgRWxlbWVudC5T
aG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9IFN0cmluZyhydWxl
LnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3QodmFs
dWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtc
blx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cywgZnVuY3Rpb24o
c2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0aWYgKGhyZWYgJiYg
aHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1bWVudC5kb21haW4p
ID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVldC5j
c3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7XG5cdFx0cmV0dXJu
IEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59KTtcblxuRnguQ1NTLkNhY2hl
ID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9yOiB7XG5cdFx0cGFyc2U6IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05YS1mXXszLDZ9JC9p
KSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0cmV0dXJuICgodmFsdWUgPSB2
YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8pKSkgPyBbdmFsdWVbMV0s
IHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxuXHRcdGNvbXB1dGU6IGZ1bmN0
aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAoZnVuY3Rpb24odmFs
dWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21baV0sIHRv
W2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xuXHRcdH1cblx0fSxcblxuXHRO
dW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRjb21wdXRlOiBGeC5jb21wdXRl
LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRyZXR1cm4gKHVuaXQp
ID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0cmluZzoge1xuXHRc
dHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbih6
ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlv
bih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0fVxuXG59O1xuXG5cblxuLypc
bi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGVz
LCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIGZvciBh
biBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3IgQ1NTIGJhc2VkIHNlbGVjdG9y
IHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNT
U1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5GeC5Nb3JwaCA9IG5ldyBDbGFz
cyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1l
bnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50
LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNldDog
ZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93ID0gdGhp
cy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykgdGhpcy5yZW5kZXIodGhpcy5l
bGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZhciBu
b3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50KGZy
b21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRzdGFydDog
ZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMpKSBy
ZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0cmluZycpIHByb3Bl
cnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJvbSA9IHt9LCB0byA9
IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5cdFx0XHR2YXIgcGFyc2VkID0g
dGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7XG5cdFx0XHRmcm9t
W3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNlZC50bztcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9w
ZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5n
ZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBoID0gdGhpcy5yZXRy
aWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBoID0gbmV3IEZ4Lk1v
cnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbW9ycGgnLCBt
b3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxuXG59O1xuXG5FbGVtZW50Lmlt
cGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0aGlzLmdldCgnbW9y
cGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4t
LS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEgc2V0
IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIEZ4IENs
YXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEVh
c2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0cGVubmVy
LmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdpdGggTW9v
VG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRnguVHJhbnNpdGlvbnNcblxuLi4u
XG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNpdGlvbnMu
U2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7XG5cdFx0
XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9IEZ4LlRyYW5zaXRp
b25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBdLmNhcGl0
YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScgKyBkYXRh
WzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkgOiAnJyld
O1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4LlRyYW5zaXRpb24g
PSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBBcnJheS5jb252ZXJ0
KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVybiB0cmFu
c2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hcHBlbmQoZWFzZUlu
LCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rpb24ocG9zKXtcblx0
XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpO1xuXHRcdH0sXG5cdFx0
ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIChwb3MgPD0gMC41ID8gdHJh
bnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAtIHBvcyks
IHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zID0ge1xu
XG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJuIHplcm87XG5cdH1cblxufTtc
blxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25zKXtcblx0
Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRnguVHJhbnNpdGlvbnNbdHJhbnNp
dGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXSk7XG59O1xu
XG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0
cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0fSxcblxuXHRFeHBvOiBmdW5j
dGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkpO1xuXHR9LFxuXG5c
dENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29zKHAp
KTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGguY29z
KHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVuY3Rpb24ocCwgeCl7XG5cdFx0
eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgMikgKiAoKHgg
KyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0aW9uKHApe1xuXHRcdHZhciB2
YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwgYiAvPSAyKXtcblx0
XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1ZSA9IGIgKiBiIC0g
TWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7XG5cdFx0XHRcdGJyZWFrO1xu
XHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0RWxhc3RpYzogZnVu
Y3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1hdGguY29z
KDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5cdH1cblxufSk7XG5c
blsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24odHJhbnNp
dGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRp
b24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTtcblx0fSk7XG59
KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkg
RnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFuIGVs
ZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NT
XG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdobGlnaHRd
XG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNT
UyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlz
LmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlz
LnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBub3cp
e1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdFx0bm93ID0gcHJvcGVydHk7
XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnByb3BlcnR5
O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHByb3BlcnR5LCBub3csIHRo
aXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdGFydDogZnVu
Y3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydHks
IGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5mbGF0dGVuKGFy
Z3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0eSB8fCBh
cmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQs
IHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVudChwYXJzZWQuZnJv
bSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnR3ZWVuID0g
e1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJykuY2Fu
Y2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRn
ZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2ZSgndHdlZW4nKTtc
blx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMsIHtsaW5r
OiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7XG5cdFx0fVxu
XHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0
dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVu
Jykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyksIG1l
dGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVudHMpLCB0b2dnbGU7XG5cdFx0
aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRcdHN3aXRjaCAoYXJn
c1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAxOyBi
cmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAwOyBi
cmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDE7IGJy
ZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMDsgYnJl
YWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9IHRoaXMucmV0cmll
dmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHknKSA9PSAxKTtcblx0XHRcdFx0
bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAwIDogMTtcblx0XHRc
dFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0b2dnbGUgPSB0cnVl
O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0
fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7XG5cdFx0ZmFk
ZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0byA9IGFyZ3NbYXJncy5sZW5n
dGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0dGhpcy5zZXRTdHls
ZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG5cdFx0fSBl
bHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5ndGgpe1xuXHRcdFx0
XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0eWxl
KCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLmNhbGxDaGFpbigpO1xu
XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2li
aWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmYWRlLmNo
YWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ29wYWNp
dHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHkn
LCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHR9KTtcblx0XHR9
XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0
LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRoaXMucmV0cmlldmUoJ2hpZ2hs
aWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InKSk7XG5cdFx0
XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYnIDogZW5kO1xuXHRcdH1cblx0
XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0d2Vlbi5zdGFydCgnYmFja2dy
b3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5jaGFpbihmdW5jdGlvbigpe1xu
XHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMucmV0cmlldmUoJ2hp
Z2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxDaGFpbigpO1xuXHRcdH0uYmlu
ZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFt
ZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVxdWVzdCBD
bGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBD
bGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJlcXVlc3RcblxuLi4uXG4qL1xu
XG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxuXHRwcm9ncmVzc1N1
cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJlcXVlc3QpO1xuXG52YXIgUmVx
dWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0NoYWlu
LCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7Lypcblx0
XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRzdGFydDogZnVuY3Rpb24oZXZl
bnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRc
dG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNlbDogZnVuY3Rpb24oKXt9LFxu
XHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCByZXNwb25zZVhNTCl7fSxcblx0
XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4Y2VwdGlvbjogZnVuY3Rpb24o
aGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBmdW5jdGlvbigpe30sXG5cdFx0
dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50aWFsczogZmFsc2Us
Ki9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdCdY
LVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdBY2NlcHQnOiAndGV4
dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidc
blx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDogZmFsc2UsXG5cdFx0bWV0aG9k
OiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNTdWNjZXNzOiBudWxsLFxuXHRc
dGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRcdGVuY29kaW5nOiAn
dXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRldmFsUmVzcG9uc2U6IGZhbHNl
LFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vcblx0fSxcblxuXHRpbml0aWFs
aXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVl
c3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpcy5oZWFkZXJzID0g
dGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5nZTogZnVuY3Rpb24o
KXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9IDQg
fHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRc
dHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0
XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMuc3RhdHVzID0gKHN0YXR1cyA9
PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHhoci5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25w
cm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdGlmICh0aGlzLnRpbWVyKXtc
blx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVy
O1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDogdGhpcy54aHIucmVzcG9uc2VU
ZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtcblx0XHRpZiAodGhpcy5vcHRp
b25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlcblx0XHRcdHRoaXMuc3VjY2Vz
cyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1sKTtcblx0XHRlbHNlXG5cdFx0
XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAoc3RhdHVzID49IDIwMCAmJiBz
dGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9uKHRl
eHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgvKGVjbWF8amF2YSlz
Y3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSkpIHJldHVybiBCcm93
c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMub3B0aW9u
cy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1sKXtc
blx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQpLCB4bWwpO1xuXHRc
dHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtcblx0fSxcblxuXHRvblN1Y2Nl
c3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJndW1lbnRz
KS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxDaGFpbigpO1xuXHR9LFxuXG5c
dGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtcblx0XHR0aGlzLnJl
amVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRvbkZh
aWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmlyZUV2
ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFydDogZnVuY3Rpb24o
ZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRoaXMueGhy
XSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVF
dmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0dGltZW91dDog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTtcblx0
XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjogdGhpcy54aHJ9KTtcblx0fSxc
blxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0aGlzLmhlYWRlcnNb
bmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRIZWFkZXI6IGZ1
bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5c
dFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG5cdFx0fS5iaW5k
KHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVu
bmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5cdFx0
XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2Ug
J2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyBy
ZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzZW5kOiBm
dW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9ucykpIHJldHVybiB0
aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1Y2Nl
c3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHRcdHZh
ciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBlID09ICdzdHJpbmcnIHx8IHR5
cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9O1xuXG5cdFx0dmFyIG9s
ZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7ZGF0YTogb2xk
LmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0aW9ucyk7XG5cdFx0
dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1ldGhv
ZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0Y2ggKHR5cGVPZihk
YXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRhdGEpLnRv
UXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzog
ZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlz
Lm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlzLm9w
dGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRhdGEg
OiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbXVsYXRpb24gJiYgIVsn
Z2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBfbWV0aG9kID0gJ19t
ZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0aG9kICsgJyYnICsg
ZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0fVxuXG5cdFx0aWYg
KHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdwdXQnXS5jb250YWlucyhtZXRo
b2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5jb2RpbmcpID8gJzsg
Y2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7XG5cdFx0XHR0aGlzLmhlYWRl
cnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcg
KyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9jYXRp
b24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRleE9mKCcv
Jyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmltUG9zaXRpb24gPSB1cmwuaW5k
ZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3NpdGlvbik7XG5cblx0
XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/
JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTtcblxuXHRcdGlmIChkYXRh
ICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxldGUnKSl7XG5cdFx0XHR1cmwg
Kz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBkYXRhO1xuXHRcdFx0ZGF0
YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmIChwcm9n
cmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5sb2Fkc3RhcnQuYmlu
ZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy5iaW5kKHRoaXMp
O1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRoaXMu
b3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29yZCk7
XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAmJiAnd2l0aENyZWRlbnRp
YWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG5cdFx0eGhyLm9ucmVh
ZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO1xuXG5cdFx0T2Jq
ZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuXHRcdFx0fSBjYXRj
aCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBba2V5LCB2YWx1ZV0p
O1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4aHIsIGV4
Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0
VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5hYmxl
KHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgncmVxdWVzdCcp
O1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmFzeW5jKSB0aGlz
Lm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudGltZW91dCkgdGhp
cy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwgdGhpcyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRcdGlm
ICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtc
blx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5cdFx0aWYgKHRoaXMu
dGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRo
aXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0
XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9
IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMu
ZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnY2FuY2VsJywg
eGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIG1ldGhvZHMg
PSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdoZWFkJywg
J0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVBRCddLmVhY2goZnVu
Y3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7XG5cdFx0
dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fTtcblx0XHRpZiAoZGF0
YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRoaXMuc2VuZChvYmpl
Y3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG5FbGVtZW50
LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZh
ciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0XHRzZW5kLnNldE9wdGlvbnMo
b3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xu
XHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlmICghc2VuZCl7XG5c
dFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlzLCBsaW5rOiAnY2Fu
Y2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1cmw6IHRoaXMuZ2V0
KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5kJywgc2VuZCk7XG5c
dFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtc
blxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0aGlzLmdldCgnc2Vu
ZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIub3B0
aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIGJh
c2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVyYWN0aW5n
IHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkhUTUxcblxu
Li4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJlcXVl
c3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0YXBwZW5kOiBmYWxz
ZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHRcdGhlYWRl
cnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3ht
bCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2
YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xuXG5c
dFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNjcmlwdCl7XG5c
dFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xuXG5cdFx0dmFyIG1h
dGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xcU10qPyk8XFwvYm9k
eT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0gbWF0Y2hbMV07XG5cdFx0dmFy
IHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5c
blx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJlc3BvbnNlLmVsZW1l
bnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8fCAnKicpO1xuXG5cdFx0aWYg
KG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7XG5cdFx0
aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUgPSBkb2N1bWVudC5pZChvcHRp
b25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgdXBkYXRlLmFk
b3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBkYXRlLnNldCgnaHRtbCcsIHJl
c3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQpe1xuXHRcdFx0dmFy
IGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtcblx0XHRcdGlmIChvcHRpb25z
LmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChhcHBlbmQpO1xuXHRc
dFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigpKTtcblx0XHR9XG5cdFx0aWYg
KG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNwb25zZS5qYXZhc2NyaXB0KTtc
blxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNlLmVsZW1lbnRzLCBy
ZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlzLnJlc29sdmUoe3Ry
ZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRtbDogcmVz
cG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0pO1xuXHR9XG5cbn0p
O1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwoKTtcblx0XHRsb2Fk
LnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBm
dW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpO1xuXHRcdGlm
ICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0YTogdGhpcywgbGlu
azogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0J30pO1xuXHRcdFx0dGhpcy5z
dG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbG9hZDtcblx0fVxuXG59O1xu
XG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmdl
dCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtkYXRhOiBUeXBlLmlzT2JqZWN0
LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjogSlNPTiBlbmNvZGVyIGFuZCBk
ZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuU2VlQWxzbzogPGh0dHA6
Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIE51bWJlciwgRnVu
Y3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxuaWYgKHR5cGVvZiBKU09OID09
ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
c3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxcdCcsICdcXG4nOiAnXFxcXG4n
LCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicgOiAnXFxcXFwiJywgJ1xcXFwn
OiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7XG5cdHJldHVybiBz
cGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIuY2hhckNvZGVBdCgwKS50b1N0
cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRhdGUgPSBmdW5jdGlvbihzdHJp
bmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/OltcIlxcXFxcXC9iZm5ydF18
dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1wiW15cIlxcXFxc
XG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1d
P1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/Ol58OnwsKSg/OlxccypcXFsp
Ky9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSokLykudGVzdChzdHJpbmcpO1xu
fTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7XG5cdHJl
dHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9uKG9iail7XG5cdGlmIChvYmog
JiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5cdHN3aXRjaCAodHlwZU9mKG9i
aikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyArIG9iai5yZXBsYWNl
KC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInO1xuXHRcdGNhc2UgJ2FycmF5
Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5jb2RlKS5jbGVhbigpICsgJ10n
O1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFyIHN0cmluZyA9IFtd
O1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdFx0
dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChqc29uKSBzdHJpbmcu
cHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5cdFx0XHR9KTtcblx0XHRcdHJl
dHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzogY2FzZSAnYm9vbGVh
bic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzogcmV0dXJuICdudWxsJztcblx0
fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUgPSB0cnVlO1xuXG5cbkpTT04u
ZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0cmluZyB8fCB0eXBl
T2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cblx0aWYgKHNlY3VyZSA9PSBu
dWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3VyZSl7XG5cdFx0aWYgKEpTT04u
cGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0aWYgKCFKU09OLnZhbGlkYXRl
KHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRoZSBpbnB1
dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUuJyk7XG5c
dH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpO1xufTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhl
IGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRpbmcg
YW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkpTT05cblxu
Li4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJlcXVl
c3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVuY3Rpb24odGV4dCwgZXJyb3Ip
e30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihv
cHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0XHRPYmplY3QuYXBwZW5kKHRo
aXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHRc
dCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlv
bih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRcdFx0anNvbiA9IHRoaXMucmVz
cG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0aW9ucy5zZWN1cmUpO1xuXHRc
dH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIFt0ZXh0LCBl
cnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoanNvbiA9PSBudWxsKXtcblx0
XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uU3VjY2Vzcyhq
c29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjoganNvbiwgdGV4dDogdGV4dH0p
O1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBDb29raWVcblxuZGVzY3Jp
cHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIGJyb3dzZXIg
Q29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0g
QmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtvY2ggKGh0dHA6Ly9xdWlya3Nt
b2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nlcl1cblxucHJvdmlkZXM6IENv
b2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVu
dHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6ICcvJyxcblx0XHRkb21haW46
IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1cmU6IGZhbHNlLFxuXHRcdGRv
Y3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0cE9ubHk6IGZhbHNl
XG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0XHR0aGlz
LmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0d3Jp
dGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFsdWUg
PSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZG9tYWlu
KSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5kb21haW47XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9wdGlvbnMucGF0aDtc
blx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRcdHZhciBkYXRlID0gbmV3IERh
dGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5k
dXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUgKz0gJzsgZXhwaXJl
cz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25zLnNl
Y3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhpcy5vcHRpb25zLmh0dHBPbmx5
KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tp
ZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZG9jdW1lbnQu
Y29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4cCgpICsg
Jz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25lbnQodmFs
dWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdG5ldyBD
b29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVyYXRpb246
IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuQ29va2ll
LndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29v
a2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxuQ29va2llLnJlYWQgPSBmdW5j
dGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTtcbn07XG5cbkNvb2tp
ZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUo
a2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0tXG5cbm5hbWU6IERPTVJlYWR5
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRvbXJlYWR5LlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtCcm93c2VyLCBFbGVtZW50
LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5LCBEb21SZWFkeV1cblxuLi4u
XG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5cbnZhciByZWFkeSxcblx0bG9h
ZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0dGltZXIsXG5cdHRlc3RFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbnZhciBkb21yZWFkeSA9IGZ1
bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghcmVhZHkpe1xuXHRcdEJy
b3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3VtZW50LnJlbW92ZUxpc3RlbmVy
KCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0YXRl
Y2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVudCgnZG9tcmVhZHknKTtcblx0
XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5cdC8vIGNsZWFudXAgc2NvcGUg
dmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50ID0gbnVsbDtcbn07XG5cbnZh
ciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBjaGVja3MubGVuZ3RoOyBpLS07
KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0dXJuIHRydWU7XG5c
dH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBmdW5jdGlvbigpe1xuXHRjbGVh
clRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91dChwb2xs
LCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRv
bXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBEaWVnbyBQ
ZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC9cbi8vIHRl
c3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVhZHksIG9u
bHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24oKXtcblx0
dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9
IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJZiBkb1Njcm9sbCB3b3JrcyBh
bHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBkb21yZWFkeVxuLy8gICBlLmcu
IGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xsICYmICFkb1Njcm9sbFdvcmtz
KCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0c2hvdWxkUG9sbCA9IHRydWU7
XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUpIGNoZWNrcy5wdXNo
KGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG5cdHJldHVy
biAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7XG59KTtcblxuaWYg
KCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5lcign
cmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9IHRydWU7XG5cbmlm
IChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0ge1xuXHRv
bkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTtcblx0fVxu
fTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMgYmVmb3JlIGxvYWRcbkVsZW1l
bnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6IGZ1bmN0aW9uKGZu
KXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBmbi5jYWxsKHRoaXMpO1xuXHR9
LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0gd2luZG93KXtcblx0
XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDtcblx0XHR9
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMgaXMgYmFzZWQgb24gdGhlIGN1
c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5jdGlvbigpe1xuXHRs
b2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIgogCiAvKioqLyB9
KSwKIC8qIDQxMiAqLwpAQCAtMTEzODk0LDEzICsxMTM4OTQsMTMgQEAgbW9kdWxlLmV4cG9ydHMg
PSAiLypqc2hpbnQgcXVvdG1hcms6IGZhbAogLyogNDIwICovCiAvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVy
eS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1
c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElTIENPREUgSVMgUFJPVklERUQgKkFTIElTKiBC
QVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJ
TVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5c
blxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
c2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkg
bGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAueFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVy
eS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9yaXMgWWFua292IDxodHRwczovL2dpdGh1Yi5j
b20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhvZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5j
b20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9uLCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dp
dGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3BvdWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rh
c29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFuIEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9z
ZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBT
dW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9rc3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3ll
ZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBz
Oi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVyZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdhc3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0Fu
ZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZpc2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2ph
bWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxodHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+
LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwg
UG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIuY29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8
aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRo
dWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29t
L2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhl
IEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmlndXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVu
dCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3
aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBhY2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNj
ZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8g
c28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0
cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNl
bnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4g
SWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVzdHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxz
ZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBkYXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3Rz
IGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9u
b3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBsb2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcg
YW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3QgaXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44
LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRoIGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXBy
ZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nlc3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sg
b3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhS
IG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBvciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNj
ZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEg
cHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkg
dGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3Jl
IGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBjdXN0b20gaGVhZGVycywgZXRjLiBUaGUganFY
SFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMg
YW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNlIGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9u
IHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2Vu
ZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0
LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChqcVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczog
SlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBmYWxz
ZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFnZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUg
YnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3Jy
ZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVzdHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBc
Il89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBhcmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMg
bm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgcmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hl
biBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVk
IGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAg
KiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRl
ciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9u
IGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBY
TUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1
cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIsIFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwi
LCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBcInBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVl
cnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0
aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFq
YXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxldGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0
U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmlu
Zy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhhdCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxs
IHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRzIGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRk
ZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9
O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5hamF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0
aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlwZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAg
Ly8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMv
NzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5kaW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNl
IHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11
cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdoaWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMu
IElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBjb250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRo
ZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNlcnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNl
bnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNwZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0
aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNwZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdp
bGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICov
XG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2ls
bCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBBamF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBk
ZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4
IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQuYWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRo
ZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5cbiAgICAgKi9cbiAgICBjb250ZXh0PzogYW55
O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFU
eXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVyJ3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0
IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVlIG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24g
YWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBh
bnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFp
biByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFs
dWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhpcyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2
ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVyIGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEu
NSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
RGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5
IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVy
bCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vzc0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhp
cyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJ
ZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNlcmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdp
dGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5n
IChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4g
ICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRvIGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRh
dGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBhIHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8g
c2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hvdWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRh
dGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1
cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAnZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAg
Ki9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxu
ICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0
aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmllZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVy
IGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0
eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNPTiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBv
YmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVjdXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGlu
ZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFU
eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlm
IHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRz
OiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBz
dHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlcnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBv
cHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBvbmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVl
cyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVzaWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIs
IFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJwYXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAg
ZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNlaXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9m
IHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5vdCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2Vy
dmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2Nl
cHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGlu
IHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBub3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4g
c2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAgcmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBF
dmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6
IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRo
ZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVudCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0
LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFs
IGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFqYXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVk
LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAg
Ki9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBh
ZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVl
c3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1
ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1
bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJlIGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRo
ZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUgb3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhl
IGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAg
aGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93
IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwgb25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNo
YW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4gVGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRo
ZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgaWdub3Jpbmcg
dGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlzIHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUg
J2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVyIHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5c
biAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxv
dyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBiZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIg
KGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlmIGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUg
aXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgY3VycmVu
dGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUsICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJ
ZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5k
ZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xvY2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVl
c3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUg
J2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNv
bnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQg
dG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEuNSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9u
IHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9tIGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBz
dHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5nIHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9y
bWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUg
anNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhhbXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25w
Q2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxuICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5n
O1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9y
IGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUg
cmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVm
ZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtl
IGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVlc3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBh
bmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2FudCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3
aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIgYnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1
ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNhbiBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0
aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMg
c2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBq
c29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxuICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJy
aWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4g
ICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1
c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0
aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAg
ICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRhIHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRp
b24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmlu
Zykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5zZm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcs
IGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVudC10eXBlIFwiYXBwbGljYXRpb24veC13d3ct
Zm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Ig
b3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAg
ICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBw
bGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5zcG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1k
b21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIgb3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQg
XCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0
YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRo
ZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2Ny
aXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJzZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBjb2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNh
bGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUg
cmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3RhdHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhl
IHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2VzcyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBp
biBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRpcmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBw
YXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFjay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAg
ICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoq
XG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
IFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJlZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVy
bmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUg
cGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIg
KGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEu
NSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4g
RWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZl
bnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5n
LCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAgIC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQg
KGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55
IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWpheFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlv
ZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFqYXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFs
IG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVzcyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNv
bm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1l
IG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIEluIGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRo
ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRo
ZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5nIGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhy
b3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMuMCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCBy
ZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxs
IHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIgdGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAq
L1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1
ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRpdGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlh
bGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxu
ICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8gbWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiks
IGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3RoZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1
Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNvIGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJl
IG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJp
bmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNo
IHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICovXG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8q
KlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJl
c3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICov
XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNy
ZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVY
T2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRoZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2Uu
IE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBS
ZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUgZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/
OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVl
IHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhIUiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3Ug
Y2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRpYWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFp
biByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVyeSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMg
cHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRvIHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENP
UlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxkIGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlz
IHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpRdWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1
aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4
aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZh
Y2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMg
WE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlw
ZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAgIGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcp
OiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xu
Ki9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55
W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZp
cmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtcbiAgICBmaXJlZCgpOiBib29sZWFuO1xuICAg
IGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgaGFzKGNh
bGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxvY2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBi
b29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFja3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxu
ICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8gaW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJv
bWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9
PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2
YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjog
YW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdl
bmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihv
bkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0
PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVy
aWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9t
aXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtc
biAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdh
eXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2Fs
bGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNr
czogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxi
YWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxs
YmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6
IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxi
YWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdp
dmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZh
aWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHByb2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4g
YW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1
ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jl
c3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICgu
Li5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhl
bjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczog
YW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dy
ZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9u
RnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/
OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dy
ZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtc
blxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21pc2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVs
ZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFu
eVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55
W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFu
eVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkp
OiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6
IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9n
cmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG59XG5cbi8qXG4gICAg
SW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVycmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9c
bmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBleHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xu
ICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5
c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2Fs
bGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFj
a3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2Fs
bGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXND
YWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2Fs
bGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxi
YWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVz
c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5h
cmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDog
YW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4u
LmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0
OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZl
KHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmUoLi4uYXJnczogYW55W10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFy
Z3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4g
ICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAg
IEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVuc2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVj
dFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtc
biAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZh
dWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAgaXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3Bw
ZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAg
IG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZlbnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxh
dGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3VsdDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQ
cm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBh
Z2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAg
IG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0
IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4g
ICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5
OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRz
IEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVu
dFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xu
ICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1i
ZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAgIHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50
ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVj
dCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJDb2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7
XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVu
dE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVu
dDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVu
ZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlN
b3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVudE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVu
dE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBj
dXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFjZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4
PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJvb2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86
IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJvb2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xl
YW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAgY3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhy
ZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBodG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAg
ICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29s
ZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xlYW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47
XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtc
biAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtcbiAgICBzdHlsZT86IGJvb2xlYW47XG4gICAg
c3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAgdGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRl
cmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBh
bnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRl
cmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQg
aXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0
aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhlIGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRo
IHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmluZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxu
ICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmlu
ZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChu
YW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xu
fVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlv
bnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNpbmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIp
OiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0
YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ugb24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMp
XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3Jt
IGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUg
QWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJl
IHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWph
eChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkv
dmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdz
IGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAk
LmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzog
SlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxl
IGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVh
Y2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWph
eCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcg
Y29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJl
IEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0
cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGlu
Z3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFu
ZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3Jl
IGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQu
YWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBk
ZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWph
eFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhT
ZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0
aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4gICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVs
dCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1l
bmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFtIG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVl
IHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZhdWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlv
bnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAgICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5
QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRo
ZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFt
IHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMg
ZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBl
IFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRl
bGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAg
IGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhI
UjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRU
UCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFp
bmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFt
IGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVy
IHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBw
YXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4g
RGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5c
biAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAo
ZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwg
ZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRh
IGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVx
dWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmlu
ZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0
YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4
bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5n
LCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5n
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhS
O1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVk
IGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJp
bmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5j
b2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3Ry
aW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3Ry
aW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0
YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0
aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9u
IHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAg
Z2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnks
IHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhS
O1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZhU2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhlbiBleGVjdXRlIGl0LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJl
cXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9u
IHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAg
Z2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAg
IHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRo
ZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlz
IHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlz
IGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBp
cyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0g
ZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1
bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4g
ICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQg
dG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEg
Y2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVk
cy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0
aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0
ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29u
LCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRh
dGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpx
WEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4g
ICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9T
VCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0
YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0
aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9u
IHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRh
dGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAq
IEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZl
ci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBo
dG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNj
ZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9
PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICog
QSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93
ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBsaXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNo
YW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFj
a3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxsYmFjaztcblxuICAgIC8qKlxuICAgICAqIEhv
bGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24gb2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9s
ZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFzZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHko
aG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86
IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDogRWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2Jq
ZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7
XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpR
dWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVyeSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFi
bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVtb3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5n
IHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkgdmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBz
Y29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYpLlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3Qo
cmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVz
IGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3Jl
IG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hy
b25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9y
ZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICov
XG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBK
UXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1
dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFs
bHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmpl
Y3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPigu
Li5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJv
dmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9y
IG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFz
eW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBv
ciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAg
ICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIGNzc051bWJl
cjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3RvcmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4gUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMg
c2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFz
c29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5n
IHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBk
YXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBz
dHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5h
bWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxl
bWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3Nv
Y2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0
aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVt
ZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0
IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEo
ZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxl
bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBh
c3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1l
bnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0
cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5c
biAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtc
biAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVP
ckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1l
bnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVy
cmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVkOiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55
KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgZng6IHsgdGljazog
KCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsgc3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7
IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsg
fTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFu
eSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0
OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBhbnk7XG5cbiAgICBFdmVudDog
SlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGVycm9yKG1l
c3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBh
bnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVjaWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhp
c1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9y
dDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRh
aW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2go
Y29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxl
bWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNh
bGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVu
dCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4oY29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazog
KGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogVCkgPT4gYW55KTogYW55O1xu
XG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRl
bmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4g
ICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBhbnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBU
W10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJv
b2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBU
LCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5
KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0VtcHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVh
bjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc051bWVyaWModmFs
dWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFpbk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47
XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5v
ZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5KG9iajogYW55KTogYW55W107XG5cbiAgICBt
YXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJ
bkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4gICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNr
OiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJbkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtc
blxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNlY29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdl
PFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10pOiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55
O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAgIHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBh
bnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1l
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0
byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJzZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1
bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBu
ZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAgICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5n
O1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmluZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtd
KTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJh
eSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0
byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29udGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBh
cyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRNTCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRc
biAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0
byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAg
IHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRleHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlw
dHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBBbmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0
aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtcblxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5n
O1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5zdGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFj
ZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBhamF4Q29tcGxldGUoaGFuZGxlcjogYW55KTog
SlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwg
c2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4
U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhj
ZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9wKGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVy
eTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0
dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQo
dXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBsZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
c2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJpYWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAg
IC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhjbGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9c
biAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0
dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0
cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmlu
ZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0
dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBoYXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6
IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmluZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxDb250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xk
aHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6
IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJv
cChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1h
cDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChp
bmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3Zl
Q2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6
IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJv
cChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNz
TmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Mo
c3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDog
YW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6
IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZh
bChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmly
c3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhw
cm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9y
IG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAg
Ki9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUg
c2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlO
YW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8g
c2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3Ry
aW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3Ig
bW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAg
ICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAq
L1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhl
IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5
TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRv
IHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0
cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUg
b3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxu
ICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0
LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlv
biBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50
cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6
IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9w
ZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUg
dmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBp
bmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVl
IGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZh
bHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMg
QW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBhaXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBj
c3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtc
biAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5lckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5u
ZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVt
YmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNl
dCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5h
dGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86
IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJIZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVk
ZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJn
aW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5j
bHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDog
bnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAgICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAg
ICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTog
bnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lk
dGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lk
dGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwg
aGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1
ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcs
IHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55
OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1
ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxp
c3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86
IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0
c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/
OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRp
b24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtc
biAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsg
ZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1
ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRl
bGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFk
ZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBu
dW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55
LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhp
ZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVy
YXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5c
biAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBz
aG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnks
IGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVw
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1
cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpR
dWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRv
RW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/
OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRl
OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8gRXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6
IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcs
IGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJp
bmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4g
ICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1
cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNo
YW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdl
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBj
aGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2xpY2soKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlj
a1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
VHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxl
cj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3VzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAg
ICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9j
dXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZv
Y3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRsZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRz
LCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVz
IHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50Llxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBt
b3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5k
bGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91
dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFuZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50
cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVz
IHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0
aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW5PdXQ6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4g
ICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBrZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJl
c3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1
cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVw
KGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBt
b3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5n
IGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBh
biBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBl
bnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAg
ICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1l
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdo
ZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxl
YXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRh
OiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92
ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
b3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICov
XG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBv
ZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywg
c3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwi
LlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0
aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhh
bmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91
c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNl
LlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBh
bmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xp
Y2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRo
ZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2Zm
KGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3Ry
aW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBl
cyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRs
ZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAg
KiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBv
cmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5c
biAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0
b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQg
aGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Ut
c2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwi
Y2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFs
dWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRo
YXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBSZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBv
cHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBqUXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQg
dGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3Qg
YmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRheCkuXG4gICAgICovXG4gICAgb24oZXZlbnRz
OiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFy
Z3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2
ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBh
cyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVj
dG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNl
bGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBp
cyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQg
cmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUg
ZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQg
c2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5n
LCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEg
c2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVk
IGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxs
IG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hl
cyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBh
c3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMg
YSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2Uu
XG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6
IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9u
IGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlz
IHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9w
dGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVu
Y3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVj
dG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNl
bGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0
b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4g
aXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRh
IHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQg
b2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0s
IHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxl
ciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1v
cmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQs
XCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhh
bmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0
ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3Jp
cHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3Rv
bSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9y
IHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBl
bGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUg
b3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFj
ZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBw
YXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRz
IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUg
c2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJl
ZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4g
VGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5j
dGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZl
bnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2gg
YSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4
ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRv
d24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0
cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBl
bGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5k
bGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBv
bmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRz
LiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2
ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGlj
aCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBl
dmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVz
ZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAg
ICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNj
ZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRs
ZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFs
d2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAq
IEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRh
dGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5
O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4g
ICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAg
cmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAq
L1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2VsZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5c
biAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJz
OiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2VyKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6
IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRy
YVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xuXG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0
cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpR
dWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6
IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5n
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7
XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9h
ZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIEludGVybmFsc1xu
ICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvciho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHB1c2hTdGFjayhlbGVtZW50czog
YW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55
LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFm
dGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmQoLi4uY29udGVudDogYW55W10pOiBK
UXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVm
b3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBi
b29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAg
ZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xu
XG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3Jl
KHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6
IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAg
IHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlV2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5c
biAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtc
biAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXkoKTogYW55W107XG5cbiAgICB1bndyYXAoKTog
SlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3
cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdy
YXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxl
bWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJbm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGVhY2goZnVuYzogKGlu
ZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRl
eD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxl
Y3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGluZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtc
blxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjog
c3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVt
ZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAgIGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250
ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCguLi5lbGVtZW50czogYW55W10pOiBKUXVlcnk7
XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNs
b3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBz
dHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVl
cnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xv
c2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNv
bnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgpOiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVyKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmls
dGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVl
cnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVt
ZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAg
IGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBKUXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjog
c3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9v
bGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBib29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5
KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAo
aW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
bmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZp
bHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQs
IGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpR
dWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBu
b3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtc
blxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5
O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBz
dHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50
aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2
VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBw
cmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBz
aWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBu
dW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtcblxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAg
cXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4gICAgcXVldWUocXVldWVOYW1lOiBz
dHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1
ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xufVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlc
IiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xhcmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGlj
O1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGljO1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIu
ZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgQW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6
IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZpbml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0
dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRo
dWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5n
dWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8vIFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVu
ZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVuY3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5n
W107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5q
cylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRlY2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8v
IEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQgdGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZh
Y2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAgICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBG
dW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5jdGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVs
ZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xu
ICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRv
LklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBt
b2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJh
cChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2
aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtc
biAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpRdWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxz
KHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0
aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChv
Ymo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0
PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNvbihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAg
ICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBh
bnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZh
bHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29s
ZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNP
YmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkp
OiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAg
ICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICAvKiogY29uc3Ry
dWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxuXHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFj
ZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUo
XG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3VyIG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUg
Ki9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1v
ZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAgICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdb
XSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9uPzogYW55KTogSU1vZHVsZTtcbiAgICAgICAg
bm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJl
dHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAgICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTog
c3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4g
ICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAgICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAg
ICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAgICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAg
ICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAg
IGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1hdGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1v
ZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVu
Y3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0
KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0
XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJm
b3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0Zu
OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2Vy
dmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMg
dG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZp
ZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25z
dGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFu
dChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3Ry
aW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAg
Y29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlb
XSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVs
ZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVu
Y3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVB
bm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUob2Jq
ZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2Vy
dmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5
KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRl
cihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxl
O1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjog
YW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVj
dG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywg
aW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJv
dmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRp
b25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJp
bmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2
aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1v
ZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAg
IHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVl
KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxuICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAg
ICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVxdWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0
ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xu
XHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0
dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2FudFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRv
IHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBhdHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBv
ZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0
dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlzIHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJm
bG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRbbmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAg
ICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFs
IHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUg
ZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBm
b3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAgICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmlu
Zyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3ZlcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNp
ZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1l
bnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0
cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBjbGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVt
b3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBl
bGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6
IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJp
YnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVyIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBv
bmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4gICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxh
dGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAg
Ly8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0
cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1h
cCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4g
VGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3Jt
YWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9y
bS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
Rm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRk
aXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxp
ZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAgICAgICRhZGRDb250cm9sKGNv
bnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250
cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXRE
aXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJpc3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBOZ01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01v
ZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdN
b2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVuZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRW
YWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZv
aWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxW
YWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJcbiAgICAgICAgLy8gdHlwZXMgZG8gd29yayBh
bmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4gICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6
IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFsdWU6IGFueTtcblxuICAgICAgICAkbW9kZWxW
YWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJzOiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAg
JGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltdO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAg
ICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAg
ICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55
O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFs
dWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBT
Y29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNj
b3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7
XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IHN0cmluZyk6IGFu
eTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxu
ICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxh
ckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZv
aWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxh
ckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWws
IGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhw
cmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0KTogYW55O1xuICAgICAgICAkZXZhbChleHBy
ZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4g
ICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwg
aW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9u
OiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IChzY29wZTog
SVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5
IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBzdHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xh
dGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAgICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3Rl
bmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5j
dGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVy
Pzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAg
JHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55
LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5Pzog
Ym9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2Nv
cGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBi
b29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29w
ZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBh
bnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVu
Y3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmlu
ZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3Bl
KSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJl
c3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwg
b2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAg
ICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAgICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8v
IEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNvbGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAg
ICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4g
ICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3Bl
O1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlv
bjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgICAgICAvLyBBdmFp
bGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRlbWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFn
YXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRv
d1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9ETyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQg
dG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51
bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2Fu
Y2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5j
dGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVh
bik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+
KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0
ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRm
aWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRl
clByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJT
ZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmluZyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAg
ICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElT
ZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
TG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVT
ZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztcblxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90
IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sgYW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4
ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRTOiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3Jp
cHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFUUzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVz
Y3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAobnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAg
ICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAgICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAg
ICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBD
VVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJl
clBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAgbWluSW50OiBudW1iZXI7XG4gICAgICAgIG1p
bkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJhYzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6
IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJpbmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5n
O1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAgICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAg
ICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGlt
ZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBNT05USDogc3RyaW5nW107XG4gICAgICAgIFNI
T1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBEQVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9S
VERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1TOiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVt
OiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJpbmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJp
bmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmlu
ZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmlu
ZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjog
SUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dDYWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxs
O1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAgICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhp
cyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2UgY2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAg
ICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBpbnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAg
ICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHByZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRF
eHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtc
biAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuXG4gICAgICAgIC8v
IElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5kZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2lu
Y2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJh
bWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9yIGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxu
ICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUgaXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1
ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24oY29udGV4dDogYW55LCB2YWx1ZTogYW55KTog
YW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRp
b25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9u
UHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZf
Z3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAgICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAg
ICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAgaGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBz
dHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtc
biAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAgICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAg
ICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55
O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01hcDogYW55KTogSUxvY2F0aW9uU2VydmljZTtc
biAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3RyaW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTog
SUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJsKCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVy
bDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxv
Y2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFBy
ZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9j
YXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVNb2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAg
Ly8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBwYXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAg
ICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMgaXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMg
bW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBo
dG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1l
bnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNl
cHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNl
cHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAgIChleGNlcHRpb246IEVycm9yLCBjYXVzZT86
IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
Um9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMgSlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
UVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlzZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9t
aXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4oKTogSURlZmVycmVkPFQ+O1xuICAgICAgICBy
ZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFs
dWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4g
e1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTog
VCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55
KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNl
PFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21p
c2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29u
OiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVBy
b21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAo
cHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55
KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJv
bWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChy
ZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47
XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVBy
b21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3Vs
dD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3Vs
dD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkp
OklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4g
e1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFz
b24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3RpZnkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAg
ICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9sbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2VydmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJsZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3Rv
cnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNl
cnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBmb2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUg
dGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05M
WSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG9kYXksIGEgY29uc3Vt
ZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3Ro
ZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJp
bmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAg
ICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsg
fSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAvLyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRv
Y3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3Ry
aW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qg
e1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAg
ICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAgIC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwg
c2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5
OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAgIHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBh
bnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTogc3RyaW5nKTogYW55O1xuICAgICAgICByZW1v
dmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAg
ICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAgKGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVk
ZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVt
cGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2Ns
dWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElU
ZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNj
bHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJ
VGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxl
UHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5h
bWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVy
O1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwgYnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAg
IGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkpOiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBM
ZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVBdHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAg
ICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hGbj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5
LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAg
Ly8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMg
YXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBs
b2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChjb250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2Nh
bHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlk
ZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3Ry
aW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVn
aXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtd
KTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAg
ICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAg
ICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAg
ICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJ
SHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVhZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZp
Zz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBqc29ucCh1cmw6IHN0cmluZywg
UmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVy
bDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8
YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/
OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29u
ZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFz
IHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGluZ1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5c
biAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRpbmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBt
aWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlv
bnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNlIElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAg
bWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBh
bnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBpdCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhh
cHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBh
bnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJv
b2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNjZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQn
cyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAgZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNm
b3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAg
ICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4ge1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVz
OiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZywgY29uZmln
OiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJv
bWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAgZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86
IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmlu
ZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RDb25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQcm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2Vz
cyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4g
ICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJv
bWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25z
ZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/
OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlz
ZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNw
b25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBl
cnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4g
YW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1
ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgICAgICByZXNwb25z
ZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAgIC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0
byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5LlxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNlIHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMg
ZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6
IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBhbnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhl
YWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIsIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4p
OiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVycG9s
YXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
aW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAgICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZl
RXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBl
bmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29u
dGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQ
cm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgp
OiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xh
dGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgZW5kU3lt
Ym9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1wbGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0
ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJv
b3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9v
dFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2Vy
dmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTog
YW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVk
SHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55
O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRy
dXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJl
c3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0
cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFu
eSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0
OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0
cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jl
c291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55
KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDog
YW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1
c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBh
bnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxl
ZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQ
cm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2Nl
UHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3Zp
ZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJv
b2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFND
RURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAgIGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBt
YXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAgICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZh
bHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVlT2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9
XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRl
UHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVn
YXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VV
cmxCbGFja2xpc3QoYmxhY2tsaXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJs
V2hpdGVsaXN0KHdoaXRlbGlzdDogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJlY3RpdmV7XG4gICAgICAgIGNvbXBpbGU/Olxu
ICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgdGVtcGxhdGVB
dHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTog
SVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rpb24pID0+IHZvaWRcbiAgICAgICAgICAgICkg
PT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzogYW55O1xuICAgICAgICBjb250cm9sbGVyQXM/
OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAgICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4g
ICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0
cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAg
ICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgcHJpb3Jp
dHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/OiBib29sZWFuO1xuICAgICAgICByZXF1aXJl
PzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7
XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAg
ICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAgICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAg
IC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1lbnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVy
eSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2Ug
ZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2Fu
Z3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVn
bWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVj
dG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAo
ZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTog
SUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpR
dWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAg
ICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVu
dGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVu
ZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzogZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAg
ICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21l
bnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVtZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5
O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAg
ICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55
O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5cbiAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6
IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6
IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRh
KGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxhci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3JcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZpY2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUo
Zm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAgICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5v
dGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGdldCAobmFtZTog
c3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5zdGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBG
dW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGlubGluZUFu
bm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShmdW5jOiBG
dW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICB9XG5c
biAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAg
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAg
ICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7
XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0
ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24g
ZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAgICAgICAgICAgLy8gY29uc3RhbnQobmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICAgICAgY29uc3RhbnQobmFtZTogc3Ry
aW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0
cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3Io
bmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAg
IGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6
IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywg
aW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAg
ICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJv
dmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTog
c3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2Vydmlj
ZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9y
OiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1l
OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5c
biAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0udHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAn
dXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xhc3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25z
dHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAg
cHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAgICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4v
LyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGlu
dGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcuSVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0
ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5cdFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5c
dFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xu
XHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFsbENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2
ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmlsdGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4g
fTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7
XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7
XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9yYWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVt
W107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtdKTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9k
b0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0
ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxp
ZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBiaW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5c
blx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0
U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNj
b3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5c
dFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRlcy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5c
dFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVu
dFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRc
dH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3VzLiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5c
bn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBz
dHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGlyZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhw
cmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4g
ICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xu
ICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluazogKCRzY29wZTogbmcuSVNjb3BlLCBl
bGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGVs
ZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9C
bHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7
IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xu
ICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0VzY2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xu
XHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVNDQVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQg
KiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRpbmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNz
ZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBu
Zy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNj
b3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVt
ZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5
Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1
dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNj
b3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0p
O1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8vIHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5c
bm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogU2Vy
dmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmlldmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdl
LlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBUb2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2Rv
U3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9JRCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNj
cmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2RvSXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVy
biBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1td
Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQodG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAg
ICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdp
ZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50
c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBt
YWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRoZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJp
ZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZpYSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxu
XHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZl
bnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBjbGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2
YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRc
dC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVu
Y2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVy
IHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0
ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5c
dFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRpb24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxc
blx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtcblxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUg
aW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFt
ZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9uLnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1j
b250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5odG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0
XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxcblx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBu
Zy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJpdmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9y
YWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9k
b3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFnZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5l
d1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8g
J3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4gV2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRv
IHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxuXHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRv
IGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRNTFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztc
blxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBh
cmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxuXHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0
byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxl
ciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5cblx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9z
JywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUpO1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9j
YXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9uUGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRs
b2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRpb24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3Bl
LmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1cblxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcp
IHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0ZpbHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScp
ID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNlIH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQn
KSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVlIH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRv
ZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZp
bHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDogZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhp
cy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rvcy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1h
aW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3BlLmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUu
cmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9kb1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xu
XHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRo
aXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRcdFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9k
b0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRcdHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztc
blx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMu
JHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtcblxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdp
bmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNhbmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3Bl
Lm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5c
dFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3Ro
aXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0gdGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xu
XHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0
aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9
IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYg
KHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZl
cnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVt
LnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9kb0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhp
cy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2Rv
KHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rv
cy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRl
cih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxldGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxs
KGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVt
ID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29tcGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxu
fVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4gKiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1
bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9kdWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xu
ICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3Rv
ZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJs
KVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAg
ICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRvZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJl
Y3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBlKVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3Rv
ZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxuIgorbW9kdWxlLmV4cG9ydHMgPSAiLy8gbGli
cy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQg
KGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7
IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9W
SURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJ
TUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04t
SU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cbi8vIFR5cGluZyBm
b3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9uIDEuMTAueCAvIDIuMC54XG4vLyBQcm9qZWN0
OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmluaXRpb25zIGJ5OiBCb3JpcyBZYW5rb3YgPGh0
dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+LCBDaHJpc3RpYW4gSG9mZm1laXN0ZXIgPGh0
dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+LCBTdGV2ZSBGZW50b24sIERpdWxsZWkgR29t
ZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVpPiwgVGFzcyBJbGlvcG91bG9zIDxodHRwczov
L2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3ZWFyaW5nZW4sIFNlYW4gSGlsbCA8aHR0cHM6
Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdvb3NzZW5zIDxodHRwczovL2dpdGh1Yi5jb20v
R3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6Ly9naXRodWIuY29tL2tzdW1tZXJsaW4+LCBC
YXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1Yi5jb20vYmFzYXJhdD4sIE5pY2hvbGFzIFdv
bHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253b2x2ZXJzb24+LCBEZXJlayBDaWNlcm9uZSA8
aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJvbmU+LCBBbmRyZXcgR2FzcGFyIDxodHRwczov
L2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFtZXMgSGFycmlzb24gRmlzaGVyIDxodHRwczov
L2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vpa2ljaGkgS29uZG8gPGh0dHBzOi8vZ2l0aHVi
LmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2ttYW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5q
YW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxodHRwczovL2dpdGh1Yi5jb20vczA5MzI5ND4s
IEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5jb20vSm9zaFN0cm9ibD4sIEpvaG4gUmVpbGx5
IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVpbGx5Lz5cbi8vIERlZmluaXRpb25zOiBodHRw
czovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkXG5cbi8qXG4gICAgSW50
ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRoYXQgd2lsbCBjb25maWd1cmUgdGhlIEFKQVgg
cmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlBamF4U2V0dGluZ3Mge1xuICAgIC8qKlxuICAg
ICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0aGUgcmVxdWVzdCBoZWFkZXIgdGhhdCB0ZWxs
cyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNwb25zZSBpdCB3aWxsIGFjY2VwdCBpbiByZXR1
cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNv
bW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC5cbiAgICAg
Ki9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGFsbCBy
ZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNseSAoaS5lLiB0aGlzIGlzIHNldCB0byB0cnVl
IGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5jaHJvbm91cyByZXF1ZXN0cywgc2V0IHRoaXMg
b3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4gcmVxdWVzdHMgYW5kIGRhdGFUeXBlOiBcImpz
b25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQgc3luY2hyb25vdXMgb3BlcmF0aW9uLiBOb3Rl
IHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5IHRlbXBvcmFyaWx5IGxvY2sgdGhlIGJyb3dz
ZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGlsZSB0aGUgcmVxdWVzdCBpcyBhY3RpdmUuIEFz
IG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5bmM6IGZhbHNlIHdpdGgganFYSFIgKCQuRGVm
ZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0IHVzZSB0aGUgc3VjY2Vzcy9lcnJvci9jb21w
bGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9k
cyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMganFYSFIuZG9uZSgpIG9yIHRoZSBkZXByZWNh
dGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9cbiAgICBhc3luYz86IGJvb2xlYW47XG4gICAg
LyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1
c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3Qp
IG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNlIHRoaXMgdG8gc2V0IGN1c3RvbSBoZWFkZXJz
LCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mgb2JqZWN0cyBhcmUgcGFzc2VkIGFzIGFyZ3Vt
ZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBSZXR1cm5pbmcgZmFsc2UgaW4gdGhlIGJlZm9y
ZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhlIHJlcXVlc3QuIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJlIGNhbGxlZCByZWdhcmRsZXNzIG9mIHRoZSB0
eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAgYmVmb3JlU2VuZD8gKGpxWEhSOiBKUXVlcnlY
SFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBhbnk7XG4gICAgLyoqXG4gICAgICog
SWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNlIHJlcXVlc3RlZCBwYWdlcyBub3QgdG8gYmUg
Y2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBTZXR0aW5nIGNhY2hlIHRvIGZhbHNlIHdpbGwg
b25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQgYW5kIEdFVCByZXF1ZXN0cy4gSXQgd29ya3Mg
YnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwiIHRvIHRoZSBHRVQgcGFyYW1ldGVycy4gVGhl
IHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBvdGhlciB0eXBlcyBvZiByZXF1ZXN0cywgZXhj
ZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRlIHRvIGEgVVJMIHRoYXQgaGFzIGFscmVhZHkg
YmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAgICovXG4gICAgY2FjaGU/OiBib29sZWFuO1xu
ICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3Qg
ZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVycm9yIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQp
LiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdvIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBq
UXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYW5kIGEgc3RyaW5nIGNhdGVnb3Jp
emluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0IChcInN1Y2Nlc3NcIiwgXCJub3Rtb2RpZmll
ZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBcImFib3J0XCIsIG9yIFwicGFyc2VyZXJyb3Jc
IikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21wbGV0ZSBzZXR0aW5nIGNhbiBhY2NlcHQgYW4g
YXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4u
IFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBjb21wbGV0ZT8gKGpxWEhSOiBK
UXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBv
YmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVzc2lvbiBwYWlycyB0aGF0IGRldGVybWluZSBo
b3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3BvbnNlLCBnaXZlbiBpdHMgY29udGVudCB0eXBl
LiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNvbnRlbnRzPzogeyBba2V5OiBz
dHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRpbmcgdG8galF1ZXJ5LmFqYXggc291cmNlIGNv
ZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxsb3dzIGNvbnRlbnRUeXBlIHRvIHNldCB0byBc
ImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVs
eVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAgICAgKiBXaGVuIHNlbmRpbmcgZGF0YSB0byB0
aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5cGUuIERlZmF1bHQgaXMgXCJhcHBsaWNhdGlv
bi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIiwgd2hpY2ggaXMgZmluZSBm
b3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0bHkgcGFzcyBpbiBhIGNvbnRlbnQtdHlwZSB0
byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMgc2VudCB0byB0aGUgc2VydmVyIChldmVuIGlm
IG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1MSHR0cFJlcXVlc3Qgc3BlY2lmaWNhdGlvbiBk
aWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFsd2F5cyBVVEYtODsgc3BlY2lmeWluZyBhbm90
aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhlIGJyb3dzZXIgdG8gY2hhbmdlIHRoZSBlbmNv
ZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlwZT86IGFueTtcbiAgICAvKipcbiAgICAgKiBU
aGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNvbnRleHQgb2YgYWxsIEFqYXgtcmVsYXRlZCBj
YWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250ZXh0IGlzIGFuIG9iamVjdCB0aGF0IHJlcHJl
c2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBpbiB0aGUgY2FsbCAoJC5hamF4U2V0dGluZ3Mg
bWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3NlZCB0byAkLmFqYXgpLlxuICAgICAqL1xuICAg
IGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4gRWFjaCBjb252ZXJ0ZXIncyB2YWx1ZSBpcyBh
IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgb2YgdGhlIHJlc3Bv
bnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNvbnZlcnRlcnM/OiB7IFtr
ZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byBmb3Jj
ZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2ggYXMgSlNPTlApIG9uIHRoZSBzYW1lIGRvbWFp
biwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFpbiB0byB0cnVlLiBUaGlzIGFsbG93cywgZm9y
IGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0aW9uIHRvIGFub3RoZXIgZG9tYWluLiAodmVy
c2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNyb3NzRG9tYWluPzogYm9vbGVhbjtcbiAg
ICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4gSXQgaXMgY29udmVy
dGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3QgYWxyZWFkeSBhIHN0cmluZy4gSXQncyBhcHBl
bmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVzdHMuIFNlZSBwcm9jZXNzRGF0YSBvcHRpb24g
dG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9jZXNzaW5nLiBPYmplY3QgbXVzdCBiZSBLZXkv
VmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFycmF5LCBqUXVlcnkgc2VyaWFsaXplcyBtdWx0
aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIHRyYWRp
dGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxvdykuXG4gICAgICovXG4gICAgZGF0YT86IGFu
eTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gaGFuZGxlIHRoZSBy
YXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVxdWVzdC5UaGlzIGlzIGEgcHJlLWZpbHRlcmlu
ZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVzcG9uc2UuIFlvdSBzaG91bGQgcmV0dXJuIHRo
ZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGFyZ3VtZW50czogVGhl
IHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciBhbmQgdGhlICdkYXRhVHlwZScgcGFy
YW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0ZXI/IChkYXRhOiBhbnksIHR5OiBhbnkpOiBh
bnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgZGF0YSB0aGF0IHlvdSdyZSBleHBlY3Rp
bmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5vbmUgaXMgc3BlY2lmaWVkLCBqUXVlcnkgd2ls
bCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhlIE1JTUUgdHlwZSBvZiB0aGUgcmVzcG9uc2Ug
KGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBYTUwsIGluIDEuNCBKU09OIHdpbGwgeWllbGQg
YSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNjcmlwdCB3aWxsIGV4ZWN1dGUgdGhlIHNjcmlw
dCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSByZXR1cm5lZCBhcyBhIHN0cmluZykuXG4gICAg
ICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0
byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0
aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVz
dCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgb2Nj
dXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlvbiBvYmplY3QsIGlmIG9uZSBvY2N1cnJlZC4g
UG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IChiZXNpZGVzIG51bGwpIGFy
ZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFib3J0XCIsIGFuZCBcInBhcnNlcmVycm9yXCIu
IFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVycm9yVGhyb3duIHJlY2VpdmVzIHRoZSB0ZXh0
dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVzLCBzdWNoIGFzIFwiTm90IEZvdW5kXCIgb3Ig
XCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGVycm9yIHNl
dHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2ls
bCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhpcyBoYW5kbGVyIGlzIG5vdCBjYWxsZWQgZm9y
IGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3NzLWRvbWFpbiBKU09OUCByZXF1ZXN0cy4gVGhp
cyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGVycm9yPyAoanFYSFI6IEpRdWVyeVhI
UiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRocm93OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoq
XG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGdsb2JhbCBBamF4IGV2ZW50IGhhbmRsZXJzIGZv
ciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlzIHRydWUuIFNldCB0byBmYWxzZSB0byBwcmV2
ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBhamF4U3RhcnQgb3IgYWpheFN0b3AgZnJvbSBi
ZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB2YXJpb3VzIEFqYXgg
RXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
QW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVyIGtleS92YWx1ZSBwYWlycyB0byBzZW5kIGFs
b25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhNTEh0dHBSZXF1ZXN0IHRyYW5zcG9ydC4gVGhl
IGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxIdHRwUmVxdWVzdCBpcyBhbHdheXMgYWRkZWQs
IGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVzdCB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBoZXJl
LiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGluZyBjYW4gYWxzbyBiZSBvdmVyd3JpdHRlbiBm
cm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlc
biAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoq
XG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8gYmUgc3VjY2Vzc2Z1bCBvbmx5IGlmIHRoZSBy
ZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCByZXF1ZXN0LiBUaGlzIGlzIGRvbmUg
YnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQgaGVhZGVyLiBEZWZhdWx0IHZhbHVlIGlzIGZh
bHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBqUXVlcnkgMS40IHRoaXMgdGVjaG5pcXVlIGFs
c28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVkIGJ5IHRoZSBzZXJ2ZXIgdG8gY2F0Y2ggdW5t
b2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlmTW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIC8q
KlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVudmlyb25tZW50IHRvIGJlIHJlY29nbml6ZWQg
YXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5c3RlbSksIGV2ZW4gaWYgalF1ZXJ5IGRvZXMg
bm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRlZmF1bHQuIFRoZSBmb2xsb3dpbmcgcHJvdG9j
b2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBhcyBsb2NhbDogZmlsZSwgKi1leHRlbnNpb24s
IGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNldHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBp
dCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhv
ZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIGlzTG9jYWw/OiBib29sZWFu
O1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGlu
IGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAnY2Fs
bGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGluIHRo
ZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQnfSB3b3VsZCByZXN1bHQgaW4gJ29uSlNPTlBM
b2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBBcyBvZiBqUXVlcnkgMS41LCBzZXR0aW5nIHRo
ZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVudHMgalF1ZXJ5IGZyb20gYWRkaW5nIHRoZSBc
Ij9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJMIG9yIGF0dGVtcHRpbmcgdG8gdXNlIFwiPT9c
IiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCBhbHNvIGV4cGxp
Y2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNldHRpbmcuIEZvciBleGFtcGxlLCB7IGpzb25w
OiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxsYmFja05hbWVcIiB9XG4gICAgICovXG4gICAg
anNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBp
bnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBqUXVl
cnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpRdWVyeSBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1l
IGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1hbmFnZSB0aGUgcmVxdWVzdHMgYW5kIHByb3Zp
ZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGluZy4gWW91IG1heSB3YW50IHRvIHNwZWNpZnkg
dGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8gZW5hYmxlIGJldHRlciBicm93c2VyIGNhY2hp
bmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVlcnkgMS41LCB5b3UgY2FuIGFsc28gdXNlIGEg
ZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgb2YganNv
bnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uLlxu
ICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBtaW1l
IHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1lIHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUu
MSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHBh
c3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBI
VFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xuICAgIHBhc3N3b3Jk
Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGRhdGEgcGFzc2VkIGluIHRv
IHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3QgKHRlY2huaWNhbGx5LCBhbnl0aGluZyBvdGhl
ciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nlc3NlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBh
IHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUgZGVmYXVsdCBjb250ZW50LXR5cGUgXCJhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIi4gSWYgeW91IHdhbnQgdG8gc2VuZCBhIERP
TURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vzc2VkIGRhdGEsIHNldCB0aGlzIG9wdGlvbiB0
byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNzRGF0YT86IGJvb2xlYW47XG4gICAgLyoqXG4g
ICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwic2NyaXB0XCIgdHJhbnNwb3J0IGlzIHVzZWQg
KGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3aXRoIFwianNvbnBcIiBvciBcInNjcmlwdFwi
IGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBTZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSBv
biB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSByZXF1ZXN0LiBVc2VkIHdoZW4gdGhlIGNoYXJh
Y3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgb24g
dGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4gICAgc2NyaXB0Q2hhcnNldD86IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgbnVtZXJpYyBIVFRQIGNvZGVzIGFuZCBmdW5j
dGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlc3BvbnNlIGhhcyB0aGUgY29ycmVzcG9uZGlu
ZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIHRoZSBzdGF0dXMgY29kZSBmdW5j
dGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrOyBp
ZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNsdWRpbmcgM3h4IHJlZGlyZWN0KSwgdGhleSB0
YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIGVycm9yIGNhbGxiYWNrLiAodmVyc2lvbiBh
ZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1c0NvZGU/OiB7IFtrZXk6IHN0cmluZ106IGFu
eTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVx
dWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHRocmVlIGFyZ3VtZW50czog
VGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRv
IHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHN0YXR1czsg
YW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LiBB
cyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkg
b2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMg
aXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBzdWNjZXNzPyAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpOiBhbnk7XG4gICAgLyoqXG4gICAgICog
U2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3IgdGhlIHJlcXVlc3QuIFRoaXMgd2ls
bCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQgc2V0IHdpdGggJC5hamF4U2V0dXAoKS4gVGhl
IHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUgcG9pbnQgdGhlICQuYWpheCBjYWxsIGlzIG1h
ZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMgYXJlIGluIHByb2dyZXNzIGFuZCB0aGUgYnJv
d3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxhYmxlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBy
ZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBjYW4gYmUgc2VudC4gSW4galF1ZXJ5IDEuNC54
IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCB3aWxsIGJlIGluIGFuIGludmFs
aWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMgb3V0OyBhY2Nlc3NpbmcgYW55IG9iamVjdCBt
ZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24uIEluIEZpcmVmb3ggMy4wKyBvbmx5LCBzY3Jp
cHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBiZSBjYW5jZWxsZWQgYnkgYSB0aW1lb3V0OyB0
aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQgYXJyaXZlcyBhZnRlciB0aGUgdGltZW91dCBw
ZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBT
ZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgdHJhZGl0aW9uYWwgc3R5bGUg
b2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAgKi9cbiAgICB0cmFkaXRpb25hbD86IGJvb2xl
YW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgcmVxdWVzdCB0byBtYWtlIChcIlBPU1Rc
IiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdFVFwiLiBOb3RlOiBPdGhlciBIVFRQIHJlcXVl
c3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERFTEVURSwgY2FuIGFsc28gYmUgdXNlZCBoZXJl
LCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMuXG4gICAgICovXG4g
ICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKi9cbiAgICB1cmw/OiBz
dHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2VybmFtZSB0byBiZSB1c2VkIHdpdGggWE1MSHR0
cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVx
dWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBD
YWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4gRGVmYXVsdHMg
dG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFpbGFibGUgKElFKSwgdGhlIFhNTEh0dHBSZXF1
ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlv
biBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBmYWN0b3J5LlxuICAg
ICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgZmllbGRO
YW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9uIHRoZSBuYXRpdmUgWEhSIG9iamVjdC4gRm9y
IGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNldCB3aXRoQ3JlZGVudGlhbHMgdG8gdHJ1ZSBm
b3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5lZWRlZC4gSW4galF1ZXJ5IDEuNSwgdGhlIHdp
dGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90IHByb3BhZ2F0ZWQgdG8gdGhlIG5hdGl2ZSBY
SFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1aXJpbmcgaXQgd291bGQgaWdub3JlIHRoaXMg
ZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNvbW1lbmQgdXNpbmcgalF1ZXJ5IDEuNS4xKyBz
aG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBpdC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxu
ICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xufVxuXG4v
KlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhSIG9iamVjdFxuKi9cbmludGVyZmFjZSBKUXVl
cnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwgSlF1ZXJ5UHJvbWlzZTxhbnk+IHtcbiAgICBv
dmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpOiBhbnk7XG4gICAgYWJvcnQoc3RhdHVz
VGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1
ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUNhbGxiYWNrIHtcbiAgICBhZGQoLi4u
Y2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBkaXNhYmxlKCk6IGFueTtcbiAgICBlbXB0eSgp
OiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6IGFueVtdKTogYW55O1xuICAgIGZpcmVkKCk6
IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFu
eTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJvb2xlYW47XG4gICAgbG9jaygpOiBhbnk7XG4g
ICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVtb3ZlKC4uLmNhbGxiYWNrczogYW55W10pOiBh
bnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVyeSBQcm9taXNlcyB0byBpbnRlcm9wIHdpdGgg
bm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVyZmFjZSBKUXVlcnlHZW5lcmljUHJvbWlzZTxU
PiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAo
cmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWpl
Y3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0
aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFzb246IGFu
eSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtc
biAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+
KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0
aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAg
YWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBk
b25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCgu
Li5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4u
LnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgYWx3YXlz
KC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUo
Li4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4u
ZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4u
LnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICAvLyBE
ZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xuICAgIHBpcGUoZG9uZUZpbHRlcj86ICh4OiBh
bnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgcHJvZ3Jlc3NGaWx0ZXI/
OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5cbiAgICB0aGVuPFU+KG9u
RnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkg
PT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBv
blByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlz
ZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86
ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jl
c3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVl
cnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVzZSBKUXVlcnkgUHJvbWlzZXMgU3Vja1xuICAg
IHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAo
Li4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFu
eVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAo
Li4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjog
YW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6
ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/
OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dy
ZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtc
bn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgZGVmZXJyZWQsIHBhcnQgb2Yg
Y2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeURlZmVycmVkPFQ+IGV4dGVuZHMgSlF1ZXJ5
UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBh
bHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBk
b25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwo
Li4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3Mo
Li4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgYWx3
YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBk
b25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFp
bCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dy
ZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4g
ICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgbm90aWZ5
V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5c
biAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZWpl
Y3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
blxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZSgu
Li5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmVXaXRoKGNvbnRl
eHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBzdGF0ZSgp
OiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8VD47
XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRoZSBKUXVlcnkgZXh0ZW5zaW9uIG9mIHRoZSBX
M0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZhY2UgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IGV4
dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtcbiAgICBkZWxlZ2F0ZVRhcmdldDogRWxlbWVu
dDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbjtcbiAgICBpc0ltbWVkaWF0ZVBy
b3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkKCk6
IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgcHJldmVudERlZmF1bHQoKTog
YW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgcmVzdWx0OiBhbnk7XG4gICAg
c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uKCk6
IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVyO1xuICAgIHdoaWNo
OiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUlu
cHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAgIGFsdEtl
eTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29sZWFuO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47
XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgYnV0dG9uOiBudW1i
ZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVudFk6IG51bWJlcjtcbiAgICBvZmZz
ZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4g
ICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5YOiBudW1iZXI7XG4gICAgc2NyZWVuWTogbnVt
YmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5RXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJ
bnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBhbnk7XG4gICAgY2hhckNvZGU6IG51bWJlcjtc
biAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVl
cnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAg
ICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5RXZl
bnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QsIEpRdWVyeUlucHV0RXZlbnRP
YmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QsIEpRdWVyeUtleUV2ZW50T2JqZWN0LCBKUXVl
cnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxuLypcbiAgICBDb2xsZWN0aW9uIG9mIHByb3Bl
cnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3NlclxuKi9cblxuaW50ZXJmYWNlIEpRdWVyeVN1cHBv
cnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAgIGJveE1vZGVsPzogYm9vbGVhbjtcbiAgICBj
aGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBjaGVja0Nsb25lPzogYm9vbGVhbjtcbiAgICBj
aGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzogYm9vbGVhbjtcbiAgICBjc3NGbG9hdD86IGJv
b2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBib29sZWFuO1xuICAgIGh0bWxTZXJpYWxpemU/
OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNwYWNlPzogYm9vbGVhbjtcbiAgICBub0Nsb25l
Q2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9uZUV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGFj
aXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxlZD86IGJvb2xlYW47XG4gICAgb3B0U2VsZWN0
ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/ICgpOiBib29sZWFuO1xuICAgIHN0eWxlPzog
Ym9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzogYm9vbGVhbjtcbiAgICB0Ym9keT86IGJvb2xl
YW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJhbSB7XG4gICAgKG9iajogYW55KTogc3RyaW5n
O1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6IGJvb2xlYW4pOiBzdHJpbmc7XG59XG5cbi8q
KlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNvbnN0cnVjdCBqUXVlcnkgZXZlbnRzICh3aXRo
ICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgaW5saW5l
IGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICogb3ZlcnJpZGluZyB0aGUgY29uc3RydWN0aW9u
IGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5nc1xuICogcmV0dXJuaW5nIHNwZWNpZmljIGV2
ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFdmVudENvbnN0cnVjdG9yIHtcbiAg
ICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVj
dDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5
RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIHNwZWNpZnkg
ZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUVhc2luZyB7XG4gICAgbGlu
ZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBzd2luZyhwOiBudW1iZXIpOiBudW1iZXI7XG59
XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2YgalF1ZXJ5ICh0aG9zZSBvbiAkIGFuZCBqUXVl
cnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5U3RhdGljIHtcblxuICAgIC8qKlxu
ICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQg
Y29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEg
ZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAg
ICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHNldHRpbmdz
IEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0
LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55
IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheCh1cmw6IHN0cmlu
Zywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipc
biAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0
aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9j
ZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVR5cGVzIEFuIG9w
dGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBkYXRh
VHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFs
dWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVy
KGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpR
dWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtcbiAgICAv
KipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcg
b3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBw
cm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhh
bmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAg
ICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0
czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xu
XG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3M7XG5cbiAgICAgLyoqXG4gICAg
ICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuIEl0cyB1c2Ug
aXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxuICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBIHNl
dCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIGRlZmF1bHQgQWpheCByZXF1
ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwuXG4gICAgICAqL1xuICAgIGFqYXhTZXR1cChv
cHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogTG9h
ZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBA
cGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIu
IERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCku
XG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4
dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3Ry
aW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2
ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBB
IHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5c
biAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50
IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJv
bSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3Jp
cHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVj
dCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAg
ICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRv
IHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBv
YmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVl
c3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4
ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBU
aGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxs
aWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBn
ZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJp
bmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRo
YXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0
SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAq
IExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8g
dGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5c
biAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNz
PzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBh
bnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBhIEphdmFTY3JpcHQgZmlsZSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LCB0aGVuIGV4ZWN1dGUgaXQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0
byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5c
biAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoc2NyaXB0OiBz
dHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1
ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBhcmFtO1xuXG4gICAgLyoqXG4gICAgICogTG9h
ZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2gg
dGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1
bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVk
IGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxu
ICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhl
IHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0
ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5n
IHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNh
biBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUg
b2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1
ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1
cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0
dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6
IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVz
aW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8g
dGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4g
UmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0
IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQg
ZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBz
Y3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/
OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhS
OiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG5cbiAg
ICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2UgY2FsbGJhY2tzIGxpc3Qgb2JqZWN0IHRoYXQg
cHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFuYWdlIGNhbGxiYWNrIGxpc3RzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVk
IGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzLlxuICAgICAq
L1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmluZyk6IEpRdWVyeUNhbGxiYWNrO1xuXG4gICAg
LyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMgdGhlIGV4ZWN1dGlvbiBvZiBqUXVlcnkncyBy
ZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBob2xkIEluZGljYXRlcyB3aGV0aGVy
IHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVlc3RlZCBvciByZWxlYXNlZFxuICAgICAqL1xu
ICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTogdm9pZDtcblxuICAgIChzZWxlY3Rvcjogc3Ry
aW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIChlbGVtZW50OiBFbGVtZW50KTogSlF1
ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5O1xuICAgIChlbGVtZW50QXJyYXk6IEVsZW1l
bnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgKGZ1bmM6
IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJheTogYW55W10pOiBKUXVlcnk7XG4gICAgKCk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbGlucXVpc2ggalF1ZXJ5J3MgY29udHJvbCBv
ZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW1vdmVBbGwgQSBCb29s
ZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1vdmUgYWxsIGpRdWVyeSB2YXJpYWJsZXMgZnJv
bSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcgalF1ZXJ5IGl0c2VsZikuXG4gICAgICovXG4g
ICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29sZWFuKTogT2JqZWN0O1xuXG4gICAgLyoqXG4g
ICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQg
b24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVw
cmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJy
ZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2Jq
ZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMg
YSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUg
b2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJv
bm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3Jl
IERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9c
biAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAv
KipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBi
YXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhh
dCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBk
ZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlw
dCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBhbnlbXSk6IEpR
dWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29rczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07
XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSBhcmJpdHJhcnkg
ZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBlbGVtZW50LiBSZXR1cm5zIHRoZSB2
YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9N
IGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBB
IHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB2
YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAgICovXG4gICAgZGF0YTxUPihlbGVtZW50OiBF
bGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBUO1xuICAgIC8qKlxuICAgICAqIFJldHVy
bnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBq
UXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUg
Zm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBl
bGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBz
dHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKi9cbiAgICBkYXRh
KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFJl
dHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBi
eSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3Rv
cmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERP
TSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGEo
ZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAgIGRlcXVldWUoZWxlbWVudDogRWxlbWVudCwg
cXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4gICAgaGFzRGF0YShlbGVtZW50OiBFbGVtZW50
KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0
cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3Ry
aW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEo
ZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVy
cmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3RhcnQ/OiAoZGVmZXJyZWQ6IEpRdWVyeURlZmVy
cmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIC8vIEVmZmVjdHNcbiAg
ICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRlcnZhbDogbnVtYmVyOyBzdG9wOiAoKSA9PiB2
b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBmYXN0OiBudW1iZXI7IH07IG9mZjogYm9vbGVh
bjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZlbnRzXG4gICAgcHJveHkoZm46ICguLi5hcmdz
OiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAg
IHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IGFueTtc
blxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0cnVjdG9yO1xuXG4gICAgLy8gSW50ZXJuYWxz
XG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91
c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55OyAgLy9UT0RPOiBEZWNpZGUgaG93IHdlIHdh
bnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTogYm9vbGVhbjtcblxuICAgIC8vIFByb3BlcnRp
ZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0O1xuXG4gICAgLy8gVXRpbGl0aWVzXG4gICAg
Y29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBjb250YWluZWQ6IEVsZW1lbnQpOiBib29sZWFu
O1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBh
bnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFueSk6IGFueTtcbiAgICBlYWNoKGNvbGxlY3Rp
b246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1l
bnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaDxUPihjb2xsZWN0aW9uOiBU
W10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBUKSA9
PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFyZ2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTog
YW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFuLCB0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55
W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNvZGU6IHN0cmluZyk6IGFueTtcblxuICAgIGdy
ZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6
IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0PzogYm9vbGVhbik6IFRbXTtcblxuICAgIGluQXJy
YXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZyb21JbmRleD86IG51bWJlcik6IG51bWJlcjtc
blxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRW1wdHlPYmplY3Qob2Jq
OiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFuO1xuICAg
IGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICBpc1BsYWluT2JqZWN0KG9iajog
YW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNY
TUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5cbiAgICBtYWtlQXJyYXkob2JqOiBhbnkpOiBh
bnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTogVFtdLCBjYWxsYmFjazogKGVsZW1lbnRPZkFy
cmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gVSk6IFVbXTtcbiAgICBtYXAoYXJyYXk6
IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogYW55LCBpbmRleEluQXJyYXk6IGFueSkg
PT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBUW10pOiBU
W107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtdLCBzZWNvbmQ6IFVbXSk6IGFueVtdO1xuXG4g
ICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTogbnVtYmVyO1xuXG4gICAgcGFyc2VKU09OKGpz
b246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRv
IGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhYSB3ZWxsLWZvcm1l
ZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqL1xuICAgIHBhcnNlWE1MKGRhdGE6IHN0
cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVO
YW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIHRyaW0oc3RyOiBz
dHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9iajogYW55KTogc3RyaW5nO1xuXG4gICAgdW5p
cXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmlu
ZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRh
IEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqIEBwYXJhbSBjb250ZXh0IERPTSBlbGVt
ZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBIVE1MIGZyYWdtZW50IHdp
bGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBrZWVwU2NyaXB0cyBBIEJvb2xlYW4gaW5kaWNh
dGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIEhUTUwgc3RyaW5n
XG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6IHN0cmluZywgY29udGV4dD86IEhUTUxFbGVt
ZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBhbnlbXTtcblxuICAgIEFuaW1hdGlvbihlbGVt
OiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogYW55KTogYW55O1xuXG4gICAgZWFzaW5n
OiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAgVGhlIGpRdWVyeSBpbnN0YW5jZSBtZW1iZXJz
XG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAgLy8gQUpBWFxuICAgIGFqYXhDb21wbGV0ZSho
YW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheEVycm9yKGhhbmRsZXI6IChldmVudDogYW55
LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0
aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdGFy
dChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0b3AoaGFuZGxlcjogKCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNjZXNzKGhhbmRsZXI6IChldmVudDogYW55LCBq
cVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0YT86IGFueSwgY29tcGxldGU/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3RyaW5nO1xuICAgIHNlcmlhbGl6ZUFycmF5KCk6
IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIGFkZENsYXNzKGNsYXNzTmFtZXM6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY3VycmVudENs
YXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5
LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
blxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAgIGF0dHIoYXR0
cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIoYXR0cmli
dXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgYXR0cjogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpRdWVyeTtcblxuICAgIGhhc0NsYXNzKGNsYXNz
TmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAgIGh0bWwoKTogc3RyaW5nO1xuICAgIGh0bWwo
aHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwoaHRtbENvbnRlbnQ6IChpbmRl
eDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1s
KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6
IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5
O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0
cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFByb3BlcnR5VmFsdWU6IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcmVt
b3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9n
Z2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAg
ICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Mo
ZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBzd3RjaDogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4g
ICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBudW1iZXIpOiBK
UXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHN0eWxlIHByb3BlcnRp
ZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkuXG4gICAg
ICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAgIC8qKlxuICAg
ICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9w
ZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHBy
b3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3Bl
cnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFs
dWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3Ry
aW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9w
ZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZh
bHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHBy
b3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyW10pOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNo
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHBy
b3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRo
ZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhl
IGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFs
dWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywg
dmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUg
c2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlO
YW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24g
cmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4g
UmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5k
IHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5h
bWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSA9PiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0
aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJvcGVydHktdmFsdWUgcGFpcnMgdG8gc2V0Llxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBPYmplY3QpOiBKUXVlcnk7XG5cbiAgICBoZWln
aHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIGhl
aWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhlaWdodChmdW5jOiAoaW5kZXg6IGFu
eSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGlubmVySGVpZ2h0KCk6IG51
bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgaW5u
ZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJXaWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5
O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgfTtcbiAgICBv
ZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVyeTtcbiAgICBvZmZzZXQoZnVuYzogKGluZGV4
OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBvdXRlckhlaWdodChp
bmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlckhlaWdodCh2YWx1ZTog
bnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIG91dGVyV2lk
dGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJXaWR0aCh2YWx1
ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHBvc2l0
aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgfTtcblxuICAgIHNjcm9sbExlZnQo
KTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAg
IHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIpOiBKUXVl
cnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4gICAgd2lkdGgodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHdpZHRoKGZ1bmM6
IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGF0
YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZGF0
YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBkYXRhKG9iajogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgZGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7
XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92
ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAg
cHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5c
biAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzog
YW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGll
czogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjb21wbGV0ZT86IEZ1bmN0
aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBvcHRpb25zOiB7IGR1
cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7IGNvbXBsZXRlPzogRnVuY3Rpb247IHN0ZXA/
OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBzcGVjaWFsRWFzaW5nPzogYW55OyB9KTogSlF1
ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51bWJlciwgcXVldWVOYW1lPzogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlT3V0KGR1cmF0aW9uPzogYW55LCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvKGR1cmF0aW9uOiBh
bnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRv
KGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2lu
Zz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmaW5pc2goKTogSlF1
ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7
XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTog
SlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVG9nZ2xlKGR1
cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVRvZ2dsZShk
dXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
blxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
ICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/
OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3AocXVldWU/OiBhbnksIGNsZWFyUXVldWU/OiBi
b29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlKGR1cmF0
aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoZHVyYXRpb24/
OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9n
Z2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICAvLyBFdmVudHNcbiAgICBi
aW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmluZChldmVu
dFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnksIHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBK
UXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgcHJldmVudEJ1YmJsZTogYm9vbGVh
bik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50czogYW55W10pOiBKUXVlcnk7XG5cbiAgICBi
bHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBj
aGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgY2xpY2soaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRibGNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNrKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soZXZlbnREYXRh
PzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJp
bmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZm9jdXNcIiBldmVudCBvbiBh
biBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhldmVudERhdGE/OiBhbnks
IGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChldmVudERhdGE6
IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCB0d28gaGFuZGxlcnMgdG8gdGhlIG1h
dGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50
ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMg
dGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXJPdXQgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhIHNpbmdsZSBoYW5kbGVyIHRvIHRoZSBt
YXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVu
dGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRl
cnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbk91
dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5ZG93blwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlkb3duKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGtleWRvd25cIlwiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlkb3duKGV2ZW50RGF0YT86
IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5cHJlc3NcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXByZXNzKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmln
Z2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXl1
cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5n
IGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIg
SmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5k
bGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VlbnRl
clwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcigpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdo
ZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbGVhdmVcIiBldmVudCBvbiBh
biBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBs
ZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAg
ICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2
YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdXRcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3V0KCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91
c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZXVwXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxu
ICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2
ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVz
dCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9y
IFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2gg
c2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRh
Y2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1
bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNp
YWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rv
cj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVk
IGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMs
IHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBh
dHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAg
ICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUg
YW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0
IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJh
dGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyBy
ZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2
ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBt
YXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2
ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHsgW2tleTogc3RyaW5nXTog
YW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0
dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8g
dGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUg
b3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFj
ZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9y
IGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuIFJlc3QgcGFyYW1ldGVy
IGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRlcnMgcGFzc2VkIHRvIGpRdWVyeS50cmlnZ2Vy
KCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgb24gdGhlIGV2ZW50IGhhbmRsZXIg
ZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0aW9uYWwgKD8gc3ludGF4KS5cbiAgICAgKi9c
biAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRz
IHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAg
KiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5k
YW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYg
dGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmln
Z2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEg
ZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24o
ZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRh
Y2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRo
ZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9y
IG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2Vz
LCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFy
YW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBv
ZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNl
bGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQg
d2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRh
IERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFs
c28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2Vz
IHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6
IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0
aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVu
dCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50
IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAg
KiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5k
YW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIu
IElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5
cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBw
YXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEg
d2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiB7IFtrZXk6IHN0
cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnksIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVu
dHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIg
ZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFp
bmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tc
IiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFu
ZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9y
IG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJt
aXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJhbSBkYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJp
bmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0
byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBt
b3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0
aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2lu
XCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0
aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUg
ZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBh
bHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRo
YW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAq
L1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhl
IGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0
eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBl
bGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBv
ciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMg
dGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNz
ZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxu
ICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTog
YW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZv
ciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIg
ZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4g
b2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3Bh
Y2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhl
IHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhl
IGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBm
aWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwg
Y2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVs
ZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRs
ZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbmUo
ZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcsIGRhdGE/
OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIERPTSBpcyByZWFk
eS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVyOiBGdW5jdGlvbik6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVzaXplXCIgZXZlbnQgb24gYW4gZWxlbWVudC5c
biAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGV2ZW50RGF0YTogT2JqZWN0LCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNjcm9sbFwiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChldmVudERhdGE6IE9i
amVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzZWxlY3RcIiBldmVudCBv
biBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNlbGVjdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3QoZXZlbnRE
YXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic3VibWl0XCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0
YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2
ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChl
dmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5l
eHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHRyaWdnZXIoZXZlbnQ6IEpRdWVy
eUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlckhhbmRsZXIoZXZlbnRUeXBlOiBz
dHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55W10pOiBPYmplY3Q7XG5cbiAgICB1bmJpbmQo
ZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuYmluZChldmVudFR5cGU6IHN0cmluZywgZmxz
OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmluZChldnQ6IGFueSk6IEpRdWVyeTtcblxuICAg
IHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZl
bnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudHM6
IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKG5hbWVzcGFjZTogc3RyaW5nKTogSlF1ZXJ5
O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
Ly8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxlbWVudDtcbiAgICBqcXVlcnk6IHN0cmluZztc
blxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVudERhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcHVzaFN0
YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFu
eVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWFuaXB1
bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYWZ0ZXIo
ZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZCguLi5jb250
ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYmVmb3Jl
KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9uZSh3aXRoRGF0
YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4pOiBK
UXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBlbXB0
eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRlcih0YXJnZXQ6IGFueSk6IEpRdWVyeTtcbiAg
ICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kKC4uLmNv
bnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHByZXBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0
bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZFRvKHRhcmdldDogYW55KTog
SlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVw
bGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VXaXRoKGZ1bmM6IGFu
eSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3RyaW5nO1xuICAgIHRleHQodGV4dFN0cmluZzog
YW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0cmluZzogKGluZGV4OiBudW1iZXIsIHRleHQ6
IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9BcnJheSgpOiBhbnlbXTtcblxu
ICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3cmFwKHdyYXBwaW5nRWxlbWVudDogYW55KTog
SlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwSW5u
ZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3JhcElubmVyKGZ1bmM6IChp
bmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAg
ZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55O1xuXG4gICAgaW5kZXgoKTogbnVtYmVyO1xu
ICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBudW1iZXI7XG4gICAgaW5kZXgoZWxlbWVudDog
YW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAgIGxlbmd0aDogbnVtYmVyO1xu
ICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbiAgICBbeDogbnVt
YmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBUcmF2ZXJzaW5nXG4gICAgYWRkKHNlbGVjdG9y
OiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgYWRkKC4uLmVsZW1lbnRzOiBh
bnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZChv
Ymo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNoaWxkcmVuKHNlbGVjdG9yPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGNsb3Nl
c3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgY2xv
c2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KGVsZW1lbnQ6IGFueSk6IEpR
dWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczogYW55LCBjb250ZXh0PzogRWxlbWVudCk6IGFu
eVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5O1xuXG4gICAgZW5kKCk6IEpRdWVyeTtcblxu
ICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBmaWx0ZXIoc2VsZWN0b3I6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihvYmo6
IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtc
biAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaW5kKG9iajogSlF1ZXJ5KTog
SlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5O1xuXG4gICAgaGFzKHNlbGVjdG9yOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5lZDogRWxlbWVudCk6IEpRdWVyeTtcblxuICAg
IGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGlzKGZ1bmM6IChpbmRleDogYW55
KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW47XG4gICAg
aXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4gICAgbGFzdCgpOiBKUXVlcnk7XG5cbiAgICBt
YXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21FbGVtZW50OiBFbGVtZW50KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4
dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5leHRVbnRpbChzZWxlY3Rv
cj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChlbGVt
ZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChv
Ymo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5vdChzZWxlY3Rv
cjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgbm90KG9iajogSlF1
ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFyZW50KCk6IEpRdWVyeTtcblxuICAgIHBhcmVu
dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHMoc2VsZWN0b3I/OiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzVW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZp
bHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJlbnRzVW50aWwoZWxlbWVudD86IEVsZW1l
bnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJlbnRzVW50aWwob2JqPzogSlF1
ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2KHNlbGVjdG9yPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
c2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgLy8gVXRp
bGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1
ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG4g
ICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG59XG5kZWNsYXJlIG1v
ZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQgPSAkO1xufVxuZGVjbGFyZSB2YXIgalF1ZXJ5
OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAkOiBKUXVlcnlTdGF0aWM7XG4vLyBsaWJzL2Fu
Z3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRlZmluaXRpb25zIGZvciBBbmd1bGFyIEpTIDEu
MFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJqcy5vcmdcbi8vIERlZmluaXRpb25zIGJ5OiBE
aWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20vZGllZ292aWxhcj5cbi8vIERlZmluaXRpb25z
OiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkXG5cblxuXG5k
ZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxhclN0YXRpYztcblxuLy8gU3VwcG9ydCBmb3Ig
cGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25cbmludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAg
JGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbmcgbW9k
dWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZGVjbGFyZSBtb2R1bGUg
bmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJvdmlkZXJzIGV4dGVuZCB0aGlzIGludGVyZmFj
ZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgJGdldDogYW55O1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuZ3VsYXJTdGF0aWNcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGlcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJTdGF0aWMge1xuICAgICAgICBiaW5kKGNvbnRl
eHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSk6IEZ1bmN0aW9uO1xuICAgICAg
ICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmpl
Y3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBKUXVlcnksIG1vZHVsZXM/
OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1l
bnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAg
ICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3VtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRv
LklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNvcHkoc291cmNlOiBhbnksIGRlc3RpbmF0aW9u
PzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50OiBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljO1xu
ICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZhbHVlMjogYW55KTogYm9vbGVhbjtcbiAgICAg
ICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4uLnNvdXJjZXM6IGFueVtdKTogYW55O1xuICAg
ICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRvcjogKHZhbHVlOiBhbnksIGtleTogYW55KSA9
PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4gICAgICAgIGZyb21Kc29uKGpzb246IHN0cmlu
Zyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJnPzogYW55KTogYW55O1xuICAgICAgICBpbmpl
Y3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGlz
QXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGF0ZSh2YWx1ZTogYW55KTog
Ym9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRnVuY3Rpb24odmFs
dWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFu
O1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNTdHJp
bmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzVW5kZWZpbmVkKHZhbHVlOiBhbnkp
OiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAg
ICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFyIGFwcGxpY2F0aW9uXG5cdFx0b2ZmaWNpYWwg
ZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmluZyBhbmd1bGFyIG1vZHVsZXMuXG5cdFx0c2Vl
OiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuXHRcdCovXG4g
ICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIHlvdXIgbW9kdWxlIHlvdSB3
YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAg
LyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBlbmRzIG9uICovXG4gICAgICAgICAgICByZXF1
aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAgY29uZmlnRnVuY3Rpb24/OiBhbnkpOiBJTW9k
dWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAgdG9Kc29u
KG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTogc3RyaW5nO1xuICAgICAgICB1cHBlcmNhc2Uo
c3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgIGZ1
bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9yOiBudW1iZXI7XG4gICAgICAgICAgICBtaW5v
cjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBudW1iZXI7XG4gICAgICAgICAgICBjb2RlbmFt
ZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9h
bmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTW9k
dWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywgYW5pbWF0aW9uRmFjdG9yeTog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBpbmxp
bmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBhbmltYXRpb24o
b2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5n
IHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5l
ZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBj
b25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3Vy
ZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29y
ayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9c
biAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4g
ICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgY29udHJv
bGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9k
dWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29u
c3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihvYmplY3QgOiBP
YmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3Rp
dmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBz
dHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAg
IGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFt
ZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4g
ICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtc
biAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeUZ1bmN0aW9uOiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90
YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVBy
b3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIo
bmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxl
O1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHJ1
bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHJ1
bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2
aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3Rv
cjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG9iamVjdDogT2JqZWN0KTogSU1v
ZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtc
biAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuXG4gICAgICAgIC8vIFBy
b3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICByZXF1aXJlczogc3RyaW5n
W107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQXR0cmlidXRlc1xu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZS5kaXJl
Y3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
QXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gYWNjZXNz
IHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBub3QgdmVyeSBlbGVnYW50XG5cdC8vIGJlY2F1
c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28nXSBpbnN0ZWFkIG9mIGF0dHJzLmZvbyBidXQg
SSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxuXHQvLyB0aGlzIHNob3VsZCByZWFsbHkgYmUg
bGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBpdCBjcmVhdGVzIHRoaXMgcHJvYmxlbTogaHR0
cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4NTQvMTY1NjU2XG5cdFtuYW1lOiBzdHJpbmdd
OiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBi
eSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRoZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBh
bmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVk
XG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRkaXRpb24uXG4gICAgICAgICRhZGRDbGFzcyhj
bGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBSZW1vdmVzIHRoZSBDU1MgY2xh
c3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgZnJvbSB0aGVcbiAg
ICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1h
dGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAgICAgICAgLy8gdGhlIGNsYXNzIHJlbW92YWwu
XG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAgICAg
ICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRlIHZhbHVlLlxuICAgICAgICAkc2V0KGtleTog
c3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAvLyBPYnNlcnZlcyBhbiBpbnRl
cnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAvLyBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2ls
bCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBuZXh0ICRkaWdlc3RcbiAgICAgICAgLy8gZm9s
bG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVy
IHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQgdmFsdWUgY2hhbmdlcy5cbiAgICAgICAgJG9i
c2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/OmFueSk9PmFueSk6IEZ1bmN0aW9uO1xuXG4g
ICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9y
bWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxuICAgICAgICAvLyB0byBkbyByZXZlcnNlIGxv
b2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNrIHRvIGFjdHVhbCBuYW1lLlxuICAgICAgICAk
YXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZv
cm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVh
bjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4g
ICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAg
JGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAg
ICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtc
biAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4gICAgICAgICRzZXRQcmlzdGluZSgpOiB2b2lk
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE5nTW9kZWxDb250cm9s
bGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2
ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7XG4gICAgICAgICRyZW5kZXIoKTogdm9pZDtc
biAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktleTogc3RyaW5nLCBpc1ZhbGlk
OiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdmlld1Zh
bHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3RyaW5nIGJ1dCBvdGhlclxuICAgICAgICAvLyB0
eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0byB1c2UgdGhlbS5cbiAgICAgICAgJHNldFZp
ZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAgICAgICAgJHZpZXdWYWx1ZTogYW55O1xuXG4g
ICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAgICAgICAgJHBhcnNlcnM6IElNb2RlbFBhcnNl
cltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1vZGVsRm9ybWF0dGVyW107XG4gICAgICAgICRl
cnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTog
Ym9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9v
bGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsUGFyc2VyIHtcbiAgICAgICAgKHZh
bHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbEZvcm1hdHRlciB7
XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5KCk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4
cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiAoc2NvcGU6IElTY29wZSkgPT4g
YW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNhc3QobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBh
bnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAgICRkZXN0cm95KCk6IHZvaWQ7XG4gICAgICAg
ICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVtaXQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBh
bnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4
cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAg
ICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcsIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG4gICAg
ICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGFyZ3M/OiBPYmpl
Y3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25h
bCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbEFz
eW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVz
c2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gRGVmYXVs
dHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0aW9uIGNoZWNraW5nIHN0cmF0ZWd5XG4gICAg
ICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJU2NvcGU7XG5cbiAgICAgICAgJG9uKG5hbWU6
IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFuZ3VsYXJFdmVudCwgLi4uYXJnczogYW55W10p
ID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0
cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0
aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzog
KG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2Jq
ZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4
cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogc3RyaW5nLCBvYmpl
Y3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhw
cmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFu
eSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86
IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhw
cmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnks
IHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2hDb2xsZWN0
aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI6IChu
ZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5j
dGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2NvcGU7XG5cbiAgICAgICAgJGlkOiBudW1iZXI7
XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNcbiAgICAgICAgJCRpc29sYXRlQmluZGluZ3M6
IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5n
dWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2NvcGU6IElTY29wZTtcbiAgICAgICAgY3VycmVu
dFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcHJldmVudERl
ZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4g
ICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50cyB0aGF0IHdlcmUgJGVtaXQtdGVkXG4gICAg
ICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRzIFdpbmRvdyB7fVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZpY2VcbiAgICAvLyBUT0RPIHVuZG9jdW1lbnRl
ZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgc291cmNlIGNvZGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJyb3dzZXJTZXJ2aWNlIHt9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGltZW91dFxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rp
b24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+
O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJ2YWxTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnZhbFxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJ2YWxTZXJ2aWNlIHtcbiAgICAg
ICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyLCBjb3VudD86IG51bWJlciwgaW52b2tl
QXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6
IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAgICAobmFtZTogc3RyaW5nKTogRnVuY3Rpb247
XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNl
UHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3Rvcnk6
IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAgICBpZDogc3RyaW5nO1xuXG4gICAgICAgIC8v
IFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICAvLyBDaGVjayBhbmd1bGFyJ3MgaTE4
biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAgTlVNQkVSX0ZPUk1BVFM6IElMb2NhbGVOdW1i
ZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBEQVRFVElNRV9GT1JNQVRTOiBJTG9jYWxlRGF0
ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBwbHVyYWxDYXQ6IChudW06IGFueSkgPT4g
c3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3Jp
cHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBzdHJpbmc7XG4gICAgICAgIEdST1VQX1NFUDog
c3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9y
W107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3Ige1xuICAgICAgICBtaW5JbnQ6IG51bWJl
cjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xuICAgICAgICBtYXhGcmFjOiBudW1iZXI7XG4g
ICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAgICBwb3NTdWY6IHN0cmluZztcbiAgICAgICAg
bmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1Zjogc3RyaW5nO1xuICAgICAgICBnU2l6ZTog
bnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIE1PTlRIOiBzdHJpbmdb
XTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5nW107XG4gICAgICAgIERBWTogc3RyaW5nW107
XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtcbiAgICAgICAgQU1QTVM6IHN0cmluZ1tdO1xu
ICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAgICAgc2hvcnQ6IHN0cmluZztcbiAgICAgICAg
ZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9uZ0RhdGU6IHN0cmluZztcbiAgICAgICAgbWVk
aXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9ydERhdGU6IHN0cmluZztcbiAgICAgICAgbWVk
aXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9ydFRpbWU6IHN0cmluZztcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xuICAgICAgICBkZWJ1ZzogSUxvZ0NhbGw7XG4g
ICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAgICAgaW5mbzogSUxvZ0NhbGw7XG4gICAgICAg
IGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46IElMb2dDYWxsO1xuICAgIH1cblxuICAgIC8v
IFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGludGVyZmFjZSBzbyB3ZSBjYW4gcmVvcGVuIGl0
IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sgbW9kdWxlLlxuICAgIGludGVyZmFjZSBJTG9n
Q2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJzZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtcbiAgICAgICAgKGV4cHJlc3Npb246IHN0cmlu
Zyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxl
ZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4dDogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7
XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90IHByb3ZpZGVkLCB1bmRlZmluZWQgaXMgZ29u
bmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb25cbiAgICAgICAgLy8gZG9lcyBub3Qg
Y2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9yY2UgYSB2YWx1ZSBmb3IgY29uc2lzdGVuY3ku
IElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50cyB0byB1bmRlZmluZSBpdCwgcGFzcyB0aGUg
dW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4gICAgICAgIGFzc2lnbihjb250ZXh0OiBhbnks
IHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4kbG9jYXRpb25cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uU2VydmljZSB7XG4gICAgICAgIGFic1VybCgp
OiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3RyaW5nO1xuICAgICAgICBoYXNoKG5ld0hhc2g6
IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIGhvc3QoKTogc3RyaW5nO1xuICAg
ICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAgcGF0aChuZXdQYXRoOiBzdHJpbmcpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6IG51bWJlcjtcbiAgICAgICAgcHJvdG9jb2wo
KTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAg
IHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXJzTWFwOiBhbnkpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyOiBzdHJpbmcsIHBhcmFtZXRl
clZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICB1cmwoKTogc3RyaW5nO1xu
ICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztcbiAgICAgICAgaGFzaFByZWZpeChwcmVmaXg6
IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgICAgICBodG1sNU1vZGUoKTogYm9vbGVh
bjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IHBhcmFtZXRlciBpcyBz
dHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiB0ZXN0cyBpdCBhcyBib29sZWFu
LCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAgICAgIC8vIHNpbmNlIHRoaXMgaXMgYSB0b2dn
bGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6IGJvb2xlYW4pOiBJTG9jYXRpb25Qcm92aWRl
cjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEb2N1bWVudFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGRvY3VtZW50
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElEb2N1bWVudFNlcnZpY2Ug
ZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRXhj
ZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlIHtcbiAgICAgICAgKGV4Y2VwdGlvbjog
RXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNlcnZpY2UgZXh0ZW5kcyBKUXVlcnkge31cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFFTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRxXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAgICAgIGFsbChwcm9taXNlczogSVByb21pc2U8
YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAgICAgICBkZWZlcjxUPigpOiBJRGVmZXJyZWQ8
VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiBJUHJvbWlzZTx2b2lkPjtcbiAgICAg
ICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAo
cHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/
OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4g
YW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0Nh
bGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxs
YmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55
KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNj
ZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/
OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkp
ID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuXG5cbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4o
b25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJSHR0cFByb21pc2U8VFJlc3VsdD4pOiBJUHJv
bWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNv
bjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAg
ICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQpOiBJ
UHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBmaW5hbGx5PFRSZXN1bHQ+KGZpbmFsbHlDYWxs
YmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29sdmUodmFsdWU/OiBUKTogdm9pZDtcbiAgICAg
ICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7XG4gICAgICAgIG5vdGlmeShzdGF0ZT86YW55
KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9yU2Nyb2xsU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kYW5jaG9yU2Nyb2xsXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmNob3JTY3JvbGxTZXJ2aWNlIHtcbiAgICAg
ICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmNob3JTY3JvbGxQcm92aWRl
ciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXNhYmxlQXV0b1Njcm9sbGlu
ZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENhY2hl
RmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
Q2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAgIC8vIExldHMgbm90IGZvY2UgdGhlIG9wdGlv
bnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVtYmVyLiBFdmVuIHRob3VnaFxuICAgICAgICAv
LyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRlcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0
b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBtaWdodCBmaW5kIGl0IHVzZWZ1bCB0byBhc3Nv
Y2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRoZSBjYWNoZSBvYmplY3QuXG4gICAgICAgIC8v
KGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IENh
Y2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBh
Y2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0O1xuXG4gICAgICAgIC8vIE1ldGhvZHMgYmVs
bG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICBpbmZvKCk6IGFueTtcbiAgICAgICAgZ2V0
IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmplY3Q7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8oKToge1xuICAgICAgICAgICAgaWQ6IHN0cmlu
ZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtcblxuICAgICAgICAgICAgLy8gTm90IGdhcmFu
dGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9uLW1hbmRhdG9yeSBvcHRpb25cbiAgICAgICAg
ICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgICAgcHV0KGtleTogc3Ry
aW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAgICAgIGdldCAoa2V5OiBzdHJpbmcpOiBhbnk7
XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQ7XG4gICAgICAgIHJlbW92ZUFsbCgp
OiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZpY2Uge1xuICAgICAgICAoZWxlbWVudDogc3Ry
aW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86
IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEVs
ZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5
PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDog
SlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0
eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAg
ICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElD
b21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8gVW5kb2N1bWVudGVkLCBidXQgaXQgaXMgdGhl
cmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVjdGl2ZXNNYXA6IGFueSk6IElDb21waWxlUHJv
dmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiB7
XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5vdCBmb3JjZSBjbG9uZUF0dGFjaEZuJ3Mgc2ln
bmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3BlLCBjbG9uZUF0dGFjaEZuPzogKGNsb25lZEVs
ZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3BlKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29udHJvbGxlclNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbnRyb2xsZXJcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbnRyb2xsZXJQcm92aWRl
clxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29udHJvbGxlclNlcnZp
Y2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHN0YXRl
IHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAgICAgICAgKGNvbnRyb2xsZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgKGNvbnRyb2xsZXJOYW1l
OiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNv
bnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdp
c3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiB2b2lk
O1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGRlcGVuZGVuY3lBbm5vdGFkZWRDb25z
dHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRw
U2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0IG1vZXRob2QgYW5kIHVybCBtdXN0IGJlIHBy
b3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElSZXF1ZXN0Q29uZmlnKTogSUh0dHBQcm9taXNl
PGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJ
SHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVsZXRlICh1cmw6IHN0cmluZywgUmVxdWVzdENv
bmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBoZWFkKHVybDogc3RyaW5n
LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGpzb25w
KHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4g
ICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6
IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwdXQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwg
UmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWZhdWx0
czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAgLy8gRm9yIGRlYnVnZ2luZywgQlVUIGl0IGlz
IGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxuICAgICAgICBwZW5kaW5nUmVxdWVzdHM6IGFu
eVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMganVzdCBmb3IgaGludGluZy5cbiAgICAvLyBT
b21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1
ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cCNV
c2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNcbiAgICBpbnRlcmZhY2UgSVJlcXVlc3RDb25m
aWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztcbiAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAg
ICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAvLyBYWFggaXQgaGFzIGl0J3Mgb3duIHN0cnVj
dHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVmaW5lIGl0IGluIHRoZSBmdXR1cmVcbiAgICAg
ICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBjYWNoZT86IGFueTtcbiAgICAgICAgd2l0aENy
ZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAgICAvLyBUaGVzZSBhY2NlcHQgbXVsdGlwbGUg
dHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFzIGFueVxuICAgICAgICBkYXRhPzogYW55O1xu
ICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXNwb25z
ZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFueTsgLy8gbnVtYmVyIHwgcHJvbWlzZVxuICAg
IH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2VDYWxsYmFjazxUPiB7XG4gICAgICAgIChk
YXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVyczogKGhlYWRlck5hbWU6IHN0cmluZykgPT4g
c3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmlnKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4ge1xuICAgICAgICBkYXRhPzogVDtcbiAg
ICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAgICBoZWFkZXJzPzogKGhlYWRlck5hbWU6IHN0
cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25maWc/OiBJUmVxdWVzdENvbmZpZztcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlPFQ+IGV4dGVuZHMgSVByb21pc2U8VD4ge1xu
ICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRw
UHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNr
PFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxs
YmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gVFJlc3VsdCwg
ZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+
IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3ND
YWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gSVByb21p
c2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxi
YWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBk
ZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAgICAgIGludGVyY2VwdG9yczogYW55W107XG4g
ICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2VuZFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBCYWNrZW5kXG4gICAgLy8gWW91IHNob3Vs
ZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgZGlyZWN0bHkuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwQmFja2VuZFNlcnZpY2Uge1xuICAgICAgICAv
LyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sgc2lnbmF0dXJlIGluIHRoZSBmdXR1cmVcbiAg
ICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgcG9zdD86IGFueSwgY2FsbGJhY2s/
OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGltZW91dD86IG51bWJlciwgd2l0aENyZWRlbnRp
YWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVTZXJ2aWNlIHtcbiAgICAgICAgKHRleHQ6IHN0
cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9vbGVhbik6IElJbnRlcnBvbGF0aW9uRnVuY3Rp
b247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6
IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRpb25GdW5jdGlvbiB7
XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2wodmFsdWU6IHN0cmlu
Zyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xu
ICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFRlbXBsYXRlQ2FjaGVTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0ZW1wbGF0
ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUNh
Y2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVjdCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4dGVuZHMgSVNjb3BlIHt9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0aW50
ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVU
cnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZENzcyh2YWx1ZTogYW55KTogYW55O1xu
XHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEpzKHZh
bHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFJlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBh
bnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHBhcnNlKHR5cGU6
IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkp
ID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBh
bnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0h0bWwoZXhwcmVzc2lvbjogc3Ry
aW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSnMo
ZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtc
blx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzVXJsKGV4cHJlc3Npb246IHN0cmlu
Zyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0dHJ1c3RBcyh0eXBl
OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0h0bWwodmFsdWU6IGFueSk6
IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzUmVzb3Vy
Y2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzVXJsKHZhbHVlOiBhbnkpOiBhbnk7
XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5cdH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZW5h
YmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2aWNlIHtcbiAgICAgICAgZ2V0VHJ1c3RlZCh0
eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuICAgICAgICB0cnVzdEFzKHR5
cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgdmFsdWVPZih2YWx1ZTogYW55
KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVs
ZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAg
ICAgICByZXNvdXJjZVVybEJsb2NrbGlzdChibG9ja2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICAg
ICAgcmVzb3VyY2VVcmxBbGxvd2xpc3QoYWxsb3dsaXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRGlyZWN0aXZlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZl
XG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlyZWN0aXZlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpbnRlcmZhY2UgSURpcmVjdGl2ZXtcbiAgICAg
ICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVtcGxhdGVFbGVtZW50OiBhbnksXG4gICAgICAg
ICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgdHJhbnNj
bHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlua2luZ0ZuOiBGdW5jdGlvbikgPT4gdm9pZFxu
ICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXI/OiBhbnk7XG4gICAgICAg
IGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAgICAgbGluaz86XG4gICAgICAgICAgICAoc2Nv
cGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudDogYW55LFxuICAgICAgICAg
ICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvbnRyb2xs
ZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lkO1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xu
ICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAgICAgICAgcmVwbGFjZT86IGJvb2xlYW47XG4g
ICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAgIHJlc3RyaWN0Pzogc3RyaW5nO1xuICAgICAg
ICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRl
VXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86IGJvb2xlYW47XG4gICAgICAgIHRyYW5zY2x1
ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYW5ndWxh
ci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5nIGFuZ3VsYXIuZWxlbWVudCwgYW5ndWxhciBy
ZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAvLyBhdWdtZW50ZWQgd2l0aCBhZGRpdGlvbmFs
IG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAgIC8vIHNlZTogaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0aWMgZXh0ZW5kcyBKUXVlcnlTdGF0aWMge1xu
ICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAg
ICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudEFycmF5
OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiBKUXVlcnkp
OiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24pOiBJQXVnbWVudGVk
SlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAg
ICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBdWdtZW50
ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAgICAgICAvLyBUT0RPOiBldmVudHMsIGhvdyB0
byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lcblxuICAgICAgICBmaW5kKHNlbGVjdG9yOiBz
dHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQob2JqOiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1
ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICBp
bmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3BlKCk6IElTY29wZTtcblxuICAgICAgICBpbmhl
cml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgICAgICBpbmhl
cml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgICAg
IGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG5cbiAgICB9XG5cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8gbW9kdWxlIChhbmd1bGFyLmpzKVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBtb2R1bGUgYXV0byB7XG5cbiAgICAgICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0b3JTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRpbmplY3RvclxuICAgICAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2UgSUluamVjdG9yU2VydmljZSB7XG4gICAgICAg
ICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGFubm90
YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IHN0cmluZ1tdO1xuICAgICAgICAg
ICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICAgICBpbnN0YW50aWF0ZSh0eXBl
Q29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBp
bnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogYW55O1xuICAgICAgICAgICAg
aW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0PzogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7
XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBQcm92aWRl
U2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVU
Ty4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2UgSVBy
b3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBpdCByZXR1
cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBidXQgYWN0dWFsXG4gICAgICAgICAgICAvLyBp
bXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gICAgICAgICAgICAvLyBj
b25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBjb25z
dGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgICAgICBkZWNv
cmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAg
ICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcklubGluZTogYW55W10pOiB2b2lk
O1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rp
b246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIGZhY3Rvcnko
bmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBuZy5JU2Vydmlj
ZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjog
bmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBw
cm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlv
bik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmlu
ZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAg
ICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7
XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1vZGVscy9Ub2RvSXRlbS50c1xuXG5tb2R1bGUg
dG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGV4cG9ydCBjbGFzcyBUb2RvSXRlbSB7
XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgICAgcHVibGljIHRpdGxlOiBzdHJpbmcs
XG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVkOiBib29sZWFuXG4gICAgICAgICAgICApIHsg
fVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TY29wZS50c1xuXG5tb2R1bGUgdG9kb3Mg
e1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2NvcGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xuXHRc
dHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1RvZG86IHN0cmluZztcblx0XHRlZGl0ZWRUb2Rv
OiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86IFRvZG9JdGVtO1xuXHRcdHJlbWFpbmluZ0Nv
dW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBudW1iZXI7XG5cdFx0YWxsQ2hlY2tlZDogYm9v
bGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtcblx0XHRzdGF0dXNGaWx0ZXI6IHsgY29tcGxl
dGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlO1xuXHRc
dHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1N0b3JhZ2UudHNcblxu
bW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1N0b3JhZ2Uge1xuXHRcdGdl
dCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9kb3M6IFRvZG9JdGVtW10pO1xuXHR9XG59Ly8g
ZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3Qn
O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBwbGFjZXMgZm9jdXMgb24gdGhlIGVsZW1l
bnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBleHByZXNzaW9uIGl0IGJpbmRzIHRvIGV2YWx1
YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Gb2N1cygkdGltZW91
dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0
XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVz
OiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3YXRjaChhdHRyaWJ1dGVzLnRvZG9Gb2N1cywg
bmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3dmFsKSB7XG5cdFx0XHRcdFx0XHQkdGltZW91
dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAsIGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0
XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHR0b2RvRm9jdXMuJGluamVjdCA9IFsn
JHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMvVG9kb0JsdXIudHNcblxubW9kdWxlIHRvZG9z
IHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBEaXJlY3RpdmUgdGhhdCBl
eGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byBs
b3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9kb0JsdXIoKTogbmcu
SURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rOiAoJHNjb3Bl
OiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG4gICAg
ICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVyJywgKCkgPT4geyAkc2NvcGUuJGFwcGx5KGF0
dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuJG9uKCckZGVz
dHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2JsdXInKTsgfSk7XG4gICAgICAgICAgICB9
XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGlyZWN0aXZlcy9Ub2RvRXNjYXBlLnRzXG5cbm1v
ZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHRjb25zdCBFU0NBUEVfS0VZID0gMjc7
XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IGNhbmNlbHMgZWRpdGluZyBhIHRvZG8gaWYg
dGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0
b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAo
JHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7
XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRc
dGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVfS0VZKSB7XG5cdFx0XHRcdFx0XHQkc2NvcGUu
JGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtc
blxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQo
J2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufVxuLy8gc2VydmljZXMvVG9k
b1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAv
KipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNpc3RzIGFuZCByZXRyaWV2ZXMgVE9ET3MgZnJv
bSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9TdG9yYWdlIGlt
cGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAgICAgICBTVE9SQUdFX0lEID0gJ3RvZG9zLWFu
Z3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAgICBnZXQgKCk6IFRvZG9JdGVtW10ge1xuICAg
ICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9S
QUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1dCh0b2RvczogVG9kb0l0
ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0lE
LCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAgICAgICB9XG4gICAgfVxufS8vIGNvbnRyb2xs
ZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQv
Kipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBmb3IgdGhlIGFwcC4gVGhlIGNvbnRyb2xsZXI6
XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0cyB0aGUgbW9kZWwgdmlhIHRoZSB0b2RvU3Rv
cmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0aGUgbW9kZWwgdG8gdGhlIHRlbXBsYXRlIGFu
ZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQgKi9cblx0ZXhwb3J0IGNsYXNzIFRvZG9DdHJs
IHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9JdGVtW107XG5cblx0XHQvLyAkaW5qZWN0IGFu
bm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMgJGluamVjdG9yIHdpdGggaW5mb3JtYXRpb24g
YWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVjdGVkIGludG8gY29uc3RydWN0b3Jcblx0XHQv
LyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9zZSB0byB0aGUgY29uc3RydWN0b3IsIGJlY2F1
c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBpbiBjb3VudCBhbmQgdHlwZS5cblx0XHQvLyBT
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaVxuXHRcdHB1YmxpYyBzdGF0aWMg
JGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxuXHRcdFx0JyRsb2NhdGlvbicsXG5cdFx0XHQn
dG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZpbHRlcidcblx0XHRdO1xuXG5cdFx0Ly8gZGVw
ZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5ndWxhckpTICRpbmplY3RvclxuXHRcdC8vIGNv
bnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQgaW4gQXBwbGljYXRpb24udHMgYW5kIHNwZWNp
ZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmlidXRlIGluIGluZGV4Lmh0bWxcblx0XHRjb25z
dHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3BlOiBJVG9kb1Njb3BlLFxuXHRcdFx0cHJpdmF0
ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXG5cdFx0XHRwcml2YXRlIHRvZG9TdG9y
YWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2YXRlIGZpbHRlckZpbHRlclxuXHRcdCkge1xu
XHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2RvcyA9IHRvZG9TdG9yYWdlLmdldCgpO1xuXG5c
dFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdFx0JHNjb3BlLmVkaXRlZFRvZG8gPSBudWxs
O1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3IgJ3ZpZXcgbW9kZWwnLiBXZSdyZSBhZGRpbmcg
YSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHNjb3BlXG5cdFx0XHQvLyBmb3Ig
aXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIHZpZXcgLyBIVE1MXG5cdFx0XHQkc2Nv
cGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRjaGluZyBmb3IgZXZlbnRzL2NoYW5nZXMgaW4g
c2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmlldy91c2VyIGlucHV0XG5cdFx0XHQvLyBpZiB5
b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50IHdpdGggbGlmZXRpbWUgbG9uZ2VyIHRoYW4g
dGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91IHVuc3Vic2NyaWJlLlxuXHRcdFx0JHNjb3Bl
LiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9uVG9kb3MoKSwgdHJ1ZSk7XG5cdFx0XHQkc2Nv
cGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBwYXRoID0+IHRoaXMub25QYXRoKHBhdGgpKVxu
XG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9PT0gJycpICRsb2NhdGlvbi5wYXRoKCcvJyk7
XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9jYXRpb247XG5cdFx0fVxuXG5cdFx0b25QYXRo
KHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4kc2NvcGUuc3RhdHVzRmlsdGVyID0gKHBhdGgg
PT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogZmFsc2UgfSA6IChwYXRoID09
PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IHRydWUgfSA6IHt9O1xuXHRc
dH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudCA9
IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3MsIHsgY29tcGxldGVkOiBmYWxzZSB9KS5sZW5n
dGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291bnQgPSB0aGlzLnRvZG9zLmxlbmd0aCAtIHRo
aXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRcdFx0dGhpcy4kc2NvcGUuYWxsQ2hlY2tlZCA9
ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxuXHRcdFx0dGhpcy50b2RvU3RvcmFnZS5wdXQo
dGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRkVG9kbygpIHtcblx0XHRcdHZhciBuZXdUb2Rv
IDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9kby50cmltKCk7XG5cdFx0XHRpZiAoIW5ld1Rv
ZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy50b2Rv
cy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBmYWxzZSkpO1xuXHRcdFx0dGhpcy4kc2NvcGUu
bmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVkaXRUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkg
e1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IHRvZG9JdGVtO1xuXG5cdFx0XHQvLyBD
bG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNlIGVkaXRpbmcgaXMgY2FuY2VsbGVkLlxuXHRc
dFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gYW5ndWxhci5leHRlbmQoe30sIHRvZG9JdGVt
KTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRc
dHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKV0gPSB0aGlzLiRzY29wZS5v
cmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IHRydWU7XG5cdFx0fVxu
XG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29w
ZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IG51
bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2ZXJ0ZWQpIHtcblx0XHRcdFx0Ly8gVG9kbyBl
ZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZlLlxuXHRcdFx0XHR0aGlzLiRzY29wZS5yZXZl
cnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRvZG9JdGVtLnRp
dGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xuXHRcdFx0aWYgKCF0b2RvSXRlbS50aXRsZSkg
e1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9kb0l0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblxu
XHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zLnNw
bGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pLCAxKTtcblx0XHR9XG5cblx0XHRjbGVh
ckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnRvZG9zID0gdGhpcy50b2RvcyA9IHRo
aXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0b2RvSXRlbS5jb21wbGV0ZWQpO1xuXHRcdH1c
blxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29sZWFuKSB7XG5cdFx0XHR0aGlzLnRvZG9zLmZv
ckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5jb21wbGV0ZWQgPSBjb21wbGV0ZWQ7IH0pO1xu
XHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlvbi50c1xuXG4vKipcbiAqIFRoZSBtYWluIFRv
ZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlwZSB7YW5ndWxhci5Nb2R1bGV9XG4gKi9cbm1v
ZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRvZG9tdmMgPSBhbmd1
bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ3RvZG9D
dHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvQmx1cicsIHRvZG9C
bHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0ZvY3VzJywgdG9kb0ZvY3VzKVxuICAg
ICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2FwZScsIHRvZG9Fc2NhcGUpXG4gICAgICAgICAg
ICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2RvU3RvcmFnZSk7XG59XG4iCiAKIC8qKiovIH0p
LAogLyogNDIxICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVs
ZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3Vu
ZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9j
dW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAg
VW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5z
ZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0t
LS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhl
IGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUgc2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7
XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAg
dmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRo
ZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9
IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8g
PSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJp
YWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1
c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9
IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3Ry
aW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxu
ICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25z
IHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAg
IG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAg
ICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJp
bmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0gT2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtl
ZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4g
IHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNl
IHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlm
ICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3Jh
cHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZv
ciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhl
IG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQg
YF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZp
bmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUu
ZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4g
ICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAg
Ly8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVy
bmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2lu
ZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0
ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIg
b3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYg
KGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9
PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2
YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAg
IH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAg
ICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAg
ICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xu
ICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlv
bik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3Is
IHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNv
bnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtc
biAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHko
Y29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVy
bmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4g
IC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJl
ZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNr
LCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9
IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBu
dWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0
dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09i
amVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBfLnByb3Bl
cnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0
KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAg
Ly8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5c
biAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rpb24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkp
IHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1l
bnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4g
b2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
e1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtl
eXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBr
ZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZpbmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9p
ZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBy
ZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9y
IGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFy
IGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qo
cHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRp
dmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAg
ICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAg
IHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8g
dm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxl
Y3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hv
dWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVk
OiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3Nl
Yy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJN
LTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtc
biAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCdsZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtl
ID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29s
bGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3Ro
ID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0
aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3Ju
ZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBI
YW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxs
XG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFj
aCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5n
dGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0
aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpb
aV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5r
ZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2Jq
KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4g
dGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAg
Xy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4g
ICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNB
cnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwg
b2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJy
ZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4
XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4g
ICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rp
b24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIp
IHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3IgZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRz
Lmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUs
IHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBr
ZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8
IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/
IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpb
Y3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVt
bztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29u
dGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0
KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4g
ICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXgg
PSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRp
YWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
IDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtc
biAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9i
aiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxu
ICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2Yg
dmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5m
b2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3Nv
Y2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJl
ZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRo
ZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRl
Y3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250
ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAg
a2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7
XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1c
biAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xu
ICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRl
c3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBm
dW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107
XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2Jq
LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFs
dWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1
cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hp
Y2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGlj
YXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJl
ZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBv
ZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxg
LlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkg
e1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMg
PSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtl
eXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0
aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0g
OiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtl
eSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxu
ICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRj
aGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5h
bnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9
IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2Jq
KSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7
XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAg
ICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlm
IChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1
ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0
aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxu
ICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5kIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9
IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwg
Z3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7
XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRl
eCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtc
biAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBp
dGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkg
e1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1
bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlv
bih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRo
b2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVl
LCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEg
Y29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNr
ID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5
KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNl
IGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmlu
ZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwg
YXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAg
fTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBm
aW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMg
YGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykg
e1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAv
LyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlv
bikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZh
ciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAg
dmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxs
KSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtc
biAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3Vs
dCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAg
fSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAg
Xy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1
dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVk
ID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAt
SW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29t
cHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVs
ZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0
ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9
IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09
IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBv
YmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAg
ICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAg
ICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxp
c3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xu
ICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmlu
aXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtc
biAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7
XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxl
Y3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRl
cyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3No
dWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNB
cnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNl
dC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5k
ID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxl
ZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2lu
ZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAq
Km4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBu
b3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUg
aW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxu
ICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxs
IHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVz
KG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAg
fVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4g
IH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1
Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICBy
ZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xu
ICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5k
ZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAg
ICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0g
bGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAo
YSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtc
biAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxu
ICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7
XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwi
Z3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikg
e1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2
YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtc
biAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIg
a2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1
bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07
XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24u
IFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBm
dW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAo
ZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5
KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xu
ICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24s
IHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5
b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVu
Y3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAg
fSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBh
IGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUg
dG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJp
b24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xu
ICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tl
eV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBm
cm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAg
ICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNs
aWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9i
aiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8udmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBm
dW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVy
biBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAg
fTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2Ug
ZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVuXG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3
aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0
aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0
ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtd
O1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikge1xuICAgICAgKHBy
ZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAg
IH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rp
b25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBv
ZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2
YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipn
dWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5m
aXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAg
IGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwg
Z3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJh
eS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBs
YXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFy
Z3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMg
aW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0g
ZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXks
IDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDog
bikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFz
c2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJy
YXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJh
eSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJl
dHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBN
YXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVy
eXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWls
YCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9i
amVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVl
cyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFy
cmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwg
fHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVl
cyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJl
dHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwg
aW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIg
ZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtc
biAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5k
ZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkg
JiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAg
IC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAg
ICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmlj
dCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRw
dXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hpbGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBv
dXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgh
c3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9
XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwg
ZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8u
ZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4o
YXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9m
IHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5c
biAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNl
KGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2Ug
YSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBh
bHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEg
ZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0g
Xy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7
XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVy
YXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNl
O1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4g
ICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7
IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQg
PSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlm
IChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3Vs
dC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlm
IChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7
XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2
YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2
YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAg
ICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250
YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0
aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVy
biBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQ
cm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBh
bGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rp
b24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBh
cmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgo
YXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4g
ICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAo
dmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghXy5jb250YWlu
cyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBh
cmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBh
IG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQg
aW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1
bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwg
dHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4g
ICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4g
IC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVs
ZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0g
ZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAv
LyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBh
bmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xu
ICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYg
Xy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFy
cmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xu
ICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGlu
dG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBc
biAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0t
IG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5c
biAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0g
e307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ld
XSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBd
XSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07
XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBm
aW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZp
bmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZh
ciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/
IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5n
dGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwg
aW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xu
ICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1s
aWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQ
cmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGlj
YXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8g
ZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNo
b3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2Vh
cmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNv
bnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2
YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVu
Z3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1h
dGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlk
XSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICBy
ZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhl
IGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRl
eEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAg
ICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRo
Lm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVu
Z3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3Ro
ICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYg
bGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAg
ICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAg
IGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2Uu
Y2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05hTik7XG4gICAgICAgIHJldHVybiBpZHggPj0g
MCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkg
OiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAg
ICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAg
ICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2Yg
dGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEg
aWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFy
cmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8v
IGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNy
ZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0
SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8v
IEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dy
ZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0
aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0
aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0
aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAg
c3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBz
dGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0g
c3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAg
ICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7
XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xu
ICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBh
cyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3Zp
ZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywg
Ym91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNh
bGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBw
bHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMu
cHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdz
KTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVy
biBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4g
b2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5
KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRg
IGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkg
e1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJu
IG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBp
ZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJl
IGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhl
Y3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5j
YWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAv
LyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBo
YXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNo
YW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFj
ZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUt
ZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJn
cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigp
IHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4g
ICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBh
cmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGls
ZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0
aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRo
aXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQg
YSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5n
IGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVs
IGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmpl
Y3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIg
aSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwga2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkg
dGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7
XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVu
dHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4g
ICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlv
biBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBo
YXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNh
Y2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8g
aGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhj
YWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5j
YWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1
bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2Fs
bHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVu
Y3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMs
IDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVu
Yy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMg
YSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBz
dGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBf
LCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2ls
bCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2lu
ZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4g
IC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2Ug
cGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0
aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBm
YWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8u
XG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFy
IGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFy
IHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIg
bGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09
PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1
bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250
ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFk
aW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2Fp
dCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3Mg
PSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2Fp
dCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1l
b3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2
aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtc
biAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVs
c2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAg
IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAg
cmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwg
dGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAg
Ly8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3Rv
cHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAg
aXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdl
LCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMs
IHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1l
c3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFy
IGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYg
bGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0g
bGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAg
aWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQs
IGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAg
ICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVz
dGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91
dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQp
O1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250
ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4g
ICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmly
c3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFs
bG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVy
LCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5c
biAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBfLnBhcnRp
YWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lv
biBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVk
aWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0
ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBh
IGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMs
IGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRo
YXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBh
cmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBm
dW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJn
c1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3Vs
dCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAg
ICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBl
eGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24o
dGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1l
cyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAg
ICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwg
b25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5c
biAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAg
IHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgICBt
ZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRp
bWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtc
blxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qg
b25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBm
b3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAy
KTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAv
LyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4u
LmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9
LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVBy
b3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAg
ICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0
b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBr
ZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xu
ICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAo
Xy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9i
alByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFy
IHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlmIChfLmhhcyhvYmosIHByb3ApICYmICFfLmNv
bnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51
bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xu
ICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8u
Y29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAg
fVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBv
d24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRp
dmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8u
aXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0
aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9i
aikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUg
PCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7
XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0
eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAg
ICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8
IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtc
biAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFu
IG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
dmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4g
ICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAg
ICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBw
bHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIElu
IGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMgYW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRl
cmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAg
IGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAg
ICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsg
aW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJl
c3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXks
IG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252
ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5w
YWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAg
dmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0g
PSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9
O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZh
bHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtc
biAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xu
ICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlv
biBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9k
c2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIg
bmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1
bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFt
ZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0
aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0
ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRo
IGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8g
KGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJl
bmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3Np
Z24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtl
eSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkg
PSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNi
KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xu
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwg
a2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5
IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9wZXJ0aWVz
LlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3QsIG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAo
b2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0
ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9w
dGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9
IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBm
dW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBv
YmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtl
eXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xu
ICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtl
eSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJs
YWNrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRl
cmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlz
ID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4g
ICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFf
LmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNr
KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBv
YmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3Np
Z25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5o
ZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25h
bCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVc
biAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBw
cm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYg
KHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xu
ICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9i
amVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChv
YmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgp
IDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3
aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJw
b3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5c
biAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRz
IHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikg
e1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBw
YWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24ob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBr
ZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVj
dCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9
IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4g
b2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4g
IC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAu
XG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRl
bnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRl
bnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8v
d2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChh
ID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJp
Y3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxu
ICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBV
bndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBh
Ll93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAg
Ly8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJp
bmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1
cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51
bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBh
cmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJl
Z0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAv
YS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAv
LyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUg
ZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBu
ZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAg
ICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZh
bGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2
YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4g
ICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVt
ZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIg
OiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tv
YmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRv
IG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4g
ICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQg
ZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5h
TmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1c
blxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4g
ICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0
eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdp
dGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0
YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAg
ICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAg
ICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBp
bnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1
bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikp
IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUg
ZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3Rp
bmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rp
b24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXpp
bmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2lu
Y2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxu
ICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4g
ICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4g
ICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlv
bmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5c
biAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09
PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBv
ZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVz
aChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxu
ICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBk
ZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3Ro
ID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNl
O1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVy
aWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVx
KGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAg
ICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAg
ICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xuICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7
XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1i
ZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBp
ZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGls
ZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAg
ICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBl
cShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAg
fVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBv
ZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgp
O1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlz
b24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5j
dGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2
ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2Jq
ZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5j
dGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChp
c0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwg
Xy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJu
IF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVl
IGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2
ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJh
eS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7
XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9
IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4g
dHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtc
blxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24s
IGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNo
KFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdS
ZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29i
amVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xuICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxs
YmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdo
ZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUu
XG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9
IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAg
IH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdv
cmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4gb2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEp
LCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9u
JyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8
IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBu
dW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5p
dGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUg
Z2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90
IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4g
Xy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29iajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xlYW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBy
ZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmop
ID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBl
cXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBv
YmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/
XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2
b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFu
IG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGlu
IG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9i
aiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwo
b2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0t
LS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUs
IHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4g
UmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25m
bGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAg
ICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBh
cm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFs
dWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRp
bmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNv
bnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307
XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9u
IGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5w
cm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVu
Y3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqW2tleV07XG4gICAg
fTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVy
IGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4g
IF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBf
LmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAg
IHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4g
YSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAg
IGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJu
IGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWlu
IGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtc
biAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7
XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4
IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdl
dCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5v
dyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07
XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2Nh
cGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+Jzog
JyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAn
YCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVzY2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1h
cCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdz
IHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0
aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJl
dHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcg
YSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsg
Xy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhw
KHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xu
ICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBu
dWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3Ry
aW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xu
ICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBf
LnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZh
bHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQg
d2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQu
XG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAg
ICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07
XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4g
ICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3Qp
IDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5p
cXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0
ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBm
dW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJl
dHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQs
IFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRo
ZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRl
bGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88
JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4v
ZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8g
V2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRv
IGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJl
Z2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxu
ICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0
byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcg
bGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAg
J1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAg
J24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAg
fTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztc
blxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxc
JyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxh
dGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVy
c2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMg
d2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50
ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBi
YWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNl
dHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3Mp
IHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBz
ZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVy
cyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBt
YXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291
cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAg
ICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wn
KSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVz
Y2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7
XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIs
IGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7
XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2Fw
ZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5c
biAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIg
KyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0g
ZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0o
XCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVs
c2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0
ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRo
ZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJl
dHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8g
SWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2Nh
bCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8
fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuXG4gICAgc291cmNlID0gXCJ2YXIgX190LF9f
cD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlv
bigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSAr
ICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBG
dW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0g
Y2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAg
ICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4g
cmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhl
IGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAg
ICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0
ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9
JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIg
ZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAg
Xy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAg
ICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxu
ICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2Fs
bGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8v
IGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9u
cyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMg
bWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWlu
aW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFu
Y2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6
IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUg
VW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVh
Y2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBf
W25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigp
IHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBw
bHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFw
cGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBv
ZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1p
eGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdy
YXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhv
ZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigp
IHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9i
aiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAn
c3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVy
biByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vz
c29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsnY29uY2F0Jywg
J2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJh
eVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAg
ICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVu
dHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3
cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAgXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlv
bigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVu
d3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25z
XG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8u
cHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlwZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1
ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAn
JyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5z
IGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0
IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2VtYW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhv
dWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9yIEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUg
YW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVyc1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBi
ZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBw
b3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGluIGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90
IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQgcmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQg
Z2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAvLyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2Fs
bGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09
ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtd
LCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhp
cykpO1xuIgorbW9kdWxlLmV4cG9ydHMgPSAiLy8gICAgIFVuZGVyc2NvcmUuanMgMS44LjNcbi8v
ICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTUgSmVyZW15
IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVk
aXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBc
biAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBg
d2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuXG4gIHZh
ciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9g
IHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRlcnNjb3JlID0gcm9vdC5fO1xuXG4gIC8vIFNh
dmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZh
ciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5
cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sg
cmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5c
biAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGlj
ZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSxcbiAgICB0b1N0cmluZyAgICAgICAgID0g
T2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3duUHJvcGVydHkgICA9IE9ialByb3RvLmhhc093
blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBp
bXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVy
ZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAgICAgID0gQXJyYXkuaXNBcnJheSxcbiAgICBu
YXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5cyxcbiAgICBuYXRpdmVCaW5kICAgICAgICAg
PSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVDcmVhdGUgICAgICAgPSBPYmplY3QuY3JlYXRl
O1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlw
ZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5jdGlvbigpe307XG5cbiAgLy8gQ3JlYXRlIGEg
c2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4g
IHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVy
biBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtc
biAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJz
Y29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRp
YmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClgIEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhl
IGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0LlxuICBpZiAodHlwZW9mIGV4cG9y
dHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmlu
ZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMg
PSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9
IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjguMyc7
XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9y
IGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNr
LCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5j
dGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291
bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0
Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0
dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwg
dmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBv
dGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBvdGhlcik7
XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBj
b2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGlu
ZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlv
bihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVy
biBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlv
bik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1
cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8g
QSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2Fu
IGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJu
aW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyXG4gIC8vIGlkZW50aXR5LCBhbiBhcmJp
dHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nv
ci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAg
aWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlkZW50aXR5O1xuICAgIGlmIChfLmlzRnVuY3Rp
b24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xu
ICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIF8ubWF0Y2hlcih2YWx1ZSk7XG4gICAg
cmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9O1xuICBfLml0ZXJhdGVlID0gZnVuY3Rpb24o
dmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2IodmFsdWUsIGNvbnRleHQsIEluZmluaXR5
KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWdu
ZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywg
dW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBs
ZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09
IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxu
ICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNvdXJjZSksXG4gICAgICAgICAgICBsID0ga2V5
cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAg
ICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKCF1bmRlZmluZWRPbmx5IHx8IG9i
altrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAg
ICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5h
bCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBh
bm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSkge1xuICAgIGlm
ICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1cm4ge307XG4gICAgaWYgKG5hdGl2ZUNyZWF0
ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIEN0b3IucHJvdG90eXBlID0g
cHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBuZXcgQ3RvcjtcbiAgICBDdG9yLnByb3RvdHlw
ZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgcHJvcGVydHkgPSBm
dW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4g
b2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEhl
bHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVj
dGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0
XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2
LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDgg
SklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZhciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBv
dygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3RoID0gcHJvcGVydHkoJ2xlbmd0aCcpO1xuICB2
YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGxlbmd0aCA9
IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gdHlwZW9mIGxlbmd0aCA9PSAnbnVt
YmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGggPD0gTUFYX0FSUkFZX0lOREVYO1xuICB9O1xu
XG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5c
biAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFjaGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9y
RWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVjdHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlr
ZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFycmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBk
ZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29u
dGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4g
ICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9y
IChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAg
IGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAg
dmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMu
bGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1d
LCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xu
XG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFj
aCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2
YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5n
dGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0
aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xu
ICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAg
IHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBv
YmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBy
ZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVmdCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3Jl
YXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGltaXplZCBpdGVyYXRvciBmdW5jdGlvbiBhcyB1
c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8gaW4gdGhlIG1haW4gZnVuY3Rpb24gd2lsbCBk
ZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAgIGZ1bmN0aW9uIGl0ZXJhdG9yKG9iaiwgaXRl
cmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpIHtcbiAgICAgIGZvciAoOyBpbmRleCA+
PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJl
bnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJh
dGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAg
ICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJh
dGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0
ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBf
LmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAg
ICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIC8vIERldGVy
bWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25lIGlzIHByb3ZpZGVkLlxuICAgICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAgIG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5k
ZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBkaXI7XG4gICAgICB9XG4gICAgICByZXR1
cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCk7XG4g
ICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBm
cm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAg
Xy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8g
VGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBm
b2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxu
ICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFs
aWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5O1xuICAgIGlmIChpc0FycmF5TGlrZShv
YmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRleChvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7
XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8uZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1
cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBw
YXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIg
PSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFy
IHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xu
ICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYg
KHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAg
IH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVs
ZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rp
b24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBf
Lm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5l
IHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFs
aWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGlj
YXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtc
biAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAg
ICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMg
PyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRL
ZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0
cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0
aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxu
ICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4g
ICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFp
c0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8
fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGlu
ZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9i
aikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8g
RGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1
c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxu
ICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRl
bSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0g
Xy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBn
dWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJv
bUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVu
dHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9u
KG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7
XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlvbihtZXRob2QpO1xuICAgIHJldHVybiBfLm1h
cChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzRnVuYyA/IG1ldGhv
ZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gZnVuYyA6IGZ1
bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNl
IHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVy
dHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChv
YmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBv
ZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xu
ICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0g
ZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hl
cihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24g
dXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFp
bmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlv
bihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykp
O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJh
c2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmlu
aXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwg
JiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBf
LnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7
IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYg
KHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1c
biAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtc
biAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAg
ICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAm
JiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAg
ICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0g
ZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rp
b24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwg
bGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBp
ZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJh
eUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0g
b2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQg
PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBp
bmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21w
dXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJl
c3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAg
ICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBT
aHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAv
LyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlz
aGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICB2
YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2YXIgc2h1ZmZsZWQgPSBBcnJheShsZW5ndGgp
O1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFuZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4Kysp
IHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBpbmRleCk7XG4gICAgICBpZiAocmFuZCAhPT0g
aW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZmbGVkW3JhbmRdO1xuICAgICAgc2h1ZmZsZWRb
cmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH07XG5c
biAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24uXG4gIC8v
IElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1l
bnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3Jr
IHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVuY3Rpb24ob2JqLCBuLCBndWFyZCkge1xuICAg
IGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAgICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkg
b2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0
aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8uc2h1ZmZsZShvYmopLnNsaWNlKDAsIE1hdGgu
bWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBj
cml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG4gIF8uc29ydEJ5ID0gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNv
bnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGlu
ZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAg
ICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRl
eCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xu
ICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJp
YTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lk
IDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4g
LTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAg
IH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZv
ciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG4gIHZhciBncm91cCA9IGZ1bmN0
aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRl
eHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7
XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAg
IGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBy
ZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBi
eSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdy
b3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdy
b3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5o
YXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5
XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBi
eSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5
b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4
QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5
XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0
aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3Ry
aW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhl
XG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2
YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsg
ZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFs
LCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShv
YmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSBy
ZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtcbiAgICByZXR1cm4gXy52YWx1ZXMob2JqKTtc
biAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3Qu
XG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJu
IDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9i
aikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJh
eXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGlj
YXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGlj
YXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7
XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgcGFzcyA9
IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2Jq
KSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBrZXksIG9iaikgPyBwYXNzIDogZmFpbCkucHVz
aCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtwYXNzLCBmYWlsXTtcbiAgfTtcblxuICAv
LyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBm
aXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBm
aXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBg
dGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBg
Xy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4s
IGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYg
KG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICAgIHJldHVybiBfLmluaXRp
YWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0
aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBv
blxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBh
bGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxu
ICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xp
Y2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8
fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4gIC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9m
IGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFs
dWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7
XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVs
bCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBf
LnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIG4pKTtcbiAgfTtcblxuICAv
LyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFs
aWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4gIC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRo
ZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRo
ZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9w
ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJy
YXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBh
bGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFy
cmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBfLmlkZW50aXR5KTtcbiAgfTtcblxu
ICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVu
Y3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwg
c3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQgPSBbXSwgaWR4ID0gMDtcbiAgICBmb3IgKHZh
ciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJy
YXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZhbHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVl
KSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1l
bnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxsb3cpIHZhbHVlID0gZmxhdHRlbih2YWx1ZSwg
c2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7
XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVuO1xuICAgICAgICB3aGlsZSAoaiA8IGxlbikg
e1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgICB9XG4gICAg
ICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xu
ICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8vIEZsYXR0ZW4g
b3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciBqdXN0IG9u
ZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rpb24oYXJyYXksIHNoYWxsb3cpIHtcbiAgICBy
ZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywgZmFsc2UpO1xuICB9O1xuXG4gIC8vIFJldHVy
biBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lm
aWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVy
biBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIH07XG5c
biAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0
aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRp
b24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuICAvLyBBbGlhc2VkIGFzIGB1bmlxdWVg
LlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0aW9uKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0
ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNCb29sZWFuKGlzU29ydGVkKSkge1xuICAgICAg
Y29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRlcmF0ZWUgPSBpc1NvcnRlZDtcbiAgICAgIGlz
U29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFy
IHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5
KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAg
ICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZh
bHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBj
b21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4g
ICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhzZWVu
LCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAg
IHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghXy5jb250
YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAg
ICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBh
cnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20g
YWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLnVuaW9uID0gZnVuY3Rpb24o
KSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSkpO1xu
ICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNo
YXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNl
Y3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIg
YXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0g
PSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVl
O1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAg
aWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAg
ICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBv
bmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxl
bWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5k
aWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdCA9IGZsYXR0ZW4oYXJn
dW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0
aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5jb250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAg
fSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5n
bGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhl
ci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXy51bnppcChhcmd1bWVudHMp
O1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2YgXy56aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJy
YXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNo
YXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5n
dGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2
YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFy
cmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ29u
dmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBg
W2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUg
c2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3Bv
bmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAg
IHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3Ro
KGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAg
cmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVz
dWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJu
IHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBm
aW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZVBy
ZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJl
ZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRl
eHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5k
ZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAm
JiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUo
YXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAg
ICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4
IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRJ
bmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXgg
PSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRv
ciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAv
LyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBV
c2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2Jq
LCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRl
eHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAs
IGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAg
ICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVy
YXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7
XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9u
IHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zXG4gIGZ1bmN0
aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJlZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtc
biAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAw
LCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251
bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAgICAgICAgIGkgPSBpZHggPj0g
MCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4g
ICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkg
OiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZElu
ZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXks
IGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xu
ICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGlj
YXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAg
cmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHgg
PSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4
ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtc
biAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5
LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5Llxu
ICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFz
cyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAg
Xy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoMSwgXy5maW5kSW5kZXgsIF8uc29ydGVkSW5k
ZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoLTEsIF8uZmluZExhc3RJ
bmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFy
aXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBg
cmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXSho
dHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBf
LnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBu
dWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9
XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRo
LmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXko
bGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0
YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICBy
ZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0
ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3JcbiAgLy8gb3IgYSBub3JtYWwgZnVuY3Rpb24g
d2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4gIHZhciBleGVjdXRlQm91bmQgPSBmdW5jdGlv
bihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7
XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5zdGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4g
c291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVh
dGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFw
cGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1
bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91
bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4g
IC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBg
RnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxhYmxlLlxuICBfLmJpbmQgPSBmdW5jdGlvbihm
dW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2ZUJpbmQgJiYgZnVuYy5iaW5kID09PSBuYXRp
dmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBseShmdW5jLCBzbGljZS5jYWxsKGFyZ3VtZW50
cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9y
KCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYXJncyA9IHNs
aWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAg
ICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3Mu
Y29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5k
O1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEg
dmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxs
ZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xu
ICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1l
bnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFydGlhbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAg
ICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBib3Vu
ZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRB
cmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJn
c1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlvbisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICAg
IH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFyZ3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChh
cmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBi
b3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07
XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2Jq
ZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8vIGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJl
IGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZp
bmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLCBrZXk7XG4gICAgaWYg
KGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVu
Y3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAg
IGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9ialtrZXldID0gXy5iaW5kKG9ialtrZXldLCBv
YmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhw
ZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1
bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7
XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAn
JyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAg
ICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtc
biAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJuIG1lbW9pemU7XG4gIH07XG5cbiAg
Ly8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRz
LCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4g
IF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5j
YWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAg
ICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0sIHdhaXQpO1xuICB9O1xu
XG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hlZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUg
Y3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBjbGVhcmVkLlxuICBfLmRlZmVyID0gXy5wYXJ0
aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hl
biBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJp
bmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rp
b24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBt
b3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlr
ZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAv
LyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGlu
ZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIG9wdGlv
bnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0g
bnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9
IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRp
b25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVs
bDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAo
IXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBmdW5j
dGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5vdygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAm
JiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IG5vdztcbiAgICAgIHZhciBy
ZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlz
O1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCBy
ZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xl
YXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9
XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNv
bnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVs
bDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFs
c2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4g
ICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJu
cyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2Vk
LCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxl
ZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJ
ZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAv
LyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0g
ZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIGFyZ3Ms
IGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24o
KSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkgLSB0aW1lc3RhbXA7XG5cbiAgICAgIGlmIChs
YXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQo
bGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBu
dWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMu
YXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0g
YXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1
bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRz
O1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtcbiAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRp
YXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91
dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICByZXN1bHQgPSBm
dW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7
XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNl
Y29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJl
Zm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdp
bmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAg
cmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEg
bmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9
IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJl
dHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxu
ICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0
IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0
aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAg
ICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZh
ciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hp
bGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1
cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQg
d2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0
ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAg
ICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBh
cmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykg
dGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAg
dmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAw
KSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9
XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztc
biAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhl
Y3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2Fs
bCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRp
YWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVjdCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0t
LS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkg
YGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0
b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBu
b25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmlu
ZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093
blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAgZnVuY3Rpb24gY29sbGVjdE5vbkVu
dW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIgbm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQ
cm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAg
IHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnBy
b3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwg
Y2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKF8uaGFzKG9iaiwg
cHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIGtleXMucHVzaChwcm9wKTtcblxuICAg
IHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAgIHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNb
bm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90
b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkge1xuICAgICAgICBrZXlzLnB1c2go
cHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9m
IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2Ny
aXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtl
eXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3Ig
KHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAg
ICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJv
cHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBh
bGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC5cbiAgXy5hbGxLZXlzID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIg
a2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICAg
IC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9w
cyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRo
ZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgXy52YWx1ZXMgPSBmdW5jdGlv
bihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBr
ZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tp
XV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUg
cmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBv
YmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5tYXAgaXQgcmV0dXJucyBhbiBvYmplY3RcbiAg
Xy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRl
cmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAgXy5rZXlzKG9i
aiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0cyA9
IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGN1cnJlbnRLZXkgPSBrZXlzW2luZGV4
XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5
XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICB9
O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1g
IHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtl
eXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpba2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1
cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4g
b2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAg
fVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qg
b2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlh
c2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9ucyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAg
ICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxu
ICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2Jq
ZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8u
ZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzKTtcblxuICAvLyBBc3NpZ25zIGEgZ2l2
ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGllcyBpbiB0aGUgcGFzc2VkLWluIG9i
amVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2
YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRl
bmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJu
cyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0
XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAg
cHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAocHJlZGlj
YXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gICAgfVxuICB9O1xuXG4gIC8v
IFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93bGlz
dGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1bmN0aW9uKG9iamVjdCwgb2l0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBvYmogPSBvYmplY3QsIGl0ZXJhdGVlLCBr
ZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoXy5pc0Z1
bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtleXMgPSBfLmFsbEtleXMob2JqKTtcbiAgICAg
IGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7
XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSk7XG4gICAg
ICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikgeyByZXR1cm4ga2V5IGluIG9i
ajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtl
eSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVy
YXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qg
d2l0aG91dCB0aGUgYmxvY2tsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5vbWl0ID0gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUp
KSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRlKGl0ZXJhdGVlKTtcbiAgICB9IGVsc2Uge1xu
ICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAx
KSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAg
ICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywga2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAg
IHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRmls
bCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgXy5kZWZhdWx0
cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywgdHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlcyBhbiBv
YmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAv
LyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJl
IGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9iamVjdC5cbiAgXy5jcmVhdGUgPSBmdW5jdGlv
bihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90
eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBs
aWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25lID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYg
KCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIF8uaXNBcnJheShvYmop
ID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwgb2JqKTtcbiAgfTtcblxuICAvLyBJbnZva2Vz
IGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5kIHRoZW4gcmV0dXJucyBvYmouXG4gIC8vIFRo
ZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0
aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJt
ZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi5cbiAgXy50YXAgPSBmdW5jdGlvbihvYmos
IGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xu
ICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9m
IGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0Y2ggPSBmdW5jdGlvbihvYmplY3QsIGF0dHJz
KSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0cnMpLCBsZW5ndGggPSBrZXlzLmxlbmd0aDtc
biAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBP
YmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5
XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVl
O1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24g
Zm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVuY3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2sp
IHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0
aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJv
cG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdh
bCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtc
biAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBudWxsID09
IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBhID09
PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3Rh
bmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5f
d3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFz
c05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5n
LmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAg
Ly8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29s
ZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0n
OlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29u
IChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5n
XSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0
IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVx
dWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9
PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5h
TmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0
KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJu
ICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVk
IGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAv
ICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxu
ICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBh
bmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFy
ZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3Rl
IHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAg
ICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9
PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmpl
Y3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9
ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAg
IC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVu
dCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJh
bWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25z
dHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0
b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4g
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0
cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxu
ICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0
aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJv
bSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAg
IC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdz
IGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlz
IGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJT
dGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAo
bGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVy
c2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3Rl
ZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0
YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3Qg
dG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xu
ICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3Rz
IGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJh
eSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3Nhcnku
XG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3Ro
KSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25v
cmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4g
ICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0
dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUg
b2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGgg
PSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWlu
IHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVh
bGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxz
ZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFj
aCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShfLmhh
cyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4g
ZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZy
b20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAg
ICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSBh
IGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIF8u
aXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gZXEoYSwgYik7XG4gIH07XG5c
biAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFu
IFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMuXG4gIF8u
aXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRy
dWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikgJiYgKF8uaXNBcnJheShvYmopIHx8IF8uaXNT
dHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9iaikpKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0g
MDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICB9O1xuXG4gIC8vIElz
IGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbiAgXy5pc0VsZW1lbnQgPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gIH07XG5c
biAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT9cbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1
J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5pc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBm
dW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVj
dCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xu
ICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2Jq
O1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYm
ICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21lIGlzVHlwZSBtZXRob2RzOiBpc0FyZ3VtZW50
cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0RhdGUsIGlzUmVnRXhwLCBpc0Vy
cm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJl
cicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvciddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1sn
aXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0b1N0cmluZy5jYWxs
KG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xuICAgIH07XG4gIH0pO1xuXG4gIC8v
IERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhl
bSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJn
dW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBf
LmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gXy5oYXMob2JqLCAn
Y2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBh
cHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8v
IElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkgOCAoIzE5MjkpLlxuICBpZiAodHlwZW9mIC8u
LyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0gJ29iamVjdCcpIHtcbiAgICBf
LmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09
ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2Jq
ZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xu
XG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIg
d2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5cbiAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9PSArb2JqO1xuICB9O1xuXG4g
IC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0
cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbiAgfTtcblxuICAvLyBJcyBh
IGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4gIF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlh
YmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJl
dHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxuICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3Ig
Y2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5XG4gIC8v
IG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHByb3RvdHlwZSkuXG4gIF8uaGFz
ID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3du
UHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNc
biAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9D
b25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHBy
ZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVj
dC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNV
bmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50
aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkg
PSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVk
aWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVy
c2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5j
dGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9
IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5ID0gcHJvcGVydHk7XG5cbiAgLy8gR2VuZXJh
dGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHBy
b3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2Jq
ID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBv
Ympba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNo
ZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZh
bHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5tYXRjaGVzID0gZnVuY3Rpb24oYXR0cnMpIHtc
biAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9
O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxuICBfLnRpbWVzID0gZnVuY3Rp
b24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1h
eCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAx
KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShp
KTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVn
ZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVzaXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlv
bihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xu
ICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5y
YW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH07XG5cbiAgLy8gQSAocG9zc2libHkgZmFz
dGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICBf
Lm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdl
dFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGlu
Zy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0
OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcm
I3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5p
bnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVz
Y2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVF
c2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRj
aCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZv
ciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWRcbiAgICB2YXIgc291
cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2luKCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RS
ZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChz
b3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5n
ID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RS
ZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBl
cikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgXy5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVz
Y2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxu
ICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0
aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBgb2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndp
c2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBm
YWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdm9pZCAwIDogb2Jq
ZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUg
PSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1
ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtcblxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBp
bnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAv
LyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAg
Xy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVy
ICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG4gIH07XG5cbiAg
Ly8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0
ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2Ug
YWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2
YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0o
W1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAgICAgIDogLzwlLShbXFxzXFxTXSs/KSU+L2dc
biAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91
IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24g
b3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBu
b3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hh
cmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBh
XG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogICAg
ICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxcXCcsXG4gICAgJ1xccic6ICAgICAncicsXG4g
ICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5
JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVyID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIw
Mjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAg
ICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlw
dCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlv
bi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRl
cnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVv
dGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25s
eSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVu
Y3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAm
JiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8u
ZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29t
YmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRp
b24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8
fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRj
aCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxu
ICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBs
YXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAg
dmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJl
cGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1
YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQp
LnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1h
dGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2FwZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCIn
K1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxu
J1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0g
XCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidc
IjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJztc
XG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRv
YmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2Zm
ZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxu
XCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEg
dmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJj
ZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2Ug
PSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBc
InByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xu
ICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHRyeSB7XG4gICAgICB2YXIg
cmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNv
dXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAg
ICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtc
biAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAg
Ly8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNv
bXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmon
O1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4n
ICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFk
ZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2Nv
cmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNl
ID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3Rh
bmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5k
ZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2Jq
ZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBh
bHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdy
YXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciByZXN1bHQgPSBm
dW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8o
b2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4gIC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVu
Y3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5taXhpbiA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihuYW1lKSB7XG4gICAg
ICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07XG4gICAgICBfLnByb3RvdHlwZVtuYW1l
XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAg
ICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0
KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxu
ICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBv
YmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8gQWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0
aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScs
ICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtc
biAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1l
XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBt
ZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQn
IHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBd
O1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8v
IEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVh
Y2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFy
IG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5j
dGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dy
YXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSBy
ZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuICBfLnByb3RvdHlwZS52
YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4g
IC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBmb3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5n
aW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBhcml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lm
aWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVPZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8u
cHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7
XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBBTUQgcmVnaXN0
cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEFNRCBsb2Fk
ZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNlIG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9k
dWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAvLyBwcmFjdGljZSBmb3IgQU1EIHJlZ2lzdHJh
dGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVyc2NvcmUgcmVnaXN0ZXJzXG4gIC8vIGFzIGEg
bmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1ZXJ5LCBpdCBpcyBhIGJhc2UgbGlicmFyeSB0
aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRvIGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0
eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAvLyBhbiBBTUQgbG9hZCByZXF1ZXN0LiBUaG9z
ZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIGFuXG4gIC8vIGFub255bW91cyBk
ZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIGxvYWRlciByZXF1ZXN0LlxuICBpZiAodHlw
ZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCd1
bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4g
IH1cbn0uY2FsbCh0aGlzKSk7XG4iCiAKIC8qKiovIH0pLAogLyogNDIyICovCkBAIC0xNDkwMjgs
NyArMTQ5MDI4LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlvbiBj
b21iaW5lKGRlc3QsIHNyYykgewogICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICBpZiAoXy5oYXMoSlNISU5ULmJsYWNrbGlzdCwgbmFtZSkpIHJldHVy
bjsKKyAgICAgIGlmIChfLmhhcyhKU0hJTlQuYmxvY2tsaXN0LCBuYW1lKSkgcmV0dXJuOwogICAg
ICAgZGVzdFtuYW1lXSA9IHNyY1tuYW1lXTsKICAgICB9KTsKICAgfQpAQCAtMTQ5MzEzLDcgKzE0
OTMxMyw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAga2V5ID0ga2V5
LnNsaWNlKDEpOwogICAgICAgICAgIHZhbCA9IGZhbHNlOwogCi0gICAgICAgICAgSlNISU5ULmJs
YWNrbGlzdFtrZXldID0ga2V5OworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rba2V5XSA9IGtl
eTsKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtrZXldOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgIHByZWRlZltrZXldID0gKHZhbCA9PT0gInRydWUiKTsKQEAgLTE1NDEyMCw3ICsx
NTQxMjAsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogICAgICAgSlNISU5ULmVycm9y
cyA9IFtdOwogICAgICAgSlNISU5ULnVuZGVmcyA9IFtdOwogICAgICAgSlNISU5ULmludGVybmFs
cyA9IFtdOwotICAgICAgSlNISU5ULmJsYWNrbGlzdCA9IHt9OworICAgICAgSlNISU5ULmJsb2Nr
bGlzdCA9IHt9OwogICAgICAgSlNISU5ULnNjb3BlID0gIihtYWluKSI7CiAgICAgfQogCkBAIC0x
NTQxNDksNyArMTU0MTQ5LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKIAogICAgICAg
ICBpZiAoaXRlbVswXSA9PT0gIi0iKSB7CiAgICAgICAgICAgc2xpY2UgPSBpdGVtLnNsaWNlKDEp
OwotICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rbc2xpY2VdID0gc2xpY2U7CisgICAgICAgICAg
SlNISU5ULmJsb2NrbGlzdFtzbGljZV0gPSBzbGljZTsKICAgICAgICAgICAvLyByZW1vdmUgZnJv
bSBwcmVkZWZpbmVkIGlmIHRoZXJlCiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRbc2xpY2Vd
OwogICAgICAgICB9IGVsc2UgewpAQCAtMTk1ODI5LDcgKzE5NTgyOSw3IEBAIGZ1bmN0aW9uIElt
cG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSAKIAl2YXIgcmVnZXhTaW5nbGVFc2NhcGUgPSAv
WyInXFxcYlxmXG5cclx0XS87CiAKIAl2YXIgcmVnZXhEaWdpdCA9IC9bMC05XS87Ci0JdmFyIHJl
Z2V4V2hpdGVsaXN0ID0gL1sgISMtJlwoLVxbXF0tfl0vOworCXZhciByZWdleEFsbG93bGlzdCA9
IC9bICEjLSZcKC1cW1xdLX5dLzsKIAogCXZhciBqc2VzYyA9IGZ1bmN0aW9uKGFyZ3VtZW50LCBv
cHRpb25zKSB7CiAJCS8vIEhhbmRsZSBvcHRpb25zCkBAIC0xOTYwMDQsNyArMTk2MDA0LDcgQEAg
ZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUpIAogCQkJCX0KIAkJCX0KIAkJ
CWlmICghb3B0aW9ucy5lc2NhcGVFdmVyeXRoaW5nKSB7Ci0JCQkJaWYgKHJlZ2V4V2hpdGVsaXN0
LnRlc3QoY2hhcmFjdGVyKSkgeworCQkJCWlmIChyZWdleEFsbG93bGlzdC50ZXN0KGNoYXJhY3Rl
cikpIHsKIAkJCQkJLy8gSXTigJlzIGEgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciB0aGF0IGlz
IG5vdCBgImAsIGAnYCBvciBgXGAsCiAJCQkJCS8vIHNvIGRvbuKAmXQgZXNjYXBlIGl0LgogCQkJ
CQlyZXN1bHQgKz0gY2hhcmFjdGVyOwpAQCAtMjA5MzM0LDcgKzIwOTMzNCw3IEBAIHZhciBfZ2V0
SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXUKIAogZXhwb3J0cy5jYWxsID0gY2FsbDsK
IGV4cG9ydHMuX2NhbGwgPSBfY2FsbDsKLWV4cG9ydHMuaXNCbGFja2xpc3RlZCA9IGlzQmxhY2ts
aXN0ZWQ7CitleHBvcnRzLmlzQmxvY2tsaXN0ZWQgPSBpc0Jsb2NrbGlzdGVkOwogZXhwb3J0cy52
aXNpdCA9IHZpc2l0OwogZXhwb3J0cy5za2lwID0gc2tpcDsKIGV4cG9ydHMuc2tpcEtleSA9IHNr
aXBLZXk7CkBAIC0yMDk0MTAsOSArMjA5NDEwLDkgQEAgZnVuY3Rpb24gX2NhbGwoZm5zKSB7CiAg
IHJldHVybiBmYWxzZTsKIH0KIAotZnVuY3Rpb24gaXNCbGFja2xpc3RlZCgpIHsKLSAgdmFyIGJs
YWNrbGlzdCA9IHRoaXMub3B0cy5ibGFja2xpc3Q7Ci0gIHJldHVybiBibGFja2xpc3QgJiYgYmxh
Y2tsaXN0LmluZGV4T2YodGhpcy5ub2RlLnR5cGUpID4gLTE7CitmdW5jdGlvbiBpc0Jsb2NrbGlz
dGVkKCkgeworICB2YXIgYmxvY2tsaXN0ID0gdGhpcy5vcHRzLmJsb2NrbGlzdDsKKyAgcmV0dXJu
IGJsb2NrbGlzdCAmJiBibG9ja2xpc3QuaW5kZXhPZih0aGlzLm5vZGUudHlwZSkgPiAtMTsKIH0K
IAogZnVuY3Rpb24gdmlzaXQoKSB7CkBAIC0yMDk0MjAsNyArMjA5NDIwLDcgQEAgZnVuY3Rpb24g
dmlzaXQoKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKHRoaXMuaXNCbGFja2xp
c3RlZCgpKSB7CisgIGlmICh0aGlzLmlzQmxvY2tsaXN0ZWQoKSkgewogICAgIHJldHVybiBmYWxz
ZTsKICAgfQogCkBAIC0yMTEwNzgsNyArMjExMDc4LDcgQEAgZnVuY3Rpb24gc2hvdWxkSWdub3Jl
S2V5KGtleSkgewogCiAgIGlmIChrZXkgPT09ICJlbnRlciIgfHwga2V5ID09PSAiZXhpdCIgfHwg
a2V5ID09PSAic2hvdWxkU2tpcCIpIHJldHVybiB0cnVlOwogCi0gIGlmIChrZXkgPT09ICJibGFj
a2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJu
IHRydWU7CisgIGlmIChrZXkgPT09ICJibG9ja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8
IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CiAKICAgcmV0dXJuIGZhbHNlOwogfQpA
QCAtMjIyNzY4LDcgKzIyMjc2OCw3IEBAIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJk
KG9iaikgeyAKIAogY29uc3QgbGlmZWN5Y2xlTWV0aG9kcyA9IG5ldyBTZXQoWyJjb21wb25lbnRX
aWxsVW5tb3VudCIsICJjb21wb25lbnREaWRNb3VudCIsICJjb21wb25lbnRXaWxsTW91bnQiLCAi
Y29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVcGRhdGUiLCAiY29tcG9uZW50RGlk
Q2F0Y2giLCAiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyJdKTsKIAotY29uc3Qgd2hpdGVsaXN0
ZWRQcm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKK2Nv
bnN0IGFsbG93bGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250ZXh0Iiwg
InJlZnMiXSk7CiAKIGZ1bmN0aW9uIGdldEluaXRpYWxQcm9wcyhyZWFsbSwgY29tcG9uZW50VHlw
ZSkgewogICBsZXQgcHJvcHNOYW1lID0gbnVsbDsKQEAgLTIyMjkzOCw3ICsyMjI5MzgsNyBAQCBm
dW5jdGlvbiBldmFsdWF0ZUNsYXNzQ29uc3RydWN0b3IocmVhbG0sCiAgICAgbGV0IGluc3RhbmNl
ID0gKDAsIF9pbmRleDIuQ29uc3RydWN0KShyZWFsbSwgY29uc3RydWN0b3JGdW5jLCBbcHJvcHMs
IGNvbnRleHRdKTsKICAgICAoMCwgX2ludmFyaWFudDIuZGVmYXVsdCkoaW5zdGFuY2UgaW5zdGFu
Y2VvZiBfaW5kZXguT2JqZWN0VmFsdWUpOwogICAgIGZvciAobGV0IFtwcm9wZXJ0eU5hbWVdIG9m
IGluc3RhbmNlLnByb3BlcnRpZXMpIHsKLSAgICAgIGlmICghd2hpdGVsaXN0ZWRQcm9wZXJ0aWVz
Lmhhcyhwcm9wZXJ0eU5hbWUpKSB7CisgICAgICBpZiAoIWFsbG93bGlzdGVkUHJvcGVydGllcy5o
YXMocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpbnN0YW5jZVByb3BlcnRpZXMuYWRkKHByb3Bl
cnR5TmFtZSk7CiAgICAgICB9CiAgICAgfQpJbmRleDogV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9y
Zy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI3MTA2OCkKKysrIFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMTItMjMgIEJldGgg
RGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBub24taW5jbHVzaXZl
IGxhbmd1YWdlIGZyb20gSmV0U3RyZWFtIDIuMAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBKZXRTdHJlYW0yLjAvY29kZS1sb2FkL2luc3BlY3Rvci1w
YXlsb2FkLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUuV2ViSW5zcGVjdG9yLlJl
c291cmNlLldlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRX
aXRoU3Vic3RpdHV0aW9uU3RyaW5nLnN0eWxlRm9ybWF0dGVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5ET01Ob2RlLldlYkluc3BlY3Rvci5SZXNvdXJjZS5XZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZy5pc0FsbG93
bGlzdGVkUHJvcGVydHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUuV2ViSW5zcGVj
dG9yLlJlc291cmNlLldlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9m
b3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLmlzV2hpdGVsaXN0ZWRQcm9wZXJ0eSk6IERlbGV0
ZWQuCisgICAgICAgICogSmV0U3RyZWFtMi4wL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2Vy
LmpzOgorICAgICAgICAqIEpldFN0cmVhbTIuMC93ZWItdG9vbGluZy1iZW5jaG1hcmsvY2xpLmpz
OgorCiAyMDE5LTA5LTE4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CiAKICAgICAgICAgW1dlYkdQVV0gVXBkYXRlIGRlbW9zIHRvIHdvcmsgb24gU1RQIDkyCkluZGV4
OiBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIuMC9jb2RlLWxvYWQvaW5zcGVj
dG9yLXBheWxvYWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9K
ZXRTdHJlYW0yLjAvY29kZS1sb2FkL2luc3BlY3Rvci1wYXlsb2FkLmpzCShyZXZpc2lvbiAyNzEw
NjcpCisrKyBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIuMC9jb2RlLWxvYWQv
aW5zcGVjdG9yLXBheWxvYWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTU4MDksOSArNTgwOSw5IEBA
IGZ1bmN0aW9uIGZsb2F0Rm9ybWF0dGVyKG9iaix0b2tlbikKIGZ1bmN0aW9uIGludGVnZXJGb3Jt
YXR0ZXIob2JqKQoge2xldCB2YWx1ZT10eXBlb2Ygb2JqLnZhbHVlPT09Im51bWJlciI/b2JqLnZh
bHVlOm9iai5kZXNjcmlwdGlvbjtyZXR1cm4gU3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVycy5kKHZh
bHVlKTt9CiB2YXIgY3VycmVudFN0eWxlPW51bGw7ZnVuY3Rpb24gc3R5bGVGb3JtYXR0ZXIob2Jq
KQote2N1cnJlbnRTdHlsZT17fTt2YXIgYnVmZmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTtidWZmZXIuc2V0QXR0cmlidXRlKCJzdHlsZSIsb2JqLmRlc2NyaXB0aW9uKTtmb3IodmFy
IGk9MDtpPGJ1ZmZlci5zdHlsZS5sZW5ndGg7aSsrKXt2YXIgcHJvcGVydHk9YnVmZmVyLnN0eWxl
W2ldO2lmKGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkpCit7Y3VycmVudFN0eWxlPXt9
O3ZhciBidWZmZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2J1ZmZlci5zZXRBdHRy
aWJ1dGUoInN0eWxlIixvYmouZGVzY3JpcHRpb24pO2Zvcih2YXIgaT0wO2k8YnVmZmVyLnN0eWxl
Lmxlbmd0aDtpKyspe3ZhciBwcm9wZXJ0eT1idWZmZXIuc3R5bGVbaV07aWYoaXNBbGxvd2xpc3Rl
ZFByb3BlcnR5KHByb3BlcnR5KSkKIGN1cnJlbnRTdHlsZVtwcm9wZXJ0eV09YnVmZmVyLnN0eWxl
W3Byb3BlcnR5XTt9fQotZnVuY3Rpb24gaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KQor
ZnVuY3Rpb24gaXNBbGxvd2xpc3RlZFByb3BlcnR5KHByb3BlcnR5KQoge2Zvcih2YXIgcHJlZml4
IG9mWyJiYWNrZ3JvdW5kIiwiYm9yZGVyIiwiY29sb3IiLCJmb250IiwibGluZSIsIm1hcmdpbiIs
InBhZGRpbmciLCJ0ZXh0Il0pe2lmKHByb3BlcnR5LnN0YXJ0c1dpdGgocHJlZml4KXx8cHJvcGVy
dHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iK3ByZWZpeCkpCiByZXR1cm4gdHJ1ZTt9CiByZXR1cm4g
ZmFsc2U7fQpJbmRleDogV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvd2Vi
LXRvb2xpbmctYmVuY2htYXJrL2Jyb3dzZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvd2ViLXRvb2xpbmctYmVuY2htYXJrL2Jyb3dzZXIu
anMJKHJldmlzaW9uIDI3MTA2NykKKysrIFdlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvSmV0U3Ry
ZWFtMi4wL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2VyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDM4OCwxNSArMTAzODgsMTUgQEAgdHJhdmVyc2UucmVtb3ZlUHJvcGVydGllcyA9IGZ1bmN0
aW9uICh0cgogICByZXR1cm4gdHJlZTsKIH07CiAKLWZ1bmN0aW9uIGhhc0JsYWNrbGlzdGVkVHlw
ZShwYXRoLCBzdGF0ZSkgeworZnVuY3Rpb24gaGFzQmxvY2tsaXN0ZWRUeXBlKHBhdGgsIHN0YXRl
KSB7CiAgIGlmIChwYXRoLm5vZGUudHlwZSA9PT0gc3RhdGUudHlwZSkgewogICAgIHN0YXRlLmhh
cyA9IHRydWU7CiAgICAgcGF0aC5zdG9wKCk7CiAgIH0KIH0KIAotdHJhdmVyc2UuaGFzVHlwZSA9
IGZ1bmN0aW9uICh0cmVlLCBzY29wZSwgdHlwZSwgYmxhY2tsaXN0VHlwZXMpIHsKLSAgaWYgKCgw
LCBfaW5jbHVkZXMyLmRlZmF1bHQpKGJsYWNrbGlzdFR5cGVzLCB0cmVlLnR5cGUpKSByZXR1cm4g
ZmFsc2U7Cit0cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlLCB0eXBlLCBi
bG9ja2xpc3RUeXBlcykgeworICBpZiAoKDAsIF9pbmNsdWRlczIuZGVmYXVsdCkoYmxvY2tsaXN0
VHlwZXMsIHRyZWUudHlwZSkpIHJldHVybiBmYWxzZTsKIAogICBpZiAodHJlZS50eXBlID09PSB0
eXBlKSByZXR1cm4gdHJ1ZTsKIApAQCAtMTA0MDYsOCArMTA0MDYsOCBAQCB0cmF2ZXJzZS5oYXNU
eXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlCiAgIH07CiAKICAgdHJhdmVyc2UodHJlZSwgewot
ICAgIGJsYWNrbGlzdDogYmxhY2tsaXN0VHlwZXMsCi0gICAgZW50ZXI6IGhhc0JsYWNrbGlzdGVk
VHlwZQorICAgIGJsb2NrbGlzdDogYmxvY2tsaXN0VHlwZXMsCisgICAgZW50ZXI6IGhhc0Jsb2Nr
bGlzdGVkVHlwZQogICB9LCBzY29wZSwgc3RhdGUpOwogCiAgIHJldHVybiBzdGF0ZS5oYXM7CkBA
IC0zNjk3Myw3ICszNjk3Myw3IEBAIGZ1bmN0aW9uIFR5cGVkQXJyYXlTcGVjaWVzQ3JlYXRlKHJl
YWxtLCAKIHZhciBwcm9taXNlRXhpc3RzID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbic7
CiAKIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovCi12YXIgZ2xvYmFsT2JqZWN0ID0gdHlw
ZW9mIHNlbGYgPT09ICdvYmplY3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUt
bGluZSBpZC1ibGFja2xpc3QKK3ZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29i
amVjdCcgPyBzZWxmIDogZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsb2NrbGlz
dAogCiB2YXIgc3ltYm9sRXhpc3RzID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCc7CiB2
YXIgbWFwRXhpc3RzID0gdHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCc7CkBAIC0xMTM1ODcsNyAr
MTEzNTg3LDcgQEAgbW9kdWxlLmV4cG9ydHMgPSAie1widmVyc2lvblwiOjMsXCJzb3VyYwogLyog
NDA1ICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBv
cnRzID0gIi8qIE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3IFtWYWxl
cmlvIFByb2lldHRpXShodHRwczovL21vb3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIgQnVpbGQ6
IGh0dHBzOi8vbW9vdG9vbHMubmV0L2NvcmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgwN2IxNzNk
NWRlZmY2NzNmY1xuKi9cbi8qXG4tLS1cblxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlvbjogVGhl
IGhlYXJ0IG9mIE1vb1Rvb2xzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY29w
eXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6
Ly9naXRodWIuY29tL2thbWljYW5lLykuXG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0
aW9uIHRlYW0gKGh0dHA6Ly9tb290b29scy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3BpcmF0aW9u
OlxuICAtIENsYXNzIGltcGxlbWVudGF0aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8v
ZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAw
NiBEZWFuIEVkd2FyZHMsIFtHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6
Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNvbWUgZnVu
Y3Rpb25hbGl0eSBpbnNwaXJlZCBieSBbUHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMu
b3JnKSBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNl
XShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuXG5wcm92
aWRlczogW0NvcmUsIE1vb1Rvb2xzLCBUeXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV1c
blxuLi4uXG4qL1xuLyohIE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1
IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4qL1xuKGZ1
bmN0aW9uKCl7XG5cbnRoaXMuTW9vVG9vbHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcsXG5cdGJ1
aWxkOiAnNTI5NDIyODcyYWRmZmY0MDFiOTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07XG5cbi8v
IHR5cGVPZiwgaW5zdGFuY2VPZlxuXG52YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlv
bihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYgKGl0ZW0u
JGZhbWlseSAhPSBudWxsKSByZXR1cm4gaXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0ZW0ubm9k
ZU5hbWUpe1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVudCc7XG5c
dFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0gMykgcmV0dXJuICgvXFxTLykudGVzdChpdGVtLm5vZGVW
YWx1ZSkgPyAndGV4dG5vZGUnIDogJ3doaXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBp
dGVtLmxlbmd0aCA9PSAnbnVtYmVyJyl7XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0pIHJldHVy
biAnYXJndW1lbnRzJztcblx0XHRpZiAoJ2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29sbGVjdGlv
bic7XG5cdH1cblxuXHRyZXR1cm4gdHlwZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFuY2VPZiA9
IHRoaXMuaW5zdGFuY2VPZiA9IGZ1bmN0aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChpdGVtID09
IG51bGwpIHJldHVybiBmYWxzZTtcblx0dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0
b3IgfHwgaXRlbS5jb25zdHJ1Y3Rvcjtcblx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0XHRpZiAo
Y29uc3RydWN0b3IgPT09IG9iamVjdCkgcmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0b3IgPSBj
b25zdHJ1Y3Rvci5wYXJlbnQ7XG5cdH1cblx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVtLmhhc093
blByb3BlcnR5KSByZXR1cm4gZmFsc2U7XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4gaXRlbSBp
bnN0YW5jZW9mIG9iamVjdDtcbn07XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJsZXMgPSB0
cnVlO1xuZm9yICh2YXIgaSBpbiB7dG9TdHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7XG5p
ZiAoZW51bWVyYWJsZXMpIGVudW1lcmFibGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9m
JywgJ2lzUHJvdG90eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJp
bmcnLCAndG9TdHJpbmcnLCAnY29uc3RydWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hPYmplY3RF
bnVtYmVyYWJsZUtleShvYmplY3QsIGZuLCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVzKSBmb3Ig
KHZhciBpID0gZW51bWVyYWJsZXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVudW1lcmFi
bGVzW2ldO1xuXHRcdC8vIHNpZ25hdHVyZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9hZFNldHRl
ciBjYW4gZGlyZWN0bHkgcGFzcyB0aGVcblx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdpdGhvdXQg
c3dhcHBpbmcgYXJndW1lbnRzLlxuXHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwg
aykpIGZuLmNhbGwoYmluZCwgaywgb2JqZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4PiovXG5c
bi8vIEZ1bmN0aW9uIG92ZXJsb2FkaW5nXG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247
XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJh
bCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlm
IChhID09IG51bGwpIHJldHVybiB0aGlzO1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlwZW9mIGEg
IT0gJ3N0cmluZycpe1xuXHRcdFx0Zm9yICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhpcywgaywg
YVtrXSk7XG5cdFx0XHQvKjxsdElFOD4qL1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxl
S2V5KGEsIHNlbGYsIHRoaXMpO1xuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNlIHtcblx0
XHRcdHNlbGYuY2FsbCh0aGlzLCBhLCBiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07
XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlvbih1c2VQ
bHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtcblx0XHR2
YXIgYXJncywgcmVzdWx0O1xuXHRcdGlmICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJncyA9IGE7
XG5cdFx0ZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7XG5c
dFx0ZWxzZSBpZiAodXNlUGx1cmFsKSBhcmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtcblx0XHRc
dHJlc3VsdCA9IHt9O1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsr
KSByZXN1bHRbYXJnc1tpXV0gPSBzZWxmLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0fSBlbHNl
IHtcblx0XHRcdHJlc3VsdCA9IHNlbGYuY2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJu
IHJlc3VsdDtcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlv
bihrZXksIHZhbHVlKXtcblx0dGhpc1trZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7
XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5pbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtc
blx0dGhpcy5wcm90b3R5cGVba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG4v
LyBGcm9tXG5cbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJyYXkuY29u
dmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107XG5c
dHJldHVybiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmlu
ZycpID8gKHR5cGVPZihpdGVtKSA9PSAnYXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0p
IDogW2l0ZW1dO1xufTtcblxuRnVuY3Rpb24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRy
ZXR1cm4gKHR5cGVPZihpdGVtKSA9PSAnZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiBpdGVtO1xuXHR9O1xufTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1bmN0aW9u
KGl0ZW0pe1xuXHR2YXIgbnVtYmVyID0gcGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJuIGlzRmlu
aXRlKG51bWJlcikgPyBudW1iZXIgOiBudWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQgPSBmdW5j
dGlvbihpdGVtKXtcblx0cmV0dXJuIGl0ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlvbi5mcm9t
ID0gRnVuY3Rpb24uY29udmVydDtcbk51bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7XG5TdHJp
bmcuZnJvbSA9IFN0cmluZy5jb252ZXJ0O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1bmN0aW9u
LmltcGxlbWVudCh7XG5cblx0aGlkZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRkZW4gPSB0
cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9uKCl7XG5c
dFx0dGhpcy4kcHJvdGVjdGVkID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtc
blxuLy8gVHlwZVxuXG52YXIgVHlwZSA9IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVj
dCl7XG5cdGlmIChuYW1lKXtcblx0XHR2YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5c
dFx0dmFyIHR5cGVDaGVjayA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0eXBlT2Yo
aXRlbSkgPT0gbG93ZXIpO1xuXHRcdH07XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVD
aGVjaztcblx0XHRpZiAob2JqZWN0ICE9IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3RvdHlwZS4k
ZmFtaWx5ID0gKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRcdH0pLmhp
ZGUoKTtcblx0XHRcdFxuXHRcdH1cblx0fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJu
IG51bGw7XG5cblx0b2JqZWN0LmV4dGVuZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1Y3RvciA9
IFR5cGU7XG5cdG9iamVjdC5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xuXG5cdHJl
dHVybiBvYmplY3Q7XG59O1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3Ry
aW5nO1xuXG5UeXBlLmlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKGl0
ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9TdHJpbmcu
Y2FsbChpdGVtKSAhPSAnW29iamVjdCBGdW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9va3MgPSB7
fTtcblxudmFyIGhvb2tzT2YgPSBmdW5jdGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9IHR5cGVP
ZihvYmplY3QucHJvdG90eXBlKTtcblx0cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29rc1t0eXBl
XSA9IFtdKTtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xu
XHRpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhvb2tzID0g
aG9va3NPZih0aGlzKTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsr
KXtcblx0XHR2YXIgaG9vayA9IGhvb2tzW2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykgPT0gJ3R5
cGUnKSBpbXBsZW1lbnQuY2FsbChob29rLCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2UgaG9vay5j
YWxsKHRoaXMsIG5hbWUsIG1ldGhvZCk7XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0aGlzLnBy
b3RvdHlwZVtuYW1lXTtcblx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90
ZWN0ZWQpIHRoaXMucHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlzW25hbWVd
ID09IG51bGwgJiYgdHlwZU9mKG1ldGhvZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNhbGwodGhp
cywgbmFtZSwgZnVuY3Rpb24oaXRlbSl7XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShpdGVtLCBz
bGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQgPSBmdW5j
dGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1
cm47XG5cdHZhciBwcmV2aW91cyA9IHRoaXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxs
IHx8ICFwcmV2aW91cy4kcHJvdGVjdGVkKSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtcblxuVHlw
ZS5pbXBsZW1lbnQoe1xuXG5cdGltcGxlbWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCks
XG5cblx0ZXh0ZW5kOiBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczogZnVuY3Rp
b24obmFtZSwgZXhpc3Rpbmcpe1xuXHRcdGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUsIHRoaXMu
cHJvdG90eXBlW2V4aXN0aW5nXSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRtaXJyb3I6
IGZ1bmN0aW9uKGhvb2spe1xuXHRcdGhvb2tzT2YodGhpcykucHVzaChob29rKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxubmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxuLy8gRGVm
YXVsdCBUeXBlc1xuXG52YXIgZm9yY2UgPSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1ldGhvZHMp
e1xuXHR2YXIgaXNUeXBlID0gKG9iamVjdCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlwZSA9IG9i
amVjdC5wcm90b3R5cGU7XG5cblx0aWYgKGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwg
b2JqZWN0KTtcblxuXHRmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHR2YXIga2V5ID0gbWV0aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBvYmplY3Rb
a2V5XSxcblx0XHRcdHByb3RvID0gcHJvdG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2VuZXJpYykg
Z2VuZXJpYy5wcm90ZWN0KCk7XG5cdFx0aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0LmltcGxl
bWVudChrZXksIHByb3RvLnByb3RlY3QoKSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtcblx0XHR2
YXIgbWV0aG9kc0VudW1lcmFibGUgPSBwcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUobWV0
aG9kc1swXSk7XG5cdFx0b2JqZWN0LmZvckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7XG5cdFx0
XHRpZiAoIW1ldGhvZHNFbnVtZXJhYmxlKSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVu
Z3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtt
ZXRob2RzW2ldXSwgbWV0aG9kc1tpXSk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4g
cHJvdG90eXBlKSBmbi5jYWxsKHByb3RvdHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7XG5cdFx0
fTtcblx0fVxuXG5cdHJldHVybiBmb3JjZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBTdHJpbmcs
IFtcblx0J2NoYXJBdCcsICdjaGFyQ29kZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycsICdpbmRl
eE9mJywgJ2xhc3RJbmRleE9mJywgJ21hdGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNo
Jyxcblx0J3NsaWNlJywgJ3NwbGl0JywgJ3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJpbScsICd0
b0xvd2VyQ2FzZScsICd0b1VwcGVyQ2FzZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5cdCdwb3An
LCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQn
LCAnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5kZXhPZics
ICdmaWx0ZXInLCAnZm9yRWFjaCcsICdldmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1Y2UnLCAn
cmVkdWNlUmlnaHQnLCAnY29udGFpbnMnXG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5cdCd0b0V4
cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nXG5d
KSgnRnVuY3Rpb24nLCBGdW5jdGlvbiwgW1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5kJ1xuXSko
J1JlZ0V4cCcsIFJlZ0V4cCwgW1xuXHQnZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcsIE9iamVj
dCwgW1xuXHQnY3JlYXRlJywgJ2RlZmluZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAn
a2V5cycsXG5cdCdnZXRQcm90b3R5cGVPZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAn
Z2V0T3duUHJvcGVydHlOYW1lcycsXG5cdCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4dGVuc2li
bGUnLCAnc2VhbCcsICdpc1NlYWxlZCcsICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgnRGF0ZScs
IERhdGUsIFsnbm93J10pO1xuXG5PYmplY3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2FkU2V0dGVy
KCk7XG5cbkRhdGUuZXh0ZW5kKCdub3cnLCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhuZXcgRGF0
ZSk7XG59KTtcblxubmV3IFR5cGUoJ0Jvb2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4ZXMgTmFO
IHJldHVybmluZyBhcyBOdW1iZXJcblxuTnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rp
b24oKXtcblx0cmV0dXJuIGlzRmluaXRlKHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7XG59Lmhp
ZGUoKTtcblxuLy8gTnVtYmVyLnJhbmRvbVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5j
dGlvbihtaW4sIG1heCl7XG5cdHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4
IC0gbWluICsgMSkgKyBtaW4pO1xufSk7XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNcblxuQXJy
YXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtc
blx0XHRcdGlmIChpIGluIHRoaXMpIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5c
dFx0fVxuXHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHRBcnJheS5mb3JFYWNoKHRoaXMsIGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fVxuXG59KTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2JqZWN0KXtc
blx0XHR2YXIga2V5cyA9IFtdO1xuXHRcdGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0XHRcdGlm
IChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGtleXMucHVzaChrKTtcblx0XHR9XG5c
dFx0Lyo8bHRJRTg+Ki9cblx0XHRmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBm
dW5jdGlvbihrKXtcblx0XHRcdGtleXMucHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwvbHRJRTg+
Ki9cblx0XHRyZXR1cm4ga2V5cztcblx0fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihvYmplY3Qs
IGZuLCBiaW5kKXtcblx0XHRPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5
KXtcblx0XHRcdGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9
KTtcblx0fVxuXG59KTtcblxuT2JqZWN0LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxuXG4vLyBB
cnJheSAmIE9iamVjdCBjbG9uaW5nLCBPYmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nXG5cbnZh
ciBjbG9uZU9mID0gZnVuY3Rpb24oaXRlbSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0pKXtcblx0
XHRjYXNlICdhcnJheSc6IHJldHVybiBpdGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2JqZWN0Jzog
cmV0dXJuIE9iamVjdC5jbG9uZShpdGVtKTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRlbTtcblx0
fVxufTtcblxuQXJyYXkuaW1wbGVtZW50KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBpID0g
dGhpcy5sZW5ndGgsIGNsb25lID0gbmV3IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBjbG9uZVtp
XSA9IGNsb25lT2YodGhpc1tpXSk7XG5cdHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIgbWVyZ2VP
bmUgPSBmdW5jdGlvbihzb3VyY2UsIGtleSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlwZU9mKGN1
cnJlbnQpKXtcblx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3VyY2Vba2V5
XSkgPT0gJ29iamVjdCcpIE9iamVjdC5tZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7XG5cdFx0
XHRlbHNlIHNvdXJjZVtrZXldID0gT2JqZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0YnJlYWs7
XG5cdFx0Y2FzZSAnYXJyYXknOiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsgYnJlYWs7
XG5cdFx0ZGVmYXVsdDogc291cmNlW2tleV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVybiBzb3Vy
Y2U7XG59O1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291cmNlLCBr
LCB2KXtcblx0XHRpZiAodHlwZU9mKGspID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VPbmUoc291
cmNlLCBrLCB2KTtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0dmFyIG9iamVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGZvciAo
dmFyIGtleSBpbiBvYmplY3QpIG1lcmdlT25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5XSk7XG5c
dFx0fVxuXHRcdHJldHVybiBzb3VyY2U7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdFx0dmFyIGNsb25lID0ge307XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgY2xv
bmVba2V5XSA9IGNsb25lT2Yob2JqZWN0W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtcblx0fSxc
blxuXHRhcHBlbmQ6IGZ1bmN0aW9uKG9yaWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9
IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVkID0gYXJn
dW1lbnRzW2ldIHx8IHt9O1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBvcmlnaW5h
bFtrZXldID0gZXh0ZW5kZWRba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsO1xuXHR9
XG5cbn0pO1xuXG4vLyBPYmplY3QtbGVzcyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0ZVNwYWNl
JywgJ1RleHROb2RlJywgJ0NvbGxlY3Rpb24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5jdGlvbihu
YW1lKXtcblx0bmV3IFR5cGUobmFtZSk7XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZhciBVSUQg
PSBEYXRlLm5vdygpO1xuXG5TdHJpbmcuZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9uKCl7XG5c
dHJldHVybiAoVUlEKyspLnRvU3RyaW5nKDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxuLypcbi0t
LVxuXG5uYW1lOiBBcnJheVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBl
cyBsaWtlIGVhY2gsIGNvbnRhaW5zLCBhbmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW1R5cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4uLi5cbiov
XG5cbkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkg
PCBsOyBpKyspe1xuXHRcdFx0aWYgKChpIGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQsIHRoaXNb
aV0sIGksIHRoaXMpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9
LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0gW107
XG5cdFx0Zm9yICh2YXIgdmFsdWUsIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBs
OyBpKyspIGlmIChpIGluIHRoaXMpe1xuXHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRcdFx0aWYg
KGZuLmNhbGwoYmluZCwgdmFsdWUsIGksIHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuXHRc
dH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlvbihpdGVt
LCBmcm9tKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0Zm9yICh2
YXIgaSA9IChmcm9tIDwgMCkgPyBNYXRoLm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwg
MDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4g
aTtcblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oZm4sIGJp
bmQpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9IEFycmF5
KGxlbmd0aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRp
ZiAoaSBpbiB0aGlzKSByZXN1bHRzW2ldID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlz
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkg
PCBsOyBpKyspe1xuXHRcdFx0aWYgKChpIGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tp
XSwgaSwgdGhpcykpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0s
XG5cdC8qPC8hRVM1PiovXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMu
ZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtcblx0XHR9
KTtcblx0fSxcblxuXHRpbnZva2U6IGZ1bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZhciBhcmdz
ID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rp
b24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdz
KTtcblx0XHR9KTtcblx0fSxcblxuXHRhc3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xuXHRcdHZh
ciBvYmogPSB7fSwgbGVuZ3RoID0gTWF0aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0gPSB0aGlz
W2ldO1xuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0bGluazogZnVuY3Rpb24ob2JqZWN0KXtc
blx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHRcdFx0
aWYgKG9iamVjdFtrZXldKHRoaXNbaV0pKXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHRoaXNb
aV07XG5cdFx0XHRcdFx0ZGVsZXRlIG9iamVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRc
dFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0Y29u
dGFpbnM6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4T2YoaXRl
bSwgZnJvbSkgIT0gLTE7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
dGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFycmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRnZXRMYXN0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0
aGlzLmxlbmd0aCAtIDFdIDogbnVsbDtcblx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5s
ZW5ndGggLSAxKV0gOiBudWxsO1xuXHR9LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pe1xu
XHRcdGlmICghdGhpcy5jb250YWlucyhpdGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGNvbWJpbmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5
W2ldKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oaXRlbSl7
XG5cdFx0Zm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0aGlzW2ld
ID09PSBpdGVtKSB0aGlzLnNwbGljZShpLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGZsYXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFycmF5
ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVPZih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBlID09ICdu
dWxsJykgY29udGludWU7XG5cdFx0XHRhcnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJy
YXknIHx8IHR5cGUgPT0gJ2NvbGxlY3Rpb24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5z
dGFuY2VPZih0aGlzW2ldLCBBcnJheSkpID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNb
aV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVuY3Rpb24o
KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0
XHRcdGlmICh0aGlzW2ldICE9IG51bGwpIHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0XHRyZXR1
cm4gbnVsbDtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0
aGlzLmxlbmd0aCAhPSAzKSByZXR1cm4gbnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5tYXAoZnVu
Y3Rpb24odmFsdWUpe1xuXHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1
ZTtcblx0XHRcdHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRcdHJldHVy
biAoYXJyYXkpID8gcmdiIDogJ3JnYignICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJnYlRvSGV4
OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7
XG5cdFx0aWYgKHRoaXMubGVuZ3RoID09IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0
dXJuICd0cmFuc3BhcmVudCc7XG5cdFx0dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAw
OyBpIDwgMzsgaSsrKXtcblx0XHRcdHZhciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2
KTtcblx0XHRcdGhleC5wdXNoKChiaXQubGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTtc
blx0XHR9XG5cdFx0cmV0dXJuIChhcnJheSkgPyBoZXggOiAnIycgKyBoZXguam9pbignJyk7XG5c
dH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyBGdW5jdGlvbiBQcm90b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBh
bmQgZGVsYXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlw
ZVxuXG5wcm92aWRlczogRnVuY3Rpb25cblxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRlbmQoe1xu
XG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhcmd1
bWVudHNbaV0oKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7
XG5cdH1cblxufSk7XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rp
b24oYXJncywgYmluZCl7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5KGJpbmQs
IEFycmF5LmNvbnZlcnQoYXJncykpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJldHVybiBu
dWxsO1xuXHR9LFxuXG5cdC8qPCFFUzUtYmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0aGF0KXtc
blx0XHR2YXIgc2VsZiA9IHRoaXMsXG5cdFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEg
PyBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5jdGlvbigp
e307XG5cblx0XHR2YXIgYm91bmQgPSBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRleHQgPSB0
aGF0LCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5zdGFuY2Vv
ZiBib3VuZCl7XG5cdFx0XHRcdEYucHJvdG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5cdFx0XHRc
dGNvbnRleHQgPSBuZXcgRjtcblx0XHRcdH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFyZ3MgJiYg
IWxlbmd0aClcblx0XHRcdFx0PyBzZWxmLmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBzZWxmLmFw
cGx5KGNvbnRleHQsIGFyZ3MgJiYgbGVuZ3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJn
dW1lbnRzKSkgOiBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4dCA9PSB0
aGF0ID8gcmVzdWx0IDogY29udGV4dDtcblx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtcblx0fSxc
blx0Lyo8LyFFUzUtYmluZD4qL1xuXG5cdHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRc
dHZhciBzZWxmID0gdGhpcztcblx0XHRpZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuY29u
dmVydChhcmdzKTtcblx0XHRyZXR1cm4gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBzZWxmLmFw
cGx5KGJpbmQsIGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRlbGF5OiBm
dW5jdGlvbihkZWxheSwgYmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQodGhpcy5w
YXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9LFxuXG5c
dHBlcmlvZGljYWw6IGZ1bmN0aW9uKHBlcmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVy
biBzZXRJbnRlcnZhbCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQp
LCBwZXJpb2RpY2FsKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogTnVtYmVy
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCBy
b3VuZCwgdGltZXMsIGFuZCBjZWlsLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51bWJlci5p
bXBsZW1lbnQoe1xuXG5cdGxpbWl0OiBmdW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0dXJuIE1h
dGgubWluKG1heCwgTWF0aC5tYXgobWluLCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0
aW9uKHByZWNpc2lvbil7XG5cdFx0cHJlY2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8
fCAwKS50b0ZpeGVkKHByZWNpc2lvbiA8IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0cmV0dXJu
IE1hdGgucm91bmQodGhpcyAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5cblx0dGlt
ZXM6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkr
KykgZm4uY2FsbChiaW5kLCBpLCB0aGlzKTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlv
bihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH1cblxu
fSk7XG5cbk51bWJlci5hbGlhcygnZWFjaCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24obWF0aCl7
XG5cbnZhciBtZXRob2RzID0ge307XG5cbm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtcblx0aWYg
KCFOdW1iZXJbbmFtZV0pIG1ldGhvZHNbbmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBN
YXRoW25hbWVdLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChhcmd1bWVu
dHMpKSk7XG5cdH07XG59KTtcblxuTnVtYmVyLmltcGxlbWVudChtZXRob2RzKTtcblxufSkoWydh
YnMnLCAnYWNvcycsICdhc2luJywgJ2F0YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3MnLCAnZXhw
JywgJ2Zsb29yJywgJ2xvZycsICdtYXgnLCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3FydCcsICd0
YW4nXSk7XG5cbi8qXG4tLS1cblxubmFtZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBDb250YWlu
cyBTdHJpbmcgUHJvdG90eXBlcyBsaWtlIGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5k
IHRvSW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBl
LCBBcnJheV1cblxucHJvdmlkZXM6IFN0cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5pbXBsZW1l
bnQoe1xuXG5cdC8vPCFFUzY+XG5cdGNvbnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGluZGV4KXtc
blx0XHRyZXR1cm4gKGluZGV4ID8gU3RyaW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0
aGlzKSkuaW5kZXhPZihzdHJpbmcpID4gLTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5cdHRlc3Q6
IGZ1bmN0aW9uKHJlZ2V4LCBwYXJhbXMpe1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdleCkgPT0g
J3JlZ2V4cCcpID8gcmVnZXggOiBuZXcgUmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3Qo
dGhpcyk7XG5cdH0sXG5cblx0dHJpbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRo
aXMpLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblx0fSxcblxuXHRjbGVhbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmlt
KCk7XG5cdH0sXG5cblx0Y2FtZWxDYXNlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmco
dGhpcykucmVwbGFjZSgvLVxcRC9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0
Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlwaGVuYXRl
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywg
ZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9M
b3dlckNhc2UoKSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0aW9uKG1h
dGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxu
XG5cdGVzY2FwZVJlZ0V4cDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJl
cGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cdH0sXG5c
blx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNl
IHx8IDEwKTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJz
ZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
dmFyIGhleCA9IFN0cmluZyh0aGlzKS5tYXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwyfSkoXFx3
ezEsMn0pJC8pO1xuXHRcdHJldHVybiAoaGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJh
eSkgOiBudWxsO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFy
IHJnYiA9IFN0cmluZyh0aGlzKS5tYXRjaCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJuIChyZ2Ip
ID8gcmdiLnJnYlRvSGV4KGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0ZTogZnVu
Y3Rpb24ob2JqZWN0LCByZWdleHApe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShy
ZWdleHAgfHwgKC9cXFxcP1xceyhbXnt9XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7
XG5cdFx0XHRpZiAobWF0Y2guY2hhckF0KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNoLnNsaWNl
KDEpO1xuXHRcdFx0cmV0dXJuIChvYmplY3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0g
OiAnJztcblx0XHR9KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogQnJvd3Nl
clxuXG5kZXNjcmlwdGlvbjogVGhlIEJyb3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93c2VyIGlu
aXRpYWxpemF0aW9uLCBXaW5kb3cgYW5kIERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIgSGFzaC5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIEZ1bmN0
aW9uLCBOdW1iZXIsIFN0cmluZ11cblxucHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3csIERvY3Vt
ZW50XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRv
Y3VtZW50O1xudmFyIHdpbmRvdyA9IGRvY3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZhciBwYXJz
ZSA9IGZ1bmN0aW9uKHVhLCBwbGF0Zm9ybSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcblx0
cGxhdGZvcm0gPSAocGxhdGZvcm0gPyBwbGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycpO1xuXG5c
dC8vIGNocm9tZSBpcyBpbmNsdWRlZCBpbiB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBjaGVjayBm
b3IgZWRnZSBmaXJzdCxcblx0Ly8gYmVmb3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLlxuXHR2
YXIgVUEgPSB1YS5tYXRjaCgvKGVkZ2UpW1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtcblx0aWYg
KCFVQSl7XG5cdFx0VUEgPSB1YS5tYXRjaCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRl
bnR8Y3Jpb3N8dmVyc2lvbilbXFxzXFwvOl0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJpfCg/OnJ2
W1xcc1xcLzpdfHZlcnNpb25bXFxzXFwvOl0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBbbnVsbCwg
J3Vua25vd24nLCAwXTtcblx0fVxuXG5cdGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xuXHRcdFVB
WzFdID0gJ2llJztcblx0XHRpZiAoVUFbNF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxzZSBpZiAo
VUFbMV0gPT0gJ2NyaW9zJyl7XG5cdFx0VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5cdHBsYXRm
b3JtID0gdWEubWF0Y2goL2lwKD86YWR8b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8o
Pzp3ZWJvc3xhbmRyb2lkKS8pIHx8IHVhLm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhl
ciddKVswXTtcblx0aWYgKHBsYXRmb3JtID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJztc
blxuXHRyZXR1cm4ge1xuXHRcdGV4dGVuZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxcblx0
XHRuYW1lOiAoVUFbMV0gPT0gJ3ZlcnNpb24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0dmVyc2lv
bjogcGFyc2VGbG9hdCgoVUFbMV0gPT0gJ29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6IFVBWzJd
KSxcblx0XHRwbGF0Zm9ybTogcGxhdGZvcm1cblx0fTtcbn07XG5cbnZhciBCcm93c2VyID0gdGhp
cy5Ccm93c2VyID0gcGFyc2UobmF2aWdhdG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBsYXRmb3Jt
KTtcblxuaWYgKEJyb3dzZXIubmFtZSA9PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSl7
XG5cdEJyb3dzZXIudmVyc2lvbiA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuQnJvd3Nl
ci5leHRlbmQoe1xuXHRGZWF0dXJlczoge1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5ldmFsdWF0
ZSksXG5cdFx0YWlyOiAhISh3aW5kb3cucnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IpLFxuXHRcdGpzb246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxuXHRwYXJz
ZVVBOiBwYXJzZVxufSk7XG5cblxuXG4vLyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVzdCA9IChm
dW5jdGlvbigpe1xuXG5cdHZhciBYTUxIVFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3
IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdH07XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9O1xuXG5c
dHZhciBNU1hNTCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdN
aWNyb3NvZnQuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1
bmN0aW9uKCl7XG5cdFx0WE1MSFRUUCgpO1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9LCBmdW5j
dGlvbigpe1xuXHRcdE1TWE1MMigpO1xuXHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1bmN0aW9u
KCl7XG5cdFx0TVNYTUwoKTtcblx0XHRyZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgpO1xuXG5C
cm93c2VyLkZlYXR1cmVzLnhociA9ICEhKEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4vLyBTdHJp
bmcgc2NyaXB0c1xuXG5Ccm93c2VyLmV4ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYgKCF0ZXh0
KSByZXR1cm4gdGV4dDtcblx0aWYgKHdpbmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5kb3cuZXhl
Y1NjcmlwdCh0ZXh0KTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0
ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRzY3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9jdW1lbnQu
aGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQo
c2NyaXB0KTtcblx0fVxuXHRyZXR1cm4gdGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1lbnQoJ3N0
cmlwU2NyaXB0cycsIGZ1bmN0aW9uKGV4ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xuXHR2YXIg
dGV4dCA9IHRoaXMucmVwbGFjZSgvPHNjcmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+
L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUpe1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdcXG4nO1xu
XHRcdHJldHVybiAnJztcblx0fSk7XG5cdGlmIChleGVjID09PSB0cnVlKSBCcm93c2VyLmV4ZWMo
c2NyaXB0cyk7XG5cdGVsc2UgaWYgKHR5cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBleGVjKHNj
cmlwdHMsIHRleHQpO1xuXHRyZXR1cm4gdGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERvY3VtZW50
XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5cdFdpbmRv
dzogdGhpcy5XaW5kb3csXG5cdEVsZW1lbnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6IHRoaXMu
RXZlbnRcbn0pO1xuXG50aGlzLldpbmRvdyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUo
J1dpbmRvdycsIGZ1bmN0aW9uKCl7fSk7XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZl
cnQoJ3dpbmRvdycpLmhpZGUoKTtcblxuV2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHR3aW5kb3dbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVudCA9IGRv
Y3VtZW50LiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9uKCl7fSk7
XG5cbmRvY3VtZW50LiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcpLmhpZGUo
KTtcblxuRG9jdW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRvY3VtZW50
W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQ7XG5pZiAoIWRvY3VtZW50LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhlY0NvbW1h
bmQpIHRyeSB7XG5cdGRvY3VtZW50LmV4ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VDYWNoZScs
IGZhbHNlLCB0cnVlKTtcbn0gY2F0Y2ggKGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0aGlzLmF0
dGFjaEV2ZW50ICYmICF0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2FkRXZlbnQg
PSBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZl
bnQpO1xuXHRcdGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93
ID0gbnVsbDtcblx0XHR3aW5kb3cgPSB0aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVsbDtcblx0
fTtcblx0dGhpcy5hdHRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59XG5cbi8v
IElFIGZhaWxzIG9uIGNvbGxlY3Rpb25zIGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZlcnMgdG8g
PHNlbGVjdD4pXG52YXIgYXJyYXlGcm9tID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5cdGFycmF5
RnJvbShkb2N1bWVudC5odG1sLmNoaWxkTm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFycmF5LmNv
bnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycg
JiYgVHlwZS5pc0VudW1lcmFibGUoaXRlbSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJheScpe1xu
XHRcdFx0dmFyIGkgPSBpdGVtLmxlbmd0aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5cdFx0XHR3
aGlsZSAoaS0tKSBhcnJheVtpXSA9IGl0ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0
fVxuXHRcdHJldHVybiBhcnJheUZyb20oaXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3RvdHlwZSA9
IEFycmF5LnByb3RvdHlwZSxcblx0XHRzbGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0Wydwb3An
LCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQn
LCAnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZh
ciBtZXRob2QgPSBwcm90b3R5cGVbbmFtZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5jdGlvbihp
dGVtKXtcblx0XHRcdHJldHVybiBtZXRob2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElFOT4qL1xu
XG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9uIGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywg
YW5kIGltcGxlbWVudGluZyByZXVzYWJsZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxucmVxdWlyZXM6IFtBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXVxu
XG5wcm92aWRlczogQ2xhc3NcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIENsYXNz
ID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBlKCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7XG5cdGlm
IChpbnN0YW5jZU9mKHBhcmFtcywgRnVuY3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6ZTogcGFy
YW1zfTtcblxuXHR2YXIgbmV3Q2xhc3MgPSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRoaXMpO1xu
XHRcdGlmIChuZXdDbGFzcy4kcHJvdG90eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuJGNh
bGxlciA9IG51bGw7XG5cdFx0dGhpcy4kZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFsdWUgPSAo
dGhpcy5pbml0aWFsaXplKSA/IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
IDogdGhpcztcblx0XHR0aGlzLiRjYWxsZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5cdFx0cmV0
dXJuIHZhbHVlO1xuXHR9LmV4dGVuZCh0aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxuXHRuZXdD
bGFzcy4kY29uc3RydWN0b3IgPSBDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRjb25zdHJ1
Y3RvciA9IG5ld0NsYXNzO1xuXHRuZXdDbGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFyZW50O1xu
XG5cdHJldHVybiBuZXdDbGFzcztcbn0pO1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24oKXtcblx0
aWYgKCF0aGlzLiRjYWxsZXIpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBhcmVudFwi
IGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRuYW1lLFxu
XHRcdHBhcmVudCA9IHRoaXMuJGNhbGxlci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZpb3VzID0g
KHBhcmVudCkgPyBwYXJlbnQucHJvdG90eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFwcmV2aW91
cykgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFzIG5vIHBh
cmVudC4nKTtcblx0cmV0dXJuIHByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xu
XG52YXIgcmVzZXQgPSBmdW5jdGlvbihvYmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0
KXtcblx0XHR2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1
ZSkpe1xuXHRcdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlvbigpe307
XG5cdFx0XHRcdEYucHJvdG90eXBlID0gdmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXldID0gcmVz
ZXQobmV3IEYpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2JqZWN0W2tl
eV0gPSB2YWx1ZS5jbG9uZSgpOyBicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iamVjdDtc
bn07XG5cbnZhciB3cmFwID0gZnVuY3Rpb24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRpZiAobWV0
aG9kLiRvcmlnaW4pIG1ldGhvZCA9IG1ldGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBlciA9IGZ1
bmN0aW9uKCl7XG5cdFx0aWYgKG1ldGhvZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBu
dWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNhbm5vdCBi
ZSBjYWxsZWQuJyk7XG5cdFx0dmFyIGNhbGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhp
cy4kY2FsbGVyO1xuXHRcdHRoaXMuY2FsbGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3Jh
cHBlcjtcblx0XHR2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5c
dFx0dGhpcy4kY2FsbGVyID0gY3VycmVudDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5cdFx0cmV0
dXJuIHJlc3VsdDtcblx0fS5leHRlbmQoeyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAk
bmFtZToga2V5fSk7XG5cdHJldHVybiB3cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUsIHJldGFpbil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Q
cm9wZXJ0eShrZXkpKXtcblx0XHR2YWx1ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2FsbCh0aGlz
LCB2YWx1ZSk7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9XG5cblx0
aWYgKHR5cGVPZih2YWx1ZSkgPT0gJ2Z1bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRoaWRkZW4p
IHJldHVybiB0aGlzO1xuXHRcdHRoaXMucHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVl
IDogd3JhcCh0aGlzLCBrZXksIHZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3QubWVyZ2Uo
dGhpcy5wcm90b3R5cGUsIGtleSwgdmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xu
XG52YXIgZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90b3R5cGlu
ZyA9IHRydWU7XG5cdHZhciBwcm90byA9IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNzLiRwcm90
b3R5cGluZztcblx0cmV0dXJuIHByb3RvO1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1l
bnQnLCBpbXBsZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3JzID0ge1xu
XG5cdEV4dGVuZHM6IGZ1bmN0aW9uKHBhcmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7
XG5cdFx0dGhpcy5wcm90b3R5cGUgPSBnZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxuXG5cdElt
cGxlbWVudHM6IGZ1bmN0aW9uKGl0ZW1zKXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNo
KGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5cdFx0XHRm
b3IgKHZhciBrZXkgaW4gaW5zdGFuY2UpIGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFu
Y2Vba2V5XSwgdHJ1ZSk7XG5cdFx0fSwgdGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4t
LS1cblxubmFtZTogQ2xhc3MuRXh0cmFzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5
IENsYXNzZXMgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRv
IGVhc2UgdGhlIGV4ZWN1dGlvbiBvZiBtYW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLkV4
dHJhcywgQ2hhaW4sIEV2ZW50cywgT3B0aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtc
blxudGhpcy5DaGFpbiA9IG5ldyBDbGFzcyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRjaGFpbjog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVu
dHMpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuICh0aGlzLiRjaGFpbi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5h
cHBseSh0aGlzLCBhcmd1bWVudHMpIDogZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFpbjogZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLiRjaGFpbi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
XG5cbn0pO1xuXG52YXIgcmVtb3ZlT24gPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1cm4gc3Ry
aW5nLnJlcGxhY2UoL15vbihbQS1aXSkvLCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5cdFx0cmV0
dXJuIGZpcnN0LnRvTG93ZXJDYXNlKCk7XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMgPSBuZXcg
Q2xhc3Moe1xuXG5cdCRldmVudHM6IHt9LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBm
biwgaW50ZXJuYWwpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxuXG5cdFx0
dGhpcy4kZXZlbnRzW3R5cGVdID0gKHRoaXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5jbHVkZShm
bik7XG5cdFx0aWYgKGludGVybmFsKSBmbi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAodmFy
IHR5cGUgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBk
ZWxheSl7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlz
LiRldmVudHNbdHlwZV07XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGFyZ3Mg
PSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0
XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBm
bi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUgPSByZW1v
dmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlm
IChldmVudHMgJiYgIWZuLmludGVybmFsKXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50cy5pbmRl
eE9mKGZuKTtcblx0XHRcdGlmIChpbmRleCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24o
ZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVj
dCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBl
dmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChldmVudHMp
IGV2ZW50cyA9IHJlbW92ZU9uKGV2ZW50cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMuJGV2ZW50
cyl7XG5cdFx0XHRpZiAoZXZlbnRzICYmIGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtcblx0XHRc
dHZhciBmbnMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0gZm5zLmxl
bmd0aDsgaS0tOykgaWYgKGkgaW4gZm5zKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudCh0eXBl
LCBmbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtc
blxudGhpcy5PcHRpb25zID0gbmV3IENsYXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5jdGlvbigp
e1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFwcGx5KG51
bGwsIFt7fSwgdGhpcy5vcHRpb25zXS5hcHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYgKHRoaXMu
YWRkRXZlbnQpIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0eXBlT2Yo
b3B0aW9uc1tvcHRpb25dKSAhPSAnZnVuY3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRp
b24pKSBjb250aW51ZTtcblx0XHRcdHRoaXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlv
bl0pO1xuXHRcdFx0ZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuVGhlbmFi
bGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNhbiBiZSBp
bXBsZW1lbnRlZCBpbnRvIHlvdXIgb3duIENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhlbmFibGVc
Ii5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5w
cm92aWRlczogW0NsYXNzLlRoZW5hYmxlXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52
YXIgU1RBVEVfUEVORElORyA9IDAsXG5cdFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNUQVRFX1JF
SkVDVEVEID0gMjtcblxudmFyIFRoZW5hYmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3Mo
e1xuXG5cdCR0aGVuYWJsZVN0YXRlOiBTVEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVSZXN1bHQ6
IG51bGwsXG5cdCR0aGVuYWJsZVJlYWN0aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdHJlc29sdmUodGhpcywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29u
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBmdW5jdGlv
bigpe1xuXHRcdHN3aXRjaCAodGhpcy4kdGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNlIFNUQVRF
X1BFTkRJTkc6XG5cdFx0XHRcdHJldHVybiAncGVuZGluZyc7XG5cblx0XHRcdGNhc2UgU1RBVEVf
RlVMRklMTEVEOlxuXHRcdFx0XHRyZXR1cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNhc2UgU1RB
VEVfUkVKRUNURUQ6XG5cdFx0XHRcdHJldHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0fSxcblxu
XHRyZXNldFRoZW5hYmxlOiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCByZWFz
b24pO1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRoZW46
IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9mIG9uRnVs
ZmlsbGVkICE9PSAnZnVuY3Rpb24nKSBvbkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5cdFx0aWYg
KHR5cGVvZiBvblJlamVjdGVkICE9PSAnZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Rocm93ZXIn
O1xuXG5cdFx0dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlzLiR0aGVu
YWJsZVJlYWN0aW9ucy5wdXNoKHtcblx0XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0XHRcdGZ1
bGZpbGxIYW5kbGVyOiBvbkZ1bGZpbGxlZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9uUmVqZWN0
ZWRcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5E
SU5HKXtcblx0XHRcdHJlYWN0KHRoaXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVuYWJsZTtc
blx0fSxcblxuXHQnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1cm4gdGhp
cy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5leHRlbmQo
e1xuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xuXHRcdGlm
ICh2YWx1ZSBpbnN0YW5jZW9mIFRoZW5hYmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFsdWU7XG5c
dFx0fSBlbHNlIHtcblx0XHRcdHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0XHRyZXNv
bHZlKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxc
blx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVu
YWJsZSgpO1xuXHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhlbmFi
bGU7XG5cdH1cbn0pO1xuXG4vLyBQcml2YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZXNvbHZl
KHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RB
VEVfUEVORElORyl7XG5cdFx0aWYgKHRoZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRyZWplY3Qo
dGhlbmFibGUsIG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJsZSB3aXRo
IGl0c2VsZi4nKSk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAn
b2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZhciB0aGVu
O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9IGNhdGNo
IChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0
XHR9XG5cdFx0XHRpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHR2YXIg
cmVzb2x2ZWQgPSBmYWxzZTtcblx0XHRcdFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0
cnkge1xuXHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRc
dFx0XHRcdFx0ZnVuY3Rpb24obmV4dFZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29s
dmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0
XHRcdHJlc29sdmUodGhlbmFibGUsIG5leHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRc
dFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRcdFx0XHRc
dFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVl
O1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdFx0XHRc
dFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNh
dGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0
XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNl
cHRpb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9
IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0
fSBlbHNlIHtcblx0XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1c
blxuZnVuY3Rpb24gZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRo
ZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJl
c3VsdCA9IHZhbHVlO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfRlVMRklM
TEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlamVjdCh0
aGVuYWJsZSwgcmVhc29uKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFU
RV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247XG5cdFx0
dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJlYWN0KHRo
ZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlmICh0aGVu
YWJsZS4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlUmVzdWx0ID0gbnVsbDtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRF
X1BFTkRJTkc7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2YXIgc3Rh
dGUgPSB0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJsZS4kdGhl
bmFibGVSZXN1bHQsXG5cdFx0cmVhY3Rpb25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25z
LFxuXHRcdHR5cGU7XG5cblx0aWYgKHN0YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xuXHRcdHRo
ZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmlsbEhhbmRs
ZXInO1xuXHR9IGVsc2UgaWYgKHN0YXRlID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRsZXInO1xu
XHR9XG5cblx0aWYgKHR5cGUpe1xuXHRcdGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQsIHJlYWN0
aW9ucywgdHlwZV0pKTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCByZWFjdGlv
bnMsIHR5cGUpe1xuXHRmb3IgKHZhciBpID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBs
OyArK2kpe1xuXHRcdHZhciByZWFjdGlvbiA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhhbmRsZXIg
PSByZWFjdGlvblt0eXBlXTtcblxuXHRcdGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHknKXtcblx0
XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGlmICho
YW5kbGVyID09PSAnVGhyb3dlcicpe1xuXHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCBy
ZXN1bHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKHJlYWN0
aW9uLnRoZW5hYmxlLCBoYW5kbGVyKHJlc3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9u
KXtcblx0XHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0
fVxuXHRcdH1cblx0fVxufVxuXG52YXIgZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1
bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKXtcblx0
ZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNrO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRl
ICE9PSAndW5kZWZpbmVkJyl7XG5cdGRlZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIHtcblx0
ZGVmZXIgPSBmdW5jdGlvbihmbil7XG5cdFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07XG59XG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBPYmplY3Qg
Z2VuZXJpYyBtZXRob2RzXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogVHlwZVxuXG5wcm92aWRlczogW09iamVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rp
b24oKXtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmplY3QsIGtl
eXMpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHRpZiAo
ayBpbiBvYmplY3QpIHJlc3VsdHNba10gPSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJldHVybiBy
ZXN1bHRzO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0
dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5c
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkg
PSBrZXlzW2ldO1xuXHRcdFx0cmVzdWx0c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5
XSwga2V5LCBvYmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRm
aWx0ZXI6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307
XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAw
OyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUg
PSBvYmplY3Rba2V5XTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVj
dCkpIHJlc3VsdHNba2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0
fSxcblxuXHRldmVyeTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMg
PSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5n
dGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4uY2FsbChi
aW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHRzb21lOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2
YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBr
ZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGZu
LmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZh
ciB2YWx1ZXMgPSBbXTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5
c1tpXTtcblx0XHRcdHZhbHVlcy5wdXNoKG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJldHVybiB2
YWx1ZXM7XG5cdH0sXG5cblx0Z2V0TGVuZ3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHJldHVy
biBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVuY3Rpb24o
b2JqZWN0LCB2YWx1ZSl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRc
dGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0g
a2V5c1tpXTtcblx0XHRcdGlmIChvYmplY3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBrZXk7XG5c
dFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihvYmpl
Y3QsIHZhbHVlKXtcblx0XHRyZXR1cm4gT2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51
bGw7XG5cdH0sXG5cblx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNlKXtcblx0
XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rp
b24odmFsdWUsIGtleSl7XG5cdFx0XHRpZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSAr
ICddJztcblx0XHRcdHZhciByZXN1bHQ7XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xu
XHRcdFx0XHRjYXNlICdvYmplY3QnOiByZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1
ZSwga2V5KTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2YXIgcXMg
PSB7fTtcblx0XHRcdFx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdFx0
XHRxc1tpXSA9IHZhbDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBPYmplY3Qu
dG9RdWVyeVN0cmluZyhxcywga2V5KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVs
dDogcmVzdWx0ID0ga2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRc
dH1cblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7XG5c
dFx0fSk7XG5cblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xu
XG59KSgpO1xuXG5cblxuLypcbi0tLVxubmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlwdGlvbjog
U3RhbmRhbG9uZSBDU1MzIFNlbGVjdG9yIHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBhcnNlclxu
Li4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRvckluZGV4
LFxuXHRjb21iaW5hdG9ySW5kZXgsXG5cdHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxuXHRyZXZl
cnNlQ2FjaGUgPSB7fSxcblx0cmVVbmVzY2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJzZSA9IGZ1
bmN0aW9uKGV4cHJlc3Npb24sIGlzUmV2ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9PSBudWxs
KSByZXR1cm4gbnVsbDtcblx0aWYgKGV4cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJldHVybiBl
eHByZXNzaW9uO1xuXHRleHByZXNzaW9uID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFjZSgvXlxc
cyt8XFxzKyQvZywgJycpO1xuXHRyZXZlcnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFyIGN1cnJl
bnRDYWNoZSA9IChyZXZlcnNlZCkgPyByZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYgKGN1cnJl
bnRDYWNoZVtleHByZXNzaW9uXSkgcmV0dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXTtcblx0
cGFyc2VkID0ge1xuXHRcdFNsaWNrOiB0cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxcblx0XHRy
YXc6IGV4cHJlc3Npb24sXG5cdFx0cmV2ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBw
YXJzZSh0aGlzLnJhdywgdHJ1ZSk7XG5cdFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRleCA9IC0x
O1xuXHR3aGlsZSAoZXhwcmVzc2lvbiAhPSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFj
ZShyZWdleHAsIHBhcnNlcikpKTtcblx0cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHByZXNzaW9u
cy5sZW5ndGg7XG5cdHJldHVybiBjdXJyZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2ZXJzZWQp
ID8gcmV2ZXJzZShwYXJzZWQpIDogcGFyc2VkO1xufTtcblxudmFyIHJldmVyc2VDb21iaW5hdG9y
ID0gZnVuY3Rpb24oY29tYmluYXRvcil7XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVy
biAnICc7XG5cdGVsc2UgaWYgKGNvbWJpbmF0b3IgPT09ICcgJykgcmV0dXJuICchJztcblx0ZWxz
ZSBpZiAoKC9eIS8pLnRlc3QoY29tYmluYXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJlcGxhY2Uo
L14hLywgJycpO1xuXHRlbHNlIHJldHVybiAnIScgKyBjb21iaW5hdG9yO1xufTtcblxudmFyIHJl
dmVyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVz
c2lvbi5leHByZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5n
dGg7IGkrKyl7XG5cdFx0dmFyIGV4cCA9IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBsYXN0ID0g
e3BhcnRzOiBbXSwgdGFnOiAnKicsIGNvbWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFsw
XS5jb21iaW5hdG9yKX07XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5ndGg7IGor
Kyl7XG5cdFx0XHR2YXIgY2V4cCA9IGV4cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZlcnNlQ29t
YmluYXRvcikgY2V4cC5yZXZlcnNlQ29tYmluYXRvciA9ICcgJztcblx0XHRcdGNleHAuY29tYmlu
YXRvciA9IGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5yZXZlcnNl
Q29tYmluYXRvcjtcblx0XHR9XG5cblx0XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7XG5cdH1c
blx0cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24o
c3RyaW5nKXsvLyBDcmVkaXQ6IFhSZWdFeHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2ZW4gTGV2
aXRoYW4gPGh0dHA6Ly9zdGV2ZW5sZXZpdGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1JVCBMaWNl
bnNlXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8LCNcXHNd
L2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5cdH0pO1xu
fTtcblxudmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYgcnVieVxu
cHV0cyBcIlxcdFxcdFwiICsgREFUQS5yZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMuKiR8XFxz
K3xcXFxcJHxcXFxcbi8sJycpXG5fX0VORF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxcXFxzKiAo
ICwgKSBcXFxccyogICAgICAgICAgICAgICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5cXFxuXHR8
IFxcXFxzKiAoIDxjb21iaW5hdG9yPisgKSBcXFxccyogICAjIENvbWJpbmF0b3IgICAgICAgICBc
XG5cXFxuXHR8ICAgICAgKCBcXFxccysgKSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hp
bGRyZW4gXFxuXFxcblx0fCAgICAgICggPHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMgVGFnICAg
ICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxcXCMgICggPHVuaWNvZGU+KyAgICAgICApICAgICAj
IElEICAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisgICAgICAg
KSAgICAgIyBDbGFzc05hbWUgICAgICAgICAgXFxuXFxcblx0fCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIEF0dHJpYnV0ZSAgICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxcblx0XHRc
XFxccyogKDx1bmljb2RlMT4rKSAgKD86ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58XT89KSAg
KD86ICBcXFxuXHRcdFx0XHRcXFxccyogKD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8pKC4qPylc
XFxcOSBcXFxuXHRcdFx0XHQpXFxcblx0XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAgXFxcblx0
XFxcXF0oPyFcXFxcXSkgXFxuXFxcblx0fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxcblx0XFxc
XCggKD86XFxcblx0XHQoPzooW1xcXCInXSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpcXFxcKFte
KV0rXFxcXCl8W14oKV0qKSspXFxcblx0KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4qL1xuXHRc
Il4oPzpcXFxccyooLClcXFxccyp8XFxcXHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChcXFxccysp
fCg8dW5pY29kZT4rfFxcXFwqKXxcXFxcIyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29kZT4rKXxc
XFxcW1xcXFxzKig8dW5pY29kZTE+KykoPzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxccyooPzoo
W1xcXCInXT8pKC4qPylcXFxcOSkpKT9cXFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1bmljb2Rl
PispKD86XFxcXCgoPzooPzooW1xcXCInXSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpcXFxcKFte
KV0rXFxcXCl8W14oKV0qKSspKVxcXFwpKT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5hdG9yPi8s
ICdbJyArIGVzY2FwZVJlZ0V4cCgnPit+YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylcblx0LnJl
cGxhY2UoLzx1bmljb2RlPi9nLCAnKD86W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxc
XFxcW15cXFxcczAtOWEtZl0pJylcblx0LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFxc
XHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuKTtcblxu
ZnVuY3Rpb24gcGFyc2VyKFxuXHRyYXdNYXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNvbWJpbmF0
b3IsXG5cdGNvbWJpbmF0b3JDaGlsZHJlbixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0Y2xhc3NO
YW1lLFxuXG5cdGF0dHJpYnV0ZUtleSxcblx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0dHJpYnV0
ZVF1b3RlLFxuXHRhdHRyaWJ1dGVWYWx1ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBzZXVkb0Ns
YXNzLFxuXHRwc2V1ZG9RdW90ZSxcblx0cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0cHNldWRv
Q2xhc3NWYWx1ZVxuKXtcblx0aWYgKHNlcGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9PT0gLTEp
e1xuXHRcdHBhcnNlZC5leHByZXNzaW9uc1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xuXHRcdGNv
bWJpbmF0b3JJbmRleCA9IC0xO1xuXHRcdGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztcblx0fVxu
XG5cdGlmIChjb21iaW5hdG9yIHx8IGNvbWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5hdG9ySW5k
ZXggPT09IC0xKXtcblx0XHRjb21iaW5hdG9yID0gY29tYmluYXRvciB8fCAnICc7XG5cdFx0dmFy
IGN1cnJlbnRTZXBhcmF0b3IgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdO1xu
XHRcdGlmIChyZXZlcnNlZCAmJiBjdXJyZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0pXG5c
dFx0XHRjdXJyZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJpbmF0b3Ig
PSByZXZlcnNlQ29tYmluYXRvcihjb21iaW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJhdG9yWysr
Y29tYmluYXRvckluZGV4XSA9IHtjb21iaW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307XG5c
dH1cblxuXHR2YXIgY3VycmVudFBhcnNlZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJ
bmRleF1bY29tYmluYXRvckluZGV4XTtcblxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3VycmVudFBh
cnNlZC50YWcgPSB0YWdOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBp
ZiAoaWQpe1xuXHRcdGN1cnJlbnRQYXJzZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2NhcGUsICcn
KTtcblxuXHR9IGVsc2UgaWYgKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1l
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNz
TGlzdCkgY3VycmVudFBhcnNlZC5jbGFzc0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJlbnRQYXJz
ZWQuY2xhc3NlcykgY3VycmVudFBhcnNlZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVudFBhcnNl
ZC5jbGFzc0xpc3QucHVzaChjbGFzc05hbWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3Nlcy5w
dXNoKHtcblx0XHRcdHZhbHVlOiBjbGFzc05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBSZWdFeHAo
JyhefFxcXFxzKScgKyBlc2NhcGVSZWdFeHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCknKVxuXHRc
dH0pO1xuXG5cdH0gZWxzZSBpZiAocHNldWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUg
PSBwc2V1ZG9DbGFzc1ZhbHVlIHx8IHBzZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0cHNldWRv
Q2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2Uo
cmVVbmVzY2FwZSwgJycpIDogbnVsbDtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5wc2V1ZG9z
KSBjdXJyZW50UGFyc2VkLnBzZXVkb3MgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBzZXVkb3Mu
cHVzaCh7XG5cdFx0XHRrZXk6IHBzZXVkb0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpLFxu
XHRcdFx0dmFsdWU6IHBzZXVkb0NsYXNzVmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9NYXJrZXIu
bGVuZ3RoID09IDEgPyAnY2xhc3MnIDogJ2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlm
IChhdHRyaWJ1dGVLZXkpe1xuXHRcdGF0dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNl
KHJlVW5lc2NhcGUsICcnKTtcblx0XHRhdHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8
fCAnJykucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVnZXhwO1xu
XG5cdFx0c3dpdGNoIChhdHRyaWJ1dGVPcGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScgOiByZWdl
eHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkg
ICAgICAgICAgICApOyBicmVhaztcblx0XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdF
eHAoICAgICAgICAgICAgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7
IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxcXFxz
KScrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJyZWFrO1xu
XHRcdFx0Y2FzZSAnfD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVS
ZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICAn
PScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFs
dWUgPT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRlc3QgPSBm
dW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0
dHJpYnV0ZVZhbHVlKSA+IC0xO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICchPScgOiB0
ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgIT0g
dmFsdWU7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0
XHRpZiAoYXR0cmlidXRlVmFsdWUgPT0gJycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRl
T3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9
O1xuXG5cdFx0aWYgKCF0ZXN0KSB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJu
IHZhbHVlICYmIHJlZ2V4cC50ZXN0KHZhbHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFjdXJyZW50
UGFyc2VkLmF0dHJpYnV0ZXMpIGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xuXHRcdGN1
cnJlbnRQYXJzZWQuYXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRlS2V5LFxu
XHRcdFx0b3BlcmF0b3I6IGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0dHJpYnV0
ZVZhbHVlLFxuXHRcdFx0dGVzdDogdGVzdFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1cm4gJyc7
XG59O1xuXG4vLyBTbGljayBOU1xuXG52YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5c
blNsaWNrLnBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJzZShleHBy
ZXNzaW9uKTtcbn07XG5cblNsaWNrLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcblxuaWYg
KCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpT
PiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9u
SlM+Ki90aGlzKTtcblxuLypcbi0tLVxubmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlwdGlvbjog
VGhlIG5ldywgc3VwZXJmYXN0IGNzcyBzZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczogU2xpY2su
RmluZGVyXG5yZXF1aXJlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtc
blxudmFyIGxvY2FsID0ge30sXG5cdGZlYXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJpbmcgPSBP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVjdGlvblxu
XG5sb2NhbC5pc05hdGl2ZUNvZGUgPSBmdW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xce1xccypc
XFtuYXRpdmUgY29kZVxcXVxccypcXH0vKS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9jYWwuaXNY
TUwgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9u
KSB8fCAoISFkb2N1bWVudC54bWwpIHx8ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29i
amVjdCBYTUxEb2N1bWVudF0nKSB8fFxuXHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAmJiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxvY2FsLnNl
dERvY3VtZW50ID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxlbWVudHMg
LyB3aW5kb3cgYXJndW1lbnRzIHRvIGRvY3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0
cmFwb2xhdGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0gZG9jdW1l
bnQubm9kZVR5cGU7XG5cdGlmIChub2RlVHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0ZWxzZSBp
ZiAobm9kZVR5cGUpIGRvY3VtZW50ID0gZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZVxu
XHRlbHNlIGlmIChkb2N1bWVudC5uYXZpZ2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1l
bnQ7IC8vIHdpbmRvd1xuXHRlbHNlIHJldHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdzIHRoZSBv
bGQgZG9jdW1lbnRcblxuXHRpZiAodGhpcy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjtc
blx0dGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhhdmUgZG9u
ZSBmZWF0dXJlIGRldGVjdGlvbiBvbiB0aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZhciByb290
ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdldFVJRFhN
TChyb290KSxcblx0XHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5cdFx0ZmVh
dHVyZTtcblxuXHRpZiAoZmVhdHVyZXMpe1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7
XG5cdFx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxuXHRcdHJl
dHVybjtcblx0fVxuXG5cdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9O1xu
XG5cdGZlYXR1cmVzLnJvb3QgPSByb290O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhp
cy5pc1hNTChkb2N1bWVudCk7XG5cblx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5cdD0gZmVh
dHVyZXMuc3RhclNlbGVjdHNDbG9zZWRRU0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1lXG5cdD0g
ZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNlUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VCQ05cblx0
PSBmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRy
aWJ1dGVRU0Fcblx0PSBmZWF0dXJlcy5pc0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVzLm5hdGl2
ZU1hdGNoZXNTZWxlY3RvclxuXHQ9IGZhbHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Nsb3NlZCwg
c3RhclNlbGVjdHNDb21tZW50cyxcblx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2Fj
aGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVy
O1xuXG5cdHZhciBzZWxlY3RlZCwgaWQgPSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIgdGVzdE5v
ZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJvb3QgPSBk
b2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0g
fHwgcm9vdDtcblx0dGVzdFJvb3QuYXBwZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8vIG9uIG5v
bi1IVE1MIGRvY3VtZW50cyBpbm5lckhUTUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2VzbnQgd29y
ayBwcm9wZXJseVxuXHR0cnkge1xuXHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBpZD1cIicr
aWQrJ1wiPjwvYT4nO1xuXHRcdGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChpZCk7XG5cdH0gY2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVyZXMuaXNI
VE1MRG9jdW1lbnQpe1xuXG5cdFx0dGVzdE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxu
XHRcdC8vIElFIHJldHVybnMgY29tbWVudCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUo
JyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVDb21tZW50KCcnKSk7XG5cdFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9k
ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8gSUUgcmV0
dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5VGFnTmFt
ZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5l
ckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYm
ICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAn
LycpO1xuXHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4g
PSBzdGFyU2VsZWN0c0NvbW1lbnRzIHx8IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0Ly8gSUUg
cmV0dXJucyBlbGVtZW50cyB3aXRoIHRoZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBmb3IgZ2V0
RWxlbWVudHNCeUlkIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9k
ZS5pbm5lckhUTUwgPSAnPGEgbmFtZT1cIicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysgaWQgKydc
Ij48L2I+Jztcblx0XHRcdGZlYXR1cmVzLmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChpZCkgPT09IHRlc3ROb2RlLmZpcnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5c
dFx0aWYgKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQvLyBTYWZh
cmkgMy4yIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+PGEgY2xh
c3M9XCJiXCI+PC9hPic7XG5cdFx0XHRcdHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
J2InKS5sZW5ndGg7XG5cdFx0XHRcdHRlc3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2In
O1xuXHRcdFx0XHRjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2RlLmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9
O1xuXG5cdFx0XHQvLyBPcGVyYSA5LjYgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2VzbnQgZGV0
ZWN0cyB0aGUgY2xhc3MgaWYgaXRzIG5vdCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkge1xuXHRc
dFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNsYXNzPVwi
ZiBiIGFcIj48L2E+Jztcblx0XHRcdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04gPSAodGVz
dE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0g
Y2F0Y2ggKGUpe31cblxuXHRcdFx0ZmVhdHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRHZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lIHx8IGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRcdH1cblxu
XHRcdGlmICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDggcmV0dXJu
cyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9mb28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxsKCcqJykg
Zm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhU
TUwgPSAnZm9vPC9mb28+Jztcblx0XHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVj
dG9yQWxsKCcqJyk7XG5cdFx0XHRcdGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBID0gKHNl
bGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJB
dCgwKSA9PSAnLycpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZhcmkgMy4y
IHF1ZXJ5U2VsZWN0b3JBbGwgZG9lc250IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVpcmtzbW9k
ZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwi
TWlYXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0
Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcuTWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoZSl7
fVxuXG5cdFx0XHQvLyBXZWJraXQgYW5kIE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlv
bnMgb24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5u
ZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwvb3B0aW9u
Pjwvc2VsZWN0Pic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5v
ZGUucXVlcnlTZWxlY3RvckFsbCgnOmNoZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0XHR9IGNh
dGNoIChlKXt9O1xuXG5cdFx0XHQvLyBJRSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBh
dHRyWypeJF09XCJcIiBzZWxlY3RvcnMgb24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtc
blx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7XG5cdFx0
XHRcdGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2Vs
ZWN0b3JBbGwoJ1tjbGFzcyo9XCJcIl0nKS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNhdGNoIChl
KXt9XG5cblx0XHR9XG5cblx0XHQvLyBJRTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBp
ZCB4LCBmb3JtLmdldEF0dHJpYnV0ZSh4KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1
dFxuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0aW9uPVwi
c1wiPjxpbnB1dCBpZD1cImFjdGlvblwiLz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZvcm1BdHRy
aWJ1dGVHZXR0ZXIgPSAodGVzdE5vZGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicp
ICE9ICdzJyk7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNoZXNTZWxl
Y3RvciBmdW5jdGlvblxuXG5cdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9v
dC5tYXRjaGVzIHx8IC8qcm9vdC5tc01hdGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hl
c1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChmZWF0dXJl
cy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IpIHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVzU2VsZWN0
b3IgdHJvd3MgZXJyb3JzIG9uIGluY29ycmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0XG5cdFx0
XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNrJyk7XG5c
dFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0gY2F0Y2gg
KGUpe31cblxuXHR9XG5cblx0dHJ5IHtcblx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAxO1xuXHRc
dGRlbGV0ZSByb290LnNsaWNrX2V4cGFuZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5n
ZXRVSURIVE1MO1xuXHR9IGNhdGNoIChlKXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdl
dFVJRFhNTDtcblx0fVxuXG5cdHRlc3RSb290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtcblx0dGVz
dE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RSb290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRyaWJ1dGVc
blxuXHRmZWF0dXJlcy5nZXRBdHRyaWJ1dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgJiYg
YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2
YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmIChtZXRob2Qp
IHJldHVybiBtZXRob2QuY2FsbChub2RlKTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IG5vZGUu
Z2V0QXR0cmlidXRlTm9kZShuYW1lKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUpID8gYXR0
cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgbmFtZSl7
XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRyZXR1
cm4gKG1ldGhvZCkgPyBtZXRob2QuY2FsbChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUp
O1xuXHR9O1xuXG5cdC8vIGhhc0F0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9
IChyb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlv
bihub2RlLCBhdHRyaWJ1dGUpe1xuXHRcdHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1
dGUpO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0gbm9kZS5n
ZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUu
c3BlY2lmaWVkIHx8IG5vZGUubm9kZVZhbHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFpbnNcblx0
Ly8gRklYTUU6IEFkZCBzcGVjczogbG9jYWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZlcmVudCBm
b3IgeG1sIGFuZCBodG1sIGRvY3VtZW50cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlucyA9IHJv
b3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZlRG9jdW1l
bnRDb250YWlucyA9IGRvY3VtZW50ICYmIHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50LmNvbnRh
aW5zKTtcblxuXHRmZWF0dXJlcy5jb250YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMgJiYgbmF0
aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1
cm4gY29udGV4dC5jb250YWlucyhub2RlKTtcblx0fSA6IChuYXRpdmVSb290Q29udGFpbnMgJiYg
IW5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0
Ly8gSUU4IGRvZXMgbm90IGhhdmUgLmNvbnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJldHVybiBj
b250ZXh0ID09PSBub2RlIHx8ICgoY29udGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50IDogY29udGV4dCkuY29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9vdCAmJiBy
b290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xu
XHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50
UG9zaXRpb24obm9kZSkgJiAxNik7XG5cdH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0
XHRpZiAobm9kZSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVl
O1xuXHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0dXJuIGZh
bHNlO1xuXHR9O1xuXG5cdC8vIGRvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3JlZGl0cyB0
byBTaXp6bGUgKGh0dHA6Ly9zaXp6bGVqcy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3VtZW50U29y
dGVyID0gKHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBv
c2l0aW9uKSByZXR1cm4gMDtcblx0XHRyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihi
KSAmIDQgPyAtMSA6IGEgPT09IGIgPyAwIDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgnIGluIHJv
b3QpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJj
ZUluZGV4KSByZXR1cm4gMDtcblx0XHRyZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5k
ZXg7XG5cdH0gOiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0
aWYgKCFhLm93bmVyRG9jdW1lbnQgfHwgIWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7XG5cdFx0
dmFyIGFSYW5nZSA9IGEub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2UgPSBiLm93
bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7XG5c
dFx0YVJhbmdlLnNldEVuZChhLCAwKTtcblx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7XG5cdFx0
YlJhbmdlLnNldEVuZChiLCAwKTtcblx0XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZS5TVEFSVF9UT19FTkQsIGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5cdHJvb3Qg
PSBudWxsO1xuXG5cdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tmZWF0dXJl
XSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxuXG52YXIg
cmVTaW1wbGVTZWxlY3RvciA9IC9eKFsjLl0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5cdHJlRW1w
dHlBdHRyaWJ1dGUgPSAvXFxbLitbKiReXT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FGYWlsRXhw
Q2FjaGUgPSB7fTtcblxubG9jYWwuc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lv
biwgYXBwZW5kLCBmaXJzdCl7XG5cblx0dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChmaXJzdCkg
PyBudWxsIDogKGFwcGVuZCB8fCBbXSk7XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7
XG5cdGVsc2UgaWYgKGNvbnRleHQubmF2aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVu
dDsgLy8gQ29udmVydCB0aGUgbm9kZSBmcm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRcblx0ZWxz
ZSBpZiAoIWNvbnRleHQubm9kZVR5cGUpIHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1cFxuXG5c
dHZhciBwYXJzZWQsIGksIG5vZGUsIG5vZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMg
PSB7fSxcblx0XHRoYXNPdGhlcnMgPSAhIShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCksXG5cdFx0
Y29udGV4dElzRG9jdW1lbnQgPSAoY29udGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRpZiAodGhp
cy5kb2N1bWVudCAhPT0gKGNvbnRleHRJc0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRleHQub3du
ZXJEb2N1bWVudCkpIHRoaXMuc2V0RG9jdW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZvaWQgZHVw
bGljYXRpbmcgaXRlbXMgYWxyZWFkeSBpbiB0aGUgYXBwZW5kIGFycmF5XG5cdGlmIChoYXNPdGhl
cnMpIGZvciAoaSA9IGZvdW5kLmxlbmd0aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJRChmb3Vu
ZFtpXSldID0gdHJ1ZTtcblxuXHQvLyBleHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0eXBlb2Yg
ZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdcblxuXHRc
dC8qPHNpbXBsZS1zZWxlY3RvcnMtb3ZlcnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2VsZWN0b3Ig
PSBleHByZXNzaW9uLm1hdGNoKHJlU2ltcGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNlbGVjdG9y
czogaWYgKHNpbXBsZVNlbGVjdG9yKXtcblxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVj
dG9yWzFdLFxuXHRcdFx0XHRuYW1lID0gc2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRcdGlmICgh
c3ltYm9sKXtcblxuXHRcdFx0XHRpZiAobmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5TdGFyR0VC
VE4pIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1sw
XSB8fCBudWxsO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRc
dFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZv
dW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0g
JyMnKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0Rv
Y3VtZW50KSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250ZXh0Lmdl
dEVsZW1lbnRCeUlkKG5hbWUpO1xuXHRcdFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3VuZDtcblx0
XHRcdFx0aWYgKHRoaXMuaWRHZXRzTmFtZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyku
bm9kZVZhbHVlICE9IG5hbWUpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGZp
cnN0KSByZXR1cm4gbm9kZSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5p
cXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0XHR9IGVs
c2UgaWYgKHN5bWJvbCA9PSAnLicpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVu
dCB8fCAoKCFjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJD
TikgJiYgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xu
XHRcdFx0XHRpZiAoY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tl
bkdFQkNOKXtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZShuYW1lKTtcblx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xu
XHRcdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRp
ZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNo
KG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbWF0
Y2hDbGFzcyA9IG5ldyBSZWdFeHAoJyhefFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4cChuYW1l
KSArJyhcXFxcc3wkKScpO1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnKicpO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRcdGlm
ICghKGNsYXNzTmFtZSAmJiBtYXRjaENsYXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRpbnVlO1xu
XHRcdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlmICghKGhh
c090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7
XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVy
cykgdGhpcy5zb3J0KGZvdW5kKTtcblx0XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6IGZvdW5k
O1xuXG5cdFx0fVxuXHRcdC8qPC9zaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cblx0XHQv
KjxxdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlmIChjb250
ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpe1xuXG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnRc
blx0XHRcdFx0fHwgcXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8vVE9ETzog
b25seSBza2lwIHdoZW4gZXhwcmVzc2lvbiBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5cdFx0XHRc
dHx8IHRoaXMuYnJva2VuTWl4ZWRDYXNlUVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkNoZWNr
ZWRRU0EgJiYgZXhwcmVzc2lvbi5pbmRleE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0XHRcdHx8
ICh0aGlzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChl
eHByZXNzaW9uKSlcblx0XHRcdFx0fHwgKCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0IHdoZW4g
IWNvbnRleHRJc0RvY3VtZW50IGFuZC4uLlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUgbXVsdGlw
bGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNlbGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNlIHdlIGN1
cnJlbnRseSBvbmx5IGZpeCBub24tZG9jdW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJl
c3Npb24gc2VsZWN0b3JzXG5cdFx0XHRcdFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcsJykgPiAt
MVxuXHRcdFx0XHQpXG5cdFx0XHRcdHx8IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkgYnJlYWsg
cXVlcnlTZWxlY3RvcjtcblxuXHRcdFx0dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2Nv
bnRleHQgPSBjb250ZXh0LCBjdXJyZW50SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50
KXtcblx0XHRcdFx0Ly8gbm9uLWRvY3VtZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8gY3JlZGl0
cyB0byBBbmRyZXcgRHVwb250XG5cdFx0XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJp
YnV0ZSgnaWQnKSwgc2xpY2tpZCA9ICdzbGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4dC5zZXRB
dHRyaWJ1dGUoJ2lkJywgc2xpY2tpZCk7XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMnICsgc2xp
Y2tpZCArICcgJyArIF9leHByZXNzaW9uO1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRleHQucGFy
ZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1
cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yKF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRcdFx0XHRl
bHNlIG5vZGVzID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtcblx0XHRc
dH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHRxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxO1xu
XHRcdFx0XHRicmVhayBxdWVyeVNlbGVjdG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0
aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkgX2NvbnRl
eHQuc2V0QXR0cmlidXRlKCdpZCcsIGN1cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBfY29udGV4
dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0O1xu
XHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNB
KSBmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9kZS5ub2Rl
TmFtZSA+ICdAJyAmJiAhKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkp
IGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVz
W2krK107KXtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQo
bm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVy
cykgdGhpcy5zb3J0KGZvdW5kKTtcblx0XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1cblx0XHQv
KjwvcXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMuU2xpY2su
cGFyc2UoZXhwcmVzc2lvbik7XG5cdFx0aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4gZm91bmQ7
XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVz
c2lvblxuXHRcdHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsg
Ly8gZXhwcmVzc2lvbiBpcyBhIHBhcnNlZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQgPSBleHBy
ZXNzaW9uO1xuXHR9IGVsc2UgaWYgKHRoaXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1l
bnQgfHwgY29udGV4dCwgZXhwcmVzc2lvbikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZVxuXHRc
dChmb3VuZCkgPyBmb3VuZC5wdXNoKGV4cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNzaW9uO1xu
XHRcdHJldHVybiBmb3VuZDtcblx0fSBlbHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJldHVybiBm
b3VuZDtcblx0fVxuXG5cdC8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVj
dG9ycz4qL1xuXG5cdC8vIGNhY2hlIGVsZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9yc1xuXG5c
dHRoaXMucG9zTlRIID0ge307XG5cdHRoaXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlzLnBvc05U
SFR5cGUgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9udGgtcHNl
dWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYgYXBwZW5k
IGlzIG51bGwgYW5kIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhw
cmVzc2lvbiB1c2UgcHVzaEFycmF5LCBlbHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVzaCA9ICgh
aGFzT3RoZXJzICYmIChmaXJzdCB8fCAocGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNlZC5leHBy
ZXNzaW9uc1swXS5sZW5ndGggPT0gMSkpKSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5wdXNoVUlE
O1xuXG5cdGlmIChmb3VuZCA9PSBudWxsKSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1bHQgZW5n
aW5lXG5cblx0dmFyIGosIG0sIG47XG5cdHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xp
c3QsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRlbXMsIGN1
cnJlbnRFeHByZXNzaW9uLCBjdXJyZW50Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNl
ZC5leHByZXNzaW9ucztcblxuXHRzZWFyY2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lv
biA9IGV4cHJlc3Npb25zW2ldKTsgaSsrKSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9IGN1cnJl
bnRFeHByZXNzaW9uW2pdKTsgaisrKXtcblxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjon
ICsgY3VycmVudEJpdC5jb21iaW5hdG9yO1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9yXSkgY29u
dGludWUgc2VhcmNoO1xuXG5cdFx0dGFnICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8g
Y3VycmVudEJpdC50YWcgOiBjdXJyZW50Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRcdGlkICAg
ICAgICAgPSBjdXJyZW50Qml0LmlkO1xuXHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNz
TGlzdDtcblx0XHRjbGFzc2VzICAgID0gY3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0dHJpYnV0
ZXMgPSBjdXJyZW50Qml0LmF0dHJpYnV0ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJlbnRCaXQu
cHNldWRvcztcblx0XHRsYXN0Qml0ICAgID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lvbi5sZW5n
dGggLSAxKSk7XG5cblx0XHR0aGlzLmJpdFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChsYXN0Qml0
KXtcblx0XHRcdHRoaXMudW5pcXVlcyA9IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5kID0gZm91
bmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0dGhpcy5m
b3VuZCA9IFtdO1xuXHRcdH1cblxuXHRcdGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNbY29tYmlu
YXRvcl0oY29udGV4dCwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xh
c3NMaXN0KTtcblx0XHRcdGlmIChmaXJzdCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJl
YWsgc2VhcmNoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCkgZm9y
IChtID0gMCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRcdFx0XHR0
aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0aCkgYnJl
YWsgc2VhcmNoO1xuXHRcdFx0fSBlbHNlIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVu
Z3RoOyBtIDwgbjsgbSsrKSB0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBp
ZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9XG5cblx0
XHRjdXJyZW50SXRlbXMgPSB0aGlzLmZvdW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNvcnQgaWYg
dGhlcmUgYXJlIG5vZGVzIGluIGFwcGVuZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVz
c2lvbnMuXG5cdGlmIChoYXNPdGhlcnMgfHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGggPiAx
KSkgdGhpcy5zb3J0KGZvdW5kKTtcblxuXHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBu
dWxsKSA6IGZvdW5kO1xufTtcblxuLy8gVXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5sb2NhbC51
aWRrID0gJ3NsaWNrLXVuaXF1ZWlkJztcblxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9k
ZSl7XG5cdHZhciB1aWQgPSBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRpZiAoIXVp
ZCl7XG5cdFx0dWlkID0gdGhpcy51aWR4Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51
aWRrLCB1aWQpO1xuXHR9XG5cdHJldHVybiB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURIVE1MID0g
ZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlx
dWVOdW1iZXIgPSB0aGlzLnVpZHgrKyk7XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXRE
b2N1bWVudCBkb2N1bWVudFNvcnRlciBtZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5jdGlvbihy
ZXN1bHRzKXtcblx0aWYgKCF0aGlzLmRvY3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0cztcblx0
cmVzdWx0cy5zb3J0KHRoaXMuZG9jdW1lbnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07
XG5cbi8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5s
b2NhbC5jYWNoZU5USCA9IHt9O1xuXG5sb2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxkKik/KFth
LXpdKyk/KFsrLV1cXGQrKT8kLztcblxubG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1bmN0aW9u
KGFyZ3VtZW50KXtcblx0dmFyIHBhcnNlZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgp
O1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBhcnNlZFsy
XSB8fCBmYWxzZTtcblx0dmFyIGEgPSBwYXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0gJy0nKSBh
ID0gLTE7XG5cdHZhciBiID0gK3BhcnNlZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRcdChzcGVj
aWFsID09ICduJylcdD8ge2E6IGEsIGI6IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2RkJylcdD8g
e2E6IDIsIGI6IDF9IDpcblx0XHQoc3BlY2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBiOiAwfSA6
IHthOiAwLCBiOiBhfTtcblxuXHRyZXR1cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFy
c2VkKTtcbn07XG5cbmxvY2FsLmNyZWF0ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJs
aW5nLCBwb3NpdGlvbnMsIG9mVHlwZSl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBhcmd1bWVu
dCl7XG5cdFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhpc1twb3Np
dGlvbnNdW3VpZF0pe1xuXHRcdFx0dmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRc
dGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRbY2hpbGRd
LCBjb3VudCA9IDE7XG5cdFx0XHRpZiAob2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0g
bm9kZS5ub2RlTmFtZTtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlTmFtZSAh
PSBub2RlTmFtZSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0
VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkp
O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlVHlw
ZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQo
ZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5c
dFx0XHR9XG5cdFx0fVxuXHRcdGFyZ3VtZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRcdHZhciBw
YXJzZWQgPSB0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQo
YXJndW1lbnQpO1xuXHRcdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIGEgPSBw
YXJzZWQuYSwgYiA9IHBhcnNlZC5iLCBwb3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtcblx0XHRp
ZiAoYSA9PSAwKSByZXR1cm4gYiA9PSBwb3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRcdGlmIChw
b3MgPCBiKSByZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwgcG9zKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDtcblx0
fTtcbn07XG5cbi8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3Jz
PiovXG5cbmxvY2FsLnB1c2hBcnJheSA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1c2gobm9k
ZSk7XG59O1xuXG5sb2NhbC5wdXNoVUlEID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtc
blx0aWYgKCF0aGlzLnVuaXF1ZXNbdWlkXSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5pcXVlc1t1
aWRdID0gdHJ1ZTtcblx0XHR0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5cbmxvY2Fs
Lm1hdGNoTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMuaXNIVE1M
RG9jdW1lbnQgJiYgdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7XG5cdFx0
XHRyZXR1cm4gdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5y
ZXBsYWNlKC9cXFsoW149XSspPVxccyooW14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQxPVwiJDJc
Il0nKSk7XG5cdFx0fSBjYXRjaCAobWF0Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBhcnNlZCA9
IHRoaXMuU2xpY2sucGFyc2Uoc2VsZWN0b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7
XG5cblx0Ly8gc2ltcGxlIChzaW5nbGUpIHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBw
YXJzZWQuZXhwcmVzc2lvbnMsIHNpbXBsZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50RXhwcmVz
c2lvbjtcblx0Zm9yIChpID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0p
OyBpKyspe1xuXHRcdGlmIChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5cdFx0XHR2
YXIgZXhwID0gY3VycmVudEV4cHJlc3Npb25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRjaFNlbGVj
dG9yKG5vZGUsICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcudG9VcHBl
ckNhc2UoKSwgZXhwLmlkLCBleHAuY2xhc3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5wc2V1ZG9z
KSkgcmV0dXJuIHRydWU7XG5cdFx0XHRzaW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxuXHR9XG5c
blx0aWYgKHNpbXBsZUV4cENvdW50ZXIgPT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xu
XG5cdHZhciBub2RlcyA9IHRoaXMuc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07
XG5cdGZvciAoaSA9IDA7IGl0ZW0gPSBub2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0gPT09IG5v
ZGUpIHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2FsLm1hdGNo
UHNldWRvID0gZnVuY3Rpb24obm9kZSwgbmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNldWRvTmFt
ZSA9ICdwc2V1ZG86JyArIG5hbWU7XG5cdGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1cm4gdGhp
c1twc2V1ZG9OYW1lXShub2RlLCBhcmd1bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0aGlzLmdl
dEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcblx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9
PSBhdHRyaWJ1dGUgOiAhIWF0dHJpYnV0ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0b3IgPSBm
dW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0
aWYgKHRhZyl7XG5cdFx0dmFyIG5vZGVOYW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2Rl
Lm5vZGVOYW1lIDogbm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0YWcgPT0g
JyonKXtcblx0XHRcdGlmIChub2RlTmFtZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9y
IGNvbW1lbnQgbm9kZXMgYW5kIGNsb3NlZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAo
bm9kZU5hbWUgIT0gdGFnKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlkICYm
IG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcpICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIGks
IHBhcnQsIGNscztcblx0aWYgKGNsYXNzZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3RoOyBpLS07
KXtcblx0XHRjbHMgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0XHRpZiAo
IShjbHMgJiYgY2xhc3Nlc1tpXS5yZWdleHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlO1xuXHR9
XG5cdGlmIChhdHRyaWJ1dGVzKSBmb3IgKGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0cGFydCA9IGF0dHJpYnV0ZXNbaV07XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50
ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1
dGUobm9kZSwgcGFydC5rZXkpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVkb3MpIGZv
ciAoaSA9IHBzZXVkb3MubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tpXTtcblx0
XHRpZiAoIXRoaXMubWF0Y2hQc2V1ZG8obm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1
cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG52YXIgY29tYmluYXRvcnMgPSB7
XG5cblx0JyAnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zLCBjbGFzc0xpc3QpeyAvLyBhbGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxuXG5cdFx0
dmFyIGksIGl0ZW0sIGNoaWxkcmVuO1xuXG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpe1xu
XHRcdFx0Z2V0QnlJZDogaWYgKGlkKXtcblx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhp
cy5pZEdldHNOYW1lICYmIGl0ZW0gJiYgaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVW
YWx1ZSAhPSBpZCkpe1xuXHRcdFx0XHRcdC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhlIGVsZW1l
bnRzIHdpdGggdGhhdCBuYW1lIG9yIGlkIGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8gaWYgdGhl
cmVzIGp1c3Qgb25lIGl0IHdpbGwgcmV0dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUg
YSBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5cdFx0XHRc
dFx0aWYgKCFjaGlsZHJlbikgcmV0dXJuO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5bMF0pIGNo
aWxkcmVuID0gW2NoaWxkcmVuXTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRy
ZW5baSsrXTspe1xuXHRcdFx0XHRcdFx0dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9k
ZSgnaWQnKTtcblx0XHRcdFx0XHRcdGlmIChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBp
ZCl7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1c
blx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgh
aXRlbSl7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1
cm4sIGVsc2Ugd2Ugd2lsbCB0cnkgR0VCVE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsXG5c
dFx0XHRcdFx0aWYgKHRoaXMuY29udGFpbnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuO1xuXHRc
dFx0XHRcdGVsc2UgYnJlYWsgZ2V0QnlJZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmRvY3Vt
ZW50ICE9PSBub2RlICYmICF0aGlzLmNvbnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47XG5cdFx0
XHRcdHRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBpZiAoY2xh
c3NlcyAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04p
e1xuXHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xp
c3Quam9pbignICcpKTtcblx0XHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3Ro
KSkgYnJlYWsgZ2V0QnlDbGFzcztcblx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVu
W2krK107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywgcHNldWRv
cyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6IHtcblx0
XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRcdFx0aWYg
KCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5cdFx0XHRp
ZiAoIXRoaXMuYnJva2VuU3RhckdFQlROKSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChpID0gMDsg
aXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rpb24obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBjaGls
ZHJlblxuXHRcdGlmICgobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRcdGlmIChu
b2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcp
KTtcblx0fSxcblxuXHQnKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
Lm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2go
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVh
aztcblx0XHR9XG5cdH0sXG5cblx0J14nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5m
aXJzdENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEp
IHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rpb24obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGlu
Z3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9k
ZS5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChu
b2RlKTtcblx0XHRcdGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlz
LmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcrKyc6IGZ1
bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBu
ZXh0IHNpYmxpbmcgYW5kIHByZXZpb3VzIHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5hdG9yOisn
XShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlz
Wydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdH0sXG5cblx0J35+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxp
bmdzXG5cdFx0dGhpc1snY29tYmluYXRvcjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzogZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBw
YXJlbnQgbm9kZXMgdXAgdG8gZG9jdW1lbnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVu
dE5vZGUpKSBpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6IGZ1bmN0
aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJl
Y3QgcGFyZW50IChvbmUgbGV2ZWwpXG5cdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRp
ZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9uKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJs
aW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5u
b2RlVHlwZSA9PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnIV4n
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gbGFzdCBjaGlsZFxuXHRcdG5vZGUgPSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7
XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0
b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHR9XG5cdH0sXG5cblx0JyF+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2Rl
ID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEp
IGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYg
KHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRd
ID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBjb21iaW5h
dG9ycykgbG9jYWxbJ2NvbWJpbmF0b3I6JyArIGNdID0gY29tYmluYXRvcnNbY107XG5cbnZhciBw
c2V1ZG9zID0ge1xuXG5cdC8qPHBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHknOiBmdW5j
dGlvbihub2RlKXtcblx0XHR2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0cmV0dXJu
ICEoY2hpbGQgJiYgY2hpbGQubm9kZVR5cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBu
b2RlLnRleHRDb250ZW50IHx8ICcnKS5sZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1bmN0aW9u
KG5vZGUsIGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhw
cmVzc2lvbik7XG5cdH0sXG5cblx0J2NvbnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7XG5c
dFx0cmV0dXJuIChub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5pbmRl
eE9mKHRleHQpID4gLTE7XG5cdH0sXG5cblx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2Rl
VHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xh
c3QtY2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRT
aWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVy
biB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFy
IHByZXYgPSBub2RlO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkg
aWYgKHByZXYubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9k
ZTtcblx0XHR3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5
cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPG50
aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBz
ZXVkbygnZmlyc3RDaGlsZCcsICduZXh0U2libGluZycsICdwb3NOVEgnKSxcblxuXHQnbnRoLWxh
c3QtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1Np
YmxpbmcnLCAncG9zTlRITGFzdCcpLFxuXG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5U
SFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSks
XG5cblx0J250aC1sYXN0LW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGls
ZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxuXHQnaW5k
ZXgnOiBmdW5jdGlvbihub2RlLCBpbmRleCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgt
Y2hpbGQnXShub2RlLCAnJyArIChpbmRleCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJu
Jyk7XG5cdH0sXG5cblx0J29kZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydw
c2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRoLXBzZXVk
by1zZWxlY3RvcnM+Ki9cblxuXHQvKjxvZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQn
Zmlyc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUu
bm9kZU5hbWU7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAo
bm9kZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVl
O1xuXHR9LFxuXG5cdCdsYXN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9k
ZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxp
bmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJl
dHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0
XHR2YXIgcHJldiA9IG5vZGUsIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAo
KHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09IG5vZGVO
YW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4
dCA9IG5leHQubmV4dFNpYmxpbmcpKSBpZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0
dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBlLXBzZXVk
by1zZWxlY3RvcnM+Ki9cblxuXHQvLyBjdXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVkJzogZnVu
Y3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdkaXNh
YmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xuXHR9LFxu
XG5cdCdjaGVja2VkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hlY2tlZCB8
fCBub2RlLnNlbGVjdGVkO1xuXHR9LFxuXG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHJldHVybiB0aGlzLmlzSFRNTERvY3VtZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCA9PT0gbm9kZSAmJiAobm9kZS5ocmVmIHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0dHJpYnV0
ZShub2RlLCAndGFiaW5kZXgnKSk7XG5cdH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihub2RlKXtc
blx0XHRyZXR1cm4gKG5vZGUgPT09IHRoaXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVjdGVkJzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKjwv
cHNldWRvLXNlbGVjdG9ycz4qL1xufTtcblxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsn
cHNldWRvOicgKyBwXSA9IHBzZXVkb3NbcF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9kc1xuXG52
YXIgYXR0cmlidXRlR2V0dGVycyA9IGxvY2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5cblx0J2Zv
cic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0
bWxGb3IgOiB0aGlzLmdldEF0dHJpYnV0ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYnOiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiAoJ2hyZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUo
J2hyZWYnLCAyKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0J3N0eWxl
JzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHlsZS5jc3NU
ZXh0IDogdGhpcy5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmluZGV4Jzog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9k
ZSgndGFiaW5kZXgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9k
ZS5zcGVjaWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9LFxuXG5c
dCd0eXBlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUn
KTtcblx0fSxcblxuXHQnbWF4bGVuZ3RoJzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRl
Tm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0dXJuIChh
dHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUu
bm9kZVZhbHVlIDogbnVsbDtcblx0fVxuXG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdU
SCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5n
dGg7XG5cbi8vIFNsaWNrXG5cbnZhciBTbGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sg
fHwge30pO1xuXG5TbGljay52ZXJzaW9uID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmluZGVyXG5c
blNsaWNrLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7XG5c
dHJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtcbn07XG5c
blNsaWNrLmZpbmQgPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0dXJuIGxv
Y2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5cbi8vIFNs
aWNrIGNvbnRhaW5tZW50IGNoZWNrZXJcblxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlvbihjb250
YWluZXIsIG5vZGUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChjb250YWluZXIpO1xuXHRyZXR1cm4g
bG9jYWwuY29udGFpbnMoY29udGFpbmVyLCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0
ZSBnZXR0ZXJcblxuU2xpY2suZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5c
dGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5v
ZGUsIG5hbWUpO1xufTtcblxuU2xpY2suaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFt
ZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFzQXR0cmli
dXRlKG5vZGUsIG5hbWUpO1xufTtcblxuLy8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5tYXRjaCA9
IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJl
dHVybiBmYWxzZTtcblx0aWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkgcmV0dXJu
IHRydWU7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwubWF0Y2hO
b2RlKG5vZGUsIHNlbGVjdG9yKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3Nvclxu
XG5TbGljay5kZWZpbmVBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxv
Y2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5T
bGljay5sb29rdXBBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0dXJuIGxv
Y2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8gYWNjZXNz
b3JcblxuU2xpY2suZGVmaW5lUHNldWRvID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbFsn
cHNldWRvOicgKyBuYW1lXSA9IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRyZXR1cm4g
Zm4uY2FsbChub2RlLCBhcmd1bWVudCk7XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xp
Y2subG9va3VwUHNldWRvID0gZnVuY3Rpb24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBsb2NhbFsn
cHNldWRvOicgKyBuYW1lXTtcblx0aWYgKHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50
KXtcblx0XHRyZXR1cm4gcHNldWRvLmNhbGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1
cm4gbnVsbDtcbn07XG5cbi8vIFNsaWNrIG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGljay5vdmVy
cmlkZSA9IGZ1bmN0aW9uKHJlZ2V4cCwgZm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdleHAsIGZu
KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1MO1xuXG5T
bGljay51aWRPZiA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChu
b2RlKTtcbn07XG5cbmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5h
cHBseSgvKjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBv
cnRzIDogLyo8L0NvbW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudFxu
XG5kZXNjcmlwdGlvbjogT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBNb29Ub29s
cy4gQ29udGFpbnMgdGhlIGRvbGxhciBmdW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rpb24sIGFu
ZCBhbiBoYW5kZnVsIG9mIGNyb3NzLWJyb3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0byBsZXQg
eW91IGVhc2lseSB3b3JrIHdpdGggSFRNTCBFbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0cmluZywg
RnVuY3Rpb24sIE9iamVjdCwgTnVtYmVyLCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl1cblxu
cHJvdmlkZXM6IFtFbGVtZW50LCBFbGVtZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0b3JzXVxu
XG4uLi5cbiovXG5cbnZhciBFbGVtZW50ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnLCBw
cm9wcyl7XG5cdHZhciBrb25zdHJ1Y3RvciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107XG5c
dGlmIChrb25zdHJ1Y3RvcikgcmV0dXJuIGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYgKHR5cGVv
ZiB0YWcgIT0gJ3N0cmluZycpIHJldHVybiBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7XG5c
blx0aWYgKCFwcm9wcykgcHJvcHMgPSB7fTtcblxuXHRpZiAoISgvXltcXHctXSskLykudGVzdCh0
YWcpKXtcblx0XHR2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9uc1swXVsw
XTtcblx0XHR0YWcgPSAocGFyc2VkLnRhZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnO1xu
XHRcdGlmIChwYXJzZWQuaWQgJiYgcHJvcHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQu
aWQ7XG5cblx0XHR2YXIgYXR0cmlidXRlcyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRcdGlmIChh
dHRyaWJ1dGVzKSBmb3IgKHZhciBhdHRyLCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYgKHByb3Bz
W2F0dHIua2V5XSAhPSBudWxsKSBjb250aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFsdWUgIT0g
bnVsbCAmJiBhdHRyLm9wZXJhdG9yID09ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1
ZTtcblx0XHRcdGVsc2UgaWYgKCFhdHRyLnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1th
dHRyLmtleV0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0ICYmIHBy
b3BzWydjbGFzcyddID09IG51bGwpIHByb3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNzTGlzdC5q
b2luKCcgJyk7XG5cdH1cblxuXHRyZXR1cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3Bz
KTtcbn07XG5cblxuaWYgKEJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90eXBlID0g
QnJvd3Nlci5FbGVtZW50LnByb3RvdHlwZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWlyZSB0aGUg
d3JhcHBpbmcuXG5cdEVsZW1lbnQucHJvdG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmly
ZUV2ZW50KXtcblx0XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0cmV0dXJu
IGZpcmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShFbGVtZW50
LnByb3RvdHlwZS5maXJlRXZlbnQpO1xufVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVsZW1lbnQp
Lm1pcnJvcihmdW5jdGlvbihuYW1lKXtcblx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0
dXJuO1xuXG5cdHZhciBvYmogPSB7fTtcblx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHR2
YXIgcmVzdWx0cyA9IFtdLCBhcmdzID0gYXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIg
ZWxlbWVudCA9IHRoaXNbaV0sIHJlc3VsdCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFw
cGx5KGVsZW1lbnQsIGFyZ3MpO1xuXHRcdFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9m
KHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50cykgPyBu
ZXcgRWxlbWVudHMocmVzdWx0cykgOiByZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRzLmltcGxl
bWVudChvYmopO1xufSk7XG5cbmlmICghQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wYXJl
bnQgPSBPYmplY3Q7XG5cblx0RWxlbWVudC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25zdHJ1Y3Rv
cic6IEVsZW1lbnQsXG5cdFx0JyRmYW1pbHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50Jyku
aGlkZSgpXG5cdH07XG5cblx0RWxlbWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtc
blx0XHRFbGVtZW50LlByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5cbkVsZW1l
bnQuQ29uc3RydWN0b3JzID0ge307XG5cblxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFt
ZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge1xu
XHRcdHByb3BlcnRpZXM6IFR5cGUuaXNPYmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlvbihvYmop
e1xuXHRcdFx0cmV0dXJuIChvYmogIT0gbnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgcHJv
cHMgPSBwYXJhbXMucHJvcGVydGllcyB8fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1zLmlmcmFt
ZSkgaWZyYW1lID0gZG9jdW1lbnQuaWQocGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxvYWQgPSBw
cm9wcy5vbmxvYWQgfHwgZnVuY3Rpb24oKXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2FkO1xuXHRw
cm9wcy5pZCA9IHByb3BzLm5hbWUgPSBbcHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChp
ZnJhbWUuaWQgfHwgaWZyYW1lLm5hbWUpIDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCld
LnBpY2soKTtcblx0aWZyYW1lID0gbmV3IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUnLCBwcm9w
cyk7XG5cblx0dmFyIG9uTG9hZCA9IGZ1bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwoaWZyYW1l
LmNvbnRlbnRXaW5kb3cpO1xuXHR9O1xuXG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkg
b25Mb2FkKCk7XG5cdGVsc2UgaWZyYW1lLmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcblx0
cmV0dXJuIGlmcmFtZTtcbn0pO1xuXG52YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVu
Y3Rpb24obm9kZXMpe1xuXHRpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2YXIgdW5p
cXVlcyA9IHt9LCBub2RlO1xuXHRcdGZvciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTsp
e1xuXHRcdFx0dmFyIHVpZCA9IFNsaWNrLnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1bmlxdWVz
W3VpZF0pe1xuXHRcdFx0XHR1bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnB1c2go
bm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5cGUgPSB7
bGVuZ3RoOiAwfTtcbkVsZW1lbnRzLnBhcmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgnRWxlbWVu
dHMnLCBFbGVtZW50cykuaW1wbGVtZW50KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlciwg
YmluZCl7XG5cdFx0aWYgKCFmaWx0ZXIpIHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBuZXcgRWxl
bWVudHMoQXJyYXkuZmlsdGVyKHRoaXMsICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBm
dW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5cdFx0fSA6
IGZpbHRlciwgYmluZCkpO1xuXHR9LnByb3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFy
Z3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5p
ZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0gaXRlbTtc
blx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdHVuc2hpZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0Zm9y
ICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZh
ciBpdGVtID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSBpdGVt
cy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQu
YXBwbHkodGhpcywgaXRlbXMpO1xuXHR9LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIG5ld0VsZW1lbnRzID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIg
aXRlbSA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkg
bmV3RWxlbWVudHMuYXBwZW5kKGl0ZW0pO1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0
ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgpLFxuXG5c
dGFwcGVuZDogZnVuY3Rpb24oY29sbGVjdGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBj
b2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtc
blx0XHR3aGlsZSAodGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LnByb3RlY3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlvbigpe1xu
XG4vLyBGRiwgSUVcbnZhciBzcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBvYmplY3Qg
PSB7JzAnOiAwLCAnMSc6IDEsIGxlbmd0aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVjdCwgMSwg
MSk7XG5pZiAob2JqZWN0WzFdID09IDEpIEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNlJywgZnVu
Y3Rpb24oKXtcblx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0ID0gc3Bs
aWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5n
dGgpIGRlbGV0ZSB0aGlzW2xlbmd0aC0tXTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJvdGVjdCgp
KTtcblxuQXJyYXkuZm9yRWFjaE1ldGhvZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xuXHRFbGVt
ZW50cy5pbXBsZW1lbnQobmFtZSwgbWV0aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3IoRWxlbWVu
dHMpO1xuXG4vKjxsdElFOD4qL1xudmFyIGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtcbnRyeSB7
XG5cdGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8
aW5wdXQgbmFtZT14PicpLm5hbWUgPT0gJ3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFyIGVzY2Fw
ZVF1b3RlcyA9IGZ1bmN0aW9uKGh0bWwpe1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgv
Ji9nLCAnJmFtcDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0SUU4Piov
XG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUg
ZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5c
dHRyeSB7XG5cdFx0ZGl2LmlubmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztc
blx0XHRmbGFnID0gISFkaXYuaW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBm
bGFnO1xufSkoKTtcbi8qPC9sdElFOT4qL1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5l
d0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywgcHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5cdFx0XHRp
ZiAocHJvcHMuY2hlY2tlZCAhPSBudWxsKSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNo
ZWNrZWQ7XG5cdFx0XHRpZiAoKHByb3BzLnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBl
ID09ICdyYWRpbycpICYmIHByb3BzLnZhbHVlID09IG51bGwpIHByb3BzLnZhbHVlID0gJ29uJztc
blx0XHRcdC8qPGx0SUU5PiovIC8vIElFIG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBiZWZvcmUg
Y2hhbmdpbmcgY29udGVudCBvZiBzdHlsZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNoYW5nZVN0
eWxlSFRNTCAmJiB0YWcgPT0gJ3N0eWxlJyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1lbnQuc2V0
QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSBk
ZWxldGUgcHJvcHMudHlwZTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5z
ZXQocHJvcHMpO1xuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxsdElFOD4q
Ly8vIEZpeCBmb3IgcmVhZG9ubHkgbmFtZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOFxu
XHRcdFx0aWYgKGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9ICc8JyAr
IHRhZztcblx0XHRcdFx0aWYgKHByb3BzLm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsgZXNjYXBl
UXVvdGVzKHByb3BzLm5hbWUpICsgJ1wiJztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIHRhZyAr
PSAnIHR5cGU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0XHRcdFx0
dGFnICs9ICc+Jztcblx0XHRcdFx0ZGVsZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBw
cm9wcy50eXBlO1xuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzLmlkKHRoaXMuY3JlYXRlRWxlbWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9XG5cbn0p
O1xuXG59KSgpO1xuXG4oZnVuY3Rpb24oKXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtcblNsaWNr
LnVpZE9mKGRvY3VtZW50KTtcblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdUZXh0Tm9k
ZTogZnVuY3Rpb24odGV4dCl7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7
XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndpbmRvdztc
blx0fSxcblxuXHRpZDogKGZ1bmN0aW9uKCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5cblx0XHRc
dHN0cmluZzogZnVuY3Rpb24oaWQsIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBTbGljay5m
aW5kKGRvYywgJyMnICsgaWQucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0XHRcdFx0
cmV0dXJuIChpZCkgPyB0eXBlcy5lbGVtZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0XHRcdH0s
XG5cblx0XHRcdGVsZW1lbnQ6IGZ1bmN0aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRTbGljay51
aWRPZihlbCk7XG5cdFx0XHRcdGlmICghbm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpv
YmplY3R8ZW1iZWQpJC9pKS50ZXN0KGVsLnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIgZmlyZUV2
ZW50ID0gZWwuZmlyZUV2ZW50O1xuXHRcdFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBpbiBJRTcs
IG9yIGVsc2UgY3Jhc2hcblx0XHRcdFx0XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24odHlwZSwg
ZXZlbnQpe1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7XG5cdFx0
XHRcdFx0fTtcblx0XHRcdFx0XHRPYmplY3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3RvdHlwZSk7
XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0b2JqZWN0
OiBmdW5jdGlvbihvYmosIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0VsZW1lbnQp
IHJldHVybiB0eXBlcy5lbGVtZW50KG9iai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtcblx0XHRc
dFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4dG5vZGUg
PSB0eXBlcy53aGl0ZXNwYWNlID0gdHlwZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQgPSBmdW5j
dGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVu
Y3Rpb24oZWwsIG5vY2FzaCwgZG9jKXtcblx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5ICYmIGVs
LnVuaXF1ZU51bWJlcikgcmV0dXJuIGVsO1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YoZWwpO1xu
XHRcdFx0cmV0dXJuICh0eXBlc1t0eXBlXSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNoLCBkb2Mg
fHwgZG9jdW1lbnQpIDogbnVsbDtcblx0XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlmICh3aW5k
b3cuJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5jKXtcblx0
cmV0dXJuIGRvY3VtZW50LmlkKGVsLCBuYywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxuV2luZG93
LmltcGxlbWVudCh7XG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXMuZG9jdW1lbnQ7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9XG5cbn0pO1xuXG5bRG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVt
ZW50Jywge1xuXG5cdGdldEVsZW1lbnRzOiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1
cm4gU2xpY2suc2VhcmNoKHRoaXMsIGV4cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5cdH0sXG5c
blx0Z2V0RWxlbWVudDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50
LmlkKFNsaWNrLmZpbmQodGhpcywgZXhwcmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52YXIgY29u
dGFpbnMgPSB7Y29udGFpbnM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xpY2suY29u
dGFpbnModGhpcywgZWxlbWVudCk7XG59fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlucykgRG9j
dW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JykuY29udGFpbnMpIEVsZW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5cbi8vIHRy
ZWUgd2Fsa2luZ1xuXG52YXIgaW5qZWN0Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24s
IGNvbWJpbmF0b3Ipe1xuXHRpZiAoIWV4cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yO1xuXG5c
dGV4cHJlc3Npb24gPSBPYmplY3QuY2xvbmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpO1xuXG5c
dHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkg
PSBleHByZXNzaW9ucy5sZW5ndGg7IGktLTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0uY29tYmlu
YXRvciA9IGNvbWJpbmF0b3I7XG5cblx0cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5PYmplY3Qu
Zm9yRWFjaCh7XG5cdGdldE5leHQ6ICd+Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5cdGdldFBh
cmVudDogJyEnXG59LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50Lmlt
cGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdl
dEVsZW1lbnQoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0p
O1xufSk7XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRnZXRBbGxQ
cmV2aW91czogJyF+Jyxcblx0Z2V0U2libGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVuOiAnPics
XG5cdGdldFBhcmVudHM6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0
RWxlbWVudC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRFbGVtZW50cyhpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0
b3IpKTtcblx0fSk7XG59KTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZpcnN0OiBm
dW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNo
KHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9LFxuXG5c
dGdldExhc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChT
bGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKS5nZXRM
YXN0KCkpO1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cy5vd25lckRvY3VtZW50LndpbmRvdztcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVsZW1lbnRC
eUlkOiBmdW5jdGlvbihpZCl7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhp
cywgJyMnICsgKCcnICsgaWQpLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xuXHR9LFxu
XG5cdG1hdGNoOiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJlc3Npb24g
fHwgU2xpY2subWF0Y2godGhpcywgZXhwcmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxuXG5pZiAo
d2luZG93LiQkID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0
b3Ipe1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9mIHNlbGVj
dG9yID09ICdzdHJpbmcnKSByZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHNlbGVj
dG9yLCBuZXcgRWxlbWVudHMpO1xuXHRcdGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVj
dG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJuIG5ldyBF
bGVtZW50cyhhcmd1bWVudHMpO1xufSk7XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5zZXJ0ZXJz
ID0ge1xuXG5cdGJlZm9yZTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBh
cmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0
QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQpO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbihjb250
ZXh0LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRc
dGlmIChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2li
bGluZyk7XG5cdH0sXG5cblx0Ym90dG9tOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0
XHRlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVuY3Rpb24o
Y29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxl
bWVudC5maXJzdENoaWxkKTtcblx0fVxuXG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0
ZXJzLmJvdHRvbTtcblxuXG5cbi8vIGdldFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxudmFyIHBy
b3BlcnR5R2V0dGVycyA9IHt9LCBwcm9wZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJvcGVydGll
c1xuXG52YXIgcHJvcGVydGllcyA9IHt9O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBlJywgJ3Zh
bHVlJywgJ2RlZmF1bHRWYWx1ZScsICdhY2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAnY2VsbFNw
YWNpbmcnLCAnY29sU3BhbicsXG5cdCdmcmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4
JywgJ3VzZU1hcCdcbl0sIGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cHJvcGVydGllc1twcm9wZXJ0
eS50b0xvd2VyQ2FzZSgpXSA9IHByb3BlcnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRtbCA9ICdp
bm5lckhUTUwnO1xucHJvcGVydGllcy50ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpLnRleHRDb250ZW50ID09IG51bGwpID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVudCc7XG5c
bk9iamVjdC5mb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5cdHByb3Bl
cnR5U2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbcmVhbF0g
PSB2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXtc
blx0XHRyZXR1cm4gbm9kZVtyZWFsXTtcblx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xucHJvcGVy
dHlTZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZh
bHVlKXtcblx0XHRpZiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1s
JywgdmFsdWUpO1xuXHRcdGVsc2Ugbm9kZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7XG5cdH07
XG59KShwcm9wZXJ0eVNldHRlcnMudGV4dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1
bmN0aW9uKGdldHRlcil7XG5cdHJldHVybiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5v
ZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUp
O1xuXHR9O1xufSkocHJvcGVydHlHZXR0ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5cbi8vIEJv
b2xlYW5zXG5cbnZhciBib29scyA9IFtcblx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lzbWFwJywg
J2RlY2xhcmUnLCAnbm9zaGFkZScsICdjaGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3JlYWRPbmx5
JywgJ211bHRpcGxlJywgJ3NlbGVjdGVkJywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywgJ2RlZmF1
bHRDaGVja2VkJywgJ2F1dG9mb2N1cycsICdjb250cm9scycsICdhdXRvcGxheScsXG5cdCdsb29w
J1xuXTtcblxudmFyIGJvb2xlYW5zID0ge307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBmdW5jdGlv
bihib29sKXtcblx0dmFyIGxvd2VyID0gYm9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29sZWFuc1ts
b3dlcl0gPSBib29sO1xuXHRwcm9wZXJ0eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSwg
dmFsdWUpe1xuXHRcdG5vZGVbYm9vbF0gPSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRl
cnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29sXTtcblx0
fTtcbn0pO1xuXG4vLyBTcGVjaWFsIGNhc2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0
ZXJzLCB7XG5cblx0J2NsYXNzJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnY2xhc3NO
YW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0
QXR0cmlidXRlKCdjbGFzcycsIHZhbHVlKTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rpb24obm9k
ZSwgdmFsdWUpe1xuXHRcdCgnaHRtbEZvcicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3IgPSB2YWx1
ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdmb3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0eWxlJzog
ZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5bGUuY3Nz
VGV4dCA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xuXHR9LFxu
XG5cdCd2YWx1ZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVlID0gKHZh
bHVlICE9IG51bGwpID8gdmFsdWUgOiAnJztcblx0fVxuXG59KTtcblxucHJvcGVydHlHZXR0ZXJz
WydjbGFzcyddID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScgaW4gbm9k
ZSkgPyBub2RlLmNsYXNzTmFtZSB8fCBudWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7
XG59O1xuXG4vKiA8d2Via2l0PiAqL1xudmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
YnV0dG9uJyk7XG4vLyBJRSBzZXRzIHR5cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xudHJ5IHsg
ZWwudHlwZSA9ICdidXR0b24nOyB9IGNhdGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAnYnV0dG9u
JykgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdG5vZGUu
c2V0QXR0cmlidXRlKCd0eXBlJywgdmFsdWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwvd2Via2l0
PiAqL1xuXG4vKjxJRT4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNl
dCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rp
b24oKXtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0
ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7
bWFyZ2luOiAwcHg7fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAo
ZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlucHV0ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVlLCBodG1s
NUlucHV0U3VwcG9ydDtcblxuLy8gIzIxNzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5wdXQudHlw
ZSA9ICdzdWJtaXQnO1xudm9sYXRpbGVJbnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0gJ3QnO1xu
XG4vLyAjMjQ0MyAtIElFIHRocm93cyBcIkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRyeWluZyB0
byB1c2UgaHRtbDUgaW5wdXQgdHlwZXNcbnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7XG5cdGlu
cHV0LnR5cGUgPSAnZW1haWwnO1xuXHRodG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0g
J2VtYWlsJztcbn0gY2F0Y2ggKGUpe31cblxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9sYXRpbGVJ
bnB1dFZhbHVlIHx8ICFodG1sNUlucHV0U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBm
dW5jdGlvbihub2RlLCB0eXBlKXtcblx0dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2RlLnZhbHVl
O1xuXHRcdG5vZGUudHlwZSA9IHR5cGU7XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGNh
dGNoIChlKXt9XG59O1xuLyo8L0lFPiovXG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSAq
L1xuXG4vKiA8bHRJRTk+ICovXG52YXIgcG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24o
ZGl2KXtcblx0ZGl2LnJhbmRvbSA9ICdhdHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5nZXRBdHRy
aWJ1dGUoJ3JhbmRvbScpID09ICdhdHRyaWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpKTtcblxudmFyIGhhc0Nsb25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xuXHR0ZXN0
LmlubmVySFRNTCA9ICc8b2JqZWN0PjxwYXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZhbHVlPVwi
dGhlIHVua25vd25cIiAvPjwvb2JqZWN0Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9kZSh0cnVl
KS5maXJzdENoaWxkLmNoaWxkTm9kZXMubGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSk7XG4vKiA8L2x0SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0ID0gISFk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFzc2VzID0g
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1lIHx8ICcn
KS5jbGVhbigpLnNwbGl0KCcgJyksIHVuaXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNzTmFtZXMu
ZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0gJycgJiYg
IXVuaXF1ZXNbY2xhc3NOYW1lXSkgcmV0dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNsYXNzTmFt
ZTtcblx0fSk7XG59O1xuXG52YXIgYWRkVG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0
dGhpcy5jbGFzc0xpc3QuYWRkKG5hbWUpO1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFzc0xpc3Qg
PSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xufTtcblxu
RWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1
ZSl7XG5cdFx0dmFyIHNldHRlciA9IHByb3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCld
O1xuXHRcdGlmIChzZXR0ZXIpe1xuXHRcdFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0XHR9IGVs
c2Uge1xuXHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0dmFyIGF0dHJpYnV0ZVdoaXRlTGlzdDtc
blx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhp
cy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdoaXRlTGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJRTk+
ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRy
aWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVz
R2V0QXR0cmlidXRlKSBkZWxldGUgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdO1xuXHRcdFx0XHQv
KiA8L2x0SUU5PiAqL1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUo
bmFtZSwgJycgKyB2YWx1ZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBv
bGx1dGVzR2V0QXR0cmlidXRlKSBhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0gPSB0cnVlO1xuXHRc
dFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRzZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRmb3IgKHZh
ciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlcykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0
dHJpYnV0ZXNbYXR0cmlidXRlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0UHJv
cGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdldHRlcnNb
bmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMp
O1xuXHRcdC8qIDxsdElFOT4gKi9cblx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpe1xuXHRc
dFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0ZVdoaXRl
TGlzdCA9IHRoaXMucmV0cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHRp
ZiAoIWF0dHIpIHJldHVybiBudWxsO1xuXHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAhYXR0cmli
dXRlV2hpdGVMaXN0W25hbWVdKXtcblx0XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRlckhUTUw7
XG5cdFx0XHRcdC8vIHNlZ21lbnQgYnkgdGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24g
b2YgYXR0cmlidXRlIG5hbWVcblx0XHRcdFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRlci5zZWFy
Y2goL1xcLz9bJ1wiXT8+KD8hW148XSo8WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAwKSByZXR1
cm4gbnVsbDtcblx0XHRcdFx0YXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRc
dH1cblx0XHR9XG5cdFx0LyogPC9sdElFOT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xpY2suZ2V0
QXR0cmlidXRlKHRoaXMsIG5hbWUpO1xuXHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xpY2suaGFz
QXR0cmlidXRlKHRoaXMsIG5hbWUpKSA/IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0Z2V0UHJv
cGVydGllczogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJndW1l
bnRzKTtcblx0XHRyZXR1cm4gYXJncy5tYXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcykuYXNzb2Np
YXRlKGFyZ3MpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0
XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRyZW1vdmVQ
cm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJl
bW92ZVByb3BlcnR5LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXQ6IGZ1
bmN0aW9uKHByb3AsIHZhbHVlKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRp
ZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQu
Y2FsbCh0aGlzLCB2YWx1ZSkgOiB0aGlzLnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtcblx0fS5v
dmVybG9hZFNldHRlcigpLFxuXG5cdGdldDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3Bl
cnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVydHkgJiYg
cHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVy
dHkocHJvcCk7XG5cdH0ub3ZlcmxvYWRHZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rpb24ocHJv
cCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChw
cm9wZXJ0eSAmJiBwcm9wZXJ0eS5lcmFzZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6
IHRoaXMucmVtb3ZlUHJvcGVydHkocHJvcCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
aGFzQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJu
IHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlvbihjbGFz
c05hbWUpe1xuXHRcdHJldHVybiBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlucyhjbGFz
c05hbWUpO1xuXHR9LFxuXG5cdGFkZENsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFz
c05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0
aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0
dGhpcy5jbGFzc05hbWUgPSBjbGFzc2VzKGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xhc3NOYW1l
KS5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGhh
c0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUp
LmZvckVhY2gocmVtb3ZlRnJvbUNsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcyh0
aGlzLmNsYXNzTmFtZSk7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1l
cy5lcmFzZSwgY2xhc3NOYW1lcyk7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVzLmpv
aW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rp
b24oY2xhc3NOYW1lLCBmb3JjZSl7XG5cdFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNlID0gIXRo
aXMuaGFzQ2xhc3MoY2xhc3NOYW1lKTtcblx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMuYWRkQ2xh
c3MoY2xhc3NOYW1lKSA6IHRoaXMucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRh
ZG9wdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQsIGVsZW1l
bnRzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7
XG5cdFx0aWYgKGxlbmd0aCA+IDEpIHBhcmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
Kyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTtc
blx0XHRcdGlmIChlbGVtZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxu
XG5cdFx0aWYgKGZyYWdtZW50KSB0aGlzLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGFwcGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXtc
blx0XHRyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0
KSwgd2hlcmUpO1xuXHR9LFxuXG5cdGdyYWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5z
ZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRoaXMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXtc
blx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKHRoaXMsIGRvY3VtZW50LmlkKGVsLCB0
cnVlKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0aW9uKGVs
KXtcblx0XHRlbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnROb2RlLnJl
cGxhY2VDaGlsZCh0aGlzLCBlbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcHM6
IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5c
dFx0cmV0dXJuIHRoaXMucmVwbGFjZXMoZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxcblxuXHRn
ZXRTZWxlY3RlZDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8vIFNhZmFy
aSAzLjIuMVxuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlv
bnMpLmZpbHRlcihmdW5jdGlvbihvcHRpb24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3Rl
ZDtcblx0XHR9KSk7XG5cdH0sXG5cblx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtcblx0XHR2
YXIgcXVlcnlTdHJpbmcgPSBbXTtcblx0XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0
LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rpb24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBlbC50eXBl
O1xuXHRcdFx0aWYgKCFlbC5uYW1lIHx8IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcg
fHwgdHlwZSA9PSAncmVzZXQnIHx8IHR5cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykg
cmV0dXJuO1xuXG5cdFx0XHR2YXIgdmFsdWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0Jykg
PyBlbC5nZXRTZWxlY3RlZCgpLm1hcChmdW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJRVxuXHRc
dFx0XHRyZXR1cm4gZG9jdW1lbnQuaWQob3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9KSA6ICgo
dHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNrZWQpID8g
bnVsbCA6IGVsLmdldCgndmFsdWUnKTtcblxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1ZSkuZWFj
aChmdW5jdGlvbih2YWwpe1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykg
cXVlcnlTdHJpbmcucHVzaChlbmNvZGVVUklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNv
ZGVVUklDb21wb25lbnQodmFsKSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcXVl
cnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxcblxudmFy
IGFwcGVuZEluc2VydGVycyA9IHtcblx0YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRhZnRlcjog
J2FmdGVyRW5kJyxcblx0Ym90dG9tOiAnYmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJCZWdpbics
XG5cdGluc2lkZTogJ2JlZm9yZUVuZCdcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRI
VE1MJywgKCdpbnNlcnRBZGphY2VudEhUTUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKSA/IGZ1bmN0aW9uKGh0bWwsIHdoZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2VudEhUTUwo
YXBwZW5kSW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVybiB0aGlz
O1xufSA6IGZ1bmN0aW9uKGh0bWwsIHdoZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgn
ZGl2Jywge2h0bWw6IGh0bWx9KSxcblx0XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rlcyxcblx0
XHRmcmFnbWVudCA9IHRlbXAuZmlyc3RDaGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSByZXR1cm4g
dGhpcztcblx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY2hp
bGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNo
aWxkcmVuW2ldKTtcblx0XHR9XG5cdH1cblxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSdd
KGZyYWdtZW50LCB0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxlY3RlZCA9
IHt9LCBzdG9yYWdlID0ge307XG5cbnZhciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRyZXR1cm4g
KHN0b3JhZ2VbdWlkXSB8fCAoc3RvcmFnZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBjbGVhbiA9
IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgdWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5cdGlmIChp
dGVtLnJlbW92ZUV2ZW50cykgaXRlbS5yZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0uY2xlYXJB
dHRyaWJ1dGVzKSBpdGVtLmNsZWFyQXR0cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51bGwpe1xu
XHRcdGRlbGV0ZSBjb2xsZWN0ZWRbdWlkXTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRdO1xuXHR9
XG5cdHJldHVybiBpdGVtO1xufTtcblxudmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQn
LCBvcHRpb246ICdzZWxlY3RlZCcsIHRleHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVudC5pbXBs
ZW1lbnQoe1xuXG5cdGRlc3Ryb3k6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVuID0gY2xl
YW4odGhpcykuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNoKGNoaWxk
cmVuLCBjbGVhbik7XG5cdFx0RWxlbWVudC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVybiBudWxs
O1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQodGhpcy5j
aGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQuZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkg
PyB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxuXG5cdGNs
b25lOiBmdW5jdGlvbihjb250ZW50cywga2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNvbnRlbnRz
ICE9PSBmYWxzZTtcblx0XHR2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNl
ID0gW2Nsb25lXSwgdGUgPSBbdGhpc10sIGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xuXHRcdFx0
Y2UuYXBwZW5kKEFycmF5LmNvbnZlcnQoY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkp
O1xuXHRcdFx0dGUuYXBwZW5kKEFycmF5LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnKicpKSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtcblx0XHRc
dHZhciBub2RlID0gY2VbaV0sIGVsZW1lbnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2VlcGlkKSBu
b2RlLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAo
bm9kZS5jbGVhckF0dHJpYnV0ZXMpe1xuXHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRlcygpO1xu
XHRcdFx0XHRub2RlLm1lcmdlQXR0cmlidXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9kZS5yZW1v
dmVBdHRyaWJ1dGUoJ3VuaXF1ZU51bWJlcicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRpb25zKXtc
blx0XHRcdFx0XHR2YXIgbm8gPSBub2RlLm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zO1xu
XHRcdFx0XHRcdGZvciAodmFyIGogPSBuby5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0g
ZW9bal0uc2VsZWN0ZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xu
XHRcdFx0dmFyIHByb3AgPSBmb3JtUHJvcHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCld
O1xuXHRcdFx0aWYgKHByb3AgJiYgZWxlbWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRb
cHJvcF07XG5cdFx0fVxuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVCdWcpe1xu
XHRcdFx0dmFyIGNvID0gY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9
IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChpID0gY28u
bGVuZ3RoOyBpLS07KSBjb1tpXS5vdXRlckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5cdFx0fVxu
XHRcdC8qPC9sdElFOT4qL1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5cdH1cblxu
fSk7XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtc
blxuXHRhZGRMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5kb3cuYXR0
YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxlY3RlZFtT
bGljay51aWRPZih0aGlzKV0gPSB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRFdmVudExp
c3RlbmVyKSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtc
blx0XHRlbHNlIHRoaXMuYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRyZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRc
dGlmICh0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0
eXBlLCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24n
ICsgdHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZlOiBmdW5j
dGlvbihwcm9wZXJ0eSwgZGZsdCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2Yo
dGhpcykpLCBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0gbnVsbCAm
JiBwcm9wID09IG51bGwpIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5cdFx0cmV0
dXJuIHByb3AgIT0gbnVsbCA/IHByb3AgOiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBmdW5jdGlv
bihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRo
aXMpKTtcblx0XHRzdG9yYWdlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGVsaW1pbmF0ZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBzdG9yYWdl
ID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAod2luZG93
LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBnYyA9IGZ1
bmN0aW9uKCl7XG5cdFx0T2JqZWN0LmVhY2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0aWYgKHdp
bmRvdy5Db2xsZWN0R2FyYmFnZSkgQ29sbGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cucmVtb3Zl
TGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcblx0fTtcblx0d2luZG93LmFkZExpc3RlbmVyKCd1bmxv
YWQnLCBnYyk7XG59XG4vKjwvbHRJRTk+Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307XG5c
blxuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihzdHls
ZSl7XG5cdFx0dGhpcy5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0ZXJhc2U6
IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zdHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxufTtcblxu
RWxlbWVudC5Qcm9wZXJ0aWVzLnRhZyA9IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJv
cGVydGllcy5odG1sID0ge1xuXG5cdHNldDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYgKGh0bWwg
PT0gbnVsbCkgaHRtbCA9ICcnO1xuXHRcdGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXkn
KSBodG1sID0gaHRtbC5qb2luKCcnKTtcblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKHRoaXMu
c3R5bGVTaGVldCAmJiAhY2FuQ2hhbmdlU3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4
dCA9IGh0bWw7XG5cdFx0ZWxzZSAvKjwvbHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7XG5c
dH0sXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycpO1xuXHR9
XG5cbn07XG5cbnZhciBzdXBwb3J0c0hUTUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0c1RhYmxl
SW5uZXJIVE1MID0gdHJ1ZSwgc3VwcG9ydHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8qPGx0SUU5
PiovXG4vLyB0ZWNobmlxdWUgYnkgamRiYXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQuY29tL2lu
bmVyc2hpdi9cbnZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBm
cmFnbWVudDtcbmRpdi5pbm5lckhUTUwgPSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNIVE1MNUVs
ZW1lbnRzID0gKGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9ydHNIVE1M
NUVsZW1lbnRzKXtcblx0dmFyIHRhZ3MgPSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZh
cyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3Vw
IG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRl
bycuc3BsaXQoJyAnKTtcblx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCksIGwgPSB0YWdzLmxlbmd0aDtcblx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3JlYXRlRWxl
bWVudCh0YWdzW2xdKTtcbn1cbmRpdiA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9c
bnN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5c
dHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRhYmxlLmlu
bmVySFRNTCA9ICc8dHI+PHRkPjwvdGQ+PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0pO1xuXG4v
KjxsdEZGND4qL1xudmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwgaHRtbCA9
ICc8dGQ+PC90ZD4nO1xudHIuaW5uZXJIVE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5lckhUTUwg
PSAodHIuaW5uZXJIVE1MID09IGh0bWwpO1xudHIgPSBudWxsO1xuLyo8L2x0RkY0PiovXG5cbmlm
ICghc3VwcG9ydHNUYWJsZUlubmVySFRNTCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8fCAhc3Vw
cG9ydHNIVE1MNUVsZW1lbnRzKXtcblxuXHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAo
ZnVuY3Rpb24oc2V0KXtcblxuXHRcdHZhciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0YWJsZTog
WzEsICc8dGFibGU+JywgJzwvdGFibGU+J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNlbGVjdD4n
LCAnPC9zZWxlY3Q+J10sXG5cdFx0XHR0Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Ri
b2R5PjwvdGFibGU+J10sXG5cdFx0XHR0cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90
cj48L3Rib2R5PjwvdGFibGU+J11cblx0XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRoZWFkID0g
dHJhbnNsYXRpb25zLnRmb290ID0gdHJhbnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0dXJuIGZ1
bmN0aW9uKGh0bWwpe1xuXG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMuc3R5bGVT
aGVldCkgcmV0dXJuIHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5PiovXG5c
dFx0XHR2YXIgd3JhcCA9IHRyYW5zbGF0aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRcdFx0aWYg
KCF3cmFwICYmICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcnXTtcblx0
XHRcdGlmICghd3JhcCkgcmV0dXJuIHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0XHR2YXIg
bGV2ZWwgPSB3cmFwWzBdLCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyks
IHRhcmdldCA9IHdyYXBwZXI7XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJh
Z21lbnQuYXBwZW5kQ2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRNTCA9IFt3
cmFwWzFdLCBodG1sLCB3cmFwWzJdXS5mbGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3aGlsZSAo
bGV2ZWwtLSkgdGFyZ2V0ID0gdGFyZ2V0LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVtcHR5KCku
YWRvcHQodGFyZ2V0LmNoaWxkTm9kZXMpO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVu
dHMpIGZyYWdtZW50LnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9IG51bGw7
XG5cdFx0fTtcblxuXHR9KShFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxuLyo8L0lF
PiovXG5cbi8qPGx0SUU5PiovXG52YXIgdGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdmb3JtJyk7XG50ZXN0Rm9ybS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8L29wdGlv
bj48L3NlbGVjdD4nO1xuXG5pZiAodGVzdEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAncycpIEVs
ZW1lbnQuUHJvcGVydGllcy52YWx1ZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHR2YXIgdGFnID0gdGhpcy5nZXQoJ3RhZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcpIHJl
dHVybiB0aGlzLnNldFByb3BlcnR5KCd2YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0aW9ucyA9
IHRoaXMuZ2V0RWxlbWVudHMoJ29wdGlvbicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFy
IG9wdGlvbiA9IG9wdGlvbnNbaV0sXG5cdFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRl
Tm9kZSgndmFsdWUnKSxcblx0XHRcdFx0b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNp
ZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRpZiAob3B0
aW9uVmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHR9
XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlzLCB0YWcg
PSBvcHRpb24uZ2V0KCd0YWcnKTtcblxuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYgdGFnICE9
ICdvcHRpb24nKSByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRcdGlmICh0
YWcgPT0gJ3NlbGVjdCcgJiYgIShvcHRpb24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVswXSkpIHJl
dHVybiAnJztcblxuXHRcdHZhciBhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVl
Jyk7XG5cdFx0cmV0dXJuIChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6
IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xuLyo8L2x0
SUU5PiovXG5cbi8qPElFPiovXG5pZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0
QXR0cmlidXRlTm9kZSgnaWQnKSkgRWxlbWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRzZXQ6IGZ1
bmN0aW9uKGlkKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZh
bHVlID0gaWQ7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5pZCB8
fCBudWxsO1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0gdGhpcy5n
ZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+Ki9cblxu
fSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
dGhlIEV2ZW50IFR5cGUsIHRvIG1ha2UgdGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3Vt
ZW50LCBBcnJheSwgRnVuY3Rpb24sIFN0cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczogRXZlbnRc
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIF9rZXlzID0ge307XG52YXIgbm9ybWFs
aXplV2hlZWxTcGVlZCA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7XG5cdGlm
IChldmVudC53aGVlbERlbHRhKXtcblx0XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxEZWx0YSAl
IDEyMCA9PSAwID8gZXZlbnQud2hlZWxEZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVsdGEgLyAx
Mjtcblx0fSBlbHNlIHtcblx0XHR2YXIgcmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8IGV2ZW50
LmRldGFpbCB8fCAwO1xuXHRcdG5vcm1hbGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJh
d0Ftb3VudCAvIDMgOiByYXdBbW91bnQgKiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZWQ7
XG59O1xuXG52YXIgRE9NRXZlbnQgPSB0aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RPTUV2ZW50
JywgZnVuY3Rpb24oZXZlbnQsIHdpbil7XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7XG5cdGV2
ZW50ID0gZXZlbnQgfHwgd2luLmV2ZW50O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4g
ZXZlbnQ7XG5cdHRoaXMuZXZlbnQgPSBldmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0cnVlO1xu
XHR0aGlzLnNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2ZW50LmN0
cmxLZXk7XG5cdHRoaXMuYWx0ID0gZXZlbnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBldmVudC5t
ZXRhS2V5O1xuXHR2YXIgdHlwZSA9IHRoaXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZhciB0YXJn
ZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRhcmdldCAm
JiB0YXJnZXQubm9kZVR5cGUgPT0gMykgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdHRo
aXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRleE9mKCdr
ZXknKSA9PSAwKXtcblx0XHR2YXIgY29kZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBl
dmVudC5rZXlDb2RlKTtcblx0XHRpZiAoIXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5cHJlc3Mn
KSB0aGlzLmtleSA9IF9rZXlzW2NvZGVdO1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3duJyB8fCB0
eXBlID09ICdrZXl1cCcpe1xuXHRcdFx0aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEyNCkgdGhp
cy5rZXkgPSAnZicgKyAoY29kZSAtIDExMSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4gOTUgJiYg
Y29kZSA8IDEwNikgdGhpcy5rZXkgPSBjb2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmtl
eSA9PSBudWxsKSB0aGlzLmtleSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNh
c2UoKTtcblx0fSBlbHNlIGlmICh0eXBlID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2sn
IHx8IHR5cGUgPT0gJ2NvbnRleHRtZW51JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAn
RE9NTW91c2VTY3JvbGwnIHx8IHR5cGUuaW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0XHR2YXIg
ZG9jID0gd2luLmRvY3VtZW50O1xuXHRcdGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNv
bXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5cdFx0dGhp
cy5wYWdlID0ge1xuXHRcdFx0eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVgg
OiBldmVudC5jbGllbnRYICsgZG9jLnNjcm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkg
IT0gbnVsbCkgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wXG5c
dFx0fTtcblx0XHR0aGlzLmNsaWVudCA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxs
KSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBhZ2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxcblx0XHRc
dHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0
IDogZXZlbnQuY2xpZW50WVxuXHRcdH07XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xs
JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMud2hlZWwg
PSBub3JtYWxpemVXaGVlbFNwZWVkKGV2ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sgPSAoZXZl
bnQud2hpY2ggPT0gMyB8fCBldmVudC5idXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUgPT0gJ21v
dXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8
IHR5cGUgPT0gJ21vdXNlbGVhdmUnKXtcblx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAn
bW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZWVudGVyJztcblx0XHRcdHZhciByZWxhdGVkID0g
ZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycp
ICsgJ0VsZW1lbnQnXTtcblx0XHRcdHdoaWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUg
PT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVsYXRlZFRh
cmdldCA9IGRvY3VtZW50LmlkKHJlbGF0ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlLmlu
ZGV4T2YoJ3RvdWNoJykgPT0gMCB8fCB0eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXtcblx0
XHR0aGlzLnJvdGF0aW9uID0gZXZlbnQucm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9IGV2ZW50
LnNjYWxlO1xuXHRcdHRoaXMudGFyZ2V0VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7XG5c
dFx0dGhpcy5jaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRcdHZhciB0
b3VjaGVzID0gdGhpcy50b3VjaGVzID0gZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91Y2hlcyAm
JiB0b3VjaGVzWzBdKXtcblx0XHRcdHZhciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0XHR0aGlz
LnBhZ2UgPSB7eDogdG91Y2gucGFnZVgsIHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRoaXMuY2xp
ZW50ID0ge3g6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1cblx0fVxu
XG5cdGlmICghdGhpcy5jbGllbnQpIHRoaXMuY2xpZW50ID0ge307XG5cdGlmICghdGhpcy5wYWdl
KSB0aGlzLnBhZ2UgPSB7fTtcbn0pO1xuXG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5cdHN0b3A6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9wUHJvcGFn
YXRpb24oKTtcblx0fSxcblxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
O1xuXHRcdGVsc2UgdGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmV2ZW50LnByZXZlbnREZWZhdWx0KSB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0
ZWxzZSB0aGlzLmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH1cblxufSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtleSl7XG5c
dF9rZXlzW2NvZGVdID0ga2V5O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50LmRlZmlu
ZUtleXMgPSBET01FdmVudC5kZWZpbmVLZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5cbkRPTUV2
ZW50LmRlZmluZUtleXMoe1xuXHQnMzgnOiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6ICdsZWZ0
JywgJzM5JzogJ3JpZ2h0Jyxcblx0JzI3JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4JzogJ2Jh
Y2tzcGFjZScsICc5JzogJ3RhYicsXG5cdCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInXG59
KTtcblxufSkoKTtcblxuXG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZlbnRcblxu
ZGVzY3JpcHRpb246IENvbnRhaW5zIEVsZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2
ZW50cy4gVGhpcyBmaWxlIGFsc28gaW5jbHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBj
dXN0b20gRWxlbWVudCBFdmVudHMsIGlmIG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVzOiBFbGVt
ZW50LkV2ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJvcGVydGll
cy5ldmVudHMgPSB7c2V0OiBmdW5jdGlvbihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50cyhldmVu
dHMpO1xufX07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVu
dCcsIHtcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMg
PSB0aGlzLnJldHJpZXZlKCdldmVudHMnLCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlwZV0pIGV2
ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwgdmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50c1t0eXBl
XS5rZXlzLmNvbnRhaW5zKGZuKSkgcmV0dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMu
cHVzaChmbik7XG5cdFx0dmFyIHJlYWxUeXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9IEVsZW1l
bnQuRXZlbnRzW3R5cGVdLFxuXHRcdFx0Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxmID0gdGhp
cztcblx0XHRpZiAoY3VzdG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3RvbS5vbkFk
ZC5jYWxsKHRoaXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uKXtcblx0
XHRcdFx0Y29uZGl0aW9uID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChjdXN0b20u
Y29uZGl0aW9uLmNhbGwodGhpcywgZXZlbnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0aGlzLCBl
dmVudCk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0
XHRpZiAoY3VzdG9tLmJhc2UpIHJlYWxUeXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFz
ZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlvbigpe1xu
XHRcdFx0cmV0dXJuIGZuLmNhbGwoc2VsZik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZlRXZlbnQg
PSBFbGVtZW50Lk5hdGl2ZUV2ZW50c1tyZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2ZW50KXtc
blx0XHRcdGlmIChuYXRpdmVFdmVudCA9PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHRcdFx0XHRldmVudCA9IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5k
b3coKSk7XG5cdFx0XHRcdFx0aWYgKGNvbmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFs
c2UpIGV2ZW50LnN0b3AoKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWRkTGlz
dGVuZXIocmVhbFR5cGUsIGRlZm4sIGFyZ3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2ZW50c1t0
eXBlXS52YWx1ZXMucHVzaChkZWZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1v
dmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJp
ZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4g
dGhpcztcblx0XHR2YXIgbGlzdCA9IGV2ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXggPSBsaXN0
LmtleXMuaW5kZXhPZihmbik7XG5cdFx0aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpcztcblx0
XHR2YXIgdmFsdWUgPSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qua2V5c1tp
bmRleF07XG5cdFx0ZGVsZXRlIGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3VzdG9tID0g
RWxlbWVudC5FdmVudHNbdHlwZV07XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9t
Lm9uUmVtb3ZlKSBjdXN0b20ub25SZW1vdmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRp
ZiAoY3VzdG9tLmJhc2UpIHR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxs
KHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZlbnRzW3R5
cGVdKSA/IHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1syXSkgOiB0
aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZh
ciBldmVudCBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRz
KXtcblx0XHR2YXIgdHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xu
XHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNb
dHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hlZCA9IHRo
aXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlzO1xu
XHRcdGlmICghZXZlbnRzKXtcblx0XHRcdGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhpcy5yZW1v
dmVFdmVudHModHlwZSk7XG5cdFx0XHR0aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5cdFx0fSBl
bHNlIGlmIChhdHRhY2hlZFtldmVudHNdKXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10ua2V5cy5l
YWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMsIGZuKTtc
blx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5cdFx0fVxu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJn
cywgZGVsYXkpe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0
XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0g
QXJyYXkuY29udmVydChhcmdzKTtcblxuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rp
b24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5c
dFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGNsb25lRXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXtcblx0
XHRmcm9tID0gZG9jdW1lbnQuaWQoZnJvbSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20ucmV0cmll
dmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIXR5
cGUpe1xuXHRcdFx0Zm9yICh2YXIgZXZlbnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9uZUV2ZW50
cyhmcm9tLCBldmVudFR5cGUpO1xuXHRcdH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtcblx0XHRc
dGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLmFkZEV2
ZW50KHR5cGUsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztc
blx0fVxuXG59KTtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAyLCBkYmxj
bGljazogMiwgbW91c2V1cDogMiwgbW91c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwgLy9tb3Vz
ZSBidXR0b25zXG5cdHdoZWVsOiAyLCBtb3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwg
Ly9tb3VzZSB3aGVlbFxuXHRtb3VzZW92ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1vdmU6IDIs
IHNlbGVjdHN0YXJ0OiAyLCBzZWxlY3RlbmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0a2V5ZG93
bjogMiwga2V5cHJlc3M6IDIsIGtleXVwOiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0aW9uY2hh
bmdlOiAyLCAvLyBtb2JpbGVcblx0dG91Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0b3VjaGVu
ZDogMiwgdG91Y2hjYW5jZWw6IDIsIC8vIHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwgZ2VzdHVy
ZWNoYW5nZTogMiwgZ2VzdHVyZWVuZDogMiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwgYmx1cjog
MiwgY2hhbmdlOiAyLCByZXNldDogMiwgc2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBp
bnB1dDogMiwgLy9mb3JtIGVsZW1lbnRzXG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVmb3JldW5s
b2FkOiAyLCByZXNpemU6IDEsIG1vdmU6IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJlYWR5c3Rh
dGVjaGFuZ2U6IDEsIC8vd2luZG93XG5cdGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAyLCBwYWdl
c2hvdzogMiwgcGFnZWhpZGU6IDIsIC8vIGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0OiAxLCBz
Y3JvbGw6IDEsIG1lc3NhZ2U6IDIgLy9taXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9IHtcblx0
bW91c2V3aGVlbDoge1xuXHRcdGJhc2U6ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcg
OiAnb25tb3VzZXdoZWVsJyBpbiBkb2N1bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNj
cm9sbCdcblx0fVxufTtcblxudmFyIGNoZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgcmVs
YXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwpIHJldHVy
biB0cnVlO1xuXHRpZiAoIXJlbGF0ZWQpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChyZWxhdGVk
ICE9IHRoaXMgJiYgcmVsYXRlZC5wcmVmaXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdk
b2N1bWVudCcgJiYgIXRoaXMuY29udGFpbnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdvbm1vdXNl
ZW50ZXInIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0aXZlRXZl
bnRzLm1vdXNlZW50ZXIgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjtcblx0
RWxlbWVudC5Nb3VzZWVudGVyQ2hlY2sgPSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1lbnQuRXZl
bnRzLm1vdXNlZW50ZXIgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9u
OiBjaGVja1xuXHR9O1xuXG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5cdFx0YmFz
ZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8qPGx0SUU5
PiovXG5pZiAoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRpdmVFdmVu
dHMucHJvcGVydHljaGFuZ2UgPSAyO1xuXHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7XG5cdFx0
YmFzZTogZnVuY3Rpb24oKXtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRcdFx0cmV0
dXJuICh0aGlzLmdldCgndGFnJykgPT0gJ2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8nIHx8IHR5
cGUgPT0gJ2NoZWNrYm94JykpID8gJ3Byb3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xuXHRcdH0s
XG5cdFx0Y29uZGl0aW9uOiBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZlbnQudHlw
ZSAhPSAncHJvcGVydHljaGFuZ2UnIHx8IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hl
Y2tlZCc7XG5cdFx0fVxuXHR9O1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxu
LS0tXG5cbm5hbWU6IEVsZW1lbnQuRGVsZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0
aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBm
b3IgbW9yZSBlZmZpY2llbnQgZXZlbnQgbWFuYWdlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtFbGVt
ZW50LkRlbGVnYXRpb25dXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBldmVudExp
c3RlbmVyU3VwcG9ydCA9ICEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1lbnQuTmF0
aXZlRXZlbnRzLmZvY3VzaW4gPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7XG5c
bnZhciBidWJibGVVcCA9IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7
XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRjaCh0YXJn
ZXQsIGV2ZW50KSkgcmV0dXJuIGZuLmNhbGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtcblx0XHR0
YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5cbnZhciBt
YXAgPSB7XG5cdG1vdXNlZW50ZXI6IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25k
aXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6IHtcblx0
XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hl
Y2tcblx0fSxcblx0Zm9jdXM6IHtcblx0XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJT
dXBwb3J0ID8gJycgOiAnaW4nKSxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJsdXI6IHtc
blx0XHRiYXNlOiBldmVudExpc3RlbmVyU3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsXG5c
dFx0Y2FwdHVyZTogdHJ1ZVxuXHR9XG59O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkgPSAnJGRl
bGVnYXRpb246JztcbnZhciBmb3JtT2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxuXHRyZXR1
cm4ge1xuXG5cdFx0YmFzZTogJ2ZvY3VzaW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxm
LCB1aWQpe1xuXHRcdFx0dmFyIGxpc3QgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xp
c3RlbmVycycsIHt9KVt1aWRdO1xuXHRcdFx0aWYgKGxpc3QgJiYgbGlzdC5mb3JtcykgZm9yICh2
YXIgaSA9IGxpc3QuZm9ybXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZvcm0gbWF5
IGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRcdC8vIHJl
bW92ZUV2ZW50IG1ldGhvZCBhbnltb3JlLiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdhc1xuXHRc
dFx0XHQvLyByZW1vdmVkIGFzIHdlbGwuXG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ldLnJlbW92
ZUV2ZW50KSBsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTtcblx0
XHRcdH1cblx0XHR9LFxuXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2
ZW50LCB0YXJnZXQsIHVpZCl7XG5cdFx0XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9
PSAnZm9ybScpID8gdGFyZ2V0IDogZXZlbnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpO1xuXHRc
dFx0aWYgKCFmb3JtKSByZXR1cm47XG5cblx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxmLnJldHJp
ZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVuZXIgPSBs
aXN0ZW5lcnNbdWlkXSB8fCB7Zm9ybXM6IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9ybXMgPSBs
aXN0ZW5lci5mb3JtcywgZm5zID0gbGlzdGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9ybXMuaW5k
ZXhPZihmb3JtKSAhPSAtMSkgcmV0dXJuO1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtcblxuXHRc
dFx0dmFyIF9mbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2ZW50KHR5
cGUsIF9mbik7XG5cdFx0XHRmbnMucHVzaChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNbdWlkXSA9
IGxpc3RlbmVyO1xuXHRcdFx0c2VsZi5zdG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCBs
aXN0ZW5lcnMpO1xuXHRcdH1cblx0fTtcbn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0gZnVuY3Rp
b24odHlwZSl7XG5cdHJldHVybiB7XG5cdFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxpc3Rlbjog
ZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZhciBldmVu
dHMgPSB7Ymx1cjogZnVuY3Rpb24oKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMoZXZlbnRz
KTtcblx0XHRcdH19O1xuXHRcdFx0ZXZlbnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRc
dFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtc
blx0XHRcdGV2ZW50LnRhcmdldC5hZGRFdmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07XG59O1xu
XG5pZiAoIWV2ZW50TGlzdGVuZXJTdXBwb3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xuXHRzdWJt
aXQ6IGZvcm1PYnNlcnZlcignc3VibWl0JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0
JyksXG5cdGNoYW5nZTogaW5wdXRPYnNlcnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDogaW5wdXRP
YnNlcnZlcignc2VsZWN0Jylcbn0pO1xuLyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9IEVsZW1l
bnQucHJvdG90eXBlLFxuXHRhZGRFdmVudCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1vdmVFdmVu
dCA9IHByb3RvLnJlbW92ZUV2ZW50O1xuXG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQsIG1ldGhv
ZCl7XG5cdHJldHVybiBmdW5jdGlvbih0eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0aWYgKHR5
cGUuaW5kZXhPZignOnJlbGF5JykgPT0gLTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBm
biwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUpLmV4cHJl
c3Npb25zWzBdWzBdO1xuXHRcdGlmIChwYXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5Jykg
cmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgbmV3
VHlwZSA9IHBhcnNlZC50YWc7XG5cdFx0cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFjaChmdW5j
dGlvbihwc2V1ZG8pe1xuXHRcdFx0bmV3VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsgKHBzZXVk
by52YWx1ZSA/ICcoJyArIHBzZXVkby52YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtcblx0XHRv
bGQuY2FsbCh0aGlzLCB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIG5l
d1R5cGUsIHBhcnNlZC5wc2V1ZG9zWzBdLnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52YXIgZGVs
ZWdhdGlvbiA9IHtcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXtcblx0
XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9
IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBzdG9yZWQp
e1xuXHRcdFx0aWYgKHN0b3JlZFtfdWlkXS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0ubWF0Y2gg
PT0gbWF0Y2gpIHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5cGUsIF9t
YXRjaCA9IG1hdGNoLCBfZm4gPSBmbiwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHR0eXBl
ID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpe1xu
XHRcdFx0cmV0dXJuIFNsaWNrLm1hdGNoKHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xuXG5cdFx0
dmFyIGVsZW1lbnRFdmVudCA9IEVsZW1lbnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAoX21hcC5j
b25kaXRpb24gfHwgZWxlbWVudEV2ZW50ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24pe1xuXHRc
dFx0dmFyIF9fbWF0Y2ggPSBtYXRjaCwgY29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxl
bWVudEV2ZW50LmNvbmRpdGlvbjtcblx0XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVu
dCl7XG5cdFx0XHRcdHJldHVybiBfX21hdGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRpdGlvbi5j
YWxsKHRhcmdldCwgZXZlbnQsIHR5cGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgc2Vs
ZiA9IHRoaXMsIHVpZCA9IFN0cmluZy51bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0b3IgPSBf
bWFwLmxpc3RlbiA/IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQg
JiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRp
ZiAodGFyZ2V0KSBfbWFwLmxpc3RlbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVp
ZCk7XG5cdFx0fSA6IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQg
JiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRp
ZiAodGFyZ2V0KSBidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRc
dH07XG5cblx0XHRpZiAoIXN0b3JlZCkgc3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3VpZF0gPSB7
XG5cdFx0XHRtYXRjaDogX21hdGNoLFxuXHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVnYXRvcjog
ZGVsZWdhdG9yXG5cdFx0fTtcblx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRyZXR1
cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5c
dH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3VpZCl7XG5c
dFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQg
PSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxuXHRcdGlm
IChfdWlkKXtcblx0XHRcdHZhciBfdHlwZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3JlZFtfdWlk
XS5kZWxlZ2F0b3IsIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0gX21hcC5i
YXNlIHx8IF90eXBlO1xuXHRcdFx0aWYgKF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0aGlzLCBf
dWlkKTtcblx0XHRcdGRlbGV0ZSBzdG9yZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190eXBlXSA9
IHN0b3JlZDtcblx0XHRcdHJldHVybiByZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVn
YXRvciwgX21hcC5jYXB0dXJlKTtcblx0XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5cdFx0aWYg
KGZuKSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0
XHRcdGlmIChzLm1hdGNoID09IG1hdGNoICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxlZ2F0aW9u
LnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5cdFx0fSBl
bHNlIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRc
dFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2gpIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlz
LCB0eXBlLCBtYXRjaCwgcy5mbiwgX191aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0
fVxuXG59O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQn
LCB7XG5cdGFkZEV2ZW50OiByZWxheShhZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVudCksXG5c
dHJlbW92ZUV2ZW50OiByZWxheShyZW1vdmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVFdmVudClc
bn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBv
ZiBFbGVtZW50cyBpbiBhIGZhc2hpb25hYmxlIHdheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBFbGVtZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0eWxlXG5c
bi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRtbCwgZWw7
XG5cbi8vPGx0SUU5PlxuLy8gQ2hlY2sgZm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCByZW1vdmUg
c3R5bGVzIHdoZW4gdGhleSdyZSBzZXQgdG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTtcbmVsLnN0eWxlLmNvbG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xvciA9IG51
bGw7XG52YXIgZG9lc05vdFJlbW92ZVN0eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdyZWQnO1xu
XG4vLyBjaGVjayBmb3Igb2xkSUUsIHdoaWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhhbmQgc3R5
bGVzIGluIHRoZSB3cm9uZyBvcmRlciAoY29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBvZiB3aWR0
aC1zdHlsZS1jb2xvcilcbnZhciBib3JkZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xuZWwuc3R5
bGUuYm9yZGVyID0gYm9yZGVyO1xudmFyIHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyID0gZWwu
c3R5bGUuYm9yZGVyICE9IGJvcmRlcjtcbmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxudmFyIGhh
c0dldENvbXB1dGVkU3R5bGUgPSAhIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRzdXBwb3J0
Qm9yZGVyUmFkaXVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVy
UmFkaXVzICE9IG51bGw7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5j
dGlvbihzdHlsZXMpe1xuXHR0aGlzLnNldFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZhciBoYXNP
cGFjaXR5ID0gKGh0bWwuc3R5bGUub3BhY2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVyID0gKGh0
bWwuc3R5bGUuZmlsdGVyICE9IG51bGwpLFxuXHRyZUFscGhhID0gL2FscGhhXFwob3BhY2l0eT0o
W1xcZC5dKylcXCkvaTtcblxudmFyIHNldFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBv
cGFjaXR5KXtcblx0ZWxlbWVudC5zdG9yZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0ZWxlbWVu
dC5zdHlsZS52aXNpYmlsaXR5ID0gb3BhY2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxsID8gJ3Zp
c2libGUnIDogJ2hpZGRlbic7XG59O1xuXG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIgPSBmdW5j
dGlvbihlbGVtZW50LCByZWdleHAsIHZhbHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVudC5zdHls
ZSxcblx0XHRmaWx0ZXIgPSBzdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxl
KCdmaWx0ZXInKSB8fCAnJztcblx0c3R5bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikg
PyBmaWx0ZXIucmVwbGFjZShyZWdleHAsIHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50
cmltKCk7XG5cdGlmICghc3R5bGUuZmlsdGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRl
cicpO1xufTtcbi8vPC9sdElFOT5cblxudmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1
bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBvcGFj
aXR5O1xufSA6IChoYXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0aWYg
KCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0
KSBlbGVtZW50LnN0eWxlLnpvb20gPSAxO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8IG9wYWNp
dHkgPT0gMSl7XG5cdFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0XHRpZiAo
b3BhY2l0eSA9PSAxICYmIGdldE9wYWNpdHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVyKGVsZW1l
bnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0XHRzZXRG
aWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5ICogMTAw
KS5saW1pdCgwLCAxMDApLnJvdW5kKCkgKyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJpbGl0eSkp
O1xuXG52YXIgZ2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5c
dHZhciBvcGFjaXR5ID0gZWxlbWVudC5zdHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0Q29tcHV0
ZWRTdHlsZSgnb3BhY2l0eScpO1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNp
dHkudG9GbG9hdCgpO1xufSA6IChoYXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFy
IGZpbHRlciA9IChlbGVtZW50LnN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5
bGUoJ2ZpbHRlcicpKSxcblx0XHRvcGFjaXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmls
dGVyLm1hdGNoKHJlQWxwaGEpO1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBmaWx0ZXIg
PT0gbnVsbCkgPyAxIDogKG9wYWNpdHlbMV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVsZW1lbnQp
e1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5cdGlmIChv
cGFjaXR5ID09IG51bGwpIG9wYWNpdHkgPSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdo
aWRkZW4nID8gMCA6IDEpO1xuXHRyZXR1cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZsb2F0TmFt
ZSA9IChodG1sLnN0eWxlLmNzc0Zsb2F0ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zs
b2F0Jyxcblx0bmFtZWRQb3NpdGlvbnMgPSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBjZW50ZXI6
ICc1MCUnLCByaWdodDogJzEwMCUnLCBib3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tncm91bmRQ
b3NpdGlvblhZID0gKGh0bWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSxcblx0
cHJlZml4UGF0dGVybiA9IC9eLShtcyktLztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uKHBy
b3BlcnR5KXtcblx0cmV0dXJuIHByb3BlcnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwgJyQxLScp
LmNhbWVsQ2FzZSgpO1xufTtcblxuLy88bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBmdW5jdGlv
bihzdHlsZSwgcHJvcGVydHkpe1xuXHRpZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlv
bicpe1xuXHRcdHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5cdFx0cHJv
cGVydHkgKz0gJ1knO1xuXHR9XG5cdHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG59
O1xuLy88L2x0SUU5PlxuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0ZWRTdHls
ZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0
aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9w
ZXJ0eSldO1xuXHRcdHZhciBkZWZhdWx0VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQodGhpcyku
ZGVmYXVsdFZpZXcsXG5cdFx0XHRjb21wdXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcu
Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLCBudWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChjb21wdXRl
ZCkgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8g
J2Zsb2F0JyA6IHByb3BlcnR5Lmh5cGhlbmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNldFN0eWxl
OiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0
eScpe1xuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7
XG5cdFx0XHRzZXRPcGFjaXR5KHRoaXMsIHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRc
dH1cblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXRO
YW1lIDogcHJvcGVydHkpO1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcnKXtcblx0
XHRcdHZhciBtYXAgPSAoRWxlbWVudC5TdHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3BsaXQoJyAn
KTtcblx0XHRcdHZhbHVlID0gQXJyYXkuY29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwg
aSl7XG5cdFx0XHRcdGlmICghbWFwW2ldKSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVybiAodHlw
ZU9mKHZhbCkgPT0gJ251bWJlcicpID8gbWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZh
bCkpIDogdmFsO1xuXHRcdFx0fSkuam9pbignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT0g
U3RyaW5nKE51bWJlcih2YWx1ZSkpKXtcblx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7
XG5cdFx0fVxuXHRcdHRoaXMuc3R5bGVbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88bHRJRTk+
XG5cdFx0aWYgKCh2YWx1ZSA9PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90UmVtb3Zl
U3R5bGVzICYmIHRoaXMuc3R5bGUucmVtb3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92ZVN0eWxl
KHRoaXMuc3R5bGUsIHByb3BlcnR5KTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGdldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYg
KHByb3BlcnR5ID09ICdvcGFjaXR5JykgcmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5cdFx0cHJv
cGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3Bl
cnR5KTtcblx0XHRpZiAoc3VwcG9ydEJvcmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRleE9mKCdi
b3JkZXJSYWRpdXMnKSAhPSAtMSl7XG5cdFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0UmFkaXVz
JywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2Jv
cmRlckJvdHRvbUxlZnRSYWRpdXMnXS5tYXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRcdFx0cmV0
dXJuIHRoaXMuc3R5bGVbY29ybmVyXSB8fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpvaW4oJyAn
KTtcblx0XHR9XG5cdFx0dmFyIHJlc3VsdCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xuXHRcdGlm
ICghcmVzdWx0IHx8IHByb3BlcnR5ID09ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVtZW50LlNo
b3J0U3R5bGVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3VsdCA9IFtd
O1xuXHRcdFx0XHRmb3IgKHZhciBzIGluIEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVydHldKSBy
ZXN1bHQucHVzaCh0aGlzLmdldFN0eWxlKHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5qb2lu
KCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5bGUocHJv
cGVydHkpO1xuXHRcdH1cblx0XHRpZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNr
Z3JvdW5kUG9zaXRpb25bWFldPyQvLnRlc3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVybiByZXN1
bHQucmVwbGFjZSgvKHRvcHxyaWdodHxib3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24p
e1xuXHRcdFx0XHRyZXR1cm4gbmFtZWRQb3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0fSkgfHwg
JzBweCc7XG5cdFx0fVxuXHRcdGlmICghcmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNrZ3JvdW5k
UG9zaXRpb24nKSByZXR1cm4gJzBweCAwcHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRcdFx0cmVz
dWx0ID0gU3RyaW5nKHJlc3VsdCk7XG5cdFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3Jn
YmE/XFwoW1xcZFxccyxdK1xcKS8pO1xuXHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQu
cmVwbGFjZShjb2xvclswXSwgY29sb3JbMF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRcdGlmICgh
aGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiAhdGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRcdFx0aWYg
KCgvXihoZWlnaHR8d2lkdGgpJC8pLnRlc3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1
bHQpKSl7XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykgPyBbJ2xl
ZnQnLCAncmlnaHQnXSA6IFsndG9wJywgJ2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRcdFx0dmFs
dWVzLmVhY2goZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5nZXRTdHls
ZSgnYm9yZGVyLScgKyB2YWx1ZSArICctd2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRTdHlsZSgn
cGFkZGluZy0nICsgdmFsdWUpLnRvSW50KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHRy
ZXR1cm4gdGhpc1snb2Zmc2V0JyArIHByb3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4
Jztcblx0XHRcdH1cblx0XHRcdGlmICgoL15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcv
KS50ZXN0KHByb3BlcnR5KSAmJiBpc05hTihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0XHRcdFx0
cmV0dXJuICcwcHgnO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRpZiAocmV0
dXJuc0JvcmRlcnNJbldyb25nT3JkZXIgJiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRvbXxMZWZ0
KT8kLy50ZXN0KHByb3BlcnR5KSAmJiAvXiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRyZXR1cm4g
cmVzdWx0LnJlcGxhY2UoL14oLispXFxzKC4rKVxccyguKykkLywgJyQyICQzICQxJyk7XG5cdFx0
fVxuXHRcdC8vPC9sdElFOT5cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0c2V0U3R5
bGVzOiBmdW5jdGlvbihzdHlsZXMpe1xuXHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxlcykgdGhp
cy5zZXRTdHlsZShzdHlsZSwgc3R5bGVzW3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0Z2V0U3R5bGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRB
cnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0cmVzdWx0
W2tleV0gPSB0aGlzLmdldFN0eWxlKGtleSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHJl
c3VsdDtcblx0fVxuXG59KTtcblxuRWxlbWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdAcHgnLCB0
b3A6ICdAcHgnLCBib3R0b206ICdAcHgnLCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAnQHB4Jywg
aGVpZ2h0OiAnQHB4JywgbWF4V2lkdGg6ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0
aDogJ0BweCcsIG1pbkhlaWdodDogJ0BweCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBA
LCBAKScsIGJhY2tncm91bmRTaXplOiAnQHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAnQHB4IEBw
eCcsIGNvbG9yOiAncmdiKEAsIEAsIEApJyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFj
aW5nOiAnQHB4JywgbGluZUhlaWdodDogJ0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBw
eCknLFxuXHRtYXJnaW46ICdAcHggQHB4IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHgg
QHB4JywgYm9yZGVyOiAnQHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHgg
QCByZ2IoQCwgQCwgQCknLFxuXHRib3JkZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRl
clN0eWxlOiAnQCBAIEAgQCcsIGJvcmRlckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihALCBALCBA
KSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApJyxcblx0ekluZGV4OiAnQCcsICd6b29tJzogJ0An
LCBmb250V2VpZ2h0OiAnQCcsIHRleHRJbmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRl
clJhZGl1czogJ0BweCBAcHggQHB4IEBweCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5TaG9ydFN0
eWxlcyA9IHttYXJnaW46IHt9LCBwYWRkaW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6
IHt9LCBib3JkZXJTdHlsZToge30sIGJvcmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywgJ1JpZ2h0
JywgJ0JvdHRvbScsICdMZWZ0J10uZWFjaChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2YXIgU2hv
cnQgPSBFbGVtZW50LlNob3J0U3R5bGVzO1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7XG5c
dFsnbWFyZ2luJywgJ3BhZGRpbmcnXS5lYWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2YXIgc2Qg
PSBzdHlsZSArIGRpcmVjdGlvbjtcblx0XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdA
cHgnO1xuXHR9KTtcblx0dmFyIGJkID0gJ2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNob3J0LmJv
cmRlcltiZF0gPSBBbGxbYmRdID0gJ0BweCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBiZHcgPSBi
ZCArICdXaWR0aCcsIGJkcyA9IGJkICsgJ1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InO1xuXHRT
aG9ydFtiZF0gPSB7fTtcblx0U2hvcnQuYm9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2JkXVtiZHdd
ID0gQWxsW2Jkd10gPSAnQHB4Jztcblx0U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2Jk
XVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9y
dFtiZF1bYmRjXSA9IEFsbFtiZGNdID0gJ3JnYihALCBALCBAKSc7XG59KTtcblxuaWYgKGhhc0Jh
Y2tncm91bmRQb3NpdGlvblhZKSBFbGVtZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlv
biA9IHtiYWNrZ3JvdW5kUG9zaXRpb25YOiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307
XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5kZXNjcmlw
dGlvbjogQ29udGFpbnMgbWV0aG9kcyB0byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3Np
dGlvbmluZyBvZiBFbGVtZW50cyBhbmQgdGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFz
ZWQgb24gdGhlIFtxb294ZG9vXShodHRwOi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBi
cm93c2VyIGZpeGVzLCBbTEdQTCBMaWNlbnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv
bGdwbC5odG1sKS5cbiAgLSBWaWV3cG9ydCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6
Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2Rl
dmVsb3Blci55YWhvby5jb20veXVpL2xpY2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBbRWxlbWVu
dCwgRWxlbWVudC5TdHlsZV1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdXG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2JyksXG5cdGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5l
bGVtZW50LnN0eWxlLmhlaWdodCA9ICcwJztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xu
dmFyIGJyb2tlbk9mZnNldFBhcmVudCA9IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQp
O1xuZWxlbWVudCA9IGNoaWxkID0gbnVsbDtcblxudmFyIGhlaWdodENvbXBvbmVudHMgPSBbJ2hl
aWdodCcsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lkdGgnLCAn
Ym9yZGVyQm90dG9tV2lkdGgnXSxcblx0d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcsICdwYWRk
aW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0
V2lkdGgnXTtcblxudmFyIHN2Z0NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5cblx0dmFy
IGdDUyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7eDogMCwg
eTogMH07XG5cblx0aGVpZ2h0Q29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91
bmRzLnkgKz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBvbmVudHMu
ZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10p
O1xuXHR9KTtcblx0cmV0dXJuIGJvdW5kcztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1bmN0aW9u
KGVsKXtcblx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8
fCBpc0JvZHkoZWwpO1xufTtcblxudmFyIGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpe1xu
XHRyZXR1cm4gaXNPZmZzZXQoZWwpIHx8ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChlbC50
YWdOYW1lKTtcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzogZnVuY3Rp
b24oeCwgeSl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdpbmRvdygp
LnNjcm9sbFRvKHgsIHkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExlZnQgPSB4
O1xuXHRcdFx0dGhpcy5zY3JvbGxUb3AgPSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRTaXplOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVy
biB0aGlzLmdldFdpbmRvdygpLmdldFNpemUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRcdC8vIFRo
aXMgaWYgY2xhdXNlIGlzIGJlY2F1c2UgSUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5n
Q2xpZW50UmVjdCBvZiBlbGVtZW50cyB3aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRcdGlmICgh
d2luZG93LmdldENvbXB1dGVkU3R5bGUpIHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTog
dGhpcy5vZmZzZXRIZWlnaHR9O1xuXHRcdC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMgc3ZnIHNl
Y3Rpb24gdW5kZXIsIGNhbGxpbmcgYHN2Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVk
IHdoZW4gRkYgZml4ZWQgdGhlIHN2ZyBzaXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzogaHR0cHM6
Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0aWYgKHRo
aXMuZ2V0KCd0YWcnKSA9PSAnc3ZnJykgcmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhpcyk7XG5c
blx0XHR0cnkge1xuXHRcdFx0dmFyIGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCk7XG5cdFx0XHRyZXR1cm4ge3g6IGJvdW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07XG5c
dFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1cblx0fSxc
blxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJl
dHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4ge3g6IHRo
aXMuc2Nyb2xsV2lkdGgsIHk6IHRoaXMuc2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3Jv
bGw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2lu
ZG93KCkuZ2V0U2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQsIHk6IHRo
aXMuc2Nyb2xsVG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xuXHRcdHZh
ciBlbGVtZW50ID0gdGhpcy5wYXJlbnROb2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0
XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLngg
Kz0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9s
bFRvcDtcblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXHRcdHJl
dHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9mZnNldFBh
cmVudCA/IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0Jv
ZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVk
JykgcmV0dXJuIG51bGw7XG5cblx0XHR2YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0cmluZyhl
bGVtZW50LCAncG9zaXRpb24nKSA9PSAnc3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6IGlzT2Zm
c2V0O1xuXHRcdHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xuXHRcdFx0
aWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRy
ZXR1cm4gbnVsbDtcblx0fSA6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xu
XHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9u
JykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVs
ZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRcdH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4gbnVsbDtc
blx0fSxcblxuXHRnZXRPZmZzZXRzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRCb3VuZGlu
Z0NsaWVudFJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlmIChoYXNH
ZXRCb3VuZGluZ0NsaWVudFJlY3Qpe1xuXHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKSxcblx0XHRcdFx0aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0RG9jdW1l
bnQoKS5kb2N1bWVudEVsZW1lbnQpLFxuXHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3Jv
bGwoKSxcblx0XHRcdFx0ZWxlbVNjcm9sbHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0XHRcdFx0
aXNGaXhlZCA9IChzdHlsZVN0cmluZyh0aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKTtcblxu
XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBlbGVtU2Ny
b2xscy54ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGllbnRMZWZ0
LFxuXHRcdFx0XHR5OiBib3VuZC50b3AudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNG
aXhlZCkgPyAwIDogaHRtbFNjcm9sbC55KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9O1xuXHRc
dH1cblxuXHRcdHZhciBlbGVtZW50ID0gdGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUgKGVsZW1l
bnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zm
c2V0TGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5cblx0XHRc
dGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9z
aXRpb247XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtcblx0XHR2
YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmdldFNj
cm9sbHMoKTtcblx0XHR2YXIgcG9zaXRpb24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAtIHNjcm9s
bC54LFxuXHRcdFx0eTogb2Zmc2V0LnkgLSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRpZiAocmVs
YXRpdmUgJiYgKHJlbGF0aXZlID0gZG9jdW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0XHR2YXIg
cmVsYXRpdmVQb3NpdGlvbiA9IHJlbGF0aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRyZXR1cm4g
e3g6IHBvc2l0aW9uLnggLSByZWxhdGl2ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJlbGF0aXZl
KSwgeTogcG9zaXRpb24ueSAtIHJlbGF0aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihyZWxhdGl2
ZSl9O1xuXHRcdH1cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0
ZXM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlz
LmdldFdpbmRvdygpLmdldENvb3JkaW5hdGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy5n
ZXRQb3NpdGlvbihlbGVtZW50KSxcblx0XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHR2
YXIgb2JqID0ge1xuXHRcdFx0bGVmdDogcG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9zaXRpb24u
eSxcblx0XHRcdHdpZHRoOiBzaXplLngsXG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRcdH07XG5c
dFx0b2JqLnJpZ2h0ID0gb2JqLmxlZnQgKyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRvbSA9IG9i
ai50b3AgKyBvYmouaGVpZ2h0O1xuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29tcHV0ZVBv
c2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBvYmoueCAt
IHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmoueSAtIHN0
eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4tdG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNldFBvc2l0
aW9uOiBmdW5jdGlvbihvYmope1xuXHRcdHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1
dGVQb3NpdGlvbihvYmopKTtcblx0fVxuXG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRvd10uaW52
b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9j
ID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGllbnRXaWR0
aCwgeTogZG9jLmNsaWVudEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigp
e1xuXHRcdHZhciB3aW4gPSB0aGlzLmdldFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRFbGVtZW50
KHRoaXMpO1xuXHRcdHJldHVybiB7eDogd2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3JvbGxMZWZ0
LCB5OiB3aW4ucGFnZVlPZmZzZXQgfHwgZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Ny
b2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KSxcblx0XHRcdG1pbiA9IHRoaXMuZ2V0U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMuZ2V0RG9j
dW1lbnQoKS5ib2R5O1xuXG5cdFx0cmV0dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xsV2lkdGgs
IGJvZHkuc2Nyb2xsV2lkdGgsIG1pbi54KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhlaWdodCwg
Ym9keS5zY3JvbGxIZWlnaHQsIG1pbi55KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29yZGluYXRl
czogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHJldHVy
biB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwgaGVpZ2h0
OiBzaXplLnksIHdpZHRoOiBzaXplLnh9O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRlIG1ldGhv
ZHNcblxudmFyIHN0eWxlU3RyaW5nID0gRWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xuXG5mdW5j
dGlvbiBzdHlsZU51bWJlcihlbGVtZW50LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhl
bGVtZW50LCBzdHlsZSkudG9JbnQoKSB8fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9wQm9yZGVy
KGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10b3Atd2lk
dGgnKTtcbn1cblxuZnVuY3Rpb24gbGVmdEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxl
TnVtYmVyKGVsZW1lbnQsICdib3JkZXItbGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBpc0Jv
ZHkoZWxlbWVudCl7XG5cdHJldHVybiAoL14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQu
dGFnTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7XG5cdHZh
ciBkb2MgPSBlbGVtZW50LmdldERvY3VtZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21wYXRNb2Rl
IHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5
O1xufVxuXG59KSgpO1xuXG4vL2FsaWFzZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0
UG9zaXRpb24nfSk7IC8vY29tcGF0YWJpbGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwgRWxlbWVu
dF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbFRvcDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxuXG5cdGdl
dFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDtc
blx0fSxcblxuXHRnZXRTY3JvbGxIZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMu
Z2V0U2Nyb2xsU2l6ZSgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0VG9wOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxcblxuXHRn
ZXRMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDtcblx0
fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
dGhlIGJhc2ljIGFuaW1hdGlvbiBsb2dpYyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3RoZXIgRngg
Q2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQ2hh
aW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBGeFxuXG4u
Li5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHtc
blxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVd
LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQvKlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRvbkNhbmNl
bDogbmlsLFxuXHRcdG9uQ29tcGxldGU6IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAsXG5cdFx0
dW5pdDogZmFsc2UsXG5cdFx0ZHVyYXRpb246IDUwMCxcblx0XHRmcmFtZXM6IG51bGwsXG5cdFx0
ZnJhbWVTa2lwOiB0cnVlLFxuXHRcdGxpbms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5pdGlhbGl6
ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8
IHRoaXM7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdldFRyYW5z
aXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0cmV0dXJu
IC0oTWF0aC5jb3MoTWF0aC5QSSAqIHApIC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5cblx0c3Rl
cDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7XG5cdFx0
XHR2YXIgZGlmZiA9ICh0aGlzLnRpbWUgIT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAs
IGZyYW1lcyA9IGRpZmYgLyB0aGlzLmZyYW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
b3c7XG5cdFx0XHR0aGlzLmZyYW1lICs9IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhp
cy5mcmFtZSsrO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpe1xu
XHRcdFx0dmFyIGRlbHRhID0gdGhpcy50cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1l
cyk7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0
YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0
XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5cdFx0XHR0
aGlzLnN0b3AoKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdHJl
dHVybiBub3c7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtc
blx0XHRyZXR1cm4gRnguY29tcHV0ZShmcm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5cdGNoZWNr
OiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRydWU7XG5c
dFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlz
LmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0
aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8pe1xu
XHRcdGlmICghdGhpcy5jaGVjayhmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZnJv
bSA9IGZyb207XG5cdFx0dGhpcy50byA9IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhpcy5vcHRp
b25zLmZyYW1lU2tpcCkgPyAwIDogLTE7XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHR0aGlz
LnRyYW5zaXRpb24gPSB0aGlzLmdldFRyYW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVzID0gdGhp
cy5vcHRpb25zLmZyYW1lcywgZnBzID0gdGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24gPSB0aGlz
Lm9wdGlvbnMuZHVyYXRpb247XG5cdFx0dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9uc1tkdXJh
dGlvbl0gfHwgZHVyYXRpb24udG9JbnQoKTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAw
IC8gZnBzO1xuXHRcdHRoaXMuZnJhbWVzID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhpcy5kdXJh
dGlvbiAvIHRoaXMuZnJhbWVJbnRlcnZhbCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0
ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMuc3ViamVj
dCk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVjdCk7XG5c
dFx0cHVzaEluc3RhbmNlLmNhbGwodGhpcywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRzdG9wOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRc
dHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9w
dGlvbnMuZnBzKTtcblx0XHRcdGlmICh0aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtcblx0XHRc
dFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdFx0aWYg
KCF0aGlzLmNhbGxDaGFpbigpKSB0aGlzLmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMu
c3ViamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnc3RvcCcs
IHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5zdWJqZWN0
ID09PSB0aGlzID8gbnVsbCA6IHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmco
KSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhp
cywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5c
dFx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7
XG5cdFx0XHR0aGlzLnJlamVjdCh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRwYXVzZTogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmco
KSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhp
cywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dHJlc3VtZTogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNoSW5zdGFu
Y2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbdGhp
cy5vcHRpb25zLmZwc107XG5cdFx0cmV0dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTtc
blx0fSxcblxuXHRpc1BhdXNlZDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuZnJhbWUg
PCB0aGlzLmZyYW1lcykgJiYgIXRoaXMuaXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5cbkZ4LmNv
bXB1dGUgPSBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0gZnJvbSkg
KiBkZWx0YSArIGZyb207XG59O1xuXG5GeC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9y
bWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZhciBpbnN0
YW5jZXMgPSB7fSwgdGltZXJzID0ge307XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtcblx0dmFy
IG5vdyA9IERhdGUubm93KCk7XG5cdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0dmFyIGluc3RhbmNlID0gdGhpc1tpXTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0
ZXAobm93KTtcblx0fVxufTtcblxudmFyIHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5c
dHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10pO1xuXHRs
aXN0LnB1c2godGhpcyk7XG5cdGlmICghdGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0gbG9vcC5w
ZXJpb2RpY2FsKE1hdGgucm91bmQoMTAwMCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFyIHB1bGxJ
bnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc107XG5c
dGlmIChsaXN0KXtcblx0XHRsaXN0LmVyYXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5sZW5ndGgg
JiYgdGltZXJzW2Zwc10pe1xuXHRcdFx0ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRcdFx0dGlt
ZXJzW2Zwc10gPSBjbGVhckludGVydmFsKHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1cbn07XG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBDb250YWlu
cyB0aGUgQ1NTIGFuaW1hdGlvbiBsb2dpYy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4
LkVsZW1lbnRzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtG
eCwgRWxlbWVudC5TdHlsZV1cblxucHJvdmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5cbkZ4LkNT
UyA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0aGUgYmFz
ZSBmcm9tL3RvIG9iamVjdFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5
LCB2YWx1ZXMpe1xuXHRcdHZhbHVlcyA9IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0XHR2YXIg
ZnJvbSA9IHZhbHVlc1swXSwgdG8gPSB2YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51bGwpe1xu
XHRcdFx0dG8gPSBmcm9tO1xuXHRcdFx0ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkp
O1xuXHRcdFx0dmFyIHVuaXQgPSB0aGlzLm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFkYXB0ZWQg
ZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4LmpzI0wy
OTlcblx0XHRcdGlmICh1bml0ICYmIGZyb20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmluZycgJiYg
ZnJvbS5zbGljZSgtdW5pdC5sZW5ndGgpICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9tKSAhPSAw
KXtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtcblx0XHRc
dFx0dmFyIHZhbHVlID0gZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHRc
dFx0Ly8gSUUgYW5kIE9wZXJhIHN1cHBvcnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhcblx0XHRc
dFx0aWYgKCEoL3B4JC8udGVzdCh2YWx1ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQu
c3R5bGVbKCdwaXhlbC0nICsgcHJvcGVydHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0XHRpZiAo
dmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRz
JyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1l
bnQtMTAyMjkxXG5cdFx0XHRcdFx0XHR2YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDtcblx0
XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0XHRcdHZh
bHVlID0gZWxlbWVudC5zdHlsZS5waXhlbExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxl
LmxlZnQgPSBsZWZ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9tID0gKHRv
IHx8IDEpIC8gKHBhcnNlRmxvYXQodmFsdWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJvbSkgfHwg
MCk7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0KTtcblx0
XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhp
cy5wYXJzZSh0byl9O1xuXHR9LFxuXG5cdC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheVxu
XG5cdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5jb252ZXJ0
KHZhbHVlKSgpO1xuXHRcdHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1
ZS5zcGxpdCgnICcpIDogQXJyYXkuY29udmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlLm1h
cChmdW5jdGlvbih2YWwpe1xuXHRcdFx0dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2YXIgZm91
bmQgPSBmYWxzZTtcblx0XHRcdE9iamVjdC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihw
YXJzZXIpe1xuXHRcdFx0XHRpZiAoZm91bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBhcnNlZCA9
IHBhcnNlci5wYXJzZSh2YWwpO1xuXHRcdFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkg
Zm91bmQgPSB7dmFsdWU6IHBhcnNlZCwgcGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7XG5cdFx0
XHRmb3VuZCA9IGZvdW5kIHx8IHt2YWx1ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0
cmluZ307XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9jb21wdXRl
cyBieSBhIGZyb20gYW5kIHRvIHByZXBhcmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBhcnNlcnMu
XG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgY29tcHV0
ZWQgPSBbXTtcblx0XHQoTWF0aC5taW4oZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1
bmN0aW9uKGkpe1xuXHRcdFx0Y29tcHV0ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNv
bXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9baV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ld
LnBhcnNlcn0pO1xuXHRcdH0pO1xuXHRcdGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252
ZXJ0KCdmeDpjc3M6dmFsdWUnKTtcblx0XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5cblx0Ly9z
ZXJ2ZXMgdGhlIHZhbHVlIGFzIHNldHRhYmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1
bml0KXtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFsdWUgPSB0
aGlzLnBhcnNlKHZhbHVlKTtcblx0XHR2YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1ZS5lYWNo
KGZ1bmN0aW9uKGJpdCl7XG5cdFx0XHRyZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFy
c2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5pdCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXR1cm5l
ZDtcblx0fSxcblxuXHQvL3JlbmRlcnMgdGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5cblx0cmVu
ZGVyOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRcdGVsZW1l
bnQuc2V0U3R5bGUocHJvcGVydHksIHRoaXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0fSxcblxu
XHQvL3NlYXJjaGVzIGluc2lkZSB0aGUgcGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVzIGZvciBh
IHNlbGVjdG9yXG5cblx0c2VhcmNoOiBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYgKEZ4LkNT
Uy5DYWNoZVtzZWxlY3Rvcl0pIHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xuXHRcdHZh
ciB0byA9IHt9LCBzZWxlY3RvclRlc3QgPSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9yLmVzY2Fw
ZVJlZ0V4cCgpICsgJyQnKTtcblxuXHRcdHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxl
cyl7XG5cdFx0XHRBcnJheS5lYWNoKHJ1bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRcdFx0aWYg
KHJ1bGUubWVkaWEpe1xuXHRcdFx0XHRcdHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUu
Y3NzUnVsZXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXJ1
bGUuc3R5bGUpIHJldHVybjtcblx0XHRcdFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxlLnNlbGVj
dG9yVGV4dCkgPyBydWxlLnNlbGVjdG9yVGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0aW9uKG0p
e1xuXHRcdFx0XHRcdHJldHVybiBtLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDogbnVsbDtc
blx0XHRcdFx0aWYgKCFzZWxlY3RvclRleHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNlbGVjdG9y
VGV4dCkpIHJldHVybjtcblx0XHRcdFx0T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMsIGZ1bmN0
aW9uKHZhbHVlLCBzdHlsZSl7XG5cdFx0XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBF
bGVtZW50LlNob3J0U3R5bGVzW3N0eWxlXSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVlID0gU3Ry
aW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTtcblx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9ecmdiLyku
dGVzdCh2YWx1ZSkpID8gdmFsdWUucmdiVG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0
XHRcdH0pO1xuXHRcdH07XG5cblx0XHRBcnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBm
dW5jdGlvbihzaGVldCl7XG5cdFx0XHR2YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0XHRpZiAo
aHJlZiAmJiBocmVmLmluZGV4T2YoJzovLycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRvY3VtZW50
LmRvbWFpbikgPT0gLTEpIHJldHVybjtcblx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8
IHNoZWV0LmNzc1J1bGVzO1xuXHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9KTtcblx0
XHRyZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xuXG5GeC5D
U1MuQ2FjaGUgPSB7fTtcblxuRnguQ1NTLlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtcblx0XHRw
YXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZd
ezMsNn0kL2kpKSByZXR1cm4gdmFsdWUuaGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gKCh2
YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXFxkKyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykpKSA/IFt2
YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0Y29tcHV0
ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1hcChmdW5j
dGlvbih2YWx1ZSwgaSl7XG5cdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoZnJv
bVtpXSwgdG9baV0sIGRlbHRhKSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0fVxuXHR9
LFxuXG5cdE51bWJlcjoge1xuXHRcdHBhcnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1dGU6IEZ4
LmNvbXB1dGUsXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRcdHJldHVy
biAodW5pdCkgPyB2YWx1ZSArIHVuaXQgOiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0U3RyaW5n
OiB7XG5cdFx0cGFyc2U6IEZ1bmN0aW9uLmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1dGU6IGZ1
bmN0aW9uKHplcm8sIG9uZSl7XG5cdFx0XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0c2VydmU6
IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5cbn07XG5c
blxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBG
eC5TdHlsZXMsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRp
ZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcgYW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQg
c2VsZWN0b3IgcnVsZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogRnguQ1NTXG5cbnByb3ZpZGVzOiBGeC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1vcnBoID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rp
b24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0g
ZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5c
blx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJpbmcnKSBu
b3cgPSB0aGlzLnNlYXJjaChub3cpO1xuXHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRl
cih0aGlzLmVsZW1lbnQsIHAsIG5vd1twXSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5c
dFx0dmFyIG5vdyA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0gdGhpcy5w
YXJlbnQoZnJvbVtwXSwgdG9bcF0sIGRlbHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5c
dHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVy
dGllcykpIHJldHVybiB0aGlzO1xuXHRcdGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAnc3RyaW5n
JykgcHJvcGVydGllcyA9IHRoaXMuc2VhcmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBmcm9tID0g
e30sIHRvID0ge307XG5cdFx0Zm9yICh2YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRcdHZhciBw
YXJzZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3BdKTtcblx0
XHRcdGZyb21bcF0gPSBwYXJzZWQuZnJvbTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRvO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMubW9ycGggPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0
XHR0aGlzLmdldCgnbW9ycGgnKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9ycGggPSB0
aGlzLnJldHJpZXZlKCdtb3JwaCcpO1xuXHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9ycGggPSBu
ZXcgRnguTW9ycGgodGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdt
b3JwaCcsIG1vcnBoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07XG5cbkVs
ZW1lbnQuaW1wbGVtZW50KHtcblxuXHRtb3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRcdHRoaXMu
Z2V0KCdtb3JwaCcpLnN0YXJ0KHByb3BzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtc
blxuLypcbi0tLVxuXG5uYW1lOiBGeC5UcmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFp
bnMgYSBzZXQgb2YgYWR2YW5jZWQgdHJhbnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0
aGUgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6
XG4gIC0gRWFzaW5nIEVxdWF0aW9ucyBieSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2Jl
cnRwZW5uZXIuY29tL2Vhc2luZy8+LCBtb2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQg
d2l0aCBNb29Ub29scy5cblxucmVxdWlyZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFuc2l0aW9u
c1xuXG4uLi5cbiovXG5cbkZ4LmltcGxlbWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rp
b24oKXtcblx0XHR2YXIgdHJhbnMgPSB0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFu
c2l0aW9ucy5TaW5lLmVhc2VJbk91dDtcblx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdzdHJpbmcn
KXtcblx0XHRcdHZhciBkYXRhID0gdHJhbnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5zID0gRngu
VHJhbnNpdGlvbnM7XG5cdFx0XHR0cmFucyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5zW2RhdGFb
MF0uY2FwaXRhbGl6ZSgpXTtcblx0XHRcdGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5zWydlYXNl
JyArIGRhdGFbMV0uY2FwaXRhbGl6ZSgpICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0YWxpemUo
KSA6ICcnKV07XG5cdFx0fVxuXHRcdHJldHVybiB0cmFucztcblx0fVxuXG59KTtcblxuRnguVHJh
bnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5zaXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9IEFycmF5
LmNvbnZlcnQocGFyYW1zKTtcblx0dmFyIGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0
dXJuIHRyYW5zaXRpb24ocG9zLCBwYXJhbXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFwcGVu
ZChlYXNlSW4sIHtcblx0XHRlYXNlSW46IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5jdGlvbihw
b3Mpe1xuXHRcdFx0cmV0dXJuIDEgLSB0cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7XG5cdFx0
fSxcblx0XHRlYXNlSW5PdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBvcyA8PSAw
LjUgPyB0cmFuc2l0aW9uKDIgKiBwb3MsIHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgx
IC0gcG9zKSwgcGFyYW1zKSkpIC8gMjtcblx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJhbnNpdGlv
bnMgPSB7XG5cblx0bGluZWFyOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVybztcblx0
fVxuXG59O1xuXG5cblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlv
bnMpe1xuXHRmb3IgKHZhciB0cmFuc2l0aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9u
c1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25d
KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlvbihwLCB4
KXtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxuXG5cdEV4
cG86IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAxKSk7XG5c
dH0sXG5cblx0Q2lyYzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNpbihNYXRo
LmFjb3MocCkpO1xuXHR9LFxuXG5cdFNpbmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0g
TWF0aC5jb3MocCAqIE1hdGguUEkgLyAyKTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlvbihwLCB4
KXtcblx0XHR4ID0geCAmJiB4WzBdIHx8IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCAy
KSAqICgoeCArIDEpICogcCAtIHgpO1xuXHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24ocCl7XG5c
dFx0dmFyIHZhbHVlO1xuXHRcdGZvciAodmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89
IDIpe1xuXHRcdFx0aWYgKHAgPj0gKDcgLSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZhbHVlID0g
YiAqIGIgLSBNYXRoLnBvdygoMTEgLSA2ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0XHRcdFx0
YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxuXHRFbGFz
dGljOiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAtLXApICog
TWF0aC5jb3MoMjAgKiBwICogTWF0aC5QSSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtcblx0fVxu
XG59KTtcblxuWydRdWFkJywgJ0N1YmljJywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlv
bih0cmFuc2l0aW9uLCBpKXtcblx0RnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRngu
VHJhbnNpdGlvbihmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpO1xu
XHR9KTtcbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0aW9uOiBG
b3JtZXJseSBGeC5TdHlsZSwgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9wZXJ0eSBm
b3IgYW4gZWxlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBGeC5DU1NcblxucHJvdmlkZXM6IFtGeC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVtZW50Lmhp
Z2hsaWdodF1cblxuLi4uXG4qL1xuXG5GeC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5k
czogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xu
XHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xu
XHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcGVy
dHksIG5vdyl7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRub3cgPSBw
cm9wZXJ0eTtcblx0XHRcdHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMu
cHJvcGVydHk7XG5cdFx0fVxuXHRcdHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHks
IG5vdywgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0
YXJ0OiBmdW5jdGlvbihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhw
cm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFycmF5LmZs
YXR0ZW4oYXJndW1lbnRzKTtcblx0XHR0aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3Bl
cnR5IHx8IGFyZ3Muc2hpZnQoKTtcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMu
ZWxlbWVudCwgdGhpcy5wcm9wZXJ0eSwgYXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KHBh
cnNlZC5mcm9tLCBwYXJzZWQudG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMu
dHdlZW4gPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgndHdl
ZW4nKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0
d2VlbicpO1xuXHRcdGlmICghdHdlZW4pe1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdlZW4odGhp
cywge2xpbms6ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTtc
blx0XHR9XG5cdFx0cmV0dXJuIHR3ZWVuO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHR0d2VlbjogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0aGlzLmdl
dCgndHdlZW4nKS5zdGFydChwcm9wZXJ0eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGZhZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdldCgndHdl
ZW4nKSwgbWV0aG9kLCBhcmdzID0gWydvcGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyksIHRvZ2ds
ZTtcblx0XHRpZiAoYXJnc1sxXSA9PSBudWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5cdFx0c3dp
dGNoIChhcmdzWzFdKXtcblx0XHRcdGNhc2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sx
XSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sx
XSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFd
ID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0g
PSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFnID0gdGhp
cy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywgdGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpO1xu
XHRcdFx0XHRtZXRob2QgPSAnc3RhcnQnO1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/IDAgOiAx
O1xuXHRcdFx0XHR0aGlzLnN0b3JlKCdmYWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRcdHRvZ2ds
ZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0gJ3N0YXJ0
Jztcblx0XHR9XG5cdFx0aWYgKCF0b2dnbGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTtc
blx0XHRmYWRlW21ldGhvZF0uYXBwbHkoZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0gYXJnc1th
cmdzLmxlbmd0aCAtIDFdO1xuXG5cdFx0aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0XHR0aGlz
LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgdG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtc
blx0XHR9IGVsc2UgaWYgKHRvICE9IDApe1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxlbmd0aCl7
XG5cdFx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQu
c2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMuY2FsbENo
YWluKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRTdHls
ZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRc
dGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5nZXRTdHls
ZSgnb3BhY2l0eScpKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlz
aWJpbGl0eScsICdoaWRkZW4nKTtcblx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdH0p
O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDogZnVuY3Rp
b24oc3RhcnQsIGVuZCl7XG5cdFx0aWYgKCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5yZXRyaWV2
ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJywgdGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicp
KTtcblx0XHRcdGVuZCA9IChlbmQgPT0gJ3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBlbmQ7XG5c
dFx0fVxuXHRcdHZhciB0d2VlbiA9IHRoaXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVuLnN0YXJ0
KCdiYWNrZ3JvdW5kLWNvbG9yJywgc3RhcnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0
aW9uKCl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5yZXRy
aWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWluKCk7XG5c
dFx0fS5iaW5kKHRoaXMpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0t
LVxuXG5uYW1lOiBSZXF1ZXN0XG5cbmRlc2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBS
ZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhUVFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxucmVxdWlyZXM6IFtPYmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9w
dGlvbnMsIENsYXNzLlRoZW5hYmxlLCBCcm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVzdFxuXG4u
Li5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sXG5cdHBy
b2dyZXNzU3VwcG9ydCA9ICgnb25wcm9ncmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVzdCk7XG5c
bnZhciBSZXF1ZXN0ID0gdGhpcy5SZXF1ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRz
OiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6
IHsvKlxuXHRcdG9uUmVxdWVzdDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0OiBmdW5j
dGlvbihldmVudCwgeGhyKXt9LFxuXHRcdG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIp
e30sXG5cdFx0b25Db21wbGV0ZTogZnVuY3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBmdW5jdGlv
bigpe30sXG5cdFx0b25TdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1M
KXt9LFxuXHRcdG9uRmFpbHVyZTogZnVuY3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0aW9uOiBm
dW5jdGlvbihoZWFkZXJOYW1lLCB2YWx1ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7
fSxcblx0XHR1c2VyOiAnJyxcblx0XHRwYXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRlbnRpYWxz
OiBmYWxzZSwqL1xuXHRcdHVybDogJycsXG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVyczoge1xu
XHRcdFx0J1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0J0FjY2Vw
dCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3ht
bCwgKi8qJ1xuXHRcdH0sXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxzZSxcblx0
XHRtZXRob2Q6ICdwb3N0Jyxcblx0XHRsaW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nlc3M6IG51
bGwsXG5cdFx0ZW11bGF0aW9uOiB0cnVlLFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5cdFx0ZW5j
b2Rpbmc6ICd1dGYtOCcsXG5cdFx0ZXZhbFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxSZXNwb25z
ZTogZmFsc2UsXG5cdFx0dGltZW91dDogMCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9LFxuXG5c
dGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dz
ZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzLmhl
YWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVhZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hhbmdlOiBm
dW5jdGlvbigpe1xuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJlYWR5U3Rh
dGUgIT0gNCB8fCAhdGhpcy5ydW5uaW5nKSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFs
c2U7XG5cdFx0dGhpcy5zdGF0dXMgPSAwO1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24o
KXtcblx0XHRcdHZhciBzdGF0dXMgPSB4aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0dXMgPSAo
c3RhdHVzID09IDEyMjMpID8gMjA0IDogc3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0
eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQp
IHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYgKHRoaXMu
dGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRo
aXMudGltZXI7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5y
ZXNwb25zZVRleHQgfHwgJycsIHhtbDogdGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRcdGlmICh0
aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNhbGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRcdFx0dGhp
cy5zdWNjZXNzKHRoaXMucmVzcG9uc2UudGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xuXHRcdGVs
c2Vcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVuY3Rpb24o
KXtcblx0XHR2YXIgc3RhdHVzID0gdGhpcy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0dXMgPj0g
MjAwICYmIHN0YXR1cyA8IDMwMCk7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAhIXRoaXMucnVubmluZztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0czogZnVu
Y3Rpb24odGV4dCl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwgKC8oZWNt
YXxqYXZhKXNjcmlwdC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpKSkgcmV0
dXJuIEJyb3dzZXIuZXhlYyh0ZXh0KTtcblx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhp
cy5vcHRpb25zLmV2YWxTY3JpcHRzKTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0
LCB4bWwpe1xuXHRcdHRoaXMub25TdWNjZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4dCksIHht
bCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9LFxuXG5c
dG9uU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBh
cmd1bWVudHMpLmZpcmVFdmVudCgnc3VjY2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7XG5c
dH0sXG5cblx0ZmFpbHVyZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgpO1xuXHRc
dHRoaXMucmVqZWN0KHtyZWFzb246ICdmYWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxu
XG5cdG9uRmFpbHVyZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUn
KS5maXJlRXZlbnQoJ2ZhaWx1cmUnLCB0aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0YXJ0OiBm
dW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwg
dGhpcy54aHJdKTtcblx0fSxcblxuXHRwcm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdwcm9ncmVzcycsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHR0
aW1lb3V0OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0JywgdGhpcy54
aHIpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlzLnhocn0p
O1xuXHR9LFxuXG5cdHNldEhlYWRlcjogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHRoaXMu
aGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldEhl
YWRlcjogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rp
b24oKXtcblx0XHRcdHJldHVybiB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcblx0
XHR9LmJpbmQodGhpcykpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICgh
dGhpcy5ydW5uaW5nKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5r
KXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRc
dFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0
aGlzKSk7IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5c
dHNlbmQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRpb25zKSkg
cmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5vcHRpb25z
LmlzU3VjY2VzcyB8fCB0aGlzLmlzU3VjY2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xu
XG5cdFx0dmFyIHR5cGUgPSB0eXBlT2Yob3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0gJ3N0cmlu
ZycgfHwgdHlwZSA9PSAnZWxlbWVudCcpIG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307XG5cblx0
XHR2YXIgb2xkID0gdGhpcy5vcHRpb25zO1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtk
YXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQudXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25z
KTtcblx0XHR2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlvbnMudXJs
KSwgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3aXRjaCAo
dHlwZU9mKGRhdGEpKXtcblx0XHRcdGNhc2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQo
ZGF0YSkudG9RdWVyeVN0cmluZygpOyBicmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6IGNhc2Ug
J2hhc2gnOiBkYXRhID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxuXG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5mb3JtYXQpe1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3JtYXQ9JyAr
IHRoaXMub3B0aW9ucy5mb3JtYXQ7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0ICsgJyYn
ICsgZGF0YSA6IGZvcm1hdDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlv
biAmJiAhWydnZXQnLCAncG9zdCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIF9tZXRo
b2QgPSAnX21ldGhvZD0nICsgbWV0aG9kO1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9tZXRob2Qg
KyAnJicgKyBkYXRhIDogX21ldGhvZDtcblx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0XHR9XG5c
blx0XHRpZiAodGhpcy5vcHRpb25zLnVybEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCddLmNvbnRh
aW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5lbmNvZGlu
ZykgPyAnOyBjaGFyc2V0PScgKyB0aGlzLm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0XHRcdHRo
aXMuaGVhZGVyc1snQ29udGVudC10eXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl
bmNvZGVkJyArIGVuY29kaW5nO1xuXHRcdH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBkb2N1bWVu
dC5sb2NhdGlvbi5wYXRobmFtZTtcblxuXHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwubGFzdElu
ZGV4T2YoJy8nKTtcblx0XHRpZiAodHJpbVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9
IHVybC5pbmRleE9mKCcjJykpID4gLTEpIHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9u
KTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAodXJsLmlu
ZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xuXG5cdFx0
aWYgKGRhdGEgJiYgKG1ldGhvZCA9PSAnZ2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScpKXtcblx0
XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRhdGE7XG5c
dFx0XHRkYXRhID0gbnVsbDtcblx0XHR9XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0
aWYgKHByb2dyZXNzU3VwcG9ydCl7XG5cdFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlzLmxvYWRz
dGFydC5iaW5kKHRoaXMpO1xuXHRcdFx0eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJp
bmQodGhpcyk7XG5cdFx0fVxuXG5cdFx0eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNlKCksIHVy
bCwgdGhpcy5vcHRpb25zLmFzeW5jLCB0aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRpb25zLnBh
c3N3b3JkKTtcblx0XHRpZiAoKHRoaXMub3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYmICd3aXRo
Q3JlZGVudGlhbHMnIGluIHhocikgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblx0XHR4
aHIub25yZWFkeXN0YXRlY2hhbmdlID0gdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG5c
blx0XHRPYmplY3QuZWFjaCh0aGlzLmhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRc
dFx0dHJ5IHtcblx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG5cdFx0
XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXks
IHZhbHVlXSk7XG5cdFx0XHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24nLCB4aHI6
IHhociwgZXhjZXB0aW9uOiBlfSk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHRpZiAo
dGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0
VGhlbmFibGUoe3JlYXNvbjogJ3NlbmQnfSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdy
ZXF1ZXN0Jyk7XG5cdFx0eGhyLnNlbmQoZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXN5
bmMpIHRoaXMub25TdGF0ZUNoYW5nZSgpO1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aW1l
b3V0KSB0aGlzLnRpbWVyID0gdGhpcy50aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50aW1lb3V0
LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7
XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVubmluZyA9
IGZhbHNlO1xuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtcblx0XHRp
ZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRk
ZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVt
cHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9h
ZHN0YXJ0ID0gZW1wdHk7XG5cdFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5c
dFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdj
YW5jZWwnLCB4aHI6IHhocn0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIg
bWV0aG9kcyA9IHt9O1xuWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywg
J2hlYWQnLCAnR0VUJywgJ1BPU1QnLCAnUFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10u
ZWFjaChmdW5jdGlvbihtZXRob2Qpe1xuXHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbihkYXRh
KXtcblx0XHR2YXIgb2JqZWN0ID0ge1xuXHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9O1xuXHRc
dGlmIChkYXRhICE9IG51bGwpIG9iamVjdC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4gdGhpcy5z
ZW5kKG9iamVjdCk7XG5cdH07XG59KTtcblxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7XG5c
bkVsZW1lbnQuUHJvcGVydGllcy5zZW5kID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7
XG5cdFx0dmFyIHNlbmQgPSB0aGlzLmdldCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNlbmQuc2V0
T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0aWYgKCFz
ZW5kKXtcblx0XHRcdHNlbmQgPSBuZXcgUmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRoaXMsIGxp
bms6ICdjYW5jZWwnLCBtZXRob2Q6IHRoaXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDog
dGhpcy5nZXQoJ2FjdGlvbicpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3NlbmQnLCBz
ZW5kKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBs
ZW1lbnQoe1xuXG5cdHNlbmQ6IGZ1bmN0aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9IHRoaXMu
Z2V0KCdzZW5kJyk7XG5cdFx0c2VuZGVyLnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJsIHx8IHNl
bmRlci5vcHRpb25zLnVybH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjogRXh0ZW5k
cyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50
ZXJhY3Rpbmcgd2l0aCBIVE1MIHJlc3BvbnNlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJlcXVlc3Qu
SFRNTFxuXG4uLi5cbiovXG5cblJlcXVlc3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5k
czogUmVxdWVzdCxcblxuXHRvcHRpb25zOiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0XHRhcHBl
bmQ6IGZhbHNlLFxuXHRcdGV2YWxTY3JpcHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFsc2UsXG5c
dFx0aGVhZGVyczoge1xuXHRcdFx0QWNjZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWws
IHRleHQveG1sLCAqLyonXG5cdFx0fVxuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQp
e1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMucmVzcG9u
c2U7XG5cblx0XHRyZXNwb25zZS5odG1sID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2Ny
aXB0KXtcblx0XHRcdHJlc3BvbnNlLmphdmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7XG5cblx0
XHR2YXIgbWF0Y2ggPSByZXNwb25zZS5odG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxzXFxTXSo/
KTxcXC9ib2R5Pi9pKTtcblx0XHRpZiAobWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTtc
blx0XHR2YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5o
dG1sKTtcblxuXHRcdHJlc3BvbnNlLnRyZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0cmVzcG9u
c2UuZWxlbWVudHMgPSB0ZW1wLmdldEVsZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7XG5c
blx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50
cztcblx0XHRpZiAob3B0aW9ucy51cGRhdGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRvY3VtZW50
LmlkKG9wdGlvbnMudXBkYXRlKS5lbXB0eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB1
cGRhdGUuYWRvcHQocmVzcG9uc2UuZWxlbWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUuc2V0KCdo
dG1sJywgcmVzcG9uc2UuaHRtbCk7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7XG5c
dFx0XHR2YXIgYXBwZW5kID0gZG9jdW1lbnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRcdFx0aWYg
KG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVu
ZCk7XG5cdFx0XHRlbHNlIGFwcGVuZC5hZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xuXHRcdH1c
blx0XHRpZiAob3B0aW9ucy5ldmFsU2NyaXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNlLmphdmFz
Y3JpcHQpO1xuXG5cdFx0dGhpcy5vblN1Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxl
bWVudHMsIHJlc3BvbnNlLmh0bWwsIHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRoaXMucmVz
b2x2ZSh7dHJlZTogcmVzcG9uc2UudHJlZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1lbnRzLCBo
dG1sOiByZXNwb25zZS5odG1sLCBqYXZhc2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0fSk7XG5c
dH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5sb2FkID0ge1xuXG5cdHNldDogZnVuY3Rp
b24ob3B0aW9ucyl7XG5cdFx0dmFyIGxvYWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpO1xu
XHRcdGxvYWQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCdsb2FkJyk7
XG5cdFx0aWYgKCFsb2FkKXtcblx0XHRcdGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtkYXRhOiB0
aGlzLCBsaW5rOiAnY2FuY2VsJywgdXBkYXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7XG5cdFx0
XHR0aGlzLnN0b3JlKCdsb2FkJywgbG9hZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2FkO1xuXHR9
XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMuZ2V0KCdsb2FkJykuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUu
aXNPYmplY3QsIHVybDogVHlwZS5pc1N0cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09OIGVuY29k
ZXIgYW5kIGRlY29kZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5TZWVBbHNv
OiA8aHR0cDovL3d3dy5qc29uLm9yZy8+XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVt
YmVyLCBGdW5jdGlvbl1cblxucHJvdmlkZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAodHlwZW9m
IEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRoaXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBzcGVjaWFsID0geydcXGInOiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0JywgJ1xcbic6
ICdcXFxcbicsICdcXGYnOiAnXFxcXGYnLCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdcXFxcXCIn
LCAnXFxcXCc6ICdcXFxcXFxcXCd9O1xuXG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXtcblx0
cmV0dXJuIHNwZWNpYWxbY2hyXSB8fCAnXFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0
KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9IGZ1bmN0
aW9uKHN0cmluZyl7XG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wiXFxcXFxc
L2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXCJb
XlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxmYWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/Oltl
RV1bK1xcLV0/XFxkKyk/L2csICddJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6fCwpKD86
XFxzKlxcWykrL2csICcnKTtcblxuXHRyZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50ZXN0KHN0
cmluZyk7XG59O1xuXG5KU09OLmVuY29kZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rpb24ob2Jq
KXtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2JqKXtcblx0
aWYgKG9iaiAmJiBvYmoudG9KU09OKSBvYmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dpdGNoICh0
eXBlT2Yob2JqKSl7XG5cdFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCInICsgb2Jq
LnJlcGxhY2UoL1tcXHgwMC1cXHgxZlxcXFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5cdFx0Y2Fz
ZSAnYXJyYXknOlxuXHRcdFx0cmV0dXJuICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFu
KCkgKyAnXSc7XG5cdFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2YXIgc3Ry
aW5nID0gW107XG5cdFx0XHRPYmplY3QuZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xu
XHRcdFx0XHR2YXIganNvbiA9IEpTT04uZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYgKGpzb24p
IHN0cmluZy5wdXNoKEpTT04uZW5jb2RlKGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRcdH0pO1xu
XHRcdFx0cmV0dXJuICd7JyArIHN0cmluZyArICd9Jztcblx0XHRjYXNlICdudW1iZXInOiBjYXNl
ICdib29sZWFuJzogcmV0dXJuICcnICsgb2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1cm4gJ251
bGwnO1xuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRydWU7XG5c
blxuSlNPTi5kZWNvZGUgPSBmdW5jdGlvbihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICghc3RyaW5n
IHx8IHR5cGVPZihzdHJpbmcpICE9ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRpZiAoc2Vj
dXJlID09IG51bGwpIHNlY3VyZSA9IEpTT04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtcblx0XHRp
ZiAoSlNPTi5wYXJzZSkgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAoIUpTT04u
dmFsaWRhdGUoc3RyaW5nKSkgdGhyb3cgbmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUg
dGhlIGlucHV0OyBzZWN1cml0eSBpcyBlbmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3Vy
ZS4nKTtcblx0fVxuXG5cdHJldHVybiBldmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59O1xuXG59
KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlvbjogRXh0
ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Ig
c2VuZGluZyBhbmQgcmVjZWl2aW5nIEpTT04gZGF0YS5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBbUmVxdWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJlcXVlc3Qu
SlNPTlxuXG4uLi5cbiovXG5cblJlcXVlc3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5k
czogUmVxdWVzdCxcblxuXHRvcHRpb25zOiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlvbih0ZXh0
LCBlcnJvcil7fSwqL1xuXHRcdHNlY3VyZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9iamVjdC5h
cHBlbmQodGhpcy5oZWFkZXJzLCB7XG5cdFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24n
LFxuXHRcdFx0J1gtUmVxdWVzdCc6ICdKU09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6
IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRqc29uID0g
dGhpcy5yZXNwb25zZS5qc29uID0gSlNPTi5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25zLnNlY3Vy
ZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3Ipe1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vycm9yJywg
W3RleHQsIGVycm9yXSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29uID09IG51
bGwpe1xuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub25T
dWNjZXNzKGpzb24sIHRleHQpO1xuXHRcdFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0
OiB0ZXh0fSk7XG5cdFx0fVxuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENvb2tpZVxu
XG5kZXNjcmlwdGlvbjogQ2xhc3MgZm9yIGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcg
YnJvd3NlciBDb29raWVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0
czpcbiAgLSBCYXNlZCBvbiB0aGUgZnVuY3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDov
L3F1aXJrc21vZGUub3JnKS5cblxucmVxdWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxuXG5wcm92
aWRlczogQ29va2llXG5cbi4uLlxuKi9cblxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7XG5cblx0
SW1wbGVtZW50czogT3B0aW9ucyxcblxuXHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8nLFxuXHRc
dGRvbWFpbjogZmFsc2UsXG5cdFx0ZHVyYXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTogZmFsc2Us
XG5cdFx0ZG9jdW1lbnQ6IGRvY3VtZW50LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRodHRwT25s
eTogZmFsc2Vcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xu
XHRcdHRoaXMua2V5ID0ga2V5O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxc
blxuXHR3cml0ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW5jb2Rl
KSB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMub3B0aW9u
cy5kb21haW4pIHZhbHVlICs9ICc7IGRvbWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFpbjtcblx0
XHRpZiAodGhpcy5vcHRpb25zLnBhdGgpIHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9u
cy5wYXRoO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFyIGRhdGUg
PSBuZXcgRGF0ZSgpO1xuXHRcdFx0ZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgdGhpcy5v
cHRpb25zLmR1cmF0aW9uICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1ZSArPSAn
OyBleHBpcmVzPScgKyBkYXRlLnRvR01UU3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9w
dGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAnOyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMu
aHR0cE9ubHkpIHZhbHVlICs9ICc7IEh0dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMuZG9jdW1l
bnQuY29va2llID0gdGhpcy5rZXkgKyAnPScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRyZWFkOiBmdW5jdGlvbigpe1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5k
b2N1bWVudC5jb29raWUubWF0Y2goJyg/Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVn
RXhwKCkgKyAnPShbXjtdKiknKTtcblx0XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBv
bmVudCh2YWx1ZVsxXSkgOiBudWxsO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5c
dFx0bmV3IENvb2tpZSh0aGlzLmtleSwgT2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtk
dXJhdGlvbjogLTF9KSkud3JpdGUoJycpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xu
XG5Db29raWUud3JpdGUgPSBmdW5jdGlvbihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0cmV0dXJu
IG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29raWUucmVh
ZCA9IGZ1bmN0aW9uKGtleSl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSkucmVhZCgpO1xufTtc
blxuQ29va2llLmRpc3Bvc2UgPSBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3
IENvb2tpZShrZXksIG9wdGlvbnMpLmRpc3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxubmFtZTog
RE9NUmVhZHlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVh
ZHkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jyb3dzZXIs
IEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50KXtcblxudmFyIHJlYWR5
LFxuXHRsb2FkZWQsXG5cdGNoZWNrcyA9IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1lcixcblx0
dGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIGRvbXJl
YWR5ID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFyZWFkeSl7
XG5cdFx0QnJvd3Nlci5sb2FkZWQgPSByZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQucmVtb3Zl
TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVuZXIoJ3Jl
YWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFk
eScpO1xuXHRcdHdpbmRvdy5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8gY2xlYW51
cCBzY29wZSB2YXJzXG5cdGRvY3VtZW50ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsO1xu
fTtcblxudmFyIGNoZWNrID0gZnVuY3Rpb24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNrcy5sZW5n
dGg7IGktLTspIGlmIChjaGVja3NbaV0oKSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0aW9uKCl7
XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1l
b3V0KHBvbGwsIDEwKTtcbn07XG5cbmRvY3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9h
ZGVkJywgZG9tcmVhZHkpO1xuXG4vKjxsdElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5
IERpZWdvIFBlcmluaSBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVk
L1xuLy8gdGVzdEVsZW1lbnQuZG9TY3JvbGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCBy
ZWFkeSwgb25seSBpbiB0aGUgdG9wIHdpbmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlv
bigpe1xuXHR0cnkge1xuXHRcdHRlc3RFbGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHRy
dWU7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRvU2Nyb2xs
IHdvcmtzIGFscmVhZHksIGl0IGNhbid0IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJlYWR5XG4v
LyAgIGUuZy4gaW4gYW4gaWZyYW1lXG5pZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYgIWRvU2Ny
b2xsV29ya3MoKSl7XG5cdGNoZWNrcy5wdXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91bGRQb2xs
ID0gdHJ1ZTtcbn1cbi8qPC9sdElFOD4qL1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hl
Y2tzLnB1c2goZnVuY3Rpb24oKXtcblx0dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtc
blx0cmV0dXJuIChzdGF0ZSA9PSAnbG9hZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUnKTtcbn0p
O1xuXG5pZiAoJ29ucmVhZHlzdGF0ZWNoYW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50LmFkZExp
c3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xsID0gdHJ1
ZTtcblxuaWYgKHNob3VsZFBvbGwpIHBvbGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9tcmVhZHkg
PSB7XG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxsKHRoaXMp
O1xuXHR9XG59O1xuXG4vLyBNYWtlIHN1cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9h
ZFxuRWxlbWVudC5FdmVudHMubG9hZCA9IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFkZDogZnVu
Y3Rpb24oZm4pe1xuXHRcdGlmIChsb2FkZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNhbGwodGhp
cyk7XG5cdH0sXG5cdGNvbmRpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9PSB3aW5k
b3cpe1xuXHRcdFx0ZG9tcmVhZHkoKTtcblx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2Fk
O1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBiYXNlZCBv
biB0aGUgY3VzdG9tIGxvYWQgZXZlbnRcbndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9u
KCl7XG5cdGxvYWRlZCA9IHRydWU7XG59KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7XG4iCitt
b2R1bGUuZXhwb3J0cyA9ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBs
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYt
MjAxNyBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxu
V2ViIEJ1aWxkOiBodHRwczovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3
YzU4MDdiMTczZDVkZWZmNjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3Jp
cHRpb246IFRoZSBoZWFydCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbmNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0
dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9v
bHMgcHJvZHVjdGlvbiB0ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5p
bnNwaXJhdGlvbjpcbiAgLSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5q
c10oaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmln
aHQgKGMpIDIwMDYgRGVhbiBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAg
LSBTb21lIGZ1bmN0aW9uYWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3By
b3RvdHlwZWpzLm9yZykgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtN
SVQgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBo
cClcblxucHJvdmlkZXM6IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9m
LCBOYXRpdmVdXG5cbi4uLlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3
b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMp
IDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5l
LykuKi9cbihmdW5jdGlvbigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42
LjAnLFxuXHRidWlsZDogJzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmIn
XG59O1xuXG4vLyB0eXBlT2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9m
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5c
dGlmIChpdGVtLiRmYW1pbHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlm
IChpdGVtLm5vZGVOYW1lKXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2Vs
ZW1lbnQnO1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3Qo
aXRlbS5ub2RlVmFsdWUpID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlm
ICh0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBp
dGVtKSByZXR1cm4gJ2FyZ3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4g
J2NvbGxlY3Rpb24nO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGlu
c3RhbmNlT2YgPSB0aGlzLmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRp
ZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0u
JGNvbnN0cnVjdG9yIHx8IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7
XG5cdFx0aWYgKGNvbnN0cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0
cnVjdG9yID0gY29uc3RydWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICgh
aXRlbS5oYXNPd25Qcm9wZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0
dXJuIGl0ZW0gaW5zdGFuY2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBP
YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1l
cmFibGVzID0gdHJ1ZTtcbmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMg
PSBudWxsO1xuaWYgKGVudW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHkn
LCAndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3Rv
TG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JF
YWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJh
YmxlcykgZm9yICh2YXIgaSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsg
PSBlbnVtZXJhYmxlc1tpXTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3Zl
cmxvYWRTZXR0ZXIgY2FuIGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9u
LCB3aXRob3V0IHN3YXBwaW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2Fs
bChvYmplY3QsIGspKSBmbi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9s
dElFOD4qL1xuXG4vLyBGdW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlz
LkZ1bmN0aW9uO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlv
bih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBi
KXtcblx0XHRpZiAoYSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8
IHR5cGVvZiBhICE9ICdzdHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxs
KHRoaXMsIGssIGFba10pO1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RF
bnVtYmVyYWJsZUtleShhLCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHRzZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0
aGlzO1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVu
Y3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24o
YSl7XG5cdFx0dmFyIGFyZ3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycp
IGFyZ3MgPSBhO1xuXHRcdGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJn
dW1lbnRzO1xuXHRcdGVsc2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJn
cyl7XG5cdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5s
ZW5ndGg7IGkrKykgcmVzdWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5k
ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9h
ZFNldHRlcigpO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5
LCB2YWx1ZSl7XG5cdHRoaXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0
ZXIoKTtcblxuLy8gRnJvbVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5c
bkFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0
dXJuIFtdO1xuXHRyZXR1cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVt
ICE9ICdzdHJpbmcnKSA/ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2Uu
Y2FsbChpdGVtKSA6IFtpdGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihp
dGVtKXtcblx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQg
PSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJl
dHVybiBpc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252
ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVu
Y3Rpb24uZnJvbSA9IEZ1bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252
ZXJ0O1xuU3RyaW5nLmZyb20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxu
XG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4k
aGlkZGVuID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5j
dGlvbigpe1xuXHRcdHRoaXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH1cblxufSk7XG5cbi8vIFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihu
YW1lLCBvYmplY3Qpe1xuXHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2Vy
Q2FzZSgpO1xuXHRcdHZhciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVy
biAodHlwZU9mKGl0ZW0pID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFt
ZV0gPSB0eXBlQ2hlY2s7XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5w
cm90b3R5cGUuJGZhbWlseSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5c
dFx0XHR9KS5oaWRlKCk7XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51
bGwpIHJldHVybiBudWxsO1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29u
c3RydWN0b3IgPSBUeXBlO1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVj
dDtcblxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZztcblxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0
cmV0dXJuIChpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYm
IHRvU3RyaW5nLmNhbGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFy
IGhvb2tzID0ge307XG5cbnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5
cGUgPSB0eXBlT2Yob2JqZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAo
aG9va3NbdHlwZV0gPSBbXSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwg
bWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZh
ciBob29rcyA9IGhvb2tzT2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5s
ZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhv
b2spID09ICd0eXBlJykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRl
bHNlIGhvb2suY2FsbCh0aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3Vz
ID0gdGhpcy5wcm90b3R5cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2
aW91cy4kcHJvdGVjdGVkKSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAo
dGhpc1tuYW1lXSA9PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVu
ZC5jYWxsKHRoaXMsIG5hbWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBw
bHkoaXRlbSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0
ZW5kID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhp
ZGRlbikgcmV0dXJuO1xuXHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlv
dXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtc
bn07XG5cblR5cGUuaW1wbGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9h
ZFNldHRlcigpLFxuXG5cdGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxp
YXM6IGZ1bmN0aW9uKG5hbWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBu
YW1lLCB0aGlzLnByb3RvdHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5c
blx0bWlycm9yOiBmdW5jdGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7
XG5cbi8vIERlZmF1bHQgVHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0
LCBtZXRob2RzKXtcblx0dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90
b3R5cGUgPSBvYmplY3QucHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBU
eXBlKG5hbWUsIG9iamVjdCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmlj
ID0gb2JqZWN0W2tleV0sXG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYg
KGdlbmVyaWMpIGdlbmVyaWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9i
amVjdC5pbXBsZW1lbnQoa2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlw
ZSl7XG5cdFx0dmFyIG1ldGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVt
ZXJhYmxlKG1ldGhvZHNbMF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24o
Zm4pe1xuXHRcdFx0aWYgKCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBt
ZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBw
cm90b3R5cGVbbWV0aG9kc1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2
YXIga2V5IGluIHByb3RvdHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBr
ZXkpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5n
JywgU3RyaW5nLCBbXG5cdCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFp
bnMnLCAnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNl
JywgJ3NlYXJjaCcsXG5cdCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywg
J3RyaW0nLCAndG9Mb3dlckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwg
W1xuXHQncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScs
ICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFz
dEluZGV4T2YnLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAn
cmVkdWNlJywgJ3JlZHVjZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwg
W1xuXHQndG9FeHBvbmVudGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJl
Y2lzaW9uJ1xuXSkoJ0Z1bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAn
YmluZCdcbl0pKCdSZWdFeHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmpl
Y3QnLCBPYmplY3QsIFtcblx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9w
ZXJ0aWVzJywgJ2tleXMnLFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yJywgJ2dldE93blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAn
aXNFeHRlbnNpYmxlJywgJ3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xu
XSkoJ0RhdGUnLCBEYXRlLCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVy
bG9hZFNldHRlcigpO1xuXG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJu
ICsobmV3IERhdGUpO1xufSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8v
IGZpeGVzIE5hTiByZXR1cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWls
eSA9IGZ1bmN0aW9uKCl7XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251
bGwnO1xufS5oaWRlKCk7XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFu
ZG9tJywgZnVuY3Rpb24obWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRv
bSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBr
ZXlzXG5cbkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8
IGw7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpO1xuXHRcdH1cblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihm
biwgYmluZCl7XG5cdFx0QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9u
KG9iamVjdCl7XG5cdFx0dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7
XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7
XG5cdFx0fVxuXHRcdC8qPGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5
KG9iamVjdCwgZnVuY3Rpb24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0
Lyo8L2x0SUU4PiovXG5cdFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rp
b24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1
bmN0aW9uKGtleSl7XG5cdFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVj
dCk7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7
XG5cblxuLy8gQXJyYXkgJiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVu
ZGluZ1xuXG52YXIgY2xvbmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihp
dGVtKSl7XG5cdFx0Y2FzZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2Ug
J29iamVjdCc6IHJldHVybiBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJu
IGl0ZW07XG5cdH1cbn07XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xu
XHR2YXIgaSA9IHRoaXMubGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGkt
LSkgY2xvbmVbaV0gPSBjbG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxu
dmFyIG1lcmdlT25lID0gZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2gg
KHR5cGVPZihjdXJyZW50KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yo
c291cmNlW2tleV0pID09ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJl
bnQpO1xuXHRcdFx0ZWxzZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0
XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25l
KCk7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRy
ZXR1cm4gc291cmNlO1xufTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9u
KHNvdXJjZSwgaywgdil7XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1l
cmdlT25lKHNvdXJjZSwgaywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMu
bGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5c
dFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0
W2tleV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5j
dGlvbihvYmplY3Qpe1xuXHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBv
YmplY3QpIGNsb25lW2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xv
bmU7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIg
aSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRl
bmRlZCA9IGFyZ3VtZW50c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRl
ZCkgb3JpZ2luYWxba2V5XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmln
aW5hbDtcblx0fVxuXG59KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAn
V2hpdGVTcGFjZScsICdUZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2go
ZnVuY3Rpb24obmFtZSl7XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxu
XG52YXIgVUlEID0gRGF0ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5j
dGlvbigpe1xuXHRyZXR1cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5
IFByb3RvdHlwZXMgbGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlc
blxuLi4uXG4qL1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6
IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3Ro
ID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChi
aW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVz
dWx0cyA9IFtdO1xuXHRcdGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+
PiAwOyBpIDwgbDsgaSsrKSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtc
blx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZh
bHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVu
Y3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xu
XHRcdGZvciAodmFyIGkgPSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkg
OiBmcm9tIHx8IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRl
bSkgcmV0dXJuIGk7XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0
aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3Vs
dHMgPSBBcnJheShsZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
e1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tp
XSwgaSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6
IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3Ro
ID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJp
bmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZh
bHNlO1xuXHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51
bGw7XG5cdFx0fSk7XG5cdH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0
XHR2YXIgYXJncyA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMu
bWFwKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHko
aXRlbSwgYXJncyk7XG5cdFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlz
KXtcblx0XHR2YXIgb2JqID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlz
Lmxlbmd0aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNb
aV1dID0gdGhpc1tpXTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9u
KG9iamVjdCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0g
dGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7
XG5cdFx0XHRcdGlmIChvYmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tl
eV0gPSB0aGlzW2ldO1xuXHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRi
cmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9
LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5p
bmRleE9mKGl0ZW0sIGZyb20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJy
YXkpe1xuXHRcdHRoaXMucHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3Ro
KSA/IHRoaXNbdGhpcy5sZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9t
KDAsIHRoaXMubGVuZ3RoIC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlv
bihpdGVtKXtcblx0XHRpZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5j
bHVkZShhcnJheVtpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRp
ZiAodGhpc1tpXSA9PT0gaXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0g
MDtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRc
dHZhciBhcnJheSA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAo
dHlwZSA9PSAnbnVsbCcpIGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5
cGUgPT0gJ2FycmF5JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVu
dHMnIHx8IGluc3RhbmNlT2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tp
XSkgOiB0aGlzW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6
IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9
XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHRpZiAodGhpcy5sZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRo
aXMubWFwKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFs
dWUgKz0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtc
blx0XHRyZXR1cm4gKGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxu
XHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJl
dHVybiBudWxsO1xuXHRcdGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAh
YXJyYXkpIHJldHVybiAndHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3Ig
KHZhciBpID0gMDsgaSA8IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50
b1N0cmluZygxNik7XG5cdFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJp
dCA6IGJpdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4Lmpv
aW4oJycpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmlu
ZCwgcGFzcywgYW5kIGRlbGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24u
ZXh0ZW5kKHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRy
ZXR1cm4gYXJndW1lbnRzW2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJl
dHVybiBudWxsO1xuXHR9XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVt
cHQ6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5h
cHBseShiaW5kLCBBcnJheS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0
XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rp
b24odGhhdCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5s
ZW5ndGggPiAxID8gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0g
ZnVuY3Rpb24oKXt9O1xuXG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBj
b250ZXh0ID0gdGhhdCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlz
IGluc3RhbmNlb2YgYm91bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBl
O1xuXHRcdFx0XHRjb250ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0g
KCFhcmdzICYmICFsZW5ndGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRc
dDogc2VsZi5hcHBseShjb250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5
LnNsaWNlKGFyZ3VtZW50cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNv
bnRleHQgPT0gdGhhdCA/IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91
bmQ7XG5cdH0sXG5cdC8qPC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBi
aW5kKXtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9
IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1
cm4gc2VsZi5hcHBseShiaW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxu
XHRkZWxheTogZnVuY3Rpb24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1l
b3V0KHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtc
blx0fSxcblxuXHRwZXJpb2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtc
blx0XHRyZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFy
Z3MpLCBiaW5kKSwgcGVyaW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5h
bWU6IE51bWJlclxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlr
ZSBsaW1pdCwgcm91bmQsIHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xu
XG5OdW1iZXIuaW1wbGVtZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRc
dHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJv
dW5kOiBmdW5jdGlvbihwcmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBw
cmVjaXNpb24gfHwgMCkudG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xu
XHRcdHJldHVybiBNYXRoLnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9
LFxuXG5cdHRpbWVzOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzOyBpKyspIGZuLmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0lu
dDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTAp
O1xuXHR9XG5cbn0pO1xuXG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0
aW9uKG1hdGgpe1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFt
ZSl7XG5cdGlmICghTnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gTWF0aFtuYW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZl
cnQoYXJndW1lbnRzKSkpO1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7
XG5cbn0pKFsnYWJzJywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAn
Y29zJywgJ2V4cCcsICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywg
J3NxcnQnLCAndGFuJ10pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlv
bjogQ29udGFpbnMgU3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUs
IHRlc3QsIGFuZCB0b0ludC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBbVHlwZSwgQXJyYXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJp
bmcuaW1wbGVtZW50KHtcblxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5n
LCBpbmRleCl7XG5cdFx0cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkg
OiBTdHJpbmcodGhpcykpLmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5c
blxuXHR0ZXN0OiBmdW5jdGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2Yo
cmVnZXgpID09ICdyZWdleHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJh
bXMpKS50ZXN0KHRoaXMpO1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xl
YW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2cs
ICcgJykudHJpbSgpO1xuXHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0
cmV0dXJuIG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5c
dGh5cGhlbmF0ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2Uo
L1tBLVpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hh
ckF0KDApLnRvTG93ZXJDYXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9
KTtcblx0fSxcblxuXHRlc2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmlu
Zyh0aGlzKS5yZXBsYWNlKC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScp
O1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQo
dGhpcywgYmFzZSB8fCAxMCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJy
YXkpe1xuXHRcdHZhciBoZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3
ezEsMn0pKFxcd3sxLDJ9KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4
VG9SZ2IoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkp
e1xuXHRcdHZhciByZ2IgPSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJl
dHVybiAocmdiKSA/IHJnYi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0
aXR1dGU6IGZ1bmN0aW9uKG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UocmVnZXhwIHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0
Y2gsIG5hbWUpe1xuXHRcdFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBt
YXRjaC5zbGljZSgxKTtcblx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2Jq
ZWN0W25hbWVdIDogJyc7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5h
bWU6IEJyb3dzZXJcblxuZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMg
QnJvd3NlciBpbml0aWFsaXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93
c2VyIEhhc2guXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Fy
cmF5LCBGdW5jdGlvbiwgTnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2lu
ZG93LCBEb2N1bWVudF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50
ID0gdGhpcy5kb2N1bWVudDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xu
XG52YXIgcGFyc2UgPSBmdW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJD
YXNlKCk7XG5cdHBsYXRmb3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6
ICcnKTtcblxuXHQvLyBjaHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQg
dG8gY2hlY2sgZm9yIGVkZ2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNo
cm9tZS5cblx0dmFyIFVBID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSsp
Lyk7XG5cdGlmICghVUEpe1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNo
cm9tZXx0cmlkZW50fGNyaW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNh
ZmFyaXwoPzpydltcXHNcXC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykg
fHwgW251bGwsICd1bmtub3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQn
KXtcblx0XHRVQVsxXSA9ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9
IGVsc2UgaWYgKFVBWzFdID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1c
blxuXHRwbGF0Zm9ybSA9IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1
YS5tYXRjaCgvKD86d2Vib3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8p
IHx8IFsnb3RoZXInXSlbMF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAn
d2luZG93cyc7XG5cblx0cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5l
eHRlbmQsXG5cdFx0bmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxu
XHRcdHZlcnNpb246IHBhcnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFb
NF0gOiBVQVsyXSksXG5cdFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJv
d3NlciA9IHRoaXMuQnJvd3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRv
ci5wbGF0Zm9ybSk7XG5cbmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1
bWVudE1vZGUpe1xuXHRCcm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59
XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1l
bnQuZXZhbHVhdGUpLFxuXHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAh
IShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0
fSxcblx0cGFyc2VVQTogcGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJl
cXVlc3QgPSAoZnVuY3Rpb24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtc
blx0fTtcblxuXHR2YXIgTVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZl
WE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24u
YXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtc
blx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9
LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxu
fSkoKTtcblxuQnJvd3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5c
blxuLy8gU3RyaW5nIHNjcmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5c
dGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0
d2luZG93LmV4ZWNTY3JpcHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUo
J3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRc
dGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJl
bW92ZUNoaWxkKHNjcmlwdCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1w
bGVtZW50KCdzdHJpcFNjcmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAn
Jztcblx0dmFyIHRleHQgPSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8
XFwvc2NyaXB0Pi9naSwgZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUg
KyAnXFxuJztcblx0XHRyZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJv
d3Nlci5leGVjKHNjcmlwdHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9u
JykgZXhlYyhzY3JpcHRzLCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93
LCBEb2N1bWVudFxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50
LFxuXHRXaW5kb3c6IHRoaXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2
ZW50OiB0aGlzLkV2ZW50XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9
IG5ldyBUeXBlKCdXaW5kb3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5j
dGlvbi5jb252ZXJ0KCd3aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9j
dW1lbnQgPSBkb2N1bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5j
dGlvbigpe30pO1xuXG5kb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1l
bnQnKS5oaWRlKCk7XG5cbkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xu
XHRkb2N1bWVudFtuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50
LmV4ZWNDb21tYW5kKSB0cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZElt
YWdlQ2FjaGUnLCBmYWxzZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5p
ZiAodGhpcy5hdHRhY2hFdmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVu
bG9hZEV2ZW50ID0gZnVuY3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcs
IHVubG9hZEV2ZW50KTtcblx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3Vt
ZW50LndpbmRvdyA9IG51bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9
IG51bGw7XG5cdH07XG5cdHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQp
O1xufVxuXG4vLyBJRSBmYWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAo
cmVmZXJzIHRvIDxzZWxlY3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkg
e1xuXHRhcnJheUZyb20oZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xu
XHRBcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9
ICdzdHJpbmcnICYmIFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAn
YXJyYXknKXtcblx0XHRcdHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkp
O1xuXHRcdFx0d2hpbGUgKGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFy
cmF5O1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBw
cm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7
XG5cdFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScs
ICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1l
KXtcblx0XHR2YXIgbWV0aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0g
ZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQo
aXRlbSksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwv
bHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBl
eHRlbmRpbmcsIGFuZCBpbXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTog
TUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24s
IE51bWJlcl1cblxucHJvdmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBDbGFzcyA9IHRoaXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJh
bXMpe1xuXHRpZiAoaW5zdGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRp
YWxpemU6IHBhcmFtc307XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNl
dCh0aGlzKTtcblx0XHRpZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0
XHR0aGlzLiRjYWxsZXIgPSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFy
IHZhbHVlID0gKHRoaXMuaW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywg
YXJndW1lbnRzKSA6IHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxs
O1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7
XG5cblx0bmV3Q2xhc3MuJGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlw
ZS4kY29uc3RydWN0b3IgPSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9
IHBhcmVudDtcblxuXHRyZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0
aW9uKCl7XG5cdGlmICghdGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2Qg
XCJwYXJlbnRcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxl
ci4kbmFtZSxcblx0XHRwYXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRw
cmV2aW91cyA9IChwYXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlm
ICghcHJldmlvdXMpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wi
IGhhcyBubyBwYXJlbnQuJyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpO1xufTtcblxudmFyIHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5
IGluIG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0
eXBlT2YodmFsdWUpKXtcblx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVu
Y3Rpb24oKXt9O1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rb
a2V5XSA9IHJlc2V0KG5ldyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6
IG9iamVjdFtrZXldID0gdmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVy
biBvYmplY3Q7XG59O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtc
blx0aWYgKG1ldGhvZC4kb3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdy
YXBwZXIgPSBmdW5jdGlvbigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRj
YWxsZXIgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdc
IiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3Vy
cmVudCA9IHRoaXMuJGNhbGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNh
bGxlciA9IHdyYXBwZXI7XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1
bWVudHMpO1xuXHRcdHRoaXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVy
O1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46
IG1ldGhvZCwgJG5hbWU6IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBs
ZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRv
cnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXld
LmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztc
blx0fVxuXG5cdGlmICh0eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1
ZS4kaGlkZGVuKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFp
bikgPyB2YWx1ZSA6IHdyYXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2Jq
ZWN0Lm1lcmdlKHRoaXMucHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0
aGlzO1xufTtcblxudmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4k
cHJvdG90eXBpbmcgPSB0cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBr
bGFzcy4kcHJvdG90eXBpbmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVu
dCgnaW1wbGVtZW50JywgaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRh
dG9ycyA9IHtcblxuXHRFeHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50
ID0gcGFyZW50O1xuXHRcdHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0
fSxcblxuXHRJbXBsZW1lbnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChp
dGVtcykuZWFjaChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVt
O1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBr
ZXksIGluc3RhbmNlW2tleV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFp
bnMgVXRpbGl0eSBDbGFzc2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24g
Q2xhc3NlcyB0byBlYXNlIHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6
IFtDbGFzcy5FeHRyYXMsIENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1
bmN0aW9uKCl7XG5cbnRoaXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5c
blx0Y2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0
ZW4oYXJndW1lbnRzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWlu
LnNoaWZ0KCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFy
Q2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fVxuXG59KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0
cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qp
e1xuXHRcdHJldHVybiBmaXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZl
bnRzID0gbmV3IENsYXNzKHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rp
b24odHlwZSwgZm4sIGludGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0
XHRcblxuXHRcdHRoaXMuJGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10p
LmluY2x1ZGUoZm4pO1xuXHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0
XHRmb3IgKHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlw
ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlw
ZSwgYXJncywgZGVsYXkpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZl
bnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztc
blx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlv
bihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0
XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0
eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBl
XTtcblx0XHRpZiAoZXZlbnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBl
dmVudHMuaW5kZXhPZihmbik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNb
aW5kZXhdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6
IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMp
ID09ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZl
bnQodHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRp
ZiAoZXZlbnRzKSBldmVudHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0
aGlzLiRldmVudHMpe1xuXHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGlu
dWU7XG5cdFx0XHR2YXIgZm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIg
aSA9IGZucy5sZW5ndGg7IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3Zl
RXZlbnQodHlwZSwgZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH1cblxufSk7XG5cbnRoaXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJn
ZS5hcHBseShudWxsLCBbe30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRc
dGlmICh0aGlzLmFkZEV2ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRp
ZiAodHlwZU9mKG9wdGlvbnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8p
LnRlc3Qob3B0aW9uKSkgY29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0
aW9uc1tvcHRpb25dKTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENs
YXNzLlRoZW5hYmxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhh
dCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBc
InRoZW5hYmxlXCIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
Q2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rp
b24oKXtcblxudmFyIFNUQVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxu
XHRTVEFURV9SRUpFQ1RFRCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0g
bmV3IENsYXNzKHtcblxuXHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5h
YmxlUmVzdWx0OiBudWxsLFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRo
aXMsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0
ZTogZnVuY3Rpb24oKXtcblx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0
Y2FzZSBTVEFURV9QRU5ESU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRj
YXNlIFNUQVRFX0ZVTEZJTExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0
XHRjYXNlIFNUQVRFX1JFSkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9
XG5cdH0sXG5cblx0cmVzZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3Qo
dGhpcywgcmVhc29uKTtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHR0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5
cGVvZiBvbkZ1bGZpbGxlZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHkn
O1xuXHRcdGlmICh0eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9
ICdUaHJvd2VyJztcblxuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0
dGhpcy4kdGhlbmFibGVSZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUs
XG5cdFx0XHRmdWxmaWxsSGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVy
OiBvblJlamVjdGVkXG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0g
U1RBVEVfUEVORElORyl7XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4g
dGhlbmFibGU7XG5cdH0sXG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0
cmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFi
bGUuZXh0ZW5kKHtcblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJs
ZTtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9
IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xu
XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFi
bGU7XG5cdH0sXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUg
PSBuZXcgVGhlbmFibGUoKTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0
dXJuIHRoZW5hYmxlO1xuXHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rp
b24gcmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3Rh
dGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRc
dFx0cmVqZWN0KHRoZW5hYmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhl
bmFibGUgd2l0aCBpdHNlbGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2
YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0
XHR2YXIgdGhlbjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRc
dFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRp
b24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0
XHRcdFx0dmFyIHJlc29sdmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5c
dFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFs
dWUsXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0
aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0
XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0
XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtc
blx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29s
dmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtc
blx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0
XHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xu
XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVu
YWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0p
O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRc
dFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0
fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRo
ZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4k
dGhlbmFibGVSZXN1bHQgPSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNU
QVRFX0ZVTEZJTExFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlv
biByZWplY3QodGhlbmFibGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0
ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVh
c29uO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0
XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xu
XHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRo
ZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3Rh
dGUgPSBTVEFURV9QRU5ESU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtc
blx0dmFyIHN0YXRlID0gdGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhl
bmFibGUuJHRoZW5hYmxlUmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJs
ZVJlYWN0aW9ucyxcblx0XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVE
KXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1
bGZpbGxIYW5kbGVyJztcblx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RI
YW5kbGVyJztcblx0fVxuXG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVz
dWx0LCByZWFjdGlvbnMsIHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3Vs
dCwgcmVhY3Rpb25zLCB0eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVu
Z3RoOyBpIDwgbDsgKytpKXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0
XHRoYW5kbGVyID0gcmVhY3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50
aXR5Jyl7XG5cdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0g
ZWxzZSBpZiAoaGFuZGxlciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50
aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVz
b2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2gg
KGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9u
KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9j
ZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0
aW9uJyl7XG5cdGRlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNl
dEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0g
ZWxzZSB7XG5cdGRlZmVyID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xu
XHR9O1xufVxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlv
bjogT2JqZWN0IGdlbmVyaWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9c
blxuKGZ1bmN0aW9uKCl7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24o
b2JqZWN0LCBrZXlzKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAw
LCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xu
XHRcdFx0aWYgKGsgaW4gb2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0
XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJp
bmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhv
YmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0
XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5c
dH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVz
dWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNb
aV0sIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwg
a2V5LCBvYmplY3QpKSByZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJl
c3VsdHM7XG5cdH0sXG5cblx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRc
dHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAo
IWZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5c
dFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmlu
ZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkg
PSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0
XHRcdGlmIChmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0
KXtcblx0XHR2YXIgdmFsdWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmpl
Y3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2
YXIgayA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0
XHRyZXR1cm4gdmFsdWVzO1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtc
blx0XHRyZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6
IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2Jq
ZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0
dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1
cm4ga2V5O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVu
Y3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZh
bHVlKSAhPSBudWxsO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwg
YmFzZSl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmpl
Y3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAn
WycgKyBrZXkgKyAnXSc7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2Yo
dmFsdWUpKXtcblx0XHRcdFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlT
dHJpbmcodmFsdWUsIGtleSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRc
dFx0dmFyIHFzID0ge307XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xu
XHRcdFx0XHRcdFx0cXNbaV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0
ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0
XHRcdGRlZmF1bHQ6IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1
ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChy
ZXN1bHQpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0
fVxuXG59KTtcblxufSkoKTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVz
Y3JpcHRpb246IFN0YW5kYWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGlj
ay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBh
cmF0b3JJbmRleCxcblx0Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7
fSxcblx0cmV2ZXJzZUNhY2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIg
cGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Np
b24gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVl
KSByZXR1cm4gZXhwcmVzc2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJl
cGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5c
dHZhciBjdXJyZW50Q2FjaGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5c
dGlmIChjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVz
c2lvbl07XG5cdHBhcnNlZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczog
W10sXG5cdFx0cmF3OiBleHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0
XHRyZXR1cm4gcGFyc2UodGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9y
SW5kZXggPSAtMTtcblx0d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNz
aW9uLnJlcGxhY2UocmVnZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQu
ZXhwcmVzc2lvbnMubGVuZ3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0g
KHJldmVyc2VkKSA/IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNl
Q29tYmluYXRvciA9IGZ1bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0g
JyEnKSByZXR1cm4gJyAnO1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAn
ISc7XG5cdGVsc2UgaWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRv
ci5yZXBsYWNlKC9eIS8sICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07
XG5cbnZhciByZXZlcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9u
cyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVz
c2lvbnMubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2
YXIgbGFzdCA9IHtwYXJ0czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmlu
YXRvcihleHBbMF0uY29tYmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAu
bGVuZ3RoOyBqKyspe1xuXHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAu
cmV2ZXJzZUNvbWJpbmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRj
ZXhwLmNvbWJpbmF0b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNl
eHAucmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxh
c3QpO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9
IGZ1bmN0aW9uKHN0cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDgg
U3RldmVuIExldml0aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAv
PiBNSVQgTGljZW5zZVxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxc
XF4kfCwjXFxzXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNo
O1xuXHR9KTtcbn07XG5cbnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4v
ZW52IHJ1YnlcbnB1dHMgXCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxc
cysjLiokfFxccyt8XFxcXCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0
ICBcXFxccyogKCAsICkgXFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAg
XFxuXFxcblx0fCBcXFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9y
ICAgICAgICAgXFxuXFxcblx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29t
YmluYXRvckNoaWxkcmVuIFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAg
ICAjIFRhZyAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAg
ICAgKSAgICAgIyBJRCAgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29k
ZT4rICAgICAgICkgICAgICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsg
IFxcXG5cdFx0XFxcXHMqICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWype
JCF+fF0/PSkgICg/OiAgXFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwi
J10/KSguKj8pXFxcXDkgXFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxc
cyogIFxcXG5cdFxcXFxdKD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/
OlxcXG5cdFxcXFwoICg/OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwo
KD86XFxcXChbXildK1xcXFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClc
IlxuKi9cblx0XCJeKD86XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxz
KnwoXFxcXHMrKXwoPHVuaWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVu
aWNvZGU+Kyl8XFxcXFtcXFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86
XFxcXHMqKD86KFtcXFwiJ10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDor
KSg8dW5pY29kZT4rKSg/OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwo
KD86XFxcXChbXildK1xcXFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29t
YmluYXRvcj4vLCAnWycgKyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAn
XScpXG5cdC5yZXBsYWNlKC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZG
RkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2cs
ICcoPzpbOlxcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0p
Jylcbik7XG5cbmZ1bmN0aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxu
XHRjb21iaW5hdG9yLFxuXHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQs
XG5cdGNsYXNzTmFtZSxcblxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxu
XHRhdHRyaWJ1dGVRdW90ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxu
XHRwc2V1ZG9DbGFzcyxcblx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUs
XG5cdHBzZXVkb0NsYXNzVmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5k
ZXggPT09IC0xKXtcblx0XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBb
XTtcblx0XHRjb21iaW5hdG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4g
Jyc7XG5cdH1cblxuXHRpZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29t
YmluYXRvckluZGV4ID09PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAn
O1xuXHRcdHZhciBjdXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRv
ckluZGV4XTtcblx0XHRpZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9y
SW5kZXhdKVxuXHRcdFx0Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VD
b21iaW5hdG9yID0gcmV2ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNl
cGFyYXRvclsrK2NvbWJpbmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFn
OiAnKid9O1xuXHR9XG5cblx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNb
c2VwYXJhdG9ySW5kZXhdW2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRc
dGN1cnJlbnRQYXJzZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxu
XHR9IGVsc2UgaWYgKGlkKXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9
IGNsYXNzTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBh
cnNlZC5jbGFzc0xpc3QpIGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFj
dXJyZW50UGFyc2VkLmNsYXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1
cnJlbnRQYXJzZWQuY2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2Vk
LmNsYXNzZXMucHVzaCh7XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBu
ZXcgUmVnRXhwKCcoXnxcXFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxz
fCQpJylcblx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9D
bGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xu
XHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1
ZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJz
ZWQucHNldWRvcykgY3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNl
ZC5wc2V1ZG9zLnB1c2goe1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2Nh
cGUsICcnKSxcblx0XHRcdHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNl
dWRvTWFya2VyLmxlbmd0aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5c
dH0gZWxzZSBpZiAoYXR0cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVL
ZXkucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmli
dXRlVmFsdWUgfHwgJycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3Qs
IHJlZ2V4cDtcblxuXHRcdHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAn
Xj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmli
dXRlVmFsdWUpICAgICAgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAg
PSBuZXcgUmVnRXhwKCAgICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyck
JyAgICAgICApOyBicmVhaztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAo
ICcoXnxcXFxccyknKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyAp
OyBicmVhaztcblx0XHRcdGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICde
JysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAgJz0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0
dHJpYnV0ZVZhbHVlID09IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScg
OiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUu
aW5kZXhPZihhdHRyaWJ1dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnIT0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0
ZVZhbHVlICE9IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0
ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5c
dFx0fVxuXG5cdFx0aWYgKGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0
KGF0dHJpYnV0ZU9wZXJhdG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFs
c2U7XG5cdFx0fTtcblxuXHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHRcdHJldHVybiB2YWx1ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlm
ICghY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBb
XTtcblx0XHRjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJp
YnV0ZUtleSxcblx0XHRcdG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVl
OiBhdHRyaWJ1dGVWYWx1ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0
cmV0dXJuICcnO1xufTtcblxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sg
fHwge30pO1xuXG5TbGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4g
cGFyc2UoZXhwcmVzc2lvbik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdF
eHA7XG5cbmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgv
KjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDog
Lyo8L0NvbW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVz
Y3JpcHRpb246IFRoZSBuZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlk
ZXM6IFNsaWNrLkZpbmRlclxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1
bmN0aW9uKCl7XG5cbnZhciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRv
U3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBk
ZXRlY3Rpb25cblxubG9jYWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4g
KC9cXHtcXHMqXFxbbmF0aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5c
bmxvY2FsLmlzWE1MID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQu
eG1sVmVyc2lvbikgfHwgKCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVu
dCkgPT0gJ1tvYmplY3QgWE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09
IDkgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xu
XG5sb2NhbC5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0
IGVsZW1lbnRzIC8gd2luZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fu
bm90IGJlIGV4dHJhcG9sYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlw
ZSA9IGRvY3VtZW50Lm5vZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50
XG5cdGVsc2UgaWYgKG5vZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7
IC8vIG5vZGVcblx0ZWxzZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3Vt
ZW50LmRvY3VtZW50OyAvLyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYg
aXQncyB0aGUgb2xkIGRvY3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50
KSByZXR1cm47XG5cdHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3
ZSBoYXZlIGRvbmUgZmVhdHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxu
XHR2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhp
cy5nZXRVSURYTUwocm9vdCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRd
LFxuXHRcdGZlYXR1cmU7XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4g
ZmVhdHVyZXMpe1xuXHRcdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRc
dH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVp
ZF0gPSB7fTtcblxuXHRmZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1
bWVudCA9IHRoaXMuaXNYTUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJU
TlxuXHQ9IGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRz
TmFtZVxuXHQ9IGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tl
bkdFQkNOXG5cdD0gZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tl
bkVtcHR5QXR0cmlidXRlUVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0
dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVj
dHNDbG9zZWQsIHN0YXJTZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1l
R0VCQ04sIGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJp
YnV0ZUdldHRlcjtcblxuXHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0
dmFyIHRlc3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRl
c3RSb290ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
Ym9keScpWzBdIHx8IHJvb3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxu
XHQvLyBvbiBub24tSFRNTCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQg
ZG9lc250IHdvcmsgcHJvcGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAn
PGEgaWQ9XCInK2lkKydcIj48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEh
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZl
YXR1cmVzLmlzSFRNTERvY3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAn
bm9uZSc7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRz
QnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMg
PSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRc
dC8vIElFIHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVz
dE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2Rl
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChz
ZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFy
QXQoMCkgPT0gJy8nKTtcblx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2Vu
U3RhckdFQlROID0gc3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxu
XHRcdC8vIElFIHJldHVybnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3Qg
aWQgZm9yIGdldEVsZW1lbnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRc
dFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1c
IicrIGlkICsnXCI+PC9iPic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoaWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2gg
KGUpe31cblxuXHRcdGlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRc
dFx0Ly8gU2FmYXJpIDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5c
dFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+
PC9hPjxhIGNsYXNzPVwiYlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCdiJykubGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNz
TmFtZSA9ICdiJztcblx0XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0
Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUg
ZG9lc250IGRldGVjdHMgdGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0
dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48
YSBjbGFzcz1cImYgYiBhXCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdF
QkNOID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7
XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2Fj
aGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtc
blx0XHR9XG5cblx0XHRpZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJ
RSA4IHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3Rv
ckFsbCgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5v
ZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUu
cXVlcnlTZWxlY3RvckFsbCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3Nl
ZFFTQSA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2Rl
TmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8g
U2FmYXJpIDMuMiBxdWVyeVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9u
IHF1aXJrc21vZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8
YSBjbGFzcz1cIk1pWFwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VR
U0EgPSAhdGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0g
Y2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxl
Y3RlZCBvcHRpb25zIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRl
c3ROb2RlLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwi
PmE8L29wdGlvbj48L3NlbGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNB
ID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xu
XHRcdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVz
dWx0cyBmb3IgYXR0clsqXiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwv
YT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9k
ZS5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0
fSBjYXRjaCAoZSl7fVxuXG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4g
aW5wdXQgb2YgaWQgeCwgZm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0
byB0aGUgaW5wdXRcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3Jt
IGFjdGlvbj1cInNcIj48aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9r
ZW5Gb3JtQXR0cmlidXRlR2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRl
KCdhY3Rpb24nKSAhPSAncycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBt
YXRjaGVzU2VsZWN0b3IgZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3RvciA9IHJvb3QubWF0Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290
Lm1vek1hdGNoZXNTZWxlY3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRp
ZiAoZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0
Y2hlc1NlbGVjdG9yIHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVz
ZSBpdFxuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpz
bGljaycpO1xuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0
XHR9IGNhdGNoIChlKXt9XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRv
ID0gMTtcblx0XHRkZWxldGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJ
RCA9IHRoaXMuZ2V0VUlESFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlE
ID0gdGhpcy5nZXRVSURYTUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9k
ZSk7XG5cdHRlc3ROb2RlID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0
QXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERv
Y3VtZW50ICYmIGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFt
ZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRp
ZiAobWV0aG9kKSByZXR1cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5v
ZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVO
b2RlKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5v
ZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07
XG5cdFx0cmV0dXJuIChtZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJp
YnV0ZShuYW1lKTtcblx0fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNB
dHRyaWJ1dGUgPSAocm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkp
ID8gZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1
dGUoYXR0cmlidXRlKTtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9k
ZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2Rl
ICYmIChub2RlLnNwZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNv
bnRhaW5zXG5cdC8vIEZJWE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBk
aWZmZXJlbnQgZm9yIHhtbCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29u
dGFpbnMgPSByb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5h
dGl2ZURvY3VtZW50Q29udGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1
bWVudC5jb250YWlucyk7XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRh
aW5zICYmIG5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7
XG5cdFx0cmV0dXJuIGNvbnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENv
bnRhaW5zICYmICFuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5v
ZGUpe1xuXHRcdC8vIElFOCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0
XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDog
KHJvb3QgJiYgcm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0
LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwg
bm9kZSl7XG5cdFx0aWYgKG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSBy
ZXR1cm4gdHJ1ZTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRc
dHJldHVybiBmYWxzZTtcblx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8v
IGNyZWRpdHMgdG8gU2l6emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5k
b2N1bWVudFNvcnRlciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9u
KGEsIGIpe1xuXHRcdGlmICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50
UG9zaXRpb24oYikgJiA0ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUlu
ZGV4JyBpbiByb290KSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8
fCAhYi5zb3VyY2VJbmRleCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBi
LnNvdXJjZUluZGV4O1xuXHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEs
IGIpe1xuXHRcdGlmICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVy
biAwO1xuXHRcdHZhciBhUmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJh
bmdlID0gYi5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0
KGEsIDApO1xuXHRcdGFSYW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIs
IDApO1xuXHRcdGJSYW5nZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtc
blxuXHRyb290ID0gbnVsbDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRo
aXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRo
b2RcblxudmFyIHJlU2ltcGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQv
LFxuXHRyZUVtcHR5QXR0cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0
cXNhRmFpbEV4cENhY2hlID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQs
IGV4cHJlc3Npb24sIGFwcGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQg
PSAoZmlyc3QpID8gbnVsbCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0
dXJuIGZvdW5kO1xuXHRlbHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRl
eHQuZG9jdW1lbnQ7IC8vIENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3Vt
ZW50XG5cdGVsc2UgaWYgKCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8g
c2V0dXBcblxuXHR2YXIgcGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhp
cy51bmlxdWVzID0ge30sXG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5n
dGgpLFxuXHRcdGNvbnRleHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5c
blx0aWYgKHRoaXMuZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBj
b250ZXh0Lm93bmVyRG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8v
IGF2b2lkIGR1cGxpY2F0aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRp
ZiAoaGFzT3RoZXJzKSBmb3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5n
ZXRVSUQoZm91bmRbaV0pXSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRp
ZiAodHlwZW9mIGV4cHJlc3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3Ry
aW5nXG5cblx0XHQvKjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBs
ZVNlbGVjdG9yID0gZXhwcmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1w
bGVTZWxlY3RvcnM6IGlmIChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBz
aW1wbGVTZWxlY3RvclsxXSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5c
dFx0XHRpZiAoIXN5bWJvbCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJv
a2VuU3RhckdFQlROKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29u
dGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1
cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2kr
K107KXtcblx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChu
b2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAo
c3ltYm9sID09ICcjJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFj
b250ZXh0SXNEb2N1bWVudCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0g
Y29udGV4dC5nZXRFbGVtZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4g
Zm91bmQ7XG5cdFx0XHRcdGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVO
b2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0
XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3Ro
ZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxu
XHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNI
VE1MRG9jdW1lbnQgfHwgKCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMu
YnJva2VuR0VCQ04pICYmIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNl
bGVjdG9ycztcblx0XHRcdFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAh
dGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUobmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0g
fHwgbnVsbDtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRc
dFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkg
Zm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRc
dFx0dmFyIG1hdGNoQ2xhc3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVS
ZWdFeHAobmFtZSkgKycoXFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9k
ZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0
XHRcdFx0XHRpZiAoIShjbGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBj
b250aW51ZTtcblx0XHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0
XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5w
dXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlm
IChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51
bGwgOiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4q
L1xuXG5cdFx0Lyo8cXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9y
OiBpZiAoY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRN
TERvY3VtZW50XG5cdFx0XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0
XHQvL1RPRE86IG9ubHkgc2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2Fz
ZVxuXHRcdFx0XHR8fCB0aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5i
cm9rZW5DaGVja2VkUVNBICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxu
XHRcdFx0XHR8fCAodGhpcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmli
dXRlLnRlc3QoZXhwcmVzc2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9B
Ym9ydCB3aGVuICFjb250ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUg
YXJlIG11bHRpcGxlIGV4cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBz
aW5jZSB3ZSBjdXJyZW50bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNp
bmdsZSBleHByZXNzaW9uIHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhP
ZignLCcpID4gLTFcblx0XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0
XHQpIGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJl
c3Npb24sIF9jb250ZXh0ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0
SXNEb2N1bWVudCl7XG5cdFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRc
dC8vIGNyZWRpdHMgdG8gQW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4
dC5nZXRBdHRyaWJ1dGUoJ2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2Nv
bnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9
ICcjJyArIHNsaWNraWQgKyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9j
b250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChm
aXJzdCkgcmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtc
blx0XHRcdFx0ZWxzZSBub2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lv
bik7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Np
b25dID0gMTtcblx0XHRcdFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7
XG5cdFx0XHRcdGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50
SWQpIF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVs
c2UgX2NvbnRleHQucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBf
Y29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0
c0Nsb3NlZFFTQSkgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYg
KG5vZGUubm9kZU5hbWUgPiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJ
RChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3Ro
aXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlm
IChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0
XHR9XG5cdFx0Lyo8L3F1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0
aGlzLlNsaWNrLnBhcnNlKGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0
dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlz
IG5vIGV4cHJlc3Npb25cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lv
bi5TbGljayl7IC8vIGV4cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFy
c2VkID0gZXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9j
dW1lbnRFbGVtZW50IHx8IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBh
IG5vZGVcblx0XHQoZm91bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhw
cmVzc2lvbjtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0
XHRyZXR1cm4gZm91bmQ7XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBz
ZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxl
Y3RvcnNcblxuXHR0aGlzLnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0
dGhpcy5wb3NOVEhUeXBlID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQv
KjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8v
IGlmIGFwcGVuZCBpcyBudWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdp
dGggb25lIGV4cHJlc3Npb24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlz
LnB1c2ggPSAoIWhhc090aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBw
YXJzZWQuZXhwcmVzc2lvbnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRo
aXMucHVzaFVJRDtcblxuXHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBk
ZWZhdWx0IGVuZ2luZVxuXG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBp
ZCwgY2xhc3NMaXN0LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVu
dEl0ZW1zLCBjdXJyZW50RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lv
bnMgPSBwYXJzZWQuZXhwcmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVu
dEV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRC
aXQgPSBjdXJyZW50RXhwcmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2Nv
bWJpbmF0b3I6JyArIGN1cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmlu
YXRvcl0pIGNvbnRpbnVlIHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERv
Y3VtZW50KSA/IGN1cnJlbnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtc
blx0XHRpZCAgICAgICAgID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVu
dEJpdC5jbGFzc0xpc3Q7XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0
XHRhdHRyaWJ1dGVzID0gY3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBj
dXJyZW50Qml0LnBzZXVkb3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJl
c3Npb24ubGVuZ3RoIC0gMSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRp
ZiAobGFzdEJpdCl7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5m
b3VuZCA9IGZvdW5kO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0
XHRcdHRoaXMuZm91bmQgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0
aGlzW2NvbWJpbmF0b3JdKGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5s
ZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxh
c3RCaXQpIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtc
blx0XHRcdFx0dGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5s
ZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVu
dEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNb
bV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5c
dFx0fVxuXG5cdFx0Y3VycmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3Vs
ZCBzb3J0IGlmIHRoZXJlIGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRp
cGxlIGV4cHJlc3Npb25zLlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMu
bGVuZ3RoID4gMSkpIHRoaXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91
bmRbMF0gfHwgbnVsbCkgOiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAx
O1xubG9jYWwudWlkayA9ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1
bmN0aW9uKG5vZGUpe1xuXHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtc
blx0aWYgKCF1aWQpe1xuXHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmli
dXRlKHRoaXMudWlkaywgdWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0
VUlESFRNTCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwg
KG5vZGUudW5pcXVlTnVtYmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBv
biB0aGUgc2V0RG9jdW1lbnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0g
ZnVuY3Rpb24ocmVzdWx0cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJl
c3VsdHM7XG5cdHJlc3VsdHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJl
c3VsdHM7XG59O1xuXG4vKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3Rv
cnM+Ki9cblxubG9jYWwuY2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1d
P1xcZCopPyhbYS16XSspPyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQg
PSBmdW5jdGlvbihhcmd1bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlz
Lm1hdGNoTlRIKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwg
PSBwYXJzZWRbMl0gfHwgZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChh
ID09ICctJykgYSA9IC0xO1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1c
blx0XHQoc3BlY2lhbCA9PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0g
J29kZCcpXHQ/IHthOiAyLCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTog
MiwgYjogMH0gOiB7YTogMCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3Vt
ZW50XSA9IHBhcnNlZCk7XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihj
aGlsZCwgc2libGluZywgcG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9k
ZSwgYXJndW1lbnQpe1xuXHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAo
IXRoaXNbcG9zaXRpb25zXVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5v
ZGU7XG5cdFx0XHRpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFy
ZW50W2NoaWxkXSwgY291bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBu
b2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwu
bm9kZU5hbWUgIT0gbm9kZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25z
XVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxb
c2libGluZ10pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAo
ZWwubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3Ro
aXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJs
aW5nXSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztc
blx0XHR2YXIgcGFyc2VkID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5U
SEFyZ3VtZW50KGFyZ3VtZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRc
dHZhciBhID0gcGFyc2VkLmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3Vp
ZF07XG5cdFx0aWYgKGEgPT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5c
dFx0XHRpZiAocG9zIDwgYikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAo
YiA8IHBvcykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEp
ID09IDA7XG5cdH07XG59O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRv
LXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rv
cihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3Vu
ZC5wdXNoKG5vZGUpO1xufTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRV
SUQobm9kZSk7XG5cdGlmICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9y
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlz
LnVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59
O1xuXG5sb2NhbC5tYXRjaE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0
aGlzLmlzSFRNTERvY3VtZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0
cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwg
c2VsZWN0b3IucmVwbGFjZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywg
J1skMT1cIiQyXCJdJykpO1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZh
ciBwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJl
dHVybiB0cnVlO1xuXG5cdC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJl
c3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3Vy
cmVudEV4cHJlc3Npb247XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJl
c3Npb25zW2ldKTsgaSsrKXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEp
e1xuXHRcdFx0dmFyIGV4cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMu
bWF0Y2hTZWxlY3Rvcihub2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAu
dGFnLnRvVXBwZXJDYXNlKCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBl
eHAucHNldWRvcykpIHJldHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRc
dH1cblx0fVxuXG5cdGlmIChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVy
biBmYWxzZTtcblxuXHR2YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJz
ZWQpLCBpdGVtO1xuXHRmb3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChp
dGVtID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5s
b2NhbC5tYXRjaFBzZXVkbyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFy
IHBzZXVkb05hbWUgPSAncHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkg
cmV0dXJuIHRoaXNbcHNldWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRl
ID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8g
YXJndW1lbnQgPT0gYXR0cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNl
bGVjdG9yID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7XG5cdGlmICh0YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1l
bnQpID8gbm9kZS5ub2RlTmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRp
ZiAodGFnID09ICcqJyl7XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsg
Ly8gRml4IGZvciBjb21tZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xu
XHRcdFx0aWYgKG5vZGVOYW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5c
dGlmIChpZCAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xu
XG5cdHZhciBpLCBwYXJ0LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxl
bmd0aDsgaS0tOyl7XG5cdFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7
XG5cdFx0aWYgKCEoY2xzICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBm
YWxzZTtcblx0fVxuXHRpZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7
IGktLTspe1xuXHRcdHBhcnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9y
ID8gIXBhcnQudGVzdCh0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMu
aGFzQXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChw
c2V1ZG9zKSBmb3IgKGkgPSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVk
b3NbaV07XG5cdFx0aWYgKCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZh
bHVlKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJp
bmF0b3JzID0ge1xuXG5cdCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2
ZWxcblxuXHRcdHZhciBpLCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERv
Y3VtZW50KXtcblx0XHRcdGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFs
bCkgfHwgKHRoaXMuaWRHZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgn
aWQnKS5ub2RlVmFsdWUgIT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxs
IHRoZSBlbGVtZW50cyB3aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRc
dC8vIGlmIHRoZXJlcyBqdXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBp
dCB3aWxsIGJlIGEgY29sbGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRd
O1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxk
cmVuWzBdKSBjaGlsZHJlbiA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRl
bSA9IGNoaWxkcmVuW2krK107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0
dHJpYnV0ZU5vZGUoJ2lkJyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2Rl
VmFsdWUgPT0gaWQpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0
XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRc
dFx0XHRpZiAoIWl0ZW0pe1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBk
b20gd2UgcmV0dXJuLCBlbHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJ
ZCBsYWJlbFxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJl
dHVybjtcblx0XHRcdFx0XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAo
dGhpcy5kb2N1bWVudCAhPT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0
dXJuO1xuXHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFz
czogaWYgKGNsYXNzZXMgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJy
b2tlbkdFQkNOKXtcblx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoY2xhc3NMaXN0LmpvaW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxk
cmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0g
PSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5
VGFnOiB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtc
blx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFn
O1xuXHRcdFx0aWYgKCF0aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZv
ciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1
bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBk
aXJlY3QgY2hpbGRyZW5cblx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5c
dFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5l
eHRTaWJsaW5nKSk7XG5cdH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0
dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xu
XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBp
ZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9k
ZSA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2Rl
VHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1
bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBu
ZXh0IHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRc
dFx0aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhp
cy5nZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xu
XHRcdFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxu
XHQnKysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKXsgLy8gbmV4dCBzaWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29t
YmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdFx0dGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2
aW91cyBzaWJsaW5nc1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQn
ISc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
eyAvLyBhbGwgcGFyZW50IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0g
bm9kZS5wYXJlbnROb2RlKSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQn
IT4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KXsgLy8gZGlyZWN0IHBhcmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5v
ZGU7XG5cdFx0aWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5j
dGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJl
dmlvdXMgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0s
XG5cblx0JyFeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyl7IC8vIGxhc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0
aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlz
Wydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2Rl
VHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtc
blx0XHRcdGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVu
aXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMg
aW4gY29tYmluYXRvcnMpIGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2Nd
O1xuXG52YXIgcHNldWRvcyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2Vt
cHR5JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xu
XHRcdHJldHVybiAhKGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5l
clRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3Qn
OiBmdW5jdGlvbihub2RlLCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2Rl
KG5vZGUsIGV4cHJlc3Npb24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUs
IHRleHQpe1xuXHRcdHJldHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8
fCAnJykuaW5kZXhPZih0ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYg
KG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9
LFxuXG5cdCdsYXN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0g
bm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtc
blx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUp
e1xuXHRcdHZhciBwcmV2ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3Vz
U2libGluZykpIGlmIChwcmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIg
bmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChu
ZXh0Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxc
blxuXHQvKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5j
cmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5c
blx0J250aC1sYXN0LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAn
cHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2Nh
bC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlw
ZScsIHRydWUpLFxuXG5cdCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRv
KCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSks
XG5cblx0J2luZGV4JzogZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydw
c2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2
ZW4nOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCdd
KG5vZGUsICcybicpO1xuXHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1
cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8
L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3Jz
PiovXG5cblx0J2ZpcnN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5h
bWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJs
aW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
Lm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxz
ZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5c
dFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFt
ZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3
aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9k
ZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2Yt
dHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5h
YmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxc
blxuXHQnZGlzYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxl
ZDtcblx0fSxcblxuXHQnY2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2Rl
LmNoZWNrZWQgfHwgbm9kZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihu
b2RlKXtcblx0XHRyZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQgPT09IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5o
YXNBdHRyaWJ1dGUobm9kZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rp
b24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdz
ZWxlY3RlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9
XG5cblx0Lyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRv
cykgbG9jYWxbJ3BzZXVkbzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1l
dGhvZHNcblxudmFyIGF0dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0g
e1xuXG5cdCdmb3InOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMp
ID8gdGhpcy5odG1sRm9yIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdo
cmVmJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0
QXR0cmlidXRlKCdocmVmJywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxu
XG5cdCdzdHlsZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMu
c3R5bGUuY3NzVGV4dCA6IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0
YWJpbmRleCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0
dHJpYnV0ZU5vZGUoJ3RhYmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0
dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtc
blx0fSxcblxuXHQndHlwZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmli
dXRlKCd0eXBlJyk7XG5cdH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRc
dHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRy
aWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVy
cy5NQVhMRU5HVEggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRl
cnMubWF4bGVuZ3RoO1xuXG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0
aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNr
IGZpbmRlclxuXG5TbGljay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBh
cHBlbmQpe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVu
ZCk7XG59O1xuXG5TbGljay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5c
dHJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59
O1xuXG4vLyBTbGljayBjb250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVu
Y3Rpb24oY29udGFpbmVyLCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtc
blx0cmV0dXJuIGxvY2FsLmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGlj
ayBhdHRyaWJ1dGUgZ2V0dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUs
IG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0
dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9u
KG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2Fs
Lmhhc0F0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xp
Y2subWF0Y2ggPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2Vs
ZWN0b3IpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5v
ZGUpIHJldHVybiB0cnVlO1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxv
Y2FsLm1hdGNoTm9kZShub2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUg
YWNjZXNzb3JcblxuU2xpY2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwg
Zm4pe1xuXHRsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlz
O1xufTtcblxuU2xpY2subG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5c
dHJldHVybiBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNl
dWRvIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtc
blx0bG9jYWxbJ3BzZXVkbzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5c
dFx0cmV0dXJuIGZuLmNhbGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztc
bn07XG5cblNsaWNrLmxvb2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRv
ID0gbG9jYWxbJ3BzZXVkbzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlv
bihhcmd1bWVudCl7XG5cdFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0
fTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3Jcblxu
U2xpY2sub3ZlcnJpZGUgPSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUo
cmVnZXhwLCBmbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5p
c1hNTDtcblxuU2xpY2sudWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdl
dFVJREhUTUwobm9kZSk7XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGlj
aztcblxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5l
ZCcpID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6
IEVsZW1lbnRcblxuZGVzY3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMg
aW4gTW9vVG9vbHMuIENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1
bmN0aW9uLCBhbmQgYW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhv
ZHMgdG8gbGV0IHlvdSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5
LCBTdHJpbmcsIEZ1bmN0aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5G
aW5kZXJdXG5cbnByb3ZpZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNl
bGVjdG9yc11cblxuLi4uXG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0
aW9uKHRhZywgcHJvcHMpe1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9y
c1t0YWddO1xuXHRpZiAoa29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5c
dGlmICh0eXBlb2YgdGFnICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQo
cHJvcHMpO1xuXG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0r
JC8pLnRlc3QodGFnKSl7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVz
c2lvbnNbMF1bMF07XG5cdFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFy
c2VkLnRhZztcblx0XHRpZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlk
ID0gcGFyc2VkLmlkO1xuXG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztc
blx0XHRpZiAoYXR0cmlidXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRc
dGlmIChwcm9wc1thdHRyLmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRy
LnZhbHVlICE9IG51bGwgJiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9
IGF0dHIudmFsdWU7XG5cdFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRv
cikgcHJvcHNbYXR0ci5rZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNz
TGlzdCAmJiBwcm9wc1snY2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5j
bGFzc0xpc3Quam9pbignICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQo
dGFnLCBwcm9wcyk7XG59O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnBy
b3RvdHlwZSA9IEJyb3dzZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJl
cXVpcmUgdGhlIHdyYXBwaW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1
bmN0aW9uKGZpcmVFdmVudCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0
XHRcdHJldHVybiBmaXJlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0
fSkoRWxlbWVudC5wcm90b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQn
LCBFbGVtZW50KS5taXJyb3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVb
bmFtZV0pIHJldHVybjtcblxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIHJlc3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0
cnVlO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xu
XHRcdFx0dmFyIGVsZW1lbnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVu
dFtuYW1lXS5hcHBseShlbGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRz
ICYmIHR5cGVPZihyZXN1bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxl
bWVudHMpID8gbmV3IEVsZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVt
ZW50cy5pbXBsZW1lbnQob2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVs
ZW1lbnQucGFyZW50ID0gT2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCck
Y29uc3RydWN0b3InOiBFbGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgn
ZWxlbWVudCcpLmhpZGUoKVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUs
IG1ldGhvZCl7XG5cdFx0RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xu
fVxuXG5FbGVtZW50LkNvbnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBU
eXBlKCdJRnJhbWUnLCBmdW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1
bWVudHMsIHtcblx0XHRwcm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVu
Y3Rpb24ob2JqKXtcblx0XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5c
blx0dmFyIHByb3BzID0gcGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBh
cmFtcy5pZnJhbWUpIGlmcmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIg
b25sb2FkID0gcHJvcHMub25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9u
bG9hZDtcblx0cHJvcHMuaWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBp
ZnJhbWUgPyAoaWZyYW1lLmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51
bmlxdWVJRCgpXS5waWNrKCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZy
YW1lJywgcHJvcHMpO1xuXG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5j
YWxsKGlmcmFtZS5jb250ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1tw
cm9wcy5pZF0pIG9uTG9hZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9u
TG9hZCk7XG5cdHJldHVybiBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVt
ZW50cyA9IGZ1bmN0aW9uKG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5c
dFx0dmFyIHVuaXF1ZXMgPSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5v
ZGVzW2krK107KXtcblx0XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlm
ICghdW5pcXVlc1t1aWRdKXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0
dGhpcy5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJv
dG90eXBlID0ge2xlbmd0aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5
cGUoJ0VsZW1lbnRzJywgRWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlv
bihmaWx0ZXIsIGJpbmQpe1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1
cm4gbmV3IEVsZW1lbnRzKEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0
cmluZycpID8gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIp
O1xuXHRcdH0gOiBmaWx0ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0g
ZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsr
XSA9IGl0ZW07XG5cdFx0fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9
LnByb3RlY3QoKSxcblxuXHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtd
O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAo
aXRlbSkgaXRlbXMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlw
ZS51bnNoaWZ0LmFwcGx5KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtc
blx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xu
XHRcdFx0dmFyIGl0ZW0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFi
bGUoaXRlbSkpIG5ld0VsZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVu
dHMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3Rl
Y3QoKSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkg
PSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0
aW9uW2ldKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1
bmN0aW9uKCl7XG5cdFx0d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVu
Z3RoXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVu
Y3Rpb24oKXtcblxuLy8gRkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGlj
ZSwgb2JqZWN0ID0geycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChv
YmplY3QsIDEsIDEpO1xuaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3Nw
bGljZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJl
c3VsdCA9IHNwbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49
IHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59
LnByb3RlY3QoKSk7XG5cbkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1l
KXtcblx0RWxlbWVudHMuaW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWly
cm9yKEVsZW1lbnRzKTtcblxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hU
TUw7XG50cnkge1xuXHRjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnPGlucHV0IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5c
bnZhciBlc2NhcGVRdW90ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwp
LnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8q
PC9sdElFOD4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1M
IG9mIHN0eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtc
blx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9
IGZhbHNlO1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2lu
OiAwcHg7fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxu
XHRyZXR1cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50
KHtcblxuXHRuZXdFbGVtZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMp
e1xuXHRcdFx0aWYgKHByb3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQg
PSBwcm9wcy5jaGVja2VkO1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwg
cHJvcHMudHlwZSA9PSAncmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1
ZSA9ICdvbic7XG5cdFx0XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBz
ZXQgYmVmb3JlIGNoYW5naW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFj
YW5DaGFuZ2VTdHlsZUhUTUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVF
bGVtZW50LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJv
cHMudHlwZSkgZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxl
RWxlbWVudCkuc2V0KHByb3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0
Lyo8bHRJRTg+Ki8vLyBGaXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBp
biBJRSA8IDhcblx0XHRcdGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0
YWcgPSAnPCcgKyB0YWc7XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwi
JyArIGVzY2FwZVF1b3Rlcyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50
eXBlKSB0YWcgKz0gJyB0eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7
XG5cdFx0XHRcdHRhZyArPSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0
XHRkZWxldGUgcHJvcHMudHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtc
blx0fVxuXG59KTtcblxufSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRv
dyk7XG5TbGljay51aWRPZihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0
bmV3VGV4dE5vZGU6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHRO
b2RlKHRleHQpO1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cy53aW5kb3c7XG5cdH0sXG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0g
e1xuXG5cdFx0XHRzdHJpbmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlk
ID0gU2xpY2suZmluZChkb2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7
XG5cdFx0XHRcdHJldHVybiAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7
XG5cdFx0XHR9LFxuXG5cdFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRc
dFx0U2xpY2sudWlkT2YoZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAm
JiAhKC9eKD86b2JqZWN0fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0
dmFyIGZpcmVFdmVudCA9IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVk
ZWQgaW4gSUU3LCBvciBlbHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0
aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZl
bnQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Q
cm90b3R5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0
XHRcdG9iamVjdDogZnVuY3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmou
dG9FbGVtZW50KSByZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2Fz
aCk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVz
LnRleHRub2RlID0gdHlwZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3Vt
ZW50ID0gZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0
cmV0dXJuIGZ1bmN0aW9uKGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZh
bWlseSAmJiBlbC51bmlxdWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlw
ZU9mKGVsKTtcblx0XHRcdHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5v
Y2FzaCwgZG9jIHx8IGRvY3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xu
XG5pZiAod2luZG93LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVs
LCBuYyl7XG5cdHJldHVybiBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7
XG5cbldpbmRvdy5pbXBsZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmRvY3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZv
a2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7
XG5cdFx0cmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMp
O1xuXHR9LFxuXG5cdGdldEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVy
biBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtc
blxudmFyIGNvbnRhaW5zID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJu
IFNsaWNrLmNvbnRhaW5zKHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29u
dGFpbnMpIERvY3VtZW50LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5c
blxuXG4vLyB0cmVlIHdhbGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihl
eHByZXNzaW9uLCBjb21iaW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmlu
YXRvcjtcblxuXHRleHByZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Np
b24pKTtcblxuXHR2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRm
b3IgKHZhciBpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ld
WzBdLmNvbWJpbmF0b3IgPSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtc
blxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4n
LFxuXHRnZXRQYXJlbnQ6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0
RWxlbWVudC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRFbGVtZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRv
cikpO1xuXHR9KTtcbn0pO1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxc
blx0Z2V0QWxsUHJldmlvdXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGls
ZHJlbjogJz4nLFxuXHRnZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1l
dGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9u
LCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRn
ZXRGaXJzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNs
aWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtc
blx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwg
Jz4nKSkuZ2V0TGFzdCgpKTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRn
ZXRFbGVtZW50QnlJZDogZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGlj
ay5maW5kKHRoaXMsICcjJyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykp
KTtcblx0fSxcblxuXHRtYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFl
eHByZXNzaW9uIHx8IFNsaWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xu
XG5cblxuaWYgKHdpbmRvdy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0
aW9uKHNlbGVjdG9yKXtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5
cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3Vt
ZW50LCBzZWxlY3RvciwgbmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVy
YWJsZShzZWxlY3RvcikpIHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJl
dHVybiBuZXcgRWxlbWVudHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFy
IGluc2VydGVycyA9IHtcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xu
XHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFy
ZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVu
Y3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50
Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1l
bnQubmV4dFNpYmxpbmcpO1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxl
bWVudCl7XG5cdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6
IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNv
bnRleHQsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lk
ZSA9IGluc2VydGVycy5ib3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5
XG5cbnZhciBwcm9wZXJ0eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8v
IHByb3BlcnRpZXNcblxudmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQn
dHlwZScsICd2YWx1ZScsICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5n
JywgJ2NlbGxTcGFjaW5nJywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3Bhbics
ICd0YWJJbmRleCcsICd1c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRp
ZXNbcHJvcGVydHkudG9Mb3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVz
Lmh0bWwgPSAnaW5uZXJIVE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKS50ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENv
bnRlbnQnO1xuXG5PYmplY3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkp
e1xuXHRwcm9wZXJ0eVNldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRu
b2RlW3JlYWxdID0gdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rp
b24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+
Ki9cbnByb3BlcnR5U2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlv
bihub2RlLCB2YWx1ZSl7XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2Rl
LnNldCgnaHRtbCcsIHZhbHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZh
bHVlO1xuXHR9O1xufSkocHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMu
dGV4dCA9IChmdW5jdGlvbihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdl
dHRlcihub2RlKTtcblx0fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4q
L1xuXG4vLyBCb29sZWFuc1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcs
ICdpc21hcCcsICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcs
ICdyZWFkT25seScsICdtdWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZl
cicsICdkZWZhdWx0Q2hlY2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXkn
LFxuXHQnbG9vcCdcbl07XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29s
cywgZnVuY3Rpb24oYm9vbCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0
Ym9vbGVhbnNbbG93ZXJdID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0
aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJv
cGVydHlHZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVb
Ym9vbF07XG5cdH07XG59KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHBy
b3BlcnR5U2V0dGVycywge1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0
XHQoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykg
OiBub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1
bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1s
Rm9yID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5c
dCdzdHlsZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2Rl
LnN0eWxlLmNzc1RleHQgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVl
KTtcblx0fSxcblxuXHQndmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52
YWx1ZSA9ICh2YWx1ZSAhPSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3Bl
cnR5R2V0dGVyc1snY2xhc3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05h
bWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRl
KCdjbGFzcycpO1xufTtcblxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2J1dHRvbicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJv
d3NcbnRyeSB7IGVsLnR5cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUg
IT0gJ2J1dHRvbicpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUp
e1xuXHRub2RlLnNldEF0dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4v
KiA8L3dlYmtpdD4gKi9cblxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4
IENhbm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1M
ID0gKGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHls
ZScpLFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNq
dXN0VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5c
dH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZh
ciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRW
YWx1ZSwgaHRtbDVJbnB1dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0Jztc
bmlucHV0LnR5cGUgPSAnc3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVl
ICE9ICd0JztcblxuLy8gIzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hl
biB0cnlpbmcgdG8gdXNlIGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9
ICcnO1xuXHRpbnB1dC50eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1
dC50eXBlID09ICdlbWFpbCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYg
KHZvbGF0aWxlSW5wdXRWYWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVy
cy50eXBlID0gZnVuY3Rpb24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0g
bm9kZS52YWx1ZTtcblx0XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1
ZTtcblx0fSBjYXRjaCAoZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0
UHJvcGVydHkgKi9cblxuLyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0g
KGZ1bmN0aW9uKGRpdil7XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChk
aXYuZ2V0QXR0cmlidXRlKCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0
KXtcblx0dGVzdC5pbm5lckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhc
IiB2YWx1ZT1cInRoZSB1bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9u
ZU5vZGUodHJ1ZSkuZmlyc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNz
TGlzdCA9ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIg
Y2xhc3NlcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNz
TmFtZSB8fCAnJykuY2xlYW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBj
bGFzc05hbWVzLmZpbHRlcihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUg
IT09ICcnICYmICF1bmlxdWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0g
PSBjbGFzc05hbWU7XG5cdH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24o
bmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9t
Q2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1l
KTtcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24o
bmFtZSwgdmFsdWUpe1xuXHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xv
d2VyQ2FzZSgpXTtcblx0XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7
XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dGVB
bGxvd0xpc3Q7XG5cdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93
TGlzdCA9IHRoaXMucmV0cmlldmUoJyRhdHRyaWJ1dGVBbGxvd0xpc3QnLCB7fSk7XG5cdFx0XHQv
KiA8L2x0SUU5PiAqL1xuXG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRoaXMu
cmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlm
IChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXTtc
blx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0
QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0
XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0W25hbWVdID0g
dHJ1ZTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5c
dFx0Zm9yICh2YXIgYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0
cmlidXRlLCBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVy
dHlHZXR0ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdl
dHRlcih0aGlzKTtcblx0XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmli
dXRlKXtcblx0XHRcdHZhciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRy
aWJ1dGVBbGxvd0xpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30p
O1xuXHRcdFx0aWYgKCFhdHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8g
JiYgIWF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMu
b3V0ZXJIVE1MO1xuXHRcdFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmlu
ZCBtZW50aW9uIG9mIGF0dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwg
b3V0ZXIuc2VhcmNoKC9cXC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUp
IDwgMCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9IHRy
dWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9
IFNsaWNrLmdldEF0dHJpYnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYg
IVNsaWNrLmhhc0F0dHJpYnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxu
XG5cdGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252
ZXJ0KGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRo
aXMpLmFzc29jaWF0ZShhcmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24o
bmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5c
blx0cmVtb3ZlUHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50
cywgdGhpcy5yZW1vdmVQcm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c2V0OiBmdW5jdGlvbihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVu
dC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJv
cGVydHkuc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1
ZSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRc
dHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHBy
b3BlcnR5ICYmIHByb3BlcnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlz
LmdldFByb3BlcnR5KHByb3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1
bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9w
XTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBw
bHkodGhpcykgOiB0aGlzLnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGhhc0NsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xu
XHRcdHJldHVybiB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29u
dGFpbnMoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0Ns
YXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05h
bWUpe1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlz
LmNsYXNzTmFtZSkuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92
ZUNsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMo
Y2xhc3NOYW1lKS5mb3JFYWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9
IGNsYXNzZXModGhpcy5jbGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNo
KGNsYXNzTmFtZXMuZXJhc2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xh
c3NOYW1lcy5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xh
c3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBm
b3JjZSA9ICF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0
aGlzLmFkZENsYXNzKGNsYXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5c
dH0sXG5cblx0YWRvcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdt
ZW50LCBlbGVtZW50cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVu
dHMubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tp
XSwgdHJ1ZSk7XG5cdFx0XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQp
O1xuXHRcdH1cblxuXHRcdGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7
XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0
LCB3aGVyZSl7XG5cdFx0cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4
dE5vZGUodGV4dCksIHdoZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUp
e1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUp
LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVs
LCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVu
dC5pZChlbCwgdHJ1ZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBm
dW5jdGlvbihlbCl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFy
ZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHdyYXBzOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWws
IHRydWUpO1xuXHRcdHJldHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5c
dH0sXG5cblx0Z2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4
OyAvLyBTYWZhcmkgMy4yLjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQo
dGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRp
b24uc2VsZWN0ZWQ7XG5cdFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5w
dXQsIHNlbGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBl
ID0gZWwudHlwZTtcblx0XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09
ICdzdWJtaXQnIHx8IHR5cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09
ICdpbWFnZScpIHJldHVybjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0g
J3NlbGVjdCcpID8gZWwuZ2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0
Ly8gSUVcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRc
dFx0fSkgOiAoKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5j
aGVja2VkKSA/IG51bGwgOiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQo
dmFsdWUpLmVhY2goZnVuY3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3Vu
ZGVmaW5lZCcpIHF1ZXJ5U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsg
Jz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0
cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRI
VE1MXG5cbnZhciBhcHBlbmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxc
blx0YWZ0ZXI6ICdhZnRlckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2Fm
dGVyQmVnaW4nLFxuXHRpbnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVu
dCgnYXBwZW5kSFRNTCcsICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSkgPyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRq
YWNlbnRIVE1MKGFwcGVuZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRy
ZXR1cm4gdGhpcztcbn0gOiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3
IEVsZW1lbnQoJ2RpdicsIHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxk
Tm9kZXMsXG5cdFx0ZnJhZ21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVu
dCkgcmV0dXJuIHRoaXM7XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBl
bmRDaGlsZChjaGlsZHJlbltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8
ICdib3R0b20nXShmcmFnbWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBj
b2xsZWN0ZWQgPSB7fSwgc3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtc
blx0cmV0dXJuIChzdG9yYWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52
YXIgY2xlYW4gPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVy
O1xuXHRpZiAoaXRlbS5yZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChp
dGVtLmNsZWFyQXR0cmlidXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAh
PSBudWxsKXtcblx0XHRkZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2Vb
dWlkXTtcblx0fVxuXHRyZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6
ICdjaGVja2VkJywgb3B0aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVs
ZW1lbnQuaW1wbGVtZW50KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGls
ZHJlbiA9IGNsZWFuKHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXku
ZWFjaChjaGlsZHJlbiwgY2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRy
ZXR1cm4gbnVsbDtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252
ZXJ0KHRoaXMuY2hpbGROb2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBh
cmVudE5vZGUpID8gdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0
fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMg
PSBjb250ZW50cyAhPT0gZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29u
dGVudHMpLCBjZSA9IFtjbG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRz
KXtcblx0XHRcdGNlLmFwcGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCcqJykpKTtcblx0XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0t
Oyl7XG5cdFx0XHR2YXIgbm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAo
IWtlZXBpZCkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xu
XHRcdFx0aWYgKG5vZGUuY2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJp
YnV0ZXMoKTtcblx0XHRcdFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRc
dG5vZGUucmVtb3ZlQXR0cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUu
b3B0aW9ucyl7XG5cdFx0XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQu
b3B0aW9ucztcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5z
ZWxlY3RlZCA9IGVvW2pdLnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwv
bHRJRTk+Ki9cblx0XHRcdHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xv
d2VyQ2FzZSgpXTtcblx0XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0g
PSBlbGVtZW50W3Byb3BdO1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Ns
b25lQnVnKXtcblx0XHRcdHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmpl
Y3QnKSwgdG8gPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZv
ciAoaSA9IGNvLmxlbmd0aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1M
O1xuXHRcdH1cblx0XHQvKjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUp
O1xuXHR9XG5cbn0pO1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBs
ZW1lbnQnLCB7XG5cblx0YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAo
d2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRj
b2xsZWN0ZWRbU2xpY2sudWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMu
YWRkRXZlbnRMaXN0ZW5lcikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3Vt
ZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUs
IGZuKXtcblx0XHRpZiAodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50
TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNo
RXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRy
aWV2ZTogZnVuY3Rpb24ocHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNs
aWNrLnVpZE9mKHRoaXMpKSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0
ICE9IG51bGwgJiYgcHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0
O1xuXHRcdHJldHVybiBwcm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9y
ZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGlj
ay51aWRPZih0aGlzKSk7XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2
YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2Vb
cHJvcGVydHldO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xu
aWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2
YXIgZ2MgPSBmdW5jdGlvbigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xu
XHRcdGlmICh3aW5kb3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2lu
ZG93LnJlbW92ZUxpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0
ZW5lcigndW5sb2FkJywgZ2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGll
cyA9IHt9O1xuXG5cblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVu
Y3Rpb24oc3R5bGUpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5c
dGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxu
XG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9
XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5F
bGVtZW50LlByb3BlcnRpZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRc
dGlmIChodG1sID09IG51bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkg
PT0gJ2FycmF5JykgaHRtbCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRc
dGlmICh0aGlzLnN0eWxlU2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNo
ZWV0LmNzc1RleHQgPSBodG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwg
PSBodG1sO1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcs
ICcnKTtcblx0fVxuXG59O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3Vw
cG9ydHNUYWJsZUlubmVySFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xu
XG4vKjxsdElFOT4qL1xuLy8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRs
ZXR0LmNvbS9pbm5lcnNoaXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7XG52YXIgZnJhZ21lbnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBv
cnRzSFRNTDVFbGVtZW50cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1
cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBh
dWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVh
ZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5
IHRpbWUgdmlkZW8nLnNwbGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9j
dW1lbnRGcmFnbWVudCgpLCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50
LmNyZWF0ZUVsZW1lbnQodGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5c
bi8qPElFPiovXG5zdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5j
dGlvbigpe1xuXHR2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xu
XHR0YWJsZS5pbm5lckhUTUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7
XG59KTtcblxuLyo8bHRGRjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Ry
JyksIGh0bWwgPSAnPHRkPjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RS
SW5uZXJIVE1MID0gKHRyLmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZG
ND4qL1xuXG5pZiAoIXN1cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhU
TUwgfHwgIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0
bWwuc2V0ID0gKGZ1bmN0aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRc
dFx0dGFibGU6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwg
JzxzZWxlY3Q+JywgJzwvc2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9k
eT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48
dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9u
cy50aGVhZCA9IHRyYW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRc
dHJldHVybiBmdW5jdGlvbihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0
aGlzLnN0eWxlU2hlZXQpIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9s
dElFOT4qL1xuXHRcdFx0dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtc
blx0XHRcdGlmICghd3JhcCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcn
LCAnJ107XG5cdFx0XHRpZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxu
XHRcdFx0dmFyIGxldmVsID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpLCB0YXJnZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxl
bWVudHMpIGZyYWdtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5l
ckhUTUwgPSBbd3JhcFsxXSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRc
dFx0d2hpbGUgKGxldmVsLS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhp
cy5lbXB0eSgpLmFkb3B0KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNI
VE1MNUVsZW1lbnRzKSBmcmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBw
ZXIgPSBudWxsO1xuXHRcdH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtc
bn1cbi8qPC9JRT4qL1xuXG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZm9ybScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlv
bj5zPC9vcHRpb24+PC9zZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUg
IT0gJ3MnKSBFbGVtZW50LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2
YWx1ZSl7XG5cdFx0dmFyIHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdz
ZWxlY3QnKSByZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFy
IG9wdGlvbnMgPSB0aGlzLmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmlu
Zyh2YWx1ZSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtc
blx0XHRcdHZhciBvcHRpb24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdl
dEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYg
YXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRc
dFx0aWYgKG9wdGlvblZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRy
dWU7XG5cdFx0fVxuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0g
dGhpcywgdGFnID0gb3B0aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3Qn
ICYmIHRhZyAhPSAnb3B0aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5c
blx0XHRpZiAodGFnID09ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVk
KClbMF0pKSByZXR1cm4gJyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVO
b2RlKCd2YWx1ZScpO1xuXHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRp
b24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVs
bDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtc
blx0c2V0OiBmdW5jdGlvbihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9k
ZSgnaWQnKS52YWx1ZSA9IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMuaWQgfHwgbnVsbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5p
ZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8
L0lFPiovXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIHRoZSBFdmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3Mt
YnJvd3Nlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2lu
ZG93LCBEb2N1bWVudCwgQXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlk
ZXM6IEV2ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xu
dmFyIG5vcm1hbGl6ZVdoZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxp
emVkO1xuXHRpZiAoZXZlbnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50Lndo
ZWVsRGVsdGEgJSAxMjAgPT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVl
bERlbHRhIC8gMTI7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRh
WSB8fCBldmVudC5kZXRhaWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAz
ID09IDAgPyByYXdBbW91bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBu
b3JtYWxpemVkO1xufTtcblxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBl
KCdET01FdmVudCcsIGZ1bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2lu
ZG93O1xuXHRldmVudCA9IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRl
ZCkgcmV0dXJuIGV2ZW50O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVk
ID0gdHJ1ZTtcblx0dGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wg
PSBldmVudC5jdHJsS2V5O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRh
ID0gZXZlbnQubWV0YUtleTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xu
XHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxl
ICh0YXJnZXQgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnRO
b2RlO1xuXHR0aGlzLnRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUu
aW5kZXhPZigna2V5JykgPT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQu
d2hpY2ggfHwgZXZlbnQua2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0g
J2tleXByZXNzJykgdGhpcy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5
ZG93bicgfHwgdHlwZSA9PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUg
PCAxMjQpIHRoaXMua2V5ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29k
ZSA+IDk1ICYmIGNvZGUgPCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRp
ZiAodGhpcy5rZXkgPT0gbnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUp
LnRvTG93ZXJDYXNlKCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0g
J2RibGNsaWNrJyB8fCB0eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8
IHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7
XG5cdFx0dmFyIGRvYyA9IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2Rl
IHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5
O1xuXHRcdHRoaXMucGFnZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2
ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2
ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNj
cm9sbFRvcFxuXHRcdH07XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFn
ZVggIT0gbnVsbCkgPyBldmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVu
dFgsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5w
YWdlWU9mZnNldCA6IGV2ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01N
b3VzZVNjcm9sbCcgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0
aGlzLndoZWVsID0gbm9ybWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENs
aWNrID0gKGV2ZW50LndoaWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0
eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3Vz
ZWVudGVyJyB8fCB0eXBlID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9
IHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIg
cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJv
bScgOiAndG8nKSArICdFbGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVk
Lm5vZGVUeXBlID09IDMpIHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlz
LnJlbGF0ZWRUYXJnZXQgPSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBp
ZiAodHlwZS5pbmRleE9mKCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykg
PT0gMCl7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2Nh
bGUgPSBldmVudC5zY2FsZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRU
b3VjaGVzO1xuXHRcdHRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztc
blx0XHR2YXIgdG91Y2hlcyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYg
KHRvdWNoZXMgJiYgdG91Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xu
XHRcdFx0dGhpcy5wYWdlID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0
XHR0aGlzLmNsaWVudCA9IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0
XHR9XG5cdH1cblxuXHRpZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAo
IXRoaXMucGFnZSkgdGhpcy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtc
blxuXHRzdG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCku
c3RvcFByb3BhZ2F0aW9uKCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdGlmICh0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJv
cGFnYXRpb24oKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVs
dCgpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9XG5cbn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2Rl
LCBrZXkpe1xuXHRfa2V5c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01F
dmVudC5kZWZpbmVLZXlzID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUp
O1xuXG5ET01FdmVudC5kZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAn
MzcnOiAnbGVmdCcsICczOSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2Un
LCAnOCc6ICdiYWNrc3BhY2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzog
J2VudGVyJ1xufSk7XG5cbn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50
LkV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxp
bmcgd2l0aCBldmVudHMuIFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1v
dXNlbGVhdmUgY3VzdG9tIEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92
aWRlczogRWxlbWVudC5FdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50
LlByb3BlcnRpZXMuZXZlbnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRF
dmVudHMoZXZlbnRzKTtcbn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tl
KCdpbXBsZW1lbnQnLCB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2
YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRz
W3R5cGVdKSBldmVudHNbdHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChl
dmVudHNbdHlwZV0ua2V5cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0
eXBlXS5rZXlzLnB1c2goZm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0
b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0
c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBj
dXN0b20ub25BZGQuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRp
dGlvbil7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRp
ZiAoY3VzdG9tLmNvbmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNh
bGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRc
dFx0fVxuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQo
Y3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVu
Y3Rpb24oKXtcblx0XHRcdHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5h
dGl2ZUV2ZW50ID0gRWxlbWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRp
dmVFdmVudCl7XG5cdFx0XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBm
dW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNl
bGYuZ2V0V2luZG93KCkpO1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVu
dCkgPT09IGZhbHNlKSBldmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0
aGlzLmFkZExpc3RlbmVyKHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0
XHRldmVudHNbdHlwZV0udmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0g
dGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBl
XSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGlu
ZGV4ID0gbGlzdC5rZXlzLmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJu
IHRoaXM7XG5cdFx0dmFyIHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBs
aXN0LmtleXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFy
IGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0
aWYgKGN1c3RvbS5vblJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUp
O1xuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20u
YmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2
ZUV2ZW50c1t0eXBlXSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVu
dHNbMl0pIDogdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5c
dFx0Zm9yICh2YXIgZXZlbnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNb
ZXZlbnRdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0
aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdv
YmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlw
ZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0
YWNoZWQgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1
cm4gdGhpcztcblx0XHRpZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQp
IHRoaXMucmVtb3ZlRXZlbnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycp
O1xuXHRcdH0gZWxzZSBpZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVu
dHNdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZl
bnRzLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNd
O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9u
KHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZl
bnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5c
dFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5l
YWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMs
IGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwg
dHlwZSl7XG5cdFx0ZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBm
cm9tLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5c
dFx0aWYgKCF0eXBlKXtcblx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMu
Y2xvbmVFdmVudHMoZnJvbSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBl
XSl7XG5cdFx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0
dGhpcy5hZGRFdmVudCh0eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGlj
azogMiwgZGJsY2xpY2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6
IDIsIC8vbW91c2UgYnV0dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VT
Y3JvbGw6IDIsIC8vbW91c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91
c2Vtb3ZlOiAyLCBzZWxlY3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50
XG5cdGtleWRvd246IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmll
bnRhdGlvbmNoYW5nZTogMiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTog
MiwgdG91Y2hlbmQ6IDIsIHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6
IDIsIGdlc3R1cmVjaGFuZ2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6
IDIsIGJsdXI6IDIsIGNoYW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBw
YXN0ZTogMiwgaW5wdXQ6IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEs
IGJlZm9yZXVubG9hZDogMiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAx
LCByZWFkeXN0YXRlY2hhbmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0
ZTogMiwgcGFnZXNob3c6IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBh
Ym9ydDogMSwgc2Nyb2xsOiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVu
dHMgPSB7XG5cdG1vdXNld2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQg
PyAnd2hlZWwnIDogJ29ubW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAn
RE9NTW91c2VTY3JvbGwnXG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtc
blx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBu
dWxsKSByZXR1cm4gdHJ1ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVy
biAocmVsYXRlZCAhPSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0
aGlzKSAhPSAnZG9jdW1lbnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlm
ICgnb25tb3VzZWVudGVyJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50
Lk5hdGl2ZUV2ZW50cy5tb3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2
ZSA9IDI7XG5cdEVsZW1lbnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRF
bGVtZW50LkV2ZW50cy5tb3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRc
dGNvbmRpdGlvbjogY2hlY2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0g
e1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxu
XG4vKjxsdElFOT4qL1xuaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQu
TmF0aXZlRXZlbnRzLnByb3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdl
ID0ge1xuXHRcdGJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtc
blx0XHRcdHJldHVybiAodGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3Jh
ZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdl
Jztcblx0XHR9LFxuXHRcdGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJu
IGV2ZW50LnR5cGUgIT0gJ3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5h
bWUgPT0gJ2NoZWNrZWQnO1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSko
KTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246
IEV4dGVuZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0
ZSBtZXRob2QgZm9yIG1vcmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3Zp
ZGVzOiBbRWxlbWVudC5EZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52
YXIgZXZlbnRMaXN0ZW5lclN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5F
bGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNv
dXQgPSAyO1xuXG52YXIgYnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50
LCB0YXJnZXQpe1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAo
bWF0Y2godGFyZ2V0LCBldmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdl
dCk7XG5cdFx0dGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59
O1xuXG52YXIgbWFwID0ge1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3Zlcics
XG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxl
YXZlOiB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91
c2VlbnRlckNoZWNrXG5cdH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVu
dExpc3RlbmVyU3VwcG9ydCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxu
XHRibHVyOiB7XG5cdFx0YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9j
dXNvdXQnLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBf
a2V5ID0gJyRkZWxlZ2F0aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7
XG5cblx0cmV0dXJuIHtcblxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVu
Y3Rpb24oc2VsZiwgdWlkKXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsg
dHlwZSArICdsaXN0ZW5lcnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9y
bXMpIGZvciAodmFyIGkgPSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRo
ZSBmb3JtIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRc
dFx0XHQvLyByZW1vdmVFdmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVu
dCB3YXNcblx0XHRcdFx0Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jt
c1tpXS5yZW1vdmVFdmVudCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZu
c1tpXSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0Lmdl
dCgndGFnJykgPT0gJ2Zvcm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zv
cm0nKTtcblx0XHRcdGlmICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0g
c2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxp
c3RlbmVyID0gbGlzdGVuZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRc
dGZvcm1zID0gbGlzdGVuZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYg
KGZvcm1zLmluZGV4T2YoZm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9y
bSk7XG5cblx0XHRcdHZhciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVw
KHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5h
ZGRFdmVudCh0eXBlLCBfZm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVu
ZXJzW3VpZF0gPSBsaXN0ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlz
dGVuZXJzJywgbGlzdGVuZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZl
ciA9IGZ1bmN0aW9uKHR5cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0
XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0
XHR2YXIgZXZlbnRzID0ge2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZl
bnRzKGV2ZW50cyk7XG5cdFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtc
blx0XHRcdH07XG5cdFx0XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxu
XHR9O1xufTtcblxuaWYgKCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAs
IHtcblx0c3VibWl0OiBmb3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2Vy
dmVyKCdyZXNldCcpLFxuXHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxl
Y3Q6IGlucHV0T2JzZXJ2ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJv
dG8gPSBFbGVtZW50LnByb3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0
cmVtb3ZlRXZlbnQgPSBwcm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24o
b2xkLCBtZXRob2Qpe1xuXHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xu
XHRcdGlmICh0eXBlLmluZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhp
cywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0
eXBlKS5leHByZXNzaW9uc1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9
ICdyZWxheScpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5c
dFx0dmFyIG5ld1R5cGUgPSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEp
LmVhY2goZnVuY3Rpb24ocHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtl
eSArIChwc2V1ZG8udmFsdWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0
fSk7XG5cdFx0b2xkLmNhbGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2Fs
bCh0aGlzLCBuZXdUeXBlLCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtc
blxudmFyIGRlbGVnYXRpb24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNo
LCBmbil7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30p
LCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQg
aW4gc3RvcmVkKXtcblx0XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191
aWRdLm1hdGNoID09IG1hdGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUg
PSB0eXBlLCBfbWF0Y2ggPSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307
XG5cdFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24o
dGFyZ2V0KXtcblx0XHRcdHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0
fTtcblxuXHRcdHZhciBlbGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0
aWYgKF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0
aW9uKXtcblx0XHRcdHZhciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0
aW9uIHx8IGVsZW1lbnRFdmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRh
cmdldCwgZXZlbnQpe1xuXHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBj
b25kaXRpb24uY2FsbCh0YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5c
dFx0dmFyIHNlbGYgPSB0aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVs
ZWdhdG9yID0gX21hcC5saXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlm
ICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0
O1xuXHRcdFx0aWYgKHRhcmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwg
dGFyZ2V0LCB1aWQpO1xuXHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlm
ICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0
O1xuXHRcdFx0aWYgKHRhcmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFy
Z2V0KTtcblx0XHR9O1xuXG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3Jl
ZFt1aWRdID0ge1xuXHRcdFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRk
ZWxlZ2F0b3I6IGRlbGVnYXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7
XG5cdFx0cmV0dXJuIGFkZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNh
cHR1cmUpO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4s
IF91aWQpe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9
KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7
XG5cblx0XHRpZiAoX3VpZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBz
dG9yZWRbX3VpZF0uZGVsZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlw
ZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1v
dmUodGhpcywgX3VpZCk7XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFn
ZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0
eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBz
O1xuXHRcdGlmIChmbikgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtf
X3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4g
ZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQp
O1xuXHRcdH0gZWxzZSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19f
dWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50
LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgn
aW1wbGVtZW50Jywge1xuXHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRk
RXZlbnQpLFxuXHRyZW1vdmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVt
b3ZlRXZlbnQpXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxl
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRo
ZSBzdHlsZXMgb2YgRWxlbWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVu
dC5TdHlsZVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50
Lmh0bWwsIGVsO1xuXG4vLzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBu
b3QgcmVtb3ZlIHN0eWxlcyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUu
Y29sb3IgPSBudWxsO1xudmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9
PSAncmVkJztcblxuLy8gY2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hv
cnRoYW5kIHN0eWxlcyBpbiB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3Rl
YWQgb2Ygd2lkdGgtc3R5bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJj
JztcbmVsLnN0eWxlLmJvcmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdP
cmRlciA9IGVsLnN0eWxlLmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+
XG5cbnZhciBoYXNHZXRDb21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxc
blx0c3VwcG9ydEJvcmRlclJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0
eWxlLmJvcmRlclJhZGl1cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0g
e3NldDogZnVuY3Rpb24oc3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xu
XG52YXIgaGFzT3BhY2l0eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0Zp
bHRlciA9IChodG1sLnN0eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxc
KG9wYWNpdHk9KFtcXGQuXSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24o
ZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7
XG5cdGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0g
bnVsbCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0Rmls
dGVyID0gZnVuY3Rpb24oZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVs
ZW1lbnQuc3R5bGUsXG5cdFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29t
cHV0ZWRTdHlsZSgnZmlsdGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVz
dChmaWx0ZXIpID8gZmlsdGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcg
KyB2YWx1ZSkudHJpbSgpO1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmli
dXRlKCdmaWx0ZXInKTtcbn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09w
YWNpdHkgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFj
aXR5ID0gb3BhY2l0eTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0
eSl7XG5cdGlmICghZWxlbWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxl
Lmhhc0xheW91dCkgZWxlbWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVs
bCB8fCBvcGFjaXR5ID09IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7
XG5cdFx0aWYgKG9wYWNpdHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZp
bHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7
XG5cdFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3Bh
Y2l0eSAqIDEwMCkubGltaXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZp
c2liaWxpdHkpKTtcblxudmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVs
ZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50
LmdldENvbXB1dGVkU3R5bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/
IDEgOiBvcGFjaXR5LnRvRmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVu
dCl7XG5cdHZhciBmaWx0ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRD
b21wdXRlZFN0eWxlKCdmaWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3Bh
Y2l0eSA9IGZpbHRlci5tYXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwg
fHwgZmlsdGVyID09IG51bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlv
bihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScp
O1xuXHRpZiAob3BhY2l0eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJp
bGl0eSA9PSAnaGlkZGVuJyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZh
ciBmbG9hdE5hbWUgPSAoaHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0
JyA6ICdjc3NGbG9hdCcsXG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAl
JywgY2VudGVyOiAnNTAlJywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNC
YWNrZ3JvdW5kUG9zaXRpb25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0g
bnVsbCksXG5cdHByZWZpeFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBm
dW5jdGlvbihwcm9wZXJ0eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRl
cm4sICckMS0nKS5jYW1lbENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxl
ID0gZnVuY3Rpb24oc3R5bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3Jv
dW5kUG9zaXRpb24nKXtcblx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcp
O1xuXHRcdHByb3BlcnR5ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJv
cGVydHkpO1xufTtcbi8vPC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENv
bXB1dGVkU3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVk
U3R5bGUgJiYgdGhpcy5jdXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1l
bENhc2UocHJvcGVydHkpXTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3Vt
ZW50KHRoaXMpLmRlZmF1bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRl
ZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVy
biAoY29tcHV0ZWQpID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxv
YXROYW1lKSA/ICdmbG9hdCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxu
XHRzZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkg
PT0gJ29wYWNpdHknKXtcblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxv
YXQodmFsdWUpO1xuXHRcdFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4g
dGhpcztcblx0XHR9XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0
JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3Ry
aW5nJyl7XG5cdFx0XHR2YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcp
LnNwbGl0KCcgJyk7XG5cdFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5j
dGlvbih2YWwsIGkpe1xuXHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRy
ZXR1cm4gKHR5cGVPZih2YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0
aC5yb3VuZCh2YWwpKSA6IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYg
KHZhbHVlID09IFN0cmluZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91
bmQodmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRc
dC8vPGx0SUU5PlxuXHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9l
c05vdFJlbW92ZVN0eWxlcyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRy
ZW1vdmVTdHlsZSh0aGlzLnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5c
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkp
e1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMp
O1xuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5h
bWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHku
aW5kZXhPZignYm9yZGVyUmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9w
TGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJh
ZGl1cycsICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5c
dFx0XHRcdHJldHVybiB0aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlz
KS5qb2luKCcgJyk7XG5cdFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5
XTtcblx0XHRpZiAoIXJlc3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAo
RWxlbWVudC5TaG9ydFN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRy
ZXN1bHQgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3By
b3BlcnR5XSkgcmVzdWx0LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiBy
ZXN1bHQuam9pbignICcpO1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRl
ZFN0eWxlKHByb3BlcnR5KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZ
ICYmIC9eYmFja2dyb3VuZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRy
ZXR1cm4gcmVzdWx0LnJlcGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9u
KHBvc2l0aW9uKXtcblx0XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0
XHRcdH0pIHx8ICcwcHgnO1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAn
YmFja2dyb3VuZFBvc2l0aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtc
blx0XHRcdHJlc3VsdCA9IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0
Lm1hdGNoKC9yZ2JhP1xcKFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0
ID0gcmVzdWx0LnJlcGxhY2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1c
blx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtc
blx0XHRcdGlmICgoL14oaGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQv
LnRlc3QocmVzdWx0KSkpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0
aCcpID8gWydsZWZ0JywgJ3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5c
dFx0XHRcdHZhbHVlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRo
aXMuZ2V0U3R5bGUoJ2JvcmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMu
Z2V0U3R5bGUoJ3BhZGRpbmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtc
blx0XHRcdFx0cmV0dXJuIHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0g
c2l6ZSArICdweCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdp
bnxwYWRkaW5nLykudGVzdChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7
XG5cdFx0XHRcdHJldHVybiAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5c
dFx0aWYgKHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxC
b3R0b218TGVmdCk/JC8udGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRc
dFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAk
MScpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxu
XG5cdHNldFN0eWxlczogZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBz
dHlsZXMpIHRoaXMuc2V0U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0g
e307XG5cdFx0QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0
XHRcdHJlc3VsdFtrZXldID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRc
dHJldHVybiByZXN1bHQ7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0
OiAnQHB4JywgdG9wOiAnQHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0
aDogJ0BweCcsIGhlaWdodDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4
JywgbWluV2lkdGg6ICdAcHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6
ICdyZ2IoQCwgQCwgQCknLCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlv
bjogJ0BweCBAcHgnLCBjb2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4Jywg
bGV0dGVyU3BhY2luZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHgg
QHB4IEBweCBAcHgpJyxcblx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0Bw
eCBAcHggQHB4IEBweCcsIGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwg
QCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBA
cHgnLCBib3JkZXJTdHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSBy
Z2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAn
em9vbSc6ICdAJywgZm9udFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTog
J0AnLCBib3JkZXJSYWRpdXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1l
bnQuU2hvcnRTdHlsZXMgPSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJv
cmRlcldpZHRoOiB7fSwgYm9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1Rv
cCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtc
blx0dmFyIFNob3J0ID0gRWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQu
U3R5bGVzO1xuXHRbJ21hcmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5c
dFx0dmFyIHNkID0gc3R5bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFs
bFtzZF0gPSAnQHB4Jztcblx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xu
XHRTaG9ydC5ib3JkZXJbYmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2
YXIgYmR3ID0gYmQgKyAnV2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0Nv
bG9yJztcblx0U2hvcnRbYmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9y
dFtiZF1bYmR3XSA9IEFsbFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10g
PSBTaG9ydFtiZF1bYmRzXSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvclti
ZGNdID0gU2hvcnRbYmRdW2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5c
bmlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3Jv
dW5kUG9zaXRpb24gPSB7YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRp
b25ZOiAnQCd9O1xufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9s
bCwgb3IgcG9zaXRpb25pbmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0
aW9uaW5nIGJhc2VkIG9uIHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBh
bmQgc21hcnQgYnJvd3NlciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3Jn
L2xpY2Vuc2VzL2xncGwuaHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBb
WVVJXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2Vd
KGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJl
czogW0VsZW1lbnQsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNp
b25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpO1xuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxk
KGNoaWxkKTtcbnZhciBicm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09
PSBlbGVtZW50KTtcbmVsZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25l
bnRzID0gWydoZWlnaHQnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRv
cFdpZHRoJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lk
dGgnLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdi
b3JkZXJSaWdodFdpZHRoJ107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwp
e1xuXG5cdHZhciBnQ1MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRz
ID0ge3g6IDAsIHk6IDB9O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mp
e1xuXHRcdGJvdW5kcy55ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhD
b21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0
KGdDU1tjc3NdKTtcblx0fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQg
PSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0g
J3N0YXRpYycgfHwgaXNCb2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0
aW9uKGVsKXtcblx0cmV0dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kp
LnRlc3QoZWwudGFnTmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xs
VG86IGZ1bmN0aW9uKHgsIHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5n
ZXRXaW5kb3coKS5zY3JvbGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3Jv
bGxMZWZ0ID0geDtcblx0XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRo
aXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5c
blx0XHQvLyBUaGlzIGlmIGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBn
ZXRCb3VuZGluZ0NsaWVudFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5c
blx0XHRpZiAoIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0
V2lkdGgsIHk6IHRoaXMub2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBU
aGlzIHN2ZyBzZWN0aW9uIHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4g
YmUgcmVtb3ZlZCB3aGVuIEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGlu
Zm86IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxu
XHRcdGlmICh0aGlzLmdldCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXpl
KHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpO1xuXHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5o
ZWlnaHR9O1xuXHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0
XHR9XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5
KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0
dXJuIHt4OiB0aGlzLnNjcm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5c
blx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0
aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxM
ZWZ0LCB5OiB0aGlzLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24o
KXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwg
eTogMH07XG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRw
b3NpdGlvbi54ICs9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxl
bWVudC5zY3JvbGxUb3A7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRc
dH1cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9r
ZW5PZmZzZXRQYXJlbnQgPyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0
XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicp
ID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5
bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0
aWMgOiBpc09mZnNldDtcblx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUp
KXtcblx0XHRcdGlmIChpc09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0
XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50
ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQs
ICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRc
dHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0
dXJuIG51bGw7XG5cdH0sXG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFz
R2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0
XHRpZiAoaGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlz
LmdldERvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0
bWwuZ2V0U2Nyb2xsKCksXG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCks
XG5cdFx0XHRcdGlzRml4ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2Zp
eGVkJyk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgp
ICsgZWxlbVNjcm9sbHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwu
Y2xpZW50TGVmdCxcblx0XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxz
LnkgKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRc
dFx0fTtcblx0XHR9XG5cblx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAs
IHk6IDB9O1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdo
aWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBl
bGVtZW50Lm9mZnNldExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9w
O1xuXG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0
cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2
ZSl7XG5cdFx0dmFyIG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0g
dGhpcy5nZXRTY3JvbGxzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0
LnggLSBzY3JvbGwueCxcblx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5c
dFx0aWYgKHJlbGF0aXZlICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xu
XHRcdFx0dmFyIHJlbGF0aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRc
dFx0cmV0dXJuIHt4OiBwb3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRl
cihyZWxhdGl2ZSksIHk6IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3Jk
ZXIocmVsYXRpdmUpfTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdl
dENvb3JkaW5hdGVzOiBmdW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSBy
ZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlv
biA9IHRoaXMuZ2V0UG9zaXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXpl
KCk7XG5cdFx0dmFyIG9iaiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6
IHBvc2l0aW9uLnksXG5cdFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlc
blx0XHR9O1xuXHRcdG9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5i
b3R0b20gPSBvYmoudG9wICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5c
dGNvbXB1dGVQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVm
dDogb2JqLnggLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDog
b2JqLnkgLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxu
XHRzZXRQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXMo
dGhpcy5jb21wdXRlUG9zaXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBX
aW5kb3ddLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2Mu
Y2xpZW50V2lkdGgsIHk6IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29t
cGF0RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Mu
c2Nyb2xsTGVmdCwgeTogd2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxu
XG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVs
ZW1lbnQodGhpcyksXG5cdFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0
aGlzLmdldERvY3VtZW50KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNj
cm9sbFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3Jv
bGxIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0
aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0
Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtc
blx0XHRyZXR1cm4ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXpl
LngsIGhlaWdodDogc2l6ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJp
dmF0ZSBtZXRob2RzXG5cbnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHls
ZTtcblxuZnVuY3Rpb24gc3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5
bGVTdHJpbmcoZWxlbWVudCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9u
IHRvcEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3Jk
ZXItdG9wLXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJl
dHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVu
Y3Rpb24gaXNCb2R5KGVsZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVz
dChlbGVtZW50LnRhZ05hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1l
bnQpe1xuXHR2YXIgZG9jID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2Mu
Y29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwg
OiBkb2MuYm9keTtcbn1cblxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3Np
dGlvbjogJ3NldFBvc2l0aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1l
bnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRT
Y3JvbGxUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0
fSxcblxuXHRnZXRTY3JvbGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbCgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5c
dGdldFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5c
dH0sXG5cblx0Z2V0TGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlv
bigpLng7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIHRoZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxs
IG90aGVyIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1
aXJlczogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRl
czogRnhcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5l
dyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNz
LlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5c
dFx0b25DYW5jZWw6IG5pbCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6
IDYwLFxuXHRcdHVuaXQ6IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBu
dWxsLFxuXHRcdGZyYW1lU2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5c
dGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMu
c3ViamVjdCB8fCB0aGlzO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxu
XHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0
XHRcdHJldHVybiAtKE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9
LFxuXG5cdHN0ZXA6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNr
aXApe1xuXHRcdFx0dmFyIGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMu
dGltZSkgOiAwLCBmcmFtZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhp
cy50aW1lID0gbm93O1xuXHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdHRoaXMuZnJhbWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMu
ZnJhbWVzKXtcblx0XHRcdHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8g
dGhpcy5mcmFtZXMpO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhp
cy50bywgZGVsdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJh
bWVzO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkp
O1xuXHRcdFx0dGhpcy5zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93
KXtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRv
LCBkZWx0YSl7XG5cdFx0cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxc
blxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVy
biB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2Fu
Y2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRo
aXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNl
O1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZy
b20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0
XHR0aGlzLmZyb20gPSBmcm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0g
KHRoaXMub3B0aW9ucy5mcmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7
XG5cdFx0dGhpcy50cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZy
YW1lcyA9IHRoaXMub3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0
aW9uID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJh
dGlvbnNbZHVyYXRpb25dIHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVy
dmFsID0gMTAwMCAvIGZwcztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5k
KHRoaXMuZHVyYXRpb24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRo
ZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0
aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1
YmplY3QpO1xuXHRcdHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmco
KSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhp
cywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFt
ZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5c
dFx0XHRcdGlmICghdGhpcy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxl
dGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZl
bnQoJ3N0b3AnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRo
aXMuc3ViamVjdCA9PT0gdGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMu
aXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5j
ZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMu
ZnJhbWVzO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xl
YXJDaGFpbigpO1xuXHRcdFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMu
aXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5j
ZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRyZXN1bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkg
cHVzaEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5z
dGFuY2VzW3RoaXMub3B0aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFp
bnModGhpcyk7XG5cdH0sXG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0
aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0p
O1xuXG5GeC5jb21wdXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0
byAtIGZyb20pICogZGVsdGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6
IDI1MCwgJ25vcm1hbCc6IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xu
XG52YXIgaW5zdGFuY2VzID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9u
KCl7XG5cdHZhciBub3cgPSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7
IGktLTspe1xuXHRcdHZhciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBp
bnN0YW5jZS5zdGVwKG5vdyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlv
bihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9
IFtdKTtcblx0bGlzdC5wdXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBz
XSA9IGxvb3AucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5c
bnZhciBwdWxsSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNl
c1tmcHNdO1xuXHRpZiAobGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxp
c3QubGVuZ3RoICYmIHRpbWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtc
blx0XHRcdHRpbWVyc1tmcHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxu
XHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlv
bjogQ29udGFpbnMgdGhlIENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4
Lk1vcnBoLCBGeC5FbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBbRngsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4q
L1xuXG5GeC5DU1MgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFy
ZXMgdGhlIGJhc2UgZnJvbS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50
LCBwcm9wZXJ0eSwgdmFsdWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7
XG5cdFx0dmFyIGZyb20gPSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9
PSBudWxsKXtcblx0XHRcdHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxl
KHByb3BlcnR5KTtcblx0XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQv
LyBhZGFwdGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rl
ci9meC5qcyNMMjk5XG5cdFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdz
dHJpbmcnICYmIGZyb20uc2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQo
ZnJvbSkgIT0gMCl7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5p
dCk7XG5cdFx0XHRcdHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0
eSk7XG5cdFx0XHRcdC8vIElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdp
ZHRoXG5cdFx0XHRcdGlmICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUg
PSBlbGVtZW50LnN0eWxlWygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0
XHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERl
YW4gRWR3YXJkcycgaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0
LjE1LyNjb21tZW50LTEwMjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxl
LmxlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0
XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxl
bWVudC5zdHlsZS5sZWZ0ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0
ZnJvbSA9ICh0byB8fCAxKSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0
KGZyb20pIHx8IDApO1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsg
dW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9t
KSwgdG86IHRoaXMucGFyc2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8g
YW4gYXJyYXlcblxuXHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rp
b24uY29udmVydCh2YWx1ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmlu
ZycpID8gdmFsdWUuc3BsaXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVy
biB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRc
dFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2Vycywg
ZnVuY3Rpb24ocGFyc2VyKXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZh
ciBwYXJzZWQgPSBwYXJzZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJz
ZWQgPT09IDApIGZvdW5kID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRc
dH0pO1xuXHRcdFx0Zm91bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1Mu
UGFyc2Vycy5TdHJpbmd9O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5c
dC8vY29tcHV0ZXMgYnkgYSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVp
ciBwYXJzZXJzLlxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0
dmFyIGNvbXB1dGVkID0gW107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgp
KS50aW1lcyhmdW5jdGlvbihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ld
LnBhcnNlci5jb21wdXRlKGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNl
cjogZnJvbVtpXS5wYXJzZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVu
Y3Rpb24uY29udmVydCgnZng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9
LFxuXG5cdC8vc2VydmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlv
bih2YWx1ZSwgdW5pdCl7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScp
IHZhbHVlID0gdGhpcy5wYXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0
dmFsdWUuZWFjaChmdW5jdGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25j
YXQoYml0LnBhcnNlci5zZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1
cm4gcmV0dXJuZWQ7XG5cdH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVu
dFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtc
blx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7
XG5cdH0sXG5cblx0Ly9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZh
bHVlcyBmb3IgYSBzZWxlY3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRc
dGlmIChGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9y
XTtcblx0XHR2YXIgdG8gPSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxl
Y3Rvci5lc2NhcGVSZWdFeHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVu
Y3Rpb24ocnVsZXMpe1xuXHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5c
dFx0XHRcdGlmIChydWxlLm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxl
cyB8fCBydWxlLmNzc1J1bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRc
dFx0aWYgKCFydWxlLnN0eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAo
cnVsZS5zZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBm
dW5jdGlvbihtKXtcblx0XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9
KSA6IG51bGw7XG5cdFx0XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVz
dChzZWxlY3RvclRleHQpKSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5
bGVzLCBmdW5jdGlvbih2YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtz
dHlsZV0gfHwgRWxlbWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2
YWx1ZSA9IFN0cmluZyhydWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0g
KCgvXnJnYi8pLnRlc3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRc
dFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHls
ZVNoZWV0cywgZnVuY3Rpb24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xu
XHRcdFx0aWYgKGhyZWYgJiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhP
Zihkb2N1bWVudC5kb21haW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVl
dC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5c
dFx0fSk7XG5cdFx0cmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59
KTtcblxuRnguQ1NTLkNhY2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9y
OiB7XG5cdFx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgv
XiNbMC05YS1mXXszLDZ9JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0
cmV0dXJuICgodmFsdWUgPSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQr
KS8pKSkgPyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxu
XHRcdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJv
bS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5j
b21wdXRlKGZyb21baV0sIHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRz
ZXJ2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xu
XHRcdH1cblx0fSxcblxuXHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRj
b21wdXRlOiBGeC5jb21wdXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5c
dFx0XHRyZXR1cm4gKHVuaXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxu
XG5cdFN0cmluZzoge1xuXHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRj
b21wdXRlOiBmdW5jdGlvbih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxu
XHRcdHNlcnZlOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0
fVxuXG59O1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjog
Rm9ybWVybHkgRnguU3R5bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENT
UyBwcm9wZXJ0aWVzIGZvciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3Ig
Q1NTIGJhc2VkIHNlbGVjdG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5G
eC5Nb3JwaCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxp
emU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMu
c3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMp
O1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAn
c3RyaW5nJykgbm93ID0gdGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykg
dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywg
ZGVsdGEpe1xuXHRcdHZhciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1tw
XSA9IHRoaXMucGFyZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztc
blx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNo
ZWNrKHByb3BlcnRpZXMpKSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMg
PT0gJ3N0cmluZycpIHByb3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2
YXIgZnJvbSA9IHt9LCB0byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5c
dFx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGll
c1twXSk7XG5cdFx0XHRmcm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNl
ZC50bztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59
KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0
aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25z
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IG1vcnBoID0gdGhpcy5yZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRc
dG1vcnBoID0gbmV3IEZ4Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhp
cy5zdG9yZSgnbW9ycGgnLCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxu
XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtc
blx0XHR0aGlzLmdldCgnbW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0
aCBhbnkgb2YgdGhlIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5jcmVkaXRzOlxuICAtIEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6
Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0
byBiZSB1c2VkIHdpdGggTW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRngu
VHJhbnNpdGlvbnNcblxuLi4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRp
b246IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24g
fHwgRnguVHJhbnNpdGlvbnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9
PSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0
cmFucyA9IEZ4LlRyYW5zaXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0
cmFuc1tkYXRhWzBdLmNhcGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0
cmFuc1snZWFzZScgKyBkYXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5j
YXBpdGFsaXplKCkgOiAnJyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7
XG5cbkZ4LlRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJh
bXMgPSBBcnJheS5jb252ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mp
e1xuXHRcdHJldHVybiB0cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9i
amVjdC5hcHBlbmQoZWFzZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDog
ZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJh
bXMpO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJu
IChwb3MgPD0gMC41ID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0
aW9uKDIgKiAoMSAtIHBvcyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4
LlRyYW5zaXRpb25zID0ge1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJu
IHplcm87XG5cdH1cblxufTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9u
KHRyYW5zaXRpb25zKXtcblx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRngu
VHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0
cmFuc2l0aW9uXSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVu
Y3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0
fSxcblxuXHRFeHBvOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChw
IC0gMSkpO1xuXHR9LFxuXG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0
aC5zaW4oTWF0aC5hY29zKHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRy
ZXR1cm4gMSAtIE1hdGguY29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVu
Y3Rpb24ocCwgeCl7XG5cdFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0
aC5wb3cocCwgMikgKiAoKHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0
aW9uKHApe1xuXHRcdHZhciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEg
Kz0gYiwgYiAvPSAyKXtcblx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0
XHR2YWx1ZSA9IGIgKiBiIC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7
XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0s
XG5cblx0RWxhc3RpYzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEw
ICogLS1wKSAqIE1hdGguY29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8g
Myk7XG5cdH1cblxufSk7XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVh
Y2goZnVuY3Rpb24odHJhbnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25d
ID0gbmV3IEZ4LlRyYW5zaXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAs
IGkgKyAyKTtcblx0fSk7XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNj
cmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1Mg
cHJvcGVydHkgZm9yIGFuIGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwg
RWxlbWVudC5oaWdobGlnaHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xu
XG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBv
cHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChl
bGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0
aW9uKHByb3BlcnR5LCBub3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRc
dFx0bm93ID0gcHJvcGVydHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhp
cy5vcHRpb25zLnByb3BlcnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQs
IHByb3BlcnR5LCBub3csIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRo
aXMuY2hlY2socHJvcGVydHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3Mg
PSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0
aW9ucy5wcm9wZXJ0eSB8fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJl
cGFyZSh0aGlzLmVsZW1lbnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlz
LnBhcmVudChwYXJzZWQuZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Q
cm9wZXJ0aWVzLnR3ZWVuID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhp
cy5nZXQoJ3R3ZWVuJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5y
ZXRyaWV2ZSgndHdlZW4nKTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4
LlR3ZWVuKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4n
LCB0d2Vlbik7XG5cdFx0fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5c
dFx0dGhpcy5nZXQoJ3R3ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhp
cy5nZXQoJ3R3ZWVuJyksIG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVu
dHMpLCB0b2dnbGU7XG5cdFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUn
O1xuXHRcdHN3aXRjaCAoYXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFy
dCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFy
dCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0
JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQn
OyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIg
ZmxhZyA9IHRoaXMucmV0cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHkn
KSA9PSAxKTtcblx0XHRcdFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZs
YWcgPyAwIDogMTtcblx0XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRc
dFx0XHR0b2dnbGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhv
ZCA9ICdzdGFydCc7XG5cdFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFk
ZTpmbGFnJyk7XG5cdFx0ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0
byA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xu
XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2
aXNpYmxlJyk7XG5cdFx0fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFp
bi5sZW5ndGgpe1xuXHRcdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhp
cy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0
aGlzLmNhbGxDaGFpbigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRo
aXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxz
ZSB7XG5cdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1l
bnQuZ2V0U3R5bGUoJ29wYWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0
U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7
XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGln
aHQ6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRo
aXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91
bmQtY29sb3InKSk7XG5cdFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYn
IDogZW5kO1xuXHRcdH1cblx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0
d2Vlbi5zdGFydCgnYmFja2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5j
aGFpbihmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcics
IHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxD
aGFpbigpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7
XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxs
IHB1cnBvc2UgUmVxdWVzdCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTog
TUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwg
RXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJl
cXVlc3RcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24o
KXt9LFxuXHRwcm9ncmVzc1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJl
cXVlc3QpO1xuXG52YXIgUmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0
SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxu
XHRvcHRpb25zOiB7Lypcblx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRz
dGFydDogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihl
dmVudCwgeGhyKXt9LFxuXHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNl
bDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCBy
ZXNwb25zZVhNTCl7fSxcblx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4
Y2VwdGlvbjogZnVuY3Rpb24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBm
dW5jdGlvbigpe30sXG5cdFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhD
cmVkZW50aWFsczogZmFsc2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhl
YWRlcnM6IHtcblx0XHRcdCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0
XHRcdCdBY2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3ht
bCwgdGV4dC94bWwsICovKidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDog
ZmFsc2UsXG5cdFx0bWV0aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNT
dWNjZXNzOiBudWxsLFxuXHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVl
LFxuXHRcdGVuY29kaW5nOiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRl
dmFsUmVzcG9uc2U6IGZhbHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vc
blx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9
IG5ldyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5c
dFx0dGhpcy5oZWFkZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0
ZUNoYW5nZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHho
ci5yZWFkeVN0YXRlICE9IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVu
bmluZyA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0
KGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMu
c3RhdHVzID0gKHN0YXR1cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhp
cykpO1xuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jl
c3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRc
dGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRc
dGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDog
dGhpcy54aHIucmVzcG9uc2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtc
blx0XHRpZiAodGhpcy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlc
blx0XHRcdHRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1s
KTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAo
c3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1Nj
cmlwdHM6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNl
IHx8ICgvKGVjbWF8amF2YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5
cGUnKSkpIHJldHVybiBCcm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBT
Y3JpcHRzKHRoaXMub3B0aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVu
Y3Rpb24odGV4dCwgeG1sKXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRz
KHRleHQpLCB4bWwpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtc
blx0fSxcblxuXHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2Nv
bXBsZXRlJywgYXJndW1lbnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxD
aGFpbigpO1xuXHR9LFxuXG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1
cmUoKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9
KTtcblx0fSxcblxuXHRvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQo
J2NvbXBsZXRlJykuZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxv
YWRzdGFydDogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQn
LCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50
KXtcblx0XHR0aGlzLmZpcmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5c
dH0sXG5cblx0dGltZW91dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91
dCcsIHRoaXMueGhyKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjog
dGhpcy54aHJ9KTtcblx0fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtc
blx0XHR0aGlzLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRnZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRl
bXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIo
bmFtZSk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtc
blx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9w
dGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4g
dHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFy
Z3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtc
blx0fSxcblxuXHRzZW5kOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2so
b3B0aW9ucykpIHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRo
aXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5n
ID0gdHJ1ZTtcblxuXHRcdHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBl
ID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlv
bnN9O1xuXG5cdFx0dmFyIG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0
LmFwcGVuZCh7ZGF0YTogb2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9k
fSwgb3B0aW9ucyk7XG5cdFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhv
cHRpb25zLnVybCksIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0
XHRzd2l0Y2ggKHR5cGVPZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRv
Y3VtZW50LmlkKGRhdGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmpl
Y3QnOiBjYXNlICdoYXNoJzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRc
dH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAn
Zm9ybWF0PScgKyB0aGlzLm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZv
cm1hdCArICcmJyArIGRhdGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9u
cy5lbXVsYXRpb24gJiYgIVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRc
dHZhciBfbWV0aG9kID0gJ19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkg
PyBfbWV0aG9kICsgJyYnICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7
XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdw
dXQnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlv
bnMuZW5jb2RpbmcpID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7
XG5cdFx0XHR0aGlzLmhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJs
ID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0g
dXJsLmxhc3RJbmRleE9mKCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmlt
UG9zaXRpb24gPSB1cmwuaW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRy
aW1Qb3NpdGlvbik7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwg
Kz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQo
KTtcblxuXHRcdGlmIChkYXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxl
dGUnKSl7XG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/Jykg
KyBkYXRhO1xuXHRcdFx0ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMu
eGhyO1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0g
dGhpcy5sb2Fkc3RhcnQuYmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5w
cm9ncmVzcy5iaW5kKHRoaXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVy
Q2FzZSgpLCB1cmwsIHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMu
b3B0aW9ucy5wYXNzd29yZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxz
KSAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVl
O1xuXG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5k
KHRoaXMpO1xuXG5cdFx0T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwg
a2V5KXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFs
dWUpO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRp
b24nLCBba2V5LCB2YWx1ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0
aW9uJywgeGhyOiB4aHIsIGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xu
XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0
dGhpcy5yZXNldFRoZW5hYmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZp
cmVFdmVudCgncmVxdWVzdCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5v
cHRpb25zLmFzeW5jKSB0aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9w
dGlvbnMudGltZW91dCkgdGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlv
bnMudGltZW91dCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBm
dW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlz
LnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0
KCk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIp
O1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVj
aGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9
IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVx
dWVzdCgpO1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7
cmVhc29uOiAnY2FuY2VsJywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxudmFyIG1ldGhvZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScs
ICdwYXRjaCcsICdoZWFkJywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gn
LCAnSEVBRCddLmVhY2goZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVu
Y3Rpb24oZGF0YSl7XG5cdFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5c
dFx0fTtcblx0XHRpZiAoZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0
dXJuIHRoaXMuc2VuZChvYmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1l
dGhvZHMpO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9u
KG9wdGlvbnMpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0
XHRzZW5kLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xu
XHRcdGlmICghc2VuZCl7XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRh
OiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bv
c3QnLCB1cmw6IHRoaXMuZ2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3Jl
KCdzZW5kJywgc2VuZCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVs
ZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5k
ZXIgPSB0aGlzLmdldCgnc2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6
IHVybCB8fCBzZW5kZXIub3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRp
b246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhv
ZHMgZm9yIGludGVyYWN0aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVz
OiBSZXF1ZXN0LkhUTUxcblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xu
XG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2Us
XG5cdFx0YXBwZW5kOiBmYWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6
IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGlj
YXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5j
dGlvbih0ZXh0KXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0
aGlzLnJlc3BvbnNlO1xuXG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1
bmN0aW9uKHNjcmlwdCl7XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRc
dH0pO1xuXG5cdFx0dmFyIG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4o
W1xcc1xcU10qPyk8XFwvYm9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0g
bWF0Y2hbMV07XG5cdFx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywg
cmVzcG9uc2UuaHRtbCk7XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xu
XHRcdHJlc3BvbnNlLmVsZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8
fCAnKicpO1xuXG5cdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9u
c2UuZWxlbWVudHM7XG5cdFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUg
PSBkb2N1bWVudC5pZChvcHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25z
LmZpbHRlcikgdXBkYXRlLmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBk
YXRlLnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5h
cHBlbmQpe1xuXHRcdFx0dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtc
blx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmlu
amVjdChhcHBlbmQpO1xuXHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigp
KTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNw
b25zZS5qYXZhc2NyaXB0KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJl
c3BvbnNlLmVsZW1lbnRzLCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0
XHR0aGlzLnJlc29sdmUoe3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5l
bGVtZW50cywgaHRtbDogcmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNj
cmlwdH0pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRz
ZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5j
YW5jZWwoKTtcblx0XHRsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2
ZSgnbG9hZCcpO1xuXHRcdGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRN
TCh7ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0
J30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4g
bG9hZDtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rp
b24oKXtcblx0XHR0aGlzLmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtk
YXRhOiBUeXBlLmlzT2JqZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjog
SlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxuU2VlQWxzbzogPGh0dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBT
dHJpbmcsIE51bWJlciwgRnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxu
aWYgKHR5cGVvZiBKU09OID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihm
dW5jdGlvbigpe1xuXG52YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxc
dCcsICdcXG4nOiAnXFxcXG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicg
OiAnXFxcXFwiJywgJ1xcXFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9u
KGNocil7XG5cdHJldHVybiBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIu
Y2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRh
dGUgPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/
OltcIlxcXFxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJl
cGxhY2UoL1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5c
XGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/
Ol58OnwsKSg/OlxccypcXFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSok
LykudGVzdChzdHJpbmcpO1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1
bmN0aW9uKG9iail7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9u
KG9iail7XG5cdGlmIChvYmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5c
dHN3aXRjaCAodHlwZU9mKG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4g
J1wiJyArIG9iai5yZXBsYWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCIn
O1xuXHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5j
b2RlKS5jbGVhbigpICsgJ10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRc
dFx0dmFyIHN0cmluZyA9IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1
ZSwga2V5KXtcblx0XHRcdFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRc
dGlmIChqc29uKSBzdHJpbmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5c
dFx0XHR9KTtcblx0XHRcdHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVt
YmVyJzogY2FzZSAnYm9vbGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzog
cmV0dXJuICdudWxsJztcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUg
PSB0cnVlO1xuXG5cbkpTT04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRp
ZiAoIXN0cmluZyB8fCB0eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5c
blx0aWYgKHNlY3VyZSA9PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3Vy
ZSl7XG5cdFx0aWYgKEpTT04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0
aWYgKCFKU09OLnZhbGlkYXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBu
b3QgZGVjb2RlIHRoZSBpbnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlz
IG5vdCBzZWN1cmUuJyk7XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScp
O1xufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3Jp
cHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1l
dGhvZHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVz
OiBSZXF1ZXN0LkpTT05cblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xu
XG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVu
Y3Rpb24odGV4dCwgZXJyb3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0
XHRPYmplY3QuYXBwZW5kKHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNh
dGlvbi9qc29uJyxcblx0XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxu
XHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRc
dFx0anNvbiA9IHRoaXMucmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0
aW9ucy5zZWN1cmUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50
KCdlcnJvcicsIFt0ZXh0LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAo
anNvbiA9PSBudWxsKXtcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHR0aGlzLm9uU3VjY2Vzcyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjog
anNvbiwgdGV4dDogdGV4dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1l
OiBDb29raWVcblxuZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5k
IGRlbGV0aW5nIGJyb3dzZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbmNyZWRpdHM6XG4gIC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtv
Y2ggKGh0dHA6Ly9xdWlya3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nl
cl1cblxucHJvdmlkZXM6IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xh
c3Moe1xuXG5cdEltcGxlbWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6
ICcvJyxcblx0XHRkb21haW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1
cmU6IGZhbHNlLFxuXHRcdGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5c
dFx0aHR0cE9ubHk6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBv
cHRpb25zKXtcblx0XHR0aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdH0sXG5cblx0d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRp
b25zLmVuY29kZSkgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0
aGlzLm9wdGlvbnMuZG9tYWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5k
b21haW47XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0
aGlzLm9wdGlvbnMucGF0aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRc
dHZhciBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUo
KSArIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0
dmFsdWUgKz0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRp
ZiAodGhpcy5vcHRpb25zLnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhp
cy5vcHRpb25zLmh0dHBPbmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRp
b25zLmRvY3VtZW50LmNvb2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlz
Lm9wdGlvbnMuZG9jdW1lbnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5
LmVzY2FwZVJlZ0V4cCgpICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNv
ZGVVUklDb21wb25lbnQodmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5j
dGlvbigpe1xuXHRcdG5ldyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5v
cHRpb25zLCB7ZHVyYXRpb246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fVxuXG59KTtcblxuQ29va2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7
XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxu
Q29va2llLnJlYWQgPSBmdW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJl
YWQoKTtcbn07XG5cbkNvb2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0
cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0t
XG5cbm5hbWU6IERPTVJlYWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2
ZW50IGRvbXJlYWR5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IFtCcm93c2VyLCBFbGVtZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5
LCBEb21SZWFkeV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5c
bnZhciByZWFkeSxcblx0bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0
dGltZXIsXG5cdHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5c
bnZhciBkb21yZWFkeSA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlm
ICghcmVhZHkpe1xuXHRcdEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3Vt
ZW50LnJlbW92ZUxpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxp
c3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVu
dCgnZG9tcmVhZHknKTtcblx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5c
dC8vIGNsZWFudXAgc2NvcGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50
ID0gbnVsbDtcbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBj
aGVja3MubGVuZ3RoOyBpLS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5c
dFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBm
dW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVy
ID0gc2V0VGltZW91dChwb2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9N
Q29udGVudExvYWRlZCcsIGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRl
Y2huaXF1ZSBieSBEaWVnbyBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29u
dGVudExvYWRlZC9cbi8vIHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERP
TSBpcyBub3QgcmVhZHksIG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtz
ID0gZnVuY3Rpb24oKXtcblx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRc
dHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJ
ZiBkb1Njcm9sbCB3b3JrcyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBk
b21yZWFkeVxuLy8gICBlLmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xs
ICYmICFkb1Njcm9sbFdvcmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0
c2hvdWxkUG9sbCA9IHRydWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5
U3RhdGUpIGNoZWNrcy5wdXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJl
YWR5U3RhdGU7XG5cdHJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBs
ZXRlJyk7XG59KTtcblxuaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1
bWVudC5hZGRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxk
UG9sbCA9IHRydWU7XG5cbmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRz
LmRvbXJlYWR5ID0ge1xuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4u
Y2FsbCh0aGlzKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMg
YmVmb3JlIGxvYWRcbkVsZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0
b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBm
bi5jYWxsKHRoaXMpO1xuXHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMgPT0gd2luZG93KXtcblx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5F
dmVudHMubG9hZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMg
aXMgYmFzZWQgb24gdGhlIGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQn
LCBmdW5jdGlvbigpe1xuXHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1l
bnQpO1xuIgogCiAvKioqLyB9KSwKIC8qIDQwNiAqLwpAQCAtMTEzNjQxLDEzICsxMTM2NDEsMTMg
QEAgbW9kdWxlLmV4cG9ydHMgPSAiLypqc2hpbnQgcXVvdG1hcms6IGZhbAogLyogNDE0ICovCiAv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8v
IGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJp
Z2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5MaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNl
XCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNlbnNlIGF0IGh0
dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElTIENPREUgSVMg
UFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9V
VCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElU
TEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRBQkxJVFkgT1Ig
Tk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBm
b3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQgbGltaXRhdGlv
bnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4vLyBUeXBp
bmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAueFxuLy8gUHJv
amVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9yaXMgWWFua292
IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhvZmZtZWlzdGVy
IDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9uLCBEaXVsbGVp
IEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3BvdWxvcyA8aHR0
cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFuIEhpbGwgPGh0
dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6Ly9naXRodWIu
Y29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9rc3VtbWVybGlu
PiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+LCBOaWNob2xh
cyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVyZWsgQ2ljZXJv
bmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdhc3BhciA8aHR0
cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZpc2hlciA8aHR0
cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxodHRwczovL2dp
dGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dpdGh1Yi5jb20v
YmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIuY29tL3MwOTMy
OTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+LCBKb2huIFJl
aWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZpbml0aW9uczog
aHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG4vKlxuICAg
IEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmlndXJlIHRoZSBB
SkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtcbiAgICAvKipc
biAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHRoYXQg
dGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBhY2NlcHQgaW4g
cmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMg
cmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuXG4g
ICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBh
bGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBpcyBzZXQgdG8g
dHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVzdHMsIHNldCB0
aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBkYXRhVHlwZTog
XCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9wZXJhdGlvbi4g
Tm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBsb2NrIHRoZSBi
cm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3QgaXMgYWN0aXZl
LiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRoIGpxWEhSICgk
LkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nlc3MvZXJyb3Iv
Y29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1l
dGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBvciB0aGUgZGVw
cmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBib29sZWFuO1xu
ICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4g
YmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1
ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBjdXN0b20gaGVh
ZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBhc3NlZCBhcyBh
cmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNlIGluIHRoZSBi
ZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBvZiBqUXVlcnkg
MS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0
aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChqcVhIUjogSlF1
ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAgIC8qKlxuICAg
ICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFnZXMgbm90IHRv
IGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0byBmYWxzZSB3
aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVzdHMuIEl0IHdv
cmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBhcmFtZXRlcnMu
IFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgcmVxdWVzdHMs
IGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0IGhhcyBhbHJl
YWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hlPzogYm9vbGVh
bjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1
ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3MgYXJlIGV4ZWN1
dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRoZSBqcVhIUiAo
aW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0cmluZyBjYXRl
Z29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIsIFwibm90bW9k
aWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBcInBhcnNlcmVy
cm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBjYW4gYWNjZXB0
IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0
dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxldGU/IChqcVhI
UjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICog
QW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhhdCBkZXRlcm1p
bmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRzIGNvbnRlbnQg
dHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50cz86IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5hamF4IHNvdXJj
ZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlwZSB0byBzZXQg
dG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmlu
aXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5kaW5nIGRhdGEg
dG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlzIFwiYXBwbGlj
YXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdoaWNoIGlzIGZp
bmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBjb250ZW50LXR5
cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNlcnZlciAoZXZl
biBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNwZWNpZmljYXRp
b24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNwZWNpZnlpbmcg
YW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNoYW5nZSB0aGUg
ZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAgLyoqXG4gICAg
ICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBBamF4LXJlbGF0
ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmplY3QgdGhhdCBy
ZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQuYWpheFNldHRp
bmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5cbiAgICAgKi9c
biAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5n
IGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVyJ3MgdmFsdWUg
aXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVlIG9mIHRoZSBy
ZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252ZXJ0ZXJzPzog
eyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdpc2ggdG8g
Zm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0aGUgc2FtZSBk
b21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhpcyBhbGxvd3Ms
IGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVyIGRvbWFpbi4g
KHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86IGJvb2xlYW47
XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIEl0IGlzIGNv
bnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcuIEl0J3Mg
YXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vzc0RhdGEgb3B0
aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0IG11c3QgYmUg
S2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNlcmlhbGl6ZXMg
bXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSB0
cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xuICAgIGRhdGE/
OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRvIGhhbmRsZSB0
aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBhIHByZS1maWx0
ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hvdWxkIHJldHVy
biB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHM6
IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAnZGF0YVR5cGUn
IHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55LCB0eTogYW55
KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5b3UncmUgZXhw
ZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmllZCwgalF1ZXJ5
IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHJlc3Bv
bnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNPTiB3aWxsIHlp
ZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVjdXRlIHRoZSBz
Y3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcpLlxu
ICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rp
b24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rpb24gcmVjZWl2
ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJl
cXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlcnJvciB0aGF0
IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBvbmUgb2NjdXJy
ZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVzaWRlcyBudWxs
KSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJwYXJzZXJlcnJv
clwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNlaXZlcyB0aGUg
dGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5vdCBGb3VuZFwi
IG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBlcnJv
ciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9u
IHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBub3QgY2FsbGVk
IGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAgcmVxdWVzdHMu
IFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpxWEhSOiBKUXVl
cnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTogYW55O1xuICAg
IC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVudCBoYW5kbGVy
cyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgdG8g
cHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFqYXhTdG9wIGZy
b20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBB
amF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAg
ICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMgdG8gc2Vu
ZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0cmFuc3BvcnQu
IFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlzIGFk
ZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJlIGNoYW5nZWQg
aGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUgb3ZlcndyaXR0
ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9uIGFkZGVkOiAx
LjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAg
IC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwgb25seSBpZiB0
aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4gVGhpcyBpcyBk
b25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVsdCB2YWx1ZSBp
cyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlzIHRlY2huaXF1
ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVyIHRvIGNhdGNo
IHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9vbGVhbjtcbiAg
ICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBiZSByZWNvZ25p
emVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlmIGpRdWVyeSBk
b2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9sbG93aW5nIHBy
b3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUsICotZXh0ZW5z
aW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlv
biwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBt
ZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xvY2FsPzogYm9v
bGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFt
ZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2Yg
J2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBp
biB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0IGluICdvbkpT
T05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEuNSwgc2V0dGlu
ZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9tIGFkZGluZyB0
aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5nIHRvIHVzZSBc
Ij0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgYWxzbyBl
eHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhhbXBsZSwgeyBq
c29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxuICAgICAqL1xu
ICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVz
ZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkg
alF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUgYSB1bmlxdWUg
bmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVlc3RzIGFuZCBw
cm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2FudCB0byBzcGVj
aWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIgYnJvd3NlciBj
YWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNhbiBhbHNvIHVz
ZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIG9m
IGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlv
bi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxuICAgICAqIEEg
bWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lvbiBhZGRlZDog
MS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICog
QSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8g
YW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBwYXNz
d29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRhIHBhc3NlZCBp
biB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwgYW55dGhpbmcg
b3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5zZm9ybWVkIGlu
dG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVudC10eXBlIFwi
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50IHRvIHNlbmQg
YSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQgdGhpcyBvcHRp
b24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFuO1xuICAgIC8q
KlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5zcG9ydCBpcyB1
c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIgb3IgXCJzY3Jp
cHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1
dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3aGVuIHRoZSBj
aGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25l
IG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJzZXQ/OiBzdHJp
bmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBjb2RlcyBhbmQg
ZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhlIGNvcnJlc3Bv
bmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3RhdHVzIGNvZGUg
ZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2VzcyBjYWxsYmFj
azsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRpcmVjdCksIHRo
ZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFjay4gKHZlcnNp
b24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5OiBzdHJpbmdd
OiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJlZSBhcmd1bWVu
dHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVkIGFjY29yZGlu
ZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBzdGF0
dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVj
dC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFy
cmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBU
aGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRhdGE6IGFueSwg
dGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAgIC8qKlxuICAg
ICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1ZXN0LiBUaGlz
IHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWpheFNldHVwKCku
IFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFqYXggY2FsbCBp
cyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVzcyBhbmQgdGhl
IGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9zc2libGUgZm9y
IGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIEluIGpRdWVyeSAx
LjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBiZSBpbiBhbiBp
bnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5nIGFueSBvYmpl
Y3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMuMCsgb25seSwg
c2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5IGEgdGltZW91
dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIgdGhlIHRpbWVv
dXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgLyoqXG4gICAg
ICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRpdGlvbmFsIHN0
eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0aW9uYWw/OiBi
b29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8gbWFrZSAoXCJQ
T1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3RoZXIgSFRUUCBy
ZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNvIGJlIHVzZWQg
aGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzLlxuICAgICAq
L1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICovXG4gICAgdXJs
Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNlZCB3aXRoIFhN
TEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9u
IHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QuIERlZmF1
bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRoZSBYTUxIdHRw
UmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50
YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUgZmFjdG9yeS5c
biAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGZp
ZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhIUiBvYmplY3Qu
IEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRpYWxzIHRvIHRy
dWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVyeSAxLjUsIHRo
ZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRvIHRoZSBuYXRp
dmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxkIGlnbm9yZSB0
aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpRdWVyeSAxLjUu
MSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFkZGVkOiAxLjUu
MSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbn1c
blxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8YW55PiB7XG4g
ICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAgIGFib3J0KHN0
YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhl
IEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7XG4gICAgYWRk
KC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7XG4gICAgZW1w
dHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtcbiAgICBmaXJl
ZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10p
OiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxvY2soKTogYW55
O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFja3M6IGFueVtd
KTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8gaW50ZXJvcCB3
aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0
PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhl
bjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9u
UmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29u
OiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBm
b3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBK
UXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xu
ICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4g
ICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZh
aWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVz
cyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGFs
d2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBk
b25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWls
KC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVz
cyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAg
Ly8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVGaWx0ZXI/OiAo
eDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHByb2dyZXNzRmls
dGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgdGhlbjxV
PihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55
W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBK
UXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4g
VSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVBy
b21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWpl
Y3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblBy
b2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxV
PjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21pc2VzIFN1Y2tc
biAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0
PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9u
OiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmls
bDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVj
dD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lv
bjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlb
XSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Np
b246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxm
aWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVq
ZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Q
cm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8
VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVycmVkLCBwYXJ0
IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBleHRlbmRzIEpR
dWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4g
ICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4g
ICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBm
YWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dy
ZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAg
IGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4g
ICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAg
IGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBw
cm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
blxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIG5v
dGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+
O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAg
cmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29s
dmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlV2l0aChj
b250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgc3Rh
dGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNl
PFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVuc2lvbiBvZiB0
aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlFdmVudE9iamVj
dCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVUYXJnZXQ6IEVs
ZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAgaXNJbW1lZGlh
dGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0aW9uU3RvcHBl
ZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZlbnREZWZhdWx0
KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3VsdDogYW55O1xu
ICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlv
bigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICB3
aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVl
cnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBh
bHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRhS2V5OiBib29s
ZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5TW91c2VF
dmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGJ1dHRvbjog
bnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1iZXI7XG4gICAg
b2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdlWDogbnVtYmVy
O1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAgIHNjcmVlblk6
IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1
ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJDb2RlOiBudW1i
ZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2Ug
SlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7
XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJmYWNlIEpRdWVy
eUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVlcnlJbnB1dEV2
ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVudE9iamVjdCwg
SlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVjdGlvbiBvZiBw
cm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFjZSBKUXVlcnlT
dXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJvb2xlYW47XG4g
ICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJvb2xlYW47XG4g
ICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAgY3NzRmxvYXQ/
OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBodG1sU2VyaWFs
aXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47XG4gICAgbm9D
bG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xlYW47XG4gICAg
b3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIG9wdFNl
bGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtcbiAgICBzdHls
ZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAgdGJvZHk/OiBi
b29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6IGFueSk6IHN0
cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3RyaW5nO1xufVxu
XG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5IGV2ZW50cyAo
d2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGlu
bGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhlIGNvbnN0cnVj
dGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmluZyBzcGVjaWZp
YyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvciB7
XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRP
YmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpR
dWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBzcGVj
aWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNpbmcge1xuICAg
IGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVyKTogbnVtYmVy
O1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ugb24gJCBhbmQg
alF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7XG5cbiAgICAv
KipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0
aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFs
LiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCku
XG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5
WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgp
IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcg
dGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzZXR0
aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVx
dWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9y
IGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgodXJsOiBz
dHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuXG4gICAg
LyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5n
IG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUg
cHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFUeXBlcyBB
biBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0
IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZp
bHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRz
OiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG4g
ICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0
aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBh
cmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMu
XG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5h
bE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9p
ZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4gICAgIC8qKlxu
ICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLiBJdHMg
dXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFtIG9wdGlvbnMg
QSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZhdWx0IEFqYXgg
cmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAgICBhamF4U2V0
dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAq
IExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hp
Y2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNr
IGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAg
ICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2Vy
dmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0
bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnks
IHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86
IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMg
c2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nl
c3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1
Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVk
IGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwg
c2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBP
YmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBK
UXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoq
XG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVl
c3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVS
TCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxh
aW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBy
ZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBp
cyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5
cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IElu
dGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4g
ICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwg
dGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzog
c3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRh
dGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSBy
ZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlv
biB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAg
IGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBz
dHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAg
ICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBI
VFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3
aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAg
ICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFu
eSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlY
SFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2
ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBB
IHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5c
biAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50
IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZhU2NyaXB0IGZp
bGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhlbiBleGVjdXRl
IGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKHNjcmlw
dDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6
IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8qKlxuICAgICAq
IExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdo
aWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1
aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2Fz
ZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9t
IHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlw
dCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86
IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55
LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRh
dGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUg
cmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0
cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAq
IEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0
aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1
dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0
eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2Vu
dCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBv
c3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJp
bmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZl
ciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBB
IHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5c
biAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50
IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4g
dGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVj
dGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNv
biwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBk
YXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBq
cVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xu
XG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0IG9iamVjdCB0
aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBsaXN0cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFy
YXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcy5cbiAg
ICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxsYmFjaztcblxu
ICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24gb2YgalF1ZXJ5
J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRpY2F0ZXMgd2hl
dGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFzZWRcbiAgICAg
Ki9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAoc2VsZWN0b3I6
IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDogRWxlbWVudCk6
IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudEFycmF5OiBF
bGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIChm
dW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1ZXJ5O1xuICAg
ICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVyeSdzIGNvbnRy
b2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVtb3ZlQWxsIEEg
Qm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkgdmFyaWFibGVz
IGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYpLlxuICAgICAq
L1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtcblxuICAgIC8q
KlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJh
c2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0
IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRl
ZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0
IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpRdWVyeUdlbmVy
aWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3Zp
ZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBt
b3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3lu
Y2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3Ig
bW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAg
ICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4g
ICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlv
bnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3Rz
IHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFT
Y3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogYW55W10p
OiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3RvcmUgYXJiaXRy
YXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4gUmV0dXJucyB0
aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhl
IERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBr
ZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKiBAcGFy
YW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8VD4oZWxlbWVu
dDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipcbiAgICAgKiBS
ZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQg
YnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0
b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBE
T00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5
IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICovXG4gICAg
ZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAg
KiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBz
ZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRh
IHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRo
ZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBk
YXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1lbnQ6IEVsZW1l
bnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxlbWVudDogRWxl
bWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/
OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6
IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVE
YXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBE
ZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVkOiBKUXVlcnlE
ZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAvLyBFZmZlY3Rz
XG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsgc3RvcDogKCkg
PT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9OyBvZmY6IGJv
b2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5KGZuOiAoLi4u
YXJnczogYW55W10pID0+IGFueSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtc
biAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBh
bnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAgIC8vIEludGVy
bmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxh
bmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVjaWRlIGhvdyB3
ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAgICAvLyBQcm9w
ZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0aWxpdGllc1xu
ICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVtZW50KTogYm9v
bGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGluZGV4SW5BcnJh
eTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaChjb2xs
ZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZF
bGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4oY29sbGVjdGlv
bjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDog
VCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlb
XSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnksIC4uLm9ianM6
IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBhbnk7XG5cbiAg
ICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFy
cmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107XG5cbiAgICBp
bkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1i
ZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0VtcHR5T2JqZWN0
KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTogYm9vbGVhbjtc
biAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFpbk9iamVjdChv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29sZWFuO1xuICAg
IGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5KG9iajogYW55
KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6IChlbGVtZW50
T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4gICAgbWFwKGFy
cmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJbkFycmF5OiBh
bnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNlY29uZDogVFtd
KTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10pOiBhbnlbXTtc
blxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAgIHBhcnNlSlNP
Tihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcg
aW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YWEgd2VsbC1m
b3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJzZVhNTChkYXRh
OiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1
ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAgICB0cmltKHN0
cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmluZztcblxuICAg
IHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBz
dHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29udGV4dCBET00g
ZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRNTCBmcmFnbWVu
dCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBCb29sZWFuIGlu
ZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBIVE1MIHN0
cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRleHQ/OiBIVE1M
RWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBBbmltYXRpb24o
ZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtcblxuICAgIGVh
c2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5zdGFuY2UgbWVt
YmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBhamF4Q29tcGxl
dGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVyOiAoZXZlbnQ6
IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6
IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwg
c2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4
U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9wKGhhbmRsZXI6
ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAoZXZlbnQ6IGFu
eSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBsZXRlPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJpYWxpemVBcnJh
eSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhjbGFzc05hbWVz
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGN1cnJl
bnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRwOi8vYXBpLmpx
dWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5
O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICBhdHRy
KGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBhdHRyKGF0
dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBoYXNDbGFzcyhj
bGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmluZztcbiAgICBo
dG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxDb250ZW50OiAo
aW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAg
aHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJp
bmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpR
dWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJvcGVydHlOYW1l
OiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogSlF1
ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAg
IHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7
XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNs
YXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5
O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogbnVtYmVy
KTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBzdHlsZSBwcm9w
ZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVu
dHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5Llxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICAvKipc
biAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0
Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1Mg
cHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRo
ZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVl
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBw
cm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFt
IHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3Nz
KHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRj
aGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBw
cm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhl
IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6
IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1Mg
cHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJh
bSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNz
cyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBt
YXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENT
UyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmlu
ZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVz
IHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xk
IHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3Ig
dGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bl
cnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0
aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1l
bnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0
IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVy
dHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikgPT4g
bnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJv
cGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBhaXJzIHRvIHNl
dC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAg
aGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAg
ICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVuYzogKGluZGV4
OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5lckhlaWdodCgp
OiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAg
IGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IH07XG4g
ICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0KGZ1bmM6IChp
bmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJIZWln
aHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJIZWlnaHQodmFs
dWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBvdXRl
cldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVyV2lkdGgo
dmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBw
b3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAgICBzY3JvbGxM
ZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5c
biAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKTog
SlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVlOiBudW1iZXIp
OiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB3aWR0aChm
dW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8v
IERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0YShvYmo6IHsg
W2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzogc3RyaW5nKTog
YW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxu
ICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+
O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlv
bj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3Bl
cnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29tcGxldGU/OiBG
dW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczog
eyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1bmN0aW9uOyBz
dGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86IGFueTsgfSk6
IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFtZT86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkp
OiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUbyhkdXJhdGlv
bjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZh
ZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0cmluZywgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBj
YWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmluaXNoKCk6
IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBj
YWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnksIGVh
c2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVRvZ2ds
ZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVUb2dn
bGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRv
RW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBjbGVhclF1ZXVl
PzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHRvZ2dsZShk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAg
IHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8gRXZlbnRzXG4g
ICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJpbmQo
ZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxlOiBib29sZWFu
KTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRCdWJibGU6IGJv
b2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1ZXJ5O1xuXG4g
ICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICov
XG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0
IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNr
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNrKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTog
c3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3VzXCIgZXZlbnQg
b24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQoZXZlbnRE
YXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRsZXJzIHRvIHRo
ZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVy
IGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50
ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAg
Ki9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFuZGxlciB0byB0
aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRl
ciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIg
ZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVy
SW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBrZXlkb3duXCJc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihldmVudERh
dGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXByZXNz
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNz
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBh
c3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
VHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAg
a2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtl
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVj
dDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0
IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93
blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNl
ZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJl
ZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVs
ZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZlXCIgZXZlbnQg
b24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91
c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5c
biAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShldmVudERhdGE6
IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3V0
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVw
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChldmVudERhdGE6
IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxl
ci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBh
biBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9y
ZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9y
IGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwi
LCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdo
aWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4g
YXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxl
ciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBz
cGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgc2Vs
ZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFy
YXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3Bh
Y2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1
Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3Vz
bHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2Uu
XG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVt
b3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9i
amVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1
ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRo
ZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91
bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGlu
ZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtrZXk6IHN0cmlu
Z106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRz
IHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5k
IGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBSZXN0IHBhcmFt
ZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBqUXVlcnkudHJp
Z2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBldmVudCBoYW5k
bGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRheCkuXG4gICAg
ICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2
ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwg
bmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4g
ICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVz
Y2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQu
IElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMg
dHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZv
ciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAg
IG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0
byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9u
ZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNw
YWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICog
QHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFu
dHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRo
ZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dl
cmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0g
ZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4g
YW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBp
cyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkg
ZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVj
dG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVu
dCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hp
Y2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJl
c2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4g
ICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVz
Y2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5k
bGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBh
bHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAg
KiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5k
YXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVs
ZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQg
cGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNv
bnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhl
IGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0
eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9u
ZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwi
c3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gZGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRo
ZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czog
c3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRs
ZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQg
YXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5k
IG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBs
dWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0
ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIg
dGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQg
aXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNo
b3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAg
ICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMu
IFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZl
bnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Ut
c2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwi
Y2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3Ig
QSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0
ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51
bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFj
aGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUg
cGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBh
cyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxz
ZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRh
dGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVu
dCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2Ug
cGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3Jl
IHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5k
IHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9y
IHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3
aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQs
IHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3Rl
ZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBo
YW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAg
b25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nLCBk
YXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBET00gaXMg
cmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE6IE9iamVj
dCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBldmVudCBvbiBh
biBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIg
SmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5k
bGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoZXZlbnREYXRh
OiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2VsZWN0XCIgZXZl
bnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNl
bGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNl
bGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGV2
ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInN1Ym1p
dFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJt
aXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6IHN0cmluZywg
Li4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2VyKGV2ZW50OiBK
UXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVyKGV2ZW50VHlw
ZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xuXG4gICAgdW5i
aW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBlOiBzdHJpbmcs
IGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBKUXVlcnk7XG5c
biAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnks
IGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZl
bnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxl
cj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1ZXJ5OiBzdHJp
bmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHB1
c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNrKGVsZW1lbnRz
OiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1h
bmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFm
dGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmQoLi4u
Y29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRleDogYW55LCBo
dG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdldDogYW55KTog
SlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGJl
Zm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvbmUod2l0
aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFu
KTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
ZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkpOiBKUXVlcnk7
XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZCgu
Li5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChpbmRleDogYW55
LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0YXJnZXQ6IGFu
eSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAg
IHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlV2l0aChmdW5j
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0KHRleHRTdHJp
bmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDogbnVtYmVyLCB0
ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXkoKTogYW55W107
XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0VsZW1lbnQ6IGFu
eSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuXG4gICAgd3Jh
cElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJbm5lcihmdW5j
OiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xu
ICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4KCk6IG51bWJl
cjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGluZGV4KGVsZW1l
bnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5ndGg6IG51bWJl
cjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG4gICAgW3g6
IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAgIGFkZChzZWxl
Y3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCguLi5lbGVtZW50
czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBh
ZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rvcj86IGFueSk6
IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBj
bG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAg
IGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVtZW50OiBhbnkp
OiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86IEVsZW1lbnQp
OiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgpOiBKUXVlcnk7
XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVyKHNlbGVjdG9y
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIo
b2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChvYmo6IEpRdWVy
eSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhzZWxlY3Rvcjog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBKUXVlcnk7XG5c
biAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5jOiAoaW5kZXg6
IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBib29sZWFuO1xu
ICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1ZXJ5O1xuXG4g
ICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVudCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0VW50aWwoc2Vs
ZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwo
ZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50
aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBub3Qoc2Vs
ZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIG5vdChvYmo6
IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7XG5cbiAgICBw
YXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzKHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9yPzogc3RyaW5n
LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVsZW1lbnQ/OiBF
bGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKG9iaj86
IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihzZWxlY3Rvcj86
IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVl
cnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6
IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxu
ICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtcblxuICAgIC8v
IFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4gICAg
cXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5
O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xufVxuZGVjbGFy
ZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xhcmUgdmFyIGpR
dWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGljO1xuLy8gbGli
cy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgQW5ndWxhciBK
UyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZpbml0aW9ucyBi
eTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4vLyBEZWZpbml0
aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG5c
blxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8vIFN1cHBvcnQg
Zm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVuY3Rpb24ge1xu
ICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG5n
IG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRlY2xhcmUgbW9k
dWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQgdGhpcyBpbnRl
cmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgICRnZXQ6IGFu
eTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1bGFyU3RhdGlj
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAgICAgYmluZChj
b250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5jdGlvbjtcbiAg
ICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtdKTogYXV0by5J
SW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1ZXJ5LCBtb2R1
bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChl
bGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7
XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86IGFueVtdKTog
YXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55LCBkZXN0aW5h
dGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpRdWVyeVN0YXRp
YztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueTtc
biAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55LCBrZXk6IGFu
eSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNvbihqc29uOiBz
dHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtcbiAgICAgICAg
aW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAg
ICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUodmFsdWU6IGFu
eSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAg
ICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0Z1bmN0aW9u
KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTogYW55KTogYm9v
bGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlz
U3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5lZCh2YWx1ZTog
YW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xu
ICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxuXHRcdG9mZmlj
aWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1bGVzLlxuXHRc
dHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcblx0XHQq
L1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3VyIG1vZHVsZSB5
b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAg
ICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAgICAgICAgICAg
cmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9uPzogYW55KTog
SU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHRv
SnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAgICAgdXBwZXJj
YXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAg
ICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAgICAgICAgICAg
bWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAgICAgICAgY29k
ZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1hdGlvbkZhY3Rv
cnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywg
aW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0
aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlz
dGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGlj
aCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAg
ICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25m
aWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVy
IHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0
ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9k
dWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxl
O1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGNv
bnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTog
SU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRl
ZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIob2JqZWN0
IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGly
ZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFt
ZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAg
ICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5
KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxl
O1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246
IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVjdCk6IElNb2R1
bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlGdW5jdGlvbjog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBpbmxpbmVB
bm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIob2JqZWN0
OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZp
Y2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1v
ZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAg
ICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAg
ICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAg
c2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9k
dWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3Ry
dWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6IE9iamVjdCk6
IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1
bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxuICAgICAgICAv
LyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVxdWlyZXM6IHN0
cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEF0dHJpYnV0
ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGUu
ZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIGFj
Y2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2FudFxuXHQvLyBi
ZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBhdHRycy5mb28g
YnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91bGQgcmVhbGx5
IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlzIHByb2JsZW06
IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRbbmFtZTogc3Ry
aW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZp
ZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4g
SWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdn
ZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAgICAkYWRkQ2xh
c3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3ZlcyB0aGUgQ1NT
IGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIGZyb20gdGhl
XG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBh
bmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBjbGFzcyByZW1v
dmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAg
ICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgICAgJHNldChr
ZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2JzZXJ2ZXMgYW4g
aW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVyIGZ1bmN0aW9u
IHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4gICAgICAgIC8v
IGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52b2tlZCB3aGVu
ZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAgICAg
ICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBGdW5jdGlvbjtc
blxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhl
IG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8gZG8gcmV2ZXJz
ZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS5cbiAgICAg
ICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJpc3RpbmU6IGJv
b2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFu
O1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAg
ICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4g
ICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZv
aWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJpc3RpbmUoKTog
dm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBOZ01vZGVsQ29u
dHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJl
Y3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVuZGVyKCk6IHZv
aWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0cmluZywgaXNW
YWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHZp
ZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJcbiAgICAgICAg
Ly8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4gICAgICAgICRz
ZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFsdWU6IGFueTtc
blxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJzOiBJTW9kZWxQ
YXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltdO1xuICAgICAg
ICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGly
dHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6
IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7XG4gICAgICAg
ICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxGb3JtYXR0
ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAgICAgICRhcHBs
eShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3BlOiBJU2NvcGUp
ID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmluZywgLi4uYXJn
czogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2b2lkO1xuICAg
ICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmluZywgLi4uYXJn
czogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5
cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRc
biAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0KTogYW55O1xu
ICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBhcmdzPzog
T2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0
aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2
YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZhbEFzeW5jKGV4
cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIERl
ZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBzdHJhdGVneVxu
ICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAgICAgICRvbihu
YW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4uLmFyZ3M6IGFu
eVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9u
OiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBG
dW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5l
cj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnks
IG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0
Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IHN0cmluZywg
b2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRj
aEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogKG5ld1ZhbHVl
OiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxp
dHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRj
aEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTog
YW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoQ29s
bGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVy
OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTog
RnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAgICRpZDogbnVt
YmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNvbGF0ZUJpbmRp
bmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIGN1
cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHByZXZl
bnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtc
blxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRlbWl0LXRlZFxu
ICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9ETyB1bmRvY3Vt
ZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7fVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1
bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8
YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFsU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJ2YWxcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2VydmljZSB7XG4g
ICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBudW1iZXIsIGlu
dm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNlbChwcm9t
aXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmluZyk6IEZ1bmN0
aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0
b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztcblxuICAgICAg
ICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sgYW5ndWxhcidz
IGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRTOiBJTG9jYWxl
TnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFUUzogSUxvY2Fs
ZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAobnVtOiBhbnkp
ID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlckZvcm1hdERl
c2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAgICBHUk9VUF9T
RVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3Jp
cHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAgbWluSW50OiBu
dW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJhYzogbnVtYmVy
O1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJpbmc7XG4gICAg
ICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAgICAgICAgZ1Np
emU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBNT05USDogc3Ry
aW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBEQVk6IHN0cmlu
Z1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1TOiBzdHJpbmdb
XTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJpbmc7XG4gICAg
ICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7XG4gICAgICAg
IG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7XG4gICAgICAg
IG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6IElMb2dDYWxs
O1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dDYWxsO1xuICAg
ICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAgICB9XG5cbiAg
ICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2UgY2FuIHJlb3Bl
biBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBpbnRlcmZhY2Ug
SUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHByZXNzaW9uOiBz
dHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29t
cGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxzPzogYW55KTog
YW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5kZWZpbmVkIGlz
IGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8vIGRvZXMg
bm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9yIGNvbnNpc3Rl
bmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUgaXQsIHBhc3Mg
dGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24oY29udGV4dDog
YW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAgICAgICBhYnNV
cmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAgaGFzaChuZXdI
YXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6IHN0cmluZztc
biAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDogc3RyaW5nKTog
SUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAgICAgIHByb3Rv
Y29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAg
ICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01hcDogYW55KTog
SUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3RyaW5nLCBwYXJh
bWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJsKCk6IHN0cmlu
ZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVy
IHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQcmVmaXgocHJl
Zml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVNb2RlKCk6IGJv
b2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBwYXJhbWV0ZXIg
aXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMgaXQgYXMgYm9v
bGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGEg
dG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxvY2F0aW9uUHJv
dmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRG9jdW1lbnRT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRkb2N1
bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9jdW1lbnRTZXJ2
aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAgIChleGNlcHRp
b246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMgSlF1ZXJ5IHt9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlzZXM6IElQcm9t
aXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4oKTogSURlZmVy
cmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8dm9pZD47XG4g
ICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFj
azogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxi
YWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkp
ID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nl
c3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9y
Q2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6
IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4o
c3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBlcnJvckNhbGxi
YWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTog
YW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNhdGNoPFRSZXN1
bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+KTog
SVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChy
ZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAg
ICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0
KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0PihmaW5hbGx5
Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6IHZvaWQ7XG4g
ICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3RpZnkoc3RhdGU/
OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9sbFxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2VydmljZSB7XG4g
ICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJsZUF1dG9TY3Jv
bGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBD
YWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBmb2NlIHRoZSBv
cHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91Z2hcbiAgICAg
ICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1wbGVtZW50YXRp
b24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1c2VmdWwgdG8g
YXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0LlxuICAgICAg
ICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0p
OiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsg
Y2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAvLyBNZXRob2Rz
IGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7XG4gICAgICAg
IGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAgICAgIGlkOiBz
dHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAgIC8vIE5vdCBn
YXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0aW9uXG4gICAg
ICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAgIHB1dChrZXk6
IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTogc3RyaW5nKTog
YW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICByZW1vdmVB
bGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAgKGVsZW1lbnQ6
IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3Jp
dHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50
OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlv
cml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1l
bnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJp
b3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAg
ICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24p
OiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwgYnV0IGl0IGlz
IHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkpOiBJQ29tcGls
ZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5raW5nRnVuY3Rp
b24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVBdHRhY2hGbidz
IHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hGbj86IChjbG9u
ZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyUHJv
dmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJT
ZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBz
dGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9sbGVyQ29uc3Ry
dWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChjb250cm9sbGVy
TmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAg
cmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTog
dm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5QW5ub3RhZGVk
Q29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
SHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1cmwgbXVzdCBi
ZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55
KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJpbmcsIFJlcXVl
c3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVhZCh1cmw6IHN0
cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBq
c29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBh
bnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5nLCBkYXRhOiBh
bnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVm
YXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcsIEJVVCBp
dCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGluZ1JlcXVlc3Rz
OiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRpbmcuXG4gICAg
Ly8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUg
cmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0
dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNlIElSZXF1ZXN0
Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xu
ICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBpdCdzIG93biBz
dHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUgZnV0dXJlXG4g
ICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4gICAgICAgIHdp
dGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNjZXB0IG11bHRp
cGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAgZGF0YT86IGFu
eTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVz
cG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8IHByb21pc2Vc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4ge1xuICAgICAg
ICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1lOiBzdHJpbmcp
ID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAgZGF0YT86IFQ7
XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86IChoZWFkZXJOYW1l
OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RDb25maWc7XG4g
ICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQcm9taXNlPFQ+
IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJ
SHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxs
YmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNz
Q2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IFRSZXN1
bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+
KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNj
ZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IElQ
cm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VD
YWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAg
ICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRvcnM6IGFueVtd
O1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAgIC8vIFlvdSBz
aG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5LlxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNlIHtcbiAgICAg
ICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0aGUgZnV0dXJl
XG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBhbnksIGNhbGxi
YWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIsIHdpdGhDcmVk
ZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAgICAgICh0ZXh0
OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJwb2xhdGlvbkZ1
bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJv
bCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0aW9uRnVuY3Rp
b24ge1xuICAgICAgICAoY29udGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAg
ICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKHZhbHVlOiBz
dHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmlu
ZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRl
cjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1wbGF0ZUNhY2hl
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGVt
cGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGVtcGxh
dGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7fVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5c
dGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1h
eUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6IGFueSk6IGFu
eTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRK
cyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1ZTogYW55
KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRwYXJzZSh0
eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2Fsczog
YW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4
dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4cHJlc3Npb246
IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VB
c0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBh
bnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0
OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHByZXNzaW9uOiBz
dHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHRydXN0QXMo
dHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1sKHZhbHVlOiBh
bnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1Jl
c291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1ZTogYW55KTog
YW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAgIGdldFRydXN0
ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAgICAgdHJ1c3RB
cyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVlT2YodmFsdWU6
IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFND
RURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtc
biAgICAgICAgcmVzb3VyY2VVcmxCbGFja2xpc3QoYmxhY2tsaXN0OiBhbnlbXSk6IHZvaWQ7XG4g
ICAgICAgIHJlc291cmNlVXJsV2hpdGVsaXN0KHdoaXRlbGlzdDogYW55W10pOiB2b2lkO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVj
dGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpcmVjdGl2
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJlY3RpdmV7XG4g
ICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDogYW55LFxuICAg
ICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIHRy
YW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rpb24pID0+IHZv
aWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzogYW55O1xuICAg
ICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAgICAgICAgICAg
KHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFueSxcbiAgICAg
ICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb250
cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFtZT86IHN0cmlu
ZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/OiBib29sZWFu
O1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0cmluZztcbiAg
ICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAgICAgICB0ZW1w
bGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAgICAgICB0cmFu
c2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFu
Z3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1lbnQsIGFuZ3Vs
YXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdpdGggYWRkaXRp
b25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1ZXJ5U3RhdGlj
IHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJQXVnbWVudGVk
SlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRKUXVlcnk7XG4g
ICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnRB
cnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDogSlF1
ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uKTogSUF1Z21l
bnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4g
ICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQXVn
bWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzogZXZlbnRzLCBo
b3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmluZChzZWxlY3Rv
cjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVtZW50OiBhbnkp
OiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTogSUF1Z21lbnRl
ZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAg
ICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5cbiAgICAgICAg
aW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICAgICAg
aW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAg
ICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAgfVxuXG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxhci5qcylcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xuXG4gICAgICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAgICAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3JcbiAgICAgICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZpY2Uge1xuICAg
ICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAgICAgICAgICBh
bm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdbXTtcbiAgICAg
ICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5zdGFudGlhdGUo
dHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAg
ICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtcbiAgICAgICAg
ICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxzPzogYW55KTog
YW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gUHJv
dmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNl
IElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgaXQg
cmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAgICAgICAgICAg
Ly8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAgICAgICAgICAg
Ly8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICAgICAg
Y29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAgICAg
ZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAg
ICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6IGFueVtdKTog
dm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1
bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBmYWN0
b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogbmcuSVNl
cnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgcHJvdmlk
ZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAg
ICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVu
Y3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2VydmljZShuYW1lOiBz
dHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2VydmljZVByb3Zp
ZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0udHNcblxubW9k
dWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xhc3MgVG9kb0l0
ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0aXRsZTogc3Ry
aW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAgICAgICAgICAg
KSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxubW9kdWxlIHRv
ZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcuSVNjb3BlIHtc
blx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5cdFx0ZWRpdGVk
VG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0XHRyZW1haW5p
bmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFsbENoZWNrZWQ6
IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmlsdGVyOiB7IGNv
bXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZTtc
blx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TdG9yYWdlLnRz
XG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9yYWdlIHtcblx0
XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtdKTtcblx0fVxu
fS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3Ry
aWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9uIHRoZSBl
bGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBiaW5kcyB0byBl
dmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRm9jdXMoJHRp
bWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7
XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmli
dXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRlcy50b2RvRm9j
dXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0XHRcdFx0JHRp
bWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxu
XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3VzLiRpbmplY3Qg
PSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5cbm1vZHVsZSB0
b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGlyZWN0aXZlIHRo
YXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQg
dG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvZG9CbHVyKCk6
IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluazogKCRz
Y29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xu
ICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNjb3BlLiRhcHBs
eShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNjb3BlLiRvbign
JGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xuICAgICAgICAg
ICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0VzY2FwZS50c1xu
XG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVNDQVBFX0tFWSA9
IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRpbmcgYSB0b2Rv
IGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rp
b24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGlu
azogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkg
PT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRc
dFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0XHRcdFx0JHNj
b3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0
fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5i
aW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8vIHNlcnZpY2Vz
L1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4g
ICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmlldmVzIFRPRE9z
IGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBUb2RvU3RvcmFn
ZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9JRCA9ICd0b2Rv
cy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2RvSXRlbVtdIHtc
biAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMu
U1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQodG9kb3M6IFRv
ZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFH
RV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn0vLyBjb250
cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5c
blx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRoZSBjb250cm9s
bGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZpYSB0aGUgdG9k
b1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRoZSB0ZW1wbGF0
ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBjbGFzcyBUb2Rv
Q3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0Ly8gJGluamVj
dCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRoIGluZm9ybWF0
aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0cnVjdG9yXG5c
dFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0cnVjdG9yLCBi
ZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5cGUuXG5cdFx0
Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRwdWJsaWMgc3Rh
dGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRpb24nLFxuXHRc
dFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtcblxuXHRcdC8v
IGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0b3Jcblx0XHQv
LyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9uLnRzIGFuZCBz
cGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5odG1sXG5cdFx0
Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxcblx0XHRcdHBy
aXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJpdmF0ZSB0b2Rv
U3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0ZXJcblx0XHQp
IHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFnZS5nZXQoKTtc
blxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0ZWRUb2RvID0g
bnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4gV2UncmUgYWRk
aW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxuXHRcdFx0Ly8g
Zm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRNTFxuXHRcdFx0
JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50cy9jaGFuZ2Vz
IGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxuXHRcdFx0Ly8g
aWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1lIGxvbmdlciB0
aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5cblx0XHRcdCRz
Y29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUpO1xuXHRcdFx0
JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9uUGF0aChwYXRo
KSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRpb24ucGF0aCgn
LycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1cblxuXHRcdG9u
UGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0ZpbHRlciA9IChw
YXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNlIH0gOiAocGF0
aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVlIH0gOiB7fTtc
blx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVtYWluaW5nQ291
bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDogZmFsc2UgfSku
bGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rvcy5sZW5ndGgg
LSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3BlLmFsbENoZWNr
ZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9kb1N0b3JhZ2Uu
cHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0XHR2YXIgbmV3
VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRcdFx0aWYgKCFu
ZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMu
dG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRcdHRoaXMuJHNj
b3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRlbTogVG9kb0l0
ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtcblxuXHRcdFx0
Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNhbmNlbGxlZC5c
blx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCB0b2Rv
SXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5c
dFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0gdGhpcy4kc2Nv
cGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0cnVlO1xuXHRc
dH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4k
c2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8g
PSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0XHRcdC8vIFRv
ZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhpcy4kc2NvcGUu
cmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0b2RvSXRl
bS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9kb0l0ZW0udGl0
bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRcdH1cblx0XHR9
XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rv
cy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0fVxuXG5cdFx0
Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRoaXMudG9kb3Mg
PSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxldGVkKTtcblx0
XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0dGhpcy50b2Rv
cy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29tcGxldGVkOyB9
KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4gKiBUaGUgbWFp
biBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9kdWxlfVxuICov
XG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0b2RvbXZjID0g
YW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250cm9sbGVyKCd0
b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0JsdXInLCB0
b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRvZG9Gb2N1cylc
biAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBlKVxuICAgICAg
ICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxuIgorbW9kdWxl
LmV4cG9ydHMgPSAiLy8gbGlicy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg
KHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVc
bkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5c
blRISVMgQ09ERSBJUyBQUk9WSURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElO
Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXG5NRVJD
SEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9u
IDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNc
bmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ICovXG5cbi8vIFR5cGluZyBmb3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9uIDEuMTAueCAv
IDIuMC54XG4vLyBQcm9qZWN0OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmluaXRpb25zIGJ5
OiBCb3JpcyBZYW5rb3YgPGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+LCBDaHJpc3Rp
YW4gSG9mZm1laXN0ZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+LCBTdGV2ZSBG
ZW50b24sIERpdWxsZWkgR29tZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVpPiwgVGFzcyBJ
bGlvcG91bG9zIDxodHRwczovL2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3ZWFyaW5nZW4s
IFNlYW4gSGlsbCA8aHR0cHM6Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdvb3NzZW5zIDxo
dHRwczovL2dpdGh1Yi5jb20vR3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6Ly9naXRodWIu
Y29tL2tzdW1tZXJsaW4+LCBCYXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1Yi5jb20vYmFz
YXJhdD4sIE5pY2hvbGFzIFdvbHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253b2x2ZXJzb24+
LCBEZXJlayBDaWNlcm9uZSA8aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJvbmU+LCBBbmRy
ZXcgR2FzcGFyIDxodHRwczovL2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFtZXMgSGFycmlz
b24gRmlzaGVyIDxodHRwczovL2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vpa2ljaGkgS29u
ZG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2ttYW4gPGh0dHBz
Oi8vZ2l0aHViLmNvbS9iZW5qYW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxodHRwczovL2dp
dGh1Yi5jb20vczA5MzI5ND4sIEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5jb20vSm9zaFN0
cm9ibD4sIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVpbGx5Lz5cbi8v
IERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5
cGVkXG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRoYXQgd2lsbCBj
b25maWd1cmUgdGhlIEFKQVggcmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlBamF4U2V0dGlu
Z3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0aGUgcmVxdWVz
dCBoZWFkZXIgdGhhdCB0ZWxscyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNwb25zZSBpdCB3
aWxsIGFjY2VwdCBpbiByZXR1cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVlZHMgbW9kaWZp
Y2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAkLmFqYXhTZXR1
cCgpIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8qKlxuICAgICAq
IEJ5IGRlZmF1bHQsIGFsbCByZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNseSAoaS5lLiB0
aGlzIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5jaHJvbm91cyBy
ZXF1ZXN0cywgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4gcmVxdWVzdHMg
YW5kIGRhdGFUeXBlOiBcImpzb25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQgc3luY2hyb25v
dXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5IHRlbXBvcmFy
aWx5IGxvY2sgdGhlIGJyb3dzZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGlsZSB0aGUgcmVx
dWVzdCBpcyBhY3RpdmUuIEFzIG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5bmM6IGZhbHNl
IHdpdGgganFYSFIgKCQuRGVmZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0IHVzZSB0aGUg
c3VjY2Vzcy9lcnJvci9jb21wbGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQgb2YgdGhlIGNv
cnJlc3BvbmRpbmcgbWV0aG9kcyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMganFYSFIuZG9u
ZSgpIG9yIHRoZSBkZXByZWNhdGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9cbiAgICBhc3lu
Yz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQu
eCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNlIHRoaXMgdG8g
c2V0IGN1c3RvbSBoZWFkZXJzLCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mgb2JqZWN0cyBh
cmUgcGFzc2VkIGFzIGFyZ3VtZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBSZXR1cm5pbmcg
ZmFsc2UgaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhlIHJlcXVlc3Qu
IEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJlIGNhbGxlZCBy
ZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAgYmVmb3JlU2Vu
ZD8gKGpxWEhSOiBKUXVlcnlYSFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBhbnk7
XG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNlIHJlcXVlc3Rl
ZCBwYWdlcyBub3QgdG8gYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBTZXR0aW5nIGNh
Y2hlIHRvIGZhbHNlIHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQgYW5kIEdFVCBy
ZXF1ZXN0cy4gSXQgd29ya3MgYnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwiIHRvIHRoZSBH
RVQgcGFyYW1ldGVycy4gVGhlIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBvdGhlciB0eXBl
cyBvZiByZXF1ZXN0cywgZXhjZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRlIHRvIGEgVVJM
IHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAgICovXG4gICAg
Y2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVk
IHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVycm9yIGNhbGxi
YWNrcyBhcmUgZXhlY3V0ZWQpLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdvIGFyZ3VtZW50
czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYW5k
IGEgc3RyaW5nIGNhdGVnb3JpemluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0IChcInN1Y2Nl
c3NcIiwgXCJub3Rtb2RpZmllZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBcImFib3J0XCIs
IG9yIFwicGFyc2VyZXJyb3JcIikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21wbGV0ZSBzZXR0
aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwg
YmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBj
b21wbGV0ZT8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6IGFueTtcbiAg
ICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVzc2lvbiBwYWly
cyB0aGF0IGRldGVybWluZSBob3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3BvbnNlLCBnaXZl
biBpdHMgY29udGVudCB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNv
bnRlbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRpbmcgdG8galF1
ZXJ5LmFqYXggc291cmNlIGNvZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxsb3dzIGNvbnRl
bnRUeXBlIHRvIHNldCB0byBcImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYm9y
aXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAgICAgKiBXaGVu
IHNlbmRpbmcgZGF0YSB0byB0aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5cGUuIERlZmF1
bHQgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThc
Iiwgd2hpY2ggaXMgZmluZSBmb3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0bHkgcGFzcyBp
biBhIGNvbnRlbnQtdHlwZSB0byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMgc2VudCB0byB0
aGUgc2VydmVyIChldmVuIGlmIG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1MSHR0cFJlcXVl
c3Qgc3BlY2lmaWNhdGlvbiBkaWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFsd2F5cyBVVEYt
ODsgc3BlY2lmeWluZyBhbm90aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhlIGJyb3dzZXIg
dG8gY2hhbmdlIHRoZSBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlwZT86IGFueTtc
biAgICAvKipcbiAgICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNvbnRleHQgb2Yg
YWxsIEFqYXgtcmVsYXRlZCBjYWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250ZXh0IGlzIGFu
IG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBpbiB0aGUgY2Fs
bCAoJC5hamF4U2V0dGluZ3MgbWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3NlZCB0byAkLmFq
YXgpLlxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgZGF0YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4gRWFjaCBjb252
ZXJ0ZXIncyB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQg
dmFsdWUgb2YgdGhlIHJlc3BvbnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAg
IGNvbnZlcnRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBJ
ZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2ggYXMgSlNPTlAp
IG9uIHRoZSBzYW1lIGRvbWFpbiwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFpbiB0byB0cnVl
LiBUaGlzIGFsbG93cywgZm9yIGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0aW9uIHRvIGFu
b3RoZXIgZG9tYWluLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNyb3NzRG9t
YWluPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQgdG8gdGhlIHNl
cnZlci4gSXQgaXMgY29udmVydGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3QgYWxyZWFkeSBh
IHN0cmluZy4gSXQncyBhcHBlbmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVzdHMuIFNlZSBw
cm9jZXNzRGF0YSBvcHRpb24gdG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9jZXNzaW5nLiBP
YmplY3QgbXVzdCBiZSBLZXkvVmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFycmF5LCBqUXVl
cnkgc2VyaWFsaXplcyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNlZCBvbiB0aGUg
dmFsdWUgb2YgdGhlIHRyYWRpdGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxvdykuXG4gICAg
ICovXG4gICAgZGF0YT86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIHVz
ZWQgdG8gaGFuZGxlIHRoZSByYXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVxdWVzdC5UaGlz
IGlzIGEgcHJlLWZpbHRlcmluZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVzcG9uc2UuIFlv
dSBzaG91bGQgcmV0dXJuIHRoZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9uIGFjY2VwdHMg
dHdvIGFyZ3VtZW50czogVGhlIHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciBhbmQg
dGhlICdkYXRhVHlwZScgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0ZXI/IChkYXRh
OiBhbnksIHR5OiBhbnkpOiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgZGF0YSB0
aGF0IHlvdSdyZSBleHBlY3RpbmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5vbmUgaXMgc3Bl
Y2lmaWVkLCBqUXVlcnkgd2lsbCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhlIE1JTUUgdHlw
ZSBvZiB0aGUgcmVzcG9uc2UgKGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBYTUwsIGluIDEu
NCBKU09OIHdpbGwgeWllbGQgYSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNjcmlwdCB3aWxs
IGV4ZWN1dGUgdGhlIHNjcmlwdCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSByZXR1cm5lZCBh
cyBhIHN0cmluZykuXG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4g
ICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFRoZSBm
dW5jdGlvbiByZWNlaXZlcyB0aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEu
NC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBl
IG9mIGVycm9yIHRoYXQgb2NjdXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlvbiBvYmplY3Qs
IGlmIG9uZSBvY2N1cnJlZC4gUG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50
IChiZXNpZGVzIG51bGwpIGFyZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFib3J0XCIsIGFu
ZCBcInBhcnNlcmVycm9yXCIuIFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVycm9yVGhyb3du
IHJlY2VpdmVzIHRoZSB0ZXh0dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVzLCBzdWNoIGFz
IFwiTm90IEZvdW5kXCIgb3IgXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMgb2YgalF1ZXJ5
IDEuNSwgdGhlIGVycm9yIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMu
IEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhpcyBoYW5kbGVy
IGlzIG5vdCBjYWxsZWQgZm9yIGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3NzLWRvbWFpbiBK
U09OUCByZXF1ZXN0cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGVycm9y
PyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRocm93OiBzdHJp
bmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGdsb2JhbCBBamF4
IGV2ZW50IGhhbmRsZXJzIGZvciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlzIHRydWUuIFNl
dCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBhamF4U3RhcnQg
b3IgYWpheFN0b3AgZnJvbSBiZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29u
dHJvbCB2YXJpb3VzIEFqYXggRXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86IGJvb2xlYW47
XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVyIGtleS92YWx1
ZSBwYWlycyB0byBzZW5kIGFsb25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhNTEh0dHBSZXF1
ZXN0IHRyYW5zcG9ydC4gVGhlIGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxIdHRwUmVxdWVz
dCBpcyBhbHdheXMgYWRkZWQsIGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVzdCB2YWx1ZSBj
YW4gYmUgY2hhbmdlZCBoZXJlLiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGluZyBjYW4gYWxz
byBiZSBvdmVyd3JpdHRlbiBmcm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbi4gKHZl
cnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmdd
OiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8gYmUgc3VjY2Vz
c2Z1bCBvbmx5IGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCByZXF1
ZXN0LiBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQgaGVhZGVyLiBE
ZWZhdWx0IHZhbHVlIGlzIGZhbHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBqUXVlcnkgMS40
IHRoaXMgdGVjaG5pcXVlIGFsc28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVkIGJ5IHRoZSBz
ZXJ2ZXIgdG8gY2F0Y2ggdW5tb2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlmTW9kaWZpZWQ/
OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVudmlyb25tZW50
IHRvIGJlIHJlY29nbml6ZWQgYXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5c3RlbSksIGV2
ZW4gaWYgalF1ZXJ5IGRvZXMgbm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRlZmF1bHQuIFRo
ZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBhcyBsb2NhbDog
ZmlsZSwgKi1leHRlbnNpb24sIGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNldHRpbmcgbmVl
ZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAk
LmFqYXhTZXR1cCgpIG1ldGhvZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAg
IGlzTG9jYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBjYWxsYmFj
ayBmdW5jdGlvbiBuYW1lIGluIGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVz
ZWQgaW5zdGVhZCBvZiAnY2FsbGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFydCBvZiB0aGUg
cXVlcnkgc3RyaW5nIGluIHRoZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQnfSB3b3VsZCBy
ZXN1bHQgaW4gJ29uSlNPTlBMb2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBBcyBvZiBqUXVl
cnkgMS41LCBzZXR0aW5nIHRoZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVudHMgalF1ZXJ5
IGZyb20gYWRkaW5nIHRoZSBcIj9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJMIG9yIGF0dGVt
cHRpbmcgdG8gdXNlIFwiPT9cIiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMgY2FzZSwgeW91
IHNob3VsZCBhbHNvIGV4cGxpY2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNldHRpbmcuIEZv
ciBleGFtcGxlLCB7IGpzb25wOiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxsYmFja05hbWVc
IiB9XG4gICAgICovXG4gICAganNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU3BlY2lm
eSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0LiBUaGlzIHZh
bHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBieSBqUXVlcnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpRdWVyeSBnZW5l
cmF0ZSBhIHVuaXF1ZSBuYW1lIGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1hbmFnZSB0aGUg
cmVxdWVzdHMgYW5kIHByb3ZpZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGluZy4gWW91IG1h
eSB3YW50IHRvIHNwZWNpZnkgdGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8gZW5hYmxlIGJl
dHRlciBicm93c2VyIGNhY2hpbmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVlcnkgMS41LCB5
b3UgY2FuIGFsc28gdXNlIGEgZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4gd2hpY2ggY2Fz
ZSB0aGUgdmFsdWUgb2YganNvbnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVybiB2YWx1ZSBv
ZiB0aGF0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBhbnk7XG4gICAg
LyoqXG4gICAgICogQSBtaW1lIHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1lIHR5cGUuICh2
ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0cmluZztcbiAg
ICAvKipcbiAgICAgKiBBIHBhc3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBp
biByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAg
ICAqL1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQs
IGRhdGEgcGFzc2VkIGluIHRvIHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3QgKHRlY2huaWNh
bGx5LCBhbnl0aGluZyBvdGhlciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nlc3NlZCBhbmQg
dHJhbnNmb3JtZWQgaW50byBhIHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUgZGVmYXVsdCBj
b250ZW50LXR5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIi4gSWYgeW91
IHdhbnQgdG8gc2VuZCBhIERPTURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vzc2VkIGRhdGEs
IHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNzRGF0YT86IGJv
b2xlYW47XG4gICAgLyoqXG4gICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwic2NyaXB0XCIg
dHJhbnNwb3J0IGlzIHVzZWQgKGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3aXRoIFwianNv
bnBcIiBvciBcInNjcmlwdFwiIGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBTZXRzIHRoZSBj
aGFyc2V0IGF0dHJpYnV0ZSBvbiB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSByZXF1ZXN0LiBV
c2VkIHdoZW4gdGhlIGNoYXJhY3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMgbm90IHRoZSBz
YW1lIGFzIHRoZSBvbmUgb24gdGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4gICAgc2NyaXB0
Q2hhcnNldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgbnVtZXJpYyBI
VFRQIGNvZGVzIGFuZCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlc3BvbnNlIGhh
cyB0aGUgY29ycmVzcG9uZGluZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIHRo
ZSBzdGF0dXMgY29kZSBmdW5jdGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBz
dWNjZXNzIGNhbGxiYWNrOyBpZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNsdWRpbmcgM3h4
IHJlZGlyZWN0KSwgdGhleSB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIGVycm9yIGNh
bGxiYWNrLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1c0NvZGU/OiB7
IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJl
IGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2Vk
IHRocmVlIGFyZ3VtZW50czogVGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLCBmb3Jt
YXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3RyaW5nIGRlc2Ny
aWJpbmcgdGhlIHN0YXR1czsgYW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIdHRw
UmVxdWVzdCkgb2JqZWN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBzZXR0aW5nIGNh
biBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2Fs
bGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBzdWNjZXNz
PyAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpOiBhbnk7
XG4gICAgLyoqXG4gICAgICogU2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3IgdGhl
IHJlcXVlc3QuIFRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQgc2V0IHdpdGgg
JC5hamF4U2V0dXAoKS4gVGhlIHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUgcG9pbnQgdGhl
ICQuYWpheCBjYWxsIGlzIG1hZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMgYXJlIGluIHBy
b2dyZXNzIGFuZCB0aGUgYnJvd3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxhYmxlLCBpdCBp
cyBwb3NzaWJsZSBmb3IgYSByZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBjYW4gYmUgc2Vu
dC4gSW4galF1ZXJ5IDEuNC54IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCB3
aWxsIGJlIGluIGFuIGludmFsaWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMgb3V0OyBhY2Nl
c3NpbmcgYW55IG9iamVjdCBtZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24uIEluIEZpcmVm
b3ggMy4wKyBvbmx5LCBzY3JpcHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBiZSBjYW5jZWxs
ZWQgYnkgYSB0aW1lb3V0OyB0aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQgYXJyaXZlcyBh
ZnRlciB0aGUgdGltZW91dCBwZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86IG51bWJlcjtc
biAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUg
dHJhZGl0aW9uYWwgc3R5bGUgb2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAgKi9cbiAgICB0
cmFkaXRpb25hbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgcmVxdWVz
dCB0byBtYWtlIChcIlBPU1RcIiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdFVFwiLiBOb3Rl
OiBPdGhlciBIVFRQIHJlcXVlc3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERFTEVURSwgY2Fu
IGFsc28gYmUgdXNlZCBoZXJlLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBieSBhbGwgYnJv
d3NlcnMuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHN0
cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAg
ICAgKi9cbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2VybmFtZSB0byBi
ZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3Mg
YXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0dHBSZXF1ZXN0
IG9iamVjdC4gRGVmYXVsdHMgdG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFpbGFibGUgKElF
KSwgdGhlIFhNTEh0dHBSZXF1ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJvdmlkZSB5b3Vy
IG93biBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5jZW1lbnRzIHRv
IHRoZSBmYWN0b3J5LlxuICAgICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipcbiAgICAgKiBB
biBvYmplY3Qgb2YgZmllbGROYW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9uIHRoZSBuYXRp
dmUgWEhSIG9iamVjdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNldCB3aXRoQ3Jl
ZGVudGlhbHMgdG8gdHJ1ZSBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5lZWRlZC4gSW4g
alF1ZXJ5IDEuNSwgdGhlIHdpdGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90IHByb3BhZ2F0
ZWQgdG8gdGhlIG5hdGl2ZSBYSFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1aXJpbmcgaXQg
d291bGQgaWdub3JlIHRoaXMgZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNvbW1lbmQgdXNp
bmcgalF1ZXJ5IDEuNS4xKyBzaG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBpdC4gKHZlcnNp
b24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tleTogc3RyaW5n
XTogYW55OyB9O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhSIG9iamVjdFxu
Ki9cbmludGVyZmFjZSBKUXVlcnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwgSlF1ZXJ5UHJv
bWlzZTxhbnk+IHtcbiAgICBvdmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpOiBhbnk7
XG4gICAgYWJvcnQoc3RhdHVzVGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qXG4gICAgSW50
ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUNhbGxi
YWNrIHtcbiAgICBhZGQoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBkaXNhYmxlKCk6
IGFueTtcbiAgICBlbXB0eSgpOiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6IGFueVtdKTog
YW55O1xuICAgIGZpcmVkKCk6IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4dDogYW55LCAu
Li5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJvb2xlYW47XG4g
ICAgbG9jaygpOiBhbnk7XG4gICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVtb3ZlKC4uLmNh
bGxiYWNrczogYW55W10pOiBhbnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVyeSBQcm9taXNl
cyB0byBpbnRlcm9wIHdpdGggbm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVyZmFjZSBKUXVl
cnlHZW5lcmljUHJvbWlzZTxUPiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkg
PT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJl
amVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBK
UXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59XG5cbi8qXG4g
ICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2FsbGJhY2tzXG4q
L1xuaW50ZXJmYWNlIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMg
b2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5
UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNl
PFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9t
aXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNl
PFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21p
c2U8VD47XG5cbiAgICAvLyBEZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xuICAgIHBpcGUo
ZG9uZUZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBhbnkpID0+IGFu
eSwgcHJvZ3Jlc3NGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPGFueT47
XG5cbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICgu
Li5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55
W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2
YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNv
bnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4g
YW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBU
KSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBK
UXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4g
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFu
eVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVzZSBKUXVlcnkg
UHJvbWlzZXMgU3Vja1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkg
PT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAo
Li4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRo
ZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzog
KC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0
aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4u
LnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86
ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkg
ZGVmZXJyZWQsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeURlZmVycmVk
PFQ+IGV4dGVuZHMgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBv
ZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlE
ZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlE
ZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVy
eURlZmVycmVkPFQ+O1xuXG4gICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgbm90aWZ5V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1
ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcbiAgICByZWplY3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBK
UXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG4gICAgcmVzb2x2ZSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAg
IHJlc29sdmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcbiAgICBzdGF0ZSgpOiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdldD86IGFueSk6
IEpRdWVyeVByb21pc2U8VD47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRoZSBKUXVlcnkg
ZXh0ZW5zaW9uIG9mIHRoZSBXM0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZhY2UgQmFzZUpR
dWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtcbiAgICBkZWxl
Z2F0ZVRhcmdldDogRWxlbWVudDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbjtc
biAgICBpc0ltbWVkaWF0ZVByb3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIGlzUHJv
cGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAg
cHJldmVudERlZmF1bHQoKTogYW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQ7XG4gICAg
cmVzdWx0OiBhbnk7XG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAg
c3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTog
bnVtYmVyO1xuICAgIHdoaWNoOiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbn1cblxu
aW50ZXJmYWNlIEpRdWVyeUlucHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRP
YmplY3Qge1xuICAgIGFsdEtleTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29sZWFuO1xuICAg
IG1ldGFLZXk6IGJvb2xlYW47XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFj
ZSBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7
XG4gICAgYnV0dG9uOiBudW1iZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVudFk6
IG51bWJlcjtcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xuICAg
IHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5YOiBudW1iZXI7
XG4gICAgc2NyZWVuWTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5RXZlbnRPYmpl
Y3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBhbnk7XG4gICAg
Y2hhckNvZGU6IG51bWJlcjtcbiAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG59
XG5cbmludGVyZmFjZSBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVy
eUV2ZW50T2JqZWN0IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50O1xufVxuXG5p
bnRlcmZhY2UgSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qs
IEpRdWVyeUlucHV0RXZlbnRPYmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QsIEpRdWVyeUtl
eUV2ZW50T2JqZWN0LCBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxuLypcbiAgICBD
b2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3NlclxuKi9cblxuaW50
ZXJmYWNlIEpRdWVyeVN1cHBvcnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAgIGJveE1vZGVs
PzogYm9vbGVhbjtcbiAgICBjaGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBjaGVja0Nsb25l
PzogYm9vbGVhbjtcbiAgICBjaGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzogYm9vbGVhbjtc
biAgICBjc3NGbG9hdD86IGJvb2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBib29sZWFuO1xu
ICAgIGh0bWxTZXJpYWxpemU/OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNwYWNlPzogYm9v
bGVhbjtcbiAgICBub0Nsb25lQ2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9uZUV2ZW50Pzog
Ym9vbGVhbjtcbiAgICBvcGFjaXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxlZD86IGJvb2xl
YW47XG4gICAgb3B0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/ICgpOiBib29s
ZWFuO1xuICAgIHN0eWxlPzogYm9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzogYm9vbGVhbjtc
biAgICB0Ym9keT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJhbSB7XG4gICAg
KG9iajogYW55KTogc3RyaW5nO1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6IGJvb2xlYW4p
OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNvbnN0cnVjdCBq
UXVlcnkgZXZlbnRzICh3aXRoICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBzZXBhcmF0ZWx5
IGluc3RlYWQgb2YgaW5saW5lIGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICogb3ZlcnJpZGlu
ZyB0aGUgY29uc3RydWN0aW9uIGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5nc1xuICogcmV0
dXJuaW5nIHNwZWNpZmljIGV2ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFdmVu
dENvbnN0cnVjdG9yIHtcbiAgICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkp
OiBKUXVlcnlFdmVudE9iamVjdDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0
aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFj
ZSB1c2VkIHRvIHNwZWNpZnkgZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVy
eUVhc2luZyB7XG4gICAgbGluZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBzd2luZyhwOiBu
dW1iZXIpOiBudW1iZXI7XG59XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2YgalF1ZXJ5ICh0
aG9zZSBvbiAkIGFuZCBqUXVlcnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5U3Rh
dGljIHtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFq
YXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5
L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5n
cyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGgg
JC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVlcnlBamF4U2V0
dGluZ3MpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25v
dXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAg
ICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3Vy
ZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQg
Y2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4g
ICAgYWpheCh1cmw6IHN0cmluZywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGluZ3MpOiBKUXVl
cnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBvciBt
b2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5kIGJl
Zm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGVzIEFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBkYXRhVHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIg
dG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9c
biAgICBhamF4UHJlZmlsdGVyKGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAob3B0czogYW55
LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBv
ciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5k
IGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUg
QWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRsZXI6IChvcHRz
OiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhS
KSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3M7
XG5cbiAgICAgLyoqXG4gICAgICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXgg
cmVxdWVzdHMuIEl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxuICAgICAgKiBA
cGFyYW0gb3B0aW9ucyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhl
IGRlZmF1bHQgQWpheCByZXF1ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwuXG4gICAgICAq
L1xuICAgIGFqYXhTZXR1cChvcHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2b2lkO1xuXG4g
ICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VU
IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcg
dGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNj
ZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBz
dWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3Rl
ZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24s
IHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBzdWNjZXNz
PzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBh
bnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQg
ZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBz
dHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAg
KiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYg
dGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9m
IGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVz
cyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0
cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0
cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVy
eVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEg
SFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29u
dGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBh
cmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2Vy
dmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBm
dW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAq
IEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZl
ci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1s
KS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/
OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBK
U09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwg
dG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNh
bGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
XG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnks
IHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhS
O1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0
byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBj
YWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRz
LlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nl
c3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+
IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRh
IGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVx
dWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmlu
ZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRh
Pzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhI
UjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBh
IEphdmFTY3JpcHQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0
LCB0aGVuIGV4ZWN1dGUgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBzdHJpbmcsIHN1
Y2Nlc3M/OiAoc2NyaXB0OiBzdHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBhcmFtO1xuXG4g
ICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9T
VCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51
bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRh
IGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHht
bCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3Ry
aW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1
ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxu
ICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVz
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJM
IHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFp
biBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJl
cXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlz
IGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBp
cyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0g
ZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1
bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4g
ICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChk
YXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBk
YXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEg
ZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVx
dWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmlu
ZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBj
YW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBl
IG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBH
dWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3Qo
dXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcp
OiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2UgY2FsbGJhY2tz
IGxpc3Qgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFuYWdlIGNhbGxi
YWNrIGxpc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlvbmFsIGxpc3Qg
b2Ygc3BhY2Utc2VwYXJhdGVkIGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2FsbGJhY2sgbGlz
dCBiZWhhdmVzLlxuICAgICAqL1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmluZyk6IEpRdWVy
eUNhbGxiYWNrO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMgdGhlIGV4ZWN1
dGlvbiBvZiBqUXVlcnkncyByZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBob2xk
IEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVlc3RlZCBvciBy
ZWxlYXNlZFxuICAgICAqL1xuICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTogdm9pZDtcblxu
ICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIChlbGVt
ZW50OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5O1xuICAgIChl
bGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBKUXVlcnkpOiBK
UXVlcnk7XG4gICAgKGZ1bmM6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJheTogYW55W10p
OiBKUXVlcnk7XG4gICAgKCk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbGlucXVpc2gg
alF1ZXJ5J3MgY29udHJvbCBvZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSByZW1vdmVBbGwgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1vdmUgYWxsIGpR
dWVyeSB2YXJpYWJsZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcgalF1ZXJ5IGl0
c2VsZikuXG4gICAgICovXG4gICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29sZWFuKTogT2Jq
ZWN0O1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFj
ayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJl
ZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBs
YWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVk
czogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoq
XG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFz
ZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQg
cmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVm
ZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQg
b2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtdKTogSlF1ZXJ5
UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNh
bGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERl
ZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywg
b3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVm
ZXJyZWRzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29rczogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH07XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAvKipcbiAgICAg
KiBTdG9yZSBhcmJpdHJhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBlbGVt
ZW50LiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4g
ICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0
LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAgICovXG4gICAg
ZGF0YTxUPihlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBUO1xuICAg
IC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhlIGVs
ZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9yIHRo
ZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAg
ICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5c
biAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogYW55O1xu
ICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhl
IGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9y
IHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxu
ICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAgIGRlcXVldWUo
ZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4gICAgaGFzRGF0
YShlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1l
bnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1l
bnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtc
blxuICAgIHJlbW92ZURhdGEoZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3RhcnQ/OiAoZGVm
ZXJyZWQ6IEpRdWVyeURlZmVycmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxu
ICAgIC8vIEVmZmVjdHNcbiAgICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRlcnZhbDogbnVt
YmVyOyBzdG9wOiAoKSA9PiB2b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBmYXN0OiBudW1i
ZXI7IH07IG9mZjogYm9vbGVhbjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZlbnRzXG4gICAg
cHJveHkoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnksIC4uLmFyZ3M6
IGFueVtdKTogYW55O1xuICAgIHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3RyaW5nLCAuLi5h
cmdzOiBhbnlbXSk6IGFueTtcblxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0cnVjdG9yO1xu
XG4gICAgLy8gSW50ZXJuYWxzXG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55OyAgLy9UT0RP
OiBEZWNpZGUgaG93IHdlIHdhbnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTogYm9vbGVhbjtc
blxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0O1xuXG4gICAg
Ly8gVXRpbGl0aWVzXG4gICAgY29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBjb250YWluZWQ6
IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnksIGNhbGxiYWNr
OiAoaW5kZXhJbkFycmF5OiBhbnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFueSk6IGFueTtc
biAgICBlYWNoKGNvbGxlY3Rpb246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51
bWJlciwgdmFsdWVPZkVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFj
aDxUPihjb2xsZWN0aW9uOiBUW10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZh
bHVlT2ZFbGVtZW50OiBUKSA9PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFyZ2V0OiBhbnks
IC4uLm9ianM6IGFueVtdKTogYW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFuLCB0YXJnZXQ6
IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNvZGU6IHN0cmlu
Zyk6IGFueTtcblxuICAgIGdyZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1lbnRPZkFycmF5
OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0PzogYm9vbGVhbik6
IFRbXTtcblxuICAgIGluQXJyYXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZyb21JbmRleD86
IG51bWJlcik6IG51bWJlcjtcblxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29sZWFuO1xuICAg
IGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rpb24ob2JqOiBh
bnkpOiBib29sZWFuO1xuICAgIGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICBp
c1BsYWluT2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhvYmo6IGFueSk6
IGJvb2xlYW47XG4gICAgaXNYTUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5cbiAgICBtYWtl
QXJyYXkob2JqOiBhbnkpOiBhbnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTogVFtdLCBjYWxs
YmFjazogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gVSk6IFVb
XTtcbiAgICBtYXAoYXJyYXk6IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogYW55LCBp
bmRleEluQXJyYXk6IGFueSkgPT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4oZmlyc3Q6IFRb
XSwgc2Vjb25kOiBUW10pOiBUW107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtdLCBzZWNvbmQ6
IFVbXSk6IGFueVtdO1xuXG4gICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTogbnVtYmVyO1xu
XG4gICAgcGFyc2VKU09OKGpzb246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFBh
cnNlcyBhIHN0cmluZyBpbnRvIGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBkYXRhYSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqL1xuICAg
IHBhcnNlWE1MKGRhdGE6IHN0cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVldWUoZWxlbWVu
dDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6IEpRdWVyeTtc
blxuICAgIHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9iajogYW55KTog
c3RyaW5nO1xuXG4gICAgdW5pcXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAgIC8qKlxuICAg
ICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBkYXRhIEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqIEBwYXJh
bSBjb250ZXh0IERPTSBlbGVtZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRo
ZSBIVE1MIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBrZWVwU2NyaXB0
cyBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQg
aW4gdGhlIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6IHN0cmluZywg
Y29udGV4dD86IEhUTUxFbGVtZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBhbnlbXTtcblxu
ICAgIEFuaW1hdGlvbihlbGVtOiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogYW55KTog
YW55O1xuXG4gICAgZWFzaW5nOiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAgVGhlIGpRdWVy
eSBpbnN0YW5jZSBtZW1iZXJzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAgLy8gQUpBWFxu
ICAgIGFqYXhDb21wbGV0ZShoYW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheEVycm9yKGhh
bmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChldmVudDogYW55
LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGFqYXhTdGFydChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWph
eFN0b3AoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNjZXNzKGhhbmRs
ZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0YT86IGFueSwg
Y29tcGxldGU/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3RyaW5nO1xuICAg
IHNlcmlhbGl6ZUFycmF5KCk6IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIGFkZENs
YXNzKGNsYXNzTmFtZXM6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhmdW5jOiAoaW5k
ZXg6IGFueSwgY3VycmVudENsYXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8v
IGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2VsZWN0b3I/OiBz
dHJpbmcpOiBKUXVlcnk7XG5cblxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3Ry
aW5nO1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5
O1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgYXR0
cjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpRdWVyeTtcblxu
ICAgIGhhc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAgIGh0bWwoKTog
c3RyaW5nO1xuICAgIGh0bWwoaHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwo
aHRtbENvbnRlbnQ6IChpbmRleDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+IHN0cmluZyk6
IEpRdWVyeTtcbiAgICBodG1sKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgcHJvcChwcm9w
ZXJ0eU5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2
YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJv
cChwcm9wZXJ0eU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFByb3BlcnR5VmFs
dWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRyaWJ1dGVOYW1l
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/OiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgcmVtb3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3dGNoPzogYm9v
bGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7
XG4gICAgdG9nZ2xlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBzd3RjaDogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2YWx1ZTogc3Ry
aW5nW10pOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgdmFs
KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDogYW55LCB2YWx1
ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVl
IG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZXQgb2Yg
bWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBD
U1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3Ry
aW5nO1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3Ig
dGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bl
cnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVl
IHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6
IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25l
IG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5c
biAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAg
ICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0
aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVy
dHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUg
dG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTog
c3RyaW5nLCB2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9u
ZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUu
XG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4g
ICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyW10pOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZv
ciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJv
cGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgZnVu
Y3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQgZWxl
bWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBz
ZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9
PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBw
cm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFt
IHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhl
IGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVt
ZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xu
ICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1
ZTogbnVtYmVyKSA9PiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBv
ciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJvcGVydHktdmFs
dWUgcGFpcnMgdG8gc2V0LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBPYmplY3QpOiBK
UXVlcnk7XG5cbiAgICBoZWlnaHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1ZTogbnVtYmVy
KTogSlF1ZXJ5O1xuICAgIGhlaWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhlaWdo
dChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IGlubmVySGVpZ2h0KCk6IG51bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTogbnVtYmVyKTog
SlF1ZXJ5O1xuXG4gICAgaW5uZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJXaWR0aCh2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVtYmVyOyB0b3A6
IG51bWJlcjsgfTtcbiAgICBvZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVyeTtcbiAgICBv
ZmZzZXQoZnVuYzogKGluZGV4OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBv
dXRlckhlaWdodCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpRdWVy
eTtcblxuICAgIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4g
ICAgb3V0ZXJXaWR0aCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpR
dWVyeTtcblxuICAgIHBvc2l0aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgfTtc
blxuICAgIHNjcm9sbExlZnQoKTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFsdWU6IG51bWJl
cik6IEpRdWVyeTtcblxuICAgIHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Nyb2xsVG9wKHZh
bHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4gICAgd2lkdGgo
dmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5
O1xuICAgIHdpZHRoKGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLy8gRGF0YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAg
ICBkYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgZGF0YShr
ZXk/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHJlbW92ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVyeTtcblxuICAg
IC8vIERlZmVycmVkXG4gICAgcHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBhbnkpOiBKUXVl
cnlQcm9taXNlPGFueT47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVz
OiBhbnksIGR1cmF0aW9uPzogYW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAg
IGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5n
LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczog
YW55LCBvcHRpb25zOiB7IGR1cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7IGNvbXBsZXRl
PzogRnVuY3Rpb247IHN0ZXA/OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBzcGVjaWFsRWFz
aW5nPzogYW55OyB9KTogSlF1ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51bWJlciwgcXVl
dWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBj
YWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGVhc2lu
Zz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlT3V0KGR1cmF0
aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0KGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
ZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUb2dnbGUoZHVy
YXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUb2dnbGUoZHVy
YXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5c
biAgICBmaW5pc2goKTogSlF1ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3Ry
aW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRpb24/OiBhbnks
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBhbnksIGVhc2lu
Zz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZURvd24oZHVy
YXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlRG93bihkdXJh
dGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxu
ICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
biAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFyUXVldWU/OiBi
b29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3AocXVldWU/OiBh
bnksIGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xu
XG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAg
ICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkp
OiBKUXVlcnk7XG4gICAgdG9nZ2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAg
ICAvLyBFdmVudHNcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE/OiBhbnks
IGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnksIHByZXZlbnRC
dWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgcHJl
dmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50czogYW55W10p
OiBKUXVlcnk7XG5cbiAgICBibHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFueSwgaGFuZGxl
cj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/OiBhbnksIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgY2xp
Y2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlj
a1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGljayhldmVudERh
dGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRibGNsaWNrXCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIGRibGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
ZGJsY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2VsZWN0b3I6IGFu
eSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwi
Zm9jdXNcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgZm9jdXMoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1
cyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgZm9jdXNvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBm
b2N1c291dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCB0d28g
aGFuZGxlcnMgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhl
IG1vdXNlIHBvaW50ZXIgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91
c2UgcG9pbnRlciBlbnRlcnMgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXJPdXQg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVhdmVzIHRoZSBl
bGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhIHNpbmds
ZSBoYW5kbGVyIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRo
ZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
bW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAg
IGhvdmVyKGhhbmRsZXJJbk91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlkb3duXCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5ZG93blwiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXlkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIGtleWRvd25cIlwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBr
ZXlkb3duKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwia2V5cHJlc3NcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXBy
ZXNzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0
aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5c
biAgICAgKi9cbiAgICBrZXl1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5n
IGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBs
b2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9h
ZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRvd25cIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91
c2Vkb3duKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1v
dXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwibW91c2VlbnRlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAg
bW91c2VlbnRlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3Vz
ZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNl
bGVhdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJl
ZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVs
ZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBPYmplY3QsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVcIiBldmVudCBv
biBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
bW92ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vt
b3ZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwibW91c2VvdXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNl
b3V0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1v
dXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBtb3VzZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQu
XG4gICAgICovXG4gICAgbW91c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92ZXJc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoZXZlbnREYXRh
OiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZXVw
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IG1vdXNldXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZXVwKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBh
biBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwg
bmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlk
b3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9y
IEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQg
dG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVu
dChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50
czogc3RyaW5nLCBzZWxlY3Rvcj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUg
YW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1v
cmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBv
ciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5c
Iiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVu
Y3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lh
bCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgQW4gb2JqZWN0IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9y
IG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2Vz
LCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJldmlvdXNseSBh
dHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVj
dG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigp
IHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6
IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUg
b3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5k
IG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBs
dWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQg
YXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFs
c2UuIFJlc3QgcGFyYW1ldGVyIGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRlcnMgcGFzc2Vk
IHRvIGpRdWVyeS50cmlnZ2VyKCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgb24g
dGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0aW9uYWwgKD8g
c3ludGF4KS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Ig
b25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVz
IGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24u
bXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8g
ZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmln
Z2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2
ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVt
ZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMg
YSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2Uu
XG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9y
IG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBv
cHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVn
aW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVy
IHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRo
ZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlz
IGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2
ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhl
IHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlv
biB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6
IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0
byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFu
IG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRo
ZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRo
ZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8g
ZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxs
IGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRo
ZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBl
bGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5k
bGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb24o
ZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnksIGRhdGE/OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2
ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25j
ZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVz
LCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5n
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhl
IGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1l
bnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5n
IGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBc
ImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBw
YXJhbSBkYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBvbmUoZXZlbnRzOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxl
ciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBl
dmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3Ig
XCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Ig
c3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRz
IHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0
ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2Vs
ZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBh
bGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0
dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0
cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9y
IHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBl
bGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUg
b3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFj
ZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBw
YXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRz
IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUg
c2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJl
ZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRh
dGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFu
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMg
YWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRv
ZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0
b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5k
bGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVk
IGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyByZXByZXNl
bnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBu
YW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0aW9uIHRv
IGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBl
bGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9yIGlzIG51
bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0IHJlYWNo
ZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBw
YXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9jY3Vycy5c
biAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0
b3I/OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxuICAgICAqIFNw
ZWNpZnkgYSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxseSBsb2FkZWQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0
ZXIgdGhlIERPTSBpcyByZWFkeS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVyOiBGdW5jdGlv
bik6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVzaXplXCIgZXZl
bnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJl
c2l6ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInJl
c2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGV2
ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNjcm9s
bFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIg
SmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBzY3JvbGwoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNj
cm9sbChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJzZWxlY3RcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNlbGVjdCgpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNl
bGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgc2VsZWN0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBzZWxlY3QoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwic3VibWl0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdWJt
aXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgc3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIHN1Ym1pdChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VyKGV2ZW50
VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHRy
aWdnZXIoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlckhh
bmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55W10pOiBPYmpl
Y3Q7XG5cbiAgICB1bmJpbmQoZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuYmluZChldmVu
dFR5cGU6IHN0cmluZywgZmxzOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmluZChldnQ6IGFu
eSk6IEpRdWVyeTtcblxuICAgIHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUo
c2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxl
Y3RvcjogYW55LCBldmVudHM6IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKG5hbWVzcGFj
ZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQoZXZlbnREYXRh
PzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxlbWVudDtcbiAg
ICBqcXVlcnk6IHN0cmluZztcblxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVudERhdGE6IGFu
eSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwdXNo
U3RhY2soZWxlbWVudHM6IGFueVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55KTogSlF1ZXJ5
O1xuXG4gICAgLy8gTWFuaXB1bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDogYW55W10pOiBK
UXVlcnk7XG4gICAgYWZ0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIGFwcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBlbmQoZnVuYzog
KGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kVG8o
dGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDogYW55W10pOiBK
UXVlcnk7XG4gICAgYmVmb3JlKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICBjbG9uZSh3aXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRoRGF0YUFuZEV2
ZW50cz86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBlbXB0eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRlcih0YXJnZXQ6
IGFueSk6IEpRdWVyeTtcbiAgICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5c
biAgICBwcmVwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHByZXBlbmQoZnVu
YzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVu
ZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9yPzogYW55KTog
SlF1ZXJ5O1xuXG4gICAgcmVwbGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJl
cGxhY2VXaXRoKGZ1bmM6IGFueSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3RyaW5nO1xuICAg
IHRleHQodGV4dFN0cmluZzogYW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0cmluZzogKGlu
ZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9B
cnJheSgpOiBhbnlbXTtcblxuICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3cmFwKHdyYXBw
aW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4OiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICB3cmFwSW5uZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAg
d3JhcElubmVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBN
aXNjZWxsYW5lb3VzXG4gICAgZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTogRWxlbWVudCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55O1xuXG4gICAg
aW5kZXgoKTogbnVtYmVyO1xuICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBudW1iZXI7XG4g
ICAgaW5kZXgoZWxlbWVudDogYW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAg
IGxlbmd0aDogbnVtYmVyO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6IHN0cmluZ106
IGFueTtcbiAgICBbeDogbnVtYmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBUcmF2ZXJzaW5n
XG4gICAgYWRkKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAg
YWRkKC4uLmVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIGFkZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNoaWxkcmVuKHNl
bGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IEVsZW1lbnQp
OiBKUXVlcnk7XG4gICAgY2xvc2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0
KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczogYW55LCBjb250
ZXh0PzogRWxlbWVudCk6IGFueVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5O1xuXG4gICAg
ZW5kKCk6IEpRdWVyeTtcblxuICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBm
aWx0ZXIoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVuYzogKGluZGV4
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55KTogSlF1ZXJ5
O1xuICAgIGZpbHRlcihvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQoc2VsZWN0b3I6
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBm
aW5kKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5O1xuXG4gICAg
aGFzKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5lZDogRWxlbWVu
dCk6IEpRdWVyeTtcblxuICAgIGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGlz
KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVsZW1lbnQ6IGFu
eSk6IGJvb2xlYW47XG4gICAgaXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4gICAgbGFzdCgp
OiBKUXVlcnk7XG5cbiAgICBtYXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21FbGVtZW50OiBF
bGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgbmV4dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IG5leHRVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIG5leHRVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5
O1xuICAgIG5leHRVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIG5vdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChmdW5jOiAoaW5k
ZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7
XG4gICAgbm90KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFyZW50KCk6IEpR
dWVyeTtcblxuICAgIHBhcmVudChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBh
cmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzVW50aWwoc2Vs
ZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJlbnRzVW50
aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJl
bnRzVW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBw
cmV2KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChzZWxlY3Rvcj86
IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50PzogRWxlbWVudCwg
ZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBKUXVlcnksIGZp
bHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9yPzogc3RyaW5n
KTogSlF1ZXJ5O1xuXG4gICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyKTogSlF1
ZXJ5O1xuXG4gICAgLy8gVXRpbGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcp
OiBhbnlbXTtcbiAgICBxdWV1ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNr
OiBhbnkpOiBKUXVlcnk7XG4gICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVl
cnk7XG59XG5kZWNsYXJlIG1vZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQgPSAkO1xufVxu
ZGVjbGFyZSB2YXIgalF1ZXJ5OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAkOiBKUXVlcnlT
dGF0aWM7XG4vLyBsaWJzL2FuZ3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRlZmluaXRpb25z
IGZvciBBbmd1bGFyIEpTIDEuMFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJqcy5vcmdcbi8v
IERlZmluaXRpb25zIGJ5OiBEaWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20vZGllZ292aWxh
cj5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5p
dGVseVR5cGVkXG5cblxuXG5kZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxhclN0YXRpYztc
blxuLy8gU3VwcG9ydCBmb3IgcGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25cbmludGVyZmFj
ZSBGdW5jdGlvbiB7XG4gICAgJGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuLy8gbmcgbW9kdWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuZGVjbGFyZSBtb2R1bGUgbmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJvdmlkZXJzIGV4
dGVuZCB0aGlzIGludGVyZmFjZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3ZpZGVyIHtcbiAg
ICAgICAgJGdldDogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IEFuZ3VsYXJTdGF0aWNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGlc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJTdGF0aWMge1xu
ICAgICAgICBiaW5kKGNvbnRleHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSk6
IEZ1bmN0aW9uO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBtb2R1bGVzPzog
YW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50
OiBKUXVlcnksIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAg
ICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUlu
amVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3VtZW50LCBtb2R1
bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNvcHkoc291cmNl
OiBhbnksIGRlc3RpbmF0aW9uPzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50OiBJQXVnbWVu
dGVkSlF1ZXJ5U3RhdGljO1xuICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZhbHVlMjogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4uLnNvdXJjZXM6
IGFueVtdKTogYW55O1xuICAgICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRvcjogKHZhbHVl
OiBhbnksIGtleTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4gICAgICAgIGZy
b21Kc29uKGpzb246IHN0cmluZyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJnPzogYW55KTog
YW55O1xuICAgICAgICBpbmplY3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNl
cnZpY2U7XG4gICAgICAgIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlz
RGF0ZSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZhbHVlOiBhbnkp
OiBib29sZWFuO1xuICAgICAgICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzTnVtYmVyKHZh
bHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICAgICAgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzVW5k
ZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uoc3RyOiBzdHJp
bmcpOiBzdHJpbmc7XG4gICAgICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFyIGFwcGxpY2F0
aW9uXG5cdFx0b2ZmaWNpYWwgZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmluZyBhbmd1bGFy
IG1vZHVsZXMuXG5cdFx0c2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFy
Lk1vZHVsZVxuXHRcdCovXG4gICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8qKiBuYW1lIG9m
IHlvdXIgbW9kdWxlIHlvdSB3YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAgbmFtZTogc3Ry
aW5nLFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBlbmRzIG9uICov
XG4gICAgICAgICAgICByZXF1aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAgY29uZmlnRnVu
Y3Rpb24/OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFueVtdKTogdm9p
ZDtcbiAgICAgICAgdG9Kc29uKG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTogc3RyaW5nO1xu
ICAgICAgICB1cHBlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIHZlcnNpb246
IHtcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9yOiBudW1iZXI7
XG4gICAgICAgICAgICBtaW5vcjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBudW1iZXI7XG4g
ICAgICAgICAgICBjb2RlbmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJTW9kdWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywg
YW5pbWF0aW9uRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBhbmltYXRpb24o
bmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xu
ICAgICAgICBhbmltYXRpb24ob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICAvKiog
Y29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdp
c3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xu
XHRcdCAqL1xuICAgICAgICBjb25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAg
ICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRo
b2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxl
IGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRlZEZ1bmN0aW9u
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0KTogSU1vZHVs
ZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZywg
aW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29u
dHJvbGxlcihvYmplY3QgOiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFt
ZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAg
IGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6
IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4g
ICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5v
dGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG9iamVjdDog
T2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFj
dG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBz
dHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAg
IGZpbHRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6
IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3Rv
cjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9iamVjdCk6IElN
b2R1bGU7XG4gICAgICAgIHJ1bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5jdGlvbik6IElN
b2R1bGU7XG4gICAgICAgIHJ1bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9k
dWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0cnVjdG9yOiBG
dW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBpbmxpbmVB
bm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG9i
amVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuXG4gICAgICAgIC8vIFByb3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAg
ICByZXF1aXJlczogc3RyaW5nW107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gQXR0cmlidXRlc1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJQXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVjZXNzYXJ5IHRv
IGJlIGFibGUgdG8gYWNjZXNzIHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBub3QgdmVyeSBl
bGVnYW50XG5cdC8vIGJlY2F1c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28nXSBpbnN0ZWFk
IG9mIGF0dHJzLmZvbyBidXQgSSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxuXHQvLyB0aGlz
IHNob3VsZCByZWFsbHkgYmUgbGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBpdCBjcmVhdGVz
IHRoaXMgcHJvYmxlbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4NTQvMTY1NjU2
XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUgQ1NTIGNsYXNz
IHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRoZVxuICAgICAg
ICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9u
IHdpbGwgYmUgdHJpZ2dlcmVkXG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRkaXRpb24uXG4g
ICAgICAgICRhZGRDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBS
ZW1vdmVzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJh
bWV0ZXIgZnJvbSB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5h
YmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAgICAgICAgLy8g
dGhlIGNsYXNzIHJlbW92YWwuXG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1ZhbDogc3RyaW5n
KTogdm9pZDtcblxuICAgICAgICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRlIHZhbHVlLlxu
ICAgICAgICAkc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAv
LyBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAvLyBUaGUgb2Jz
ZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBuZXh0ICRkaWdl
c3RcbiAgICAgICAgLy8gZm9sbG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2ZXIgaXMgdGhl
biBpbnZva2VkIHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQgdmFsdWUgY2hh
bmdlcy5cbiAgICAgICAgJG9ic2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/OmFueSk9PmFu
eSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50IGF0dHJpYnV0
ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxuICAgICAgICAv
LyB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNrIHRvIGFjdHVh
bCBuYW1lLlxuICAgICAgICAkYXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIEZvcm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVyXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7XG4gICAgICAg
ICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAgICAk
dmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgICAgICAkZXJy
b3I6IGFueTtcbiAgICAgICAgJGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxDb250cm9s
bGVyKTogdm9pZDtcbiAgICAgICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxD
b250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4gICAgICAgICRz
ZXRQcmlzdGluZSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIE5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7XG4gICAgICAg
ICRyZW5kZXIoKTogdm9pZDtcbiAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktl
eTogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8gRG9jdW1lbnRh
dGlvbiBzdGF0ZXMgdmlld1ZhbHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3RyaW5nIGJ1dCBv
dGhlclxuICAgICAgICAvLyB0eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0byB1c2UgdGhl
bS5cbiAgICAgICAgJHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAgICAgICAgJHZp
ZXdWYWx1ZTogYW55O1xuXG4gICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAgICAgICAgJHBh
cnNlcnM6IElNb2RlbFBhcnNlcltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1vZGVsRm9ybWF0
dGVyW107XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47
XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAg
ICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsUGFy
c2VyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElNb2RlbEZvcm1hdHRlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5KCk6IGFueTtc
biAgICAgICAgJGFwcGx5KGV4cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiAo
c2NvcGU6IElTY29wZSkgPT4gYW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNhc3QobmFtZTog
c3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAgICRkZXN0cm95
KCk6IHZvaWQ7XG4gICAgICAgICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVtaXQobmFtZTog
c3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAgICAgLy8gRG9j
dW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9u
IGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcsIGFyZ3M/OiBP
YmplY3QpOiBhbnk7XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9
PiBhbnksIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBz
YXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBvbiBp
dFxuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7XG4gICAgICAg
ICRldmFsQXN5bmMoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IHZvaWQ7XG5c
biAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0aW9uIGNoZWNr
aW5nIHN0cmF0ZWd5XG4gICAgICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJU2NvcGU7XG5c
biAgICAgICAgJG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFuZ3VsYXJFdmVu
dCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaCh3
YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5
PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBz
dHJpbmcsIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJ
U2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAg
ICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3Rl
bmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAg
ICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVu
ZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55
LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2hD
b2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBh
bnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuICAg
ICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+
IGFueSwgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNj
b3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2NvcGU7XG5cbiAg
ICAgICAgJGlkOiBudW1iZXI7XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNcbiAgICAgICAg
JCRpc29sYXRlQmluZGluZ3M6IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJQW5ndWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2NvcGU6IElTY29w
ZTtcbiAgICAgICAgY3VycmVudFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6IHN0cmluZztc
biAgICAgICAgcHJldmVudERlZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZhdWx0UHJldmVu
dGVkOiBib29sZWFuO1xuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50cyB0aGF0IHdl
cmUgJGVtaXQtdGVkXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9uO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRzIFdpbmRvdyB7
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZpY2VcbiAgICAv
LyBUT0RPIHVuZG9jdW1lbnRlZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgc291cmNl
IGNvZGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJyb3dzZXJTZXJ2
aWNlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0U2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGltZW91dFxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZpY2Uge1xuICAg
ICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xl
YW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55
Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50
ZXJ2YWxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRpbnRlcnZhbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJ2
YWxTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyLCBjb3Vu
dD86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAg
ICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAgICAobmFtZTog
c3RyaW5nKTogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJQcm92aWRl
ciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJp
bmcsIGZpbHRlckZhY3Rvcnk6IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAgICBpZDogc3Ry
aW5nO1xuXG4gICAgICAgIC8vIFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICAvLyBD
aGVjayBhbmd1bGFyJ3MgaTE4biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAgTlVNQkVSX0ZP
Uk1BVFM6IElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBEQVRFVElNRV9G
T1JNQVRTOiBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBwbHVyYWxD
YXQ6IChudW06IGFueSkgPT4gc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxl
TnVtYmVyRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBzdHJpbmc7XG4g
ICAgICAgIEdST1VQX1NFUDogc3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxvY2FsZU51bWJl
clBhdHRlcm5EZXNjcmlwdG9yW107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3RyaW5nO1xuICAg
IH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3Ige1xuICAg
ICAgICBtaW5JbnQ6IG51bWJlcjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xuICAgICAgICBt
YXhGcmFjOiBudW1iZXI7XG4gICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAgICBwb3NTdWY6
IHN0cmluZztcbiAgICAgICAgbmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1Zjogc3RyaW5n
O1xuICAgICAgICBnU2l6ZTogbnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJlcjtcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvciB7XG4gICAg
ICAgIE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5nW107XG4gICAg
ICAgIERBWTogc3RyaW5nW107XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtcbiAgICAgICAg
QU1QTVM6IHN0cmluZ1tdO1xuICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAgICAgc2hvcnQ6
IHN0cmluZztcbiAgICAgICAgZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9uZ0RhdGU6IHN0
cmluZztcbiAgICAgICAgbWVkaXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9ydERhdGU6IHN0
cmluZztcbiAgICAgICAgbWVkaXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9ydFRpbWU6IHN0
cmluZztcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2dTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2dcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xuICAgICAgICBk
ZWJ1ZzogSUxvZ0NhbGw7XG4gICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAgICAgaW5mbzog
SUxvZ0NhbGw7XG4gICAgICAgIGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46IElMb2dDYWxs
O1xuICAgIH1cblxuICAgIC8vIFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGludGVyZmFjZSBz
byB3ZSBjYW4gcmVvcGVuIGl0IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sgbW9kdWxlLlxu
ICAgIGludGVyZmFjZSBJTG9nQ2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJzZVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtcbiAgICAgICAg
KGV4cHJlc3Npb246IHN0cmluZyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElDb21waWxlZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4dDogYW55LCBs
b2NhbHM/OiBhbnkpOiBhbnk7XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90IHByb3ZpZGVk
LCB1bmRlZmluZWQgaXMgZ29ubmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb25cbiAg
ICAgICAgLy8gZG9lcyBub3QgY2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9yY2UgYSB2YWx1
ZSBmb3IgY29uc2lzdGVuY3kuIElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50cyB0byB1bmRl
ZmluZSBpdCwgcGFzcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4gICAgICAgIGFz
c2lnbihjb250ZXh0OiBhbnksIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4kbG9jYXRpb25c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uU2VydmljZSB7
XG4gICAgICAgIGFic1VybCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3RyaW5nO1xuICAg
ICAgICBoYXNoKG5ld0hhc2g6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIGhv
c3QoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAgcGF0aChuZXdQ
YXRoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6IG51bWJlcjtc
biAgICAgICAgcHJvdG9jb2woKTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6IElMb2NhdGlv
blNlcnZpY2U7XG4gICAgICAgIHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0
ZXJzTWFwOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVy
OiBzdHJpbmcsIHBhcmFtZXRlclZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAg
ICB1cmwoKTogc3RyaW5nO1xuICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2
aWNlO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBleHRlbmRzIElT
ZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztcbiAgICAgICAg
aGFzaFByZWZpeChwcmVmaXg6IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgICAgICBo
dG1sNU1vZGUoKTogYm9vbGVhbjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB0
aGF0IHBhcmFtZXRlciBpcyBzdHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiB0
ZXN0cyBpdCBhcyBib29sZWFuLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAgICAgIC8vIHNp
bmNlIHRoaXMgaXMgYSB0b2dnbGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6IGJvb2xlYW4p
OiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBEb2N1bWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGRvY3VtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElEb2N1bWVudFNlcnZpY2UgZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gRXhjZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlIHtcbiAg
ICAgICAgKGV4Y2VwdGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVtZW50XG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNlcnZpY2UgZXh0
ZW5kcyBKUXVlcnkge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFFTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRxXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAgICAgIGFsbChw
cm9taXNlczogSVByb21pc2U8YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAgICAgICBkZWZl
cjxUPigpOiBJRGVmZXJyZWQ8VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiBJUHJv
bWlzZTx2b2lkPjtcbiAgICAgICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNlPFQ+O1xuICAg
IH1cblxuICAgIGludGVyZmFjZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48VFJlc3VsdD4o
c3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21pc2U8VFJlc3Vs
dD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/
OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJUHJvbWlzZTxU
UmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxs
YmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAg
dGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IFRSZXN1
bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5vdGlmeUNhbGxi
YWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuXG5cbiAgICAg
ICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJSHR0cFByb21p
c2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4o
b25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNl
PFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBh
bnkpID0+IFRSZXN1bHQpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBmaW5hbGx5PFRS
ZXN1bHQ+KGZpbmFsbHlDYWxsYmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3VsdD47XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29sdmUodmFsdWU/
OiBUKTogdm9pZDtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7XG4gICAgICAg
IG5vdGlmeShzdGF0ZT86YW55KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVByb21pc2U8VD47
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9yU2Nyb2xsU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kYW5jaG9y
U2Nyb2xsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmNob3JTY3Jv
bGxTZXJ2aWNlIHtcbiAgICAgICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElB
bmNob3JTY3JvbGxQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBk
aXNhYmxlQXV0b1Njcm9sbGluZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIENhY2hlRmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJQ2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAgIC8vIExldHMg
bm90IGZvY2UgdGhlIG9wdGlvbnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVtYmVyLiBFdmVu
IHRob3VnaFxuICAgICAgICAvLyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRlcmVkIGJ5IHRo
ZSBpbXBsZW1lbnRhdGlvbiB0b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBtaWdodCBmaW5k
IGl0IHVzZWZ1bCB0byBhc3NvY2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRoZSBjYWNoZSBv
YmplY3QuXG4gICAgICAgIC8vKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNp
dHk6IG51bWJlcjsgfSk6IENhY2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDogc3RyaW5nLCBv
cHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0O1xuXG4gICAg
ICAgIC8vIE1ldGhvZHMgYmVsbG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICBpbmZvKCk6
IGFueTtcbiAgICAgICAgZ2V0IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmplY3Q7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8oKToge1xuICAg
ICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtcblxuICAgICAg
ICAgICAgLy8gTm90IGdhcmFudGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9uLW1hbmRhdG9y
eSBvcHRpb25cbiAgICAgICAgICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAgICAgfTtcbiAg
ICAgICAgcHV0KGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAgICAgIGdldCAo
a2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQ7XG4g
ICAgICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlclxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZpY2Uge1xuICAg
ICAgICAoZWxlbWVudDogc3RyaW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0
aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAg
ICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVu
Y3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xu
ICAgICAgICAoZWxlbWVudDogSlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1
bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNl
UHJvdmlkZXIge1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0
b3J5OiBGdW5jdGlvbik6IElDb21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8gVW5kb2N1bWVu
dGVkLCBidXQgaXQgaXMgdGhlcmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVjdGl2ZXNNYXA6
IGFueSk6IElDb21waWxlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElUZW1wbGF0
ZUxpbmtpbmdGdW5jdGlvbiB7XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5vdCBmb3JjZSBj
bG9uZUF0dGFjaEZuJ3Mgc2lnbmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3BlLCBjbG9uZUF0
dGFjaEZuPzogKGNsb25lZEVsZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3BlKSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29udHJv
bGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGNvbnRyb2xsZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJQ29udHJvbGxlclNlcnZpY2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRh
dGlvbiBkb2Vzbid0IHN0YXRlIHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAgICAgICAgKGNv
bnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAg
ICAgKGNvbnRyb2xsZXJOYW1lOiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlk
ZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGRlcGVu
ZGVuY3lBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElIdHRwU2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0IG1vZXRob2Qg
YW5kIHVybCBtdXN0IGJlIHByb3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElSZXF1ZXN0Q29u
ZmlnKTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJpbmcsIFJlcXVl
c3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVsZXRlICh1cmw6
IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAg
ICBoZWFkKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIGpzb25wKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0
dHBQcm9taXNlPGFueT47XG4gICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVx
dWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwdXQodXJsOiBz
dHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAgLy8gRm9yIGRl
YnVnZ2luZywgQlVUIGl0IGlzIGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxuICAgICAgICBw
ZW5kaW5nUmVxdWVzdHM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMganVzdCBmb3Ig
aGludGluZy5cbiAgICAvLyBTb21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgZGVw
ZW5kaW5nIG9uIHRoZSByZXF1ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kaHR0cCNVc2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNcbiAgICBpbnRl
cmZhY2UgSVJlcXVlc3RDb25maWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztcbiAgICAgICAg
dXJsOiBzdHJpbmc7XG4gICAgICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAvLyBYWFggaXQg
aGFzIGl0J3Mgb3duIHN0cnVjdHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVmaW5lIGl0IGlu
IHRoZSBmdXR1cmVcbiAgICAgICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBjYWNoZT86IGFu
eTtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAgICAvLyBUaGVz
ZSBhY2NlcHQgbXVsdGlwbGUgdHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFzIGFueVxuICAg
ICAgICBkYXRhPzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55O1xuICAgICAg
ICB0cmFuc2Zvcm1SZXNwb25zZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFueTsgLy8gbnVt
YmVyIHwgcHJvbWlzZVxuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2VDYWxsYmFj
azxUPiB7XG4gICAgICAgIChkYXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVyczogKGhlYWRl
ck5hbWU6IHN0cmluZykgPT4gc3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmlnKTogdm9pZDtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4ge1xuICAg
ICAgICBkYXRhPzogVDtcbiAgICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAgICBoZWFkZXJz
PzogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25maWc/OiBJUmVx
dWVzdENvbmZpZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlPFQ+IGV4dGVu
ZHMgSVByb21pc2U8VD4ge1xuICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0cFByb21pc2VD
YWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2FsbGJhY2s6IElI
dHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAgICB0aGVuPFRS
ZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0Fy
ZzxUPikgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNl
Q2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVu
PFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFj
a0FyZzxUPikgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6
IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0Pjtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJv
dmlkZXIge1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAgICAgIGludGVy
Y2VwdG9yczogYW55W107XG4gICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2VuZFNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBCYWNrZW5k
XG4gICAgLy8gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgZGlyZWN0
bHkuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwQmFja2VuZFNl
cnZpY2Uge1xuICAgICAgICAvLyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sgc2lnbmF0dXJl
IGluIHRoZSBmdXR1cmVcbiAgICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgcG9z
dD86IGFueSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGltZW91dD86IG51
bWJlciwgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92aWRlclxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVTZXJ2aWNlIHtc
biAgICAgICAgKHRleHQ6IHN0cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9vbGVhbik6IElJ
bnRlcnBvbGF0aW9uRnVuY3Rpb247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAg
ICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVy
cG9sYXRpb25GdW5jdGlvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJpbmc7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQ
cm92aWRlciB7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRT
eW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgICAgICBlbmRT
eW1ib2woKTogc3RyaW5nO1xuICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRl
cnBvbGF0ZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IFRlbXBsYXRlQ2FjaGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiR0ZW1wbGF0ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElUZW1wbGF0ZUNhY2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVjdCB7fVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4dGVuZHMgSVNj
b3BlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cblx0aW50ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRUcnVzdGVkKHR5
cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZENzcyh2
YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0Z2V0VHJ1c3RlZEpzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFJlc291cmNl
VXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTogYW55KTogYW55
O1xuXHRcdHBhcnNlKHR5cGU6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6
IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJlc3Npb246IHN0
cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0h0
bWwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFu
eTtcblx0XHRwYXJzZUFzSnMoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9j
YWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVzc2lvbjogc3Ry
aW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzVXJs
KGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7
XG5cdFx0dHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RB
c0h0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFueSk6IGFueTtc
blx0XHR0cnVzdEFzUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzVXJs
KHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5cdH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2aWNlIHtcbiAg
ICAgICAgZ2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xu
ICAgICAgICB0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAg
dmFsdWVPZih2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gU0NFRGVsZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2
aWNlUHJvdmlkZXIge1xuICAgICAgICByZXNvdXJjZVVybEJsb2NrbGlzdChibG9ja2xpc3Q6IGFu
eVtdKTogdm9pZDtcbiAgICAgICAgcmVzb3VyY2VVcmxBbGxvd2xpc3QoYWxsb3dsaXN0OiBhbnlb
XSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRGlyZWN0
aXZlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxl
UHJvdmlkZXIjZGlyZWN0aXZlXG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
Z3VpZGUvZGlyZWN0aXZlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpbnRlcmZhY2Ug
SURpcmVjdGl2ZXtcbiAgICAgICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVtcGxhdGVFbGVt
ZW50OiBhbnksXG4gICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxu
ICAgICAgICAgICAgdHJhbnNjbHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlua2luZ0ZuOiBG
dW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIGNvbnRyb2xs
ZXI/OiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAgICAgbGluaz86
XG4gICAgICAgICAgICAoc2NvcGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3RhbmNlRWxlbWVu
dDogYW55LFxuICAgICAgICAgICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAg
ICAgICAgICAgIGNvbnRyb2xsZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lkO1xuICAgICAg
ICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAgICAgICAgcmVw
bGFjZT86IGJvb2xlYW47XG4gICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAgIHJlc3RyaWN0
Pzogc3RyaW5nO1xuICAgICAgICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGU/OiBhbnk7
XG4gICAgICAgIHRlbXBsYXRlVXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86IGJvb2xlYW47
XG4gICAgICAgIHRyYW5zY2x1ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gYW5ndWxhci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5nIGFuZ3VsYXIu
ZWxlbWVudCwgYW5ndWxhciByZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAvLyBhdWdtZW50
ZWQgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAgIC8vIHNlZTog
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0aWMgZXh0ZW5k
cyBKUXVlcnlTdGF0aWMge1xuICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFu
eSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50KTogSUF1Z21l
bnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAg
ICAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAg
ICAob2JqZWN0OiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZnVuYzogRnVu
Y3Rpb24pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtdKTogSUF1Z21l
bnRlZEpRdWVyeTtcbiAgICAgICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAgICAgICAvLyBU
T0RPOiBldmVudHMsIGhvdyB0byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lcblxuICAgICAg
ICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5k
KGVsZW1lbnQ6IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQob2JqOiBKUXVl
cnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5n
KTogYW55O1xuICAgICAgICBpbmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3BlKCk6IElTY29w
ZTtcblxuICAgICAgICBpbmhlcml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1
ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0p
OiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG5c
biAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8gbW9kdWxlIChh
bmd1bGFyLmpzKVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBtb2R1bGUgYXV0
byB7XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0b3JTZXJ2aWNl
XG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRpbmpl
Y3RvclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2UgSUluamVjdG9y
U2VydmljZSB7XG4gICAgICAgICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBzdHJpbmdbXTtc
biAgICAgICAgICAgIGFubm90YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IHN0
cmluZ1tdO1xuICAgICAgICAgICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICAg
ICBpbnN0YW50aWF0ZSh0eXBlQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBh
bnk7XG4gICAgICAgICAgICBpbnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTog
YW55O1xuICAgICAgICAgICAgaW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0PzogYW55LCBs
b2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgICAgICAvLyBQcm92aWRlU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvQVVUTy4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
ICAgICBpbnRlcmZhY2UgSVByb3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8vIERvY3VtZW50
YXRpb24gc2F5cyBpdCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBidXQgYWN0dWFs
XG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcu
XG4gICAgICAgICAgICAvLyBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7
XG4gICAgICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xu
XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6IEZ1bmN0aW9u
KTogdm9pZDtcbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcklu
bGluZTogYW55W10pOiB2b2lkO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNl
cnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAg
ICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjog
YW55W10pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTog
c3RyaW5nLCBwcm92aWRlcjogbmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2aWNlUHJvdmlk
ZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNv
bnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBz
ZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQ
cm92aWRlcjtcbiAgICAgICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IG5n
LklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1vZGVscy9Ub2Rv
SXRlbS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGV4cG9y
dCBjbGFzcyBUb2RvSXRlbSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgICAgcHVi
bGljIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVkOiBib29sZWFu
XG4gICAgICAgICAgICApIHsgfVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TY29wZS50
c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2NvcGUgZXh0ZW5k
cyBuZy5JU2NvcGUge1xuXHRcdHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1RvZG86IHN0cmlu
Zztcblx0XHRlZGl0ZWRUb2RvOiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86IFRvZG9JdGVt
O1xuXHRcdHJlbWFpbmluZ0NvdW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBudW1iZXI7XG5c
dFx0YWxsQ2hlY2tlZDogYm9vbGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtcblx0XHRzdGF0
dXNGaWx0ZXI6IHsgY29tcGxldGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9uOiBuZy5JTG9j
YXRpb25TZXJ2aWNlO1xuXHRcdHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50ZXJmYWNlcy9J
VG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9k
b1N0b3JhZ2Uge1xuXHRcdGdldCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9kb3M6IFRvZG9J
dGVtW10pO1xuXHR9XG59Ly8gZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9kdWxlIHRvZG9z
IHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBwbGFjZXMg
Zm9jdXMgb24gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBleHByZXNzaW9u
IGl0IGJpbmRzIHRvIGV2YWx1YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9u
IHRvZG9Gb2N1cygkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURpcmVjdGl2ZSB7
XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDog
SlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3YXRjaChhdHRy
aWJ1dGVzLnRvZG9Gb2N1cywgbmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3dmFsKSB7XG5c
dFx0XHRcdFx0XHQkdGltZW91dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAsIGZhbHNlKTtc
blx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHR0b2Rv
Rm9jdXMuJGluamVjdCA9IFsnJHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMvVG9kb0JsdXIu
dHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAg
KiBEaXJlY3RpdmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhlIGVsZW1lbnQg
aXQgaXMgYXBwbGllZCB0byBsb3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rp
b24gdG9kb0JsdXIoKTogbmcuSURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAg
ICAgICBsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRl
czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVyJywgKCkgPT4g
eyAkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAgICAgICAgICAg
ICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2JsdXInKTsg
fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGlyZWN0aXZlcy9U
b2RvRXNjYXBlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHRjb25z
dCBFU0NBUEVfS0VZID0gMjc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IGNhbmNlbHMg
ZWRpdGluZyBhIHRvZG8gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5cblx0ICovXG5c
dGV4cG9ydCBmdW5jdGlvbiB0b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVy
biB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0
cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93bicsIChldmVu
dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVfS0VZKSB7XG5c
dFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7XG5cdFx0XHRc
dFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+
IHsgZWxlbWVudC51bmJpbmQoJ2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxu
fVxuLy8gc2VydmljZXMvVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNl
IHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNpc3RzIGFuZCBy
ZXRyaWV2ZXMgVE9ET3MgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAgZXhwb3J0IGNs
YXNzIFRvZG9TdG9yYWdlIGltcGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAgICAgICBTVE9S
QUdFX0lEID0gJ3RvZG9zLWFuZ3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAgICBnZXQgKCk6
IFRvZG9JdGVtW10ge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdl
LmdldEl0ZW0odGhpcy5TVE9SQUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxuXG4gICAgICAg
IHB1dCh0b2RvczogVG9kb0l0ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0
ZW0odGhpcy5TVE9SQUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAgICAgICB9XG4g
ICAgfVxufS8vIGNvbnRyb2xsZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1
c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBmb3IgdGhlIGFw
cC4gVGhlIGNvbnRyb2xsZXI6XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0cyB0aGUgbW9k
ZWwgdmlhIHRoZSB0b2RvU3RvcmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0aGUgbW9kZWwg
dG8gdGhlIHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQgKi9cblx0ZXhw
b3J0IGNsYXNzIFRvZG9DdHJsIHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9JdGVtW107XG5c
blx0XHQvLyAkaW5qZWN0IGFubm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMgJGluamVjdG9y
IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVjdGVkIGludG8g
Y29uc3RydWN0b3Jcblx0XHQvLyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9zZSB0byB0aGUg
Y29uc3RydWN0b3IsIGJlY2F1c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBpbiBjb3VudCBh
bmQgdHlwZS5cblx0XHQvLyBTZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaVxu
XHRcdHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxuXHRcdFx0JyRs
b2NhdGlvbicsXG5cdFx0XHQndG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZpbHRlcidcblx0
XHRdO1xuXG5cdFx0Ly8gZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5ndWxhckpTICRp
bmplY3RvclxuXHRcdC8vIGNvbnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQgaW4gQXBwbGlj
YXRpb24udHMgYW5kIHNwZWNpZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmlidXRlIGluIGlu
ZGV4Lmh0bWxcblx0XHRjb25zdHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3BlOiBJVG9kb1Nj
b3BlLFxuXHRcdFx0cHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXG5cdFx0
XHRwcml2YXRlIHRvZG9TdG9yYWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2YXRlIGZpbHRl
ckZpbHRlclxuXHRcdCkge1xuXHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2RvcyA9IHRvZG9T
dG9yYWdlLmdldCgpO1xuXG5cdFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdFx0JHNjb3Bl
LmVkaXRlZFRvZG8gPSBudWxsO1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3IgJ3ZpZXcgbW9k
ZWwnLiBXZSdyZSBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHNj
b3BlXG5cdFx0XHQvLyBmb3IgaXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIHZpZXcg
LyBIVE1MXG5cdFx0XHQkc2NvcGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRjaGluZyBmb3Ig
ZXZlbnRzL2NoYW5nZXMgaW4gc2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmlldy91c2VyIGlu
cHV0XG5cdFx0XHQvLyBpZiB5b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50IHdpdGggbGlm
ZXRpbWUgbG9uZ2VyIHRoYW4gdGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91IHVuc3Vic2Ny
aWJlLlxuXHRcdFx0JHNjb3BlLiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9uVG9kb3MoKSwg
dHJ1ZSk7XG5cdFx0XHQkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBwYXRoID0+IHRo
aXMub25QYXRoKHBhdGgpKVxuXG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9PT0gJycpICRs
b2NhdGlvbi5wYXRoKCcvJyk7XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9jYXRpb247XG5c
dFx0fVxuXG5cdFx0b25QYXRoKHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4kc2NvcGUuc3Rh
dHVzRmlsdGVyID0gKHBhdGggPT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDog
ZmFsc2UgfSA6IChwYXRoID09PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6
IHRydWUgfSA6IHt9O1xuXHRcdH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29w
ZS5yZW1haW5pbmdDb3VudCA9IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3MsIHsgY29tcGxl
dGVkOiBmYWxzZSB9KS5sZW5ndGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291bnQgPSB0aGlz
LnRvZG9zLmxlbmd0aCAtIHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRcdFx0dGhpcy4k
c2NvcGUuYWxsQ2hlY2tlZCA9ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxuXHRcdFx0dGhp
cy50b2RvU3RvcmFnZS5wdXQodGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRkVG9kbygpIHtc
blx0XHRcdHZhciBuZXdUb2RvIDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9kby50cmltKCk7
XG5cdFx0XHRpZiAoIW5ld1RvZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1c
blxuXHRcdFx0dGhpcy50b2Rvcy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBmYWxzZSkpO1xu
XHRcdFx0dGhpcy4kc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVkaXRUb2RvKHRv
ZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IHRvZG9J
dGVtO1xuXG5cdFx0XHQvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNlIGVkaXRpbmcg
aXMgY2FuY2VsbGVkLlxuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gYW5ndWxhci5l
eHRlbmQoe30sIHRvZG9JdGVtKTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0b2RvSXRlbTog
VG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVt
KV0gPSB0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRl
ZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRvZG9JdGVtKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRoaXMuJHNjb3Bl
Lm9yaWdpbmFsVG9kbyA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2ZXJ0ZWQpIHtc
blx0XHRcdFx0Ly8gVG9kbyBlZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZlLlxuXHRcdFx0
XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1c
blx0XHRcdHRvZG9JdGVtLnRpdGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xuXHRcdFx0aWYg
KCF0b2RvSXRlbS50aXRsZSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9kb0l0ZW0pO1xu
XHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5c
dFx0XHR0aGlzLnRvZG9zLnNwbGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pLCAxKTtc
blx0XHR9XG5cblx0XHRjbGVhckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnRvZG9z
ID0gdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0b2RvSXRlbS5j
b21wbGV0ZWQpO1xuXHRcdH1cblxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29sZWFuKSB7XG5c
dFx0XHR0aGlzLnRvZG9zLmZvckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5jb21wbGV0ZWQg
PSBjb21wbGV0ZWQ7IH0pO1xuXHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlvbi50c1xuXG4v
KipcbiAqIFRoZSBtYWluIFRvZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlwZSB7YW5ndWxh
ci5Nb2R1bGV9XG4gKi9cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAg
dmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAgICAgICAgICAg
LmNvbnRyb2xsZXIoJ3RvZG9DdHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAuZGlyZWN0aXZl
KCd0b2RvQmx1cicsIHRvZG9CbHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0ZvY3Vz
JywgdG9kb0ZvY3VzKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2FwZScsIHRvZG9F
c2NhcGUpXG4gICAgICAgICAgICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2RvU3RvcmFnZSk7
XG59XG4iCiAKIC8qKiovIH0pLAogLyogNDE1ICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBl
eHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuOC4z
XG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAwOS0yMDE1IEpl
cmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMg
JiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5lIHNl
dHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVj
dCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUgc2VydmVyLlxu
ICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhl
IGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3QuXztcblxuICAv
LyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxu
ICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJv
dG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRlIHF1
aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlw
ZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gsXG4gICAg
c2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJpbmcgICAgICAg
ICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90by5o
YXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rp
b24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVk
IGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5LmlzQXJyYXksXG4g
ICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQmluZCAgICAg
ICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0gT2JqZWN0LmNy
ZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90
b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0
ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93
LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSBy
ZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9i
aik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVu
ZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29t
cGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4gIC8v
IHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYgKHR5cGVvZiBl
eHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5k
ZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBv
cnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290
Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS44
LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQg
KGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxs
YmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8g
ZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFy
Z0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gICAg
c3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAgICBjYXNlIDE6
IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRl
eHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbih2YWx1
ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgb3Ro
ZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRl
eCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVl
LCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiByZXR1cm4gZnVu
Y3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICBy
ZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxl
Y3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4g
IC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0
IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJl
dHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVudGl0eSwgYW4g
YXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNj
ZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xu
ICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBpZiAoXy5pc0Z1
bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50
KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIodmFsdWUpO1xu
ICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRlZSA9IGZ1bmN0
aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250ZXh0LCBJbmZp
bml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFz
c2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rpb24oa2V5c0Z1
bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2
YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9i
aiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8
IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4
XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgICAgbCA9
IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAg
ICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZpbmVkT25seSB8
fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9
XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQW4gaW50
ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZy
b20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUpIHtcbiAg
ICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVD
cmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9yLnByb3RvdHlw
ZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90
b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIHByb3BlcnR5
ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0
dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAv
LyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNv
bGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9i
amVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZm
L2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlP
UyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0
aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCdsZW5ndGgnKTtc
biAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHZhciBsZW5n
dGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBsZW5ndGggPT0g
J251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAg
fTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2Eg
YGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5
LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdl
cmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQp
O1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAg
IGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAg
ICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBr
ZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtrZXlz
W2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAg
fTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRv
IGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJh
dGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4g
ICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAg
bGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShs
ZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4Kysp
IHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4g
ICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtl
eSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ3JlYXRl
IGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9u
IGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3IgZnVuY3Rpb24g
YXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1bmN0aW9uIHdp
bGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVyYXRvcihvYmos
IGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBmb3IgKDsgaW5k
ZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBj
dXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAgIG1lbW8gPSBp
dGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9
XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBp
dGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0
ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikg
JiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgs
XG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICAvLyBE
ZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tleXMgPyBrZXlz
W2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAgfVxuICAgICAg
cmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgp
O1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1
bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAu
XG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4g
IC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBh
cyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJlZHVjZSgtMSk7
XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0
LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9uKG9i
aiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAoaXNBcnJheUxp
a2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNhdGUsIGNvbnRl
eHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBwcmVkaWNhdGUs
IGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5ICE9PSAtMSkg
cmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRo
YXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8uZmls
dGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAg
IHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0
KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAg
IGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtc
biAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRo
ZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9IGZ1
bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9i
aiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIERldGVy
bWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0LlxuICAv
LyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIHBy
ZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4
dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAg
ICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBr
ZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJy
ZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1
cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQg
aW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYW55
YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkg
e1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMg
PSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtl
eXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0
aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0g
OiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5
LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4g
IC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRl
bSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5kIGBpbmNsdWRl
YC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbihvYmos
IGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9i
aiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicg
fHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihvYmosIGl0ZW0s
IGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJn
dW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZva2UgPSBmdW5j
dGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMs
IDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAgICByZXR1cm4g
Xy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBt
ZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IGZ1bmMg
OiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5p
ZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHBy
b3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gXy5t
YXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNp
b24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5IG9iamVj
dHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy53aGVy
ZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm1h
dGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29t
bW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0XG4gIC8vIGNv
bnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdoZXJlID0gZnVu
Y3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1hdGNoZXIoYXR0
cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVu
dC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1J
bmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBu
dWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2Jq
IDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVu
Z3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAg
IGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAg
ICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0
KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAg
ICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSAtSW5maW5p
dHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtc
biAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7
XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5p
bXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1pbiA9IGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gSW5maW5p
dHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4g
ICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlz
QXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9
IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1
ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVz
dWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRl
cmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlv
bih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1
ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwg
Y29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAg
ICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAg
ICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAg
Ly8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVc
biAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtc
biAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4g
ICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0gQXJyYXkobGVu
Z3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVuZ3RoOyBpbmRl
eCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAgaWYgKHJhbmQg
IT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAgICAgIHNodWZm
bGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9
O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uLlxu
ICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBl
bGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8g
d29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHtc
biAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJyYXlMaWtlKG9i
aikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFuZG9tKG9iai5s
ZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5zbGljZSgwLCBN
YXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5
IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0
aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVl
LCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxu
ICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwg
aW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQp
IHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3Jp
dGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0g
dm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0
dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtc
biAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNl
ZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBm
dW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0
ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRl
eCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAg
ICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1
cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1
ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0
byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAg
Xy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYg
KF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0
W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1
ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdo
ZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgXy5p
bmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0
W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmpl
Y3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBh
IHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5z
IHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3Vs
dCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXld
Kys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEg
cmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBm
dW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJy
YXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2Jq
KSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8udmFsdWVzKG9i
aik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2Jq
ZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJl
dHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IF8ua2V5
cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28g
YXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVuXG4gIC8vIHBy
ZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlzZnkgdGhlIHBy
ZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIHBh
c3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXks
IG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFzcyA6IGZhaWwp
LnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07XG4gIH07XG5c
biAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0
aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0
aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBh
bmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdp
dGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5
LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAg
IGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5p
bml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2
ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2Vm
dWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1
cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3Qg
Ti5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJu
IHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51
bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVu
dCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8v
IHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFy
ZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09
IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICByZXR1
cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH07XG5c
biAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5
LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBv
biB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVyblxuICAv
LyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8u
ZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxs
KGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAgLy8gVHJpbSBv
dXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3QgPSBmdW5jdGlv
bihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7XG4gIH07
XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5g
IGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBzdHJp
Y3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7XG4gICAgZm9y
ICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChp
c0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0FyZ3VtZW50cyh2
YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFy
Z3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZsYXR0ZW4odmFs
dWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0gdmFsdWUubGVu
Z3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hpbGUgKGogPCBs
ZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgICAgfVxu
ICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1
ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICAvLyBGbGF0
dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IganVz
dCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7XG4g
ICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtcblxuICAvLyBS
ZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNw
ZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICBy
ZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9
O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4g
SWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUg
b3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5p
cXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAg
ICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAg
ICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRl
cmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAg
IHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChh
cnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4g
ICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkg
OiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkgfHwgc2VlbiAh
PT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9IGNvbXB1dGVk
O1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMo
c2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAg
ICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIV8u
Y29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xu
ICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFByb2R1Y2Ug
YW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBm
cm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1bmN0
aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUp
KTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRl
bSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8uaW50
ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAg
dmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBp
dGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250
aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAg
ICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1c
biAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4g
ICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdl
ZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhl
IGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4g
IF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBmbGF0dGVu
KGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBm
dW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUpO1xu
ICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEg
c2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9n
ZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56aXAoYXJndW1l
bnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBhY2NlcHRzIGFu
IGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBv
biBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIg
bGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoIHx8IDA7XG4g
ICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gXy5wbHVj
ayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8v
IENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkg
b2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2Yg
dGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3Jy
ZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtc
biAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExl
bmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAg
ICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAg
IHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0
aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVh
dGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXks
IHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBj
b250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFy
IGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49
IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGlj
YXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxu
ICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBp
bmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5m
aW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5maW5kTGFzdElu
ZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBh
cmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hc
biAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRl
ci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXks
IG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBj
b250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAgIHZhciBsb3cg
PSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xu
ICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBpZiAo
aXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0g
bWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5j
dGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0aW9uc1xuICBm
dW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4
KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBp
ID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09
ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgICBpID0gaWR4
ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Ug
e1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5n
dGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0
ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFy
cmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAt
MTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHBy
ZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05hTik7XG4gICAg
ICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAo
aWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7
IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBp
ZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVy
biB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBh
cnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJh
eS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIs
IHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2gu
XG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRl
ZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRM
YXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBh
biBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRo
b24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlv
bl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5c
biAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3Ag
PT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4g
ICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgo
TWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFy
cmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsr
LCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4g
ICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNc
biAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4
ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0
aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJvdW5kID0gZnVu
Y3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJn
cykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0
dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNl
Q3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVu
Yy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpKSByZXR1cm4g
cmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9u
IGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRz
LFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRp
dmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVuY3Rp
b24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMuYmluZCA9PT0g
bmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2UuY2FsbChhcmd1
bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVF
cnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgdmFyIGFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7
XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBh
cmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAgIHJldHVybiBi
b3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGlu
ZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUt
ZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBfIGFj
dHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFy
Z3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7
XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIg
Ym91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJv
dW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3Vu
ZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4g
ICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1
c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVu
YywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xu
ICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0
IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0
byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8g
ZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSBmdW5jdGlv
bihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwga2V5O1xuICAg
IGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2Vk
IGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5
XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBNZW1vaXplIGFu
IGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBfLm1lbW9pemUg
PSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtl
eSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZhciBhZGRyZXNz
ID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrZXkpO1xu
ICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAg
IH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xu
XG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vj
b25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVk
LlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBhcmdzID0gc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7
XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAg
fTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIg
dGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IF8u
cGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQs
IHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8g
ZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1
bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29p
bmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdk
IGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3Nc
biAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJh
aWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBv
cHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgdGltZW91
dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlv
bnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0g
b3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAgdGltZW91dCA9
IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAg
aWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlmICghcHJldmlv
dXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2
YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0g
dGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAg
fHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAg
IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAg
ICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBs
eShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9
IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09
IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcp
O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52
b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBj
YWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25k
cy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVc
biAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5j
ZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBh
cmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0
aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAgICBp
ZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1l
b3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0
ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBm
dW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91dCkgY29udGV4
dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVy
biBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3Vt
ZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2FsbE5vdyA9IGlt
bWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91dCA9IHNldFRp
bWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAgcmVzdWx0
ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBu
dWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRo
ZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29k
ZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBv
cmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3JhcHBlcikge1xu
ICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAgLy8gUmV0dXJu
cyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgXy5uZWdh
dGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07
XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEg
bGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUg
b2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVuY3Rpb24oKSB7
XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGgg
LSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAg
ICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAg
IHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAg
cmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0
aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLlxuICBf
LmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7
XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhp
cywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRp
bmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xu
ICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVz
ID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAg
ICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1l
bW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJl
IGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91
IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5vbmNlID0gXy5w
YXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0t
LS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVk
IGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1ZyA9
ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2
YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9T
dHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdo
YXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3RO
b25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJh
YmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3Rvcjtc
biAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rv
ci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVj
aWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlmIChfLmhhcyhv
YmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5c
biAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVBy
b3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0g
cHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5w
dXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1l
cyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNN
QVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbihv
YmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRp
dmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAg
Zm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7
XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51
bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmll
dmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAg
dmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtc
biAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVt
UHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2
ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3Ro
ID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tl
eXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMg
dGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0
aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMgYW4gb2JqZWN0
XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIF8ua2V5
cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAgICAgIHJlc3Vs
dHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5ID0ga2V5c1tp
bmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVu
dEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztc
biAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFs
dWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0g
Xy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWly
cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAg
cmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9m
IGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQg
PSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBf
LmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xu
ICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBs
aXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8g
QWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlv
bihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7
XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAg
IH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdpdmVu
IG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxu
ICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBh
IGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1p
biBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2Vi
L0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG4gIF8u
ZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xuXG4gIC8vIFJl
dHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUg
dGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xu
ICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBf
LmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0
aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHBy
ZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxu
ICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3aGl0
ZWxpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3QsIG9pdGVyYXRl
ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0LCBpdGVyYXRl
ZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8u
aXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4g
ICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB9IGVs
c2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpO1xu
ICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0dXJuIGtleSBp
biBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZh
ciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAo
aXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4g
ICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2Jq
ZWN0IHdpdGhvdXQgdGhlIGJsYWNrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21pdCA9IGZ1bmN0
aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJh
dGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgfSBlbHNl
IHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxz
ZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtc
biAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1c
biAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9O1xuXG4gIC8v
IEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVm
YXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZXMg
YW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVjdC5c
biAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2ls
bCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3JlYXRlID0gZnVu
Y3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHBy
b3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAg
ICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkg
ZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBfLmlzQXJyYXko
b2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5cbiAgLy8gSW52
b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxuICAv
LyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBh
IG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGlu
dGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0gZnVuY3Rpb24o
b2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9i
ajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNl
dCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24ob2JqZWN0LCBh
dHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0ga2V5cy5sZW5n
dGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2Jq
ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2Jq
W2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4g
dHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0
aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0
YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBi
dXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxg
IHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255
OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAv
IGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVs
bCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4g
YSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBp
bnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNlb2YgXykgYiA9
IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIg
Y2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0
cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAg
ICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRhdGVzLCBhbmQg
Ym9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBSZWdF
eHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFy
aXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0
cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9i
amVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAv
LyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAnJyAr
IGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8v
IGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9i
amVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAhPT0gK2EpIHJl
dHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZv
cm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/
IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IERhdGVd
JzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBDb2VyY2UgZGF0
ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNv
bXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4g
Tm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnNc
biAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgICByZXR1cm4g
K2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdb
b2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlmICh0eXBlb2Yg
YSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4g
ICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2
YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20gZGlmZmVyZW50
IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIu
Y29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5pc0Z1bmN0aW9u
KGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9y
KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdj
b25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAg
IH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxn
b3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVk
IGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5c
biAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgLy8g
SXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFy
cmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgICBiU3RhY2sg
PSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gICAgd2hp
bGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBp
bnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1ZSBu
ZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJu
IGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2Jq
ZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucHVzaChh
KTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2Jq
ZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8vIENvbXBhcmUg
YXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNz
YXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9PSBiLmxl
bmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywg
aWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkg
e1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ssIGJTdGFjaykp
IHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21w
YXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xuICAgICAgbGVu
Z3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29u
dGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAg
ZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4g
ZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJl
IGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKCEo
Xy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0
dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVj
dCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7
XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZv
cm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxu
ICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9
O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAv
LyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxu
ICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVy
biB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBf
LmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGgg
PT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAv
LyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9
O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBF
Q01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkg
fHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tv
YmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVj
dD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9m
IG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0
JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1
bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwg
aXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdO
dW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFtZSkge1xuICAg
IF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcu
Y2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xuICB9KTtcblxu
ICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMg
KGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBc
IkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4g
ICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaGFzKG9i
aiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAg
aWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4gb2xkIHY4LFxu
ICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAgaWYgKHR5cGVv
ZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnKSB7XG4g
ICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9i
aiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJcyBhIGdpdmVu
IG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlvbihvYmopIHtc
biAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAg
fTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhlIG9ubHkgbnVt
YmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29iajtcbiAgfTtc
blxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xlYW4gPSBmdW5j
dGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwg
dG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07XG5cbiAgLy8g
SXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2
YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtcbiAg
ICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24g
Zm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxu
ICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBf
LmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhh
c093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVuY3Rp
b25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUuanMgaW4g
Km5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xuICAv
LyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBv
YmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9IHByZXZp
b3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBLZWVwIHRoZSBp
ZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBfLmlkZW50
aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLy8g
UHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBV
bmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICBfLm5v
b3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuXG4gIC8vIEdl
bmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZl
biBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJu
IG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1
cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZv
ciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtl
eTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJz
KSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5j
dGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtc
biAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1
bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0
aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4
dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0
ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBp
bnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVu
Y3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1p
bjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1h
dGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5
IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5c
biAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUo
KS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgZXNj
YXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8Jzog
JyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wi
OiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVzY2FwZU1hcCA9
IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQg
dW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgY3Jl
YXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0gZnVuY3Rpb24o
bWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAgLy8gUmVnZXhl
cyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkXG4gICAgdmFy
IHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0
ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdF
eHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0
cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0
ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVz
Y2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBl
cihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7
XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlzIGEgZnVuY3Rp
b24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29udGV4dDsgb3Ro
ZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0
eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHZvaWQgMCA6
IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgIHZh
bHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8g
dmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlx
dWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5c
biAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7
XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291
bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9O1xu
XG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVs
aW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8g
dXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAg
ICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGUgOiAv
PCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xcc1xcU10rPykl
Pi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlm
IHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0
aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRl
ZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWlu
IGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGlu
dG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6
ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHInOiAgICAgJ3In
LFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1
MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxc
XHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKG1hdGNoKSB7
XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4gIC8vIEphdmFT
Y3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50
YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxp
bWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVz
IHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3Ng
IG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0ZSA9
IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0dGlu
Z3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3Mg
PSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8v
IENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVy
bmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2Nh
cGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5v
TWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3Vy
Y2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0
ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5Llxu
ICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4
dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBl
dmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zm
c2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQg
KyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9
IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkp
K1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNl
ICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStc
XG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBc
Iic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8v
IEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0
IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCIn
O1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBk
YXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBz
b3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuXG4gICAgc291
cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAg
ICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwi
ICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkge1xuICAgICAg
dmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18n
LCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xu
ICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRh
KSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxu
ICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBw
cmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZSB8fCAn
b2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7
XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAv
LyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRl
cnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpbnN0
YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBp
bnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gIC8vIElm
IFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVk
IG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9s
ZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rpb25z
LiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2YXIgcmVzdWx0
ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZS5fY2hhaW4g
PyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9t
IGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBmdW5jdGlv
bihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xu
ICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5wcm90b3R5cGVb
bmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07
XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHJl
c3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07
XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBw
ZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBm
dW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVy
c2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1l
KSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVb
bmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAg
ICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3No
aWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9i
alswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxu
ICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAg
Xy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAg
IHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0g
ZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5hcHBseSh0aGlz
Ll93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBFeHRyYWN0cyB0
aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAgXy5wcm90b3R5
cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtc
blxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGlu
IGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJp
bmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlwZS50b0pTT04g
PSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9u
KCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gQU1EIHJl
Z2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBTUQg
bG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2VtYW50aWNzIG9u
IG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9yIEFNRCByZWdp
c3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVyc1xuICAvLyBh
cyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNlIGxpYnJh
cnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGluIGEgdGhpcmQg
cGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQgcmVxdWVzdC4g
VGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAvLyBhbm9ueW1v
dXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC5cbiAgaWYg
KHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmlu
ZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0p
O1xuICB9XG59LmNhbGwodGhpcykpO1xuIgorbW9kdWxlLmV4cG9ydHMgPSAiLy8gICAgIFVuZGVy
c2NvcmUuanMgMS44LjNcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChj
KSAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0
aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkg
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAg
Ly8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2gg
dGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4cG9ydHNgIG9u
IHRoZSBzZXJ2ZXIuXG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRoZSBwcmV2aW91
cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRlcnNjb3JlID0g
cm9vdC5fO1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBw
ZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90
byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxu
ICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRv
IGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9IEFycmF5UHJv
dG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSxcbiAgICB0
b1N0cmluZyAgICAgICAgID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3duUHJvcGVydHkg
ICA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSoq
IG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxuICAv
LyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAgICAgID0gQXJy
YXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5cyxcbiAgICBu
YXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVDcmVhdGUgICAg
ICAgPSBPYmplY3QuY3JlYXRlO1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Ig
c3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5jdGlvbigpe307
XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0
IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiBp
bnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8pKSBy
ZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9O1xuXG4gIC8v
IEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3aXRoXG4gIC8v
IGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClgIEFQSS4gSWYg
d2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0Llxu
ICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBt
b2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRz
ID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVs
c2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8u
VkVSU0lPTiA9ICcxLjguMyc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5z
IGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUg
cGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5k
ZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVu
YywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1
cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtc
biAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBm
dW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMjogcmV0dXJu
IGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRl
eHQsIHZhbHVlLCBvdGhlcik7XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rp
b24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwo
Y29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNl
IDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9u
KSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVl
LCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rp
b24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAg
IH07XG4gIH07XG5cbiAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUg
Y2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVtZW50IGluIGEg
Y29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyXG4gIC8v
IGlkZW50aXR5LCBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwgb3Ig
YSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQs
IGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlkZW50aXR5O1xu
ICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2YWx1ZSwgY29u
dGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIF8ubWF0
Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9O1xuICBfLml0
ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2IodmFsdWUs
IGNvbnRleHQsIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBm
b3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBm
dW5jdGlvbihrZXlzRnVuYywgdW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBmdW5jdGlvbihv
YmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKGxl
bmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3IgKHZhciBpbmRl
eCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBh
cmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNvdXJjZSksXG4g
ICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKCF1
bmRlZmluZWRPbmx5IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tl
eV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtc
blxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IHRo
YXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1bmN0aW9uKHBy
b3RvdHlwZSkge1xuICAgIGlmICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1cm4ge307XG4g
ICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpO1xuICAg
IEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBuZXcgQ3Rvcjtc
biAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxu
ICB2YXIgcHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9
O1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWlu
ZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJy
YXkgb3IgYXMgYW4gb2JqZWN0XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUubW96aWxsYS5v
cmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8vIEF2b2lkcyBh
IHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZhciBNQVhfQVJS
QVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3RoID0gcHJvcGVy
dHkoJ2xlbmd0aCcpO1xuICB2YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xsZWN0aW9uKSB7
XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gdHlw
ZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGggPD0gTUFYX0FS
UkFZX0lOREVYO1xuICB9O1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4gIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFjaGAgaW1wbGVt
ZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVjdHMgaW4gYWRk
aXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFycmF5LWxpa2Vz
IGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVy
YXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNBcnJheUxpa2Uo
b2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0
aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1cbiAg
ICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAgIGZvciAoaSA9
IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRl
cmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICBy
ZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0
aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0
aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVl
LCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhv
YmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgcmVz
dWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxl
bmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRl
eF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRL
ZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtc
blxuICAvLyBDcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVmdCBvciByaWdo
dC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGltaXplZCBpdGVy
YXRvciBmdW5jdGlvbiBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8gaW4gdGhlIG1h
aW4gZnVuY3Rpb24gd2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAgIGZ1bmN0aW9u
IGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpIHtcbiAg
ICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtc
biAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAg
ICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwg
b2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIHJldHVybiBm
dW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBpdGVyYXRlZSA9
IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtleXMgPSAhaXNB
cnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSAoa2V5cyB8
fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0g
MTtcbiAgICAgIC8vIERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25lIGlzIHByb3Zp
ZGVkLlxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAgIG1lbW8gPSBv
Ympba2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBkaXI7XG4g
ICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5cywg
aW5kZXgsIGxlbmd0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVw
IGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAg
Ly8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVS
ZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNl
LCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3Jl
YXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3Nl
cyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0
ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5O1xuICAg
IGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRleChvYmosIHBy
ZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8uZmluZEtleShv
YmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09IHZvaWQgMCAm
JiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0
aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2Vs
ZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBj
b250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVk
aWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwg
bGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRz
LnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8v
IFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4g
IF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1
cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07
XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRy
dXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1
bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJl
ZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8u
a2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIg
Y3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVk
aWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4g
ICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFz
dCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBB
bGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGlj
YXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtc
biAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAg
ICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMg
PyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtl
eV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFs
c2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFp
bnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVz
YCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9
IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJh
eUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRl
eCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRl
eE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1l
dGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBf
Lmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5j
YWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlvbihtZXRob2Qp
O1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgZnVu
YyA9IGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1cm4gZnVuYyA9
PSBudWxsID8gZnVuYyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xu
XG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6
IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xu
ICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29u
dmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0
aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBh
aXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZp
bHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZl
cnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBv
YmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5m
aW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmos
IF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVt
ZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFz
dENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYg
KGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlM
aWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9i
altpXTtcbiAgICAgICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0g
dmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUg
PSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1
ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5k
ZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0
ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJl
c3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAg
ICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBS
ZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbiku
XG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBy
ZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZhbHVl
LCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xu
ICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7
XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCByZXN1bHQpIHtc
biAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxz
ZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFj
aChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9
IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA8IGxh
c3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09PSBJbmZpbml0
eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9
IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3Vs
dDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhlIG1vZGVybiB2
ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1ZmZsZSA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52
YWx1ZXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2YXIgc2h1ZmZs
ZWQgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFuZDsgaW5kZXgg
PCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBpbmRleCk7XG4g
ICAgICBpZiAocmFuZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZmbGVkW3JhbmRd
O1xuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4g
c2h1ZmZsZWQ7XG4gIH07XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBh
IGNvbGxlY3Rpb24uXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBz
aW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50
IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVuY3Rpb24ob2Jq
LCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAgICAgIGlmICgh
aXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpb
Xy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8uc2h1ZmZsZShv
YmopLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0IHRoZSBvYmpl
Y3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG4gIF8u
c29ydEJ5ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2
YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3JpdGVyaWE6IGl0
ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5jdGlv
bihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAgdmFy
IGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlmIChh
ID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwgYiA9
PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAt
IHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5h
bCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG4g
IHZhciBncm91cCA9IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9i
aiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0
ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rp
b24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5k
ZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgICB9
KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBHcm91cHMgdGhl
IG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0
cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUg
Y3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBr
ZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVl
KTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhl
IG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1
dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUg
dW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkp
IHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFu
Y2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3Nc
biAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlv
biB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAo
ZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5
KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8vIFNh
ZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG4g
IF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107XG4g
ICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChp
c0FycmF5TGlrZShvYmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtcbiAgICByZXR1
cm4gXy52YWx1ZXMob2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVt
ZW50cyBpbiBhbiBvYmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChv
YmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmou
bGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0IGEgY29sbGVj
dGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0aXNmeSB0aGUg
Z2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3Qg
c2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKG9iaiwgcHJl
ZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0
KTtcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9iaiwgZnVuY3Rp
b24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBrZXksIG9iaikg
PyBwYXNzIDogZmFpbCkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtwYXNzLCBm
YWlsXTtcbiAgfTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0t
XG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioq
IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFz
ZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dz
IGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0g
ZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVy
biB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xu
ICAgIHJldHVybiBfLmluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xuICB9O1xuXG4g
IC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBF
c3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAq
Km4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1
ZGluZyB0aGUgbGFzdCBOLlxuICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQp
IHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVu
Z3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4gIC8vIEdldCB0
aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRo
ZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0gZnVuY3Rpb24o
YXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7
XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAt
IDFdO1xuICAgIHJldHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAt
IG4pKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRy
eSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4gIC8vIEVzcGVj
aWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdp
bGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5yZXN0
ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0
dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfTtc
blxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIF8uY29t
cGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBfLmlk
ZW50aXR5KTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vy
c2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5wdXQs
IHNoYWxsb3csIHN0cmljdCwgc3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQgPSBbXSwgaWR4
ID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGggPSBnZXRMZW5n
dGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ld
O1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZhbHVlKSB8fCBf
LmlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJlbnQgbGV2ZWwg
b2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxsb3cpIHZhbHVl
ID0gZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFyIGogPSAwLCBs
ZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVuO1xuICAgICAg
ICB3aGlsZSAoaiA8IGxlbikge1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytd
O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgb3V0cHV0
W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9
O1xuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRl
ZmF1bHQpLCBvciBqdXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rpb24oYXJyYXks
IHNoYWxsb3cpIHtcbiAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywgZmFsc2UpO1xu
ICB9O1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3Qg
Y29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBmdW5jdGlvbihh
cnJheSkge1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNhbGwoYXJndW1l
bnRzLCAxKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24g
b2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVlbiBzb3J0ZWQs
IHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuICAvLyBB
bGlhc2VkIGFzIGB1bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0aW9uKGFycmF5
LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNCb29sZWFuKGlz
U29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRlcmF0ZWUgPSBp
c1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpdGVyYXRl
ZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgcmVz
dWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUg
PSBhcnJheVtpXSxcbiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFs
dWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICAgIGlm
ICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICBz
ZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIGlm
ICghXy5jb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2goY29t
cHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAg
fSBlbHNlIGlmICghXy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQu
cHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5c
biAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0
aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICBf
LnVuaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVuKGFyZ3VtZW50
cywgdHJ1ZSwgdHJ1ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250
YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWluIGFy
cmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN1
bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRhaW5zKHJlc3Vs
dCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBhcmdzTGVuZ3Ro
OyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJy
ZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0
ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5c
biAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3
aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIg
cmVzdCA9IGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICByZXR1cm4gXy5m
aWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5jb250YWlucyhy
ZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxl
IGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBh
biBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4g
Xy51bnppcChhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2YgXy56aXAuIFVu
emlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8gZWFjaCBhcnJh
eSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJh
eSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5s
ZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtp
bmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7
XG4gIH07XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBh
IHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3IgdHdvIHBhcmFs
bGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2Zc
biAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxp
c3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2
YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBl
bHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1c
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rp
b24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zXG4g
IGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAgIHJldHVybiBm
dW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVkaWNhdGUgPSBj
YihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChhcnJh
eSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBm
b3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAg
ICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4gaW5k
ZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVy
bnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSBwcmVkaWNh
dGUgdGVzdFxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xu
ICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAg
Ly8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBp
bmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRv
IG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBm
dW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0g
Y2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7
XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChs
b3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAy
KTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAx
OyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8g
R2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2Yg
ZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJlZGljYXRlRmlu
ZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkg
e1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgaWYg
KHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAg
ICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7XG4g
ICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWlu
KGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9
IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0g
c29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0g
aXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAg
ICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBf
LmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAg
fVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYm
IGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0g
aXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9
XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBh
biBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVk
ZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkg
aW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2Ug
YmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoMSwgXy5maW5k
SW5kZXgsIF8uc29ydGVkSW5kZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRlSW5kZXhGaW5k
ZXIoLTEsIF8uZmluZExhc3RJbmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJh
eSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICAvLyB0
aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBbdGhlIFB5dGhv
biBkb2N1bWVudGF0aW9uXShodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25z
Lmh0bWwjcmFuZ2UpLlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtc
biAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAgICAg
IHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAgIHZhciBsZW5n
dGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAg
dmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8
IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBzdGFy
dDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gKGFo
ZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBEZXRlcm1pbmVz
IHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3JcbiAgLy8gb3Ig
YSBub3JtYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4gIHZhciBleGVj
dXRlQm91bmQgPSBmdW5jdGlvbihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxp
bmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5zdGFuY2VvZiBi
b3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB2
YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1
bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlzT2JqZWN0KHJl
c3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5cbiAgLy8gQ3Jl
YXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2As
IGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8gKipFQ01BU2Ny
aXB0IDUqKidzIG5hdGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxhYmxlLlxuICBf
LmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2ZUJpbmQgJiYg
ZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBseShmdW5jLCBz
bGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0
aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtc
biAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgYm91bmQg
PSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNv
bnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgIH07
XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0
aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAgLy8g
YXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNg
IGNvbnRleHQuIF8gYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2luZyBhbnkgY29t
YmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFydGlhbCA9IGZ1
bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMs
IDEpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0g
MCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVu
Z3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAg
YXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlvbisrXSA6IGJv
dW5kQXJnc1tpXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFyZ3VtZW50cy5s
ZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAgcmV0dXJuIGV4
ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAgfTtcbiAgICBy
ZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBt
ZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8vIGFyZSB0aGUg
bWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQgYWxsIGNh
bGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG4gIF8uYmlu
ZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1bWVudHMubGVu
Z3RoLCBrZXk7XG4gICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwg
bXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9ialtrZXldID0g
Xy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4g
IC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMu
XG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXpl
ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAg
ICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1l
bnRzKSA6IGtleSk7XG4gICAgICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVbYWRk
cmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2FjaGVb
YWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJuIG1l
bW9pemU7XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1i
ZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRoIHRoZSBhcmd1
bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAg
dmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIHNldFRpbWVv
dXQoZnVuY3Rpb24oKXtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAg
IH0sIHdhaXQpO1xuICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hlZHVsaW5nIGl0
IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBjbGVhcmVkLlxu
ICBfLmRlZmVyID0gXy5wYXJ0aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1v
c3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHksIHRo
ZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdp
dGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuICAv
LyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRp
bmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhlY3V0
aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9IGZ1bmN0aW9u
KGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0O1xu
ICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICgh
b3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4g
ICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwg
YXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9
O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5vdygpO1xuICAg
ICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9
IG5vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAg
ICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlmIChy
ZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlmICh0aW1lb3V0
KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVvdXQg
PSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgICByZXN1
bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRpbWVvdXQpIGNv
bnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9u
cy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0
ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRp
bnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5j
dGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8v
IE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1
bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5n
LlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAg
dmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xuXG4gICAgdmFy
IGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkgLSB0aW1lc3Rh
bXA7XG5cbiAgICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAgICAgICAgdGlt
ZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0gZWxzZSB7XG4g
ICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAg
ICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgaWYgKCF0
aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9
O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAg
ICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtcbiAgICAgIHZh
ciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0aW1lb3V0KSB0
aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2FsbE5vdykge1xu
ICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250
ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4g
YXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1
bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5
IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5j
LCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtc
blxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGlj
YXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5j
dGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29t
cG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhl
IHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2Ug
PSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQg
PSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkg
PSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1
bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJl
c3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJu
cyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUg
TnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVy
biBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4g
ZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChi
dXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRp
bWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4g
ICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlv
biB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xu
ICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxu
ICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVjdCBGdW5jdGlv
bnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29u
J3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4gIHZh
ciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3Rv
U3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90
b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnR5SXNF
bnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAgZnVu
Y3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIgbm9uRW51bUlk
eCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gb2Jq
LmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29uc3RydWN0b3Ip
ICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1
Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4g
ICAgaWYgKF8uaGFzKG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIGtleXMu
cHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAgIHByb3AgPSBu
b25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBpbiBvYmogJiYg
b2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkge1xu
ICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0
cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuICAvLyBEZWxl
Z2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgXG4gIF8ua2V5
cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107
XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtl
eXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSBr
ZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcp
IGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtc
blxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC5cbiAg
Xy5hbGxLZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJl
dHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGtl
eXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1Zykg
Y29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xu
XG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAg
Xy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xu
ICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0gQXJyYXkobGVu
Z3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1
ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07XG5c
biAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFj
aCBlbGVtZW50IG9mIHRoZSBvYmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5tYXAgaXQgcmV0
dXJucyBhbiBvYmplY3RcbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFy
IGtleXMgPSAgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4g
ICAgICAgICAgcmVzdWx0cyA9IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4gICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGN1cnJl
bnRLZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJh
dGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJl
dHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBsaXN0
IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7
XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpba2V5c1tpXV1d
O1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IHRoZSBrZXlz
IGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxl
LlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAg
ICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBr
ZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW2tleXNbaV1d
XSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0
dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUg
b2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9ucyA9IF8ubWV0
aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAodmFy
IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1lcy5w
dXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07XG5cbiAgLy8g
RXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1p
biBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzKTtcblxu
ICAvLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGllcyBp
biB0aGUgcGFzc2VkLWluIG9iamVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0
L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5
cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3Nl
cyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRl
LCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAg
ICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07
XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4g
ICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRh
aW5pbmcgdGhlIGFsbG93bGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1bmN0aW9uKG9i
amVjdCwgb2l0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBvYmogPSBv
YmplY3QsIGl0ZXJhdGVlLCBrZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3Vs
dDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtleXMgPSBfLmFs
bEtleXMob2JqKTtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0ZWUsIGNvbnRl
eHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVudHMsIGZhbHNl
LCBmYWxzZSwgMSk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikg
eyByZXR1cm4ga2V5IGluIG9iajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuICAgIH1c
biAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5
XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZh
bHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBSZXR1cm4gYSBj
b3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgYmxvY2tsaXN0ZWQgcHJvcGVydGllcy5cbiAg
Xy5vbWl0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmIChfLmlz
RnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRlKGl0ZXJhdGVl
KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVuKGFyZ3VtZW50
cywgZmFsc2UsIGZhbHNlLCAxKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24o
dmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywga2V5KTtcbiAg
ICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7
XG4gIH07XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVy
dGllcy5cbiAgXy5kZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywgdHJ1ZSk7XG5c
biAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90
b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVk
IHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9iamVjdC5cbiAg
Xy5jcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFyIHJlc3VsdCA9
IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5kT3duKHJlc3Vs
dCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgKHNo
YWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25lID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gICAgcmV0
dXJuIF8uaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwgb2JqKTtcbiAg
fTtcblxuICAvLyBJbnZva2VzIGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5kIHRoZW4gcmV0
dXJucyBvYmouXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8g
XCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBwZXJmb3JtIG9w
ZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi5cbiAgXy50
YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0b3Iob2JqKTtc
biAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3Qg
aGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0Y2ggPSBmdW5j
dGlvbihvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0cnMpLCBsZW5n
dGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3Ro
O1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChhdHRy
c1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAg
fVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNv
bXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVuY3Rpb24oYSwg
YiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwu
IGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBb
SGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3Uu
cGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAwIHx8
IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlzIG5lY2Vzc2Fy
eSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09
IG51bGwpIHJldHVybiBhID09PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3Rz
LlxuICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIgaW5z
dGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5h
bWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChjbGFz
c05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2ggKGNs
YXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHByZXNzaW9u
cywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgICBjYXNl
ICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJp
bmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICAgIGNh
c2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWlyIGNv
cnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1XCJg
IGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAg
ICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJd
JzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5c
biAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAgICAgICAgaWYg
KCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBh
cmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0
dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2Ug
J1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAg
IC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVz
LiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVw
cmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJl
cHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4g
ICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNs
YXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAg
ICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1
cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3Jz
IGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8g
ZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0
b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYg
IShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGlu
c3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0
b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7
XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVj
dHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1
cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVy
YXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2Jq
ZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Ig
b2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtd
O1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxl
bmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBl
cmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAg
ICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhd
ID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRk
IHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAg
IGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZl
bHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAg
ICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFy
aXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChs
ZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUg
dGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hp
bGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFT
dGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAg
ICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBr
ZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJv
dGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBj
b21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBs
ZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAv
LyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xu
ICAgICAgICBpZiAoIShfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ss
IGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSB0
aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAg
IGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07
XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0
cyBhcmUgZXF1YWwuXG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4g
ZXEoYSwgYik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmpl
Y3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3du
LXByb3BlcnRpZXMuXG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmog
PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikgJiYgKF8uaXNB
cnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9iaikpKSByZXR1
cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVuZ3RoID09PSAw
O1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbiAgXy5pc0Vs
ZW1lbnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlw
ZSA9PT0gMSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT9cbiAgLy8g
RGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5pc0FycmF5ID0g
bmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2Fs
bChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFy
aWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFy
IHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5
cGUgPT09ICdvYmplY3QnICYmICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21lIGlzVHlwZSBt
ZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0Rh
dGUsIGlzUmVnRXhwLCBpc0Vycm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24n
LCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvciddLCBmdW5jdGlv
bihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJl
dHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xuICAg
IH07XG4gIH0pO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhv
ZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUgaXNuJ3QgYW55
IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJndW1lbnRzKGFy
Z3VtZW50cykpIHtcbiAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBy
ZXR1cm4gXy5oYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXpl
IGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVn
cyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkgOCAoIzE5Mjkp
LlxuICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0g
J29iamVjdCcpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJl
dHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4g
IC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zpbml0ZSA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZs
b2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5hTiBp
cyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5cbiAgXy5pc05h
TiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9
PSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBfLmlz
Qm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2Jq
ID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztc
biAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4gIF8uaXNOdWxs
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAgfTtcblxuICAv
LyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5lZCA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxuICAvLyBTaG9y
dGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3Bl
cnR5IGRpcmVjdGx5XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHBy
b3RvdHlwZSkuXG4gIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gb2Jq
ICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07XG5cbiAgLy8g
VXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5k
ZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFi
bGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRo
ZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAg
cm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4g
IC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRl
ZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtc
biAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1
bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkg
e1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xu
ICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5ID0gcHJvcGVy
dHk7XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQg
cmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5jdGlvbihvYmop
IHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5jdGlvbihrZXkp
IHtcbiAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMg
YSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNl
dCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5tYXRjaGVzID0g
ZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4g
ICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRjaChvYmosIGF0
dHJzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxu
ICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgYWNj
dW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0
ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNj
dW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5cbiAgLy8gUmV0
dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVzaXZlKS5cbiAg
Xy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xu
ICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbiAr
IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH07XG5cbiAg
Ly8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBh
cyBhbiBpbnRlZ2VyLlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICAgIHJl
dHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBvZiBIVE1MIGVu
dGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1w
OycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90
OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFy
IHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9y
IGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRp
b24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2Fw
ZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtc
biAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVz
Y2FwZWRcbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2luKCd8JykgKyAn
KSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2YXIgcmVwbGFj
ZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmlu
Zykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xu
ICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVw
bGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgXy5lc2NhcGUg
PSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVhdGVFc2NhcGVy
KHVuZXNjYXBlTWFwKTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGBwcm9wZXJ0
eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBgb2JqZWN0YCBh
cyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBmdW5jdGlvbihv
YmplY3QsIHByb3BlcnR5LCBmYWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBu
dWxsID8gdm9pZCAwIDogb2JqZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUgPT09IHZvaWQg
MCkge1xuICAgICAgdmFsdWUgPSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNGdW5j
dGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtcblxuICAvLyBH
ZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xp
ZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxuICB2YXIg
aWRDb3VudGVyID0gMDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIHZh
ciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlk
IDogaWQ7XG4gIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHls
ZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0
ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50ZW1wbGF0ZVNl
dHRpbmdzID0ge1xuICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBp
bnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAgICAgIDogLzwl
LShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0
ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9s
YXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNc
biAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xu
XG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5
IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9
IHtcbiAgICBcIidcIjogICAgICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxcXCcsXG4gICAg
J1xccic6ICAgICAncicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIw
MjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVyID0gL1xc
XFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVu
Y3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07
XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVz
aWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMg
YXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29y
cmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6
IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Llxu
ICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4g
ICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztc
biAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGlu
Z3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVz
c2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAg
KHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50
ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8
IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8v
IENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFw
cHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3Ar
PSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwg
aW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNs
aWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7XG4gICAgICBp
bmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2FwZSkge1xuICAg
ICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6
Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xu
ICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIpKT09
bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAg
ICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAg
IH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1
Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAg
IHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVj
aWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlmICghc2V0dGlu
Z3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxc
bic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUu
am9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVu
dHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICAg
IHRyeSB7XG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxl
IHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3Vy
Y2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9
IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBf
KTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29u
dmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsg
YXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRl
O1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcg
YSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7
XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0t
LS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0
dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRo
aXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJz
Y29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMu
XG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAgcmV0dXJuIGlu
c3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4gIC8vIEFkZCB5
b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5t
aXhpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBmdW5j
dGlvbihuYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07XG4gICAg
ICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IFt0
aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAg
ICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xuICAgICAgfTtc
biAgICB9KTtcbiAgfTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9u
cyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8gQWRkIGFsbCBt
dXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsncG9wJywg
J3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10s
IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAg
ICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMu
X3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgaWYg
KChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09
PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBvYmopO1xuICAg
IH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRo
ZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlv
bihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90
b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgbWV0
aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xuXG4g
IC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0
LlxuICBfLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl93
cmFwcGVkO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBmb3Igc29tZSBt
ZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBhcml0aG1ldGlj
IGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVPZiA9IF8ucHJv
dG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90eXBlLnRvU3Ry
aW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBlZDtcbiAgfTtc
blxuICAvLyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3IgY29tcGF0aWJp
bGl0eSB3aXRoIEFNRCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNlIG5leHQtdHVy
biBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAvLyBwcmFjdGlj
ZSBmb3IgQU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVyc2NvcmUgcmVn
aXN0ZXJzXG4gIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1ZXJ5LCBpdCBp
cyBhIGJhc2UgbGlicmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRvIGJlIGJ1bmRs
ZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAvLyBhbiBBTUQg
bG9hZCByZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIGFu
XG4gIC8vIGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIGxvYWRlciBy
ZXF1ZXN0LlxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1k
KSB7XG4gICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0
dXJuIF87XG4gICAgfSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iCiAKIC8qKiovIH0pLAogLyog
NDE2ICovCkBAIC0xNDg3NzUsNyArMTQ4Nzc1LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigp
IHsKIAogICBmdW5jdGlvbiBjb21iaW5lKGRlc3QsIHNyYykgewogICAgIE9iamVjdC5rZXlzKHNy
YykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7Ci0gICAgICBpZiAoXy5oYXMoSlNISU5ULmJsYWNr
bGlzdCwgbmFtZSkpIHJldHVybjsKKyAgICAgIGlmIChfLmhhcyhKU0hJTlQuYmxvY2tsaXN0LCBu
YW1lKSkgcmV0dXJuOwogICAgICAgZGVzdFtuYW1lXSA9IHNyY1tuYW1lXTsKICAgICB9KTsKICAg
fQpAQCAtMTQ5MDYwLDcgKzE0OTA2MCw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAga2V5ID0ga2V5LnNsaWNlKDEpOwogICAgICAgICAgIHZhbCA9IGZhbHNlOwogCi0g
ICAgICAgICAgSlNISU5ULmJsYWNrbGlzdFtrZXldID0ga2V5OworICAgICAgICAgIEpTSElOVC5i
bG9ja2xpc3Rba2V5XSA9IGtleTsKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtrZXldOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHByZWRlZltrZXldID0gKHZhbCA9PT0gInRydWUi
KTsKQEAgLTE1Mzg2Nyw3ICsxNTM4NjcsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewog
ICAgICAgSlNISU5ULmVycm9ycyA9IFtdOwogICAgICAgSlNISU5ULnVuZGVmcyA9IFtdOwogICAg
ICAgSlNISU5ULmludGVybmFscyA9IFtdOwotICAgICAgSlNISU5ULmJsYWNrbGlzdCA9IHt9Owor
ICAgICAgSlNISU5ULmJsb2NrbGlzdCA9IHt9OwogICAgICAgSlNISU5ULnNjb3BlID0gIihtYWlu
KSI7CiAgICAgfQogCkBAIC0xNTM4OTYsNyArMTUzODk2LDcgQEAgdmFyIEpTSElOVCA9IChmdW5j
dGlvbigpIHsKIAogICAgICAgICBpZiAoaXRlbVswXSA9PT0gIi0iKSB7CiAgICAgICAgICAgc2xp
Y2UgPSBpdGVtLnNsaWNlKDEpOwotICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rbc2xpY2VdID0g
c2xpY2U7CisgICAgICAgICAgSlNISU5ULmJsb2NrbGlzdFtzbGljZV0gPSBzbGljZTsKICAgICAg
ICAgICAvLyByZW1vdmUgZnJvbSBwcmVkZWZpbmVkIGlmIHRoZXJlCiAgICAgICAgICAgZGVsZXRl
IHByZWRlZmluZWRbc2xpY2VdOwogICAgICAgICB9IGVsc2UgewpAQCAtMTk1NTc2LDcgKzE5NTU3
Niw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSAKIAl2YXIgcmVn
ZXhTaW5nbGVFc2NhcGUgPSAvWyInXFxcYlxmXG5cclx0XS87CiAKIAl2YXIgcmVnZXhEaWdpdCA9
IC9bMC05XS87Ci0JdmFyIHJlZ2V4V2hpdGVsaXN0ID0gL1sgISMtJlwoLVxbXF0tfl0vOworCXZh
ciByZWdleEFsbG93bGlzdCA9IC9bICEjLSZcKC1cW1xdLX5dLzsKIAogCXZhciBqc2VzYyA9IGZ1
bmN0aW9uKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAJCS8vIEhhbmRsZSBvcHRpb25zCkBAIC0xOTU3
NTEsNyArMTk1NzUxLDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUp
IAogCQkJCX0KIAkJCX0KIAkJCWlmICghb3B0aW9ucy5lc2NhcGVFdmVyeXRoaW5nKSB7Ci0JCQkJ
aWYgKHJlZ2V4V2hpdGVsaXN0LnRlc3QoY2hhcmFjdGVyKSkgeworCQkJCWlmIChyZWdleEFsbG93
bGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKIAkJCQkJLy8gSXTigJlzIGEgcHJpbnRhYmxlIEFTQ0lJ
IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBgImAsIGAnYCBvciBgXGAsCiAJCQkJCS8vIHNvIGRvbuKA
mXQgZXNjYXBlIGl0LgogCQkJCQlyZXN1bHQgKz0gY2hhcmFjdGVyOwpAQCAtMjA5MDgxLDcgKzIw
OTA4MSw3IEBAIHZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXUKIAogZXhw
b3J0cy5jYWxsID0gY2FsbDsKIGV4cG9ydHMuX2NhbGwgPSBfY2FsbDsKLWV4cG9ydHMuaXNCbGFj
a2xpc3RlZCA9IGlzQmxhY2tsaXN0ZWQ7CitleHBvcnRzLmlzQmxvY2tsaXN0ZWQgPSBpc0Jsb2Nr
bGlzdGVkOwogZXhwb3J0cy52aXNpdCA9IHZpc2l0OwogZXhwb3J0cy5za2lwID0gc2tpcDsKIGV4
cG9ydHMuc2tpcEtleSA9IHNraXBLZXk7CkBAIC0yMDkxNTcsOSArMjA5MTU3LDkgQEAgZnVuY3Rp
b24gX2NhbGwoZm5zKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotZnVuY3Rpb24gaXNCbGFja2xp
c3RlZCgpIHsKLSAgdmFyIGJsYWNrbGlzdCA9IHRoaXMub3B0cy5ibGFja2xpc3Q7Ci0gIHJldHVy
biBibGFja2xpc3QgJiYgYmxhY2tsaXN0LmluZGV4T2YodGhpcy5ub2RlLnR5cGUpID4gLTE7Citm
dW5jdGlvbiBpc0Jsb2NrbGlzdGVkKCkgeworICB2YXIgYmxvY2tsaXN0ID0gdGhpcy5vcHRzLmJs
b2NrbGlzdDsKKyAgcmV0dXJuIGJsb2NrbGlzdCAmJiBibG9ja2xpc3QuaW5kZXhPZih0aGlzLm5v
ZGUudHlwZSkgPiAtMTsKIH0KIAogZnVuY3Rpb24gdmlzaXQoKSB7CkBAIC0yMDkxNjcsNyArMjA5
MTY3LDcgQEAgZnVuY3Rpb24gdmlzaXQoKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAg
aWYgKHRoaXMuaXNCbGFja2xpc3RlZCgpKSB7CisgIGlmICh0aGlzLmlzQmxvY2tsaXN0ZWQoKSkg
ewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC0yMTA4MjUsNyArMjEwODI1LDcgQEAgZnVu
Y3Rpb24gc2hvdWxkSWdub3JlS2V5KGtleSkgewogCiAgIGlmIChrZXkgPT09ICJlbnRlciIgfHwg
a2V5ID09PSAiZXhpdCIgfHwga2V5ID09PSAic2hvdWxkU2tpcCIpIHJldHVybiB0cnVlOwogCi0g
IGlmIChrZXkgPT09ICJibGFja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0g
InNraXBLZXlzIikgcmV0dXJuIHRydWU7CisgIGlmIChrZXkgPT09ICJibG9ja2xpc3QiIHx8IGtl
eSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CiAKICAg
cmV0dXJuIGZhbHNlOwogfQpAQCAtMjIyNTE1LDcgKzIyMjUxNSw3IEBAIGZ1bmN0aW9uIF9pbnRl
cm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyAKIAogY29uc3QgbGlmZWN5Y2xlTWV0aG9kcyA9IG5l
dyBTZXQoWyJjb21wb25lbnRXaWxsVW5tb3VudCIsICJjb21wb25lbnREaWRNb3VudCIsICJjb21w
b25lbnRXaWxsTW91bnQiLCAiY29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVcGRh
dGUiLCAiY29tcG9uZW50RGlkQ2F0Y2giLCAiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyJdKTsK
IAotY29uc3Qgd2hpdGVsaXN0ZWRQcm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNvbnRl
eHQiLCAicmVmcyJdKTsKK2NvbnN0IGFsbG93bGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQoWyJw
cm9wcyIsICJjb250ZXh0IiwgInJlZnMiXSk7CiAKIGZ1bmN0aW9uIGdldEluaXRpYWxQcm9wcyhy
ZWFsbSwgY29tcG9uZW50VHlwZSkgewogICBsZXQgcHJvcHNOYW1lID0gbnVsbDsKQEAgLTIyMjY4
NSw3ICsyMjI2ODUsNyBAQCBmdW5jdGlvbiBldmFsdWF0ZUNsYXNzQ29uc3RydWN0b3IocmVhbG0s
CiAgICAgbGV0IGluc3RhbmNlID0gKDAsIF9pbmRleDIuQ29uc3RydWN0KShyZWFsbSwgY29uc3Ry
dWN0b3JGdW5jLCBbcHJvcHMsIGNvbnRleHRdKTsKICAgICAoMCwgX2ludmFyaWFudDIuZGVmYXVs
dCkoaW5zdGFuY2UgaW5zdGFuY2VvZiBfaW5kZXguT2JqZWN0VmFsdWUpOwogICAgIGZvciAobGV0
IFtwcm9wZXJ0eU5hbWVdIG9mIGluc3RhbmNlLnByb3BlcnRpZXMpIHsKLSAgICAgIGlmICghd2hp
dGVsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUpKSB7CisgICAgICBpZiAoIWFsbG93
bGlzdGVkUHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpbnN0YW5jZVBy
b3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7CiAgICAgICB9CiAgICAgfQpJbmRleDogV2Vic2l0
ZXMvYnJvd3NlcmJlbmNoLm9yZy9KZXRTdHJlYW0yLjAvd2ViLXRvb2xpbmctYmVuY2htYXJrL2Ns
aS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIu
MC93ZWItdG9vbGluZy1iZW5jaG1hcmsvY2xpLmpzCShyZXZpc2lvbiAyNzEwNjcpCisrKyBXZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL0pldFN0cmVhbTIuMC93ZWItdG9vbGluZy1iZW5jaG1hcmsv
Y2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MzU0LDM3ICs1MzU0LDM3IEBAIGlmICh0eXBlb2Yg
X19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAKIC8qIDE2ICovCiAvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7
DQotCWlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7DQotCQltb2R1bGUuZGVwcmVjYXRlID0g
ZnVuY3Rpb24oKSB7fTsNCi0JCW1vZHVsZS5wYXRocyA9IFtdOw0KLQkJLy8gbW9kdWxlLnBhcmVu
dCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0DQotCQlpZighbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUu
Y2hpbGRyZW4gPSBbXTsNCi0JCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICJsb2FkZWQi
LCB7DQotCQkJZW51bWVyYWJsZTogdHJ1ZSwNCi0JCQlnZXQ6IGZ1bmN0aW9uKCkgew0KLQkJCQly
ZXR1cm4gbW9kdWxlLmw7DQotCQkJfQ0KLQkJfSk7DQotCQlPYmplY3QuZGVmaW5lUHJvcGVydHko
bW9kdWxlLCAiaWQiLCB7DQotCQkJZW51bWVyYWJsZTogdHJ1ZSwNCi0JCQlnZXQ6IGZ1bmN0aW9u
KCkgew0KLQkJCQlyZXR1cm4gbW9kdWxlLmk7DQotCQkJfQ0KLQkJfSk7DQotCQltb2R1bGUud2Vi
cGFja1BvbHlmaWxsID0gMTsNCi0JfQ0KLQlyZXR1cm4gbW9kdWxlOw0KLX07DQorbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHsKKwlpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkg
eworCQltb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTsKKwkJbW9kdWxlLnBhdGhzID0g
W107CisJCS8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdAorCQlpZighbW9k
dWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTsKKwkJT2JqZWN0LmRlZmluZVByb3Bl
cnR5KG1vZHVsZSwgImxvYWRlZCIsIHsKKwkJCWVudW1lcmFibGU6IHRydWUsCisJCQlnZXQ6IGZ1
bmN0aW9uKCkgeworCQkJCXJldHVybiBtb2R1bGUubDsKKwkJCX0KKwkJfSk7CisJCU9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShtb2R1bGUsICJpZCIsIHsKKwkJCWVudW1lcmFibGU6IHRydWUsCisJCQln
ZXQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiBtb2R1bGUuaTsKKwkJCX0KKwkJfSk7CisJCW1v
ZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxOworCX0KKwlyZXR1cm4gbW9kdWxlOworfTsKIAogCiAv
KioqLyB9KSwKIC8qIDE3ICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAK
LW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7DQotCXRocm93IG5ldyBFcnJvcigiZGVmaW5l
IGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0Iik7DQotfTsNCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKCkgeworCXRocm93IG5ldyBFcnJvcigiZGVmaW5lIGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0
Iik7Cit9OwogCiAKIC8qKiovIH0pLApAQCAtNzI0OSwyNyArNzI0OSwyNyBAQCBmdW5jdGlvbiBD
YWxsKHJlYWxtLCBGLCBWLCBhcmdzTGlzdCkgewogLyogMjEgKi8KIC8qKiovIChmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMpIHsKIAotdmFyIGc7DQotDQotLy8gVGhpcyB3b3JrcyBpbiBub24tc3Ry
aWN0IG1vZGUNCi1nID0gKGZ1bmN0aW9uKCkgew0KLQlyZXR1cm4gdGhpczsNCi19KSgpOw0KLQ0K
LXRyeSB7DQotCS8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKQ0KLQln
ID0gZyB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpIHx8ICgxLGV2YWwpKCJ0aGlzIik7DQot
fSBjYXRjaChlKSB7DQotCS8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMg
YXZhaWxhYmxlDQotCWlmKHR5cGVvZiB3aW5kb3cgPT09ICJvYmplY3QiKQ0KLQkJZyA9IHdpbmRv
dzsNCi19DQotDQotLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBk
byBhYm91dCBpdC4uLg0KLS8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGlu
ZyBoZXJlLCBzbyBpdCdzDQotLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9i
YWwpIHsgLi4ufQ0KLQ0KLW1vZHVsZS5leHBvcnRzID0gZzsNCit2YXIgZzsKKworLy8gVGhpcyB3
b3JrcyBpbiBub24tc3RyaWN0IG1vZGUKK2cgPSAoZnVuY3Rpb24oKSB7CisJcmV0dXJuIHRoaXM7
Cit9KSgpOworCit0cnkgeworCS8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUg
Q1NQKQorCWcgPSBnIHx8IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkgfHwgKDEsZXZhbCkoInRo
aXMiKTsKK30gY2F0Y2goZSkgeworCS8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVu
Y2UgaXMgYXZhaWxhYmxlCisJaWYodHlwZW9mIHdpbmRvdyA9PT0gIm9iamVjdCIpCisJCWcgPSB3
aW5kb3c7Cit9CisKKy8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8g
ZG8gYWJvdXQgaXQuLi4KKy8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGlu
ZyBoZXJlLCBzbyBpdCdzCisvLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2Jh
bCkgeyAuLi59CisKK21vZHVsZS5leHBvcnRzID0gZzsKIAogCiAvKioqLyB9KSwKQEAgLTEwNDA1
LDE1ICsxMDQwNSwxNSBAQCB0cmF2ZXJzZS5yZW1vdmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHRy
CiAgIHJldHVybiB0cmVlOwogfTsKIAotZnVuY3Rpb24gaGFzQmxhY2tsaXN0ZWRUeXBlKHBhdGgs
IHN0YXRlKSB7CitmdW5jdGlvbiBoYXNCbG9ja2xpc3RlZFR5cGUocGF0aCwgc3RhdGUpIHsKICAg
aWYgKHBhdGgubm9kZS50eXBlID09PSBzdGF0ZS50eXBlKSB7CiAgICAgc3RhdGUuaGFzID0gdHJ1
ZTsKICAgICBwYXRoLnN0b3AoKTsKICAgfQogfQogCi10cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rp
b24gKHRyZWUsIHNjb3BlLCB0eXBlLCBibGFja2xpc3RUeXBlcykgewotICBpZiAoKDAsIF9pbmNs
dWRlczIuZGVmYXVsdCkoYmxhY2tsaXN0VHlwZXMsIHRyZWUudHlwZSkpIHJldHVybiBmYWxzZTsK
K3RyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2NvcGUsIHR5cGUsIGJsb2NrbGlz
dFR5cGVzKSB7CisgIGlmICgoMCwgX2luY2x1ZGVzMi5kZWZhdWx0KShibG9ja2xpc3RUeXBlcywg
dHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwogCiAgIGlmICh0cmVlLnR5cGUgPT09IHR5cGUpIHJl
dHVybiB0cnVlOwogCkBAIC0xMDQyMyw4ICsxMDQyMyw4IEBAIHRyYXZlcnNlLmhhc1R5cGUgPSBm
dW5jdGlvbiAodHJlZSwgc2NvcGUKICAgfTsKIAogICB0cmF2ZXJzZSh0cmVlLCB7Ci0gICAgYmxh
Y2tsaXN0OiBibGFja2xpc3RUeXBlcywKLSAgICBlbnRlcjogaGFzQmxhY2tsaXN0ZWRUeXBlCisg
ICAgYmxvY2tsaXN0OiBibG9ja2xpc3RUeXBlcywKKyAgICBlbnRlcjogaGFzQmxvY2tsaXN0ZWRU
eXBlCiAgIH0sIHNjb3BlLCBzdGF0ZSk7CiAKICAgcmV0dXJuIHN0YXRlLmhhczsKQEAgLTEzMjI4
LDggKzEzMjI4LDggQEAgbW9kdWxlLmV4cG9ydHMgPSAhX193ZWJwYWNrX3JlcXVpcmVfXyg2Mgog
LyogNTUgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotLyogV0VCUEFD
SyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKF9fd2VicGFja19hbWRfb3B0aW9uc19fKSB7Lyog
Z2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqLw0KLW1vZHVsZS5leHBvcnRzID0gX193
ZWJwYWNrX2FtZF9vcHRpb25zX187DQorLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0
aW9uKF9fd2VicGFja19hbWRfb3B0aW9uc19fKSB7LyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29w
dGlvbnNfXyAqLworbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXzsKIAog
LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIHt9KSkKIApAQCAtMzcw
MTIsNyArMzcwMTIsNyBAQCBmdW5jdGlvbiBUeXBlZEFycmF5U3BlY2llc0NyZWF0ZShyZWFsbSwg
CiB2YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nOwogCiAv
KiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqLwotdmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBz
ZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUg
aWQtYmxhY2tsaXN0Cit2YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3Qn
ID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibG9ja2xpc3QKIAog
dmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnOwogdmFyIG1h
cEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnOwpAQCAtMTEzODQwLDcgKzExMzg0
MCw3IEBAIG1vZHVsZS5leHBvcnRzID0gIntcInZlcnNpb25cIjozLFwic291cmMKIC8qIDQxMSAq
LwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9
ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBbVmFsZXJpbyBQ
cm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1aWxkOiBodHRw
czovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdiMTczZDVkZWZm
NjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3JpcHRpb246IFRoZSBoZWFy
dCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNvcHlyaWdo
dDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0
aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9vbHMgcHJvZHVjdGlvbiB0
ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJhdGlvbjpcbiAg
LSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0cDovL2RlYW4u
ZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMpIDIwMDYgRGVh
biBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwOi8vb3Bl
bnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAgLSBTb21lIGZ1bmN0aW9u
YWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3Byb3RvdHlwZWpzLm9yZykg
Q29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtNSVQgTGljZW5zZV0oaHR0
cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxucHJvdmlkZXM6
IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRpdmVdXG5cbi4u
LlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFs
ZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuKi9cbihmdW5jdGlv
bigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxuXHRidWlsZDog
JzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmInXG59O1xuXG4vLyB0eXBl
T2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cdGlmIChpdGVtLiRmYW1p
bHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlmIChpdGVtLm5vZGVOYW1l
KXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnO1xuXHRcdGlm
IChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3QoaXRlbS5ub2RlVmFsdWUp
ID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlmICh0eXBlb2YgaXRlbS5s
ZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4gJ2Fy
Z3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24nO1xu
XHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGluc3RhbmNlT2YgPSB0aGlz
Lmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRlbSA9PSBudWxs
KSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9yIHx8
IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0aWYgKGNvbnN0
cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0cnVjdG9yID0gY29uc3Ry
dWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICghaXRlbS5oYXNPd25Qcm9w
ZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0ZW0gaW5zdGFu
Y2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1lcmFibGVzID0gdHJ1ZTtc
bmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMgPSBudWxsO1xuaWYgKGVu
dW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHknLCAndmFsdWVPZicsICdp
c1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywg
J3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJhYmxlcykgZm9yICh2YXIg
aSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVtZXJhYmxlc1tp
XTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIgY2Fu
IGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRob3V0IHN3YXBw
aW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBm
bi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9sdElFOD4qL1xuXG4vLyBG
dW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0aW9uO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xu
XHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoYSA9
PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdz
dHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFba10p
O1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShh
LCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRz
ZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufTtc
blxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFs
KXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5cdFx0dmFyIGFy
Z3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhO1xuXHRc
dGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJndW1lbnRzO1xuXHRcdGVs
c2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJncyl7XG5cdFx0XHRyZXN1
bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgcmVz
dWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1
bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24oa2V5
LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRo
aXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuLy8gRnJv
bVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbkFycmF5LmNvbnZlcnQg
PSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHRyZXR1
cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnKSA/
ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2UuY2FsbChpdGVtKSA6IFtp
dGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJu
ICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVt
KXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJldHVybiBpc0Zpbml0ZShu
dW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252ZXJ0ID0gZnVuY3Rpb24o
aXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVuY3Rpb24uZnJvbSA9IEZ1
bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0O1xuU3RyaW5nLmZy
b20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxuXG5GdW5jdGlvbi5pbXBs
ZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVuID0gdHJ1ZTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8v
IFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3Qpe1xu
XHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHZh
ciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiAodHlwZU9mKGl0ZW0p
ID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hlY2s7
XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5wcm90b3R5cGUuJGZhbWls
eSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9KS5oaWRlKCk7
XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBudWxs
O1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBl
O1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVjdDtcblxuXHRyZXR1cm4g
b2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztc
blxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIChpdGVtICE9
IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwo
aXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFyIGhvb2tzID0ge307XG5c
bnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0eXBlT2Yob2Jq
ZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAoaG9va3NbdHlwZV0gPSBb
XSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYg
KG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZhciBob29rcyA9IGhvb2tz
T2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKyl7XG5c
dFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykg
aW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhvb2suY2FsbCh0
aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3VzID0gdGhpcy5wcm90b3R5
cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAodGhpc1tuYW1lXSA9PSBu
dWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5h
bWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBwbHkoaXRlbSwgc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xu
XHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAh
cHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtcbn07XG5cblR5cGUuaW1w
bGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpLFxuXG5c
dGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1bmN0aW9uKG5h
bWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0aGlzLnByb3Rv
dHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0bWlycm9yOiBmdW5j
dGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7XG5cbi8vIERlZmF1bHQg
VHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXtcblx0
dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90b3R5cGUgPSBvYmplY3Qu
cHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5hbWUsIG9iamVj
dCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmljID0gb2JqZWN0W2tleV0s
XG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVyaWMpIGdlbmVy
aWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9iamVjdC5pbXBsZW1lbnQo
a2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlwZSl7XG5cdFx0dmFyIG1l
dGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhvZHNb
MF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYg
KCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsg
aSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0aG9k
c1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIHByb3Rv
dHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpO1xuXHRcdH07XG5c
dH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBbXG5c
dCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFpbnMnLCAnaW5kZXhPZics
ICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNlJywgJ3NlYXJjaCcsXG5c
dCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9Mb3dl
ckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwgW1xuXHQncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnZmls
dGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3JlZHVj
ZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwgW1xuXHQndG9FeHBvbmVu
dGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1
bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdcbl0pKCdSZWdF
eHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmplY3QnLCBPYmplY3QsIFtc
blx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tleXMn
LFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dldE93
blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxlJywg
J3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0RhdGUnLCBEYXRl
LCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigpO1xu
XG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJuICsobmV3IERhdGUpO1xu
fSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8vIGZpeGVzIE5hTiByZXR1
cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9uKCl7
XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251bGwnO1xufS5oaWRlKCk7
XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFuZG9tJywgZnVuY3Rpb24o
bWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1p
biArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5cbkFycmF5Lmlt
cGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1c
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0
QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7XG5cdFx0XHRpZiAoaGFz
T3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7XG5cdFx0fVxuXHRcdC8q
PGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVuY3Rp
b24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0SUU4PiovXG5c
dFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBmbiwg
YmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5c
dFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fSk7XG5c
dH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7XG5cblxuLy8gQXJyYXkg
JiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xuXG52YXIgY2xv
bmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7XG5cdFx0Y2Fz
ZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2UgJ29iamVjdCc6IHJldHVy
biBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07XG5cdH1cbn07
XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xuXHR2YXIgaSA9IHRoaXMu
bGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGktLSkgY2xvbmVbaV0gPSBj
bG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxudmFyIG1lcmdlT25lID0g
ZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVPZihjdXJyZW50
KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yoc291cmNlW2tleV0pID09
ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpO1xuXHRcdFx0ZWxz
ZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0XHRcdGJyZWFrO1xuXHRc
dGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25lKCk7IGJyZWFrO1xuXHRc
dGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRyZXR1cm4gc291cmNlO1xu
fTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgaywgdil7
XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwg
aywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0W2tleV0pO1xuXHRcdH1c
blx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihvYmplY3Qpe1xu
XHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tl
eV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0
YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRlbmRlZCA9IGFyZ3VtZW50
c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5
XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbDtcblx0fVxuXG59
KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAnV2hpdGVTcGFjZScsICdU
ZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2goZnVuY3Rpb24obmFtZSl7
XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIgVUlEID0gRGF0
ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpe1xuXHRyZXR1
cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxu
bmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMgbGlr
ZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlcblxuLi4uXG4qL1xuXG5B
cnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBp
LCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXHRc
dGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsr
KSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtcblx0XHRcdGlmIChmbi5j
YWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVuY3Rpb24oaXRlbSwgZnJv
bSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXHRcdGZvciAodmFyIGkg
PSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9tIHx8IDA7IGkg
PCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG5c
dFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShsZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKGkg
aW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHQv
KjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmZpbHRl
cihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51bGw7XG5cdFx0fSk7XG5c
dH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0XHR2YXIgYXJncyA9IEFy
cmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7XG5c
dFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlzKXtcblx0XHR2YXIgb2Jq
ID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tpXTtc
blx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0XHRcdGlmIChv
YmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzW2ldO1xu
XHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0
fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdGNvbnRhaW5z
OiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0sIGZy
b20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHRoaXMu
cHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhpcy5s
ZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9tKDAsIHRoaXMubGVuZ3Ro
IC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRp
ZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtpXSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRc
dGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0g
aXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcnJheSA9IFtd
O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9PSAnbnVsbCcp
IGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5JyB8
fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3RhbmNl
T2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0aW9uKCl7XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRp
ZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0aW9u
KHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7XG5c
dFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGFy
cmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxuXHRyZ2JUb0hleDogZnVu
Y3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsO1xuXHRc
dGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAn
dHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7XG5c
dFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7XG5cdFx0
fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycpO1xuXHR9XG5c
bn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFzcywgYW5kIGRl
bGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxu
cHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5kKHtcblxuXHRh
dHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXJndW1lbnRz
W2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9
XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKGFy
Z3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBBcnJh
eS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1cm4gbnVsbDtc
blx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rpb24odGhhdCl7XG5cdFx0
dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gQXJy
YXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rpb24oKXt9O1xu
XG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBjb250ZXh0ID0gdGhhdCwg
bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlzIGluc3RhbmNlb2YgYm91
bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBlO1xuXHRcdFx0XHRjb250
ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdzICYmICFsZW5n
dGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRcdDogc2VsZi5hcHBseShj
b250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNlKGFyZ3VtZW50
cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNvbnRleHQgPT0gdGhhdCA/
IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5cdH0sXG5cdC8q
PC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR2YXIg
c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZlcnQo
YXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2VsZi5hcHBseShi
aW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxuXHRkZWxheTogZnVuY3Rp
b24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHRoaXMucGFzcygo
YXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtcblx0fSxcblxuXHRwZXJp
b2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0
SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVy
aW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IE51bWJlclxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91bmQs
IHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xuXG5OdW1iZXIuaW1wbGVt
ZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRcdHJldHVybiBNYXRoLm1p
bihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbihw
cmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCku
dG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xuXHRcdHJldHVybiBNYXRo
LnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdHRpbWVzOiBm
dW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzOyBpKyspIGZu
LmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFz
ZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9XG5cbn0pO1xu
XG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0aW9uKG1hdGgpe1xuXG52
YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdGlmICghTnVt
YmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gTWF0aFtu
YW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKSkp
O1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbn0pKFsnYWJzJywg
J2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdm
bG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10p
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgU3Ry
aW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0b0lu
dC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZSwgQXJy
YXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJpbmcuaW1wbGVtZW50KHtc
blxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5nLCBpbmRleCl7XG5cdFx0
cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkgOiBTdHJpbmcodGhpcykp
LmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0ZXN0OiBmdW5j
dGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdyZWdl
eHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRoaXMp
O1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5y
ZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xu
XHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLmNo
YXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhlbmF0ZTogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0
aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hhckF0KDApLnRvTG93ZXJD
YXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBmdW5jdGlvbihtYXRjaCl7
XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRl
c2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNl
KC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9LFxuXG5cdHRv
SW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAx
MCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9h
dCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciBo
ZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sxLDJ9
KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpIDog
bnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciByZ2Ig
PSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJldHVybiAocmdiKSA/IHJn
Yi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6IGZ1bmN0aW9u
KG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVnZXhw
IHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5hbWUpe1xuXHRc
dFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTtc
blx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDogJyc7
XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEJyb3dzZXJcblxu
ZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFs
aXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBGdW5jdGlvbiwg
TnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVudF1c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVu
dDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xuXG52YXIgcGFyc2UgPSBm
dW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG5cdHBsYXRm
b3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6ICcnKTtcblxuXHQvLyBj
aHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIGVk
Z2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNocm9tZS5cblx0dmFyIFVB
ID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSspLyk7XG5cdGlmICghVUEp
e1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx0cmlkZW50fGNy
aW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwoPzpydltcXHNc
XC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykgfHwgW251bGwsICd1bmtu
b3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0XHRVQVsxXSA9
ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9IGVsc2UgaWYgKFVBWzFd
ID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRwbGF0Zm9ybSA9
IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86d2Vi
b3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXInXSlb
MF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAnd2luZG93cyc7XG5cblx0
cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQsXG5cdFx0bmFt
ZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxuXHRcdHZlcnNpb246IHBh
cnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFbNF0gOiBVQVsyXSksXG5c
dFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJvd3NlciA9IHRoaXMuQnJv
d3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5c
bmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpe1xuXHRC
cm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbkJyb3dzZXIuZXh0
ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLFxu
XHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0fSxcblx0cGFyc2VVQTog
cGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJlcXVlc3QgPSAoZnVuY3Rp
b24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBYTUxI
dHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9z
b2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlv
bigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwgZnVuY3Rpb24o
KXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5jdGlvbigpe1xu
XHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxufSkoKTtcblxuQnJvd3Nl
ci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8gU3RyaW5nIHNj
cmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5cdGlmICghdGV4dCkgcmV0
dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93LmV4ZWNTY3Jp
cHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3VtZW50LmhlYWQu
YXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlw
dCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50KCdzdHJpcFNj
cmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAnJztcblx0dmFyIHRleHQg
PSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8XFwvc2NyaXB0Pi9naSwg
ZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxuJztcblx0XHRy
ZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5leGVjKHNjcmlw
dHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRz
LCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93LCBEb2N1bWVudFxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50LFxuXHRXaW5kb3c6IHRo
aXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0aGlzLkV2ZW50
XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdXaW5k
b3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCd3
aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtc
blx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9jdW1lbnQgPSBkb2N1bWVu
dC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pO1xuXG5k
b2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7XG5c
bkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1bWVudFtuYW1l
XSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKSB0
cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZEltYWdlQ2FjaGUnLCBmYWxz
ZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5pZiAodGhpcy5hdHRhY2hF
dmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVubG9hZEV2ZW50ID0gZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtc
blx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LndpbmRvdyA9IG51
bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7XG5cdH07XG5c
dHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xufVxuXG4vLyBJRSBm
YWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxzZWxl
Y3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkge1xuXHRhcnJheUZyb20o
ZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJheS5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYmIFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXtcblx0XHRc
dHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpO1xuXHRcdFx0d2hpbGUg
KGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdH1cblx0
XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBwcm90b3R5cGUgPSBBcnJh
eS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7XG5cdFsncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgbWV0
aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQoaXRlbSksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRpbmcsIGFuZCBp
bXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE51bWJlcl1cblxucHJv
dmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBDbGFzcyA9IHRo
aXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJhbXMpe1xuXHRpZiAoaW5z
dGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRpYWxpemU6IHBhcmFtc307
XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRp
ZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLiRjYWxsZXIg
PSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFyIHZhbHVlID0gKHRoaXMu
aW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRo
aXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsO1xuXHRcdHJldHVybiB2
YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7XG5cblx0bmV3Q2xhc3Mu
JGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS4kY29uc3RydWN0b3Ig
PSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDtcblxuXHRy
ZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7XG5cdGlmICgh
dGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJlbnRcIiBjYW5u
b3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxlci4kbmFtZSxcblx0XHRw
YXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRwcmV2aW91cyA9IChwYXJl
bnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlmICghcHJldmlvdXMpIHRo
cm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBubyBwYXJlbnQu
Jyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFy
IHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtc
blx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVuY3Rpb24oKXt9O1xuXHRc
dFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9IHJlc2V0KG5l
dyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IG9iamVjdFtrZXldID0g
dmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmplY3Q7XG59O1xu
XG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZC4k
b3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdyYXBwZXIgPSBmdW5jdGlv
bigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVsbCkg
dGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdcIiBjYW5ub3QgYmUgY2Fs
bGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3VycmVudCA9IHRoaXMuJGNh
bGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBwZXI7
XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHRo
aXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuXHRcdHJldHVybiBy
ZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46IG1ldGhvZCwgJG5hbWU6
IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJvcGVy
dHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywgdmFs
dWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0fVxuXG5cdGlmICh0
eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1ZS4kaGlkZGVuKSByZXR1
cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFpbikgPyB2YWx1ZSA6IHdy
YXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1lcmdlKHRoaXMu
cHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxudmFy
IGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90eXBpbmcgPSB0
cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4kcHJvdG90eXBp
bmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVudCgnaW1wbGVtZW50Jywg
aW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9IHtcblxuXHRF
eHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xuXHRc
dHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0fSxcblxuXHRJbXBsZW1l
bnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChpdGVtcykuZWFjaChmdW5j
dGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRcdFx0Zm9yICh2
YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBrZXksIGluc3RhbmNlW2tl
eV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBDbGFz
c2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBlYXNl
IHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5FeHRyYXMs
IENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnRo
aXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5cblx0Y2hhaW46IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0KCkuYXBwbHko
dGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0cmV0dXJuIHN0cmluZy5y
ZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRcdHJldHVybiBm
aXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZlbnRzID0gbmV3IENsYXNz
KHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGlu
dGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0XHRcblxuXHRcdHRoaXMu
JGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4pO1xu
XHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciB0eXBl
IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkp
e1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZl
bnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJy
YXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRp
ZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBw
bHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0eXBlID0gcmVtb3ZlT24o
dHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoZXZl
bnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBldmVudHMuaW5kZXhPZihm
bik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNbaW5kZXhdO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50
cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtc
blx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRz
W3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZlbnRzKSBldmVu
dHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0aGlzLiRldmVudHMpe1xu
XHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGludWU7XG5cdFx0XHR2YXIg
Zm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZucy5sZW5ndGg7
IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5z
W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnRo
aXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBseShudWxsLCBb
e30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRcdGlmICh0aGlzLmFkZEV2
ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRpZiAodHlwZU9mKG9wdGlv
bnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qob3B0aW9uKSkg
Y29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tvcHRpb25dKTtc
blx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLlRoZW5hYmxlXG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1wbGVt
ZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBcInRoZW5hYmxlXCIuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlk
ZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIFNU
QVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFURV9SRUpFQ1RF
RCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0gbmV3IENsYXNzKHtcblxu
XHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5hYmxlUmVzdWx0OiBudWxs
LFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVl
KXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0ZTogZnVuY3Rpb24oKXtc
blx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBTVEFURV9QRU5E
SU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX0ZVTEZJ
TExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX1JF
SkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9XG5cdH0sXG5cblx0cmVz
ZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtc
blx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0aGVuOiBmdW5j
dGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBvbkZ1bGZpbGxl
ZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknO1xuXHRcdGlmICh0eXBl
b2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9ICdUaHJvd2VyJztcblxu
XHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4kdGhlbmFibGVS
ZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0XHRmdWxmaWxs
SGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVyOiBvblJlamVjdGVkXG5c
dFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7
XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0s
XG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0cmV0dXJuIHRoaXMudGhl
bihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFibGUuZXh0ZW5kKHtcblx0
cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJsZTtcblx0XHRpZiAodmFs
dWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVlO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0cmVzb2x2ZSh0
aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cdHJl
amVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUo
KTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gcmVzb2x2ZSh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVqZWN0KHRoZW5h
YmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBpdHNl
bGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVj
dCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIgdGhlbjtcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBjYXRjaCAoZXhj
ZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxu
XHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0dmFyIHJlc29s
dmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dHJ5IHtc
blx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0
XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7
XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRy
ZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0
XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRcdFx0XHRcdFx0
XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRcdFx0XHRcdFx0
XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAo
ZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRy
ZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9u
KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNl
IHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxz
ZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1
bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJs
ZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQg
PSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExFRDtc
blxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWplY3QodGhlbmFi
bGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVO
RElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJs
ZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9QRU5E
SU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtcblx0dmFyIHN0YXRlID0g
dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhlbmFibGUuJHRoZW5hYmxl
UmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyxcblx0
XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxIYW5kbGVyJztc
blx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RIYW5kbGVyJztcblx0fVxu
XG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVzdWx0LCByZWFjdGlvbnMs
IHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25zLCB0
eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgKytp
KXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5kbGVyID0gcmVh
Y3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7XG5cdFx0XHRy
ZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAoaGFuZGxl
ciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0
KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50
aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5c
dFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0
XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZp
bmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7XG5cdGRlZmVy
ID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0g
J3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7XG5cdGRlZmVy
ID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xuXHR9O1xufVxuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlvbjogT2JqZWN0IGdlbmVy
aWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5
cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGsgaW4g
b2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0
cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBy
ZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5
c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtl
eSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZmlsdGVy
OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRc
dHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV0sIHZhbHVlID0gb2Jq
ZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3QpKSBy
ZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5c
blx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAoIWZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtl
eXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChmbi5jYWxs
KGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJu
IGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgdmFs
dWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07
XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVz
O1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRyZXR1cm4gT2Jq
ZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0aW9uKG9iamVj
dCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNb
aV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1cm4ga2V5O1xuXHRcdH1c
blx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24ob2JqZWN0LCB2
YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZhbHVlKSAhPSBudWxsO1xu
XHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7XG5cdFx0dmFy
IHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1bmN0aW9uKHZh
bHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAnWycgKyBrZXkgKyAnXSc7
XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRc
dFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWUsIGtl
eSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRcdFx0dmFyIHFzID0ge307
XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRcdFx0cXNb
aV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2JqZWN0LnRvUXVl
cnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IHJl
c3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0XHR9XG5c
dFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQpO1xuXHRcdH0p
O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxufSko
KTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRpb246IFN0YW5k
YWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGljay5QYXJzZXJcbi4uLlxu
Ki9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJbmRleCxcblx0
Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0cmV2ZXJzZUNh
Y2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlv
bihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0
dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVlKSByZXR1cm4gZXhwcmVz
c2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15cXHMrfFxc
cyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBjdXJyZW50Q2Fj
aGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5cdGlmIChjdXJyZW50Q2Fj
aGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07XG5cdHBhcnNl
ZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczogW10sXG5cdFx0cmF3OiBl
eHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyc2Uo
dGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9ySW5kZXggPSAtMTtcblx0
d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UocmVn
ZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVzc2lvbnMubGVu
Z3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJl
dmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1
bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0gJyEnKSByZXR1cm4gJyAn
O1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAnISc7XG5cdGVsc2UgaWYg
KCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8s
ICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07XG5cbnZhciByZXZlcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24u
ZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBp
Kyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFzdCA9IHtwYXJ0
czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmluYXRvcihleHBbMF0uY29t
YmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspe1xu
XHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0
b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNvbWJpbmF0b3Ig
PSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxhc3QpO1xuXHR9XG5cdHJl
dHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmlu
Zyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFu
IDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZVxu
XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxcXF4kfCwjXFxzXS9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9KTtcbn07XG5c
bnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1YnlcbnB1dHMg
XCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxccysjLiokfFxccyt8XFxc
XCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0ICBcXFxccyogKCAsICkg
XFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAgXFxuXFxcblx0fCBcXFxc
cyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9yICAgICAgICAgXFxuXFxc
blx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29tYmluYXRvckNoaWxkcmVu
IFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAgICAjIFRhZyAgICAgICAg
ICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBJRCAg
ICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29kZT4rICAgICAgICkgICAg
ICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsgIFxcXG5cdFx0XFxcXHMq
ICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWypeJCF+fF0/PSkgICg/OiAg
XFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwiJ10/KSguKj8pXFxcXDkg
XFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxccyogIFxcXG5cdFxcXFxd
KD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/OlxcXG5cdFxcXFwoICg/
OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClcIlxuKi9cblx0XCJeKD86
XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxcXHMrKXwoPHVu
aWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+Kyl8XFxcXFtc
XFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86XFxcXHMqKD86KFtcXFwi
J10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDorKSg8dW5pY29kZT4rKSg/
OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycg
KyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAnXScpXG5cdC5yZXBsYWNl
KC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2csICcoPzpbOlxcXFx3XFxc
XHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcbik7XG5cbmZ1bmN0
aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxuXHRjb21iaW5hdG9yLFxu
XHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQsXG5cdGNsYXNzTmFtZSxc
blxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRyaWJ1dGVRdW90
ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxuXHRwc2V1ZG9DbGFzcyxc
blx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBzZXVkb0NsYXNz
VmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXtcblx0
XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0XHRjb21iaW5h
dG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7XG5cdH1cblxuXHRp
ZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29tYmluYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRcdHZhciBjdXJy
ZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTtcblx0XHRp
ZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdKVxuXHRcdFx0
Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VDb21iaW5hdG9yID0gcmV2
ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNlcGFyYXRvclsrK2NvbWJp
bmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFnOiAnKid9O1xuXHR9XG5c
blx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhd
W2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJlbnRQYXJzZWQu
dGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGlk
KXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5c
blx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBs
YWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc0xpc3Qp
IGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNs
YXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xh
c3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzZXMucHVzaCh7
XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVnRXhwKCcoXnxc
XFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxzfCQpJylcblx0XHR9KTtc
blxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNl
dWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBzZXVkb0NsYXNz
VmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBsYWNlKHJlVW5l
c2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3Vy
cmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1ZG9zLnB1c2go
e1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSxcblx0XHRc
dHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNldWRvTWFya2VyLmxlbmd0
aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAoYXR0
cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycp
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4cDtcblxuXHRc
dHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDogcmVnZXhwID0g
bmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICAgICAg
ICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAg
ICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAgICApOyBicmVh
aztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICcoXnxcXFxccyknKyBl
c2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyApOyBicmVhaztcblx0XHRc
dGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhw
KGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAgJz0nIDog
dGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09
IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZihhdHRyaWJ1
dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0nIDogdGVzdCA9
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9IHZhbHVl
O1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYg
KGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJpYnV0ZU9wZXJh
dG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxu
XHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1
ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlmICghY3VycmVudFBhcnNl
ZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtleSxcblx0XHRc
dG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVlOiBhdHRyaWJ1dGVWYWx1
ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0cmV0dXJuICcnO1xufTtc
blxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGlj
ay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gcGFyc2UoZXhwcmVzc2lv
bik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5cbmlmICghdGhp
cy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0
eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiov
dGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRpb246IFRoZSBu
ZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlkZXM6IFNsaWNrLkZpbmRl
clxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZh
ciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRvU3RyaW5nID0gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb25cblxubG9j
YWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4gKC9cXHtcXHMqXFxbbmF0
aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5cbmxvY2FsLmlzWE1MID0g
ZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVyc2lvbikgfHwg
KCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVudCkgPT0gJ1tvYmplY3Qg
WE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xuXG5sb2NhbC5zZXREb2N1
bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1lbnRzIC8gd2lu
ZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJhcG9s
YXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlwZSA9IGRvY3VtZW50Lm5v
ZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50XG5cdGVsc2UgaWYgKG5v
ZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGVcblx0ZWxz
ZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3VtZW50LmRvY3VtZW50OyAv
LyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0aGUgb2xkIGRv
Y3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50KSByZXR1cm47XG5cdHRo
aXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUgZmVh
dHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxuXHR2YXIgcm9vdCA9IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhpcy5nZXRVSURYTUwocm9v
dCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRcdGZlYXR1cmU7
XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRc
dFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0XHRyZXR1cm47
XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7fTtcblxuXHRm
ZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMuaXNY
TUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9IGZlYXR1cmVz
LnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxuXHQ9IGZlYXR1
cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNOXG5cdD0gZmVh
dHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRl
UVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0YXJT
ZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04sIGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjtcblxu
XHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0dmFyIHRlc3ROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290ID0gZG9jdW1l
bnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHJv
b3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxuXHQvLyBvbiBub24tSFRN
TCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsgcHJv
cGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9XCInK2lkKydc
Ij48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZlYXR1cmVzLmlzSFRNTERv
Y3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykg
Zm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMgPSAodGVzdE5vZGUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRcdC8vIElFIHJldHVybnMg
Y2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1M
ID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChzZWxlY3RlZCAmJiAhIXNl
bGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtc
blx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3Rh
clNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8vIElFIHJldHVy
bnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9yIGdldEVsZW1l
bnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5u
ZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1cIicrIGlkICsnXCI+PC9i
Pic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdGlm
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8gU2FmYXJpIDMu
MiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0cnkge1xuXHRc
dFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxhIGNsYXNzPVwi
YlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJyku
bGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9ICdiJztcblx0
XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxu
XHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVjdHMg
dGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48YSBjbGFzcz1cImYgYiBh
XCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3ROb2Rl
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVudHNC
eUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtcblx0XHR9XG5cblx0XHRp
ZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJldHVybnMgY2xv
c2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZvciBz
b21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
J2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUucXVlcnlTZWxlY3RvckFs
bCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxlY3Rl
ZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkg
PT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBxdWVy
eVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGVcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIk1pWFwi
PjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5vZGUu
cXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxu
XHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25zIG9u
IHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRN
TCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29wdGlvbj48L3Nl
bGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBID0gKHRlc3ROb2RlLnF1
ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xuXHRcdFx0fSBjYXRjaCAo
ZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0clsq
XiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0
XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xuXHRcdFx0XHRm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9y
QWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQgeCwg
Zm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXRcblx0
XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj1cInNcIj48
aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9rZW5Gb3JtQXR0cmlidXRl
R2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAhPSAn
cycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVzU2VsZWN0b3Ig
ZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3QubWF0
Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290Lm1vek1hdGNoZXNTZWxl
Y3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVhdHVyZXMubmF0
aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRy
b3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxuXHRcdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpO1xuXHRcdFx0
ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRvID0gMTtcblx0XHRkZWxl
dGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlE
SFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURY
TUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5cdHRlc3ROb2Rl
ID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tl
bkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1l
dGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0aG9kKSByZXR1
cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/IGF0dHJpYnV0
ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRc
dHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0cmV0dXJuICht
ZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblx0
fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1dGUgPSAocm9v
dCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkpID8gZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTtc
blx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5vZGUuZ2V0QXR0
cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNp
ZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5zXG5cdC8vIEZJ
WE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHht
bCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5hdGl2ZURvY3VtZW50Q29u
dGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1bWVudC5jb250YWlucyk7
XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2ZURv
Y3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNv
bnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFuYXRp
dmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdC8vIElF
OCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0XHRyZXR1cm4gY29udGV4
dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKHJvb3QgJiYgcm9vdC5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRy
ZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0aWYg
KG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtcblx0
XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRcdHJldHVybiBmYWxzZTtc
blx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8vIGNyZWRpdHMgdG8gU2l6
emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9
IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlm
ICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0
ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBpbiByb290KSA/
IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJbmRl
eCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xu
XHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICgh
YS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwO1xuXHRcdHZhciBh
UmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0KGEsIDApO1xuXHRcdGFS
YW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xuXHRcdGJSYW5n
ZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtcblxuXHRyb290ID0gbnVs
bDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVhdHVyZV0gPSBm
ZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRob2RcblxudmFyIHJlU2lt
cGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQvLFxuXHRyZUVtcHR5QXR0
cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0cXNhRmFpbEV4cENhY2hl
ID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFw
cGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8gbnVs
bCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kO1xuXHRl
bHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRleHQuZG9jdW1lbnQ7IC8v
IENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3VtZW50XG5cdGVsc2UgaWYg
KCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBcblxuXHR2YXIg
cGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhpcy51bmlxdWVzID0ge30s
XG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxuXHRcdGNvbnRl
eHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5cblx0aWYgKHRoaXMuZG9j
dW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9j
dW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lkIGR1cGxpY2F0
aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRpZiAoaGFzT3RoZXJzKSBm
b3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQoZm91bmRbaV0p
XSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRpZiAodHlwZW9mIGV4cHJl
c3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3RyaW5nXG5cblx0XHQvKjxz
aW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBsZVNlbGVjdG9yID0gZXhw
cmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1wbGVTZWxlY3RvcnM6IGlm
IChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3Rvclsx
XSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRpZiAoIXN5bWJv
bCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlROKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwg
bnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5w
dXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcjJyl7
XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1bWVu
dCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0gY29udGV4dC5nZXRFbGVt
ZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7XG5cdFx0XHRc
dGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVW
YWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChmaXJzdCkg
cmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxuXHRcdFx0fSBlbHNlIGlm
IChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwg
KCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04pICYm
IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRc
dFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5HRUJD
Til7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobmFt
ZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRc
dFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoQ2xh
c3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkgKyco
XFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRc
dFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0XHRpZiAoIShj
bGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTtcblx0XHRc
dFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhl
cnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRc
dFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDtcblxu
XHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXG5cdFx0Lyo8cXVl
cnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9yOiBpZiAoY29udGV4dC5x
dWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50XG5cdFx0
XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0XHQvL1RPRE86IG9ubHkg
c2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRcdFx0XHR8fCB0
aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5DaGVja2VkUVNB
ICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0XHR8fCAodGhp
cy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmlidXRlLnRlc3QoZXhwcmVz
c2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFjb250
ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11bHRpcGxlIGV4
cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBzaW5jZSB3ZSBjdXJyZW50
bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNzaW9u
IHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTFcblx0
XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJyZWFrIHF1ZXJ5
U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24sIF9jb250ZXh0
ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5c
dFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRcdC8vIGNyZWRpdHMgdG8g
QW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1dGUo
J2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2NvbnRleHQuc2V0QXR0cmli
dXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNraWQg
KyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0LnBhcmVudE5v
ZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIGNv
bnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtcblx0XHRcdFx0ZWxzZSBu
b2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7XG5cdFx0XHR9IGNh
dGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dID0gMTtcblx0XHRc
dFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmICgh
Y29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50SWQpIF9jb250ZXh0LnNl
dEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2NvbnRleHQucmVt
b3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBfY29udGV4dDtcblx0XHRc
dFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSkgZm9y
IChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUg
PiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3Vu
ZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytd
Oyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUp
XSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3F1
ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNl
KGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kO1xuXHR9
IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Npb25c
blx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8vIGV4
cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFyc2VkID0gZXhwcmVzc2lv
bjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50IHx8
IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGVcblx0XHQoZm91
bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjtcblx0XHRy
ZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1cm4gZm91bmQ7
XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+
Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNcblxuXHR0aGlz
LnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBl
ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRoLXBzZXVkby1z
ZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFwcGVuZCBpcyBu
dWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGV4cHJlc3Np
b24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2ggPSAoIWhhc090
aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVzc2lv
bnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDtcblxu
XHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0IGVuZ2luZVxu
XG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0LCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1zLCBjdXJyZW50
RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhw
cmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBl
eHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50RXhw
cmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0b3I6JyArIGN1
cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRpbnVl
IHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1cnJl
bnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtcblx0XHRpZCAgICAgICAg
ID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xpc3Q7
XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0XHRhdHRyaWJ1dGVzID0g
Y3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBzZXVk
b3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoIC0g
MSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRpZiAobGFzdEJpdCl7XG5c
dFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9IGZvdW5kO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRoaXMuZm91bmQg
PSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0aGlzW2NvbWJpbmF0b3Jd
KGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlz
dCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAobSA9
IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtcblx0XHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxuXG5cdFx0Y3Vy
cmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3VsZCBzb3J0IGlmIHRoZXJl
IGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4cHJlc3Npb25z
LlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkpIHRo
aXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVsbCkg
OiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAxO1xubG9jYWwudWlkayA9
ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUpe1xu
XHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtcblx0aWYgKCF1aWQpe1xu
XHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlkaywg
dWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0VUlESFRNTCA9IGZ1bmN0
aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVlTnVt
YmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9jdW1l
bnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVzdWx0
cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7XG5cdHJlc3Vs
dHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4v
Kjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwu
Y2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xcZCopPyhbYS16XSsp
PyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihhcmd1
bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTtcblx0
aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwg
ZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChhID09ICctJykgYSA9IC0x
O1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1cblx0XHQoc3BlY2lhbCA9
PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcpXHQ/IHthOiAy
LCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjogMH0gOiB7YTog
MCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9IHBhcnNlZCk7
XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwgc2libGluZywg
cG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xu
XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAoIXRoaXNbcG9zaXRpb25z
XVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAo
IXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFyZW50W2NoaWxkXSwgY291
bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGUu
bm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZU5hbWUgIT0gbm9k
ZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChl
bCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZVR5cGUgIT0g
MSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0g
PSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0
fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztcblx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5USEFyZ3VtZW50KGFyZ3Vt
ZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBhID0gcGFyc2Vk
LmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07XG5cdFx0aWYgKGEg
PT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5cdFx0XHRpZiAocG9zIDwg
YikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBvcykgcmV0dXJu
IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7XG5cdH07XG59
O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xu
fTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdGlm
ICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1ZXNbdWlkXSA9
IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59O1xuXG5sb2NhbC5tYXRj
aE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0
dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVwbGFj
ZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywgJ1skMT1cIiQyXCJdJykp
O1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZhciBwYXJzZWQgPSB0aGlz
LlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiB0cnVlO1xuXG5c
dC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJlc3Npb25zID0gcGFyc2Vk
LmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Npb247
XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpe1xuXHRcdFx0dmFyIGV4
cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihu
b2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJDYXNl
KCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykpIHJl
dHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRcdH1cblx0fVxuXG5cdGlm
IChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBpdGVtO1xuXHRm
b3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChpdGVtID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5tYXRjaFBzZXVk
byA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFyIHBzZXVkb05hbWUgPSAn
cHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNbcHNl
dWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRBdHRy
aWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8gYXJndW1lbnQgPT0gYXR0
cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9yID0gZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0
YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gbm9kZS5ub2Rl
TmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRpZiAodGFnID09ICcqJyl7
XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBjb21t
ZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG5vZGVO
YW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpZCAmJiBub2Rl
LmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBpLCBwYXJ0
LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0aWYgKCEoY2xz
ICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRp
ZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTspe1xuXHRcdHBh
cnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVzdCh0
aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9zKSBmb3IgKGkg
PSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07XG5cdFx0aWYg
KCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJuIGZh
bHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJpbmF0b3JzID0ge1xuXG5c
dCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxuXHRcdHZhciBp
LCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERvY3VtZW50KXtcblx0XHRc
dGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMuaWRH
ZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUg
IT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyB3
aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlmIHRoZXJlcyBq
dXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxsIGJlIGEgY29s
bGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRdO1xuXHRcdFx0XHRcdGlm
ICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBdKSBjaGlsZHJl
biA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2kr
K107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lk
Jyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQpe1xu
XHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWl0ZW0p
e1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBkb20gd2UgcmV0dXJuLCBl
bHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJZCBsYWJlbFxuXHRcdFx0
XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjtcblx0XHRcdFx0
XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCAh
PT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuO1xuXHRcdFx0XHR0
aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYgKGNsYXNzZXMg
JiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0
XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0Lmpv
aW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJy
ZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytd
OykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7XG5cdFx0XHRj
aGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcblx0XHRcdGlmICghKGNo
aWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRcdFx0aWYgKCF0
aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZvciAoaSA9IDA7IGl0ZW0g
PSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRyZW5c
blx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRpZiAobm9kZS5u
b2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7XG5c
dH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5c
dFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUuZmlyc3RD
aGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlz
LnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzXG5c
dFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9k
ZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7
XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRV
bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnKysnOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29tYmluYXRvcjorJ10obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBzaWJsaW5nc1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1bmN0aW9uKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBhbGwgcGFyZW50
IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2Rl
KSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IHBh
cmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0aWYgKG5v
ZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5jdGlvbihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0JyFeJzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGxh
c3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRc
dFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOiEr
J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxu
XHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5v
ZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250
aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlz
LmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMgaW4gY29tYmluYXRvcnMp
IGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52YXIgcHNldWRv
cyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2VtcHR5JzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHJldHVybiAhKGNo
aWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9kZS50
ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3QnOiBmdW5jdGlvbihub2Rl
LCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUsIGV4cHJlc3Np
b24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpe1xuXHRcdHJl
dHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhPZih0
ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LWNo
aWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGlu
ZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2
ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChw
cmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5c
dFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBlID09
IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjxudGgtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8o
J2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5cblx0J250aC1sYXN0LWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5n
JywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1
ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlwZScsIHRydWUpLFxuXG5c
dCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAn
cHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0J2luZGV4Jzog
ZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxk
J10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBmdW5jdGlvbihu
b2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybicpO1xu
XHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8L250aC1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2ZpcnN0
LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVO
YW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0
fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1l
ID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFy
IHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChwcmV2
ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFtZSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBm
YWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2YtdHlwZS1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnZGlzYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQn
Y2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmNoZWNrZWQgfHwgbm9k
ZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1
cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09
IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUobm9k
ZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdzZWxlY3RlZCc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0Lyo8L3BzZXVk
by1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3BzZXVk
bzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNcblxudmFyIGF0
dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5cdCdmb3InOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1sRm9y
IDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdocmVmJzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVm
JywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4dCA6
IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRleCc6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ3Rh
YmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3Bl
Y2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQndHlw
ZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG5c
dH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUg
PSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVycy5NQVhMRU5HVEggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4bGVuZ3RoO1xu
XG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRlclxuXG5TbGlj
ay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7XG59O1xuXG5TbGlj
ay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5cdHJldHVybiBsb2NhbC5z
ZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4vLyBTbGljayBj
b250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVy
LCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtcblx0cmV0dXJuIGxvY2Fs
LmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgZ2V0
dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2Nh
bC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0ZShub2RlLCBu
YW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0ZShu
b2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xpY2subWF0Y2ggPSBmdW5j
dGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2VsZWN0b3IpKSByZXR1cm4g
ZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0cnVl
O1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLm1hdGNoTm9kZShu
b2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgYWNjZXNzb3JcblxuU2xp
Y2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2su
bG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5cdHJldHVybiBsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNldWRvIGFjY2Vzc29yXG5c
blNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWxbJ3BzZXVk
bzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0dXJuIGZuLmNh
bGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxv
b2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRvID0gbG9jYWxbJ3BzZXVk
bzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7XG5c
dFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIG51
bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3JcblxuU2xpY2sub3ZlcnJpZGUg
PSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUocmVnZXhwLCBmbik7XG5c
dHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDtcblxuU2xpY2su
dWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9kZSk7
XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHko
Lyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6
IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnRcblxuZGVz
Y3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMuIENv
bnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4g
aGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBl
YXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1bmN0
aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJdXG5cbnByb3Zp
ZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc11cblxuLi4u
XG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJvcHMp
e1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9yc1t0YWddO1xuXHRpZiAo
a29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0eXBlb2YgdGFn
ICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMpO1xuXG5cdGlm
ICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0rJC8pLnRlc3QodGFnKSl7
XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07XG5c
dFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFyc2VkLnRhZztcblx0XHRp
ZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlkO1xu
XG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztcblx0XHRpZiAoYXR0cmli
dXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRcdGlmIChwcm9wc1thdHRy
LmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRyLnZhbHVlICE9IG51bGwg
JiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9IGF0dHIudmFsdWU7XG5c
dFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJvcHNbYXR0ci5r
ZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAmJiBwcm9wc1sn
Y2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xpc3Quam9pbign
ICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQodGFnLCBwcm9wcyk7XG59
O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnByb3RvdHlwZSA9IEJyb3dz
ZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdyYXBw
aW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9uKGZpcmVFdmVu
dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdHJldHVybiBmaXJl
RXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0fSkoRWxlbWVudC5wcm90
b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJy
b3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVbbmFtZV0pIHJldHVybjtc
blxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJl
c3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0cnVlO1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1l
bnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVudFtuYW1lXS5hcHBseShl
bGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5cGVPZihyZXN1
bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxlbWVudHMpID8gbmV3IEVs
ZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVtZW50cy5pbXBsZW1lbnQo
b2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucGFyZW50ID0g
T2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCckY29uc3RydWN0b3InOiBF
bGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgnZWxlbWVudCcpLmhpZGUo
KVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdFx0
RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xufVxuXG5FbGVtZW50LkNv
bnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUnLCBm
dW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtcblx0XHRw
cm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24ob2JqKXtcblx0
XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHByb3BzID0g
cGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBhcmFtcy5pZnJhbWUpIGlm
cmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIgb25sb2FkID0gcHJvcHMu
b25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9ubG9hZDtcblx0cHJvcHMu
aWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUgPyAoaWZyYW1l
LmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51bmlxdWVJRCgpXS5waWNr
KCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMpO1xu
XG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5jYWxsKGlmcmFtZS5jb250
ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1twcm9wcy5pZF0pIG9uTG9h
ZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG5cdHJldHVy
biBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0aW9u
KG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFyIHVuaXF1ZXMg
PSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0
XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlmICghdW5pcXVlc1t1aWRd
KXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wdXNoKG5vZGUp
O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJvdG90eXBlID0ge2xlbmd0
aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5cGUoJ0VsZW1lbnRzJywg
RWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJpbmQp
e1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRz
KEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVuY3Rp
b24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRcdH0gOiBmaWx0
ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07XG5cdFx0
fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9LnByb3RlY3QoKSxcblxu
XHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRl
bSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgaXRlbXMucHVz
aChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5
KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5jdGlvbigpe1xu
XHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0g
PSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkpIG5ld0Vs
ZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVudHMucHVzaChpdGVtKTtc
blx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRhcHBl
bmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sbGVj
dGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0
d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVuY3Rpb24oKXtcblxuLy8g
RkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycw
JzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpO1xu
aWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9u
KCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9IHNwbGljZS5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3RoKSBk
ZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59LnByb3RlY3QoKSk7XG5c
bkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1lKXtcblx0RWxlbWVudHMu
aW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWlycm9yKEVsZW1lbnRzKTtc
blxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUw7XG50cnkge1xuXHRj
cmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlucHV0
IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5cbnZhciBlc2NhcGVRdW90
ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwpLnJlcGxhY2UoLyYvZywg
JyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8qPC9sdElFOD4qL1xuXG4v
KjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1l
bnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkg
e1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0
ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztc
bn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdFbGVt
ZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMpe1xuXHRcdFx0aWYgKHBy
b3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVja2Vk
O1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PSAn
cmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7XG5cdFx0
XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNoYW5n
aW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFjYW5DaGFuZ2VTdHlsZUhU
TUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVFbGVtZW50LnNldEF0dHJp
YnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkgZGVsZXRl
IHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxlRWxlbWVudCkuc2V0KHBy
b3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJRTg+Ki8vLyBG
aXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBpbiBJRSA8IDhcblx0XHRc
dGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAnPCcgKyB0YWc7
XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwiJyArIGVzY2FwZVF1b3Rl
cyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSB0YWcgKz0gJyB0
eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7XG5cdFx0XHRcdHRhZyAr
PSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
dHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtcblx0fVxuXG59KTtcblxu
fSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRvdyk7XG5TbGljay51aWRP
Zihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3VGV4dE5vZGU6IGZ1
bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHR9
LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy53aW5kb3c7XG5cdH0s
XG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0ge1xuXG5cdFx0XHRzdHJp
bmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlkID0gU2xpY2suZmluZChk
b2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7XG5cdFx0XHRcdHJldHVy
biAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0XHR9LFxuXG5c
dFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRcdFx0U2xpY2sudWlkT2Yo
ZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAmJiAhKC9eKD86b2JqZWN0
fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZpcmVFdmVudCA9
IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBvciBl
bHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50
KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZlbnQpO1xuXHRcdFx0XHRc
dH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0XHRcdG9iamVjdDogZnVu
Y3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmoudG9FbGVtZW50KSByZXR1
cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7XG5cdFx0XHRcdHJl
dHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVzLnRleHRub2RlID0gdHlw
ZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3VtZW50ID0gZnVuY3Rpb24o
emVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9u
KGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51bmlx
dWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKGVsKTtcblx0XHRc
dHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRv
Y3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xuXG5pZiAod2luZG93LiQg
PT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7XG5cdHJldHVy
biBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7XG5cbldpbmRvdy5pbXBs
ZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmRv
Y3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcs
IHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIFNs
aWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9LFxuXG5cdGdl
dEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChT
bGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtcblxudmFyIGNvbnRhaW5z
ID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJuIFNsaWNrLmNvbnRhaW5z
KHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50
LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5cblxuXG4vLyB0cmVlIHdh
bGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjb21i
aW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjtcblxuXHRleHBy
ZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Npb24pKTtcblxuXHR2YXIg
ZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gZXhw
cmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0b3Ig
PSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxuT2JqZWN0LmZvckVh
Y2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4nLFxuXHRnZXRQYXJlbnQ6
ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1l
bnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVt
ZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0p
O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0QWxsUHJldmlv
dXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGlsZHJlbjogJz4nLFxuXHRn
ZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7
XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRGaXJzdDogZnVuY3Rp
b24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlz
LCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtcblx0fSxcblxuXHRnZXRM
YXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2su
c2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFzdCgp
KTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3du
ZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRnZXRFbGVtZW50QnlJZDog
ZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsICcj
JyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpKTtcblx0fSxcblxuXHRt
YXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFleHByZXNzaW9uIHx8IFNs
aWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xuXG5cblxuaWYgKHdpbmRv
dy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0aW9uKHNlbGVjdG9yKXtc
blx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9
PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3Rvciwg
bmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVyYWJsZShzZWxlY3Rvcikp
IHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJldHVybiBuZXcgRWxlbWVu
dHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFyIGluc2VydGVycyA9IHtc
blxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9y
ZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oY29udGV4dCwg
ZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAo
cGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQubmV4dFNpYmxpbmcp
O1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxl
bWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0aW9uKGNvbnRl
eHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQu
Zmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lkZSA9IGluc2VydGVycy5i
b3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZhciBwcm9wZXJ0
eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8vIHByb3BlcnRpZXNcblxu
dmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQndHlwZScsICd2YWx1ZScs
ICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5n
JywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3BhbicsICd0YWJJbmRleCcsICd1
c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJvcGVydHkudG9M
b3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwgPSAnaW5uZXJI
VE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS50
ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENvbnRlbnQnO1xuXG5PYmpl
Y3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkpe1xuXHRwcm9wZXJ0eVNl
dHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW3JlYWxdID0gdmFs
dWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+Ki9cbnByb3BlcnR5U2V0
dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7
XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2RlLnNldCgnaHRtbCcsIHZh
bHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlO1xuXHR9O1xufSko
cHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9IChmdW5jdGlv
bihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlLmdl
dCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdldHRlcihub2RlKTtcblx0
fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4vLyBCb29sZWFu
c1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNs
YXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFkT25seScsICdt
dWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZlcicsICdkZWZhdWx0Q2hl
Y2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXknLFxuXHQnbG9vcCdcbl07
XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24oYm9v
bCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVhbnNbbG93ZXJd
ID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2xv
d2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVbYm9vbF07XG5cdH07XG59
KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHByb3BlcnR5U2V0dGVycywg
e1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2NsYXNzTmFtZScg
aW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykgOiBub2RlLnNldEF0dHJp
YnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9uKG5vZGUsIHZh
bHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1sRm9yID0gdmFsdWUgOiBu
b2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0
aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1RleHQg
PSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTtcblx0fSxcblxuXHQn
dmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9ICh2YWx1ZSAh
PSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3BlcnR5R2V0dGVyc1snY2xh
c3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUpID8g
bm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xufTtc
blxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRv
bicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRyeSB7IGVsLnR5
cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicpIHBy
b3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRub2RlLnNldEF0
dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4vKiA8L3dlYmtpdD4gKi9c
blxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRN
TCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7
XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcg
PSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdp
bjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31c
blx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZhciBpbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwgaHRtbDVJbnB1
dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0JztcbmlucHV0LnR5cGUgPSAn
c3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0JztcblxuLy8g
IzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlpbmcgdG8gdXNl
IGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xuXHRpbnB1dC50
eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1dC50eXBlID09ICdlbWFp
bCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0aWxlSW5wdXRW
YWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rp
b24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52YWx1ZTtcblx0
XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBjYXRjaCAo
ZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi9cblxu
LyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRpdil7
XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChkaXYuZ2V0QXR0cmlidXRl
KCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0dGVzdC5pbm5l
ckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhcIiB2YWx1ZT1cInRoZSB1
bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUodHJ1ZSkuZmly
c3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNzTGlzdCA9ICEhZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIgY2xhc3NlcyA9IGZ1bmN0
aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJykuY2xl
YW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBjbGFzc05hbWVzLmZpbHRl
cihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUgIT09ICcnICYmICF1bmlx
dWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7XG5c
dH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMu
Y2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NMaXN0ID0gZnVu
Y3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbn07XG5cbkVsZW1l
bnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xu
XHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dGVXaGl0ZUxpc3Q7XG5cdFx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRlTGlzdCA9IHRoaXMucmV0
cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHQvKiA8L2x0SUU5PiAqL1xu
XG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRl
KG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dldEF0
dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXTtcblx0XHRcdFx0LyogPC9s
dElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5hbWUs
ICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRl
c0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0
LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5cdFx0Zm9yICh2YXIgYXR0
cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1
dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5
OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0ZXJzW25hbWUu
dG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdldHRlcih0aGlzKTtcblx0
XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKXtcblx0XHRcdHZh
ciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVXaGl0ZUxpc3Qg
PSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywge30pO1xuXHRcdFx0aWYgKCFh
dHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0dHJpYnV0ZVdo
aXRlTGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MO1xuXHRc
dFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmluZCBtZW50aW9uIG9mIGF0
dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwgb3V0ZXIuc2VhcmNoKC9c
XC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJuIG51
bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHR9XG5c
dFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0dHJp
YnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNrLmhhc0F0dHJp
YnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxuXG5cdGdldFByb3BlcnRp
ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50cyk7
XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0ZShh
cmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0
dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1vdmVQ
cm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlv
bihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3By
b3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNhbGwo
dGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5cdH0ub3Zlcmxv
YWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9
IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHByb3BlcnR5ICYmIHByb3Bl
cnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5KHBy
b3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKHByb3Ape1xu
XHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVy
dHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0aGlz
LnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhhc0Ns
YXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiB0aGlz
LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlzdCwgdGhpcyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHRoaXMu
Y2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSkuam9p
bignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBoYXNDbGFz
c0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JF
YWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDog
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXModGhpcy5j
bGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNzTmFtZXMuZXJh
c2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2luKCcg
Jyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGNs
YXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhh
c0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFkZENsYXNzKGNs
YXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRvcHQ6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9
IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXHRc
dGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xu
XHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1ZSk7XG5cdFx0
XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblxuXHRc
dGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7XG5cdFx0
cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUodGV4dCksIHdo
ZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVy
c1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0
aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7XG5c
dFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9kZS5yZXBsYWNl
Q2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBzOiBmdW5j
dGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdHJl
dHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5cblx0Z2V0U2Vs
ZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkgMy4y
LjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQodGhpcy5vcHRpb25zKS5m
aWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQ7XG5c
dFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHF1
ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4
dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBlID0gZWwudHlwZTtcblx0
XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8IHR5
cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJldHVy
bjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8gZWwu
Z2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0Ly8gSUVcblx0XHRcdFx0
cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkgOiAoKHR5cGUg
PT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51bGwg
OiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQodmFsdWUpLmVhY2goZnVu
Y3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5
U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2RlVVJJ
Q29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHF1ZXJ5U3Ry
aW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5cbnZhciBhcHBl
bmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0ZXI6ICdhZnRl
ckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVnaW4nLFxuXHRp
bnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCgnYXBwZW5kSFRNTCcs
ICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkg
PyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRIVE1MKGFwcGVu
ZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4gdGhpcztcbn0g
OiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdics
IHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsXG5cdFx0ZnJh
Z21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0dXJuIHRoaXM7
XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVu
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZHJl
bltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShmcmFn
bWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0ZWQgPSB7fSwg
c3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0dXJuIChzdG9y
YWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52YXIgY2xlYW4gPSBmdW5j
dGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRpZiAoaXRlbS5y
ZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChpdGVtLmNsZWFyQXR0cmli
dXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxsKXtcblx0XHRk
ZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtcblx0fVxuXHRy
ZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywgb3B0
aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGlsZHJlbiA9IGNsZWFuKHRo
aXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXkuZWFjaChjaGlsZHJlbiwg
Y2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0
fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252ZXJ0KHRoaXMuY2hpbGRO
b2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBhcmVudE5vZGUpID8gdGhp
cy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0fSxcblxuXHRjbG9uZTog
ZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMgPSBjb250ZW50cyAhPT0g
ZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29udGVudHMpLCBjZSA9IFtj
bG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0XHRcdGNlLmFw
cGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0
XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHR2YXIg
bm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAoIWtlZXBpZCkgbm9kZS5y
ZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKG5vZGUu
Y2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0XHRc
dFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUucmVtb3ZlQXR0
cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUub3B0aW9ucyl7XG5cdFx0
XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9ucztcblx0XHRc
dFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVvW2pd
LnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRc
dHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVtZW50W3Byb3Bd
O1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVnKXtcblx0XHRc
dHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSwgdG8gPSB0aGlz
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZvciAoaSA9IGNvLmxlbmd0
aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRcdH1cblx0XHQv
KjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9XG5cbn0pO1xu
XG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0
YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAod2luZG93LmF0dGFjaEV2
ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0ZWRbU2xpY2su
dWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5l
cikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0
ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAo
dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwg
Zm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyArIHR5
cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRyaWV2ZTogZnVuY3Rpb24o
cHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMp
KSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0ICE9IG51bGwgJiYgcHJv
cCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRcdHJldHVybiBw
cm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9yZTogZnVuY3Rpb24ocHJv
cGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7
XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdl
dChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xuaWYgKHdpbmRvdy5hdHRh
Y2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2MgPSBmdW5jdGlv
bigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlmICh3aW5kb3cu
Q29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2luZG93LnJlbW92ZUxpc3Rl
bmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywg
Z2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGllcyA9IHt9O1xuXG5cblxu
RWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVuY3Rpb24oc3R5bGUpe1xu
XHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5j
dGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07XG5cbkVsZW1l
bnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRp
ZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRcdGlmIChodG1sID09IG51
bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkgPT0gJ2FycmF5JykgaHRt
bCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0aGlzLnN0eWxl
U2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQgPSBo
dG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHR9LFxu
XHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcsICcnKTtcblx0fVxuXG59
O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlubmVy
SFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xuXG4vKjxsdElFOT4qL1xu
Ly8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5lcnNo
aXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgZnJhZ21l
bnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1cHBvcnRzSFRNTDVFbGVt
ZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0
YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJr
IG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8nLnNw
bGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
LCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1lbnQo
dGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5zdXBw
b3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHR2YXIg
dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHR0YWJsZS5pbm5lckhU
TUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7XG59KTtcblxuLyo8bHRG
RjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAnPHRk
PjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJIVE1MID0gKHRy
LmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZGND4qL1xuXG5pZiAoIXN1
cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBvcnRz
SFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0ID0gKGZ1bmN0
aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRcdFx0dGFibGU6IFsxLCAn
PHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxlY3Q+JywgJzwv
c2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48
L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90
Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9ucy50aGVhZCA9IHRyYW5z
bGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRcdHJldHVybiBmdW5jdGlv
bihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQp
IHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0
dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtcblx0XHRcdGlmICghd3Jh
cCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107XG5cdFx0XHRp
ZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxuXHRcdFx0dmFyIGxldmVs
ID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0YXJn
ZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50
LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5lckhUTUwgPSBbd3JhcFsx
XSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRcdFx0d2hpbGUgKGxldmVs
LS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0eSgpLmFkb3B0
KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBm
cmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIgPSBudWxsO1xuXHRc
dH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8qPC9JRT4qL1xu
XG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9y
bScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+PC9z
ZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVtZW50
LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFy
IHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdzZWxlY3QnKSByZXR1cm4g
dGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlz
LmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBvcHRp
b24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUo
J3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQp
ID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKG9wdGlvblZh
bHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0fVxuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0gdGhpcywgdGFnID0gb3B0
aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAnb3B0
aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRpZiAodGFnID09
ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVkKClbMF0pKSByZXR1cm4g
Jyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpO1xu
XHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRp
b24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVsbDtcbi8qPC9sdElFOT4q
L1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmdldEF0dHJp
YnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtcblx0c2V0OiBmdW5jdGlv
bihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9
IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgbnVs
bDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0
cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8L0lFPiovXG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBF
dmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nlci5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwg
QXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlkZXM6IEV2ZW50XG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xudmFyIG5vcm1hbGl6ZVdo
ZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxpemVkO1xuXHRpZiAoZXZl
bnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50LndoZWVsRGVsdGEgJSAxMjAg
PT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVlbERlbHRhIC8gMTI7XG5c
dH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRh
aWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAzID09IDAgPyByYXdBbW91
bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVkO1xufTtc
blxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcsIGZ1
bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2luZG93O1xuXHRldmVudCA9
IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2ZW50
O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1ZTtcblx0dGhp
cy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVudC5jdHJsS2V5
O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRhID0gZXZlbnQubWV0YUtl
eTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xuXHR2YXIgdGFyZ2V0ID0g
ZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFy
Z2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHR0aGlzLnRh
cmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUuaW5kZXhPZigna2V5Jykg
PT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQud2hpY2ggfHwgZXZlbnQu
a2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykgdGhp
cy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5ZG93bicgfHwgdHlwZSA9
PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUgPCAxMjQpIHRoaXMua2V5
ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1ICYmIGNvZGUg
PCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRpZiAodGhpcy5rZXkgPT0g
bnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7
XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2RibGNsaWNrJyB8fCB0
eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ0RPTU1v
dXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0dmFyIGRvYyA9
IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRN
b2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRcdHRoaXMucGFn
ZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIDogZXZl
bnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51
bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNjcm9sbFRvcFxuXHRcdH07
XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBl
dmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVudFgsXG5cdFx0XHR5OiAo
ZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5wYWdlWU9mZnNldCA6IGV2
ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwg
dHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0gbm9y
bWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENsaWNrID0gKGV2ZW50Lndo
aWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0eXBlID09ICdtb3VzZW92
ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0eXBl
ID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUgPT0gJ21vdXNl
b3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIgcmVsYXRlZCA9IGV2ZW50
LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJvbScgOiAndG8nKSArICdF
bGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVkLm5vZGVUeXBlID09IDMp
IHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQg
PSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZS5pbmRleE9m
KCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykgPT0gMCl7XG5cdFx0dGhp
cy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBldmVudC5zY2Fs
ZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXHRcdHRo
aXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2YXIgdG91Y2hl
cyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYgdG91
Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0dGhpcy5wYWdl
ID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlzLmNsaWVudCA9
IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0XHR9XG5cdH1cblxuXHRp
ZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAoIXRoaXMucGFnZSkgdGhp
cy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtcblxuXHRzdG9wOiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0aW9u
KCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0
XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVu
dC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGVsc2Ug
dGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkpe1xuXHRfa2V5
c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01FdmVudC5kZWZpbmVLZXlz
ID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5ET01FdmVudC5k
ZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAnMzcnOiAnbGVmdCcsICcz
OSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNrc3Bh
Y2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzogJ2VudGVyJ1xufSk7XG5c
bn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50XG5cbmRlc2Ny
aXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBldmVudHMu
IFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgY3VzdG9t
IEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92aWRlczogRWxlbWVudC5F
dmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50LlByb3BlcnRpZXMuZXZl
bnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRFdmVudHMoZXZlbnRzKTtc
bn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhp
cy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRzW3R5cGVdKSBldmVudHNb
dHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChldmVudHNbdHlwZV0ua2V5
cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLnB1c2go
Zm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBFbGVtZW50LkV2
ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5c
dFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2Fs
bCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7XG5cdFx0XHRc
dGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRpZiAoY3VzdG9tLmNvbmRp
dGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQp
O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYg
KGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNh
bGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVuY3Rpb24oKXtcblx0XHRc
dHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2ZW50ID0gRWxl
bWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVudCl7XG5cdFx0
XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0V2luZG93KCkp
O1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNlKSBl
dmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkZExpc3RlbmVy
KHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0XHRldmVudHNbdHlwZV0u
dmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZl
bnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgn
ZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7
XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGluZGV4ID0gbGlzdC5rZXlz
LmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFy
IHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LmtleXNbaW5kZXhd
O1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFyIGN1c3RvbSA9IEVsZW1l
bnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vblJl
bW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1
c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlz
LCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkg
PyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpcztc
blx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgZXZl
bnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNbZXZlbnRdKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5c
dFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0XHRc
dGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVd
KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0YWNoZWQgPSB0aGlzLnJl
dHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpcztcblx0XHRp
ZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3ZlRXZl
bnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpO1xuXHRcdH0gZWxzZSBp
ZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVudHNdLmtleXMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBmbik7XG5cdFx0
XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRl
bGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYg
KCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5
LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZu
KXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0
ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7XG5cdFx0ZnJv
bSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBmcm9tLnJldHJpZXZlKCdl
dmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCF0eXBlKXtc
blx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJv
bSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5cdFx0XHRldmVu
dHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5hZGRFdmVudCh0
eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGljazogMiwgZGJsY2xpY2s6
IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0
dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8vbW91
c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxl
Y3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50XG5cdGtleWRvd246IDIs
IGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmllbnRhdGlvbmNoYW5nZTog
MiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6IDIs
IHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVjaGFu
Z2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJsdXI6IDIsIGNo
YW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBwYXN0ZTogMiwgaW5wdXQ6
IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9hZDog
MiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRlY2hh
bmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNob3c6
IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBhYm9ydDogMSwgc2Nyb2xs
OiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVudHMgPSB7XG5cdG1vdXNl
d2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hlZWwnIDogJ29u
bW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAnRE9NTW91c2VTY3JvbGwn
XG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIHJlbGF0ZWQg
PSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBudWxsKSByZXR1cm4gdHJ1
ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAocmVsYXRlZCAhPSB0
aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9jdW1l
bnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlmICgnb25tb3VzZWVudGVy
JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5t
b3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2ZSA9IDI7XG5cdEVsZW1l
bnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRFbGVtZW50LkV2ZW50cy5t
b3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRcdGJhc2U6ICdt
b3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxuXG4vKjxsdElFOT4qL1xu
aWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLnBy
b3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdlID0ge1xuXHRcdGJhc2U6
IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0XHRcdHJldHVybiAo
dGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09
ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJztcblx0XHR9LFxuXHRc
dGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUgIT0g
J3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0gJ2NoZWNrZWQn
O1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVs
ZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgZm9yIG1v
cmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5E
ZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZXZlbnRMaXN0ZW5l
clN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5FbGVtZW50Lk5hdGl2ZUV2
ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNvdXQgPSAyO1xuXG52YXIg
YnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHR3
aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAobWF0Y2godGFyZ2V0LCBl
dmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7XG5cdFx0dGFyZ2V0
ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59O1xuXG52YXIgbWFwID0g
e1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7XG5cdFx0YmFz
ZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5c
dH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3VwcG9y
dCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVyOiB7XG5cdFx0
YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9jdXNvdXQnLFxuXHRcdGNh
cHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0gJyRkZWxlZ2F0
aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cblx0cmV0dXJuIHtc
blxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24oc2VsZiwgdWlk
KXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5l
cnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFyIGkg
PSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRoZSBmb3JtIG1heSBoYXZl
IGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQvLyByZW1vdmVF
dmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVudCB3YXNcblx0XHRcdFx0
Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVu
dCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7XG5cdFx0XHR9
XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwg
dGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0LmdldCgndGFnJykgPT0gJ2Zv
cm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtcblx0XHRcdGlm
ICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5yZXRyaWV2ZShf
a2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxpc3RlbmVyID0gbGlzdGVu
ZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1zID0gbGlzdGVu
ZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYgKGZvcm1zLmluZGV4T2Yo
Zm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5cblx0XHRcdHZh
ciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVudCh0eXBlLCBf
Zm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVuZXJzW3VpZF0gPSBsaXN0
ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywgbGlzdGVu
ZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9uKHR5
cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0XHR2YXIgZXZlbnRzID0g
e2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2ZW50cyk7XG5c
dFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0
YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0
XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xufTtcblxuaWYg
KCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHtcblx0c3VibWl0OiBm
b3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2VydmVyKCdyZXNldCcpLFxu
XHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlucHV0T2JzZXJ2
ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJvdG8gPSBFbGVtZW50LnBy
b3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0cmVtb3ZlRXZlbnQgPSBw
cm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2Qpe1xu
XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlmICh0eXBlLmlu
ZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0eXBlKS5leHByZXNzaW9u
c1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxheScpIHJldHVy
biBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIG5ld1R5cGUg
PSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24o
cHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtleSArIChwc2V1ZG8udmFs
dWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0fSk7XG5cdFx0b2xkLmNh
bGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBuZXdUeXBl
LCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtcblxudmFyIGRlbGVnYXRp
b24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7XG5cdFx0dmFy
IHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9y
YWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQgaW4gc3RvcmVkKXtcblx0
XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191aWRdLm1hdGNoID09IG1h
dGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBlLCBfbWF0Y2gg
PSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0dHlwZSA9IF9t
YXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0KXtcblx0XHRc
dHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxuXHRcdHZhciBl
bGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9tYXAuY29uZGl0
aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0aW9uKXtcblx0XHRcdHZh
ciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRF
dmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnQpe1xu
XHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRpb24uY2FsbCh0
YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGYgPSB0
aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVsZWdhdG9yID0gX21hcC5s
aXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2
ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRh
cmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpO1xu
XHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2
ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRh
cmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHR9O1xu
XG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRdID0ge1xuXHRc
dFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0b3I6IGRlbGVn
YXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0cmV0dXJuIGFk
ZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHR9LFxu
XG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQpe1xuXHRcdHZh
ciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3Rv
cmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0XHRpZiAoX3Vp
ZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0uZGVs
ZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9tYXAuYmFzZSB8
fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3VpZCk7
XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9y
ZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3Is
IF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRcdGlmIChmbikg
Zm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRp
ZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5yZW1v
dmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpO1xuXHRcdH0gZWxzZSBm
b3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlm
IChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlw
ZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xu
XHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRkRXZlbnQpLFxuXHRyZW1v
dmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpXG59KTtc
blxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxlXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxl
bWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVudC5TdHlsZVxuXG4uLi5c
biovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsO1xuXG4v
LzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0eWxl
cyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUuY29sb3IgPSBudWxsO1xu
dmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJztcblxuLy8g
Y2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxlcyBp
biB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgtc3R5
bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJztcbmVsLnN0eWxlLmJv
cmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0eWxl
LmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZhciBoYXNHZXRD
b21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxcblx0c3VwcG9ydEJvcmRl
clJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJvcmRlclJhZGl1
cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0ge3NldDogZnVuY3Rpb24o
c3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xuXG52YXIgaGFzT3BhY2l0
eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9IChodG1sLnN0
eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNpdHk9KFtcXGQu
XSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0
eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVsZW1lbnQuc3R5
bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNpYmxl
JyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0RmlsdGVyID0gZnVuY3Rpb24o
ZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG5c
dFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmls
dGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVzdChmaWx0ZXIpID8gZmls
dGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1ZSkudHJpbSgp
O1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTtc
bn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlv
bihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTtc
bn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGlmICghZWxl
bWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkgZWxl
bWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBvcGFjaXR5ID09
IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7XG5cdFx0aWYgKG9wYWNp
dHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50LCBy
ZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCkubGlt
aXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZpc2liaWxpdHkpKTtcblxu
dmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIg
b3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5
bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5LnRv
RmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBmaWx0
ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdm
aWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3BhY2l0eSA9IGZpbHRlci5t
YXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwgfHwgZmlsdGVyID09IG51
bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlvbihlbGVtZW50KXtcblx0
dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpO1xuXHRpZiAob3BhY2l0
eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9PSAnaGlkZGVu
JyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZhciBmbG9hdE5hbWUgPSAo
aHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9hdCcs
XG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAnNTAl
JywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3JvdW5kUG9zaXRp
b25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0gbnVsbCksXG5cdHByZWZp
eFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbihwcm9wZXJ0
eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5jYW1l
bENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24oc3R5
bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKXtc
blx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpO1xuXHRcdHByb3BlcnR5
ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xufTtcbi8v
PC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENvbXB1dGVkU3R5bGU6IGZ1
bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgdGhpcy5j
dXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1lbENhc2UocHJvcGVydHkp
XTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRlZmF1
bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVybiAoY29tcHV0ZWQpID8g
Y29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxvYXROYW1lKSA/ICdmbG9h
dCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxuXHRzZXRTdHlsZTogZnVu
Y3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKXtc
blx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXHRc
dFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5c
dFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6
IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7XG5cdFx0XHR2
YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7XG5c
dFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkpe1xu
XHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4gKHR5cGVPZih2
YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0aC5yb3VuZCh2YWwpKSA6
IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09IFN0cmlu
ZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuXHRc
dH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0SUU5PlxuXHRc
dGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0eWxl
cyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVTdHlsZSh0aGlz
LnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmIChwcm9w
ZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMpO1xuXHRcdHByb3BlcnR5
ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7
XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHkuaW5kZXhPZignYm9yZGVy
UmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdi
b3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJC
b3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRcdHJldHVybiB0
aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlzKS5qb2luKCcgJyk7XG5c
dFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0XHRpZiAoIXJl
c3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVudC5TaG9ydFN0
eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQgPSBbXTtcblx0
XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5XSkgcmVzdWx0
LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuam9pbignICcp
O1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5
KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZICYmIC9eYmFja2dyb3Vu
ZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJl
cGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0aW9uKXtcblx0
XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0XHRcdH0pIHx8ICcwcHgn
O1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0
aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtcblx0XHRcdHJlc3VsdCA9
IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2JhP1xc
KFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxh
Y2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1cblx0XHRpZiAoIWhhc0dl
dENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtcblx0XHRcdGlmICgoL14o
aGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQvLnRlc3QocmVzdWx0KSkp
e1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0Jywg
J3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRcdHZhbHVlcy5l
YWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0U3R5bGUoJ2Jv
cmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3BhZGRp
bmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJu
IHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0gc2l6ZSArICdweCc7XG5c
dFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykudGVz
dChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0XHRcdHJldHVy
biAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKHJldHVybnNC
b3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxCb3R0b218TGVmdCk/JC8u
dGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0dXJuIHJlc3Vs
dC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAkMScpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNldFN0eWxlczog
ZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHRoaXMuc2V0
U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0QXJyYXku
ZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJlc3VsdFtrZXld
ID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiByZXN1bHQ7
XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4JywgdG9wOiAn
QHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0BweCcsIGhlaWdo
dDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4JywgbWluV2lkdGg6ICdA
cHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCkn
LCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgnLCBj
b2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2luZzog
J0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgpJyxc
blx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0BweCBAcHggQHB4IEBweCcs
IGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdi
KEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHls
ZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdi
KEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9u
dFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBib3JkZXJSYWRp
dXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hvcnRTdHlsZXMg
PSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJvcmRlcldpZHRoOiB7fSwg
Ym9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1RvcCcsICdSaWdodCcsICdC
b3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtcblx0dmFyIFNob3J0ID0g
RWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzO1xuXHRbJ21h
cmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5cdFx0dmFyIHNkID0gc3R5
bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4Jztc
blx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xuXHRTaG9ydC5ib3JkZXJb
YmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3ID0gYmQgKyAn
V2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJztcblx0U2hvcnRb
YmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9IEFs
bFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1bYmRz
XSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvcltiZGNdID0gU2hvcnRbYmRd
W2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5cbmlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24gPSB7
YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAnQCd9O1xufSko
KTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9sbCwgb3IgcG9zaXRpb25p
bmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0aW9uaW5nIGJhc2VkIG9u
IHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBhbmQgc21hcnQgYnJvd3Nl
ciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwu
aHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBbWVVJXShodHRwOi8vZGV2
ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6Ly9kZXZlbG9w
ZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEVs
ZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNpb25zXVxuXG4uLi5cbiov
XG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbnZhciBi
cm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09PSBlbGVtZW50KTtcbmVs
ZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25lbnRzID0gWydoZWlnaHQn
LCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRvcFdpZHRoJywgJ2JvcmRl
ckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGluZ0xl
ZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRo
J107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpe1xuXG5cdHZhciBnQ1Mg
PSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRzID0ge3g6IDAsIHk6IDB9
O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy55
ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7
XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycgfHwgaXNC
b2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0
dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QoZWwudGFnTmFt
ZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1bmN0aW9uKHgs
IHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5nZXRXaW5kb3coKS5zY3Jv
bGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0geDtcblx0
XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhp
cy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5cblx0XHQvLyBUaGlzIGlm
IGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBnZXRCb3VuZGluZ0NsaWVu
dFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRpZiAoIXdpbmRv
dy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRoaXMu
b2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2ZyBzZWN0aW9u
IHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4gYmUgcmVtb3ZlZCB3aGVu
IEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0dHBzOi8vYnVn
emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlmICh0aGlzLmdl
dCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXplKHRoaXMpO1xuXG5cdFx0
dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xu
XHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9O1xuXHRcdH0g
Y2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0XHR9XG5cdH0sXG5cblx0
Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4g
dGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNj
cm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBm
dW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygp
LmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5OiB0aGlzLnNj
cm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxl
bWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0d2hp
bGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVs
ZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5zY3JvbGxUb3A7
XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdH1cblx0XHRyZXR1cm4g
cG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZzZXRQYXJlbnQg
PyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVs
ZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJl
dHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJpbmcoZWxlbWVu
dCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0aWMgOiBpc09mZnNldDtc
blx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKXtcblx0XHRcdGlmIChp
c09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRp
ZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09
ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlbGVtZW50
Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0s
XG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFzR2V0Qm91bmRpbmdDbGll
bnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0XHRpZiAoaGFzR2V0Qm91
bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50KCku
ZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xsKCks
XG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0XHRcdGlzRml4
ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7XG5cblx0XHRc
dHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMu
eCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCxcblx0
XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnkgKyAoKGlzRml4ZWQp
ID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRcdFx0fTtcblx0XHR9XG5c
blx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdGlm
IChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdoaWxlIChlbGVtZW50ICYm
ICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExl
ZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5cdFx0XHRlbGVt
ZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvc2l0aW9u
O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5cdFx0dmFyIG9m
ZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5nZXRTY3JvbGxz
KCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0LnggLSBzY3JvbGwueCxc
blx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5cdFx0aWYgKHJlbGF0aXZl
ICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0dmFyIHJlbGF0
aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHt4OiBw
b3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRlcihyZWxhdGl2ZSksIHk6
IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3JkZXIocmVsYXRpdmUpfTtc
blx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBm
dW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRX
aW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9z
aXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0dmFyIG9i
aiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0aW9uLnksXG5c
dFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9O1xuXHRcdG9i
ai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5ib3R0b20gPSBvYmoudG9w
ICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1dGVQb3NpdGlv
bjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogb2JqLnggLSBzdHls
ZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDogb2JqLnkgLSBzdHlsZU51
bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxuXHRzZXRQb3NpdGlvbjog
ZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9z
aXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgn
aW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdl
dENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgsIHk6
IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwgeTog
d2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbFNp
emU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksXG5c
dFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0aGlzLmdldERvY3VtZW50
KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBib2R5
LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3JvbGxIZWlnaHQsIGJvZHku
c2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHRyZXR1cm4ge3Rv
cDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6
ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBtZXRob2RzXG5c
bnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxuZnVuY3Rpb24g
c3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWxlbWVu
dCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJvcmRlcihlbGVt
ZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRoJyk7
XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJl
cihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gaXNCb2R5KGVs
ZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRhZ05h
bWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpe1xuXHR2YXIgZG9j
ID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBk
b2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcbn1c
blxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBvc2l0
aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRdLmlu
dm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxUb3A6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0fSxcblxuXHRnZXRTY3Jv
bGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFRvcDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5cblx0Z2V0TGVm
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7XG5cdH1cblxu
fSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBi
YXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNz
ZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0NoYWluLCBF
dmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRlczogRnhcblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7XG5cblx0
SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxu
XHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25DYW5jZWw6IG5p
bCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxuXHRcdHVuaXQ6
IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxuXHRcdGZyYW1l
U2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlz
O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHRnZXRUcmFuc2l0aW9u
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0XHRcdHJldHVybiAtKE1h
dGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9LFxuXG5cdHN0ZXA6IGZ1
bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApe1xuXHRcdFx0dmFy
IGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBmcmFt
ZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhpcy50aW1lID0gbm93O1xu
XHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKXtcblx0XHRc
dHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8gdGhpcy5mcmFtZXMpO1xu
XHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEpKTtc
blx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhp
cy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpO1xuXHRcdFx0dGhpcy5z
dG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRyZXR1cm4g
bm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0
cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxcblxuXHRjaGVjazogZnVu
Y3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRvKXtcblx0XHRp
ZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmZyb20gPSBm
cm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5m
cmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0dGhpcy50cmFu
c2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9IHRoaXMub3B0
aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRp
b25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNbZHVyYXRpb25d
IHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVydmFsID0gMTAwMCAvIGZw
cztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24g
LyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAh
PT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1YmplY3QpO1xu
XHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpO1xuXHRcdHB1
c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25z
LmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5cdFx0XHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHRcdGlmICghdGhp
cy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1Ympl
Y3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0b3AnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRoaXMuc3ViamVjdCA9PT0g
dGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0
dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xlYXJDaGFpbigpO1xuXHRc
dFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXN1
bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkgcHVzaEluc3RhbmNlLmNh
bGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5zdGFuY2VzW3RoaXMub3B0
aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFpbnModGhpcyk7XG5cdH0s
XG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmZyYW1lIDwgdGhp
cy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0pO1xuXG5GeC5jb21wdXRl
ID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0byAtIGZyb20pICogZGVs
dGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6IDI1MCwgJ25vcm1hbCc6
IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xuXG52YXIgaW5zdGFuY2Vz
ID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdHZhciBub3cg
PSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdHZh
ciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBpbnN0YW5jZS5zdGVwKG5v
dyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIg
bGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtcblx0bGlzdC5w
dXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxvb3AucGVyaW9k
aWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5cbnZhciBwdWxsSW5zdGFu
Y2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdO1xuXHRpZiAo
bGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxpc3QubGVuZ3RoICYmIHRp
bWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRcdHRpbWVyc1tm
cHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59O1xuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhl
IENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5FbGVt
ZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRngsIEVs
ZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4qL1xuXG5GeC5DU1MgPSBu
ZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhlIGJhc2UgZnJv
bS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFs
dWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0dmFyIGZyb20g
PSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9PSBudWxsKXtcblx0XHRc
dHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTtcblx0
XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFwdGVkIGZyb206
IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rlci9meC5qcyNMMjk5XG5c
dFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdzdHJpbmcnICYmIGZyb20u
c2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkgIT0gMCl7XG5c
dFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7XG5cdFx0XHRcdHZh
ciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHRcdC8v
IElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdpZHRoXG5cdFx0XHRcdGlm
ICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxl
WygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0XHRcdFx0aWYgKHZhbHVl
ID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3YXJkcycgaHR0
cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEw
MjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7XG5cdFx0XHRc
dFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9
IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0
ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9ICh0byB8fCAx
KSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0KGZyb20pIHx8IDApO1xu
XHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7XG5cdFx0XHR9
XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9tKSwgdG86IHRoaXMucGFy
c2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXlcblxuXHRw
YXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2YWx1
ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpID8gdmFsdWUuc3Bs
aXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoZnVu
Y3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFyIGZvdW5kID0g
ZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFyc2Vy
KXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZhciBwYXJzZWQgPSBwYXJz
ZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09IDApIGZvdW5k
ID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRcdH0pO1xuXHRcdFx0Zm91
bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vycy5TdHJpbmd9
O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8vY29tcHV0ZXMgYnkg
YSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLlxuXG5c
dGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNvbXB1dGVkID0g
W107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgpKS50aW1lcyhmdW5jdGlv
bihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21wdXRl
KGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5wYXJz
ZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgn
Zng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5cdC8vc2VydmVz
IHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7
XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5w
YXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0dmFsdWUuZWFjaChmdW5j
dGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25jYXQoYml0LnBhcnNlci5z
ZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmV0dXJuZWQ7XG5c
dH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5cdHJlbmRlcjog
ZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtcblx0XHRlbGVtZW50LnNl
dFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7XG5cdH0sXG5cblx0Ly9z
ZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxl
Y3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRcdGlmIChGeC5DU1MuQ2Fj
aGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0XHR2YXIgdG8g
PSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5lc2NhcGVSZWdF
eHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVuY3Rpb24ocnVsZXMpe1xu
XHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRcdGlmIChydWxl
Lm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxlcyB8fCBydWxlLmNzc1J1
bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFydWxlLnN0
eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRl
eHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBmdW5jdGlvbihtKXtcblx0
XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51bGw7XG5cdFx0
XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVzdChzZWxlY3RvclRleHQp
KSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2
YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtzdHlsZV0gfHwgRWxlbWVu
dC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9IFN0cmluZyhy
dWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3Qo
dmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9
KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cywgZnVuY3Rp
b24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0aWYgKGhyZWYg
JiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1bWVudC5kb21h
aW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVl
dC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7XG5cdFx0cmV0
dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59KTtcblxuRnguQ1NTLkNh
Y2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9yOiB7XG5cdFx0cGFyc2U6
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05YS1mXXszLDZ9
JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0cmV0dXJuICgodmFsdWUg
PSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8pKSkgPyBbdmFsdWVb
MV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxuXHRcdGNvbXB1dGU6IGZ1
bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAoZnVuY3Rpb24o
dmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21baV0s
IHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xuXHRcdH1cblx0fSxcblxu
XHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRjb21wdXRlOiBGeC5jb21w
dXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRyZXR1cm4gKHVu
aXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0cmluZzoge1xu
XHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRlOiBmdW5jdGlv
bih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5j
dGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0fVxuXG59O1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5
bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIGZv
ciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3IgQ1NTIGJhc2VkIHNlbGVj
dG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4
LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5GeC5Nb3JwaCA9IG5ldyBD
bGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3Vt
ZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNl
dDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93ID0g
dGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykgdGhpcy5yZW5kZXIodGhp
cy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZh
ciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50
KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRzdGFy
dDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMp
KSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0cmluZycpIHBy
b3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJvbSA9IHt9LCB0
byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5cdFx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7XG5cdFx0XHRm
cm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNlZC50bztcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Q
cm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhp
cy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBoID0gdGhpcy5y
ZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBoID0gbmV3IEZ4
Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbW9ycGgn
LCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxuXG59O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0aGlzLmdldCgn
bW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEg
c2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIEZ4
IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAt
IEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0cGVu
bmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdpdGgg
TW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRnguVHJhbnNpdGlvbnNcblxu
Li4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNpdGlv
bnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7XG5c
dFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9IEZ4LlRyYW5z
aXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBdLmNh
cGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScgKyBk
YXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkgOiAn
JyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4LlRyYW5zaXRp
b24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBBcnJheS5jb252
ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVybiB0
cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hcHBlbmQoZWFz
ZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpO1xuXHRcdH0sXG5c
dFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIChwb3MgPD0gMC41ID8g
dHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAtIHBv
cyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zID0g
e1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJuIHplcm87XG5cdH1cblxu
fTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25zKXtc
blx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRnguVHJhbnNpdGlvbnNbdHJh
bnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXSk7XG59
O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVuY3Rpb24ocCwgeCl7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0fSxcblxuXHRFeHBvOiBm
dW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkpO1xuXHR9LFxu
XG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29z
KHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGgu
Y29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVuY3Rpb24ocCwgeCl7XG5c
dFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgMikgKiAo
KHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0aW9uKHApe1xuXHRcdHZh
ciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwgYiAvPSAyKXtc
blx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1ZSA9IGIgKiBi
IC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7XG5cdFx0XHRcdGJyZWFr
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0RWxhc3RpYzog
ZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1hdGgu
Y29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5cdH1cblxufSk7
XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24odHJh
bnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5z
aXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTtcblx0fSk7
XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlvbjogRm9ybWVy
bHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFu
IGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRngu
Q1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdobGln
aHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4
LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0
aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0
aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBu
b3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdFx0bm93ID0gcHJvcGVy
dHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnByb3Bl
cnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHByb3BlcnR5LCBub3cs
IHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdGFydDog
ZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVy
dHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5mbGF0dGVu
KGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0eSB8
fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1l
bnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVudChwYXJzZWQu
ZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnR3ZWVu
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJyku
Y2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2ZSgndHdlZW4n
KTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMsIHts
aW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7XG5cdFx0
fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5c
blx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0dGhpcy5nZXQoJ3R3
ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyks
IG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVudHMpLCB0b2dnbGU7XG5c
dFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRcdHN3aXRjaCAo
YXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAx
OyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAw
OyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDE7
IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMDsg
YnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9IHRoaXMucmV0
cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHknKSA9PSAxKTtcblx0XHRc
dFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAwIDogMTtcblx0
XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0b2dnbGUgPSB0
cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7XG5c
dFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7XG5cdFx0
ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0byA9IGFyZ3NbYXJncy5s
ZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0dGhpcy5zZXRT
dHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG5cdFx0
fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5ndGgpe1xuXHRc
dFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0
eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLmNhbGxDaGFpbigp
O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zp
c2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmYWRl
LmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ29w
YWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxp
dHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHR9KTtcblx0
XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9uKHN0
YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRoaXMucmV0cmlldmUoJ2hp
Z2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InKSk7XG5c
dFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYnIDogZW5kO1xuXHRcdH1c
blx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0d2Vlbi5zdGFydCgnYmFj
a2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5jaGFpbihmdW5jdGlvbigp
e1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMucmV0cmlldmUo
J2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxDaGFpbigpO1xuXHRcdH0u
YmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxu
bmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVxdWVz
dCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRpb25z
LCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJlcXVlc3RcblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxuXHRwcm9ncmVz
c1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJlcXVlc3QpO1xuXG52YXIg
UmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0No
YWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7Lypc
blx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRzdGFydDogZnVuY3Rpb24o
ZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxu
XHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNlbDogZnVuY3Rpb24oKXt9
LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCByZXNwb25zZVhNTCl7fSxc
blx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4Y2VwdGlvbjogZnVuY3Rp
b24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBmdW5jdGlvbigpe30sXG5c
dFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50aWFsczogZmFs
c2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRc
dCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdBY2NlcHQnOiAn
dGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICov
Kidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDogZmFsc2UsXG5cdFx0bWV0
aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNTdWNjZXNzOiBudWxsLFxu
XHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRcdGVuY29kaW5n
OiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRldmFsUmVzcG9uc2U6IGZh
bHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJl
cXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpcy5oZWFkZXJz
ID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5nZTogZnVuY3Rp
b24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9
IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xu
XHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5c
dFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMuc3RhdHVzID0gKHN0YXR1
cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHhoci5v
bnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIu
b25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdGlmICh0aGlzLnRpbWVy
KXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRp
bWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDogdGhpcy54aHIucmVzcG9u
c2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlcblx0XHRcdHRoaXMuc3Vj
Y2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1sKTtcblx0XHRlbHNlXG5c
dFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAoc3RhdHVzID49IDIwMCAm
JiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9u
KHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgvKGVjbWF8amF2
YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSkpIHJldHVybiBC
cm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMub3B0
aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1s
KXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQpLCB4bWwpO1xu
XHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtcblx0fSxcblxuXHRvblN1
Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJndW1l
bnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxDaGFpbigpO1xuXHR9LFxu
XG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtcblx0XHR0aGlz
LnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRv
bkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmly
ZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFydDogZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRoaXMu
eGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZp
cmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0dGltZW91
dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTtc
blx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjogdGhpcy54aHJ9KTtcblx0
fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0aGlzLmhlYWRl
cnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRIZWFkZXI6
IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7
XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG5cdFx0fS5i
aW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMu
cnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5c
dFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNh
c2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykp
OyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzZW5k
OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9ucykpIHJldHVy
biB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1
Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHRc
dHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBlID09ICdzdHJpbmcnIHx8
IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9O1xuXG5cdFx0dmFy
IG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7ZGF0YTog
b2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0aW9ucyk7XG5c
dFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1l
dGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0Y2ggKHR5cGVP
ZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRhdGEp
LnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNo
JzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxuXHRcdGlmICh0
aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlz
Lm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRh
dGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbXVsYXRpb24gJiYg
IVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBfbWV0aG9kID0g
J19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0aG9kICsgJyYn
ICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0fVxuXG5cdFx0
aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdwdXQnXS5jb250YWlucyht
ZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5jb2RpbmcpID8g
JzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7XG5cdFx0XHR0aGlzLmhl
YWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2Rl
ZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9j
YXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRleE9m
KCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmltUG9zaXRpb24gPSB1cmwu
aW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3NpdGlvbik7XG5c
blx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9m
KCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTtcblxuXHRcdGlmIChk
YXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxldGUnKSl7XG5cdFx0XHR1
cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBkYXRhO1xuXHRcdFx0
ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmIChw
cm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5sb2Fkc3RhcnQu
YmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy5iaW5kKHRo
aXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRo
aXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29y
ZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAmJiAnd2l0aENyZWRl
bnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG5cdFx0eGhyLm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO1xuXG5cdFx0
T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdHRy
eSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBba2V5LCB2YWx1
ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4aHIs
IGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMu
Z2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5h
YmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgncmVxdWVz
dCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmFzeW5jKSB0
aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudGltZW91dCkg
dGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwgdGhp
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRc
dGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxz
ZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5cdFx0aWYgKHRo
aXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRl
IHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtc
blx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFy
dCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnY2FuY2Vs
JywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIG1ldGhv
ZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdoZWFk
JywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVBRCddLmVhY2go
ZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7XG5c
dFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fTtcblx0XHRpZiAo
ZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRoaXMuc2VuZChv
YmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRc
dHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0XHRzZW5kLnNldE9wdGlv
bnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlmICghc2VuZCl7
XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlzLCBsaW5rOiAn
Y2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1cmw6IHRoaXMu
Z2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5kJywgc2VuZCk7
XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0aGlzLmdldCgn
c2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIu
b3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhl
IGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVyYWN0
aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkhUTUxc
blxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJl
cXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0YXBwZW5kOiBm
YWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHRcdGhl
YWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0
L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xu
XG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNjcmlwdCl7
XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xuXG5cdFx0dmFy
IG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xcU10qPyk8XFwv
Ym9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0gbWF0Y2hbMV07XG5cdFx0
dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7
XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJlc3BvbnNlLmVs
ZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8fCAnKicpO1xuXG5cdFx0
aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7XG5c
dFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUgPSBkb2N1bWVudC5pZChv
cHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgdXBkYXRl
LmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBkYXRlLnNldCgnaHRtbCcs
IHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQpe1xuXHRcdFx0
dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtcblx0XHRcdGlmIChvcHRp
b25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChhcHBlbmQpO1xu
XHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigpKTtcblx0XHR9XG5cdFx0
aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNwb25zZS5qYXZhc2NyaXB0
KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNlLmVsZW1lbnRz
LCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlzLnJlc29sdmUo
e3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRtbDog
cmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0pO1xuXHR9XG5c
bn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwoKTtcblx0XHRs
b2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpO1xuXHRc
dGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0YTogdGhpcywg
bGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0J30pO1xuXHRcdFx0dGhp
cy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbG9hZDtcblx0fVxuXG59
O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rpb24oKXtcblx0XHR0aGlz
LmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtkYXRhOiBUeXBlLmlzT2Jq
ZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7
XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjogSlNPTiBlbmNvZGVyIGFu
ZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuU2VlQWxzbzogPGh0
dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIE51bWJlciwg
RnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxuaWYgKHR5cGVvZiBKU09O
ID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG52
YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxcdCcsICdcXG4nOiAnXFxc
XG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicgOiAnXFxcXFwiJywgJ1xc
XFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7XG5cdHJldHVy
biBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIuY2hhckNvZGVBdCgwKS50
b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRhdGUgPSBmdW5jdGlvbihz
dHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/OltcIlxcXFxcXC9iZm5y
dF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1wiW15cIlxc
XFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytc
XC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/Ol58OnwsKSg/Olxccypc
XFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSokLykudGVzdChzdHJpbmcp
O1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7XG5c
dHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9uKG9iail7XG5cdGlmIChv
YmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5cdHN3aXRjaCAodHlwZU9m
KG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyArIG9iai5yZXBs
YWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInO1xuXHRcdGNhc2UgJ2Fy
cmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5jb2RlKS5jbGVhbigpICsg
J10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFyIHN0cmluZyA9
IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRc
dFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChqc29uKSBzdHJp
bmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5cdFx0XHR9KTtcblx0XHRc
dHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzogY2FzZSAnYm9v
bGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzogcmV0dXJuICdudWxsJztc
blx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUgPSB0cnVlO1xuXG5cbkpT
T04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0cmluZyB8fCB0
eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cblx0aWYgKHNlY3VyZSA9
PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3VyZSl7XG5cdFx0aWYgKEpT
T04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0aWYgKCFKU09OLnZhbGlk
YXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRoZSBp
bnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUuJyk7
XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpO1xufTtcblxufSkoKTtc
blxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3JpcHRpb246IEV4dGVuZHMg
dGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRp
bmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkpTT05c
blxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJl
cXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVuY3Rpb24odGV4dCwgZXJy
b3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlv
bihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0XHRPYmplY3QuYXBwZW5k
KHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0
XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5j
dGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRcdFx0anNvbiA9IHRoaXMu
cmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0aW9ucy5zZWN1cmUpO1xu
XHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIFt0ZXh0
LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoanNvbiA9PSBudWxsKXtc
blx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uU3VjY2Vz
cyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjoganNvbiwgdGV4dDogdGV4
dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBDb29raWVcblxuZGVz
Y3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIGJyb3dz
ZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4g
IC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtvY2ggKGh0dHA6Ly9xdWly
a3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nlcl1cblxucHJvdmlkZXM6
IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxl
bWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6ICcvJyxcblx0XHRkb21h
aW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1cmU6IGZhbHNlLFxuXHRc
dGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0cE9ubHk6IGZh
bHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0XHR0
aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0
d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFs
dWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZG9t
YWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5kb21haW47XG5cdFx0aWYg
KHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9wdGlvbnMucGF0
aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRcdHZhciBkYXRlID0gbmV3
IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9u
cy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUgKz0gJzsgZXhw
aXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25z
LnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhpcy5vcHRpb25zLmh0dHBP
bmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRpb25zLmRvY3VtZW50LmNv
b2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZG9jdW1l
bnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4cCgp
ICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25lbnQo
dmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdG5l
dyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVyYXRp
b246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuQ29v
a2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJldHVybiBuZXcg
Q29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxuQ29va2llLnJlYWQgPSBm
dW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTtcbn07XG5cbkNv
b2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29r
aWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0tXG5cbm5hbWU6IERPTVJl
YWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRvbXJlYWR5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtCcm93c2VyLCBFbGVt
ZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5LCBEb21SZWFkeV1cblxu
Li4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5cbnZhciByZWFkeSxcblx0
bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0dGltZXIsXG5cdHRlc3RF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbnZhciBkb21yZWFkeSA9
IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghcmVhZHkpe1xuXHRc
dEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3VtZW50LnJlbW92ZUxpc3Rl
bmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0
YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVudCgnZG9tcmVhZHknKTtc
blx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5cdC8vIGNsZWFudXAgc2Nv
cGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50ID0gbnVsbDtcbn07XG5c
bnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBjaGVja3MubGVuZ3RoOyBp
LS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBmdW5jdGlvbigpe1xuXHRj
bGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91dChw
b2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcs
IGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBEaWVn
byBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC9cbi8v
IHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVhZHks
IG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24oKXtc
blx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRcdHJldHVybiB0cnVlO1xu
XHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJZiBkb1Njcm9sbCB3b3Jr
cyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBkb21yZWFkeVxuLy8gICBl
LmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xsICYmICFkb1Njcm9sbFdv
cmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0c2hvdWxkUG9sbCA9IHRy
dWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUpIGNoZWNrcy5w
dXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG5cdHJl
dHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7XG59KTtcblxu
aWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5l
cigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9IHRydWU7XG5c
bmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0ge1xu
XHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTtcblx0
fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMgYmVmb3JlIGxvYWRcbkVs
ZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6IGZ1bmN0aW9u
KGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBmbi5jYWxsKHRoaXMpO1xu
XHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0gd2luZG93KXtc
blx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDtcblx0
XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMgaXMgYmFzZWQgb24gdGhl
IGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5jdGlvbigpe1xu
XHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIgorbW9kdWxl
LmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4gbGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTcg
W1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0LykuKi8gXG4vKiFcbldlYiBC
dWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVyL2U0MjZhOWFlNzE2N2M1ODA3
YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBDb3JlXG5cbmRlc2NyaXB0aW9u
OiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXSho
dHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9yczogVGhlIE1vb1Rvb2xzIHBy
b2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZlbG9wZXJzLylcblxuaW5zcGly
YXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgW0Jhc2UuanNdKGh0
dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9iYXNlLykgQ29weXJpZ2h0IChj
KSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZV0o
aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGljZW5zZS5waHApXG4gIC0gU29t
ZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5
cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29uLCBbTUlUIExp
Y2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXG5c
bnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVPZiwgaW5zdGFuY2VPZiwgTmF0
aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4g
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2
LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLiov
XG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0dmVyc2lvbjogJzEuNi4wJyxc
blx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2YzdjYTUxMTRlZTk1ZTJiJ1xufTtc
blxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2YgPSB0aGlzLnR5cGVPZiA9IGZ1
bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gJ251bGwnO1xuXHRpZiAo
aXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1pbHkoKTtcblxuXHRpZiAoaXRl
bS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0gMSkgcmV0dXJuICdlbGVtZW50
Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4gKC9cXFMvKS50ZXN0KGl0ZW0u
bm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7XG5cdH0gZWxzZSBpZiAodHlw
ZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAoJ2NhbGxlZScgaW4gaXRlbSkg
cmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4gaXRlbSkgcmV0dXJuICdjb2xs
ZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtcbn07XG5cbnZhciBpbnN0YW5j
ZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwgb2JqZWN0KXtcblx0aWYgKGl0
ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3RydWN0b3IgPSBpdGVtLiRjb25z
dHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAoY29uc3RydWN0b3Ipe1xuXHRc
dGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1ZTtcblx0XHRjb25zdHJ1Y3Rv
ciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElFOD4qL1xuXHRpZiAoIWl0ZW0u
aGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0SUU4PiovXG5cdHJldHVybiBp
dGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+Ki9cbnZhciBlbnVtZXJhYmxl
cyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0pIGVudW1lcmFibGVzID0gbnVs
bDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hhc093blByb3BlcnR5JywgJ3Zh
bHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICd0b0xvY2Fs
ZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xuZnVuY3Rpb24gZm9yRWFjaE9i
amVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xuXHRpZiAoZW51bWVyYWJsZXMp
IGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTspe1xuXHRcdHZhciBrID0gZW51
bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXktdmFsdWUsIHNvIG92ZXJsb2Fk
U2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1ldGhvZCBmdW5jdGlvbiwgd2l0
aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2Jq
ZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xuXHR9XG59XG4vKjwvbHRJRTg+
Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1bmN0aW9uID0gdGhpcy5GdW5j
dGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0dGVyID0gZnVuY3Rpb24odXNl
UGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHVzZVBsdXJhbCB8fCB0eXBl
b2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGluIGEpIHNlbGYuY2FsbCh0aGlz
LCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0XHR9IGVsc2Ug
e1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztc
blx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9hZEdldHRlciA9IGZ1bmN0aW9u
KHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEpe1xu
XHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBhICE9ICdzdHJpbmcnKSBhcmdz
ID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgYXJncyA9IGFyZ3VtZW50
cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07XG5cdFx0aWYgKGFyZ3Mpe1xu
XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3Ro
OyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMsIGEpO1xuXHRcdH1cblx0XHRy
ZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0
ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7
XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5BcnJh
eS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBb
XTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlb2YgaXRlbSAhPSAn
c3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8gaXRlbSA6IHNsaWNlLmNhbGwo
aXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7
XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicpID8gaXRlbSA6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51bWJlci5jb252ZXJ0ID0gZnVu
Y3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KGl0ZW0pO1xuXHRyZXR1cm4g
aXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xuXG5TdHJpbmcuY29udmVydCA9
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xufTtcblxuXG5cbkZ1bmN0aW9u
LmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20gPSBOdW1iZXIuY29udmVydDtc
blN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhpZGUsIHByb3RlY3RcblxuRnVu
Y3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGhpZGRl
biA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJvdGVjdDogZnVuY3Rpb24o
KXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBlID0gZnVuY3Rpb24obmFtZSwg
b2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9IG5hbWUudG9Mb3dlckNhc2Uo
KTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gKHR5
cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5cGVbJ2lzJyArIG5hbWVdID0g
dHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5cdFx0XHRvYmplY3QucHJvdG90
eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0dXJuIGxvd2VyO1xuXHRcdFx0
fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9iamVjdCA9PSBudWxsKSBy
ZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xuXHRvYmplY3QuJGNvbnN0cnVj
dG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3RydWN0b3IgPSBvYmplY3Q7XG5c
blx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVy
biAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyAmJiB0b1N0
cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScgKTtcbn07XG5cbnZhciBob29r
cyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdHZhciB0eXBlID0g
dHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9va3NbdHlwZV0gfHwgKGhvb2tz
W3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhv
ZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblxuXHR2YXIgaG9v
a3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3Ro
OyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0aWYgKHR5cGVPZihob29rKSA9
PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1ldGhvZCk7XG5cdFx0ZWxzZSBo
b29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5cdHZhciBwcmV2aW91cyA9IHRo
aXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMu
JHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cblx0aWYgKHRoaXNb
bmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVuY3Rpb24nKSBleHRlbmQuY2Fs
bCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KGl0
ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xufTtcblxudmFyIGV4dGVuZCA9
IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4p
IHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtcblx0aWYgKHByZXZpb3VzID09
IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFtZV0gPSBtZXRob2Q7XG59O1xu
XG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBsZW1lbnQub3ZlcmxvYWRTZXR0
ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRlcigpLFxuXG5cdGFsaWFzOiBm
dW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50LmNhbGwodGhpcywgbmFtZSwg
dGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdG1p
cnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlzKS5wdXNoKGhvb2spO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgnVHlwZScsIFR5cGUpO1xuXG4v
LyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCwgbWV0
aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVjdCksXG5cdFx0cHJvdG90eXBl
ID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBvYmplY3QgPSBuZXcgVHlwZShu
YW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxuXHRcdFx0Z2VuZXJpYyA9IG9i
amVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5XTtcblxuXHRcdGlmIChnZW5l
cmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBlICYmIHByb3RvKSBvYmplY3Qu
aW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxuXG5cdGlmIChpc1R5cGUpe1xu
XHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs
ZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhvZCA9IGZ1bmN0aW9uKGZuKXtc
blx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9k
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxsKHByb3RvdHlwZSwgcHJvdG90
eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1cblx0XHRcdGZvciAodmFyIGtl
eSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVba2V5XSwga2V5KTtc
blx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxuZm9yY2UoJ1N0cmluZycsIFN0
cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29uY2F0JywgJ2NvbnRhaW5zJywg
J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVvdGUnLCAncmVwbGFjZScsICdz
ZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywgJ3N1YnN0cmluZycsICd0cmlt
JywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0FycmF5JywgQXJyYXksIFtcblx0
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdpbmRleE9mJywgJ2xhc3RJbmRl
eE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21hcCcsICdzb21lJywgJ3JlZHVj
ZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1iZXInLCBOdW1iZXIsIFtcblx0
J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0cmluZycsICd0b1ByZWNpc2lv
bidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBseScsICdjYWxsJywgJ2JpbmQn
XG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rlc3QnXG5dKSgnT2JqZWN0Jywg
T2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHknLCAnZGVmaW5lUHJvcGVydGll
cycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRv
cicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRFeHRlbnNpb25zJywgJ2lzRXh0
ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScsICdpc0Zyb3plbidcbl0pKCdE
YXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQgPSBleHRlbmQub3ZlcmxvYWRT
ZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiArKG5l
dyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJvb2xlYW4pO1xuXG4vLyBmaXhl
cyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJvdG90eXBlLiRmYW1pbHkgPSBm
dW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAnbnVtYmVyJyA6ICdudWxsJztc
bn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJlci5leHRlbmQoJ3JhbmRvbScs
IGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAq
IChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9yRWFjaCwgZWFjaCwga2V5c1xu
XG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0Zm9yRWFjaDogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlz
KTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFjaDogZnVuY3Rpb24oZm4sIGJp
bmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRrZXlzOiBmdW5jdGlvbihvYmpl
Y3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIgayBpbiBvYmplY3Qpe1xuXHRc
dFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkga2V5cy5wdXNoKGspO1xuXHRc
dH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmpl
Y3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xuXHRcdH0pO1xuXHRcdC8qPC9s
dElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZvckVhY2g6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlv
bihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xu
XHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9iamVjdC5mb3JFYWNoO1xuXG5c
bi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJnaW5nIGFuZCBhcHBlbmRpbmdc
blxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dpdGNoICh0eXBlT2YoaXRlbSkp
e1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUoKTtcblx0XHRjYXNlICdvYmpl
Y3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRlZmF1bHQ6IHJldHVybiBpdGVt
O1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywgZnVuY3Rpb24oKXtcblx0dmFy
IGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7XG5cdHdoaWxlIChpLS0pIGNs
b25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNsb25lO1xufSk7XG5cbnZhciBt
ZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50KXtcblx0c3dpdGNoICh0eXBl
T2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRpZiAodHlwZU9mKHNvdXJj
ZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJjZVtrZXldLCBjdXJyZW50KTtc
blx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUoY3VycmVudCk7XG5cdFx0XHRi
cmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0gY3VycmVudC5jbG9uZSgpOyBi
cmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQ7XG5cdH1cblx0cmV0dXJu
IHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1lcmdlOiBmdW5jdGlvbihzb3Vy
Y2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmluZycpIHJldHVybiBtZXJnZU9u
ZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0
Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNlLCBrZXksIG9iamVjdFtrZXld
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24o
b2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0
KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5cdFx0cmV0dXJuIGNsb25lO1xu
XHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xuXHRcdGZvciAodmFyIGkgPSAx
LCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZXh0ZW5kZWQg
PSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gZXh0ZW5kZWQpIG9y
aWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWw7
XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5cblsnT2JqZWN0JywgJ1doaXRl
U3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1bWVudHMnXS5lYWNoKGZ1bmN0
aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4vLyBVbmlxdWUgSURcblxudmFy
IFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3VuaXF1ZUlEJywgZnVuY3Rpb24o
KXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7XG5cblxuXG59KSgpO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBBcnJheSBQcm90
b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJvdmlkZXM6IEFycmF5XG5cbi4u
LlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1PiovXG5cdGV2ZXJ5OiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4g
MDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgIWZuLmNhbGwoYmluZCwg
dGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4gMDsg
aSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1ZSA9IHRoaXNbaV07XG5cdFx0
XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJlc3VsdHMucHVzaCh2YWx1ZSk7
XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGluZGV4T2Y6IGZ1bmN0aW9u
KGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMDtcblx0XHRm
b3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxlbmd0aCArIGZyb20pIDogZnJv
bSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJl
dHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihm
biwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwLCByZXN1bHRzID0g
QXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0
XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRzb21lOiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4g
MDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgZm4uY2FsbChiaW5kLCB0
aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtc
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbSAhPSBudWxsO1xu
XHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0aG9kTmFtZSl7XG5cdFx0dmFy
IGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRcdHJldHVybiB0aGlzLm1hcChm
dW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhvZE5hbWVdLmFwcGx5KGl0ZW0s
IGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTogZnVuY3Rpb24oa2V5cyl7XG5c
dFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlzLmxlbmd0aCwga2V5cy5sZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG9ialtrZXlzW2ldXSA9
IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRsaW5rOiBmdW5jdGlvbihvYmpl
Y3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
bGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRc
dFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0XHRcdHJlc3VsdFtrZXldID0g
dGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdFx0XHRcdFx0YnJlYWs7
XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxu
XHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXhP
ZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0
aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5cdGdldFJhbmRvbTogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbTnVtYmVyLnJhbmRvbSgwLCB0
aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5jbHVkZTogZnVuY3Rpb24oaXRl
bSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlzLnB1c2goaXRlbSk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGZv
ciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLmluY2x1ZGUo
YXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5jdGlvbihp
dGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmxlbmd0aCA9IDA7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVuY3Rpb24oKXtcblx0XHR2YXIg
YXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0pO1xuXHRcdFx0aWYgKHR5cGUg
PT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJyYXkuY29uY2F0KCh0eXBlID09
ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlwZSA9PSAnYXJndW1lbnRzJyB8
fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5mbGF0dGVuKHRoaXNbaV0pIDog
dGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fSxcblxuXHRwaWNrOiBmdW5j
dGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysp
e1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRoaXNbaV07XG5cdFx0fVxuXHRc
dHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRcdHZhciByZ2IgPSB0aGlzLm1h
cChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVuZ3RoID09IDEpIHZhbHVlICs9
IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxNik7XG5cdFx0fSk7XG5cdFx0
cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAnKSc7XG5cdH0sXG5cblx0cmdi
VG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5sZW5ndGggPCAzKSByZXR1cm4g
bnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlzWzNdID09IDAgJiYgIWFycmF5
KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0gW107XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0aGlzW2ldIC0gMCkudG9TdHJp
bmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0gMSkgPyAnMCcgKyBiaXQgOiBi
aXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6ICcjJyArIGhleC5qb2luKCcn
KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnVuY3Rpb25cblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlrZSBjcmVhdGUsIGJpbmQsIHBh
c3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiovXG5cbkZ1bmN0aW9uLmV4dGVu
ZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFy
Z3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJu
IGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXHRcdH1cblx0XHRyZXR1cm4g
bnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRhdHRlbXB0OiBm
dW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXBwbHko
YmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0cmV0
dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5cdGJpbmQ6IGZ1bmN0aW9uKHRo
YXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3MgPSBhcmd1bWVudHMubGVuZ3Ro
ID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxsLFxuXHRcdFx0RiA9IGZ1bmN0
aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgY29udGV4
dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAodGhpcyBpbnN0
YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBzZWxmLnByb3RvdHlwZTtcblx0
XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHJlc3VsdCA9ICghYXJn
cyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250ZXh0KVxuXHRcdFx0XHQ6IHNl
bGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdzLmNvbmNhdChBcnJheS5zbGlj
ZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBjb250ZXh0
ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5cdFx0cmV0dXJuIGJvdW5kO1xu
XHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVuY3Rpb24oYXJncywgYmluZCl7
XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9IG51bGwpIGFyZ3MgPSBBcnJh
eS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHNl
bGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH0sXG5cblx0ZGVs
YXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0VGltZW91dCh0
aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBkZWxheSk7XG5cdH0s
XG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwgYmluZCwgYXJncyl7XG5cdFx0
cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwg
YmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBO
dW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQcm90b3R5cGVzIGxpa2UgbGlt
aXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVyXG5cbi4uLlxuKi9cblxuTnVt
YmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0XHRyZXR1
cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtcblx0fSxcblxuXHRyb3VuZDog
ZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBNYXRoLnBvdygxMCwgcHJlY2lz
aW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVjaXNpb24gOiAwKTtcblx0XHRy
ZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcblx0fSxcblxu
XHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
czsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1
bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0
fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVzJyk7XG5cbihmdW5jdGlvbiht
YXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xu
XHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChBcnJheS5jb252ZXJ0KGFy
Z3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG59
KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFuMicsICdjZWlsJywgJ2Nvcycs
ICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAncG93JywgJ3NpbicsICdzcXJ0
JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNlLCBjYXBpdGFsaXplLCB0ZXN0
LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
W1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4uLlxuKi9cblxuU3RyaW5nLmlt
cGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKHN0cmluZywgaW5k
ZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcykuc2xpY2UoaW5kZXgpIDogU3Ry
aW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxcblx0Ly88LyFFUzY+XG5cblx0
dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0dXJuICgodHlwZU9mKHJlZ2V4
KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycgKyByZWdleCwgcGFyYW1zKSku
dGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJp
bmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHR9LFxuXG5cdGNsZWFuOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxzKy9nLCAnICcp
LnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0
cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVy
biBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRoeXBo
ZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9bQS1a
XS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCctJyArIG1hdGNoLmNoYXJBdCgw
KS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRjYXBpdGFsaXplOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxiW2Etel0vZywgZnVuY3Rp
b24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhp
cykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcblx0
fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMs
IGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8oXFx3ezEsMn0pKFxcd3sxLDJ9
KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4LnNsaWNlKDEpLmhleFRvUmdi
KGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0
XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwzfS9nKTtcblx0XHRyZXR1cm4g
KHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRzdWJzdGl0dXRl
OiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBs
YWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyksIGZ1bmN0aW9uKG1hdGNoLCBu
YW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xcXFwnKSByZXR1cm4gbWF0Y2gu
c2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAhPSBudWxsKSA/IG9iamVjdFtu
YW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBC
cm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmplY3QuIENvbnRhaW5zIEJyb3dz
ZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQsIGFuZCB0aGUgQnJvd3NlciBI
YXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtBcnJheSwg
RnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczogW0Jyb3dzZXIsIFdpbmRvdywg
RG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBkb2N1bWVudCA9IHRo
aXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2luZG93ID0gdGhpcztcblxudmFy
IHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEgPSB1YS50b0xvd2VyQ2FzZSgp
O1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRvTG93ZXJDYXNlKCkgOiAnJyk7
XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdlIFVBLCBzbyBuZWVkIHRvIGNo
ZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tpbmcgaWYgaXQncyBjaHJvbWUu
XG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0oW1xcd1xcZFxcLl0rKS8pO1xu
XHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8aWV8ZmlyZWZveHxjaHJvbWV8
dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxkXFwuXSspPy4qPyhzYWZhcml8
KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xcZFxcLl0rKXwkKS8pIHx8IFtu
dWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFdID09ICd0cmlkZW50Jyl7XG5c
dFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0gPSBVQVs0XTtcblx0fSBlbHNl
IGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdjaHJvbWUnO1xuXHR9XG5cblx0
cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8pID8gJ2lvcycgOiAodWEubWF0
Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21hY3x3aW58bGludXgvKSB8fCBb
J290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicpIHBsYXRmb3JtID0gJ3dpbmRv
d3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5k
LFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFbM10gOiBVQVsxXSxcblx0XHR2
ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYmIFVBWzRdKSA/IFVBWzRdIDog
VUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xufTtcblxudmFyIEJyb3dzZXIg
PSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFnZW50LCBuYXZpZ2F0b3IucGxh
dGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYgZG9jdW1lbnQuZG9jdW1lbnRN
b2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufVxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBhdGg6ICEhKGRvY3VtZW50LmV2
YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxcblx0XHRxdWVyeTogISEoZG9j
dW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2luZG93LkpTT04pXG5cdH0sXG5c
dHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3RcblxuQnJvd3Nlci5SZXF1ZXN0
ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIgTVNYTUwyID0gZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1MMi5YTUxIVFRQJyk7XG5cdH07
XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmpl
Y3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVt
cHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0dXJuIFhNTEhUVFA7XG5cdH0s
IGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJuIE1TWE1MMjtcblx0fSwgZnVu
Y3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hNTDtcblx0fSk7XG5cbn0pKCk7
XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5SZXF1ZXN0KTtcblxuXG5cbi8v
IFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0aW9uKHRleHQpe1xuXHRpZiAo
IXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNTY3JpcHQpe1xuXHRcdHdpbmRv
dy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBl
JywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0ID0gdGV4dDtcblx0XHRkb2N1
bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9jdW1lbnQuaGVhZC5yZW1vdmVD
aGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtcblxuU3RyaW5nLmltcGxlbWVu
dCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZhciBzY3JpcHRzID0gJyc7XG5c
dHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+KFtcXHNcXFNdKj8pPFxcL3Nj
cmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2NyaXB0cyArPSBjb2RlICsgJ1xc
bic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMgPT09IHRydWUpIEJyb3dzZXIu
ZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMpID09ICdmdW5jdGlvbicpIGV4
ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7XG5cbi8vIFdpbmRvdywgRG9j
dW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDogdGhpcy5Eb2N1bWVudCxcblx0
V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5FbGVtZW50LFxuXHRFdmVudDog
dGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4kY29uc3RydWN0b3IgPSBuZXcg
VHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4kZmFtaWx5ID0gRnVuY3Rpb24u
Y29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWlycm9yKGZ1bmN0aW9uKG5hbWUs
IG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG50aGlzLkRvY3VtZW50
ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0RvY3VtZW50JywgZnVuY3Rpb24o
KXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2RvY3VtZW50Jyku
aGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0ZG9j
dW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9jdW1lbnQuaGVhZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5cbmlmIChkb2N1bWVudC5leGVj
Q29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0JhY2tncm91bmRJbWFnZUNh
Y2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4vKjxsdElFOT4qL1xuaWYgKHRo
aXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciB1bmxvYWRF
dmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxv
YWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC53
aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93ID0gZG9jdW1lbnQgPSBudWxs
O1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtcbn1c
blxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxlY3Q+Lm9wdGlvbnMgKHJlZmVy
cyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5jb252ZXJ0O1xudHJ5IHtcblx0
YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59IGNhdGNoIChlKXtcblx0QXJy
YXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0eXBlb2YgaXRlbSAhPSAnc3Ry
aW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlT2YoaXRlbSkgIT0gJ2FycmF5
Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9IG5ldyBBcnJheShpKTtcblx0
XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0XHRcdHJldHVybiBhcnJheTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0fTtcblxuXHR2YXIgcHJvdG90
eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJvdG90eXBlLnNsaWNlO1xuXHRb
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2goZnVuY3Rpb24obmFtZSl7XG5c
dFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRBcnJheVtuYW1lXSA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShBcnJheS5jb252ZXJ0KGl0ZW0p
LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5cdH0pO1xufVxuLyo8L2x0SUU5
PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2lseSBjcmVhdGluZywgZXh0ZW5k
aW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBOdW1i
ZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
Q2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywgZnVuY3Rpb24ocGFyYW1zKXtc
blx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBhcmFtcyA9IHtpbml0aWFsaXpl
OiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9uKCl7XG5cdFx0cmVzZXQodGhp
cyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhp
cy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBudWxsO1xuXHRcdHZhciB2YWx1
ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMuY2FsbGVyID0gbnVsbDtcblx0
XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxlbWVudChwYXJhbXMpO1xuXG5c
dG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdDbGFzcy5wcm90b3R5cGUuJGNv
bnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS5wYXJlbnQgPSBwYXJl
bnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBwYXJlbnQgPSBmdW5jdGlvbigp
e1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwicGFy
ZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUgPSB0aGlzLiRjYWxsZXIuJG5h
bWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5wYXJlbnQsXG5cdFx0cHJldmlv
dXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0gOiBudWxsO1xuXHRpZiAoIXBy
ZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsgbmFtZSArICdcIiBoYXMg
bm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtc
bn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdGZvciAodmFyIGtleSBpbiBv
YmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdHN3aXRjaCAodHlwZU9m
KHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0XHR2YXIgRiA9IGZ1bmN0aW9u
KCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0XHRcdFx0b2JqZWN0W2tleV0g
PSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYXJyYXknOiBvYmpl
Y3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb2Jq
ZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBrZXksIG1ldGhvZCl7XG5cdGlm
IChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmlnaW47XG5cdHZhciB3cmFwcGVy
ID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0ZWQgJiYgdGhpcy4kY2FsbGVy
ID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBrZXkgKyAnXCIgY2Fu
bm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhpcy5jYWxsZXIsIGN1cnJlbnQg
PSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJyZW50OyB0aGlzLiRjYWxsZXIg
PSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNhbGxlciA9IGNhbGxlcjtcblx0
XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBzZWxmLCAkb3JpZ2luOiBtZXRo
b2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59O1xuXG52YXIgaW1wbGVtZW50
ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYgKENsYXNzLk11dGF0b3JzLmhh
c093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3MuTXV0YXRvcnNba2V5XS5jYWxs
KHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdH1c
blxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtcblx0XHRpZiAodmFsdWUuJGhp
ZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVba2V5XSA9IChyZXRhaW4pID8g
dmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5t
ZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztc
bn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNzKXtcblx0a2xhc3MuJHByb3Rv
dHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNzO1xuXHRkZWxldGUga2xhc3Mu
JHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5DbGFzcy5pbXBsZW1lbnQoJ2lt
cGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtcblxuQ2xhc3MuTXV0YXRvcnMg
PSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0XHR0aGlzLnBhcmVudCA9IHBh
cmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNlKHBhcmVudCk7XG5cdH0sXG5c
blx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFycmF5LmNvbnZlcnQoaXRlbXMp
LmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFuY2UgPSBuZXcgaXRlbTtcblx0
XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50LmNhbGwodGhpcywga2V5LCBp
bnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIFV0
aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3duIENsYXNz
ZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9uIHRhc2tzLlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xh
c3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQkY2hhaW46IFtdLFxuXG5cdGNo
YWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVuZChBcnJheS5mbGF0dGVuKGFy
Z3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbGxDaGFpbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkgPyB0aGlzLiRjaGFpbi5zaGlm
dCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0fSxcblxuXHRjbGVhckNoYWlu
OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHJldHVy
biBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9uKGZ1bGwsIGZpcnN0KXtcblx0
XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59O1xuXG50aGlzLkV2ZW50cyA9
IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5
cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXG5cdFx0XG5c
blx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRzW3R5cGVdIHx8IFtdKS5pbmNs
dWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFsID0gdHJ1ZTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9y
ICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFy
Z3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9
IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0
YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRzLmVhY2goZnVuY3Rpb24oZm4p
e1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRl
bHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dHlwZSA9
IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5c
dFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0dmFyIGluZGV4ID0gZXZlbnRz
LmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBkZWxldGUgZXZlbnRzW2luZGV4
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5j
dGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAn
b2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5
cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKGV2
ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRmb3IgKHR5cGUgaW4gdGhpcy4k
ZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9IHR5cGUpIGNvbnRpbnVlO1xu
XHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRcdGZvciAodmFyIGkgPSBm
bnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50
KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5cdHNldE9wdGlvbnM6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBPYmplY3QubWVyZ2UuYXBw
bHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1bWVudHMpKTtcblx0XHRpZiAo
dGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpe1xuXHRcdFx0aWYgKHR5
cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwgISgvXm9uW0EtWl0vKS50ZXN0
KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVudChvcHRpb24sIG9wdGlvbnNb
b3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25dO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5U
aGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGlsaXR5IENsYXNzIHRoYXQgY2Fu
IGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBtYWtlIHRoZW0gXCJ0aGVu
YWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVMRklMTEVEID0gMSxcblx0U1RB
VEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFzcy5UaGVuYWJsZSA9IG5ldyBD
bGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJTkcsXG5cdCR0aGVuYWJsZVJl
c3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxcblxuXHRyZXNvbHZlOiBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCBy
ZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFRoZW5hYmxlU3RhdGU6IGZ1
bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0YXRlKXtcblx0XHRcdGNhc2Ug
U1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5nJztcblxuXHRcdFx0Y2FzZSBT
VEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmlsbGVkJztcblxuXHRcdFx0Y2Fz
ZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWplY3RlZCc7XG5cdFx0fVxuXHR9
LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMs
IHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuXHRcdGlmICh0eXBlb2Yg
b25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVkID0gJ0lkZW50aXR5Jztcblx0
XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicpIG9uUmVqZWN0ZWQgPSAnVGhy
b3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblxuXHRcdHRoaXMu
JHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFibGU6IHRoZW5hYmxlLFxuXHRc
dFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0cmVqZWN0SGFuZGxlcjogb25S
ZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRF
X1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoZW5h
YmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpe1xuXHRcdHJldHVy
biB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxufSk7XG5cblRoZW5hYmxlLmV4
dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGhlbmFibGU7XG5c
dFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRcdFx0dGhlbmFibGUgPSB2YWx1
ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblx0XHRc
dHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0dmFyIHRoZW5hYmxlID0gbmV3
IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdHJldHVybiB0
aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIHJl
c29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09
PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09IHZhbHVlKXtcblx0XHRcdHJl
amVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gcmVzb2x2ZSBhIHRoZW5hYmxl
IHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUg
PT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpe1xuXHRcdFx0dmFy
IHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFsdWUudGhlbjtcblx0XHRcdH0g
Y2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9uKTtc
blx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJyl7XG5cdFx0XHRc
dHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihmdW5jdGlvbigpe1xuXHRcdFx0
XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdHZhbHVlLFxu
XHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdGlmICgh
cmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRc
dFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR9
XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9
IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0
XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRc
dH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRc
dFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUs
IGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHRcdH1c
blx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0
fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlmICh0aGVuYWJs
ZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9G
VUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVq
ZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09
IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHJlYXNvbjtc
blx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JFSkVDVEVEO1xuXG5cdFx0cmVh
Y3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0KHRoZW5hYmxlKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0g
U1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFjdCh0aGVuYWJsZSl7XG5cdHZh
ciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRcdHJlc3VsdCA9IHRoZW5hYmxl
LiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVuYWJsZS4kdGhlbmFibGVSZWFj
dGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNUQVRFX0ZVTEZJTExFRCl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdmdWxmaWxs
SGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfUkVKRUNURUQpe1xuXHRcdHRo
ZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAncmVqZWN0SGFuZGxl
cic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFuZGxlLnBhc3MoW3Jlc3VsdCwg
cmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZShyZXN1bHQsIHJl
YWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0gcmVhY3Rpb25zLmxlbmd0aDsg
aSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rpb25zW2ldLFxuXHRcdFx0aGFu
ZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRsZXIgPT09ICdJZGVudGl0eScp
e1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Ug
aWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc29sdmUo
cmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5cdFx0XHR9IGNhdGNoIChleGNl
cHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFibGUsIGV4Y2VwdGlvbik7XG5c
dFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlmICh0eXBlb2YgcHJvY2VzcyAh
PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbicp
e1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2UgaWYgKHR5cGVvZiBzZXRJbW1l
ZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJbW1lZGlhdGU7XG59IGVsc2Ug
e1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1lb3V0KGZuLCAwKTtcblx0fTtc
bn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3RcblxuZGVzY3JpcHRpb246IE9i
amVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNoXVxuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJzZXQ6IGZ1bmN0aW9uKG9iamVj
dCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9
IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRc
dGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtrXTtcblx0XHR9XG5cdFx0cmV0
dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0
KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFy
IGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBmbi5jYWxsKGJpbmQsIG9iamVj
dFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxu
XG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldLCB2
YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGtleSwg
b2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRz
O1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
Lmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKCFmbi5j
YWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJl
dHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsg
aSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRp
ZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGsg
PSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2tdKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9LFxuXG5cdGtleU9mOiBmdW5j
dGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7
XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBr
ZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09PSB2YWx1ZSkgcmV0dXJuIGtl
eTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9u
KG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5T2Yob2JqZWN0LCB2YWx1ZSkg
IT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIGJhc2Up
e1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2JqZWN0LmVhY2gob2JqZWN0LCBm
dW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBrZXkgPSBiYXNlICsgJ1snICsg
a2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVl
KSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5n
KHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0XHRcdHZh
ciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rpb24odmFsLCBpKXtcblx0XHRc
dFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRk
ZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xu
XHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5U3RyaW5nLnB1c2gocmVzdWx0
KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxu
fSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5QYXJzZXJcbmRlc2NyaXB0
aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5wcm92aWRlczogU2xpY2suUGFy
c2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBhcnNlZCxcblx0c2VwYXJhdG9y
SW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQsXG5cdGNhY2hlID0ge30sXG5c
dHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xcXFwvZztcblxudmFyIHBhcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5cdGlmIChleHByZXNzaW9uID09
IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5TbGljayA9PT0gdHJ1ZSkgcmV0
dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBleHByZXNzaW9uKS5yZXBsYWNl
KC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFpc1JldmVyc2VkO1xuXHR2YXIg
Y3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNoZSA6IGNhY2hlO1xuXHRpZiAo
Y3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVudENhY2hlW2V4cHJlc3Npb25d
O1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0ZXhwcmVzc2lvbnM6IFtdLFxu
XHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0
dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07XG5cdHNlcGFyYXRvckluZGV4
ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNzaW9uID0gZXhwcmVzc2lvbi5y
ZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVuZ3RoID0gcGFyc2VkLmV4cHJl
c3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtwYXJzZWQucmF3XSA9IChyZXZl
cnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xuXG52YXIgcmV2ZXJzZUNvbWJp
bmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNvbWJpbmF0b3IgPT09ICchJykg
cmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0gJyAnKSByZXR1cm4gJyEnO1xu
XHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0dXJuIGNvbWJpbmF0b3IucmVw
bGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNvbWJpbmF0b3I7XG59O1xuXG52
YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBl
eHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb25z
Lmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lvbnNbaV07XG5cdFx0dmFyIGxh
c3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjogcmV2ZXJzZUNvbWJpbmF0b3Io
ZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgZXhwLmxlbmd0
aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRcdFx0aWYgKCFjZXhwLnJldmVy
c2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0gJyAnO1xuXHRcdFx0Y2V4cC5j
b21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHRcdGRlbGV0ZSBjZXhwLnJl
dmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZlcnNlKCkucHVzaChsYXN0KTtc
blx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBlc2NhcGVSZWdFeHAgPSBmdW5j
dGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAoYykgMjAwNy0yMDA4IFN0ZXZl
biBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9yZWdleC94cmVnZXhwLz4gTUlU
IExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LlxcXFxeJHws
I1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAnXFxcXCcgKyBtYXRjaDtcblx0
fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8qXG4jIS91c3IvYmluL2VudiBy
dWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1YigvXFwoXFw/eFxcKXxcXHMrIy4q
JHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIoP3gpXig/OlxcXG5cdCAgXFxc
XHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJhdG9yICAgICAgICAgIFxcblxc
XG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAgICMgQ29tYmluYXRvciAgICAg
ICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAgICAgICAgICAjIENvbWJpbmF0
b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4rIHwgXFxcXCogKSAgICAgIyBU
YWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8dW5pY29kZT4rICAgICAgICkg
ICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxcXC4gICggPHVuaWNvZGU+KyAg
ICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxuXHR8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxcblxcXG5cdFxcXFxbICBcXFxu
XHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0XHRcXFxccyogKFsqXiQhfnxd
Pz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRcdFx0XHRcdChbXFxcIiddPyko
Lio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxcblx0XHQpPyAgXFxcXHMqICBc
XFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8dW5pY29kZT4rICkoPzpcXFxu
XHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwxMl0qKVxcXFwxMil8KCg/Olxc
XFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxcblx0KT9cXFxuXHQpXCJcbiov
XG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJpbmF0b3I+KylcXFxccyp8KFxc
XFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2RlPispfFxcXFwuKDx1bmljb2Rl
PispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihbKl4kIX58XT89KSg/OlxcXFxz
Kig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxdKD8hXFxcXF0pfCg6KykoPHVu
aWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwxM10qKVxcXFwxMyl8KCg/Olxc
XFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQucmVwbGFjZSgvPGNvbWJpbmF0
b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9XFxcXDs8LycpICsgJ10nKVxu
XHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18
XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgvPHVuaWNvZGUxPi9nLCAnKD86
WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG4p
O1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5cdHNlcGFyYXRvcixcblx0Y29t
YmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRhZ05hbWUsXG5cdGlkLFxuXHRj
bGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1dGVPcGVyYXRvcixcblx0YXR0
cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBzZXVkb01hcmtlcixcblx0cHNl
dWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlLFxuXHRw
c2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8IHNlcGFyYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJhdG9ySW5kZXhdID0gW107XG5c
dFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFyYXRvcikgcmV0dXJuICcnO1xu
XHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNoaWxkcmVuIHx8IGNvbWJpbmF0
b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yIHx8ICcgJztcblx0
XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRl
eF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4
XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XS5yZXZlcnNlQ29tYmlu
YXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xuXHRcdGN1cnJlbnRTZXBhcmF0
b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNvbWJpbmF0b3IsIHRhZzogJyon
fTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFy
YXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0YWdOYW1lKXtcblx0XHRjdXJy
ZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0fSBl
bHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlkLnJlcGxhY2UocmVVbmVzY2Fw
ZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0XHRjbGFzc05hbWUgPSBjbGFz
c05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQu
Y2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtdO1xuXHRcdGlmICghY3VycmVu
dFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFz
c2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0XHRcdHJlZ2V4cDogbmV3IFJl
Z0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgJyhcXFxcc3wkKScp
XG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7XG5cdFx0cHNldWRvQ2xhc3NW
YWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NRdW90ZWRWYWx1ZTtcblx0XHRw
c2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBzZXVkb0NsYXNzVmFsdWUucmVw
bGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLnBz
ZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQucHNl
dWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVwbGFjZShyZVVuZXNjYXBlLCAn
JyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0XHRcdHR5cGU6IHBzZXVkb01h
cmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdcblx0XHR9KTtcblxuXHR9IGVs
c2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5ID0gYXR0cmlidXRlS2V5LnJl
cGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZhbHVlID0gKGF0dHJpYnV0ZVZh
bHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdHZhciB0ZXN0LCByZWdl
eHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtcblx0XHRcdGNhc2UgJ149JyA6
IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZh
bHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnJD0nIDogcmVnZXhwID0gbmV3
IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnJCcgICAg
ICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAnKF58
XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyhcXFxcc3wkKScgKTsgYnJl
YWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVz
Y2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICApOyBicmVhaztcblx0XHRcdGNh
c2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1
dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnKj0nIDogdGVz
dCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZhbHVlICYmIHZhbHVlLmluZGV4
T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyE9
JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1
ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdCAgIDogdGVzdCA9IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7XG5cdFx0XHR9O1xuXHRcdH1c
blxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15bKiReXT0kLykudGVzdChhdHRy
aWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xu
XHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRy
ZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRcdH07XG5cblx0XHRpZiAoIWN1
cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzID0gW107XG5c
dFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0a2V5OiBhdHRyaWJ1dGVL
ZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3IsXG5cdFx0XHR2YWx1ZTogYXR0
cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7XG5cblx0fVxuXG5cdHJldHVy
biAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0cmV0dXJuIHBhcnNl
KGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhwID0gZXNjYXBlUmVnRXhwO1xu
XG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHkoLyo8Q29t
bW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8qPC9D
b21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5GaW5kZXJcbmRlc2NyaXB0
aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVuZ2luZS5cbnByb3ZpZGVzOiBT
bGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlv
bigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNoZSA9IHt9LFxuXHR0b1N0cmlu
ZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZlYXR1cmUgLyBCdWcgZGV0ZWN0
aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZuKXtcblx0cmV0dXJuICgvXFx7
XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycgKyBmbik7XG59O1xuXG5sb2Nh
bC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJuICghIWRvY3VtZW50LnhtbFZl
cnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5nLmNhbGwoZG9jdW1lbnQpID09
ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVudC5ub2RlVHlwZSA9PSA5ICYm
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAnSFRNTCcpO1xufTtcblxubG9j
YWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5cblx0Ly8gY29udmVydCBlbGVt
ZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlmIGRvY3VtZW50IGNhbm5vdCBi
ZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuXHR2YXIgbm9kZVR5cGUgPSBk
b2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkpOyAvLyBkb2N1bWVudFxuXHRl
bHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5vd25lckRvY3VtZW50OyAvLyBu
b2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9jdW1lbnQgPSBkb2N1bWVudC5k
b2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5cdC8vIGNoZWNrIGlmIGl0J3Mg
dGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50ID09PSBkb2N1bWVudCkgcmV0
dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0Ly8gY2hlY2sgaWYgd2UgaGF2
ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1lbnQgYmVmb3JlXG5cblx0dmFy
IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0cm9vdFVpZCA9IHRoaXMuZ2V0
VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSxcblx0
XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0XHR9XG5c
dFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdID0g
e307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1cmVzLmlzWE1MRG9jdW1lbnQg
PSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE5cblx0
PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZlYXR1cmVzLmlkR2V0c05hbWVc
blx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBmZWF0dXJlcy5icm9rZW5HRUJD
TlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBmZWF0dXJlcy5icm9rZW5FbXB0
eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3VtZW50XG5cdD0gZmVhdHVyZXMu
bmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0dmFyIHN0YXJTZWxlY3RzQ2xv
c2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNO
LCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVH
ZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191bmlxdWVpZCc7XG5cdHZhciB0
ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG5cdHZhciB0ZXN0Um9v
dCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHkn
KVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0ZXN0Tm9kZSk7XG5cblx0Ly8g
b24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0RWxlbWVudHNCeUlkIGRvZXNu
dCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGlk
PVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgPSAhIWRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7fVxuXG5cdGlmIChmZWF0dXJl
cy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
O1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZvciBnZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3ROb2RlLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2VsZWN0c0NvbW1lbnRzID0gKHRl
c3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoID4gMSk7XG5cblx0XHQvLyBJ
RSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIGdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2Rl
LmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVjdHNDbG9zZWQgPSAoc2VsZWN0
ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDAp
ID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZlYXR1cmVzLmJyb2tlblN0YXJH
RUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVjdHNDbG9zZWQ7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5zdGVhZCBvZiBqdXN0IGlkIGZv
ciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRcdHRl
c3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydcIj48L2E+PGIgaWQ9XCInKyBp
ZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFtZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7XG5cblx0XHRcdC8v
IFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNoZXMgcmVzdWx0c1xuXHRcdFx0
dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiZlwiPjwvYT48
YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmlyc3RDaGlsZC5jbGFzc05hbWUg
PSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAodGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2gg
KGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGRvZXNu
dCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJzdCBvbmVcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImFcIj48L2E+PGEgY2xh
c3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiA9
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJykubGVuZ3RoICE9IDIpO1xuXHRc
dFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9rZW5HRUJDTiA9IGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ047XG5cdFx0
fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwpe1xuXHRcdFx0Ly8gSUUgOCBy
ZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIHF1ZXJ5U2VsZWN0b3JBbGwo
JyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlu
bmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLnF1ZXJ5
U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRRU0Eg
PSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUu
Y2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFNhZmFy
aSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRoIG1peGVkY2FzZSBvbiBxdWly
a3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xh
c3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNlUVNBID0g
IXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5ndGg7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9udCByZXR1cm4gc2VsZWN0ZWQg
b3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9k
ZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPVwic2VsZWN0ZWRcIj5hPC9v
cHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQSA9ICh0
ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxlbmd0aCA9PSAwKTtcblx0XHRc
dH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMg
Zm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0
cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJcIj48L2E+Jztc
blx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgPSAodGVzdE5vZGUucXVl
cnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAhPSAwKTtcblx0XHRcdH0gY2F0
Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBhIGZvcm0gaGFzIGFuIGlucHV0
IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8Zm9ybSBhY3Rp
b249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4nO1xuXHRcdFx0YnJva2VuRm9y
bUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgnYWN0
aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHQvLyBuYXRpdmUgbWF0Y2hl
c1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ig
PSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVjdG9yIHx8Ki8gcm9vdC5tb3pN
YXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cdFx0aWYgKGZl
YXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0XHRcdC8vIGlmIG1hdGNoZXNT
ZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRheGVzIHdlIGNhbiB1c2UgaXRc
blx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKHJvb3QsICc6c2xpY2sn
KTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IG51bGw7XG5cdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Quc2xpY2tfZXhwYW5kbyA9IDE7
XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0
aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRo
aXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3ZlQ2hpbGQodGVzdE5vZGUpO1xu
XHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxsO1xuXG5cdC8vIGdldEF0dHJp
YnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0dXJlcy5pc0hUTUxEb2N1bWVu
dCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0aWYgKG1l
dGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0g
bm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSkg
PyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBu
YW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRc
dHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDogbm9kZS5nZXRBdHRyaWJ1dGUo
bmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuaGFzQXR0cmli
dXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5oYXNBdHRyaWJ1dGUpKSA/IGZ1
bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKGF0
dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRcdG5vZGUgPSBu
b2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRyZXR1cm4gISEobm9kZSAmJiAo
bm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0fTtcblxuXHQvLyBjb250YWlu
c1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlucyBzaG91bGQgYmUgZGlmZmVy
ZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIgbmF0aXZlUm9vdENvbnRhaW5z
ID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRhaW5zKSxcblx0XHRuYXRpdmVE
b2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05hdGl2ZUNvZGUoZG9jdW1lbnQu
Y29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5hdGl2ZVJvb3RDb250YWlucyAm
JiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRc
dHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKG5hdGl2ZVJvb3RDb250YWlu
cyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtc
blx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24gZG9jdW1lbnQuXG5cdFx0cmV0
dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBkb2N1bWVudCkgPyBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhub2RlKTtcblx0fSA6IChyb290
ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oY29udGV4dCwgbm9k
ZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEoY29udGV4dC5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUp
e1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9PT0gY29udGV4dCkgcmV0dXJu
IHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKTtcblx0XHRyZXR1
cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHQvLyBjcmVk
aXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5cblx0ZmVhdHVyZXMuZG9jdW1l
bnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihhLCBi
KXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9IDogKCdzb3VyY2VJbmRleCcg
aW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuc291cmNlSW5kZXggfHwgIWIu
c291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3Vy
Y2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkgPyBmdW5jdGlvbihhLCBiKXtc
blx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRvY3VtZW50KSByZXR1cm4gMDtc
blx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksIGJSYW5nZSA9
IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFSYW5nZS5zZXRTdGFydChhLCAw
KTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5nZS5zZXRTdGFydChiLCAwKTtc
blx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBhUmFuZ2UuY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtcblx0fSA6IG51bGw7XG5cblx0
cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHR0aGlzW2Zl
YXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5cbi8vIE1haW4gTWV0aG9kXG5c
bnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/OltcXHctXSt8XFwqKSkkLyxcblx0
cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8JycpP1xcXS8sXG5cdHFzYUZh
aWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQgPSB0aGlzLmZvdW5kID0gKGZp
cnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAoIWNvbnRleHQpIHJldHVybiBm
b3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNvbnRleHQgPSBjb250ZXh0LmRv
Y3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5kb3cgdG8gYSBkb2N1bWVudFxu
XHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZvdW5kO1xuXG5cdC8vIHNldHVw
XG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0dW5pcXVlcyA9IHRoaXMudW5p
cXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAmJiBhcHBlbmQubGVuZ3RoKSxc
blx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVUeXBlID09IDkpO1xuXG5cdGlm
ICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQgPyBjb250ZXh0IDogY29udGV4
dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250ZXh0KTtcblxuXHQvLyBhdm9p
ZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBlbmQgYXJyYXlcblx0aWYgKGhh
c090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1bmlxdWVzW3RoaXMuZ2V0VUlE
KGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24gY2hlY2tzXG5cblx0aWYgKHR5
cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHN0cmluZ1xu
XG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXHRcdHZhciBzaW1wbGVTZWxl
Y3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rvcik7XG5cdFx0c2ltcGxlU2Vs
ZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2YXIgc3ltYm9sID0gc2ltcGxl
U2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxlY3RvclsyXTtcblxuXHRcdFx0
aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcqJyAmJiB0aGlzLmJyb2tlblN0
YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlcyA9IGNvbnRleHQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5v
ZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSld
KSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJv
bCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAhY29udGV4
dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9kZSA9IGNvbnRl
eHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICghbm9kZSkgcmV0dXJuIGZvdW5k
O1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUuZ2V0QXR0cmlidXRlTm9kZSgn
aWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRp
ZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAm
JiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cblx0XHRc
dH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERv
Y3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCB0aGlzLmJyb2tl
bkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBicmVhayBzaW1wbGVTZWxlY3Rv
cnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMu
YnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51
bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5k
LnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZh
ciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysgU2xpY2suZXNjYXBlUmVnRXhw
KG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2kr
K107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lO1xuXHRcdFx0XHRc
dFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChjbGFzc05hbWUpKSkgY29udGlu
dWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0aWYg
KCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChu
b2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFz
T3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIChmaXJzdCkgPyBudWxsIDog
Zm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3RvcnMtb3ZlcnJpZGU+Ki9cblxu
XHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0cXVlcnlTZWxlY3RvcjogaWYg
KGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1
bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl1cblx0XHRcdFx0Ly9U
T0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVhbGx5IG1peGVkIGNhc2Vcblx0
XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRcdFx0fHwgKHRoaXMuYnJva2Vu
Q2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVja2VkJykgPiAtMSlcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYgcmVFbXB0eUF0dHJpYnV0ZS50
ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJc0RvY3VtZW50IC8vQWJvcnQg
d2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRcdFx0Ly8gIHRoZXJlIGFyZSBt
dWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0XHRcdFx0XHQvLyAgc2luY2Ug
d2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290ZWQgUVNBIGZvciBzaW5nbGUg
ZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHByZXNzaW9uLmluZGV4T2YoJywn
KSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlzYWJsZVFTQVxuXHRcdFx0KSBi
cmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJlc3Npb24gPSBleHByZXNzaW9u
LCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRcdGlmICghY29udGV4dElzRG9j
dW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVkIFFTQVxuXHRcdFx0XHQvLyBj
cmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVudElkID0gX2NvbnRleHQuZ2V0
QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7XG5cdFx0XHRcdF9jb250ZXh0
LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0X2V4cHJlc3Npb24gPSAnIycg
KyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRcdGNvbnRleHQgPSBfY29udGV4
dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoZmlyc3Qp
IHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Npb24pIHx8IG51bGw7XG5cdFx0
XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoX2V4cHJlc3Npb24pO1xu
XHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXSA9
IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRc
dFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0XHRpZiAoY3VycmVudElkKSBf
Y29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtcblx0XHRcdFx0XHRlbHNlIF9j
b250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0XHRjb250ZXh0ID0gX2NvbnRl
eHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc3RhclNlbGVjdHNDbG9z
ZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmIChub2Rl
Lm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBmb3IgKGkgPSAwOyBub2RlID0g
bm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdl
dFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFz
T3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXG5cdFx0fVxu
XHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5cdFx0cGFyc2VkID0gdGhpcy5T
bGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNlZC5sZW5ndGgpIHJldHVybiBm
b3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwpeyAvLyB0aGVyZSBpcyBubyBl
eHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24uU2xp
Y2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9iamVjdFxuXHRcdHBhcnNlZCA9
IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlucyhjb250ZXh0LmRvY3VtZW50
RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4cHJlc3Npb24gaXMgYSBub2Rl
XG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikgOiBmb3VuZCA9IGV4cHJlc3Np
b247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBvdGhlciBqdW5rXG5cdFx0cmV0
dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8t
c2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9yIHRoZSBudGggc2VsZWN0b3Jz
XG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhMYXN0ID0ge307XG5cdHRoaXMu
cG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0ID0ge307XG5cblx0Lyo8L250
aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBpZiBh
cHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBzZWxlY3RvciB3aXRoIG9u
ZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1c2hVSURcblx0dGhpcy5wdXNo
ID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVuZ3RoID09IDEgJiYgcGFyc2Vk
LmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5wdXNoQXJyYXkgOiB0aGlzLnB1
c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0gW107XG5cblx0Ly8gZGVmYXVs
dCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJpbmF0b3IsIHRhZywgaWQsIGNs
YXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztcblx0dmFyIGN1cnJlbnRJdGVt
cywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RCaXQsIGV4cHJlc3Npb25zID0g
cGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChpID0gMDsgKGN1cnJlbnRFeHBy
ZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9IDA7IChjdXJyZW50Qml0ID0g
Y3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29tYmluYXRvciA9ICdjb21iaW5h
dG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYgKCF0aGlzW2NvbWJpbmF0b3Jd
KSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0gKHRoaXMuaXNYTUxEb2N1bWVu
dCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRvVXBwZXJDYXNlKCk7XG5cdFx0
aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NMaXN0ICA9IGN1cnJlbnRCaXQu
Y2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0LmNsYXNzZXM7XG5cdFx0YXR0
cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRwc2V1ZG9zICAgID0gY3VycmVu
dEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0gKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9IHt9O1xuXG5cdFx0aWYgKGxh
c3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztcblx0XHRcdHRoaXMuZm91bmQg
PSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlxdWVzID0ge307XG5cdFx0XHR0
aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09IDApe1xuXHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
LCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQgJiYgZm91bmQubGVuZ3Ro
KSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChmaXJzdCAmJiBsYXN0Qml0
KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKyl7XG5cdFx0
XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0XHRpZiAoZm91bmQubGVuZ3Ro
KSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVt
cy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdH1c
blxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1cblxuXHQvLyBzaG91bGQgc29y
dCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5b3UgcGFzcyBtdWx0aXBsZSBl
eHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0
aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAoZmlyc3QpID8gKGZvdW5kWzBd
IHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5sb2NhbC51aWR4ID0gMTtcbmxv
Y2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5nZXRVSURYTUwgPSBmdW5jdGlv
bihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRlKHRoaXMudWlkayk7XG5cdGlm
ICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRub2RlLnNldEF0dHJpYnV0ZSh0
aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07XG5cbmxvY2FsLmdldFVJREhU
TUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5pcXVlTnVtYmVyIHx8IChub2Rl
LnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8vIHNvcnQgYmFzZWQgb24gdGhl
IHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxubG9jYWwuc29ydCA9IGZ1bmN0
aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0ZXIpIHJldHVybiByZXN1bHRz
O1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7XG5cdHJldHVybiByZXN1bHRz
O1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiov
XG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNoTlRIID0gL14oWystXT9cXGQq
KT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJzZU5USEFyZ3VtZW50ID0gZnVu
Y3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1lbnQubWF0Y2godGhpcy5tYXRj
aE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdHZhciBzcGVjaWFsID0gcGFy
c2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8fCAxO1xuXHRpZiAoYSA9PSAn
LScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7XG5cdHBhcnNlZCA9XG5cdFx0
KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRcdChzcGVjaWFsID09ICdvZGQn
KVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdldmVuJylcdD8ge2E6IDIsIGI6
IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5jYWNoZU5USFthcmd1bWVudF0g
PSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRvID0gZnVuY3Rpb24oY2hpbGQs
IHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIGFy
Z3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0aWYgKCF0aGlz
W3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xu
XHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRcdHZhciBlbCA9IHBhcmVudFtj
aGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xuXHRcdFx0XHR2YXIgbm9kZU5h
bWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKGVsLm5vZGVO
YW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhp
cy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxp
bmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKGVsLm5v
ZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdl
dFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10p
KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1bWVudCB8fCAnbic7XG5cdFx0
dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8IHRoaXMucGFyc2VOVEhBcmd1
bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0XHR2YXIg
YSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNbcG9zaXRpb25zXVt1aWRdO1xu
XHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRpZiAoYSA+IDApe1xuXHRcdFx0
aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGIgPCBw
b3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgocG9zIC0gYikgJSBhKSA9PSAw
O1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxl
Y3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpIHRoaXMuZm91bmQucHVz
aChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5v
ZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMubWF0Y2hTZWxlY3Rvcihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSl7XG5cdFx0dGhpcy51bmlx
dWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChub2RlKTtcblx0fVxufTtcblxu
bG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAodGhpcy5p
c0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvcil7XG5cdFx0dHJ5IHtc
blx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKG5vZGUsIHNlbGVj
dG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0rPylcXHMqXFxdL2csICdbJDE9
XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9XG5cdH1cblxuXHR2YXIgcGFy
c2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlmICghcGFyc2VkKSByZXR1cm4g
dHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3JzXG5cdHZhciBleHByZXNzaW9u
cyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRlciA9IDAsIGksIGN1cnJlbnRF
eHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9u
c1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCA9PSAxKXtcblx0
XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0XHRcdGlmICh0aGlzLm1hdGNo
U2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBleHAudGFnIDogZXhwLnRhZy50
b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAuYXR0cmlidXRlcywgZXhwLnBz
ZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENvdW50ZXIrKztcblx0XHR9XG5c
dH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQubGVuZ3RoKSByZXR1cm4gZmFs
c2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5kb2N1bWVudCwgcGFyc2VkKSwg
aXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107KXtcblx0XHRpZiAoaXRlbSA9
PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxubG9jYWwu
bWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1bWVudCl7XG5cdHZhciBwc2V1
ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNbcHNldWRvTmFtZV0pIHJldHVy
biB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0dmFyIGF0dHJpYnV0ZSA9IHRo
aXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4gKGFyZ3VtZW50KSA/IGFyZ3Vt
ZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxubG9jYWwubWF0Y2hTZWxlY3Rv
ciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
e1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/
IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG5cdFx0aWYgKHRh
ZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSByZXR1cm4gZmFsc2U7IC8vIEZp
eCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5cdFx0fSBlbHNlIHtcblx0XHRc
dGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAo
aWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChpID0gY2xhc3Nlcy5sZW5ndGg7
IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsICdjbGFzcycpO1xuXHRc
dGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNscykpKSByZXR1cm4gZmFsc2U7
XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpLS07
KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAocGFydC5vcGVyYXRvciA/ICFw
YXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSA6ICF0aGlzLmhhc0F0
dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAocHNldWRv
cykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRcdHBhcnQgPSBwc2V1ZG9zW2ld
O1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0LmtleSwgcGFydC52YWx1ZSkp
IHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBjb21iaW5hdG9y
cyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBub2RlcywgYW55IGxldmVsXG5c
blx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAodGhpcy5pc0hUTUxEb2N1bWVu
dCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRpdGVtID0gdGhpcy5kb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0ZW0gJiYgbm9kZS5hbGwpIHx8
ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyku
bm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lkXSByZXR1cm5zIGFsbCB0aGUg
ZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5vZGVcblx0XHRcdFx0XHQvLyBp
ZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVsZW1lbnQsIGVsc2UgaXQgd2ls
bCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuYWxsW2lkXTtcblx0
XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlblsw
XSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBj
aGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2RlID0gaXRlbS5nZXRBdHRyaWJ1
dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAmJiBpZE5vZGUubm9kZVZhbHVl
ID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRc
dFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0
aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyBpbiB0aGUgZG9tIHdl
IHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtpbmcgdGhlIGdldEJ5SWQgbGFi
ZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJvb3QsIG5vZGUpKSByZXR1cm47
XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMu
ZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9kZSwgaXRlbSkpIHJldHVybjtc
blx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGdldEJ5Q2xhc3M6IGlm
IChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5H
RUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNs
YXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5s
ZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hp
bGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBudWxsLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRnZXRCeVRhZzog
e1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG5cdFx0
XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeVRhZztcblx0
XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51bGw7XG5cdFx0XHRmb3IgKGkg
PSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jz4nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0
IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENoaWxkKSkgZG8ge1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2li
bGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9
IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRc
dGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBjaGlsZFxuXHRcdG5vZGUgPSBu
b2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0J34nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKXtcblx0XHRcdGlm
IChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVpZCA9IHRoaXMuZ2V0
VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVhaztcblx0XHRc
dHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jysr
JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xuXHRcdHRoaXNbJ2NvbWJpbmF0
b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5ncyBhbmQgcHJldmlvdXMg
c2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiF+J10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyEnOiBm
dW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8g
YWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
cGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyE+Jzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xu
XHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyErJzogZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3Vz
IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChu
b2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5c
dCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFzdENoaWxkO1xuXHRcdGlmIChu
b2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ3Ncblx0XHR3aGlsZSAo
KG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUg
IT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0
XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRVbmlxdWVz
W3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xuXG5mb3IgKHZhciBjIGluIGNv
bWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBjb21iaW5hdG9yc1tjXTtcblxu
dmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdlbXB0eSc6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRy
ZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAmJiAhKG5vZGUuaW5uZXJUZXh0
IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0fSxcblxuXHQnbm90JzogZnVu
Y3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0aGlzLm1hdGNoTm9kZShub2Rl
LCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBmdW5jdGlvbihub2RlLCB0ZXh0
KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycp
LmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3QtY2hpbGQnOiBmdW5jdGlvbihu
b2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChub2Rl
Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
bmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0
cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxp
bmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIG5leHQg
PSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBpZiAobmV4dC5u
b2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0
Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNoaWxkJzogbG9jYWwuY3JlYXRl
TlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USCcpLFxuXG5cdCdu
dGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZp
b3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1vZi10eXBlJzogbG9jYWwuY3Jl
YXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USFR5cGUnLCB0
cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFz
dENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBlTGFzdCcsIHRydWUpLFxuXG5c
dCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xuXHR9LFxuXG5cdCdldmVuJzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2Rl
LCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRo
aXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xuXHR9LFxuXG5cdC8qPC9udGgt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1lID0g
bm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykp
IGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZh
ciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5c
dFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUp
e1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdo
aWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZU5hbWUgPT0g
bm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUg
KChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Lyo8L29mLXR5cGUt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1ZG9zXG5cblx0J2VuYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0
J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuZGlzYWJsZWQ7XG5c
dH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5jaGVj
a2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3VzJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5kb2N1bWVudC5hY3RpdmVF
bGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50eXBlIHx8IHRoaXMuaGFzQXR0
cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQncm9vdCc6IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtcblx0fSxcblxuXHQnc2VsZWN0
ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5zZWxlY3RlZDtcblx0fVxuXG5c
dC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZhciBwIGluIHBzZXVkb3MpIGxv
Y2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8gYXR0cmlidXRlcyBtZXRob2Rz
XG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmlidXRlR2V0dGVycyA9IHtcblxu
XHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1sRm9yJyBpbiB0aGlzKSA/IHRo
aXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtcblx0fSxcblxuXHQnaHJlZic6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhpcykgPyB0aGlzLmdldEF0dHJp
YnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblx0fSxcblxuXHQn
c3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5zdHlsZSkgPyB0aGlzLnN0eWxl
LmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblx0fSxcblxuXHQndGFiaW5k
ZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1
dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1
dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0s
XG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgn
dHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRy
aWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhMZW5ndGgnKTtcblx0XHRyZXR1
cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRl
Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0dHJpYnV0ZUdldHRlcnMuTUFY
TEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1h
eGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9jYWwuU2xpY2sgPSAodGhpcy5T
bGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcnO1xuXG4vLyBTbGljayBmaW5k
ZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5k
KXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpO1xu
fTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24pe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51bGwsIHRydWUpO1xufTtcblxu
Ly8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5jb250YWlucyA9IGZ1bmN0aW9u
KGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KGNvbnRhaW5lcik7XG5cdHJl
dHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xufTtcblxuLy8gU2xpY2sgYXR0
cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlLCBuYW1l
KXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5nZXRBdHRyaWJ1
dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2Rl
LCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5oYXNB
dHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBtYXRjaGVyXG5cblNsaWNrLm1h
dGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAoIShub2RlICYmIHNlbGVjdG9y
KSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5t
YXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGFjY2Vz
c29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtc
blx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xuXHRyZXR1cm4gdGhpcztcbn07
XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpe1xuXHRyZXR1
cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5cbi8vIFNsaWNrIHBzZXVkbyBh
Y2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxv
Y2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xuXHRcdHJl
dHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtcblx0dmFyIHBzZXVkbyA9IGxv
Y2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSByZXR1cm4gZnVuY3Rpb24oYXJn
dW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBhcmd1bWVudCk7XG5cdH07XG5c
dHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVzIGFjY2Vzc29yXG5cblNsaWNr
Lm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxvY2FsLm92ZXJyaWRlKHJlZ2V4
cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlzWE1MID0gbG9jYWwuaXNYTUw7
XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiBsb2NhbC5nZXRVSURI
VE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7XG5c
bn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/
IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVt
ZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGl0ZW1zIGluIE1v
b1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0aGUgZG9sbGFycyBmdW5jdGlv
biwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGltZS1zYXZlciBtZXRob2RzIHRv
IGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRzLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgU3Ry
aW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBhcnNlciwgU2xpY2suRmluZGVy
XVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAkJCwgSUZyYW1lLCBTZWxlY3Rv
cnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVsZW1lbnQgPSBmdW5jdGlvbih0
YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVudC5Db25zdHJ1Y3RvcnNbdGFn
XTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0b3IocHJvcHMpO1xuXHRpZiAo
dHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50LmlkKHRhZykuc2V0KHByb3Bz
KTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlmICghKC9eW1xcdy1dKyQvKS50
ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0YWcpLmV4cHJlc3Npb25z
WzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykgPyAnZGl2JyA6IHBhcnNlZC50
YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBudWxsKSBwcm9wcy5pZCA9IHBh
cnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2VkLmF0dHJpYnV0ZXM7XG5cdFx0
aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBsID0gYXR0cmlidXRlcy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0ZXNbaV07XG5cdFx0XHRpZiAo
cHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoYXR0ci52YWx1
ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9wc1thdHRyLmtleV0gPSBhdHRy
LnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYgIWF0dHIub3BlcmF0b3IpIHBy
b3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnNlZC5jbGFzc0xpc3Qg
JiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNzJ10gPSBwYXJzZWQuY2xhc3NM
aXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KHRhZywg
cHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wcm90b3R5
cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJRTggYW5kIElFOSByZXF1aXJl
IHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IChmdW5jdGlv
bihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRy
ZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQpO1xuXHRcdH07XG5cdH0pKEVs
ZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBUeXBlKCdFbGVtZW50JywgRWxl
bWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJyYXkucHJvdG90eXBlW25hbWVd
KSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFtZV0gPSBmdW5jdGlvbigpe1xu
XHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMsIGVsZW1lbnRzID0gdHJ1ZTtc
blx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0c1tpXSA9IGVsZW1lbnRbbmFt
ZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50cyA9IChlbGVtZW50cyAmJiB0
eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGVsZW1lbnRz
KSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5cdH07XG5cblx0RWxlbWVudHMu
aW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50
LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlwZSA9IHtcblx0XHQnJGNvbnN0
cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0aW9uLmNvbnZlcnQoJ2VsZW1l
bnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xuXHR9KTtcbn1cblxu
RWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJRnJhbWUgPSBuZXcgVHlwZSgn
SUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRz
LCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0XHRpZnJhbWU6IGZ1bmN0aW9u
KG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0XHR9XG5cdH0pO1xuXG5cdHZh
ciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJhbWU7XG5cdGlmIChwYXJhbXMu
aWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZyYW1lKTtcblx0dmFyIG9ubG9h
ZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRlbGV0ZSBwcm9wcy5vbmxvYWQ7
XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwgcHJvcHMubmFtZSwgaWZyYW1l
ID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1lXycgKyBTdHJpbmcudW5pcXVl
SUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChpZnJhbWUgfHwgJ2lmcmFtZScs
IHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtcblx0XHRvbmxvYWQuY2FsbChp
ZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdpbmRvdy5mcmFtZXNbcHJvcHMu
aWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQp
O1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50cyA9IHRoaXMuRWxlbWVudHMg
PSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGgpe1xuXHRcdHZh
ciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IG5vZGUgPSBub2Rlc1tp
KytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9kZSk7XG5cdFx0XHRpZiAoIXVu
aXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHRcdHRoaXMu
cHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkVsZW1lbnRzLnByb3RvdHlw
ZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJyYXk7XG5cbm5ldyBUeXBlKCdF
bGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZpbHRlcjogZnVuY3Rpb24oZmls
dGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRoaXM7XG5cdFx0cmV0dXJuIG5l
dyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihmaWx0ZXIpID09ICdzdHJpbmcn
KSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0ubWF0Y2goZmlsdGVyKTtcblx0
XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHB1c2g6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3Vt
ZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgdGhpc1tsZW5ndGgrK10gPSBp
dGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0gbGVuZ3RoKTtcblx0fS5wcm90
ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgaXRlbXMgPSBbXTtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0aWYgKGl0ZW0p
IGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUudW5z
aGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGNvbmNhdDogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxlbWVudHModGhpcyk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5cGUuaXNFbnVtZXJhYmxlKGl0
ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRlbHNlIG5ld0VsZW1lbnRzLnB1
c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50cztcblx0fS5wcm90ZWN0KCks
XG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLnB1c2goY29sbGVjdGlvbltp
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGVtcHR5OiBmdW5jdGlv
bigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbLS10aGlzLmxlbmd0aF07
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0pO1xuXG5cblxuKGZ1bmN0aW9u
KCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UsIG9i
amVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxuc3BsaWNlLmNhbGwob2JqZWN0
LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMuaW1wbGVtZW50KCdzcGxpY2Un
LCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdHZhciByZXN1bHQg
PSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hpbGUgKGxlbmd0aCA+PSB0aGlz
Lmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1cm4gcmVzdWx0O1xufS5wcm90
ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9uKG1ldGhvZCwgbmFtZSl7XG5c
dEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7XG5cbkFycmF5Lm1pcnJvcihF
bGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MO1xu
dHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBjYXRjaCAoZSl7fVxuXG52YXIg
ZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVybiAoJycgKyBodG1sKS5yZXBs
YWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbn07XG4vKjwvbHRJ
RTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBvZiBz
dHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZh
ciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcgPSBmYWxz
ZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdpbjogMHB4
O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0
dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5c
blx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdFx0aWYgKHByb3BzKXtcblx0
XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRlZmF1bHRDaGVja2VkID0gcHJv
cHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAnY2hlY2tib3gnIHx8IHByb3Bz
LnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkgcHJvcHMudmFsdWUgPSAn
b24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhlIHR5cGUgdG8gYmUgc2V0IGJl
Zm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRcblx0XHRcdGlmICghY2FuQ2hh
bmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRcdFx0dmFyIHN0eWxlRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cdFx0XHRcdHN0eWxlRWxlbWVu
dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0XHRcdFx0aWYgKHByb3BzLnR5
cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZChzdHlsZUVsZW1l
bnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdC8qPGx0
SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBlIHByb3BlcnRpZXMgaW4gSUUg
PCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MKXtcblx0XHRcdFx0dGFnID0g
JzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFnICs9ICcgbmFtZT1cIicgKyBl
c2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkg
dGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMudHlwZSkgKyAnXCInO1xuXHRc
dFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMubmFtZTtcblx0XHRcdFx0ZGVs
ZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykpLnNldChwcm9wcyk7XG5cdH1c
blxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGljay51aWRPZih3aW5kb3cpO1xu
U2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld1Rl
eHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVUZXh0Tm9kZSh0
ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMud2lu
ZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRcdHZhciB0eXBlcyA9IHtcblxu
XHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZCA9IFNs
aWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpO1xuXHRc
dFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5vY2FzaCkgOiBudWxsO1xuXHRc
dFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5vY2FzaCl7XG5cdFx0XHRcdFNs
aWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYgIWVsLiRmYW1pbHkgJiYgISgv
Xig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkpe1xuXHRcdFx0XHRcdHZhciBm
aXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8gd3JhcHBpbmcgbmVlZGVkIGlu
IElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJlRXZlbnQgPSBmdW5jdGlvbih0
eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2ZW50KHR5cGUsIGV2ZW50KTtc
blx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQoZWwsIEVsZW1lbnQuUHJvdG90
eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9LFxuXG5cdFx0XHRv
YmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZiAob2JqLnRvRWxl
bWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVudChkb2MpLCBub2Nhc2gpO1xu
XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0eXBlcy50ZXh0
bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cgPSB0eXBlcy5kb2N1bWVudCA9
IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fTtcblxuXHRcdHJldHVy
biBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYgKGVsICYmIGVsLiRmYW1pbHkg
JiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVPZihl
bCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVzW3R5cGVdKGVsLCBub2Nhc2gs
IGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0fSkoKVxuXG59KTtcblxuaWYg
KHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQnLCBmdW5jdGlvbihlbCwgbmMp
e1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRvY3VtZW50KTtcbn0pO1xuXG5X
aW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdp
bXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwgbmV3IEVsZW1lbnRzKTtcblx0
fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7XG5cdH1cblxufSk7XG5cbnZh
ciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHJldHVybiBTbGlj
ay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAoIWRvY3VtZW50LmNvbnRhaW5z
KSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuXG5cblxu
Ly8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9yID0gZnVuY3Rpb24oZXhwcmVz
c2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikgcmV0dXJuIGNvbWJpbmF0b3I7
XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5wYXJzZShleHByZXNzaW9uKSk7
XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9yICh2
YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRleHByZXNzaW9uc1tpXVswXS5j
b21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbk9i
amVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQcmV2aW91czogJyF+Jyxcblx0
Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtc
blx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRBbGxOZXh0OiAnficsXG5cdGdl
dEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+Jyxcblx0Z2V0Q2hpbGRyZW46
ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2Qp
e1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29t
YmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Rmly
c3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5z
ZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKVswXSk7XG5cdH0s
XG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50
LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+Jykp
LmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7XG5cdH0sXG5cblx0Z2V0RWxl
bWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmlu
ZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKSk7XG5c
dH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiAhZXhwcmVz
c2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtcblx0fVxuXG59KTtcblxuXG5c
bmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCQnLCBmdW5jdGlvbihz
ZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdGlmICh0eXBlb2Yg
c2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFyY2godGhpcy5kb2N1bWVudCwg
c2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAoVHlwZS5pc0VudW1lcmFibGUo
c2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9yKTtcblx0fVxuXHRyZXR1cm4g
bmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5zZXJ0ZXJzXG5cbnZhciBpbnNl
cnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2
YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5p
bnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7
XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50Lm5l
eHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQp
e1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5cdH0sXG5cblx0dG9wOiBmdW5j
dGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmluc2VydEJlZm9yZShjb250ZXh0
LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmluc2VydGVycy5pbnNpZGUgPSBp
bnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkgLyBzZXRQcm9wZXJ0eVxuXG52
YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVycyA9IHt9O1xuXG4vLyBwcm9w
ZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5mb3JFYWNoKFtcblx0J3R5cGUn
LCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScsICdjZWxsUGFkZGluZycsICdj
ZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVyJywgJ3Jvd1NwYW4nLCAndGFi
SW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRwcm9wZXJ0aWVzW3By
b3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtcblxucHJvcGVydGllcy5odG1s
ID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJUZXh0JzogJ3RleHRDb250ZW50
JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocmVhbCwga2V5KXtcblx0
cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVty
ZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7XG5cbi8qPGx0SUU5PiovXG5w
cm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9k
ZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgbm9kZS5zZXQo
J2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRpZXMudGV4dF0gPSB2YWx1ZTtc
blx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJvcGVydHlHZXR0ZXJzLnRleHQg
PSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVy
biAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5pbm5lckhUTUwgOiBnZXR0ZXIo
bm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7XG4vKjwvbHRJRTk+Ki9cblxu
Ly8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFjdCcsICdub3dyYXAnLCAnaXNt
YXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxuXHQnZGlzYWJsZWQnLCAncmVh
ZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNpemUnLFxuXHQnZGVmZXInLCAn
ZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xzJywgJ2F1dG9wbGF5Jyxcblx0
J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5LmZvckVhY2goYm9vbHMsIGZ1
bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93ZXJDYXNlKCk7XG5cdGJvb2xl
YW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihu
b2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5
R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gISFub2RlW2Jvb2xd
O1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2JqZWN0LmFwcGVuZChwcm9wZXJ0
eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdj
bGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAodmFsdWUgfHwgJycpIDogbm9k
ZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdmb3InOiBmdW5jdGlv
bihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2RlKSA/IG5vZGUuaHRtbEZvciA9
IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVlKTtcblx0fSxcblxuXHQnc3R5
bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUuc3R5bGUpID8gbm9kZS5zdHls
ZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB2YWx1ZSk7XG5c
dH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGUudmFsdWUg
PSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5cbn0pO1xuXG5wcm9wZXJ0eUdl
dHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuICgnY2xhc3NOYW1lJyBp
biBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2RlLmdldEF0dHJpYnV0ZSgnY2xh
c3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFkb25seSBhbmQgdGhyb3dzXG50
cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31cbmlmIChlbC50eXBlICE9ICdi
dXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0
bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xuZWwgPSBudWxsO1xuLyogPC93
ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3OSAtIElFOCBDYW5u
b3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0eWxlSFRNTCA9IChm
dW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxc
blx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRNTCA9ICcjanVzdFRl
c2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJIVE1MO1xuXHR9IGNh
dGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4qL1xuXG52YXIgaW5w
dXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2b2xhdGlsZUlucHV0VmFsdWUs
IGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQudmFsdWUgPSAndCc7XG5pbnB1
dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZSAhPSAn
dCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBBcmd1bWVudFwiIHdoZW4gdHJ5
aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0aW5wdXQudmFsdWUgPSAnJztc
blx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRTdXBwb3J0ID0gaW5wdXQudHlw
ZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9IG51bGw7XG5cbmlmICh2b2xh
dGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBwcm9wZXJ0eVNldHRlcnMudHlw
ZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRcdHZhciB2YWx1ZSA9IG5vZGUu
dmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2RlLnZhbHVlID0gdmFsdWU7XG5c
dH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0UHJvcGVydHksIHNldFByb3Bl
cnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dldEF0dHJpYnV0ZSA9IChmdW5j
dGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7XG5cdHJldHVybiAoZGl2Lmdl
dEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xufSkoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAoZnVuY3Rpb24odGVzdCl7XG5c
dHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9XCJzaG91bGRfZml4XCIgdmFs
dWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0dXJuIHRlc3QuY2xvbmVOb2Rl
KHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0gMTtcbn0pKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5cbnZhciBoYXNDbGFzc0xpc3Qg
PSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblxudmFyIGNsYXNz
ZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NOYW1lcyA9IChjbGFzc05hbWUg
fHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9O1xuXHRyZXR1cm4gY2xhc3NO
YW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRpZiAoY2xhc3NOYW1lICE9PSAn
JyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVlc1tjbGFzc05hbWVdID0gY2xh
c3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUp
e1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52YXIgcmVtb3ZlRnJvbUNsYXNz
TGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUobmFtZSk7XG59
O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUs
IHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0ZXJzW25hbWUudG9Mb3dlckNh
c2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIodGhpcywgdmFsdWUpO1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2YXIgYXR0cmlidXRlQWxsb3dM
aXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRyaWJ1dGVBbGxvd0xpc3Qg
PSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30pO1xuXHRcdFx0LyogPC9s
dElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHR0aGlzLnJlbW92
ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9s
bHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV07XG5cdFx0
XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJp
YnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0XHRp
ZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9IHRydWU7
XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpe1xuXHRcdGZv
ciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNldFByb3BlcnR5KGF0dHJpYnV0
ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRn
ZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdldHRlciA9IHByb3BlcnR5R2V0
dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0ZXIpIHJldHVybiBnZXR0ZXIo
dGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSl7
XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSwgYXR0cmlidXRl
QWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFsbG93TGlzdCcsIHt9KTtcblx0
XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAoYXR0ci5leHBhbmRvICYmICFh
dHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIgb3V0ZXIgPSB0aGlzLm91dGVy
SFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3BlbmluZyB0YWcgYW5kIGZpbmQgbWVu
dGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0ZXIuc3Vic3RyKDAsIG91dGVy
LnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSkuaW5kZXhPZihuYW1lKSA8IDAp
IHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0cnVlO1xu
XHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdHZhciByZXN1bHQgPSBTbGlj
ay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJuICghcmVzdWx0ICYmICFTbGlj
ay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJlc3VsdDtcblx0fSxcblxuXHRn
ZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuY29udmVydChh
cmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdldFByb3BlcnR5LCB0aGlzKS5h
c3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUp
e1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51bGwpO1xuXHR9LFxuXG5cdHJl
bW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuZWFjaChhcmd1bWVudHMsIHRo
aXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNl
dDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJv
cGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuc2V0KSA/IHByb3BlcnR5
LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVydHkocHJvcCwgdmFsdWUpO1xu
XHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIg
cHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0cmV0dXJuIChwcm9wZXJ0
eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5KHRoaXMpIDogdGhpcy5nZXRQ
cm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxuXG5cdGVyYXNlOiBmdW5jdGlv
bihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3BlcnR5LmVyYXNlLmFwcGx5KHRo
aXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRy
ZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSA6IGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5jbGFzc05hbWUpLmNvbnRhaW5z
KGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goYWRkVG9DbGFzc0xp
c3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1lICsgJyAnICsgdGhpcy5jbGFz
c05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFz
czogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNz
TmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFyIGNsYXNzTmFtZXMgPSBjbGFz
c2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChjbGFz
c05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFt
ZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBm
dW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9yY2UgPT0gbnVsbCkgZm9yY2Ug
PSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVybiAoZm9yY2UpID8gdGhpcy5h
ZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xuXHR9LFxu
XG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQgPSB0aGlzLCBmcmFnbWVudCwg
ZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxlbmd0aCA9IGVsZW1lbnRzLmxl
bmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJhZ21lbnQgPSBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudHNbaV0sIHRy
dWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblx0
XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDogZnVuY3Rpb24odGV4dCwgd2hl
cmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1bWVudCgpLm5ld1RleHROb2Rl
KHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0
XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50LmlkKGVsLCB0cnVlKSwgdGhp
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0OiBmdW5jdGlvbihlbCwgd2hl
cmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10odGhpcywgZG9jdW1lbnQuaWQo
ZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXBsYWNlczogZnVuY3Rp
b24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdGVsLnBhcmVudE5v
ZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3
cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVl
KTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihlbCwgd2hlcmUpO1xuXHR9LFxu
XG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2VsZWN0ZWRJbmRleDsgLy8g
U2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5jb252ZXJ0KHRoaXMu
b3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0XHRyZXR1cm4gb3B0aW9uLnNl
bGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0RWxlbWVudHMoJ2lucHV0LCBz
ZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5cdFx0XHR2YXIgdHlwZSA9IGVs
LnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJsZWQgfHwgdHlwZSA9PSAnc3Vi
bWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmlsZScgfHwgdHlwZSA9PSAnaW1h
Z2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5nZXQoJ3RhZycpID09ICdzZWxl
Y3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9wdCl7XG5cdFx0XHRcdC8vIElF
XG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgndmFsdWUnKTtcblx0XHRcdH0p
IDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSAmJiAhZWwuY2hlY2tl
ZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRBcnJheS5jb252ZXJ0KHZhbHVl
KS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsICE9ICd1bmRlZmlu
ZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChlbC5uYW1lKSArICc9JyAr
IGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHJldHVy
biBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5cblxuLy8gYXBwZW5kSFRNTFxu
XG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdiZWZvcmVCZWdpbicsXG5cdGFm
dGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQnLFxuXHR0b3A6ICdhZnRlckJl
Z2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoJ2Fw
cGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0aGlzLmluc2VydEFkamFjZW50
SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddLCBodG1sKTtcblx0cmV0dXJu
IHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2YXIgdGVtcCA9IG5ldyBFbGVt
ZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVuID0gdGVtcC5jaGlsZE5vZGVz
LFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5cdGlmICghZnJhZ21lbnQpIHJl
dHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7XG5cdFx0ZnJhZ21lbnQgPSBk
b2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2VydGVyc1t3aGVyZSB8fCAnYm90
dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn0pO1xuXG52YXIgY29sbGVj
dGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1bmN0aW9uKHVpZCl7XG5cdHJl
dHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7fSkpO1xufTtcblxudmFyIGNs
ZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVtLnVuaXF1ZU51bWJlcjtcblx0
aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50cygpO1xuXHRpZiAoaXRlbS5j
bGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdGlmICh1aWQgIT0gbnVs
bCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRlbGV0ZSBzdG9yYWdlW3VpZF07
XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVByb3BzID0ge2lucHV0OiAnY2hl
Y2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2YWx1ZSd9O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtcblx0XHR2YXIgY2hpbGRyZW4g
PSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdEFycmF5LmVhY2go
Y2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2UodGhpcyk7XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuY29udmVydCh0
aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5wYXJlbnRO
b2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKSA6IHRoaXM7XG5cdH0sXG5c
blx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xuXHRcdGNvbnRlbnRzID0gY29u
dGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGNvbnRlbnRz
KSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRcdGlmIChjb250ZW50cyl7XG5c
dFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0aGlzLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBjZS5sZW5ndGg7IGktLTspe1xu
XHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ldO1xuXHRcdFx0aWYgKCFrZWVw
aWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRc
dGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5vZGUuY2xlYXJBdHRyaWJ1dGVz
KCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1lbnQpO1xuXHRcdFx0XHRub2Rl
LnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0XHRcdGlmIChub2RlLm9wdGlv
bnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywgZW8gPSBlbGVtZW50Lm9wdGlv
bnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsgai0tOykgbm9bal0uc2VsZWN0
ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU5
PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNh
c2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3BdKSBub2RlW3Byb3BdID0gZWxl
bWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmIChoYXNDbG9uZUJ1
Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyks
IHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyk7XG5cdFx0XHRmb3IgKGkg
PSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRvW2ldLm91dGVySFRNTDtcblx0
XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKGNsb25lKTtcblx0
fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50
Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHdpbmRv
dy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0Y29sbGVj
dGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmFkZEV2
ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNb
Ml0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7
XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhpcy5yZW1vdmVFdmVudExpc3Rl
bmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmRldGFjaEV2ZW50
KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmV0cmlldmU6
IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51
aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRpZiAoZGZsdCAhPSBu
dWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldID0gZGZsdDtcblx0
XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5cdH0sXG5cblx0c3RvcmU6IGZ1
bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlk
T2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0dmFyIHN0
b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRlbGV0ZSBzdG9yYWdlW3Byb3Bl
cnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLyo8bHRJRTk+Ki9cbmlmICh3
aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIGdj
ID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0ZWQsIGNsZWFuKTtcblx0XHRp
ZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFnZSgpO1xuXHRcdHdpbmRvdy5y
ZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3aW5kb3cuYWRkTGlzdGVuZXIo
J3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVtZW50LlByb3BlcnRpZXMgPSB7
fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9u
KHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHlsZTtcblx0fSxcblxuXHRnZXQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3NzVGV4dDtcblx0fSxcblxuXHRl
cmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSAnJztcblx0fVxuXG59
O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxufTtcblxuRWxlbWVu
dC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihodG1sKXtcblx0XHRpZiAo
aHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAodHlwZU9mKGh0bWwpID09ICdh
cnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAo
dGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwpIHRoaXMuc3R5bGVTaGVldC5j
c3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3RoaXMuaW5uZXJIVE1MID0gaHRt
bDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZXQoJ2h0bWwnLCAnJyk7
XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50cyA9IHRydWUsIHN1cHBvcnRz
VGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJIVE1MID0gdHJ1ZTtcblxuLyo8
bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBodHRwOi8vamRiYXJ0bGV0dC5j
b20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xu
dmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2PjwvbmF2Pic7XG5zdXBwb3J0c0hU
TUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09IDEpO1xuaWYgKCFzdXBwb3J0
c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8g
Y2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBo
Z3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc3VtbWFyeSB0aW1l
IHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAobC0tKSBmcmFnbWVudC5jcmVh
dGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJ
RT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24o
KXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcblx0dGFi
bGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5cdHJldHVybiB0cnVlO1xufSk7
XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpLCBo
dG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1sO1xuc3VwcG9ydHNUUklubmVy
SFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51bGw7XG4vKjwvbHRGRjQ+Ki9c
blxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBwb3J0c1RSSW5uZXJIVE1MIHx8
ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNl
dCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0aW9ucyA9IHtcblx0XHRcdHRh
YmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRcdHNlbGVjdDogWzEsICc8c2Vs
ZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwgJzx0YWJsZT48dGJvZHk+Jywg
JzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0YWJsZT48dGJvZHk+PHRyPics
ICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0XHR0cmFuc2xhdGlvbnMudGhl
YWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMudGJvZHk7XG5cblx0XHRyZXR1
cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAodGhpcy5z
dHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cdFx0XHQvKjwvbHRJRTk+
Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMuZ2V0KCd0YWcnKV07XG5cdFx0
XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgd3JhcCA9IFswLCAnJywgJydd
O1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cblx0XHRc
dHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRz
KSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIuaW5uZXJIVE1M
ID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5qb2luKCcnKTtcblx0XHRcdHdo
aWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGlsZDtcblx0XHRcdHRoaXMuZW1w
dHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVF
bGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyID0g
bnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNldCk7XG59XG4v
KjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24+czwv
b3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJzdENoaWxkLnZhbHVlICE9ICdz
JykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNldDogZnVuY3Rpb24odmFsdWUp
e1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0
JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFsdWUpO1xuXHRcdHZhciBvcHRp
b25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0dmFsdWUgPSBTdHJpbmcodmFs
dWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0
XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0ciA9IG9wdGlvbi5nZXRBdHRy
aWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IChhdHRyICYmIGF0dHIu
c3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0XHRcdGlm
IChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xu
XHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbiA9IHRoaXMs
IHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0JyAmJiB0
YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5KCd2YWx1ZScpO1xuXG5cdFx0
aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlvbi5nZXRTZWxlY3RlZCgpWzBd
KSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgn
dmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZh
bHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50ZXN0Rm9ybSA9IG51bGw7XG4v
KjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3BlcnRpZXMuaWQgPSB7XG5cdHNl
dDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lk
JykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuaWQgPSB0
aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztcblx0fVxufTtcbi8qPC9JRT4q
L1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250
YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQgb2JqZWN0IGNyb3NzLWJyb3dz
ZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywg
RG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmplY3RdXG5cbnByb3ZpZGVzOiBF
dmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgX2tleXMgPSB7fTtcbnZhciBu
b3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgbm9ybWFsaXplZDtc
blx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6ZWQgPSBldmVudC53aGVlbERl
bHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIwIDogZXZlbnQud2hlZWxEZWx0
YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQgPSBldmVudC5kZWx0YVkgfHwg
ZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0ocmF3QW1vdW50ICUgMyA9PSAw
ID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0fVxuXHRyZXR1cm4gbm9ybWFs
aXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZlbnQgPSBuZXcgVHlwZSgnRE9N
RXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3aW4pIHdpbiA9IHdpbmRvdztc
blx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChldmVudC4kZXh0ZW5kZWQpIHJl
dHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0aGlzLiRleHRlbmRlZCA9IHRy
dWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0dGhpcy5jb250cm9sID0gZXZl
bnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7XG5cdHRoaXMubWV0YSA9IGV2
ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0gZXZlbnQudHlwZTtcblx0dmFy
IHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHR3aGlsZSAodGFy
Z2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtc
blx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xuXG5cdGlmICh0eXBlLmluZGV4
T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5jb2RlID0gKGV2ZW50LndoaWNo
IHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlmdCB8fCB0eXBlICE9ICdrZXlw
cmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYgKHR5cGUgPT0gJ2tleWRvd24n
IHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+IDExMSAmJiBjb2RlIDwgMTI0
KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRcdGVsc2UgaWYgKGNvZGUgPiA5
NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtcblx0XHR9XG5cdFx0aWYgKHRo
aXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKS50b0xv
d2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNrJyB8fCB0eXBlID09ICdkYmxj
bGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBl
ID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdtb3VzZScpID09IDApe1xuXHRc
dHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFkb2MuY29tcGF0TW9kZSB8fCBk
b2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcblx0
XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBldmVudC5w
YWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxcblx0XHRcdHk6IChldmVudC5w
YWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSArIGRvYy5zY3JvbGxU
b3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0eDogKGV2ZW50LnBhZ2VYICE9
IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQgOiBldmVudC5jbGllbnRYLFxu
XHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgLSB3aW4ucGFnZVlP
ZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAodHlwZSA9PSAnRE9NTW91c2VT
Y3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdtb3VzZXdoZWVsJykgdGhpcy53
aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRcdHRoaXMucmlnaHRDbGljayA9
IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAyKTtcblx0XHRpZiAodHlwZSA9
PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwgdHlwZSA9PSAnbW91c2VlbnRl
cicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFyIG92ZXJUYXJnZXQgPSB0eXBl
ID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInO1xuXHRcdFx0dmFyIHJlbGF0
ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVyVGFyZ2V0ID8gJ2Zyb20nIDog
J3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0ZWQgJiYgcmVsYXRlZC5ub2Rl
VHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2RlO1xuXHRcdFx0dGhpcy5yZWxh
dGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5
cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhPZignZ2VzdHVyZScpID09IDAp
e1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtcblx0XHR0aGlzLnNjYWxlID0g
ZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0gZXZlbnQudGFyZ2V0VG91Y2hl
cztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG5cdFx0
dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3VjaGVzO1xuXHRcdGlmICh0b3Vj
aGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0gdG91Y2hlc1swXTtcblx0XHRc
dHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gucGFnZVl9O1xuXHRcdFx0dGhp
cy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2guY2xpZW50WX07XG5cdFx0fVxu
XHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQgPSB7fTtcblx0aWYgKCF0aGlz
LnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50LmltcGxlbWVudCh7XG5cblx0
c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2ZW50RGVmYXVsdCgpLnN0b3BQ
cm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtc
blx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0gZnVuY3Rpb24oY29kZSwga2V5
KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRE9NRXZlbnQu
ZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9hZFNldHRlcih0cnVlKTtcblxu
RE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0MCc6ICdkb3duJywgJzM3Jzog
J2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywgJzMyJzogJ3NwYWNlJywgJzgn
OiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2RlbGV0ZScsICcxMyc6ICdlbnRl
cidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5FdmVu
dFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRob2RzIGZvciBkZWFsaW5nIHdp
dGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3VzZWVudGVyIGFuZCBtb3VzZWxl
YXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFdmVudF1cblxucHJvdmlkZXM6
IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuRWxlbWVudC5Qcm9w
ZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdHRoaXMuYWRkRXZlbnRz
KGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1w
bGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2
ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0XHRpZiAoIWV2ZW50c1t0eXBl
XSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtdfTtcblx0XHRpZiAoZXZlbnRz
W3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztcblx0XHRldmVudHNbdHlwZV0u
a2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBlLFxuXHRcdFx0Y3VzdG9tID0g
RWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24gPSBmbixcblx0XHRcdHNlbGYg
PSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vbkFkZCkgY3VzdG9t
Lm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24p
e1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0aWYgKGN1
c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkpIHJldHVybiBmbi5jYWxsKHRo
aXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH1c
blx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3Rv
bS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2YXIgZGVmbiA9IGZ1bmN0aW9u
KCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9O1xuXHRcdHZhciBuYXRpdmVF
dmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtcblx0XHRpZiAobmF0aXZlRXZl
bnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRcdFx0XHRkZWZuID0gZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2ZW50KGV2ZW50LCBzZWxmLmdl
dFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNhbGwoc2VsZiwgZXZlbnQpID09
PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5h
ZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJdKTtcblx0XHR9XG5cdFx0ZXZl
bnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMu
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJl
dHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuXHRcdHZhciBpbmRleCA9
IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXggPT0gLTEpIHJldHVybiB0aGlz
O1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC5r
ZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdHZhciBjdXN0
b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3VzdG9tKXtcblx0XHRcdGlmIChj
dXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRoaXMsIGZuLCB0eXBlKTtcblx0
XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2Up
LmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAoRWxlbWVudC5OYXRpdmVFdmVu
dHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2YWx1ZSwgYXJndW1lbnRzWzJd
KSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZv
ciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChldmVudCwgZXZlbnRzW2V2ZW50
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihl
dmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0
Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2
ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0dmFyIGF0dGFjaGVk
ID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFhdHRhY2hlZCkgcmV0dXJuIHRo
aXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGF0dGFjaGVkKSB0aGlz
LnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWluYXRlKCdldmVudHMnKTtcblx0
XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0YXR0YWNoZWRbZXZlbnRzXS5r
ZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50KGV2ZW50cywg
Zm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0YWNoZWRbZXZlbnRzXTtcblx0
XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBl
LCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycp
O1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdGFy
Z3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdz
KTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1bmN0aW9uKGZyb20sIHR5cGUp
e1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2YXIgZXZlbnRzID0gZnJvbS5y
ZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGlm
ICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4gZXZlbnRzKSB0aGlzLmNsb25l
RXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlmIChldmVudHNbdHlwZV0pe1xu
XHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMu
YWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0
aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50cyA9IHtcblx0Y2xpY2s6IDIs
IGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIsIGNvbnRleHRtZW51OiAyLCAv
L21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6IDIsIERPTU1vdXNlU2Nyb2xs
OiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91c2VvdXQ6IDIsIG1vdXNlbW92
ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9tb3VzZSBtb3ZlbWVudFxuXHRr
ZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5Ym9hcmRcblx0b3JpZW50YXRp
b25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAyLCB0b3VjaG1vdmU6IDIsIHRv
dWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0Z2VzdHVyZXN0YXJ0OiAyLCBn
ZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0dXJlXG5cdGZvY3VzOiAyLCBi
bHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIsIHN1Ym1pdDogMiwgcGFzdGU6
IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDogMiwgdW5sb2FkOiAxLCBiZWZv
cmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29udGVudExvYWRlZDogMSwgcmVh
ZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5nZTogMSwgcG9wc3RhdGU6IDIs
IHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxuXHRlcnJvcjogMSwgYWJvcnQ6
IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5cbkVsZW1lbnQuRXZlbnRzID0g
e1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwnIGluIGRvY3VtZW50ID8gJ3do
ZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21vdXNld2hlZWwnIDogJ0RPTU1v
dXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbihldmVudCl7XG5cdHZh
ciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYgKHJlbGF0ZWQgPT0gbnVsbCkg
cmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKHJl
bGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVsJyAmJiB0eXBlT2YodGhpcykg
IT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVkKSk7XG59O1xuXG5pZiAoJ29u
bW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtcblx0RWxlbWVudC5OYXRp
dmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlbGVhdmUgPSAy
O1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xufSBlbHNlIHtcblx0RWxlbWVu
dC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25k
aXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMubW91c2VsZWF2ZSA9IHtcblx0
XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcbn1cblxuLyo8
bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRFbGVtZW50Lk5hdGl2
ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQuRXZlbnRzLmNoYW5nZSA9IHtc
blx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0
XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYmICh0eXBlID09ICdyYWRpbycg
fHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFuZ2UnIDogJ2NoYW5nZSc7XG5c
dFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdHJldHVybiBldmVu
dC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZlbnQucHJvcGVydHlOYW1lID09
ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5c
bi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5cbmRlc2NyaXB0aW9uOiBFeHRl
bmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSB0aGUgZGVsZWdhdGUgbWV0
aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczog
W0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGV2
ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcjtcblxuRWxlbWVu
dC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3Vzb3V0ID0g
MjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFy
Z2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2VsZil7XG5cdFx0aWYgKG1hdGNo
KHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQsIGV2ZW50LCB0YXJnZXQpO1xu
XHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnROb2RlKTtcblx0fVxufTtcblxu
dmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRc
dGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0bW91c2VsZWF2ZTog
e1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50
ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdmb2N1cycgKyAoZXZlbnRMaXN0
ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fSxcblx0Ymx1
cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJ2JsdXInIDogJ2ZvY3Vzb3V0
Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0SUU5PiovXG52YXIgX2tleSA9
ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUpe1xuXG5c
dHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0XHRyZW1vdmU6IGZ1bmN0aW9u
KHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUg
KyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlzdCAmJiBsaXN0LmZvcm1zKSBm
b3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0XHQvLyB0aGUgZm9y
bSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3QgaGF2ZSB0aGVcblx0XHRcdFx0
Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQgY2FzZSB0aGUgZXZlbnQgd2Fz
XG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0aWYgKGxpc3QuZm9ybXNbaV0u
cmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQodHlwZSwgbGlzdC5mbnNbaV0p
O1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3JtID0gKHRhcmdldC5nZXQoJ3Rh
ZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQuZ2V0UGFyZW50KCdmb3JtJyk7
XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFyIGxpc3RlbmVycyA9IHNlbGYu
cmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pLFxuXHRcdFx0XHRsaXN0ZW5l
ciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczogW119LFxuXHRcdFx0XHRmb3Jt
cyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7XG5cblx0XHRcdGlmIChmb3Jt
cy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRmb3Jtcy5wdXNoKGZvcm0pO1xu
XG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGZvcm0uYWRkRXZl
bnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5cblx0XHRcdGxpc3RlbmVyc1t1
aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVy
cycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFyIGlucHV0T2JzZXJ2ZXIgPSBm
dW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cdFx0bGlz
dGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0dmFy
IGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50cyhl
dmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0
XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVudHMpO1xuXHRcdH1cblx0fTtc
bn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVjdC5hcHBlbmQobWFwLCB7XG5c
dHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVzZXQ6IGZvcm1PYnNlcnZlcign
cmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFuZ2UnKSxcblx0c2VsZWN0OiBp
bnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIHByb3RvID0g
RWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8uYWRkRXZlbnQsXG5cdHJlbW92
ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxheSA9IGZ1bmN0aW9uKG9sZCwg
bWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1c2VDYXB0dXJlKXtcblx0XHRp
ZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5
cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodHlwZSku
ZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1ZG9zWzBdLmtleSAhPSAncmVs
YXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZh
ciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNldWRvcy5zbGljZSgxKS5lYWNo
KGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6JyArIHBzZXVkby5rZXkgKyAo
cHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJyknIDogJycpO1xuXHRcdH0pO1xu
XHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gbWV0aG9kLmNhbGwodGhp
cywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZuKTtcblx0fTtcbn07XG5cbnZh
ciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4p
e1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3Rv
cmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBmb3IgKHZhciBfdWlkIGluIHN0
b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZuICYmIHN0b3JlZFtfdWlkXS5t
YXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dmFyIF90eXBlID0gdHlw
ZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRc
dHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdl
dCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBfbWF0Y2gpO1xuXHRcdH07XG5c
blx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNbX3R5cGVdO1xuXHRcdGlmIChf
bWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVudEV2ZW50LmNvbmRpdGlvbil7
XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24gPSBfbWFwLmNvbmRpdGlvbiB8
fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQs
IGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0LCBldmVudCkgJiYgY29uZGl0
aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZh
ciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7XG5cdFx0dmFyIGRlbGVnYXRv
ciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRpZiAoIXRh
cmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0
XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdl
dCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRpZiAoIXRh
cmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0
XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7
XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7fTtcblx0XHRzdG9yZWRbdWlk
XSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjogX2ZuLFxuXHRcdFx0ZGVsZWdh
dG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRc
dHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJl
KTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuLCBfdWlk
KXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0
b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQpIHJldHVybiB0aGlzO1xuXG5c
dFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwgZGVsZWdhdG9yID0gc3RvcmVk
W191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHRcdHR5cGUgPSBf
bWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1vdmUpIF9tYXAucmVtb3ZlKHRo
aXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtcblx0XHRcdHN0b3JhZ2VbX3R5
cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwg
ZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRcdHZhciBfX3VpZCwgcztcblx0
XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRd
O1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9PSBmbikgcmV0dXJuIGRlbGVn
YXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgZm4sIF9fdWlkKTtcblx0
XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07
XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxs
KHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxl
bWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBkZWxlZ2F0aW9uLmFkZEV2ZW50
KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBkZWxlZ2F0aW9uLnJlbW92ZUV2
ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5TdHlsZVxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3R5
bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJvdmlkZXM6IEVsZW1lbnQuU3R5
bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0bWwgPSBkb2N1bWVudC5odG1s
LCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUsIHdoaWNoIGRvZXMgbm90IHJl
bW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5lbCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVkJztcbmVsLnN0eWxlLmNvbG9y
ID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwuc3R5bGUuY29sb3IgPT0gJ3Jl
ZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJucyBib3JkZXIqIHNob3J0aGFu
ZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0aC1zdHlsZSBpbnN0ZWFkIG9m
IHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHggc29saWQgIzEyM2FiYyc7XG5l
bC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIg
PSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxsO1xuLy88L2x0SUU5PlxuXG52
YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENvbXB1dGVkU3R5bGUsXG5cdHN1
cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZS5i
b3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlcyA9IHtzZXQ6
IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0eWxlcyk7XG59fTtcblxudmFy
IGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51bGwpLFxuXHRoYXNGaWx0ZXIg
PSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxwaGEgPSAvYWxwaGFcXChvcGFj
aXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0eSA9IGZ1bmN0aW9uKGVsZW1l
bnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0eScsIG9wYWNpdHkpO1xuXHRl
bGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8fCBvcGFjaXR5ID09IG51bGwg
PyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5PlxudmFyIHNldEZpbHRlciA9
IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2YXIgc3R5bGUgPSBlbGVtZW50
LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIgPSAocmVnZXhwLnRlc3QoZmls
dGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDogZmlsdGVyICsgJyAnICsgdmFs
dWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgn
ZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5
ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9
IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xu
XHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50LmN1cnJlbnRTdHlsZS5oYXNM
YXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChvcGFjaXR5ID09IG51bGwgfHwg
b3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJycpO1xuXHRc
dGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50KSAhPSAxKSBzZXRGaWx0ZXIo
ZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScpO1xuXHR9IGVsc2Uge1xuXHRc
dHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0nICsgKG9wYWNpdHkg
KiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5cdH1cbn0gOiBzZXRWaXNpYmls
aXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlvbihlbGVtZW50
KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNpdHkgfHwgZWxlbWVudC5nZXRD
b21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3BhY2l0eSA9PSAnJykgPyAxIDog
b3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xu
XHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0
ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlmIChmaWx0ZXIpIG9wYWNpdHkg
PSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3BhY2l0eSA9PSBudWxsIHx8IGZp
bHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7XG59IDogZnVuY3Rpb24oZWxl
bWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2ZSgnJG9wYWNpdHknKTtcblx0
aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkg
PT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5O1xufSkpO1xuXG52YXIgZmxv
YXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkgPyAnc3R5bGVGbG9hdCcgOiAn
Y3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAnMCUnLCB0b3A6ICcwJScsIGNl
bnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEwMCUnfSxcblx0aGFzQmFja2dy
b3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb25YICE9IG51bGwp
LFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIgY2FtZWxDYXNlID0gZnVuY3Rp
b24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFjZShwcmVmaXhQYXR0ZXJuLCAn
JDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZhciByZW1vdmVTdHlsZSA9IGZ1
bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBv
c2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5ICsgJ1gnKTtcblx0
XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5
KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRDb21wdXRl
ZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxl
ICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJyZW50U3R5bGVbY2FtZWxDYXNl
KHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxlbWVudC5nZXREb2N1bWVudCh0
aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0
Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVsbDtcblx0XHRyZXR1cm4gKGNv
bXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHByb3BlcnR5ID09IGZsb2F0TmFt
ZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDogJyc7XG5cdH0sXG5cblx0c2V0
U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdv
cGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUgPSBwYXJzZUZsb2F0KHZh
bHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7
XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBm
bG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ3N0cmluZycp
e1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9wZXJ0eV0gfHwgJ0AnKS5zcGxp
dCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZhbHVlKS5tYXAoZnVuY3Rpb24o
dmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAnJztcblx0XHRcdFx0cmV0dXJu
ICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVwbGFjZSgnQCcsIE1hdGgucm91
bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5cdFx0fSBlbHNlIGlmICh2YWx1
ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFsdWUgPSBNYXRoLnJvdW5kKHZh
bHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHQvLzxs
dElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09IG51bGwpICYmIGRvZXNOb3RS
ZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUpe1xuXHRcdFx0cmVtb3Zl
U3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0
XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0T3BhY2l0eSh0aGlzKTtcblx0
XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDog
cHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVzICYmIHByb3BlcnR5LmluZGV4
T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVybiBbJ2JvcmRlclRvcExlZnRS
YWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMn
LCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlvbihjb3JuZXIpe1xuXHRcdFx0
XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xuXHRcdFx0fSwgdGhpcykuam9p
bignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5zdHlsZVtwcm9wZXJ0eV07XG5c
dFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcpe1xuXHRcdFx0aWYgKEVsZW1l
bnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKXtcblx0XHRcdFx0cmVzdWx0
ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1twcm9wZXJ0
eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0
LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHls
ZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSAmJiAv
XmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0eSkpe1xuXHRcdFx0cmV0dXJu
IHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KS9nLCBmdW5jdGlvbihwb3Np
dGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1twb3NpdGlvbl07XG5cdFx0XHR9
KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYgcHJvcGVydHkgPT0gJ2JhY2tn
cm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0aWYgKHJlc3VsdCl7XG5cdFx0
XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBjb2xvciA9IHJlc3VsdC5tYXRj
aCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAoY29sb3IpIHJlc3VsdCA9IHJl
c3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hleCgpKTtcblx0XHR9XG5cdFx0
aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxlW3Byb3BlcnR5XSl7XG5cdFx0
XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0eSkgJiYgISgvcHgkLy50ZXN0
KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9wZXJ0eSA9PSAnd2lkdGgnKSA/
IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10sIHNpemUgPSAwO1xuXHRcdFx0
XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdFx0c2l6ZSArPSB0aGlzLmdl
dFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRvSW50KCkgKyB0aGlzLmdldFN0
eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0
XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2FwaXRhbGl6ZSgpXSAtIHNpemUg
KyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlciguKylXaWR0aHxtYXJnaW58cGFk
ZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxvYXQocmVzdWx0KSkpe1xuXHRc
dFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vPGx0SUU5PlxuXHRcdGlm
IChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRlcihUb3B8UmlnaHR8Qm90dG9t
fExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChyZXN1bHQpKXtcblx0XHRcdHJl
dHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4rKSQvLCAnJDIgJDMgJDEnKTtc
blx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHRz
ZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2YXIgc3R5bGUgaW4gc3R5bGVz
KSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xu
XHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRy
ZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1
cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxlcyA9IHtcblx0bGVmdDogJ0Bw
eCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAnQHB4Jyxcblx0d2lkdGg6ICdA
cHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1heEhlaWdodDogJ0BweCcsIG1p
bldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFja2dyb3VuZENvbG9yOiAncmdi
KEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNrZ3JvdW5kUG9zaXRpb246ICdA
cHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250U2l6ZTogJ0BweCcsIGxldHRl
clNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xpcDogJ3JlY3QoQHB4IEBweCBA
cHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcsIHBhZGRpbmc6ICdAcHggQHB4
IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEAp
IEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAnQHB4IEBweCBAcHggQHB4Jywg
Ym9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdyZ2IoQCwgQCwgQCkgcmdiKEAs
IEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6SW5kZXg6ICdAJywgJ3pvb20n
OiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0BweCcsIG9wYWNpdHk6ICdAJywg
Ym9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxuXG5cblxuXG5FbGVtZW50LlNo
b3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBib3JkZXI6IHt9LCBib3JkZXJX
aWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6IHt9fTtcblxuWydUb3AnLCAn
UmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9uKGRpcmVjdGlvbil7XG5cdHZh
ciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBBbGwgPSBFbGVtZW50LlN0eWxl
cztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rpb24oc3R5bGUpe1xuXHRcdHZh
ciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0eWxlXVtzZF0gPSBBbGxbc2Rd
ID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyArIGRpcmVjdGlvbjtcblx0U2hv
cnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAsIEAsIEApJztcblx0dmFyIGJk
dyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBiZGMgPSBiZCArICdDb2xvcic7
XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0aFtiZHddID0gU2hvcnRbYmRd
W2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3JkZXJTdHlsZVtiZHNdID0gU2hv
cnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQuYm9yZGVyQ29sb3JbYmRjXSA9
IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAsIEApJztcbn0pO1xuXG5pZiAo
aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRTdHlsZXMuYmFja2dyb3VuZFBv
c2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFja2dyb3VuZFBvc2l0aW9uWTog
J0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EaW1lbnNpb25zXG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0aCBzaXplLCBzY3JvbGwsIG9y
IHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93IG9iamVjdC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWxlbWVudCBwb3NpdGlvbmlu
ZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9vLm9yZy8pIGNvZGUgYW5kIHNt
YXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl
bnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lvbnMgYmFzZWQgb24gW1lVSV0o
aHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwgW0JTRCBMaWNlbnNlXShodHRw
Oi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1sKS5cblxucmVxdWlyZXM6IFtF
bGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGltZW5zaW9uc11c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVudC5hcHBlbmRDaGlsZChjaGls
ZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9mZnNldFBhcmVudCA9PT0gZWxl
bWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIgaGVpZ2h0Q29tcG9uZW50cyA9
IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbScsICdib3JkZXJUb3BXaWR0
aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBvbmVudHMgPSBbJ3dpZHRoJywg
J3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVy
UmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9IGZ1bmN0aW9uKGVsKXtcblxu
XHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLFxuXHRcdGJvdW5kcyA9IHt4
OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0
XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHdpZHRoQ29tcG9u
ZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnggKz0gcGFyc2VGbG9hdChnQ1Nb
Y3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxudmFyIGlzT2Zmc2V0ID0gZnVu
Y3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdwb3NpdGlvbicpICE9ICdzdGF0
aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRTdGF0aWMgPSBmdW5jdGlvbihl
bCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFibGV8dGR8dGgpJC9pKS50ZXN0
KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNjcm9sbFRvOiBm
dW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtcblx0XHRcdHRoaXMuZ2V0V2lu
ZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2Nyb2xsTGVm
dCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkg
cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5cdFx0Ly88bHRJRTk+XG5cdFx0
Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5vdCBjYWxjdWxhdGUgZ2V0Qm91
bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJpbGl0eSBoaWRkZW4uXG5cdFx0
aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4OiB0aGlzLm9mZnNldFdpZHRo
LCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0Ly8gVGhpcyBz
dmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRlU2l6ZSgpYCwgY2FuIGJlIHJl
bW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxuXHRcdC8vIEJ1ZyBpbmZvOiBo
dHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MzA5ODVcblx0XHRp
ZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3ZnQ2FsY3VsYXRlU2l6ZSh0aGlz
KTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRoLCB5OiBib3VuZHMuaGVpZ2h0
fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdFx0fVxu
XHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlz
KSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6ZSgpO1xuXHRcdHJldHVybiB7
eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWlnaHR9O1xuXHR9LFxuXG5cdGdl
dFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5n
ZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsTGVmdCwg
eTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbHM6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9
O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRp
b24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQu
c2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHR9XG5c
dFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNldFBhcmVudDogYnJva2VuT2Zm
c2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYg
KGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAn
Zml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNldENoZWNrID0gKHN0eWxlU3Ry
aW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/IGlzT2Zmc2V0U3RhdGljIDog
aXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSl7XG5c
dFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxu
XHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRo
aXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9z
aXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1
cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXHRcdHJldHVybiBu
dWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGhhc0dldEJv
dW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0O1xuXG5cdFx0aWYg
KGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIgYm91bmQgPSB0aGlzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9jdW1lbnQuaWQodGhpcy5nZXRE
b2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0bWxTY3JvbGwgPSBodG1sLmdl
dFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMuZ2V0U2Nyb2xscygpLFxuXHRc
dFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3NpdGlvbicpID09ICdmaXhlZCcp
O1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5sZWZ0LnRvRmxvYXQoKSArIGVs
ZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueCkgLSBodG1sLmNsaWVu
dExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy55ICsg
KChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5jbGllbnRUb3Bcblx0XHRcdH07
XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAw
fTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRpb247XG5cblx0XHR3aGlsZSAo
ZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVu
dC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50Lm9mZnNldFRvcDtcblxu
XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRcdH1cblxuXHRcdHJldHVy
biBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24ocmVsYXRpdmUpe1xu
XHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0XHRcdHNjcm9sbCA9IHRoaXMu
Z2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0XHRcdHg6IG9mZnNldC54IC0g
c2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55XG5cdFx0fTtcblxuXHRcdGlm
IChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChyZWxhdGl2ZSkpKXtcblx0XHRc
dHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9zaXRpb24oKTtcblx0XHRcdHJl
dHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24ueCAtIGxlZnRCb3JkZXIocmVs
YXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlvbi55IC0gdG9wQm9yZGVyKHJl
bGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRDb29y
ZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJu
IHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0XHR2YXIgcG9zaXRpb24gPSB0
aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xu
XHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54LFxuXHRcdFx0dG9wOiBwb3Np
dGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhlaWdodDogc2l6ZS55XG5cdFx0
fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0aDtcblx0XHRvYmouYm90dG9t
ID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRjb21w
dXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxlZnQ6IG9i
ai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0JyksXG5cdFx0XHR0b3A6IG9iai55
IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRcdH07XG5cdH0sXG5cblx0c2V0
UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMu
Y29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5cbltEb2N1bWVudCwgV2luZG93
XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZh
ciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDogZG9jLmNsaWVu
dFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCksIGRvYyA9IGdldENvbXBhdEVs
ZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhPZmZzZXQgfHwgZG9jLnNjcm9s
bExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wfTtcblx0fSxcblxuXHRn
ZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50
KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5cdFx0XHRib2R5ID0gdGhpcy5n
ZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1hdGgubWF4KGRvYy5zY3JvbGxX
aWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRoLm1heChkb2Muc2Nyb2xsSGVp
Z2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHR9LFxuXG5cdGdldENvb3Jk
aW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0
cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55LCByaWdodDogc2l6ZS54LCBo
ZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxufSk7XG5cbi8vIHByaXZhdGUg
bWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50LmdldENvbXB1dGVkU3R5bGU7XG5c
bmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtcblx0cmV0dXJuIHN0eWxlU3Ry
aW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5cblxuXG5mdW5jdGlvbiB0b3BC
b3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLXRv
cC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4g
c3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9u
IGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8aHRtbCkkL2kpLnRlc3QoZWxl
bWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0RWxlbWVudChlbGVtZW50KXtc
blx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0cmV0dXJuICghZG9jLmNvbXBh
dE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKSA/IGRvYy5odG1sIDogZG9j
LmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVudC5hbGlhcyh7cG9zaXRpb246
ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltXaW5kb3csIERvY3VtZW50LCBF
bGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRIZWlnaHQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5cblx0Z2V0V2lkdGg6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xs
VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLnk7XG5cdH0sXG5c
blx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwo
KS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRTY3JvbGxXaWR0aDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueDtcblx0fSxcblxuXHRnZXRU
b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS55O1xuXHR9LFxu
XG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS54
O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5cbmRlc2NyaXB0aW9uOiBDb250
YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4dGVuZGVkIGJ5IGFsbCBvdGhl
ciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV1cblxucHJvdmlkZXM6IEZ4
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9IHRoaXMuRnggPSBuZXcgQ2xh
c3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVu
YWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25TdGFydDogbmlsLFxuXHRcdG9u
Q2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRcdCovXG5cdFx0ZnBzOiA2MCxc
blx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxuXHRcdGZyYW1lczogbnVsbCxc
blx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9yZSdcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1YmplY3QgPSB0aGlzLnN1Ympl
Y3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0Z2V0
VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVuY3Rpb24ocCl7XG5cdFx0XHRy
ZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7XG5cdFx0fTtcblx0fSxcblxu
XHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKXtc
blx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/IChub3cgLSB0aGlzLnRpbWUp
IDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZhbDtcblx0XHRcdHRoaXMudGlt
ZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1l
cyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24odGhpcy5mcmFtZSAvIHRoaXMu
ZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8s
IGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZyYW1lcztc
blx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8sIDEpKTtcblx0
XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5c
dFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVs
dGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBkZWx0YSk7XG5cdH0sXG5cblx0
Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVubmluZygpKSByZXR1cm4gdHJ1
ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6
IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNo
YWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihmcm9tLCB0
byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dGhp
cy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0dGhpcy5mcmFtZSA9ICh0aGlz
Lm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRc
dHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigpO1xuXHRcdHZhciBmcmFtZXMg
PSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlvbnMuZnBzLCBkdXJhdGlvbiA9
IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0aW9uID0gRnguRHVyYXRpb25z
W2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRoaXMuZnJhbWVJbnRlcnZhbCA9
IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMgfHwgTWF0aC5yb3VuZCh0aGlz
LmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRpZiAodGhpcy5nZXRUaGVuYWJs
ZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUodGhpcy5z
dWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0YXJ0JywgdGhpcy5zdWJqZWN0
KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVzID09IHRoaXMuZnJhbWUpe1xu
XHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0
XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50KCdjaGFpbkNvbXBsZXRlJywg
dGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdz
dG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRoaXMucmVzb2x2ZSh0aGlzLnN1
YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVu
bmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2Fs
bCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZyYW1l
cztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlzLnN1YmplY3QpLmNsZWFyQ2hh
aW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVu
bmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2Fs
bCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUGF1c2VkKCkpIHB1c2hJ
bnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgbGlzdCA9IGluc3RhbmNl
c1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAmJiBsaXN0LmNvbnRhaW5zKHRo
aXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5m
cmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmcoKTtcblx0fVxuXG59KTtcblxu
RnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdHJldHVybiAodG8gLSBm
cm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9ucyA9IHsnc2hvcnQnOiAyNTAs
ICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGdsb2JhbCB0aW1lcnNcblxudmFy
IGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxvb3AgPSBmdW5jdGlvbigpe1xu
XHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS07
KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlmIChpbnN0YW5jZSkgaW5zdGFu
Y2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3RhbmNlID0gZnVuY3Rpb24oZnBz
KXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5zdGFuY2VzW2Zwc10gPSBbXSk7
XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBzXSkgdGltZXJzW2Zwc10gPSBs
b29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwgbGlzdCk7XG59O1xuXG52YXIg
cHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBz
XTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7XG5cdFx0aWYgKCFsaXN0Lmxl
bmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5zdGFuY2VzW2Zwc107XG5cdFx0
XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zwc10pO1xuXHRcdH1cblx0fVxu
fTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1NcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5IEZ4LlR3ZWVuLCBGeC5Nb3Jw
aCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRnguQ1NTXG5cbi4uLlxuKi9cblxu
RnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxcblxuXHQvL3ByZXBhcmVzIHRo
ZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVuY3Rpb24oZWxlbWVudCwgcHJv
cGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29udmVydCh2YWx1ZXMpO1xuXHRc
dHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtcblx0XHRpZiAodG8gPT0gbnVs
bCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxlbWVudC5nZXRTdHlsZShwcm9w
ZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51bml0O1xuXHRcdFx0Ly8gYWRh
cHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIvZngvYmxvYi9tYXN0ZXIvZngu
anMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBlb2YgZnJvbSA9PSAnc3RyaW5n
JyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAmJiBwYXJzZUZsb2F0KGZyb20p
ICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0byArIHVuaXQpO1xu
XHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xu
XHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExlZnQgb3IgcGl4ZWxXaWR0aFxu
XHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRcdFx0XHRcdHZhbHVlID0gZWxl
bWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxDYXNlKCldO1xuXHRcdFx0XHRc
dGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFkYXB0ZWQgZnJvbSBEZWFuIEVk
d2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41NC4xNS8j
Y29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0gZWxlbWVudC5zdHlsZS5sZWZ0
O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8gKyB1bml0O1xuXHRcdFx0XHRc
dFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQu
c3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZyb20g
PSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkgKiAocGFyc2VGbG9hdChmcm9t
KSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgZnJvbSArIHVuaXQp
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRoaXMucGFyc2UoZnJvbSksIHRv
OiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMgYSB2YWx1ZSBpbnRvIGFuIGFy
cmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YWx1ZSA9IEZ1bmN0aW9uLmNv
bnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSA/
IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVlKTtcblx0XHRyZXR1cm4gdmFs
dWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJpbmcodmFsKTtcblx0XHRcdHZh
ciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRnguQ1NTLlBhcnNlcnMsIGZ1bmN0
aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgcGFy
c2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChwYXJzZWQgfHwgcGFyc2VkID09
PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBhcnNlcn07XG5cdFx0XHR9KTtc
blx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBhcnNlcjogRnguQ1NTLlBhcnNl
cnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9KTtcblx0fSxcblxuXHQvL2Nv
bXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0cywgdXNpbmcgdGhlaXIgcGFy
c2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZhciBj
b21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0aCwgdG8ubGVuZ3RoKSkudGlt
ZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2YWx1ZTogZnJvbVtpXS5wYXJz
ZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwgZGVsdGEpLCBwYXJzZXI6IGZy
b21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQuJGZhbWlseSA9IEZ1bmN0aW9u
LmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBjb21wdXRlZDtcblx0fSxcblxu
XHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdmeDpjc3M6dmFsdWUnKSB2YWx1
ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5lZCA9IFtdO1xuXHRcdHZhbHVl
LmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0gcmV0dXJuZWQuY29uY2F0KGJp
dC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJl
dHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdlIHRvIGFuIGVsZW1lbnRcblxu
XHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCl7XG5cdFx0
ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2YWx1ZSwgdW5pdCkpO1xuXHR9
LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0byBmaW5kIHRoZSB2YWx1ZXMg
Zm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0XHRpZiAo
RnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl07XG5c
dFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdFeHAoJ14nICsgc2VsZWN0b3Iu
ZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJjaFN0eWxlcyA9IGZ1bmN0aW9u
KHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0aW9uKHJ1bGUpe1xuXHRcdFx0
XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGUucnVsZXMgfHwg
cnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlm
ICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2VsZWN0b3JUZXh0ID0gKHJ1bGUu
c2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxhY2UoL15cXHcrLywgZnVuY3Rp
b24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSkgOiBu
dWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2VsZWN0b3JUZXN0LnRlc3Qoc2Vs
ZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFjaChFbGVtZW50LlN0eWxlcywg
ZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGVbc3R5bGVd
IHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47XG5cdFx0XHRcdFx0dmFsdWUg
PSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRcdHRvW3N0eWxlXSA9ICgoL15y
Z2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDogdmFsdWU7XG5cdFx0XHRcdH0p
O1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2goZG9jdW1lbnQuc3R5bGVTaGVl
dHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0gc2hlZXQuaHJlZjtcblx0XHRc
dGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAmJiBocmVmLmluZGV4T2YoZG9j
dW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFyIHJ1bGVzID0gc2hlZXQucnVs
ZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHlsZXMocnVsZXMpO1xuXHRcdH0p
O1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0gdG87XG5cdH1cblxufSk7XG5c
bkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9IHtcblxuXHRDb2xvcjoge1xu
XHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubWF0Y2goL14jWzAt
OWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0cnVlKTtcblx0XHRcdHJldHVy
biAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKykvKSkp
ID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFsc2U7XG5cdFx0fSxcblx0XHRj
b21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdFx0cmV0dXJuIGZyb20ubWFw
KGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoRnguY29tcHV0
ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0c2VydmU6
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5tYXAoTnVtYmVyKTtcblx0XHR9
XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNlRmxvYXQsXG5cdFx0Y29tcHV0
ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdFx0
cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xuXHRcdH1cblx0fSxcblxuXHRT
dHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChmYWxzZSksXG5cdFx0Y29tcHV0
ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBvbmU7XG5cdFx0fSxcblx0XHRz
ZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9XG5cdH1cblxu
fTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxuZGVzY3JpcHRpb246IEZvcm1l
cmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IG51bWJlciBvZiBDU1MgcHJv
cGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qgb2YgcnVsZXMsIG9yIENTUyBi
YXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5cbi4uLlxuKi9cblxuRnguTW9y
cGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBm
dW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1Ympl
Y3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0
fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5cGVvZiBub3cgPT0gJ3N0cmlu
ZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2YXIgcCBpbiBub3cpIHRoaXMu
cmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRh
KXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBpbiBmcm9tKSBub3dbcF0gPSB0
aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRcdHJldHVybiBub3c7XG5cdH0s
XG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhw
cm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09ICdz
dHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVydGllcyk7XG5cdFx0dmFyIGZy
b20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHByb3BlcnRpZXMpe1xuXHRcdFx0
dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsIHAsIHByb3BlcnRpZXNbcF0p
O1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0dG9bcF0gPSBwYXJzZWQudG87
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0byk7XG5cdH1cblxufSk7XG5c
bkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMp
e1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBtb3Jw
aCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFtb3JwaCl7XG5cdFx0XHRtb3Jw
aCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3Rv
cmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9ycGg7XG5cdH1cblxufTtc
blxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5jdGlvbihwcm9wcyl7XG5cdFx0
dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25zXG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0byBiZSB1c2VkIHdpdGggYW55
IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3Jl
ZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQZW5uZXIsIDxodHRwOi8vd3d3
LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFuZCBvcHRpbWl6ZWQgdG8gYmUg
dXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxucHJvdmlkZXM6IEZ4LlRyYW5z
aXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxuXHRnZXRUcmFuc2l0aW9uOiBm
dW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9ucy50cmFuc2l0aW9uIHx8IEZ4
LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0eXBlb2YgdHJhbnMgPT0gJ3N0
cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgnOicpO1xuXHRcdFx0dHJhbnMg
PSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNbZGF0YVswXV0gfHwgdHJhbnNb
ZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFbMV0pIHRyYW5zID0gdHJhbnNb
J2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsyXSA/IGRhdGFbMl0uY2FwaXRh
bGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5zO1xuXHR9XG5cbn0pO1xuXG5G
eC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFyYW1zKXtcblx0cGFyYW1zID0g
QXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0gZnVuY3Rpb24ocG9zKXtcblx0
XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07XG5cdHJldHVybiBPYmplY3Qu
YXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxuXHRcdGVhc2VPdXQ6IGZ1bmN0
aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24oMSAtIHBvcywgcGFyYW1zKTtc
blx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAocG9z
IDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6ICgyIC0gdHJhbnNpdGlvbigy
ICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0fSk7XG59O1xuXG5GeC5UcmFu
c2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdHJldHVybiB6ZXJv
O1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQgPSBmdW5jdGlvbih0cmFu
c2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJhbnNpdGlvbnMpIEZ4LlRyYW5z
aXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24odHJhbnNpdGlvbnNbdHJhbnNp
dGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtcblxuXHRQb3c6IGZ1bmN0aW9u
KHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhbMF0gfHwgNik7XG5cdH0sXG5c
blx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDggKiAocCAtIDEp
KTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGguc2lu
KE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJu
IDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxuXG5cdEJhY2s6IGZ1bmN0aW9u
KHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5cdFx0cmV0dXJuIE1hdGgucG93
KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0Qm91bmNlOiBmdW5jdGlvbihw
KXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAsIGIgPSAxOyAxOyBhICs9IGIs
IGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAvIDExKXtcblx0XHRcdFx0dmFs
dWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEgKiBwKSAvIDQsIDIpO1xuXHRc
dFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXG5c
dEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCAxMCAqIC0t
cCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYgeFswXSB8fCAxKSAvIDMpO1xu
XHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQnLCAnUXVpbnQnXS5lYWNoKGZ1
bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5l
dyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCBpICsg
Mik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHdlZW5cblxuZGVzY3JpcHRp
b246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgQ1NTIHByb3Bl
cnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBFbGVtZW50LmZhZGUsIEVsZW1l
bnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9u
cyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVu
dCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihw
cm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0XHRcdG5v
dyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnByb3BlcnR5IHx8IHRoaXMub3B0
aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwcm9w
ZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNo
ZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHZhciBhcmdzID0gQXJy
YXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVydHkgPSB0aGlzLm9wdGlvbnMu
cHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUo
dGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0XHRyZXR1cm4gdGhpcy5wYXJl
bnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVy
dGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0
KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0d2VlbiA9IHRoaXMucmV0cmll
dmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0d2VlbiA9IG5ldyBGeC5Ud2Vl
bih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3R3ZWVuJywgdHdl
ZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBs
ZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdHRo
aXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0byk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZmFkZSA9IHRoaXMuZ2V0
KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5hcHBlbmQoYXJndW1lbnRzKSwg
dG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3NbMV0gPSAndG9nZ2xlJztcblx0
XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBtZXRob2QgPSAnc3RhcnQnOyBh
cmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBtZXRob2QgPSAnc3RhcnQnOyBh
cmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93JzogbWV0aG9kID0gJ3NldCc7IGFy
Z3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBtZXRob2QgPSAnc2V0JzsgYXJn
c1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpcblx0XHRcdFx0dmFyIGZsYWcg
PSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0eWxlKCdvcGFjaXR5JykgPT0g
MSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRcdGFyZ3NbMV0gPSBmbGFnID8g
MCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycsICFmbGFnKTtcblx0XHRcdFx0
dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBtZXRob2QgPSAn
c3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5lbGltaW5hdGUoJ2ZhZGU6Zmxh
ZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdzKTtcblx0XHR2YXIgdG8gPSBh
cmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9kID09ICdzZXQnKXtcblx0XHRc
dHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8gJ2hpZGRlbicgOiAndmlzaWJs
ZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRpZiAoZmFkZS4kY2hhaW4ubGVu
Z3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHRoaXMuZWxl
bWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0dGhpcy5j
YWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNl
dFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xu
XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRpZiAodGhpcy5lbGVtZW50Lmdl
dFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0eWxl
KCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlzLmNhbGxDaGFpbigpO1xuXHRc
dFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGlnaGxpZ2h0OiBm
dW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5cdFx0XHRlbmQgPSB0aGlzLnJl
dHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0eWxlKCdiYWNrZ3JvdW5kLWNv
bG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJlbnQnKSA/ICcjZmZmJyA6IGVu
ZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3ZWVuJyk7XG5cdFx0dHdlZW4u
c3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2ZmZmY4OCcsIGVuZCkuY2hhaW4o
ZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCB0aGlz
LnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0XHR0d2Vlbi5jYWxsQ2hhaW4o
KTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246IFBvd2VyZnVsIGFsbCBwdXJw
b3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3QuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxlbWVudCwgQ2hhaW4sIEV2ZW50
cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0eSA9IGZ1bmN0aW9uKCl7fSxc
blx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBuZXcgQnJvd3Nlci5SZXF1ZXN0
KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxl
bWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0
aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30sXG5cdFx0b25Mb2Fkc3RhcnQ6
IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVzczogZnVuY3Rpb24oZXZlbnQs
IHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30sXG5cdFx0b25DYW5jZWw6IGZ1
bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9u
c2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIpe30sXG5cdFx0b25FeGNlcHRp
b246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRcdG9uVGltZW91dDogZnVuY3Rp
b24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAnJyxcblx0XHR3aXRoQ3JlZGVu
dGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRhOiAnJyxcblx0XHRoZWFkZXJz
OiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXG5cdFx0XHQn
QWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRl
eHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRmb3JtYXQ6IGZhbHNl
LFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25vcmUnLFxuXHRcdGlzU3VjY2Vz
czogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJsRW5jb2RlZDogdHJ1ZSxcblx0
XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czogZmFsc2UsXG5cdFx0ZXZhbFJl
c3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5vQ2FjaGU6IGZhbHNlXG5cdH0s
XG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy54aHIgPSBuZXcg
QnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHRo
aXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9LFxuXG5cdG9uU3RhdGVDaGFu
Z2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmICh4aHIucmVh
ZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtcblx0XHR0aGlzLnJ1bm5pbmcg
PSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVuY3Rpb24uYXR0ZW1wdChmdW5j
dGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7XG5cdFx0XHR0aGlzLnN0YXR1
cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5cdFx0fS5iaW5kKHRoaXMpKTtc
blx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3Vw
cG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHRpZiAo
dGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxl
dGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3BvbnNlID0ge3RleHQ6IHRoaXMu
eGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5yZXNwb25zZVhNTH07XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnN0YXR1cykpXG5cdFx0
XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlzLnJlc3BvbnNlLnhtbCk7XG5c
dFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5cblx0aXNTdWNjZXNzOiBmdW5j
dGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztcblx0XHRyZXR1cm4gKHN0YXR1
cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxuXG5cdHByb2Nlc3NTY3JpcHRz
OiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZSB8fCAo
LyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcignQ29udGVudC10eXBlJykp
KSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVybiB0ZXh0LnN0cmlwU2NyaXB0
cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9u
KHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyh0ZXh0
KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQsIHhtbDogeG1sfSk7XG5cdH0s
XG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0
ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJndW1lbnRzKS5jYWxsQ2hhaW4o
KTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMub25GYWlsdXJlKCk7
XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4aHI6IHRoaXMueGhyfSk7XG5c
dH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjb21w
bGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtcblx0fSxcblxuXHRsb2Fkc3Rh
cnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnbG9hZHN0YXJ0JywgW2V2
ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBmdW5jdGlvbihldmVudCl7XG5c
dFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxu
XG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3RpbWVvdXQnLCB0
aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3RpbWVvdXQnLCB4aHI6IHRoaXMu
eGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0
dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChm
dW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKG5hbWUp
O1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25z
Lmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7
XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVu
dHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0s
XG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKG9wdGlv
bnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgPSB0aGlzLm9w
dGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRcdHRoaXMucnVubmluZyA9IHRy
dWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtcblx0XHRpZiAodHlwZSA9PSAn
c3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9IHtkYXRhOiBvcHRpb25zfTtc
blxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hcHBl
bmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhvZDogb2xkLm1ldGhvZH0sIG9w
dGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1cmwgPSBTdHJpbmcob3B0aW9u
cy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0c3dp
dGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVudCc6IGRhdGEgPSBkb2N1bWVu
dC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnb2JqZWN0Jzog
Y2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTtcblx0XHR9XG5c
blx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2YXIgZm9ybWF0ID0gJ2Zvcm1h
dD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBmb3JtYXQg
KyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW11
bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIg
X21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gX21l
dGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0aG9kID0gJ3Bvc3QnO1xuXHRc
dH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAmJiBbJ3Bvc3QnLCAncHV0J10u
Y29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2RpbmcgPSAodGhpcy5vcHRpb25zLmVu
Y29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcnO1xuXHRc
dFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0aWYgKCF1cmwpIHVybCA9IGRv
Y3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRyaW1Qb3NpdGlvbiA9IHVybC5s
YXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24gPiAtMSAmJiAodHJpbVBvc2l0
aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJsLnN1YnN0cigwLCB0cmltUG9z
aXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hlKVxuXHRcdFx0dXJsICs9ICh1
cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3RyaW5nLnVuaXF1ZUlEKCk7XG5c
blx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1ldGhvZCA9PSAnZGVsZXRlJykp
e1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgZGF0
YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtc
blx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5vbmxvYWRzdGFydCA9IHRoaXMu
bG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9ncmVzcyA9IHRoaXMucHJvZ3Jl
c3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3BlbihtZXRob2QudG9VcHBlckNhc2Uo
KSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9ucy51c2VyLCB0aGlzLm9wdGlv
bnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndpdGhDcmVkZW50aWFscykgJiYg
J3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblxu
XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlz
KTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVuY3Rpb24odmFsdWUsIGtleSl7
XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbHVlKTtc
blx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnZXhjZXB0aW9uJywg
W2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2V4Y2VwdGlvbics
IHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRc
dGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMu
cmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZl
bnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0XHRpZiAoIXRoaXMub3B0aW9u
cy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5vcHRpb25z
LnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVsYXkodGhpcy5vcHRpb25zLnRp
bWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVuY3Rp
b24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5ydW5u
aW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdHhoci5hYm9ydCgpO1xu
XHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0
XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdl
ID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIu
b25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVlc3Qo
KTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNv
bjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUnLCAncGF0
Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVMRVRFJywgJ1BBVENIJywgJ0hF
QUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNbbWV0aG9kXSA9IGZ1bmN0aW9u
KGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRob2Q6IG1ldGhvZFxuXHRcdH07
XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBkYXRhO1xuXHRcdHJldHVybiB0
aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0LmltcGxlbWVudChtZXRob2Rz
KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRp
b25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJykuY2FuY2VsKCk7XG5cdFx0c2Vu
ZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmlldmUoJ3NlbmQnKTtcblx0XHRp
ZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtcblx0XHRcdFx0ZGF0YTogdGhp
cywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0Jywg
dXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zdG9yZSgnc2Vu
ZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0fVxuXG59O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtcblx0XHR2YXIgc2VuZGVyID0g
dGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0YTogdGhpcywgdXJsOiB1cmwg
fHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1MXG5cbmRlc2NyaXB0aW9uOiBF
eHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZv
ciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0XVxuXG5wcm92aWRlczogUmVx
dWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1cGRhdGU6IGZhbHNlLFxuXHRc
dGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUsXG5cdFx0ZmlsdGVyOiBmYWxz
ZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0L2h0bWwsIGFwcGxpY2F0aW9u
L3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24o
dGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIHJlc3BvbnNlID0gdGhpcy5y
ZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0cmlwU2NyaXB0cyhmdW5jdGlv
bihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9IHNjcmlwdDtcblx0XHR9KTtc
blxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2goLzxib2R5W14+XSo+KFtcXHNc
XFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVzcG9uc2UuaHRtbCA9IG1hdGNo
WzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2RpdicpLnNldCgnaHRtbCcsIHJlc3Bv
bnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAuY2hpbGROb2Rlcztcblx0XHRy
ZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0aW9ucy5maWx0ZXIgfHwgJyon
KTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UudHJlZSA9IHJlc3BvbnNlLmVs
ZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0XHR2YXIgdXBkYXRlID0gZG9j
dW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0
ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5cdFx0XHRlbHNlIHVwZGF0ZS5z
ZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2UgaWYgKG9wdGlvbnMuYXBwZW5k
KXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRpb25zLmFwcGVuZCk7XG5cdFx0
XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRzLnJldmVyc2UoKS5pbmplY3Qo
YXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAuZ2V0Q2hpbGRyZW4oKSk7XG5c
dFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93c2VyLmV4ZWMocmVzcG9uc2Uu
amF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNwb25zZS50cmVlLCByZXNwb25z
ZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cdFx0dGhp
cy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50czogcmVzcG9uc2UuZWxlbWVu
dHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJlc3BvbnNlLmphdmFzY3JpcHR9
KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxvYWQgPSB7XG5cblx0c2V0OiBm
dW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMuZ2V0KCdsb2FkJykuY2FuY2Vs
KCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMucmV0cmlldmUoJ2xv
YWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5ldyBSZXF1ZXN0LkhUTUwoe2Rh
dGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMsIG1ldGhvZDogJ2dldCd9KTtc
blx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9XG5cdFx0cmV0dXJuIGxvYWQ7
XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGxvYWQ6IGZ1bmN0aW9uKCl7
XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5LmxpbmsoYXJndW1lbnRzLCB7ZGF0YTog
VHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxuZGVzY3JpcHRpb246IEpTT04g
ZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cblNl
ZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWlyZXM6IFtBcnJheSwgU3RyaW5n
LCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxuXG4uLi5cbiovXG5cbmlmICh0
eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0ge307XG5cblxuXG4oZnVuY3Rp
b24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYicsICdcXHQnOiAnXFxcXHQnLCAn
XFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAnXFxcXHInLCAnXCInIDogJ1xc
XFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2NhcGUgPSBmdW5jdGlvbihjaHIp
e1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAoJzAwMDAnICsgY2hyLmNoYXJD
b2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xuXG5KU09OLnZhbGlkYXRlID0g
ZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcXFwoPzpbXCJc
XFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5cblx0XHRcdFx0XHRyZXBsYWNl
KC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8LT9cXGQrKD86XFwuXFxkKik/
KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0XHRyZXBsYWNlKC8oPzpefDp8
LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15bXFxdLDp7fVxcc10qJC8pLnRl
c3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5zdHJpbmdpZnkgPyBmdW5jdGlv
bihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcbn0gOiBmdW5jdGlvbihvYmop
e1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50b0pTT04oKTtcblxuXHRzd2l0
Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJuICdcIicg
KyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBlc2NhcGUpICsgJ1wiJztcblx0
XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2JqLm1hcChKU09OLmVuY29kZSku
Y2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzpcblx0XHRcdHZh
ciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtl
eSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFsdWUpO1xuXHRcdFx0XHRpZiAo
anNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6JyArIGpzb24pO1xuXHRcdFx0
fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xuXHRcdGNhc2UgJ251bWJlcic6
IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0Y2FzZSAnbnVsbCc6IHJldHVy
biAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkpTT04uc2VjdXJlID0gdHJ1
ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywgc2VjdXJlKXtcblx0aWYgKCFz
dHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuXG5cdGlm
IChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7XG5cdGlmIChzZWN1cmUpe1xu
XHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpO1xuXHRcdGlmICgh
SlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3IoJ0pTT04gY291bGQgbm90IGRl
Y29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5kIHRoZSB2YWx1ZSBpcyBub3Qg
c2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsgc3RyaW5nICsgJyknKTtcbn07
XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5KU09OXG5cbmRlc2NyaXB0aW9u
OiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2Rz
IGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09OXVxuXG5wcm92aWRlczogUmVx
dWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0gbmV3IENsYXNzKHtcblxuXHRF
eHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQvKm9uRXJyb3I6IGZ1bmN0aW9u
KHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5cdH0sXG5cblx0aW5pdGlhbGl6
ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdFx0T2Jq
ZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2NlcHQnOiAnYXBwbGljYXRpb24v
anNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0fSk7XG5cdH0sXG5cblx0c3Vj
Y2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5cdFx0dHJ5IHtcblx0XHRcdGpz
b24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0ZXh0LCB0aGlzLm9wdGlvbnMu
c2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnZXJy
b3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGpzb24g
PT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhp
cy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJlc29sdmUoe2pzb246IGpzb24s
IHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogQ29v
a2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcsIHJlYWRpbmcsIGFuZCBkZWxl
dGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5j
cmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkgUGV0ZXItUGF1bCBLb2NoICho
dHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09wdGlvbnMsIEJyb3dzZXJdXG5c
bnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29va2llID0gbmV3IENsYXNzKHtc
blxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6IHtcblx0XHRwYXRoOiAnLycs
XG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFsc2UsXG5cdFx0c2VjdXJlOiBm
YWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5jb2RlOiB0cnVlLFxuXHRcdGh0
dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGtleSwgb3B0aW9u
cyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xu
XHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5l
bmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0aGlzLm9wdGlvbnMuZG9tYWlu
O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0gJzsgcGF0aD0nICsgdGhpcy5v
cHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7XG5cdFx0XHR2YXIg
ZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyB0
aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblx0XHRcdHZhbHVl
ICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtcblx0XHR9XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7XG5cdFx0aWYgKHRoaXMub3B0
aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xuXHRcdHRoaXMub3B0aW9ucy5k
b2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVlO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHZhbHVlID0gdGhpcy5vcHRp
b25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxzKicgKyB0aGlzLmtleS5lc2Nh
cGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAodmFsdWUpID8gZGVjb2RlVVJJ
Q29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24o
KXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVyZ2Uoe30sIHRoaXMub3B0aW9u
cywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIG9wdGlvbnMpe1xuXHRy
ZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZhbHVlKTtcbn07XG5cbkNvb2tp
ZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5KS5yZWFkKCk7
XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdHJldHVy
biBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xufTtcblxuLypcbi0tLVxuXG5u
YW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGN1c3RvbSBldmVudCBk
b21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQnJv
d3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtET01SZWFkeSwgRG9t
UmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpe1xuXG52YXIg
cmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNob3VsZFBvbGwsXG5cdHRpbWVy
LFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG52YXIg
ZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIXJl
YWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1ZTtcblx0XHRkb2N1bWVudC5y
ZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KS5yZW1vdmVMaXN0ZW5l
cigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1bWVudC5maXJlRXZlbnQoJ2Rv
bXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVhZHknKTtcblx0fVxuXHQvLyBj
bGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cgPSB0ZXN0RWxlbWVudCA9IG51
bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRmb3IgKHZhciBpID0gY2hlY2tz
Lmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRkb21yZWFkeSgpO1xuXHRcdHJl
dHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBwb2xsID0gZnVuY3Rp
b24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFjaGVjaygpKSB0aW1lciA9IHNl
dFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ0RPTUNvbnRl
bnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4vLyBkb1Njcm9sbCB0ZWNobmlx
dWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRM
b2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93cyB3aGVuIHRoZSBET00gaXMg
bm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIgZG9TY3JvbGxXb3JrcyA9IGZ1
bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9TY3JvbGwoKTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuLy8gSWYgZG9T
Y3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgZG9tcmVh
ZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxlbWVudC5kb1Njcm9sbCAmJiAh
ZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3JvbGxXb3Jrcyk7XG5cdHNob3Vs
ZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChkb2N1bWVudC5yZWFkeVN0YXRl
KSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0
YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0YXRlID09ICdjb21wbGV0ZScp
O1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBkb2N1bWVudCkgZG9jdW1lbnQu
YWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7XG5lbHNlIHNob3VsZFBvbGwg
PSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5FbGVtZW50LkV2ZW50cy5kb21y
ZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAocmVhZHkpIGZuLmNhbGwo
dGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRvbXJlYWR5IGZpcmVzIGJlZm9y
ZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNlOiAnbG9hZCcsXG5cdG9uQWRk
OiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlzID09IHdpbmRvdykgZm4uY2Fs
bCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzID09
IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVsZXRlIEVsZW1lbnQuRXZlbnRz
LmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG4vLyBUaGlzIGlzIGJh
c2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFkZEV2ZW50KCdsb2FkJywgZnVu
Y3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3aW5kb3csIGRvY3VtZW50KTtc
biIKIAogLyoqKi8gfSksCiAvKiA0MTIgKi8KQEAgLTExMzg5NCwxMyArMTEzODk0LDEzIEBAIG1v
ZHVsZS5leHBvcnRzID0gIi8qanNoaW50IHF1b3RtYXJrOiBmYWwKIC8qIDQyMCAqLwogLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyBsaWJz
L2pxdWVyeS9qcXVlcnkuZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAo
YykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsg
eW91IG1heSBub3QgdXNlXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElTIFBST1ZJ
REVEICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WVxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElN
SVRBVElPTiBBTlkgSU1QTElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1J
TkZSSU5HRU1FTlQuXG5cblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlwaW5nIGZv
ciB0aGUgalF1ZXJ5IGxpYnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFByb2plY3Q6
IGh0dHA6Ly9qcXVlcnkuY29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtvdiA8aHR0
cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3RlciA8aHR0
cHM6Ly9naXRodWIuY29tL2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxlaSBHb21l
cyA8aHR0cHM6Ly9naXRodWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0dHBzOi8v
Z2l0aHViLmNvbS90YXNvaWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxodHRwczov
L2dpdGh1Yi5jb20vc2VhbnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9H
dXV6PiwgS2VsbHkgU3VtbWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxpbj4sIEJh
c2FyYXQgQWxpIFN5ZWQgPGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9sYXMgV29s
dmVyc29uIDxodHRwczovL2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vyb25lIDxo
dHRwczovL2dpdGh1Yi5jb20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0dHBzOi8v
Z2l0aHViLmNvbS9BbmRyZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0dHBzOi8v
Z2l0aHViLmNvbS9qYW1lc2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9naXRodWIu
Y29tL3NlaWtpY2hpPiwgQmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29tL2Jlbmph
bWluamFja21hbj4sIFBvdWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkzMjk0Piwg
Sm9zaCBTdHJvYmwgPGh0dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBSZWlsbHkg
PGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAgICBJbnRl
cmZhY2UgZm9yIHRoZSBBSkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgQUpBWCBy
ZXF1ZXN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAg
ICogVGhlIGNvbnRlbnQgdHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0IHRlbGxz
IHRoZSBzZXJ2ZXIgd2hhdCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGluIHJldHVy
bi4gSWYgdGhlIGFjY2VwdHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29t
bWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxuICAgICAq
L1xuICAgIGFjY2VwdHM/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgYWxsIHJl
cXVlc3RzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRvIHRydWUg
YnkgZGVmYXVsdCkuIElmIHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQgdGhpcyBv
cHRpb24gdG8gZmFsc2UuIENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6IFwianNv
bnBcIiByZXF1ZXN0cyBkbyBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE5vdGUg
dGhhdCBzeW5jaHJvbm91cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUgYnJvd3Nl
ciwgZGlzYWJsaW5nIGFueSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQXMg
b2YgalF1ZXJ5IDEuOCwgdGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAoJC5EZWZl
cnJlZCkgaXMgZGVwcmVjYXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9yL2NvbXBs
ZXRlIGNhbGxiYWNrIG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Rz
IG9mIHRoZSBqcVhIUiBvYmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRlcHJlY2F0
ZWQganFYSFIuc3VjY2VzcygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgICAv
KipcbiAgICAgKiBBIHByZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVz
ZWQgdG8gbW9kaWZ5IHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkg
b2JqZWN0IGJlZm9yZSBpdCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhlYWRlcnMs
IGV0Yy4gVGhlIGpxWEhSIGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMgYXJndW1l
bnRzLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUgYmVmb3Jl
U2VuZCBmdW5jdGlvbiB3aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5IDEuNSwg
dGhlIGJlZm9yZVNlbmQgb3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5
cGUgb2YgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpRdWVyeVhI
Uiwgc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBJ
ZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0byBiZSBj
YWNoZWQgYnkgdGhlIGJyb3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ugd2lsbCBv
bmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3b3JrcyBi
eSBhcHBlbmRpbmcgXCJfPXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJzLiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3RzLCBleGNl
cHQgaW4gSUU4IHdoZW4gYSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxyZWFkeSBi
ZWVuIHJlcXVlc3RlZCBieSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xlYW47XG4g
ICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBm
aW5pc2hlcyAoYWZ0ZXIgc3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCku
IFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpR
dWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0ZWdvcml6
aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1vZGlmaWVk
XCIsIFwiZXJyb3JcIiwgXCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJlcnJvclwi
KS4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBh
cnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4g
VGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFYSFI6IEpR
dWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9i
amVjdCBvZiBzdHJpbmcvcmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJtaW5lIGhv
dyBqUXVlcnkgd2lsbCBwYXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50IHR5cGUu
ICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtrZXk6IHN0
cmluZ106IGFueTsgfTtcbiAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3VyY2UgY29k
ZSwgYWpheCdzIG9wdGlvbiBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0IHRvIFwi
ZmFsc2VcIlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5
VHlwZWQvaXNzdWVzLzc0MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRhIHRvIHRo
ZSBzZXJ2ZXIsIHVzZSB0aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxpY2F0aW9u
L3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBmaW5lIGZv
ciBtb3N0IGNhc2VzLiBJZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10eXBlIHRv
ICQuYWpheCgpLCB0aGVuIGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2ZW4gaWYg
bm8gZGF0YSBpcyBzZW50KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0aW9uIGRp
Y3RhdGVzIHRoYXQgdGhlIGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5nIGFub3Ro
ZXIgY2hhcnNldCB3aWxsIG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhlIGVuY29k
aW5nLlxuICAgICAqL1xuICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRo
aXMgb2JqZWN0IHdpbGwgYmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxhdGVkIGNh
bGxiYWNrcy4gQnkgZGVmYXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVz
ZW50cyB0aGUgYWpheCBzZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0aW5ncyBt
ZXJnZWQgd2l0aCB0aGUgc2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICovXG4gICAg
Y29udGV4dD86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
VHlwZS10by1kYXRhVHlwZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVlIGlzIGEg
ZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUgcmVzcG9u
c2UuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRvIGZvcmNl
IGEgY3Jvc3NEb21haW4gcmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUgZG9tYWlu
LCBzZXQgdGhlIHZhbHVlIG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dzLCBmb3Ig
ZXhhbXBsZSwgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4uICh2ZXJz
aW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFuO1xuICAg
IC8qKlxuICAgICAqIERhdGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBjb252ZXJ0
ZWQgdG8gYSBxdWVyeSBzdHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdzIGFwcGVu
ZGVkIHRvIHRoZSB1cmwgZm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9wdGlvbiB0
byBwcmV2ZW50IHRoaXMgYXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJlIEtleS9W
YWx1ZSBwYWlycy4gSWYgdmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVzIG11bHRp
cGxlIHZhbHVlcyB3aXRoIHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdHJhZGl0
aW9uYWwgc2V0dGluZyAoZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRhPzogYW55
O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUgdGhlIHJh
dyByZXNwb25zZSBkYXRhIG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmlsdGVyaW5n
IGZ1bmN0aW9uIHRvIHNhbml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1cm4gdGhl
IHNhbml0aXplZCBkYXRhLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzOiBUaGUg
cmF3IGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBlJyBwYXJh
bWV0ZXIuXG4gICAgICovXG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFueSk6IGFu
eTtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4cGVjdGlu
ZyBiYWNrIGZyb20gdGhlIHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVyeSB3aWxs
IHRyeSB0byBpbmZlciBpdCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNwb25zZSAo
YW4gWE1MIE1JTUUgdHlwZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5aWVsZCBh
IEphdmFTY3JpcHQgb2JqZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0
LCBhbmQgYW55dGhpbmcgZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5cbiAgICAg
Ki9cbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRv
IGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRo
cmVlIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0
KSBvYmplY3QsIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1
cnJlZCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3VycmVkLiBQ
b3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVsbCkgYXJl
IFwidGltZW91dFwiLCBcImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJyb3JcIi4g
V2hlbiBhbiBIVFRQIGVycm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhlIHRleHR1
YWwgcG9ydGlvbiBvZiB0aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRcIiBvciBc
IkludGVybmFsIFNlcnZlciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJyb3Igc2V0
dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxs
IGJlIGNhbGxlZCBpbiB0dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3Ig
Y3Jvc3MtZG9tYWluIHNjcmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3RzLiBUaGlz
IGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1ZXJ5WEhS
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAgICAvKipc
biAgICAgKiBXaGV0aGVyIHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxlcnMgZm9y
IHRoaXMgcmVxdWVzdC4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRvIHByZXZl
bnQgdGhlIGdsb2JhbCBoYW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBmcm9tIGJl
aW5nIHRyaWdnZXJlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgQWpheCBF
dmVudHMuXG4gICAgICovXG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBB
biBvYmplY3Qgb2YgYWRkaXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNlbmQgYWxv
bmcgd2l0aCByZXF1ZXN0cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0LiBUaGUg
aGVhZGVyIFgtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBhZGRlZCwg
YnV0IGl0cyBkZWZhdWx0IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGhlcmUu
IFZhbHVlcyBpbiB0aGUgaGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0dGVuIGZy
b20gd2l0aGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDogMS41KVxu
ICAgICAqL1xuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipc
biAgICAgKiBBbGxvdyB0aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIHJl
c3BvbnNlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBi
eSBjaGVja2luZyB0aGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUgaXMgZmFs
c2UsIGlnbm9yaW5nIHRoZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlxdWUgYWxz
byBjaGVja3MgdGhlICdldGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRjaCB1bm1v
ZGlmaWVkIGRhdGEuXG4gICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4gICAgLyoq
XG4gICAgICogQWxsb3cgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2duaXplZCBh
cyBcImxvY2FsLFwiIChlLmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkgZG9lcyBu
b3QgcmVjb2duaXplIGl0IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBwcm90b2Nv
bHMgYXJlIGN1cnJlbnRseSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVuc2lvbiwg
YW5kIHdpZGdldC4gSWYgdGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0
IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9k
LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJvb2xlYW47
XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgaW4g
YSBqc29ucCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICdjYWxs
YmFjaycgaW4gdGhlICdjYWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgaW4gdGhl
IHVybC4gU28ge2pzb25wOidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25KU09OUExv
YWQ9PycgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRpbmcgdGhl
IGpzb25wIG9wdGlvbiB0byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcgdGhlIFwi
P2NhbGxiYWNrXCIgc3RyaW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2UgXCI9P1wi
IGZvciB0cmFuc2Zvcm1hdGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28gZXhwbGlj
aXRseSBzZXQgdGhlIGpzb25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsganNvbnA6
IGZhbHNlLCBqc29ucENhbGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9cbiAgICBq
c29ucD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFjayBmdW5j
dGlvbiBuYW1lIGZvciBhIEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGlu
c3RlYWQgb2YgdGhlIHJhbmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGpRdWVy
eS4gSXQgaXMgcHJlZmVyYWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUg
YXMgaXQnbGwgbWFrZSBpdCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQgcHJvdmlk
ZSBjYWxsYmFja3MgYW5kIGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3BlY2lmeSB0
aGUgY2FsbGJhY2sgd2hlbiB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIgY2FjaGlu
ZyBvZiBHRVQgcmVxdWVzdHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1c2UgYSBm
dW5jdGlvbiBmb3IgdGhpcyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBvZiBqc29u
cENhbGxiYWNrIGlzIHNldCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uXG4g
ICAgICovXG4gICAganNvbnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIG1pbWUg
dHlwZSB0byBvdmVycmlkZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNS4x
KVxuICAgICAqL1xuICAgIG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgcGFz
c3dvcmQgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhU
VFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFzc3dvcmQ/
OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQgaW4gdG8g
dGhlIGRhdGEgb3B0aW9uIGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5nIG90aGVy
IHRoYW4gYSBzdHJpbmcpIHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIGEg
cXVlcnkgc3RyaW5nLCBmaXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBcImFwcGxp
Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgRE9N
RG9jdW1lbnQsIG9yIG90aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0aW9uIHRv
IGZhbHNlLlxuICAgICAqL1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMgdXNlZCAo
ZS5nLiwgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2NyaXB0XCIg
ZGF0YVR5cGUgYW5kIFwiR0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIG9u
IHRoZSBzY3JpcHQgdGFnIHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUgY2hhcmFj
dGVyIHNldCBvbiB0aGUgbG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBvbiB0
aGUgcmVtb3RlIHNjcmlwdC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3RyaW5nO1xu
ICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5kIGZ1bmN0
aW9ucyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNwb25kaW5n
IGNvZGUuIGYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2RlIGZ1bmN0
aW9ucyB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2s7IGlm
IGl0IHJlc3VsdHMgaW4gYW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0aGV5IHRh
a2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJzaW9uIGFk
ZGVkOiAxLjUpXG4gICAgICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1
ZXN0IHN1Y2NlZWRzLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1lbnRzOiBU
aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8g
dGhlIGRhdGFUeXBlIHBhcmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3RhdHVzOyBh
bmQgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QuIEFz
IG9mIGpRdWVyeSAxLjUsIHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBv
ZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBp
cyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAgICAgKiBT
ZXQgYSB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhpcyB3aWxs
IG92ZXJyaWRlIGFueSBnbG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgpLiBUaGUg
dGltZW91dCBwZXJpb2Qgc3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwgaXMgbWFk
ZTsgaWYgc2V2ZXJhbCBvdGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBicm93
c2VyIGhhcyBubyBjb25uZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHJl
cXVlc3QgdG8gdGltZSBvdXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkgMS40Lngg
YW5kIGJlbG93LCB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4gaW52YWxp
ZCBzdGF0ZSBpZiB0aGUgcmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2JqZWN0IG1l
bWJlcnMgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHksIHNjcmlw
dCBhbmQgSlNPTlAgcmVxdWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVvdXQ7IHRo
ZSBzY3JpcHQgd2lsbCBydW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1lb3V0IHBl
cmlvZC5cbiAgICAgKi9cbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNl
dCB0aGlzIHRvIHRydWUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBzdHlsZSBv
ZiBwYXJhbSBzZXJpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzogYm9vbGVh
bjtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwiUE9TVFwi
IG9yIFwiR0VUXCIpLCBkZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAgcmVxdWVz
dCBtZXRob2RzLCBzdWNoIGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2VkIGhlcmUs
IGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAgKi9cbiAg
ICB0eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl
IFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVybD86IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRw
UmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0LlxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIENh
bGxiYWNrIGZvciBjcmVhdGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZhdWx0cyB0
byB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0cFJlcXVl
c3Qgb3RoZXJ3aXNlLiBPdmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9u
IGZvciBYTUxIdHRwUmVxdWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3RvcnkuXG4gICAg
ICovXG4gICAgeGhyPzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBmaWVsZE5h
bWUtZmllbGRWYWx1ZSBwYWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0LiBGb3Ig
ZXhhbXBsZSwgeW91IGNhbiB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0cnVlIGZv
ciBjcm9zcy1kb21haW4gcmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0aGUgd2l0
aENyZWRlbnRpYWxzIHByb3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0aXZlIFhI
UiBhbmQgdGh1cyBDT1JTIHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUgdGhpcyBm
bGFnLiBGb3IgdGhpcyByZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41LjErIHNo
b3VsZCB5b3UgcmVxdWlyZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4g
ICAgICovXG4gICAgeGhyRmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNlIEpRdWVy
eVhIUiBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xuICAgIG92
ZXJyaWRlTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChzdGF0dXNU
ZXh0Pzogc3RyaW5nKTogdm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVl
cnkgY2FsbGJhY2tcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFkZCguLi5j
YWxsYmFja3M6IGFueVtdKTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVtcHR5KCk6
IGFueTtcbiAgICBmaXJlKC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmlyZWQoKTog
Ym9vbGVhbjtcbiAgICBmaXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55
O1xuICAgIGhhcyhjYWxsYmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFueTtcbiAg
ICBsb2NrZWQoKTogYm9vbGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFu
eTtcbn1cblxuLypcbiAgICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Agd2l0aCBu
b24talF1ZXJ5IHByb21pc2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+
IHtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChy
ZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4o
b25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVj
dD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRo
ZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55
KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4p
OiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBKUXVlcnkgcHJvbWlzZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5
UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBh
bHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4u
LmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4u
cHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBhbHdheXMo
Li4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSgu
Li5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5m
YWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4u
cHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIC8vIERl
cHJlY2F0ZWQgLSBnaXZlbiBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzogKHg6IGFu
eSkgPT4gYW55LCBmYWlsRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0ZpbHRlcj86
ICh4OiBhbnkpID0+IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9u
UHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNl
PFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG5cbiAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNrXG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICgu
Li5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55
W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICgu
Li52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAo
Li4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFu
eVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAo
Li4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+
IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86
ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jl
c3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xu
fVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFydCBvZiBj
YWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQ
cm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFs
d2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCgu
Li5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcygu
Li5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBhbHdh
eXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRv
bmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWls
KC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jl
c3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAg
ICBub3RpZnkoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBub3RpZnlX
aXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxu
ICAgIHJlamVjdCguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlamVj
dFdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
XG4gICAgcmVzb2x2ZSh2YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlKC4u
LmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgoY29udGV4
dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0YXRlKCk6
IHN0cmluZztcblxuICAgIHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxUPjtc
bn1cblxuLypcbiAgICBJbnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2YgdGhlIFcz
QyBldmVudCBvYmplY3RcbiovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QgZXh0
ZW5kcyBFdmVudCB7XG4gICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBFbGVtZW50
O1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRpYXRlUHJv
cG9nYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTog
Ym9vbGVhbjtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVsdCgpOiBh
bnk7XG4gICAgcmVsYXRlZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtcbiAgICBz
dG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb24oKTog
dm9pZDtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgd2hpY2g6
IG51bWJlcjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5SW5w
dXRFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgYWx0S2V5
OiBib29sZWFuO1xuICAgIGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9vbGVhbjtc
biAgICBzaGlmdEtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246IG51bWJl
cjtcbiAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIG9mZnNl
dFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAg
ICBwYWdlWTogbnVtYmVyO1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5ZOiBudW1i
ZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlu
cHV0RXZlbnRPYmplY3Qge1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVtYmVyO1xu
ICAgIGtleTogYW55O1xuICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVy
eVBvcFN0YXRlRXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAg
IG9yaWdpbmFsRXZlbnQ6IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVlcnlFdmVu
dE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRFdmVudE9i
amVjdCwgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3QsIEpRdWVy
eVBvcFN0YXRlRXZlbnRPYmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2YgcHJvcGVy
dGllcyBvZiB0aGUgY3VycmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5U3VwcG9y
dCB7XG4gICAgYWpheD86IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xuICAgIGNo
YW5nZUJ1YmJsZXM/OiBib29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xuICAgIGNo
ZWNrT24/OiBib29sZWFuO1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0PzogYm9v
bGVhbjtcbiAgICBocmVmTm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlhbGl6ZT86
IGJvb2xlYW47XG4gICAgbGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVD
aGVja2VkPzogYm9vbGVhbjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAgIG9wYWNp
dHk/OiBib29sZWFuO1xuICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRTZWxlY3Rl
ZD86IGJvb2xlYW47XG4gICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5bGU/OiBi
b29sZWFuO1xuICAgIHN1Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5PzogYm9vbGVh
bjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBzdHJpbmc7
XG4gICAgKG9iajogYW55LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1cblxuLyoq
XG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMgKHdpdGgg
JC5FdmVudCkuIEl0IGlzXG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBpbmxpbmUg
aW4gSlF1ZXJ5U3RhdGljIHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1Y3Rpb24g
ZnVuY3Rpb24gd2l0aCBzcGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lmaWMgZXZl
bnQgb2JqZWN0cy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ige1xuICAg
IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0
O1xuICAgIG5ldyAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlF
dmVudE9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3BlY2lmeSBl
YXNpbmcgZnVuY3Rpb25zLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAgICBsaW5l
YXIocDogbnVtYmVyKTogbnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJlcjtcbn1c
blxuLypcbiAgICBTdGF0aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5kIGpRdWVy
eSB0aGVtc2VsdmVzKVxuKi9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAgLyoqXG4g
ICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBj
b25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBk
ZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAg
ICAqL1xuICAgIGFqYXgoc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3Mg
QSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3Qu
IEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkg
b3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDogc3RyaW5n
LCBzZXR0aW5ncz86IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxu
ICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRp
b25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nl
c3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMgQW4gb3B0
aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGRhdGFU
eXBlc1xuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1
ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIo
ZGF0YVR5cGVzOiBzdHJpbmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1
ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuICAgIC8q
KlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBv
cHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHBy
b2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFu
ZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAg
ICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRz
OiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG5c
biAgICBhamF4U2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipcbiAgICAg
ICogU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRzIHVzZSBp
cyBub3QgcmVjb21tZW5kZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0
IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4IHJlcXVl
c3QuIEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNldHVwKG9w
dGlvbnM6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2Fk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRo
ZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBw
YXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4g
RGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5c
biAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJp
bmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZl
ciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQg
dG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEg
Y2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVk
cy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9t
IHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlw
dCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRo
ZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxp
Z2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdl
dCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVz
dCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhh
dCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRK
U09OKHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5n
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICog
TG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCBy
ZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBB
IHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0
aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRo
YXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0
SlNPTih1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRl
eHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xu
ICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVz
aW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAg
ICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0
aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxu
ICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/
OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBmaWxlIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0ZSBpdC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRv
IHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxu
ICAgICAqL1xuICAgIGdldFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3JpcHQ6IHN0
cmluZywgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVl
cnlYSFI7XG5cbiAgICBwYXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAgKiBMb2Fk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQg
aWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4g
ICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUg
c2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRl
eHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0
YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0
YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZy
b20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcg
dGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFy
YW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJl
cXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2Fu
IGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBv
ZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vl
c3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVy
bDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1
czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTog
SlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNp
bmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAg
ICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0
aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBS
ZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQg
Y2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBm
cm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNj
cmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86
IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6
IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcblxuICAg
IC8qKlxuICAgICAqIEEgbXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3QgdGhhdCBw
cm92aWRlcyBhIHBvd2VyZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQg
ZmxhZ3MgdGhhdCBjaGFuZ2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4gICAgICov
XG4gICAgQ2FsbGJhY2tzKGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5cbiAgICAv
KipcbiAgICAgKiBIb2xkcyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVyeSdzIHJl
YWR5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdoZXRoZXIg
dGhlIHJlYWR5IGhvbGQgaXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAgICovXG4g
ICAgaG9sZFJlYWR5KGhvbGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9yOiBzdHJp
bmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBKUXVl
cnk7XG4gICAgKG9iamVjdDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTogRWxlbWVu
dFtdKTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAoZnVuYzog
RnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAgICAoKTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250cm9sIG9m
IHRoZSAkIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBBIEJvb2xl
YW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxlcyBmcm9t
IHRoZSBnbG9iYWwgc2NvcGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAgKi9cbiAg
ICBub0NvbmZsaWN0KHJlbW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAvKipcbiAg
ICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBv
biBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXBy
ZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJl
ZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmpl
Y3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxUPltdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBh
IHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBv
YmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9u
b3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUg
RGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xu
ICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8q
KlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJh
c2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0
IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRl
ZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0
IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
biAgICBjc3NOdW1iZXI6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0cmFyeSBk
YXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMgdGhlIHZh
bHVlIHRoYXQgd2FzIHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00g
ZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEg
c3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBhcmFtIHZh
bHVlIFRoZSBuZXcgZGF0YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1lbnQ6IEVs
ZW1lbnQsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJu
cyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpR
dWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBm
b3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVs
ZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0
cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAgIGRhdGEo
ZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogUmV0
dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5
IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9y
ZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9N
IGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YShl
bGVtZW50OiBFbGVtZW50KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVsZW1lbnQp
OiBib29sZWFuO1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3Ry
aW5nKTogYW55W107XG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJp
bmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShl
bGVtZW50OiBFbGVtZW50LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJy
ZWRcbiAgICBEZWZlcnJlZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5RGVmZXJy
ZWQ8VD4pID0+IGFueSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAg
IGZ4OiB7IHRpY2s6ICgpID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgpID0+IHZv
aWQ7IHNwZWVkczogeyBzbG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBib29sZWFu
OyBzdGVwOiBhbnk7IH07XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4uLmFyZ3M6
IGFueVtdKSA9PiBhbnksIGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAg
cHJveHkoY29udGV4dDogYW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xu
XG4gICAgRXZlbnQ6IEpRdWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRlcm5hbHNc
biAgICBlcnJvcihtZXNzYWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3Vz
XG4gICAgZXhwcjogYW55O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cgd2Ugd2Fu
dCB0byB0eXBlIHRoaXNcbiAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGll
c1xuICAgIHN1cHBvcnQ6IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBj
b250YWlucyhjb250YWluZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJvb2xlYW47
XG5cbiAgICBlYWNoKGNvbGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IGFu
eSwgdmFsdWVPZkVsZW1lbnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29sbGVjdGlv
bjogSlF1ZXJ5LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVu
dDogSFRNTEVsZW1lbnQpID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rpb246IFRb
XSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IFQpID0+
IGFueSk6IGFueTtcblxuICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBh
bnk7XG4gICAgZXh0ZW5kKGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlb
XSk6IGFueTtcblxuICAgIGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4gICAgZ3Jl
cDxUPihhcnJheTogVFtdLCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTog
bnVtYmVyKSA9PiBib29sZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAgaW5BcnJh
eTxUPih2YWx1ZTogVCwgYXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xu
XG4gICAgaXNBcnJheShvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVjdChvYmo6
IGFueSk6IGJvb2xlYW47XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47XG4gICAg
aXNOdW1lcmljKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qob2JqOiBh
bnkpOiBib29sZWFuO1xuICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1hN
TERvYyhub2RlOiBOb2RlKTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFueSk6IGFu
eVtdO1xuXG4gICAgbWFwPFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJy
YXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChhcnJheTog
YW55LCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTogYW55KSA9
PiBhbnkpOiBhbnk7XG5cbiAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRbXSk6IFRb
XTtcbiAgICBtZXJnZTxULFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107XG5cbiAg
ICBub29wKCk6IGFueTtcblxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpTT04oanNv
bjogc3RyaW5nKTogYW55O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8g
YW4gWE1MIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwtZm9ybWVk
IFhNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0YTogc3Ry
aW5nKTogWE1MRG9jdW1lbnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5h
bWU6IHN0cmluZywgbmV3UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShzdHI6IHN0
cmluZyk6IHN0cmluZztcblxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAgICB1bmlx
dWUoYXJyOiBhbnlbXSk6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5n
IGludG8gYW4gYXJyYXkgb2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEg
SFRNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9NIGVsZW1l
bnQgdG8gc2VydmUgYXMgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21lbnQgd2ls
bCBiZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBpbmRpY2F0
aW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBzdHJpbmdc
biAgICAgKi9cbiAgICBwYXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRNTEVsZW1l
bnQsIGtlZXBTY3JpcHRzPzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9uKGVsZW06
IGFueSwgcHJvcGVydGllczogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBlYXNpbmc6
IEpRdWVyeUVhc2luZztcbn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1lbWJlcnNc
biovXG5pbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBsZXRlKGhh
bmRsZXI6IGFueSk6IEpRdWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50OiBhbnks
IGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgYWpheFNlbmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRp
bmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0YXJ0
KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVyOiAoKSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpx
WEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBsb2FkKHVybDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFueSk6IEpR
dWVyeTtcblxuICAgIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJyYXkoKTog
YW55W107XG5cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lczogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJyZW50Q2xh
c3M6IGFueSkgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5qcXVlcnku
Y29tL2FkZEJhY2svXG4gICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxu
XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihhdHRyaWJ1
dGVOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBhdHRyKG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3MoY2xhc3NO
YW1lOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAgaHRtbCho
dG1sU3RyaW5nOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDogKGluZGV4
OiBudW1iZXIsIG9sZGh0bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwo
b2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTog
YW55O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7
XG4gICAgcHJvcChtYXA6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3Ry
aW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICByZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHJlbW92ZUNsYXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAgICByZW1v
dmVDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIHJlbW92ZVByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b2dn
bGVDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IHRvZ2dsZUNsYXNzKHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhm
dW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIHZhbCgpOiBhbnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAg
ICB2YWwodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICB2YWwoZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJvcGVydGll
cyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5cbiAgICAg
Ki9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9w
ZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJp
bmdbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3Bl
cnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFs
dWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hl
ZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJv
cGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhl
IHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUg
aW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1
ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2
YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiBy
ZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBS
ZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQg
dGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFt
ZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IG51bWJl
cik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRp
ZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBwcm9wZXJ0aWVzIEFuIG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBzZXQuXG4g
ICAgICovXG4gICAgY3NzKHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAgIGhlaWdo
dCgpOiBudW1iZXI7XG4gICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgaGVp
Z2h0KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRleDogYW55
LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQoKTogbnVt
YmVyO1xuICAgIGlubmVySGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBpbm5l
cldpZHRoKCk6IG51bWJlcjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7
XG5cbiAgICBvZmZzZXQoKTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xuICAgIG9m
ZnNldChjb29yZGluYXRlczogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAoaW5kZXg6
IGFueSwgY29vcmRzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVpZ2h0KGlu
Y2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZhbHVlOiBu
dW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0
aChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoKHZhbHVl
OiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgcG9zaXRp
b24oKTogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xsTGVmdCgp
OiBudW1iZXI7XG4gICAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAg
c2Nyb2xsVG9wKCk6IG51bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcblxuICAgIHdpZHRoKCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1
ZXJ5O1xuICAgIHdpZHRoKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgoZnVuYzog
KGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEYXRh
XG4gICAgY2xlYXJRdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBkYXRh
KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7IFtrZXk6
IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6IGFueTtc
blxuICAgIGRlcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3Zl
RGF0YShuYW1lT3JMaXN0PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBw
cm9taXNlKHR5cGU/OiBhbnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55Pjtcblxu
ICAgIC8vIEVmZmVjdHNcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBh
bnksIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVz
OiBhbnksIGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzogRnVuY3Rp
b24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IHsgZHVy
YXRpb24/OiBhbnk7IGVhc2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsgc3RlcD86
IEZ1bmN0aW9uOyBxdWV1ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0pOiBKUXVl
cnk7XG5cbiAgICBkZWxheShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRpb246IGFu
eSwgb3BhY2l0eTogbnVtYmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG8o
ZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgpOiBKUXVl
cnk7XG5cbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
biAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/
OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dnbGUoZHVy
YXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9nZ2xlKGR1
cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4g
ICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcblxuICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1ZT86IGJv
b2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUoZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJhdGlvbj86
IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dn
bGUoc2hvd09ySGlkZTogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xuICAgIGJp
bmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50
VHlwZTogc3RyaW5nLCBldmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpR
dWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBib29sZWFu
KTogSlF1ZXJ5O1xuICAgIGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIGJs
dXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGJsdXIoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJjaGFuZ2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNo
YW5nZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgY2hhbmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwiY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmlu
ZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1
c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGZvY3VzaW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIGZvY3VzaW4oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0aGUgbWF0
Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRl
cnMgYW5kIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ckluIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyB0
aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgaG92ZXIoaGFuZGxlckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnksIGhhbmRsZXJPdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8gdGhlIG1h
dGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50
ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ckluT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVy
cyBvciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluT3V0
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwiXCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVzc1wiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXlwcmVzcyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGtleXByZXNzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5
S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwia2V5dXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXVw
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXl1cChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgbW91c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWVudGVy
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hl
biB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxl
YXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZWxlYXZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VsZWF2ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2Vtb3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91dFwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
b3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwibW91c2VvdmVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW92ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICovXG4gICAgb2ZmKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZl
bnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3Bh
Y2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0
IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3Ig
XCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBz
aG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFj
aGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVu
Y3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lh
bCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9y
Pzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywg
c3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwi
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0
dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAg
ICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBh
biBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qg
d2hlcmUgdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0
ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJl
cHJlc2VudCBoYW5kbGVyIGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZl
bnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1h
dGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZl
bnQgaGFuZGxlcnMuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBh
bnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0
YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0
aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJhbWV0ZXIg
YXJncyBpcyBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRyaWdnZXIo
KS4gTm90ZSB0aGF0IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFuZGxlciBm
dW5jdGlvbiBtdXN0IGJlIG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAgICAqL1xu
ICAgIG9uKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMg
dG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBP
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRh
bnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0
aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdn
ZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBm
dW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihl
dmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhl
IHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3Ig
bW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMs
IHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJh
bSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9m
IHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2Vs
ZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3
aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
RGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxz
byBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMg
cmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjog
c3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFu
ZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVt
ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRo
ZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50
IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQg
YSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRh
bnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4g
SWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlz
IGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBh
cmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3
aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50
cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBl
dmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWlu
aW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wi
IG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5k
bGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3Ig
bW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1p
dCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmlu
ZywgZGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRv
IGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1v
c3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRo
ZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBl
dmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFs
d2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhh
bmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICov
XG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUg
aGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5
cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFy
YXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNr
XCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2Vs
ZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVs
ZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9y
IG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0
aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3Nl
ZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBz
aG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4g
ICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBh
bnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9y
IHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBl
bGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBv
YmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUg
dmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUg
ZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZp
bHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBj
YWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUg
aGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxl
bWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxl
ciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uZShl
dmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywgZGF0YT86
IGFueSk6IEpRdWVyeTtcblxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlzIHJlYWR5
LlxuICAgICAqL1xuICAgIHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIHJlc2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmplY3QsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3Qo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3Rc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJtaXRcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBz
dWJtaXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJz
dWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGV2
ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4
dHJhUGFyYW1ldGVyczogYW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDogSlF1ZXJ5
RXZlbnRPYmplY3QpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5cGU6IHN0
cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVuYmluZChl
dmVudFR5cGU/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBmbHM6
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xuXG4gICAg
dW5kZWxlZ2F0ZSgpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVu
dFR5cGU6IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50czog
YW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICB1bmxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
LyBJbnRlcm5hbHNcbiAgICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3RyaW5nO1xu
XG4gICAgZXJyb3IoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwdXNoU3Rh
Y2soZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55
W10sIG5hbWU6IGFueSwgYXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNYW5pcHVs
YXRpb25cbiAgICBhZnRlciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZnRlcihm
dW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4uLmNvbnRl
bnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVy
eTtcblxuICAgIGJlZm9yZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBiZWZvcmUo
ZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdpdGhEYXRh
QW5kRXZlbnRzPzogYm9vbGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbik6IEpR
dWVyeTtcblxuICAgIGRldGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGVtcHR5
KCk6IEpRdWVyeTtcblxuICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuICAg
IGluc2VydEJlZm9yZSh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQoLi4uY29u
dGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRt
bDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICByZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBs
YWNlQWxsKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVuYzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiBh
bnkpOiBKUXVlcnk7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwgdGV4dDog
c3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtdO1xuXG4g
ICAgdW53cmFwKCk6IEpRdWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBK
UXVlcnk7XG4gICAgd3JhcChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgd3JhcEFsbCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBJbm5l
cih3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVuYzogKGlu
ZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBl
YWNoKGZ1bmM6IChpbmRleDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICBnZXQoaW5kZXg/OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1iZXI7XG4g
ICAgaW5kZXgoc2VsZWN0b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVtZW50OiBh
bnkpOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1iZXI7XG4g
ICAgc2VsZWN0b3I6IHN0cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4OiBudW1i
ZXJdOiBIVE1MRWxlbWVudDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2VsZWN0b3I6
IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVudHM6IGFu
eVtdKTogSlF1ZXJ5O1xuICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkKG9i
ajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgY2xvc2Vz
dChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAgICBjbG9z
ZXN0KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55KTogSlF1
ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50KTogYW55
W107XG5cbiAgICBjb250ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5O1xuXG4g
ICAgZXEoaW5kZXg6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rvcjogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGZpbHRlcihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKG9iajog
SlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGZpbmQoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBmaXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xuXG4gICAg
aXMoc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4OiBhbnkp
ID0+IGFueSk6IGJvb2xlYW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtcbiAgICBp
cyhvYmo6IEpRdWVyeSk6IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxuICAgIG1h
cChjYWxsYmFjazogKGluZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIG5leHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0
QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNlbGVjdG9y
Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKGVsZW1l
bnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKG9i
aj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNlbGVjdG9y
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgbm90KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2JqOiBKUXVl
cnkpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rvcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50PzogRWxlbWVu
dCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/OiBKUXVl
cnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgcHJldlVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgcHJldlVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgcHJldlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1
ZXJ5O1xuXG4gICAgc2libGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBz
bGljZShzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAvLyBVdGls
aXRpZXNcblxuICAgIHF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVl
KHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbiAg
ICBxdWV1ZShuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xhcmUgbW9k
dWxlIFwianF1ZXJ5XCIge1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBqUXVlcnk6
IEpRdWVyeVN0YXRpYztcbmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxpYnMvYW5n
dWxhci9hbmd1bGFyLmQudHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIgSlMgMS4w
XG4vLyBQcm9qZWN0OiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMgYnk6IERp
ZWdvIFZpbGFyIDxodHRwOi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5pdGlvbnM6
IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuXG5cbmRl
Y2xhcmUgdmFyIGFuZ3VsYXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0IGZvciBw
YWlubGVzcyBkZXBlbmRlbmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAk
aW5qZWN0OnN0cmluZ1tdO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBuZyBtb2R1
bGUgKGFuZ3VsYXIuanMpXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1vZHVsZSBu
ZyB7XG5cbiAgICAvLyBBbGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNl
XG4gICAgaW50ZXJmYWNlIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBhbnk7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRpY1xuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQoY29udGV4
dDogYW55LCBmbjogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4gICAgICAg
IGJvb3RzdHJhcChlbGVtZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVj
dG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVu
dDogRWxlbWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAg
ICAgICBib290c3RyYXAoZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8u
SUluamVjdG9yU2VydmljZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGluYXRpb24/
OiBhbnkpOiBhbnk7XG4gICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0aWM7XG4g
ICAgICAgIGVxdWFscyh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBleHRlbmQoZGVzdGluYXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7XG4gICAg
ICAgIGZvckVhY2gob2JqOiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBhbnkpID0+
IGFueSwgY29udGV4dD86IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjogc3RyaW5n
KTogYW55O1xuICAgICAgICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAgIGluamVj
dG9yKG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgaXNB
cnJheSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBhbnkpOiBi
b29sZWFuO1xuICAgICAgICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAg
IGlzRWxlbWVudCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlvbih2YWx1
ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW47
XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1N0cmlu
Zyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6IGFueSk6
IGJvb2xlYW47XG4gICAgICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAg
ICAgLyoqIGNvbnN0cnVjdCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZpY2lhbCBk
b2NzOiBJbnRlcmZhY2UgZm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0XHRzZWU6
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0Ki9cbiAg
ICAgICAgbW9kdWxlKFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUgeW91IHdh
bnQgdG8gY3JlYXRlICovXG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAv
KiogbmFtZSBvZiBtb2R1bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAgIHJlcXVp
cmVzPzogc3RyaW5nW10sXG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6IElNb2R1
bGU7XG4gICAgICAgIG5vb3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0b0pzb24o
b2JqOiBhbnksIHByZXR0eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVyY2FzZShz
dHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgZnVs
bDogc3RyaW5nO1xuICAgICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbm9y
OiBudW1iZXI7XG4gICAgICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNvZGVuYW1l
OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gTW9kdWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2Fu
Z3VsYXIuTW9kdWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElNb2R1
bGUge1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0b3J5OiBG
dW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGlubGlu
ZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcg
c2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVl
ZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNv
bmZpZyhjb25maWdGbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJl
IGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3Jr
IHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xu
ICAgICAgICBjb25maWcoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAg
ICAgICAgY29uc3RhbnQob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9s
bGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25z
dHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVjdCA6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2
ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAg
ZGlyZWN0aXZlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1l
OiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAg
ICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlb
XSk6IElNb2R1bGU7XG4gICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xu
ICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVjdDogT2Jq
ZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJv
dmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIHByb3ZpZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcnVu
KGluaXRpYWxpemF0aW9uRnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcnVu
KGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZp
Y2UobmFtZTogc3RyaW5nLCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9y
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3QpOiBJTW9k
dWxlO1xuICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xu
ICAgICAgICB2YWx1ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAgLy8gUHJv
cGVydGllc1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBzdHJpbmdb
XTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1dGVzXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlLmRpcmVj
dGl2ZS5BdHRyaWJ1dGVzXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElB
dHRyaWJ1dGVzIHtcblx0Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBhY2Nlc3Mg
dGhlIHNjb3BlZCBhdHRyaWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8gYmVjYXVz
ZSB5b3UgaGF2ZSB0byB1c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9vIGJ1dCBJ
IGRvbid0IGtub3cgb2YgYSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBs
aW1pdGVkIHRvIHJldHVybiBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVtOiBodHRw
Oi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0cmluZ106
IGFueTtcblxuICAgICAgICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5
IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFu
aW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWRc
biAgICAgICAgLy8gZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENsYXNzKGNs
YXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENTUyBjbGFz
cyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZVxuICAg
ICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0
aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVtb3ZhbC5c
biAgICAgICAgJHJlbW92ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAg
IC8vIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQoa2V5OiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFuIGludGVy
cG9sYXRlZCBhdHRyaWJ1dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxs
IGJlIGludm9rZWQgb25jZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAvLyBmb2xs
b3dpbmcgY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIg
dGhlXG4gICAgICAgIC8vIGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAkb2Jz
ZXJ2ZShuYW1lOiBzdHJpbmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247XG5cbiAg
ICAgICAgLy8gQSBtYXAgb2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3Jt
YWxpemVkIG5hbWUuIFRoaXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVyc2UgbG9v
a3VwIGZyb20gbm9ybWFsaXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAgICAgICRh
dHRyOiBPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRm9y
bUNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
ZGlyZWN0aXZlOmZvcm0uRm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUZvcm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFu
O1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAg
ICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAk
YWRkQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAg
ICAkcmVtb3ZlQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xu
ICAgICAgICAkc2V0RGlydHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6IHZvaWQ7
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENvbnRyb2xs
ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZl
Om5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSU5nTW9kZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2b2lkO1xu
ICAgICAgICAkc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlzVmFsaWQ6
IGJvb2xlYW4pOiB2b2lkO1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2aWV3VmFs
dWUgYW5kIG1vZGVsVmFsdWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAgIC8vIHR5
cGVzIGRvIHdvcmsgYW5kIGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAkc2V0Vmll
d1ZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7XG5cbiAg
ICAgICAgJG1vZGVsVmFsdWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVsUGFyc2Vy
W107XG4gICAgICAgICRmb3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAgICAgJGVy
cm9yOiBhbnk7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBi
b29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29s
ZWFuO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAgICAodmFs
dWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0dGVyIHtc
biAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gU2NvcGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHJvb3RTY29wZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJU2NvcGUge1xuICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhw
OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3BlKSA9PiBh
bnkpOiBhbnk7XG5cbiAgICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFu
eVtdKTogSUFuZ3VsYXJFdmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAgICAgICAg
JGRpZ2VzdCgpOiB2b2lkO1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFu
eVtdKTogSUFuZ3VsYXJFdmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhw
IGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAg
ICAgICRldmFsKGV4cHJlc3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtcbiAgICAg
ICAgJGV2YWwoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86IE9iamVj
dCk6IGFueTtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFs
LCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsQXN5
bmMoZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNz
aW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBEZWZhdWx0
cyB0byBmYWxzZSBieSB0aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lcbiAgICAg
ICAgJG5ldyhpc29sYXRlPzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24obmFtZTog
c3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBhbnlbXSkg
PT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3Ry
aW5nLCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rp
b247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiAo
bmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmpl
Y3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhw
cmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVj
dEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHBy
ZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55
LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5Pzog
Ym9vbGVhbik6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHBy
ZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwg
c2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENvbGxlY3Rp
b24od2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcjogKG5l
d1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0
aW9uO1xuXG4gICAgICAgICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51bWJlcjtc
blxuICAgICAgICAvLyBIaWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5kaW5nczog
YW55O1xuICAgICAgICAkJHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmd1
bGFyRXZlbnQge1xuICAgICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBjdXJyZW50
U2NvcGU6IElTY29wZTtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2ZW50RGVm
YXVsdDogRnVuY3Rpb247XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAg
ICAgICAgLy8gQXZhaWxhYmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRcbiAgICAg
ICAgc3RvcFByb3BhZ2F0aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gV2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElXaW5kb3dTZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1bWVudGVk
LCBzbyB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlv
biwgZGVsYXk/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47
XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xuICAgICAg
ICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBpbnZva2VB
cHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTog
SVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gRmlsdGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kZmlsdGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRmaWx0ZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJRmlsdGVyU2VydmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbjtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQ
cm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeTog
RnVuY3Rpb24pOiBJU2VydmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIExvY2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJTG9jYWxlU2VydmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgICAgLy8g
VGhlc2UgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIncyBpMThu
IGZpbGVzIGZvciBleGVtcGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2FsZU51bWJl
ckZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2NhbGVEYXRl
VGltZUZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55KSA9PiBz
dHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlw
dG9yIHtcbiAgICAgICAgREVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBfU0VQOiBz
dHJpbmc7XG4gICAgICAgIFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3Jb
XTtcbiAgICAgICAgQ1VSUkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDogbnVtYmVy
O1xuICAgICAgICBtaW5GcmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJlcjtcbiAg
ICAgICAgcG9zUHJlOiBzdHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAgICAgICBu
ZWdQcmU6IHN0cmluZztcbiAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdTaXplOiBu
dW1iZXI7XG4gICAgICAgIGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJ
TG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0cmluZ1td
O1xuICAgICAgICBTSE9SVE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJpbmdbXTtc
biAgICAgICAgU0hPUlREQVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5nW107XG4g
ICAgICAgIG1lZGl1bTogc3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAgICAgICBm
dWxsRGF0ZTogc3RyaW5nO1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRp
dW1EYXRlOiBzdHJpbmc7XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRp
dW1UaW1lOiBzdHJpbmc7XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2FsbDtcbiAg
ICAgICAgZXJyb3I6IElMb2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAgICAgICAg
bG9nOiBJTG9nQ2FsbDtcbiAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4gICAgLy8g
V2UgZGVmaW5lIHRoaXMgYXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9wZW4gaXQg
bGF0ZXIgZm9yXG4gICAgLy8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNlIElMb2dD
YWxsIHtcbiAgICAgICAgKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElQYXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjogc3RyaW5n
KTogSUNvbXBpbGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVk
RXhwcmVzc2lvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtc
blxuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBpcyBnb25u
YSBiZSB1c2VkIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCBj
aGVjayB0aGUgcGFyYW1ldGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0ZW5jeS4g
SWYgY29uc3VtZXJcbiAgICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNzIHRoZSB1
bmRlZmluZWQgdmFsdWUgZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6IGFueSwg
dmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBMb2NhdGlvblNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGxvY2F0aW9uXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRsb2NhdGlvblByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvZ3VpZGUvZGV2X2d1aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJzVXJsKCk6
IHN0cmluZztcbiAgICAgICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3SGFzaDog
c3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7XG4gICAg
ICAgIHBhdGgoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6IElMb2Nh
dGlvblNlcnZpY2U7XG4gICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90b2NvbCgp
OiBzdHJpbmc7XG4gICAgICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAg
c2VhcmNoKCk6IGFueTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6IElMb2Nh
dGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFyYW1ldGVy
VmFsdWU6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJpbmc7XG4g
ICAgICAgIHVybCh1cmw6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElMb2NhdGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4g
ICAgICAgIGhhc2hQcmVmaXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHByZWZpeDog
c3RyaW5nKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBib29sZWFu
O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVyIGlzIHN0
cmluZywgYnV0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJvb2xlYW4s
IHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHRvZ2ds
ZXJcbiAgICAgICAgaHRtbDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblByb3ZpZGVy
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50U2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9jdW1lbnRc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2VydmljZSBl
eHRlbmRzIERvY3VtZW50IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFeGNl
cHRpb25IYW5kbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kZXhjZXB0aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJRXhjZXB0aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0aW9uOiBF
cnJvciwgY2F1c2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIFJvb3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7fVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSVFTZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJvbWlzZTxh
bnk+W10pOiBJUHJvbWlzZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZlcnJlZDxU
PjtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xuICAgICAg
ICB3aGVuPFQ+KHZhbHVlOiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChw
cm9taXNlVmFsdWU6IFQpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86
IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBh
bnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2Fs
bGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxi
YWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkp
ID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nl
c3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86
IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkg
PT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVzdWx0Pihv
blJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29u
OiBhbnkpID0+IElQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAg
IGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCk6IElQ
cm9taXNlPFRSZXN1bHQ+O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxseUNhbGxi
YWNrOiAoKT0+YW55KTpJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SURlZmVycmVkPFQ+IHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xuICAgICAg
ICByZWplY3QocmVhc29uPzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRlPzphbnkp
OiB2b2lkO1xuICAgICAgICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xuICAgICAg
ICAoKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Nyb2xsaW5n
KCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ2FjaGVG
YWN0b3J5U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY2FjaGVGYWN0b3J5XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElD
YWNoZUZhY3RvcnlTZXJ2aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUgb3B0aW9u
c01hcCB0byBoYXZlIHRoZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAgICAgIC8v
IGl0J3MgdGhlIE9OTFkgb3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRv
ZGF5LCBhIGNvbnN1bWVyXG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGFzc29j
aWF0ZSBzb21lIG90aGVyIG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgICAgLy8o
Y2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogQ2Fj
aGVPYmplY3Q7XG4gICAgICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFj
aXR5OiBudW1iZXI7IH0pOiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9kcyBiZWxs
b3cgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAgICBnZXQg
KGNhY2hlSWQ6IHN0cmluZyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUNhY2hlT2JqZWN0IHtcbiAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5n
O1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3QgZ2FyYW50
ZWVkIHRvIGhhdmUsIHNpbmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAgICAgICAg
ICAgLy9jYXBhY2l0eTogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5OiBzdHJp
bmcsIHZhbHVlPzogYW55KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6IGFueTtc
biAgICAgICAgcmVtb3ZlKGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlQWxsKCk6
IHZvaWQ7XG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50OiBzdHJp
bmcsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5Pzog
bnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogRWxl
bWVudCwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/
OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBK
UXVlcnksIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5
PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQ29tcGlsZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSUNv
bXBpbGVQcm92aWRlcjtcblxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBpcyB0aGVy
ZS4uLlxuICAgICAgICBkaXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBpbGVQcm92
aWRlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uIHtc
biAgICAgICAgLy8gTGV0J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4ncyBzaWdu
YXR1cmVcbiAgICAgICAgKHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xvbmVkRWxl
bWVudD86IEpRdWVyeSwgc2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclByb3ZpZGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyU2Vydmlj
ZSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc3RhdGUg
dGhpcywgbG9jYWxzIGFyZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0cnVjdG9y
OiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxlck5hbWU6
IHN0cmluZywgbG9jYWxzPzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29u
dHJvbGxlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lz
dGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IHZvaWQ7
XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRlZENvbnN0
cnVjdG9yOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSHR0cFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGh0dHBcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBT
ZXJ2aWNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3QgYmUgcHJv
dmlkZWQuLi5cbiAgICAgICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFByb21pc2U8
YW55PjtcbiAgICAgICAgZ2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElI
dHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29u
ZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBzdHJpbmcs
IFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAganNvbnAo
dXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTog
SUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBS
ZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlZmF1bHRz
OiBJUmVxdWVzdENvbmZpZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQgaXQgaXMg
ZG9jdW1lbnRlZCBhcyBwdWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0czogYW55
W107XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAgIC8vIFNv
bWUgb3BldGlvbnMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVl
c3QuXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwI1Vz
YWdlIGZvciBvcHRpb25zIGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVzdENvbmZp
ZyB7XG4gICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAg
ICAgcGFyYW1zPzogYW55O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24gc3RydWN0
dXJlLi4uICBwZXJoYXBzIHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxuICAgICAg
ICBoZWFkZXJzPzogYW55O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3aXRoQ3Jl
ZGVudGlhbHM/OiBib29sZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0aXBsZSB0
eXBlcywgc28gbGV0J3MgZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBhbnk7XG4g
ICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNl
PzogYW55O1xuICAgICAgICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNlXG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAgICAgKGRh
dGE6IFQsIHN0YXR1czogbnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBz
dHJpbmcsIGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBUO1xuICAg
ICAgICBzdGF0dXM/OiBudW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFtZTogc3Ry
aW5nKSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxUPiB7XG4g
ICAgICAgIHN1Y2Nlc3MoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQ
cm9taXNlPFQ+O1xuICAgICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8
VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxi
YWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVzdWx0LCBl
cnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4g
YW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0Nh
bGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJUHJvbWlz
ZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJh
Y2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJSHR0cFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRl
ZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAg
ICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ugc2hvdWxk
IG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAgICAgIC8v
IFhYWCBQZXJoYXBzIGRlZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVyZVxuICAg
ICAgICAobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxsYmFjaz86
IEZ1bmN0aW9uLCBoZWFkZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3JlZGVudGlh
bHM/OiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBJbnRlcnBvbGF0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGludGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4dDogc3Ry
aW5nLCBtdXN0SGF2ZUV4cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25GdW5jdGlv
bjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2woKTog
c3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uIHtc
biAgICAgICAgKGNvbnRleHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUludGVycG9sYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAg
c3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTogc3RyaW5n
KTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4g
ICAgICAgIGVuZFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNoZVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRlbXBsYXRl
Q2FjaGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlQ2Fj
aGVTZXJ2aWNlIGV4dGVuZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBSb290U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSVJvb3RTY29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpbnRl
cmZhY2UgSVNDRVNlcnZpY2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRy
dXN0ZWQ6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0Z2V0VHJ1c3RlZEh0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSnModmFs
dWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFu
eTtcblx0XHRnZXRUcnVzdGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2UodHlwZTog
c3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkg
PT4gYW55O1xuXHRcdHBhcnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9uOiBzdHJp
bmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNKcyhl
eHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xu
XHRcdHBhcnNlQXNSZXNvdXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55
LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjogc3RyaW5n
KTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFzKHR5cGU6
IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTogYW55KTog
YW55O1xuXHRcdHRydXN0QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNSZXNvdXJj
ZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6IGFueTtc
blx0XHRpc0VuYWJsZWQoKTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gU0NFUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHNjZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElTQ0VQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBlbmFi
bGVkKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVzdGVkKHR5
cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0QXModHlw
ZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVlOiBhbnkp
OiBhbnk7XG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxl
Z2F0ZVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRzY2VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElTQ0VEZWxlZ2F0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIHJlc291cmNlVXJsQmxhY2tsaXN0KGJsYWNrbGlzdDogYW55W10pOiB2b2lkO1xuICAgICAg
ICByZXNvdXJjZVVybFdoaXRlbGlzdCh3aGl0ZWxpc3Q6IGFueVtdKTogdm9pZDtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmVc
biAgICAvLyBhbmQgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3RpdmVcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xuICAgICAg
ICBjb21waWxlPzpcbiAgICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAgICAgICAg
ICAgIHRlbXBsYXRlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0cmFuc2Ns
dWRlOiAoc2NvcGU6IElTY29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2b2lkXG4g
ICAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAgICAgICAg
Y29udHJvbGxlckFzPzogc3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAgIChzY29w
ZTogSVNjb3BlLFxuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAgICAgICAg
ICBpbnN0YW5jZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29udHJvbGxl
cjogYW55XG4gICAgICAgICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4g
ICAgICAgIHByaW9yaXR5PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAg
ICAgICAgcmVxdWlyZT86IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4gICAgICAg
IHNjb3BlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGVV
cmw/OiBhbnk7XG4gICAgICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJhbnNjbHVk
ZT86IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhbmd1bGFy
LmVsZW1lbnRcbiAgICAvLyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1bGFyIHJl
dHVybnMgYSBqUXVlcnkgb2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0aW9uYWwg
bWV0aG9kcyBsaWtlIGUuZy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9hbmd1bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRpYyB7XG4g
ICAgICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRlZEpRdWVy
eTtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAg
ICAob2JqZWN0OiB7fSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50QXJyYXk6
IEVsZW1lbnRbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpRdWVyeSk6
IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgIChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAg
ICAoKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRl
ZEpRdWVyeSBleHRlbmRzIEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywgaG93IHRv
IGRlZmluZT9cbiAgICAgICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0b3I6IHN0
cmluZyk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55KTogSUF1
Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVl
cnk7XG5cbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlu
amVjdG9yKCk6IGFueTtcbiAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAgIGluaGVy
aXRlZERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAgIGluaGVy
aXRlZERhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICAgICAg
aW5oZXJpdGVkRGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICAgICAg
ICAgIGFubm90YXRlKGZuOiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAgYW5ub3Rh
dGUoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAgICAgICAg
ICBnZXQgKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRlKHR5cGVD
b25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgICAgIGlu
dm9rZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAgICAgICBp
bnZva2UoZnVuYzogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtc
biAgICAgICAgfVxuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFByb3ZpZGVT
ZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRP
LiRwcm92aWRlXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJUHJv
dmlkZVNlcnZpY2Uge1xuICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0IHJldHVy
bnMgdGhlIHJlZ2lzdGVyZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAgIC8vIGlt
cGxlbWVudGF0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAgIC8vIGNv
bnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAgIGNvbnN0
YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAgIGRlY29y
YXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICAg
ICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6IHZvaWQ7
XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlv
bjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFjdG9yeShu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklTZXJ2aWNl
UHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBu
Zy5JU2VydmljZVByb3ZpZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHBy
b3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9u
KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBjb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAg
ICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92aWRlcjtc
biAgICAgICAgfVxuXG4gICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1vZHVsZSB0
b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9JdGVtIHtc
biAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxc
biAgICAgICAgICAgIHB1YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICkgeyB9
XG4gICAgfVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0b2RvcyB7
XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7XG5cdFx0
dG9kb3M6IFRvZG9JdGVtW107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRlZFRvZG86
IFRvZG9JdGVtO1xuXHRcdG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWluaW5nQ291
bnQ6IG51bWJlcjtcblx0XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2VkOiBib29s
ZWFuO1xuXHRcdHJldmVydGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBjb21wbGV0
ZWQ/OiBib29sZWFuIH07XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7XG5cdFx0
dm06IFRvZG9DdHJsO1xuXHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50c1xuXG5t
b2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5cdFx0Z2V0
ICgpOiBUb2RvSXRlbVtdO1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1cbn0vLyBk
aXJlY3RpdmVzL1RvZG9Gb2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7
XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVu
dCBpdCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVh
dGVzIHRvIHRydWUuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0
OiBuZy5JVGltZW91dFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRc
dFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6
IGFueSkgPT4ge1xuXHRcdFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0ZvY3VzLCBu
ZXd2YWwgPT4ge1xuXHRcdFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0aW1lb3V0
KCgpID0+IGVsZW1lbnRbMF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRc
dFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0ID0gWyck
dGltZW91dCddO1xuXG59Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUgdG9kb3Mg
e1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0aGF0IGV4
ZWN1dGVzIGFuIGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxv
c2VzIGZvY3VzLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigpOiBuZy5J
RGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgkc2NvcGU6
IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcbiAgICAg
ICAgICAgICAgICBlbGVtZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBwbHkoYXR0
cmlidXRlcy50b2RvQmx1cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0
cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAgICAgIH1c
biAgICAgICAgfTtcbiAgICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNcblxubW9k
dWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkgPSAyNztc
blxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9kbyBpZiB0
aGUgdXNlciBwcmVzc2VzIHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRv
ZG9Fc2NhcGUoKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgk
c2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtc
blx0XHRcdFx0ZWxlbWVudC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0
aWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRzY29wZS4k
YXBwbHkoYXR0cmlidXRlcy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xu
XG5cdFx0XHRcdCRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgn
a2V5ZG93bicpOyB9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNlcy9Ub2Rv
U3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8q
KlxuICAgICAqIFNlcnZpY2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9t
IGxvY2FsU3RvcmFnZS5cbiAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3JhZ2UgaW1w
bGVtZW50cyBJVG9kb1N0b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5n
dWxhcmpzLXR5cGVzY3JpcHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7XG4gICAg
ICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JB
R0VfSUQpIHx8ICdbXScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBUb2RvSXRl
bVtdKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQs
IEpTT04uc3RyaW5naWZ5KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29udHJvbGxl
cnMvVG9kb0N0cmwudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8q
KlxuXHQgKiBUaGUgbWFpbiBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjpc
blx0ICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRvZG9TdG9y
YWdlIHNlcnZpY2Vcblx0ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxhdGUgYW5k
IHByb3ZpZGVzIGV2ZW50IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9kb0N0cmwg
e1xuXG5cdFx0cHJpdmF0ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmplY3QgYW5u
b3RhdGlvbi5cblx0XHQvLyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1hdGlvbiBh
Ym91dCBkZXBlbmRlbmNpZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3RvclxuXHRcdC8v
IGl0IGlzIGJldHRlciB0byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3RvciwgYmVjYXVz
ZSB0aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRcdC8vIFNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0YXRpYyAk
aW5qZWN0ID0gW1xuXHRcdFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0XHRcdCd0
b2RvU3RvcmFnZScsXG5cdFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQvLyBkZXBl
bmRlbmNpZXMgYXJlIGluamVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0Ly8gY29u
dHJvbGxlcidzIG5hbWUgaXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQgc3BlY2lm
aWVkIGZyb20gbmctY29udHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRcdGNvbnN0
cnVjdG9yKFxuXHRcdFx0cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRwcml2YXRl
ICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9kb1N0b3Jh
Z2U6IElUb2RvU3RvcmFnZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0KSB7XG5c
dFx0XHR0aGlzLnRvZG9zID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7XG5cblx0
XHRcdCRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7
XG5cblx0XHRcdC8vICd2bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFkZGluZyBh
IHJlZmVyZW5jZSB0byB0aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8vIGZvciBp
dHMgbWV0aG9kcyB0byBiZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRcdCRzY29w
ZS52bSA9IHRoaXM7XG5cblx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdlcyBpbiBz
Y29wZSwgd2hpY2ggYXJlIGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8vIGlmIHlv
dSBzdWJzY3JpYmUgdG8gc2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIgdGhhbiB0
aGlzIGNvbnRyb2xsZXIsIG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQkc2NvcGUu
JHdhdGNoKCd0b2RvcycsICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRcdCRzY29w
ZS4kd2F0Y2goJ2xvY2F0aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0aCkpXG5c
blx0XHRcdGlmICgkbG9jYXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgoJy8nKTtc
blx0XHRcdCRzY29wZS5sb2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRvblBhdGgo
cGF0aDogc3RyaW5nKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0aCA9
PT0gJy9hY3RpdmUnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09
ICcvY29tcGxldGVkJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307XG5cdFx0
fVxuXG5cdFx0b25Ub2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50ID0g
dGhpcy5maWx0ZXJGaWx0ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0
aDtcblx0XHRcdHRoaXMuJHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3RoIC0gdGhp
cy4kc2NvcGUucmVtYWluaW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVja2VkID0g
IXRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdlLnB1dCh0
aGlzLnRvZG9zKTtcblx0XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5ld1RvZG8g
OiBzdHJpbmcgPSB0aGlzLiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICghbmV3VG9k
by5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZG9z
LnB1c2gobmV3IFRvZG9JdGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRzY29wZS5u
ZXdUb2RvID0gJyc7XG5cdFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRcdC8vIENs
b25lIHRoZSBvcmlnaW5hbCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQuXG5cdFx0
XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kb0l0ZW0p
O1xuXHRcdH1cblxuXHRcdHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0
dGhpcy50b2Rvc1t0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNjb3BlLm9y
aWdpbmFsVG9kbztcblx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0XHR9XG5c
blx0XHRkb25lRWRpdGluZyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3Bl
LmVkaXRlZFRvZG8gPSBudWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gbnVs
bDtcblx0XHRcdGlmICh0aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBUb2RvIGVk
aXRzIHdlcmUgcmV2ZXJ0ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3BlLnJldmVy
dGVkID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0ZW0udGl0
bGUgPSB0b2RvSXRlbS50aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRpdGxlKSB7
XG5cdFx0XHRcdHRoaXMucmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5c
dFx0cmVtb3ZlVG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3Muc3Bs
aWNlKHRoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRcdGNsZWFy
RG9uZVRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9zID0gdGhp
cy50b2Rvcy5maWx0ZXIodG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5cdFx0fVxu
XG5cdFx0bWFya0FsbChjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9kb3MuZm9y
RWFjaCh0b2RvSXRlbSA9PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsgfSk7XG5c
dFx0fVxuXHR9XG5cbn1cbi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1haW4gVG9k
b01WQyBhcHAgbW9kdWxlLlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAqL1xubW9k
dWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9IGFuZ3Vs
YXIubW9kdWxlKCd0b2RvbXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcigndG9kb0N0
cmwnLCBUb2RvQ3RybClcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgdG9kb0Js
dXIpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMpXG4gICAg
ICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAgICAgICAg
IC5zZXJ2aWNlKCd0b2RvU3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKK21vZHVsZS5leHBv
cnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
XCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNl
bnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElT
IENPREUgSVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJ
TkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRB
QkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAg
TGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQg
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xu
XG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAu
eFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9y
aXMgWWFua292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhv
ZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9u
LCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3Bv
dWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFu
IEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6
Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9r
c3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+
LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVy
ZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdh
c3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZp
c2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxo
dHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dp
dGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIu
Y29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+
LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZp
bml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxu
XG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmln
dXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtc
biAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVh
ZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBh
Y2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlv
biwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBt
ZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBk
ZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBp
cyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVz
dHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBk
YXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9w
ZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBs
b2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3Qg
aXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRo
IGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nl
c3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNw
b25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBv
ciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBi
b29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24g
dGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhN
TEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBj
dXN0b20gaGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBh
c3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNl
IGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBv
ZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJk
bGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChq
cVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAg
IC8qKlxuICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFn
ZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0
byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVz
dHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBh
cmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2Yg
cmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0
IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hl
PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVu
IHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3Mg
YXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRo
ZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0
cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIs
IFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBc
InBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBj
YW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNh
bGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxl
dGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoq
XG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhh
dCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRz
IGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50
cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5h
amF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlw
ZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFu
a292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5k
aW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlz
IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdo
aWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBj
b250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNl
cnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNw
ZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNw
ZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNo
YW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAg
LyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBB
amF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmpl
Y3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQu
YWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5c
biAgICAgKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVy
J3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVl
IG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252
ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91
IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0
aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhp
cyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVy
IGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIu
IEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJp
bmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vz
c0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0
IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNl
cmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVl
IG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xu
ICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRv
IGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBh
IHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hv
dWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBh
cmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAn
ZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55
LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5
b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmll
ZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2Yg
dGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNP
TiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVj
dXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBz
dHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rp
b24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwg
WE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBl
cnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBv
bmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVz
aWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJw
YXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNl
aXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5v
dCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNo
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBu
b3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAg
cmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpx
WEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTog
YW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVu
dCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8g
ZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFq
YXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wg
dmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAg
IC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFp
cnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0
cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMg
YWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJl
IGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUg
b3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9u
IGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwg
b25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4g
VGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVs
dCB2YWx1ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlz
IHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVy
IHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9v
bGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBi
ZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlm
IGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9s
bG93aW5nIHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUs
ICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1v
ZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4
U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xv
Y2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGlu
c3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5
IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0
IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEu
NSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9t
IGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5n
IHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91
bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhh
bXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxu
ICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhl
IGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3
aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUg
YSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVl
c3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2Fu
dCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIg
YnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNh
biBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhl
IHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhh
dCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxu
ICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lv
biBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoq
XG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVz
cG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9c
biAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRh
IHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwg
YW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5z
Zm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVu
dC10eXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50
IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQg
dGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFu
O1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5z
cG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIg
b3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNl
dCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3
aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBh
cyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJz
ZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBj
b2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhl
IGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3Rh
dHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2Vz
cyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRp
cmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFj
ay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJl
ZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVk
IGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVl
c3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNj
ZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBp
biB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAg
IC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1
ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWph
eFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFq
YXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVz
cyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9z
c2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIElu
IGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBi
ZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5n
IGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMu
MCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5
IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIg
dGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAg
LyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRp
dGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0
aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8g
bWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3Ro
ZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNv
IGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJz
LlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICov
XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNl
ZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhl
bnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmpl
Y3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRo
ZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24g
aW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUg
ZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2Jq
ZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhI
UiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRp
YWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVy
eSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRv
IHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxk
IGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpR
dWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFu
eTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8
YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAg
IGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFj
ZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7
XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7
XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtc
biAgICBmaXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJn
czogYW55W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxv
Y2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFj
a3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8g
aW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUs
IG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47
XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/
OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIElu
dGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmlu
dGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNh
bGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAg
ICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
blxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxU
PjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
biAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAg
ICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVG
aWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHBy
b2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVh
c29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4g
VSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5
UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkg
PT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21p
c2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUs
IG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnBy
b2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+
LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5w
cm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxV
PihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFz
b25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4u
cHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVy
cmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBl
eHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2Fs
bGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+
O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIHJlc29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNv
bHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47
XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVl
cnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVu
c2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlF
dmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVU
YXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAg
aXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0
aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZl
bnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3Vs
dDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQ
cm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJl
cjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVy
ZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0
IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRh
S2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAg
IGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1i
ZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdl
WDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAg
IHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4
dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJD
b2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5p
bnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVu
dE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJm
YWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVl
cnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVu
dE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVj
dGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFj
ZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJv
b2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJv
b2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAg
Y3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBo
dG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47
XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xl
YW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xu
ICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtc
biAgICBzdHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAg
dGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6
IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3Ry
aW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5
IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0
ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhl
IGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmlu
ZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25z
dHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1
ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86
IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNl
ZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNp
bmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVy
KTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ug
b24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7
XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSBy
ZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1
ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJl
IG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWph
eFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdz
KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhU
VFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhl
IEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBi
ZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFq
YXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhS
O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5
IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUg
dGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1z
ZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNl
dCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAg
YWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3Jp
Z2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6
IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9k
aWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZv
cmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXgg
cmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55
LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4g
ICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVl
c3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFt
IG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZh
dWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAg
ICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8q
KlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJv
bSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3Jp
cHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChk
YXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBk
YXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEg
ZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5n
IHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRh
IGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHht
bCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcs
IGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
R0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3
aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERl
ZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4g
ICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1l
bmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdo
aWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAg
ICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAg
ICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2lu
ZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5n
IGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAq
IEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhl
IHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJh
Y2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAg
ICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzog
KGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkp
OiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9t
IHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3Qg
aXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhh
dCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0
cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpR
dWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZh
U2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhl
biBleGVjdXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWlu
aW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNz
PzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIp
ID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8q
KlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mg
QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGlu
IHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBl
Y3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpz
b24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywg
c3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhI
UikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAg
KiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3
aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2Jq
ZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0
LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVj
dXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJv
dmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFU
eXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJ
bnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAq
L1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTog
YW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5
cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20g
dGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3Qg
aXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhh
dCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJl
IG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBk
YXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3Mg
KHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDog
c3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1
ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0
IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBs
aXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNw
YWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVo
YXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxs
YmFjaztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24g
b2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRp
Y2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFz
ZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAo
c2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDog
RWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVu
dEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5
O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1
ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVy
eSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVt
b3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkg
dmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYp
LlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtc
blxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVu
Y3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2Jq
ZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBK
YXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAg
ICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9u
IG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJl
c2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVk
cyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVj
dHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21p
c2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFj
ayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJl
ZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBs
YWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVk
czogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3Rv
cmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4g
UmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVs
ZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAq
IEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8
VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipc
biAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50
LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVs
bCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVt
ZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBA
cGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAg
ICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAv
KipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVt
ZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUg
ZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
bGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAg
Ki9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxl
bWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVk
OiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAv
LyBFZmZlY3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsg
c3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9
OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5
KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlb
XSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczog
YW55W10pOiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAg
IC8vIEludGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8v
IE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVj
aWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAg
ICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0
aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVt
ZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGlu
ZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAg
ZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIs
IHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4o
Y29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9m
RWxlbWVudDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5v
YmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnks
IC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBh
bnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwg
aW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107
XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1i
ZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Vt
cHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTog
Ym9vbGVhbjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFp
bk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29s
ZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5
KG9iajogYW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6
IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4g
ICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJ
bkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNl
Y29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10p
OiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAg
IHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMg
YSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0
YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJz
ZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVs
ZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAg
ICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmlu
ZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQ
YXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29u
dGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRN
TCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBC
b29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRo
ZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRl
eHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBB
bmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtc
blxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5z
dGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBh
amF4Q29tcGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVy
OiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFY
SFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
biAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9w
KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAo
ZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBs
ZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJp
YWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhj
bGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBh
bnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRw
Oi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5n
KTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztc
biAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAg
ICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBo
YXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmlu
ZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxD
b250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlO
YW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJv
cGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4p
OiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1td
KTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBz
dHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNo
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHBy
b3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBz
ZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICov
XG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNl
dCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmlu
ZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3Ig
bW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAg
ICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAq
L1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhl
IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5
TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9u
IHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQu
IFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFu
ZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlO
YW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJy
ZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBp
biB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBj
c3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51
bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9y
ZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBh
aXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5
O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVu
YzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5l
ckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51
bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1i
ZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0
KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
b3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJI
ZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5c
biAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91
dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7
XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAg
ICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBK
UXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVl
OiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0
YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzog
c3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBE
ZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJv
bWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55
LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmlt
YXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29t
cGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwg
b3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1
bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86
IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFt
ZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86
IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFu
eSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVU
byhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
ZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzog
YW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/
OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBz
bGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAg
c2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcs
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVh
biwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBj
bGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAg
IHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9n
Z2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8g
RXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxl
OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRC
dWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1
ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQu
XG4gICAgICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzog
YW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBk
YmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNs
aWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2
ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3Vz
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2
YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Zm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZv
Y3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
Zm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNv
dXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRs
ZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3Vz
ZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBv
aW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFu
ZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91
c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNl
IHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3Zl
cihoYW5kbGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5
ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBr
ZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93
bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
ImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50
T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChl
dmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZCho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRv
d24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
Im1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93
bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNl
ZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50
ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZl
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hl
biB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0
IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1v
dXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
Im1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
Im1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAg
ICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2
YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZl
bnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBP
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5t
eVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5v
bigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyks
IG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0
cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2
ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVz
dCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9y
IFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9u
IHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFs
dWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3Jl
IHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5k
IHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNo
ZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3
aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVu
IGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtr
ZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1v
cmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBS
ZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBq
UXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBl
dmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRh
eCkuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBv
ciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1
Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRl
ciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0
aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBp
cyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hv
cnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAg
ICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3Jl
IGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9u
YWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIu
XG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUg
ZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZl
bnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdh
eXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAg
KiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5k
YXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1
ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhh
dCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJp
bmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhl
IHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmpl
Y3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1z
ZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFs
dWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZl
bnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRl
ciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxs
IHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFu
ZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVu
dC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBp
biBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50
czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBm
b3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVy
IGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEg
c3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3Vj
aCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVt
ZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBl
ciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250
YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0g
ZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25l
KGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFj
aCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMg
ZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQg
dHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5
ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmlu
ZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0
IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0
aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVk
IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dl
ZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBm
YWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUg
ZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVu
dCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1v
cmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBz
dWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0g
c2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0
aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVj
dG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hl
biBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERh
dGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28g
YWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJl
dHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBz
dHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0
byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBt
b3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9u
ZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNw
YWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBj
YWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3Rv
ciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVu
dHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9y
IG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRo
ZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2Vk
IHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAg
ICovXG4gICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzog
c3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5
IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRo
ZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Vs
ZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3Rc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6
IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2Vy
KGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVy
KGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xu
XG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBl
OiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVj
dG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6
IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFu
eSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1
ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNr
KGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBh
cHBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRl
eDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdl
dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
Y2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/
OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkp
OiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAg
cHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChp
bmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0
YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVy
eTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNl
V2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0
KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDog
bnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXko
KTogYW55W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0Vs
ZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xu
XG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJ
bm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2Vs
bGFuZW91c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4
KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGlu
ZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5n
dGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7
XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAg
IGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCgu
Li5lbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rv
cj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1
ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVt
ZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86
IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgp
OiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVy
KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAg
ICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChv
Ymo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhz
ZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBK
UXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5j
OiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBi
b29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1
ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVu
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0
VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBu
ZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAg
IG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7
XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRz
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9y
Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVs
ZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1Vu
dGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihz
ZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRl
cj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtc
blxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55
W107XG4gICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55
KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xu
fVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xh
cmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGlj
O1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3Ig
QW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZp
bml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4v
LyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlU
eXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8v
IFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVu
Y3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRl
Y2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQg
dGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
ICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1
bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAg
ICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5j
dGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtd
KTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1
ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJv
b3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3Rv
clNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55
LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpR
dWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJv
b2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlb
XSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55
LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNv
bihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtc
biAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNl
O1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUo
dmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9v
bGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBp
c0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTog
YW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5l
ZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTog
c3RyaW5nO1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxu
XHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1
bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1
bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3Vy
IG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxc
biAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAg
ICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9u
PzogYW55KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4g
ICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAg
ICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4g
ICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAg
ICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAg
ICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1h
dGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAg
ICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZp
Z3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIg
d29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQg
Ki9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAg
IC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRv
IHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2Fk
aW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4g
ICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGlu
ZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xs
ZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0
cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJl
Y3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9k
dWxlO1xuICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAg
ICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24p
OiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVk
RnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVj
dCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlG
dW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0
ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJp
bmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAg
ICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFu
eVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxl
O1xuICAgICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rp
b24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3Rh
ZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6
IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFu
eSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxu
ICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVx
dWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBh
YmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2Fu
dFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBh
dHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91
bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlz
IHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRb
bmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1
ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8g
ZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxs
IGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAg
ICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3Zl
cyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVy
IGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQg
dGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBj
bGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZv
aWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAg
ICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2Jz
ZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVy
IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4g
ICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52
b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMu
XG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBG
dW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFt
ZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8g
ZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFt
ZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJp
c3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlk
OiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBh
bnk7XG4gICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6
IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJv
bGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJp
c3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBO
Z01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVu
ZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0
cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24g
c3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJc
biAgICAgICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4g
ICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFs
dWU6IGFueTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJz
OiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltd
O1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAg
ICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAg
JGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7
XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9k
ZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAg
ICAgICRhcHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3Bl
OiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmlu
ZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2
b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmlu
ZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50
YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3Vu
dHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0
KTogYW55O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55
LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBl
eHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAg
ICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZh
bEFzeW5jKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAg
ICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBz
dHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAg
ICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4u
LmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hF
eHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJv
b2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5n
LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3Bl
KSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAk
d2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86
IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3
YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzog
KG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2Jq
ZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVj
dGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBv
bGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAg
JHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnks
IGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkg
PT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAg
ICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNv
bGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4g
ICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAg
ICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDog
Ym9vbGVhbjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRl
bWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9E
TyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2Rl
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAg
KGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTog
SVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBi
b29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFs
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50
ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2Vy
dmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBu
dW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNh
bmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmlu
Zyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0
ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBm
aWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztc
blxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sg
YW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRT
OiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFU
UzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAo
bnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJl
ckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAg
ICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0
ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAg
bWluSW50OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJh
YzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJp
bmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAg
ICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBN
T05USDogc3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBE
QVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1T
OiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJp
bmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7
XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7
XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7
XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6
IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dD
YWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAg
ICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2Ug
Y2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBp
bnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHBy
ZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxz
PzogYW55KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5k
ZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAg
IC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9y
IGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUg
aXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24o
Y29udGV4dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAg
ICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAg
aGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6
IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDog
c3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAg
ICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2
aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01h
cDogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3Ry
aW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJs
KCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2Vydmlj
ZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQ
cmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVN
b2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBw
YXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMg
aXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0
aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxv
Y2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
RG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9j
dW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAg
IChleGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMg
SlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlz
ZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4o
KTogSURlZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8
dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nl
c3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBl
cnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0
YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1
bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3Vs
dD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/
OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBl
cnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86
IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNh
dGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRS
ZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVq
ZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVz
dWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9
PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0
PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6
IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3Rp
Znkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9s
bFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2Vy
dmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9y
U2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJs
ZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBm
b2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91
Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1w
bGVtZW50YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1
c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0
LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBu
dW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9u
c01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAv
LyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7
XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAg
ICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAg
IC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0
aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAg
IHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTog
c3RyaW5nKTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAg
ICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAg
KGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwg
bWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAg
IChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9u
LCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAg
ICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlv
biwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTog
RnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwg
YnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkp
OiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5r
aW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVB
dHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hG
bj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250
cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250
cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNv
bnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24g
ZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9s
bGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChj
b250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtc
biAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5
QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1
cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6
IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29u
ZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJp
bmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVh
ZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xu
ICAgICAgICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RD
b25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5n
LCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAg
ICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dp
bmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGlu
Z1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRp
bmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGlu
ZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNl
IElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDog
c3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBp
dCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUg
ZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4g
ICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNj
ZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAg
ZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJh
bnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8
IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4g
e1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1l
OiBzdHJpbmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAg
ZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86ICho
ZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RD
b25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQ
cm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJh
Y2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFBy
b21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0
PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4p
ID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxi
YWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVz
dWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8
VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0
cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVy
IHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRv
cnM6IGFueVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAg
IC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5Llxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNl
IHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0
aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBh
bnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIs
IHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAg
ICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJw
b2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBz
dGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0
aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlk
ZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9s
KHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9s
KCk6IHN0cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xh
dGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1w
bGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBz
dHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6
IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdl
dFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2
YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0
XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnks
IGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcp
OiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4
cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5c
dFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2Fsczog
YW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6
IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHBy
ZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRc
dHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1s
KHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0
dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1
ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7
XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAg
IGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAg
ICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVl
T2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVBy
b3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbG9ja2xpc3QoYmxvY2tsaXN0OiBhbnlbXSk6
IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJsQWxsb3dsaXN0KGFsbG93bGlzdDogYW55W10pOiB2
b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3Zp
ZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRl
L2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJl
Y3RpdmV7XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDog
YW55LFxuICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAg
ICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rp
b24pID0+IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzog
YW55O1xuICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAg
ICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFu
eSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAg
ICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFt
ZT86IHN0cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/
OiBib29sZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0
cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAg
ICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAg
ICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1l
bnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdp
dGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1
ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJ
QXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAg
KGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9i
amVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9u
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRK
UXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzog
ZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmlu
ZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVt
ZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTog
SUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFu
eTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5c
biAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtc
biAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1
ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAg
fVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxh
ci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xu
XG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAg
ICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3Jc
biAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZp
Y2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAg
ICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdb
XTtcbiAgICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5z
dGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xu
ICAgICAgICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtc
biAgICAgICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxz
PzogYW55KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAg
ICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAg
aW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9u
IHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAg
ICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAg
ICAgICAgICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAg
ICAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAg
ICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZv
aWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6
IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNl
RmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAg
ICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtd
KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmlu
ZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xu
ICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1
Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2Vydmlj
ZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlk
ZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2Vy
dmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0u
dHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xh
c3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0
aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAg
ICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxu
bW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcu
SVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5c
dFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0
XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFs
bENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmls
dGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9u
U2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9T
dG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9y
YWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtd
KTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5c
dCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3Vz
IG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBi
aW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2Rv
Rm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRc
dHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVy
eSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRl
cy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0
XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3Vz
LiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5c
bm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGly
ZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlz
IGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRv
ZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAg
bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFu
eSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNj
b3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNj
b3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xu
ICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0Vz
Y2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVND
QVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRp
bmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBv
cnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xu
XHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0
ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+
IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0
XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1c
blx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVs
ZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8v
IHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJp
Y3QnO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmll
dmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBU
b2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9J
RCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2Rv
SXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJ
dGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQo
dG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRo
aXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1c
bn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0
cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRo
ZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZp
YSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRo
ZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBj
bGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0
Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRo
IGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0
cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0
cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5
cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRw
dWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRp
b24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtc
blxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0
b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9u
LnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5o
dG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxc
blx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJp
dmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0
ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFn
ZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0
ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4g
V2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxu
XHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRN
TFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50
cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxu
XHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1l
IGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5c
blx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUp
O1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9u
UGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRp
b24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1c
blxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0Zp
bHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNl
IH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVl
IH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVt
YWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDog
ZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rv
cy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3Bl
LmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9k
b1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0
XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRc
dFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0
XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRc
dHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRl
bTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtc
blxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNh
bmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5k
KHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9J
dGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0g
dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0
cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRc
dFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmln
aW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0
XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhp
cy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0
XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9k
b0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRc
dH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0
dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0
fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRo
aXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxl
dGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0
dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29t
cGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4g
KiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9k
dWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0
b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250
cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9k
b0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRv
ZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBl
KVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxu
IgogCiAvKioqLyB9KSwKIC8qIDQyMSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8g
ICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkg
QXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRp
dG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxu
ICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3
aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFy
IHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2Ag
dmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2
ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFy
IEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlw
ZSwgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayBy
ZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxu
ICB2YXJcbiAgICBwdXNoICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNl
ICAgICAgICAgICAgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBP
YmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3du
UHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGlt
cGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJl
LlxuICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5h
dGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9
IEZ1bmNQcm90by5iaW5kLFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7
XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBl
LXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBz
YWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAg
dmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJu
IG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xu
ICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNj
b3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGli
aWxpdHkgZm9yIHRoZSBvbGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUg
YnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0
cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5l
ZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9
IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0g
XztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztc
blxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3Ig
Y3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ss
IHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0
aW9ucy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3Vu
dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRj
aCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1
cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2
YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90
aGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtc
biAgICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNv
bGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5k
ZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9u
KGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJu
IGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9u
KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVy
biBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBB
IG1vc3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4g
YmUgYXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5p
bmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0
cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29y
LlxuICB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBp
ZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlv
bih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4g
ICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICBy
ZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2
YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkp
O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25l
ciBmdW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1
bmRlZmluZWRPbmx5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxl
bmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0g
bnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5n
dGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4g
ICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlz
Lmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAg
ICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2Jq
W2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAg
ICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFs
IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFu
b3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYg
KCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRl
KSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBw
cm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBl
ID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1
bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBv
YmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVs
cGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0
aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3Rc
biAgLy8gUmVsYXRlZDogaHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYt
ZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBK
SVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93
KDIsIDUzKSAtIDE7XG4gIHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZh
ciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0g
Z2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1i
ZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5c
biAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxu
ICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JF
YWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtl
cy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRl
bnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3Ig
KGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAg
aXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2
YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0s
IGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5c
biAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNo
IGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZh
ciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0
aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3Ro
KTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4g
ICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAg
cmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9i
aik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJl
ZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVh
dGVSZWR1Y2UoZGlyKSB7XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVz
aW5nIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRl
b3B0aW1pemUgdGhlLCBzZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVy
YXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49
IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVu
dEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0
ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAg
ICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0
ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRl
ZSwgY29udGV4dCwgNCk7XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8u
a2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAg
ICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJt
aW5lIHRoZSBpbml0aWFsIHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRl
eF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVy
biBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZy
b20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBf
LnJlZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBU
aGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZv
bGRyYC5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4g
IC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxp
YXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHBy
ZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9i
aikpIHtcbiAgICAgIGtleSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtc
biAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVy
biBvYmpba2V5XTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBh
c3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9
IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIg
cmVzdWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4g
ICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAo
cHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAg
fSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxl
bWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8u
bmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUg
d2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxp
YXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xu
ICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAg
IGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/
IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtl
eV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRy
dWU7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRo
ZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4g
IF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAg
ICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlz
QXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8
IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5k
ZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2Jq
KSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBE
ZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVz
aW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4g
IF8uY29udGFpbnMgPSBfLmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVt
LCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBf
LnZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1
YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9t
SW5kZXgpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50
cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24o
b2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtc
biAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFw
KG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9k
IDogdmFsdWVbbWV0aG9kXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVu
Yy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2Ug
dmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0
eS5cbiAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9i
aiwgXy5wcm9wZXJ0eShrZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9m
IGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4g
IC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBm
dW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVy
KGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1
c2UgY2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWlu
aW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9u
KG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7
XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFz
ZWQgY29tcHV0YXRpb24pLlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRl
eHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5p
dHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAm
JiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8u
dmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAo
dmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxu
ICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250
ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xu
ICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAg
IGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYm
IHJlc3VsdCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAg
ICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAg
IH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBl
bGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlv
bihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBs
YXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlm
IChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5
TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBv
YmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9
IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFs
dWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGlu
ZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1
dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVz
dWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAg
IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNo
dWZmbGUgYSBjb2xsZWN0aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8v
IFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNo
ZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
dmFyIHNldCA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZh
ciBsZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7
XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
e1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBp
bmRleCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFty
YW5kXSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxu
ICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8g
SWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVu
dC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsg
d2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAg
aWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBv
YmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3Ro
IC0gMSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5t
YXgoMCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNy
aXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAg
ICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4
LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4g
ICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlh
O1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQg
MCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAt
MTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAg
fSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9y
IGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rp
b24oYmVoYXZpb3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4
dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtc
biAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAg
YmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJl
c3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5
IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3Jv
dXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3Jv
dXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhh
cyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXld
ID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5
IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlv
dSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhC
eSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXld
ID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRo
YXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJp
bmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVc
biAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZh
bHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBl
bHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWws
IGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9i
aikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJl
dHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xu
ICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5c
biAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4g
MDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2Jq
KS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5
czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNh
dGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNh
dGUuXG4gIF8ucGFydGl0aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0g
W10sIGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmop
IHtcbiAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNo
KHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8v
IEFycmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZp
cnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZp
cnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0
YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBf
Lm1hcGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwg
Z3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAo
biA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlh
bChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRo
aW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9u
XG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFs
bCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4g
IF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGlj
ZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8
IGd1YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2Yg
YW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1
ZXMgaW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtc
biAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxs
IHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8u
cmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8v
IFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxp
YXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhl
IGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhl
IHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3Ag
PSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJh
eSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFs
bCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJy
YXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4g
IC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5j
dGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBz
dGFydEluZGV4KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFy
IGkgPSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJh
eUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUp
KSkge1xuICAgICAgICAvL2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVu
dHMgb2JqZWN0XG4gICAgICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBz
aGFsbG93LCBzdHJpY3QpO1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtc
biAgICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7
XG4gICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAg
IH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4g
ICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBv
dXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25l
IGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJl
dHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJu
IGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZp
ZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJu
IF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxu
ICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRo
ZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlv
biBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAu
XG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRl
ZSwgY29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBj
b250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNT
b3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIg
c2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkp
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAg
ICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFs
dWU7XG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNv
bXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAg
ICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4s
IGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAg
cmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRh
aW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAg
IH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFy
cmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBh
bGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigp
IHtcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4g
IH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hh
cmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2Vj
dGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBh
cmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9
IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7
XG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBp
ZiAoIV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAg
ICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9u
ZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVt
ZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRp
ZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1
bWVudHMsIHRydWUsIHRydWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rp
b24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9
KTtcbiAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmds
ZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVy
LlxuICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7
XG4gIH07XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJh
eSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hh
cmVkIGluZGljZXNcbiAgXy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0
aCA9IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZh
ciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJy
YXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252
ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBb
a2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBz
YW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9u
ZGluZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAg
dmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgo
bGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICBy
ZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1
bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZp
bmRJbmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJl
ZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVk
aWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4
dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRl
eCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYm
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShh
cnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAg
IHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXgg
b24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZElu
ZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9
IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9y
IGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8v
IGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVz
ZXMgYmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmos
IGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4
dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwg
aGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAg
IHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJh
dGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtc
biAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24g
dG8gY3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rp
b24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xu
ICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAs
IGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVt
YmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAw
ID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAg
ICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6
IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5k
ZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwg
aXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4g
ICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNh
dGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICBy
ZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9
IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHgg
Kz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xu
ICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhl
IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXks
XG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4g
IC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNz
IGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBf
LmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRl
eCk7XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdElu
ZGV4KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJp
dGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGBy
YW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0
dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8u
cmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51
bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1c
biAgICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGgu
Y2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShs
ZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3Rh
cnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJl
dHVybiByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRl
IGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3
aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9u
KHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtc
biAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBz
b3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0
ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBw
bHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3Vs
dDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3Vu
ZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAg
Ly8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBG
dW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1
bmMsIGNvbnRleHQpIHtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2
ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRz
LCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3Io
J0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAg
ICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5j
b25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7
XG4gIH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2
ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxl
ZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4g
IC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVu
dHMgdG8gYmUgcHJlLWZpbGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAg
IHZhciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5k
ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFy
Z3MubGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdz
W2ldID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAg
fVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFy
Z3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJv
dW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtc
blxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmpl
Y3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUg
Ym91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmlu
ZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAo
bGVuZ3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5j
dGlvbiBuYW1lcycpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAg
a2V5ID0gYXJndW1lbnRzW2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9i
aik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBl
bnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVu
Y3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtc
biAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcn
ICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAg
IGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xu
ICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAv
LyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMs
IGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAg
Xy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAg
ICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5c
biAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBj
dXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRp
YWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVu
IGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmlu
ZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlv
biB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1v
cmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtl
IHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8v
IGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5n
IGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9u
cykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBu
dWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0g
e307XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlv
bnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxs
O1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICgh
dGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYm
IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJl
bWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7
XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJl
bWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVh
clRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1c
biAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29u
dGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxs
O1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxz
ZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAg
ICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5z
IGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQs
IHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVk
IGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElm
IGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8v
IGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBm
dW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywg
Y29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigp
IHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxh
c3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChs
YXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51
bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5h
cHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBh
cmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7
XG4gICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlh
dGUgJiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0
KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1
bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtc
biAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vj
b25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVm
b3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2lu
YWwgZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICBy
ZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBu
ZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0g
ZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0
dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4g
IC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qg
b2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRo
ZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAg
IHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtc
biAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFy
IHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGls
ZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVy
biByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRl
ciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rp
b24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0
aGUgTnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2
YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDAp
IHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1c
biAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVj
dXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxs
IGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlh
bChfLmJlZm9yZSwgMik7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBg
Zm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3Rv
U3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5v
bkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5n
JyxcbiAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3du
UHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51
bVByb3BzKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVBy
b3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAg
dmFyIHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJv
dG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBj
YXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBw
cm9wKSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAg
d2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tu
b25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3Rv
W3Byb3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChw
cm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2Yg
YW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3Jp
cHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5
cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAo
dmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAg
IC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9w
cyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFs
bCB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBr
ZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAg
Ly8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3Bz
KG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhl
IHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtl
eXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ld
XTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBy
ZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9i
amVjdFxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBf
Lm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVy
YXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2Jq
KSxcbiAgICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0g
e30sXG4gICAgICAgICAgY3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhd
O1xuICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXld
LCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07
XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAg
cGFpcnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBB
cnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVy
biBwYWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBv
YmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlz
KG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9
XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBv
ZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFz
ZWQgYXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAg
ICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4g
ICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmpl
Y3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5l
eHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZl
biBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2Jq
ZWN0KHMpXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZh
U2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVu
ZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5z
IHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3Rc
biAgXy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBw
cmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlz
KG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNh
dGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8g
UmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0
ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNv
bnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtl
eXM7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVu
Y3Rpb24ob2l0ZXJhdGVlKSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAg
aXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtc
biAgICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAg
IGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2Jq
OyB9O1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAw
LCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5
ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJh
dGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3
aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkp
IHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4g
ICAgICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEp
LCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAg
ICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAg
cmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxs
IGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRz
ID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9i
amVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8v
IElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUg
YWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9u
KHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5
cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0
dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxp
Y2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAo
IV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikg
PyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMg
aW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhl
IHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRo
b2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1l
ZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwg
aW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4g
IH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2Yg
YGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMp
IHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xu
ICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9i
amVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXld
IHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7
XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBm
b3IgYGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykg
e1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRo
ZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9w
b3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2Fs
KS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xu
ICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0g
dW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09
IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFu
Y2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93
cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNz
TmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcu
Y2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAv
LyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xl
YW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6
XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24g
KE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmdd
JzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qg
d3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1
aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09
PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFO
YHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3Qo
TmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4g
K2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQg
Zm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8g
K2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4g
ICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFu
ZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJl
ZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUg
dGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAg
ICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09
PSArYjtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVj
dCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0g
J29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAg
Ly8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50
LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFt
ZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0
cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3Rv
cikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3Ry
dWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4g
ICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRo
bSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9t
IEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAg
Ly8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3Mg
ZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMg
Y29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0
YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChs
ZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJz
ZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVk
IHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3Rh
Y2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0
byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4g
ICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMg
YW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5
IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5c
biAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgp
IHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9y
aW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAg
ICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1
cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBv
YmplY3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9
IGtleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4g
dGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFs
aXR5LlxuICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNl
O1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNo
IG1lbWJlclxuICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFz
KGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBm
YWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJv
bSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAg
IGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEg
ZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5p
c0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxu
ICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4g
XCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5p
c0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1
ZTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0
cmluZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAw
O1xuICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMg
YSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxu
ICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUn
cyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0
IEFycmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4g
IF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7
XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYg
ISFvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRz
LCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJy
b3IuXG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVy
JywgJ0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydp
cycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwo
b2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8g
RGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVt
LCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1
bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8u
aXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdj
YWxsZWUnKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFw
cHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8g
SUUgMTEgKCMxNjIxKSwgYW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4v
ICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8u
aXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0g
J2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmpl
Y3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
cmV0dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5c
biAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3
aGljaCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgcmV0dXJuIF8uaXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAg
Ly8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3Ry
aW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEg
Z2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtc
biAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFi
bGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBj
aGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8g
b24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMg
PSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Q
cm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xu
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0Nv
bmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJl
dmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0
LlxuICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1Vu
ZGVyc2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRp
dHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9
IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRp
Y2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJz
Y29yZS5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0g
ZnVuY3Rpb24oKXt9O1xuXG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0
ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJv
cGVydHkuXG4gIF8ucHJvcGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmog
PT0gbnVsbCA/IGZ1bmN0aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9i
altrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hl
Y2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFs
dWVgIHBhaXJzLlxuICBfLm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xu
ICAgIGF0dHJzID0gXy5leHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24o
b2JqKSB7XG4gICAgICByZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07
XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlv
bihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4
KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEp
O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkp
O1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdl
ciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9u
KG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4g
ICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJh
bmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0
ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8u
bm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0
VGltZSgpO1xuICB9O1xuXG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5n
LlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7
JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYj
eDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmlu
dmVydChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNj
YXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVz
Y2FwZXIgPSBmdW5jdGlvbihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNo
KSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9y
IGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3Vy
Y2UgPSAnKD86JyArIF8ua2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJl
Z2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNv
dXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcg
PSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJl
Z2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVy
KSA6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNj
YXBlTWFwKTtcbiAgXy51bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4g
IC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRo
ZW4gaW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lz
ZSwgcmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZh
bGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmpl
Y3RbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9
IGZhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVl
LmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGlu
dGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8v
IFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBf
LnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIg
KyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAv
LyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRl
cnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBh
bHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZh
bHVhdGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShb
XFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xu
ICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3Ug
ZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBv
ciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5v
dCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFy
YWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFc
biAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAg
IFwiJ1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAg
ICAnXFxuJzogICAgICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjkn
OiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAy
OHxcXHUyMDI5L2c7XG5cbiAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAg
IHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0
IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9u
LlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVy
cywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90
ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5
IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5j
dGlvbih0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYm
IG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5k
ZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21i
aW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlv
bi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8
IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNo
KS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4g
ICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxh
dGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2
YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVw
bGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVh
dGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCku
cmVwbGFjZShlc2NhcGVyLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0
Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicr
XFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4n
XCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBc
IicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wi
O1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xc
blwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9i
ZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZl
c3QuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5c
IjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2
YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNl
ID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9
IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwi
cHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4g
ICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBy
ZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291
cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAg
IHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xu
ICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAv
LyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29t
cGlsYXRpb24uXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7
XG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicg
KyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRk
IGEgXCJjaGFpblwiIGZ1bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29y
ZSBvYmplY3QuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2Ug
PSBfKG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFu
Y2U7XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRl
cnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmpl
Y3QgdGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFs
dGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3Jh
cHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBj
b250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1
bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhv
YmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5j
dGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAg
IHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVd
ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAg
ICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQo
dGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4g
IC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9i
amVjdC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rp
b25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywg
J3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xu
ICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVd
ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1l
dGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcg
fHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07
XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8g
QWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFj
aChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIg
bWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3Jh
cHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJl
c3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZh
bHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAg
Ly8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdp
bmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZp
Y2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5w
cm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtc
biAgICByZXR1cm4gJycgKyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3Ry
YXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRl
cnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1
bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0
aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBu
YW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRo
YXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5
IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3Nl
IGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRl
ZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBl
b2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3Vu
ZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAg
fVxufS5jYWxsKHRoaXMpKTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3Jl
LmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAw
OS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBS
ZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJh
c2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSBy
b290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUg
c2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFs
dWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3Qu
XztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2
ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBP
YmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8g
Q3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3Jl
IHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1
c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJp
bmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBP
YmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRp
dmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJl
IGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5Lmlz
QXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZl
QmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0g
T2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJv
Z2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4g
IC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3Ig
dXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFu
Y2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJu
IG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBv
cnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNr
d2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3Jl
IGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYg
KHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxl
ICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1v
ZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtc
biAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJ
T04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBl
ZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3Nl
ZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2Nv
cmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNv
bnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1
bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAg
ICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5j
dGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2
YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRl
eHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiBy
ZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xu
ICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5k
ZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkg
e1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xu
ICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxi
YWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxl
Y3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVu
dGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJv
cGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdD
b3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBp
ZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQs
IGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIo
dmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRl
ZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250
ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNy
ZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rp
b24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7
XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGgg
PCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAx
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1l
bnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAg
ICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkr
Kykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZp
bmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGlu
aGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5
cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlm
IChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9y
LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAg
Q3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFy
IHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xu
ICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAg
fTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hl
dGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9y
IGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35q
b3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5
IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lO
REVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCds
ZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAg
IHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBs
ZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9J
TkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0
aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9u
IHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBp
ZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwg
aXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikp
IHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBl
bHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVl
KG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJu
IG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0
ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxc
biAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMg
PSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDog
aW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwg
Y3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAg
Ly8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4g
IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3Ig
ZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1
bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVy
YXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBm
b3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAg
ICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAg
IG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7
XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rp
b24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlM
aWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2Jq
KS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4g
ICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5c
biAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tl
eXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAg
fVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4
LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNp
bmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9y
IGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNl
KDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxz
byBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJl
ZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0
cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1
bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAo
aXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5
ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVs
ZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAu
XG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3Qp
IHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNo
KHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1
cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJl
amVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8u
ZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4g
IC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0
ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0
ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMo
b2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJl
bnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRl
KG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1c
biAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25l
IGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNl
ZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwg
Y29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAg
dmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVu
Z3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5
c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBj
dXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xu
ICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEg
Z2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5k
IGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5j
dGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtl
KG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0g
J251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihv
YmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2Qg
KHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZv
a2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAg
ICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBp
c0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVs
bCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAv
LyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRj
aGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBy
ZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmll
bmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBv
bmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5c
biAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIo
b2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9u
IG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0
XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdo
ZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1h
dGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAo
b3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBp
dGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21w
dXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVy
YXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShv
YmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGgg
PSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07
XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVl
O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2Io
aXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGlu
ZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBs
aXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09
PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQg
PSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxu
ICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJu
IHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBf
Lm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0
ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29t
cHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAg
IG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAg
ICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xu
ICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2Jq
LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVy
YXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29t
cHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtc
biAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21w
dXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lv
biBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlh
Lm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlv
bihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVz
KG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAg
aWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAg
ICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZm
bGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xs
ZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xl
IHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxv
d3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwg
Z3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJy
YXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFu
ZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5z
bGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3Mg
dmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRC
eSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNi
KGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6
IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRl
ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVm
dCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0g
cmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIg
fHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZv
aWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdo
dC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVu
Y3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIg
Z3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBv
YmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4g
ICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmpl
Y3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0
ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRl
cmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7
XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVs
c2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmpl
Y3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9y
XG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1
ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4g
ICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBv
ZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8v
IGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhh
dCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0
aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJl
c3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkg
Y3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRv
QXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlm
IChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJh
eUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8u
dmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMg
aW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09
IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0
aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24g
aW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVu
XG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlz
ZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4g
ICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBrZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFz
cyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07
XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4g
IC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxs
IHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFz
IGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0
byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0
aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9p
ZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICBy
ZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNp
YWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiog
d2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcg
dGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4g
ICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAt
IChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxh
c3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFz
dCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5
LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAg
IGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtc
biAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2Yg
dGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5
IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJl
dHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8u
dGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBz
bGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAg
Ly8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3Qg
PSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0
eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUg
YGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFs
bG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7
XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlu
cHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAg
ICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0Fy
Z3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFy
cmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZs
YXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0g
dmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hp
bGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAg
ICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgr
K10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxu
ICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0
KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFs
bG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtc
blxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRh
aW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkp
IHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywg
MSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRo
ZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3Ug
aGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNl
ZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNT
b3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRl
ZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0
ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0g
bnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9
IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdl
dExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJy
YXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBp
LCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkg
fHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9
IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8u
Y29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVk
KTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxz
ZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2go
dmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8v
IFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3Qg
ZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlv
biA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRy
dWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMg
ZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMu
XG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0g
W107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0
ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisr
KSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztc
biAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtc
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8v
IE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCBy
ZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3Qg
PSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVy
KGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwg
dmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0
cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5k
ZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56
aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBh
Y2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBl
bGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3Ro
IHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBp
bmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhd
ID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9
O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5n
bGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBh
cnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8v
IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2
YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVz
KSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7
XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAg
fVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRv
IGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5j
dGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rp
b24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJl
ZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xu
ICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7
IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBp
ZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xu
ICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRo
ZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRl
c3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5m
aW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVz
ZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXgg
YXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWlu
dGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rp
b24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0
ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAg
IHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwg
aGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4g
ICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxz
ZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVy
YXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0
aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNv
cnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAg
ICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBl
b2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAg
ICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAg
ICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHgg
KyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNl
IGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRl
ZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0g
PyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAg
IGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05h
Tik7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAg
ICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHgg
PCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0p
IHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4g
IC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRl
bSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGlu
IHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNv
cnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFy
eSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4
LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0x
LCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29u
dGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5h
dGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9j
dW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1s
I3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAg
aWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFy
dCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0g
TWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciBy
YW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5n
dGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4g
ICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBG
dW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0
aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9y
bWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJv
dW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29u
dGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRG
dW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNl
bGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0g
c291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQp
KSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBh
IGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQg
YXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1
KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5k
ID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMu
YmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cg
bmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAg
dmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVu
Y3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0
LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAg
IHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBi
eSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3Vt
ZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250
ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0
aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlv
bihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtc
biAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxl
bmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7
XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3Nb
aV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFy
Z3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3Ro
KSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRl
Qm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJu
IGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9k
cyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhv
ZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFj
a3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwg
PSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwg
a2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3Qg
YmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsg
aSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmlu
ZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBN
ZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBf
Lm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1
bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZh
ciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykg
OiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3Nd
ID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJl
c3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXpl
O1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9m
IG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRz
IHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBh
cmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3
YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBy
dW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5k
ZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rp
b24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9u
Y2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhy
b3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0
IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0
IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVk
Z2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBv
biB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5j
LCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2
YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlv
bnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHBy
ZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAg
dGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
O1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlm
ICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7
XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBj
b250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWlu
aW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xu
ICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVs
bDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0g
ZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0
ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJh
aWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCBy
ZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xu
XG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMg
dG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24g
d2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1p
bGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlv
biBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAg
Xy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0
aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRl
ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xu
XG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQg
PSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICBy
ZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91
dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxu
ICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJn
cyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2Fs
bE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91
dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAg
ICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9
IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3Vt
ZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRz
LCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVj
dXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3Jh
cHBlcikge1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5c
biAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
KSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAg
IH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0
aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1
cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVu
Y3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJn
cy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3Rh
cnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQp
O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBj
YWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5v
dCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywg
ZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlm
ICgtLXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAg
cmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhh
dCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8g
b2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5v
bmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4g
IC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJl
IGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFz
RW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmlu
ZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBl
T2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVy
YWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9u
IGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBu
b25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25z
dHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBj
b25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3Ig
aXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlm
IChfLmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2go
cHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51
bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtw
cm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAg
ICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZl
IHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVz
IHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAg
IGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0g
W107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5w
dXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xs
ZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAg
Ly8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxs
S2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4g
W107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1
c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxl
Y3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAv
LyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFs
dWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2
YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ld
ID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8v
IFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxl
bWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMg
YW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4
dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlz
ID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAg
ICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5
ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShv
YmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4g
cmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBg
W2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAg
IHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAg
ICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQg
dmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAg
Xy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFy
IGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBr
ZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBh
IHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVj
dC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMg
PSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkg
aW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChr
ZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVu
ZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2Jq
ZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8g
QXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhl
IHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3Jn
L2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3Np
Z24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xu
XG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBw
cmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFy
IGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBr
ZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAg
ICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1c
biAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5n
IHRoZSBhbGxvd2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3Qs
IG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0
LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4g
ICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlz
KG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtc
biAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFs
c2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0
dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4g
ICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtc
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBv
ZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsb2NrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21p
dCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0
aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZh
bHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVl
LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9
O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9
O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMu
XG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8v
IENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBl
IG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVu
IHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3Jl
YXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNl
Q3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHBy
b3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93
LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBf
LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5c
biAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMg
b2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFw
IGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRp
b25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0g
ZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAg
cmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBh
IGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24o
b2JqZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0g
a2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAg
ICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5
XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAg
ICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJp
c29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFT
dGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9
PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1v
bnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9p
ZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8g
YSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVj
YXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxs
KSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAg
ICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNl
b2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5c
biAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1l
ICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05h
bWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRh
dGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29i
amVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBm
b3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdb
b2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNw
b25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xu
ICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJl
dHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4g
ICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAg
ICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAh
PT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29u
IGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiAr
YSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2Jq
ZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBD
b2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0
ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2Vu
dGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNl
bnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAg
ICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05h
bWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlm
ICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZh
bHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUg
bm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20g
ZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBi
Q3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5p
c0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5j
ZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBp
biBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAg
ICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVz
LiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBp
cyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9u
IGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMu
XG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVj
dHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAg
ICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7
XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3Jt
YW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8v
IHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0g
YSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUg
Zmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3Rh
Y2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNv
bXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8v
IENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24g
aXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3Ro
ICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBj
b250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChs
ZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ss
IGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g
RGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xu
ICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9i
amVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFy
aW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3Ro
KSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVl
cCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAg
ICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3Rh
Y2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZp
cnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3Rh
Y2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4g
IC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJl
IGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEs
IGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVt
cHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9w
ZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51
bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXko
b2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9i
ai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09
IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVn
YXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2
ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2Jq
KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxl
IGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBl
ID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09
PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9k
czogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBp
c1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0
cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFt
ZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4g
dG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xu
ICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4g
YnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNw
ZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVu
dHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJu
IF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNG
dW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4g
b2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAg
aWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmpl
Y3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4g
dHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJ
cyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlv
bihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChv
YmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhl
IG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBm
dW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29i
ajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xl
YW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0g
ZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07
XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMg
YSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQg
ZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBk
aXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5
cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBu
dWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxp
dHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2Nv
cmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRv
IGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5k
ZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3Qu
XyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBL
ZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxu
ICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07
XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0
c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtc
blxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xu
XG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVy
bnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4g
ICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJl
ZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2Zc
biAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0
aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJl
dHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7
XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50
aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0g
QXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRl
ZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ld
ID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBh
IHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFu
ZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAg
IG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRo
LmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEg
KHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4g
aW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4g
bmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGll
cyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxu
ICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxu
ICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVz
Y2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2Nh
cGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxu
ICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0g
ZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAg
Ly8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVk
XG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xu
ICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdl
eHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtc
biAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAg
IHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VS
ZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3Jl
YXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVz
Y2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlz
IGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29u
dGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0
LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/
IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtc
biAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24o
dmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJh
dGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBz
ZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291
bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQg
PSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlk
O1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVt
cGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0
dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5n
cyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJw
b2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xc
c1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0
aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9u
LCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8v
IGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAv
LyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4g
YmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4g
ICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHIn
OiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4Jyxc
biAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8
XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9u
KG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4g
IC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3Mg
aW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0
cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3Rs
eSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xk
U2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50
ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlm
ICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAg
c2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtc
blxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24g
dmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0
aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9s
YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01h
dGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21w
aWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3By
aWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7
XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVy
cG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShp
bmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXgg
PSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAg
c291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNj
YXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAg
ICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/
Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNv
dXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5c
biAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRo
ZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3Vy
Y2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVk
LCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZh
cmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xu
XG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4s
XCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcn
KTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkg
e1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAn
b2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0g
c291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5j
dGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4g
ICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmll
bmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJp
YWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3Vt
ZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAg
fTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3Jh
cHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAg
IHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0t
XG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMg
YSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdy
YXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUg
ZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2
YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5j
ZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBv
d24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4g
PSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24o
bmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5w
cm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5f
d3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAg
cmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAg
fSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8g
dGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRv
ciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNo
JywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5j
dGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5w
cm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFw
cGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFt
ZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkg
ZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xu
ICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3Jh
cHBlci5cbiAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFt
ZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBl
W25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5h
cHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBF
eHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAg
Xy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBl
ZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9k
cyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQg
SlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlw
ZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9
IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAg
Ly8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2Vt
YW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9y
IEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVy
c1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBi
YXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGlu
IGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQg
cmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAv
LyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVz
dC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xu
ICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBf
O1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgogCiAvKioqLyB9KSwKIC8qIDQyMiAq
LwpAQCAtMTQ5MDI4LDcgKzE0OTAyOCw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAK
ICAgZnVuY3Rpb24gY29tYmluZShkZXN0LCBzcmMpIHsKICAgICBPYmplY3Qua2V5cyhzcmMpLmZv
ckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgaWYgKF8uaGFzKEpTSElOVC5ibGFja2xpc3Qs
IG5hbWUpKSByZXR1cm47CisgICAgICBpZiAoXy5oYXMoSlNISU5ULmJsb2NrbGlzdCwgbmFtZSkp
IHJldHVybjsKICAgICAgIGRlc3RbbmFtZV0gPSBzcmNbbmFtZV07CiAgICAgfSk7CiAgIH0KQEAg
LTE0OTMxMyw3ICsxNDkzMTMsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgIGtleSA9IGtleS5zbGljZSgxKTsKICAgICAgICAgICB2YWwgPSBmYWxzZTsKIAotICAgICAg
ICAgIEpTSElOVC5ibGFja2xpc3Rba2V5XSA9IGtleTsKKyAgICAgICAgICBKU0hJTlQuYmxvY2ts
aXN0W2tleV0gPSBrZXk7CiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRba2V5XTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICBwcmVkZWZba2V5XSA9ICh2YWwgPT09ICJ0cnVlIik7CkBA
IC0xNTQxMjAsNyArMTU0MTIwLDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKICAgICAg
IEpTSElOVC5lcnJvcnMgPSBbXTsKICAgICAgIEpTSElOVC51bmRlZnMgPSBbXTsKICAgICAgIEpT
SElOVC5pbnRlcm5hbHMgPSBbXTsKLSAgICAgIEpTSElOVC5ibGFja2xpc3QgPSB7fTsKKyAgICAg
IEpTSElOVC5ibG9ja2xpc3QgPSB7fTsKICAgICAgIEpTSElOVC5zY29wZSA9ICIobWFpbikiOwog
ICAgIH0KIApAQCAtMTU0MTQ5LDcgKzE1NDE0OSw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24o
KSB7CiAKICAgICAgICAgaWYgKGl0ZW1bMF0gPT09ICItIikgewogICAgICAgICAgIHNsaWNlID0g
aXRlbS5zbGljZSgxKTsKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W3NsaWNlXSA9IHNsaWNl
OworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rbc2xpY2VdID0gc2xpY2U7CiAgICAgICAgICAg
Ly8gcmVtb3ZlIGZyb20gcHJlZGVmaW5lZCBpZiB0aGVyZQogICAgICAgICAgIGRlbGV0ZSBwcmVk
ZWZpbmVkW3NsaWNlXTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE5NTgyOSw3ICsxOTU4MjksNyBA
QCBmdW5jdGlvbiBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobm9kZSkgCiAJdmFyIHJlZ2V4U2lu
Z2xlRXNjYXBlID0gL1siJ1xcXGJcZlxuXHJcdF0vOwogCiAJdmFyIHJlZ2V4RGlnaXQgPSAvWzAt
OV0vOwotCXZhciByZWdleFdoaXRlbGlzdCA9IC9bICEjLSZcKC1cW1xdLX5dLzsKKwl2YXIgcmVn
ZXhBbGxvd2xpc3QgPSAvWyAhIy0mXCgtXFtcXS1+XS87CiAKIAl2YXIganNlc2MgPSBmdW5jdGlv
bihhcmd1bWVudCwgb3B0aW9ucykgewogCQkvLyBIYW5kbGUgb3B0aW9ucwpAQCAtMTk2MDA0LDcg
KzE5NjAwNCw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSAKIAkJ
CQl9CiAJCQl9CiAJCQlpZiAoIW9wdGlvbnMuZXNjYXBlRXZlcnl0aGluZykgewotCQkJCWlmIChy
ZWdleFdoaXRlbGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKKwkJCQlpZiAocmVnZXhBbGxvd2xpc3Qu
dGVzdChjaGFyYWN0ZXIpKSB7CiAJCQkJCS8vIEl04oCZcyBhIHByaW50YWJsZSBBU0NJSSBjaGFy
YWN0ZXIgdGhhdCBpcyBub3QgYCJgLCBgJ2Agb3IgYFxgLAogCQkJCQkvLyBzbyBkb27igJl0IGVz
Y2FwZSBpdC4KIAkJCQkJcmVzdWx0ICs9IGNoYXJhY3RlcjsKQEAgLTIwOTMzNCw3ICsyMDkzMzQs
NyBAQCB2YXIgX2dldEl0ZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1CiAKIGV4cG9ydHMu
Y2FsbCA9IGNhbGw7CiBleHBvcnRzLl9jYWxsID0gX2NhbGw7Ci1leHBvcnRzLmlzQmxhY2tsaXN0
ZWQgPSBpc0JsYWNrbGlzdGVkOworZXhwb3J0cy5pc0Jsb2NrbGlzdGVkID0gaXNCbG9ja2xpc3Rl
ZDsKIGV4cG9ydHMudmlzaXQgPSB2aXNpdDsKIGV4cG9ydHMuc2tpcCA9IHNraXA7CiBleHBvcnRz
LnNraXBLZXkgPSBza2lwS2V5OwpAQCAtMjA5NDEwLDkgKzIwOTQxMCw5IEBAIGZ1bmN0aW9uIF9j
YWxsKGZucykgewogICByZXR1cm4gZmFsc2U7CiB9CiAKLWZ1bmN0aW9uIGlzQmxhY2tsaXN0ZWQo
KSB7Ci0gIHZhciBibGFja2xpc3QgPSB0aGlzLm9wdHMuYmxhY2tsaXN0OwotICByZXR1cm4gYmxh
Y2tsaXN0ICYmIGJsYWNrbGlzdC5pbmRleE9mKHRoaXMubm9kZS50eXBlKSA+IC0xOworZnVuY3Rp
b24gaXNCbG9ja2xpc3RlZCgpIHsKKyAgdmFyIGJsb2NrbGlzdCA9IHRoaXMub3B0cy5ibG9ja2xp
c3Q7CisgIHJldHVybiBibG9ja2xpc3QgJiYgYmxvY2tsaXN0LmluZGV4T2YodGhpcy5ub2RlLnR5
cGUpID4gLTE7CiB9CiAKIGZ1bmN0aW9uIHZpc2l0KCkgewpAQCAtMjA5NDIwLDcgKzIwOTQyMCw3
IEBAIGZ1bmN0aW9uIHZpc2l0KCkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGlmICh0
aGlzLmlzQmxhY2tsaXN0ZWQoKSkgeworICBpZiAodGhpcy5pc0Jsb2NrbGlzdGVkKCkpIHsKICAg
ICByZXR1cm4gZmFsc2U7CiAgIH0KIApAQCAtMjExMDc4LDcgKzIxMTA3OCw3IEBAIGZ1bmN0aW9u
IHNob3VsZElnbm9yZUtleShrZXkpIHsKIAogICBpZiAoa2V5ID09PSAiZW50ZXIiIHx8IGtleSA9
PT0gImV4aXQiIHx8IGtleSA9PT0gInNob3VsZFNraXAiKSByZXR1cm4gdHJ1ZTsKIAotICBpZiAo
a2V5ID09PSAiYmxhY2tsaXN0IiB8fCBrZXkgPT09ICJub1Njb3BlIiB8fCBrZXkgPT09ICJza2lw
S2V5cyIpIHJldHVybiB0cnVlOworICBpZiAoa2V5ID09PSAiYmxvY2tsaXN0IiB8fCBrZXkgPT09
ICJub1Njb3BlIiB8fCBrZXkgPT09ICJza2lwS2V5cyIpIHJldHVybiB0cnVlOwogCiAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTIyMjc2OCw3ICsyMjI3NjgsNyBAQCBmdW5jdGlvbiBfaW50ZXJvcFJl
cXVpcmVXaWxkY2FyZChvYmopIHsgCiAKIGNvbnN0IGxpZmVjeWNsZU1ldGhvZHMgPSBuZXcgU2V0
KFsiY29tcG9uZW50V2lsbFVubW91bnQiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiY29tcG9uZW50
V2lsbE1vdW50IiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJjb21wb25lbnRXaWxsVXBkYXRlIiwg
ImNvbXBvbmVudERpZENhdGNoIiwgImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiXSk7CiAKLWNv
bnN0IHdoaXRlbGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250ZXh0Iiwg
InJlZnMiXSk7Citjb25zdCBhbGxvd2xpc3RlZFByb3BlcnRpZXMgPSBuZXcgU2V0KFsicHJvcHMi
LCAiY29udGV4dCIsICJyZWZzIl0pOwogCiBmdW5jdGlvbiBnZXRJbml0aWFsUHJvcHMocmVhbG0s
IGNvbXBvbmVudFR5cGUpIHsKICAgbGV0IHByb3BzTmFtZSA9IG51bGw7CkBAIC0yMjI5MzgsNyAr
MjIyOTM4LDcgQEAgZnVuY3Rpb24gZXZhbHVhdGVDbGFzc0NvbnN0cnVjdG9yKHJlYWxtLAogICAg
IGxldCBpbnN0YW5jZSA9ICgwLCBfaW5kZXgyLkNvbnN0cnVjdCkocmVhbG0sIGNvbnN0cnVjdG9y
RnVuYywgW3Byb3BzLCBjb250ZXh0XSk7CiAgICAgKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGlu
c3RhbmNlIGluc3RhbmNlb2YgX2luZGV4Lk9iamVjdFZhbHVlKTsKICAgICBmb3IgKGxldCBbcHJv
cGVydHlOYW1lXSBvZiBpbnN0YW5jZS5wcm9wZXJ0aWVzKSB7Ci0gICAgICBpZiAoIXdoaXRlbGlz
dGVkUHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkgeworICAgICAgaWYgKCFhbGxvd2xpc3Rl
ZFByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaW5zdGFuY2VQcm9wZXJ0
aWVzLmFkZChwcm9wZXJ0eU5hbWUpOwogICAgICAgfQogICAgIH0K
</data>
<flag name="review"
          id="434342"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416901</attachid>
            <date>2021-01-02 15:00:15 -0800</date>
            <delta_ts>2021-01-02 15:05:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>test2.txt</filename>
            <type>text/plain</type>
            <size>1395329</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzExMjIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIxLTAxLTAyICBC
ZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbm9uLWluY2x1
c2l2ZSBsYW5ndWFnZSBmcm9tIEpldFN0cmVhbSAyLjAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3RyZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9y
LXBheWxvYWQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNwZWN0b3Iu
UmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2Zvcm1h
dFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuc3R5bGVGb3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRPTU5vZGUuV2ViSW5zcGVjdG9yLlJlc291cmNlLldlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLmlzQWxs
b3dsaXN0ZWRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUu
X2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuaXNXaGl0ZWxpc3RlZFByb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBKZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanM6
CisKIDIwMjAtMTItMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01vdGlvbk1hcmtdIEluY3JlYXNlIHRoZSB3YXJtLXVwIHRpbWUgZm9yIGVhY2ggc3Vi
LXRlc3QgZnJvbSAxMDBtcyB0byAxMDAwbXMKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9yLXBheWxvYWQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9hZC5qcwkocmV2
aXNpb24gMjcxMTIyKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9p
bnNwZWN0b3ItcGF5bG9hZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNTgwOSw5ICs1ODA5LDkgQEAg
ZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqLHRva2VuKQogZnVuY3Rpb24gaW50ZWdlckZvcm1h
dHRlcihvYmopCiB7bGV0IHZhbHVlPXR5cGVvZiBvYmoudmFsdWU9PT0ibnVtYmVyIj9vYmoudmFs
dWU6b2JqLmRlc2NyaXB0aW9uO3JldHVybiBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzLmQodmFs
dWUpO30KIHZhciBjdXJyZW50U3R5bGU9bnVsbDtmdW5jdGlvbiBzdHlsZUZvcm1hdHRlcihvYmop
Ci17Y3VycmVudFN0eWxlPXt9O3ZhciBidWZmZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpO2J1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIixvYmouZGVzY3JpcHRpb24pO2Zvcih2YXIg
aT0wO2k8YnVmZmVyLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBwcm9wZXJ0eT1idWZmZXIuc3R5bGVb
aV07aWYoaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KSkKK3tjdXJyZW50U3R5bGU9e307
dmFyIGJ1ZmZlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7YnVmZmVyLnNldEF0dHJp
YnV0ZSgic3R5bGUiLG9iai5kZXNjcmlwdGlvbik7Zm9yKHZhciBpPTA7aTxidWZmZXIuc3R5bGUu
bGVuZ3RoO2krKyl7dmFyIHByb3BlcnR5PWJ1ZmZlci5zdHlsZVtpXTtpZihpc0FsbG93bGlzdGVk
UHJvcGVydHkocHJvcGVydHkpKQogY3VycmVudFN0eWxlW3Byb3BlcnR5XT1idWZmZXIuc3R5bGVb
cHJvcGVydHldO319Ci1mdW5jdGlvbiBpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCitm
dW5jdGlvbiBpc0FsbG93bGlzdGVkUHJvcGVydHkocHJvcGVydHkpCiB7Zm9yKHZhciBwcmVmaXgg
b2ZbImJhY2tncm91bmQiLCJib3JkZXIiLCJjb2xvciIsImZvbnQiLCJsaW5lIiwibWFyZ2luIiwi
cGFkZGluZyIsInRleHQiXSl7aWYocHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXgpfHxwcm9wZXJ0
eS5zdGFydHNXaXRoKCItd2Via2l0LSIrcHJlZml4KSkKIHJldHVybiB0cnVlO30KIHJldHVybiBm
YWxzZTt9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVu
Y2htYXJrL2Jyb3dzZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2VyLmpzCShyZXZpc2lvbiAyNzExMjIpCisr
KyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVuY2htYXJrL2Jyb3dz
ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwMzg4LDE1ICsxMDM4OCwxNSBAQCB0cmF2ZXJzZS5y
ZW1vdmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHRyCiAgIHJldHVybiB0cmVlOwogfTsKIAotZnVu
Y3Rpb24gaGFzQmxhY2tsaXN0ZWRUeXBlKHBhdGgsIHN0YXRlKSB7CitmdW5jdGlvbiBoYXNCbG9j
a2xpc3RlZFR5cGUocGF0aCwgc3RhdGUpIHsKICAgaWYgKHBhdGgubm9kZS50eXBlID09PSBzdGF0
ZS50eXBlKSB7CiAgICAgc3RhdGUuaGFzID0gdHJ1ZTsKICAgICBwYXRoLnN0b3AoKTsKICAgfQog
fQogCi10cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlLCB0eXBlLCBibGFj
a2xpc3RUeXBlcykgewotICBpZiAoKDAsIF9pbmNsdWRlczIuZGVmYXVsdCkoYmxhY2tsaXN0VHlw
ZXMsIHRyZWUudHlwZSkpIHJldHVybiBmYWxzZTsKK3RyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlv
biAodHJlZSwgc2NvcGUsIHR5cGUsIGJsb2NrbGlzdFR5cGVzKSB7CisgIGlmICgoMCwgX2luY2x1
ZGVzMi5kZWZhdWx0KShibG9ja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwog
CiAgIGlmICh0cmVlLnR5cGUgPT09IHR5cGUpIHJldHVybiB0cnVlOwogCkBAIC0xMDQwNiw4ICsx
MDQwNiw4IEBAIHRyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2NvcGUKICAgfTsK
IAogICB0cmF2ZXJzZSh0cmVlLCB7Ci0gICAgYmxhY2tsaXN0OiBibGFja2xpc3RUeXBlcywKLSAg
ICBlbnRlcjogaGFzQmxhY2tsaXN0ZWRUeXBlCisgICAgYmxvY2tsaXN0OiBibG9ja2xpc3RUeXBl
cywKKyAgICBlbnRlcjogaGFzQmxvY2tsaXN0ZWRUeXBlCiAgIH0sIHNjb3BlLCBzdGF0ZSk7CiAK
ICAgcmV0dXJuIHN0YXRlLmhhczsKQEAgLTM2OTczLDcgKzM2OTczLDcgQEAgZnVuY3Rpb24gVHlw
ZWRBcnJheVNwZWNpZXNDcmVhdGUocmVhbG0sIAogdmFyIHByb21pc2VFeGlzdHMgPSB0eXBlb2Yg
UHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJzsKIAogLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi8K
LXZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDogZ2xv
YmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsYWNrbGlzdAordmFyIGdsb2JhbE9iamVj
dCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1k
aXNhYmxlLWxpbmUgaWQtYmxvY2tsaXN0CiAKIHZhciBzeW1ib2xFeGlzdHMgPSB0eXBlb2YgU3lt
Ym9sICE9PSAndW5kZWZpbmVkJzsKIHZhciBtYXBFeGlzdHMgPSB0eXBlb2YgTWFwICE9PSAndW5k
ZWZpbmVkJzsKQEAgLTExMzU4Nyw3ICsxMTM1ODcsNyBAQCBtb2R1bGUuZXhwb3J0cyA9ICJ7XCJ2
ZXJzaW9uXCI6MyxcInNvdXJjCiAvKiA0MDUgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0
IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJp
Z2h0IChjKSAyMDA2LTIwMTcgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0
LykuKi8gXG4vKiFcbldlYiBCdWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVy
L2U0MjZhOWFlNzE2N2M1ODA3YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBD
b3JlXG5cbmRlc2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtW
YWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9y
czogVGhlIE1vb1Rvb2xzIHByb2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZl
bG9wZXJzLylcblxuaW5zcGlyYXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGly
ZWQgYnkgW0Jhc2UuanNdKGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9i
YXNlLykgQ29weXJpZ2h0IChjKSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGlj
ZW5zZS5waHApXG4gIC0gU29tZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUu
anNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBT
dGVwaGVuc29uLCBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9t
aXQtbGljZW5zZS5waHApXG5cbnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVP
ZiwgaW5zdGFuY2VPZiwgTmF0aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZh
c2NyaXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDog
Q29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHVi
LmNvbS9rYW1pY2FuZS8pLiovXG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0
dmVyc2lvbjogJzEuNi4wJyxcblx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2Yzdj
YTUxMTRlZTk1ZTJiJ1xufTtcblxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2Yg
PSB0aGlzLnR5cGVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1
cm4gJ251bGwnO1xuXHRpZiAoaXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1p
bHkoKTtcblxuXHRpZiAoaXRlbS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MSkgcmV0dXJuICdlbGVtZW50Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4g
KC9cXFMvKS50ZXN0KGl0ZW0ubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7
XG5cdH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAo
J2NhbGxlZScgaW4gaXRlbSkgcmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4g
aXRlbSkgcmV0dXJuICdjb2xsZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtc
bn07XG5cbnZhciBpbnN0YW5jZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwg
b2JqZWN0KXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3Ry
dWN0b3IgPSBpdGVtLiRjb25zdHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAo
Y29uc3RydWN0b3Ipe1xuXHRcdGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1
ZTtcblx0XHRjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElF
OD4qL1xuXHRpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0
SUU4PiovXG5cdHJldHVybiBpdGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093
blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+
Ki9cbnZhciBlbnVtZXJhYmxlcyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0p
IGVudW1lcmFibGVzID0gbnVsbDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hh
c093blByb3BlcnR5JywgJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51
bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xu
ZnVuY3Rpb24gZm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRpZiAoZW51bWVyYWJsZXMpIGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTsp
e1xuXHRcdHZhciBrID0gZW51bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXkt
dmFsdWUsIHNvIG92ZXJsb2FkU2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1l
dGhvZCBmdW5jdGlvbiwgd2l0aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093
blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xu
XHR9XG59XG4vKjwvbHRJRTg+Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1
bmN0aW9uID0gdGhpcy5GdW5jdGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0
dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4g
ZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYg
KHVzZVBsdXJhbCB8fCB0eXBlb2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGlu
IGEpIHNlbGYuY2FsbCh0aGlzLCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRm
b3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9h
ZEdldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0
dXJuIGZ1bmN0aW9uKGEpe1xuXHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBh
ICE9ICdzdHJpbmcnKSBhcmdzID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MSkgYXJncyA9IGFyZ3VtZW50cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07
XG5cdFx0aWYgKGFyZ3Mpe1xuXHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlz
LCBhcmdzW2ldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMs
IGEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJv
dG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1
ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9
IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59
Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlO1xuXG5BcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVt
ID09IG51bGwpIHJldHVybiBbXTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAm
JiB0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8g
aXRlbSA6IHNsaWNlLmNhbGwoaXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicp
ID8gaXRlbSA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51
bWJlci5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0
KGl0ZW0pO1xuXHRyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xu
XG5TdHJpbmcuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xu
fTtcblxuXG5cbkZ1bmN0aW9uLmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20g
PSBOdW1iZXIuY29udmVydDtcblN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhp
ZGUsIHByb3RlY3RcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuJGhpZGRlbiA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cHJvdGVjdDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBl
ID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9
IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5
cGVbJ2lzJyArIG5hbWVdID0gdHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5c
dFx0XHRvYmplY3QucHJvdG90eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0
dXJuIGxvd2VyO1xuXHRcdFx0fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYg
KG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xu
XHRvYmplY3QuJGNvbnN0cnVjdG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3Ry
dWN0b3IgPSBvYmplY3Q7XG5cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9
IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rp
b24oaXRlbSl7XG5cdHJldHVybiAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9
PSAnbnVtYmVyJyAmJiB0b1N0cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScg
KTtcbn07XG5cbnZhciBob29rcyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdHZhciB0eXBlID0gdHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9v
a3NbdHlwZV0gfHwgKGhvb2tzW3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJl
dHVybjtcblxuXHR2YXIgaG9va3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAw
OyBpIDwgaG9va3MubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0
aWYgKHR5cGVPZihob29rKSA9PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1l
dGhvZCk7XG5cdFx0ZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5c
dHZhciBwcmV2aW91cyA9IHRoaXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0g
bnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRo
b2Q7XG5cblx0aWYgKHRoaXNbbmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVu
Y3Rpb24nKSBleHRlbmQuY2FsbCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1
cm4gbWV0aG9kLmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xu
fTtcblxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2Qg
JiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtc
blx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFt
ZV0gPSBtZXRob2Q7XG59O1xuXG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBs
ZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRl
cigpLFxuXG5cdGFsaWFzOiBmdW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50
LmNhbGwodGhpcywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9h
ZFNldHRlcigpLFxuXG5cdG1pcnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlz
KS5wdXNoKGhvb2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgn
VHlwZScsIFR5cGUpO1xuXG4vLyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9u
KG5hbWUsIG9iamVjdCwgbWV0aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVj
dCksXG5cdFx0cHJvdG90eXBlID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBv
YmplY3QgPSBuZXcgVHlwZShuYW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0g
bWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxu
XHRcdFx0Z2VuZXJpYyA9IG9iamVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5
XTtcblxuXHRcdGlmIChnZW5lcmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBl
ICYmIHByb3RvKSBvYmplY3QuaW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxu
XG5cdGlmIChpc1R5cGUpe1xuXHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5w
cm9wZXJ0eUlzRW51bWVyYWJsZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhv
ZCA9IGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFy
IGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxs
KHByb3RvdHlwZSwgcHJvdG90eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1c
blx0XHRcdGZvciAodmFyIGtleSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90
b3R5cGVba2V5XSwga2V5KTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxu
Zm9yY2UoJ1N0cmluZycsIFN0cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29u
Y2F0JywgJ2NvbnRhaW5zJywgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVv
dGUnLCAncmVwbGFjZScsICdzZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywg
J3N1YnN0cmluZycsICd0cmltJywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0Fy
cmF5JywgQXJyYXksIFtcblx0J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdp
bmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21h
cCcsICdzb21lJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1i
ZXInLCBOdW1iZXIsIFtcblx0J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0
cmluZycsICd0b1ByZWNpc2lvbidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBs
eScsICdjYWxsJywgJ2JpbmQnXG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rl
c3QnXG5dKSgnT2JqZWN0JywgT2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHkn
LCAnZGVmaW5lUHJvcGVydGllcycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93
blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRF
eHRlbnNpb25zJywgJ2lzRXh0ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScs
ICdpc0Zyb3plbidcbl0pKCdEYXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQg
PSBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9u
KCl7XG5cdHJldHVybiArKG5ldyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJv
b2xlYW4pO1xuXG4vLyBmaXhlcyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJv
dG90eXBlLiRmYW1pbHkgPSBmdW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAn
bnVtYmVyJyA6ICdudWxsJztcbn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJl
ci5leHRlbmQoJ3JhbmRvbScsIGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxv
b3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9y
RWFjaCwgZWFjaCwga2V5c1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0
Zm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5k
LCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFj
aDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRr
ZXlzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIg
ayBpbiBvYmplY3Qpe1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkg
a2V5cy5wdXNoKGspO1xuXHRcdH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RF
bnVtYmVyYWJsZUtleShvYmplY3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xu
XHRcdH0pO1xuXHRcdC8qPC9sdElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZv
ckVhY2g6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVj
dCkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5
XSwga2V5LCBvYmplY3QpO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9i
amVjdC5mb3JFYWNoO1xuXG5cbi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJn
aW5nIGFuZCBhcHBlbmRpbmdcblxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dp
dGNoICh0eXBlT2YoaXRlbSkpe1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUo
KTtcblx0XHRjYXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRl
ZmF1bHQ6IHJldHVybiBpdGVtO1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywg
ZnVuY3Rpb24oKXtcblx0dmFyIGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7
XG5cdHdoaWxlIChpLS0pIGNsb25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNs
b25lO1xufSk7XG5cbnZhciBtZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50
KXtcblx0c3dpdGNoICh0eXBlT2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0
XHRpZiAodHlwZU9mKHNvdXJjZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJj
ZVtrZXldLCBjdXJyZW50KTtcblx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUo
Y3VycmVudCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0g
Y3VycmVudC5jbG9uZSgpOyBicmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJl
bnQ7XG5cdH1cblx0cmV0dXJuIHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1l
cmdlOiBmdW5jdGlvbihzb3VyY2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmlu
ZycpIHJldHVybiBtZXJnZU9uZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJn
dW1lbnRzW2ldO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNl
LCBrZXksIG9iamVjdFtrZXldKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxu
XHRjbG9uZTogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3Ig
KHZhciBrZXkgaW4gb2JqZWN0KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5c
dFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xu
XHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgZXh0ZW5kZWQgPSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gZXh0ZW5kZWQpIG9yaWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0
XHRyZXR1cm4gb3JpZ2luYWw7XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5c
blsnT2JqZWN0JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1
bWVudHMnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4v
LyBVbmlxdWUgSURcblxudmFyIFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3Vu
aXF1ZUlEJywgZnVuY3Rpb24oKXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7
XG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBBcnJheSBQcm90b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJv
dmlkZXM6IEFycmF5XG5cbi4uLlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1
PiovXG5cdGV2ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgIWZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0
aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1
ZSA9IHRoaXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJl
c3VsdHMucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5c
dGluZGV4T2Y6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aCA+Pj4gMDtcblx0XHRmb3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxl
bmd0aCArIGZyb20pIDogZnJvbSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5c
blx0bWFwOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3Ro
ID4+PiAwLCByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxs
KGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0
fSxcblxuXHRzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1
cm4gaXRlbSAhPSBudWxsO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0
aG9kTmFtZSl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRc
dHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhv
ZE5hbWVdLmFwcGx5KGl0ZW0sIGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTog
ZnVuY3Rpb24oa2V5cyl7XG5cdFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlz
Lmxlbmd0aCwga2V5cy5sZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIG9ialtrZXlzW2ldXSA9IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRs
aW5rOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtl
eSBpbiBvYmplY3Qpe1xuXHRcdFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0
XHRcdHJlc3VsdFtrZXldID0gdGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07
XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHJlc3VsdDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0
cmV0dXJuIHRoaXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLmxlbmd0aCkgPyB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5c
dGdldFJhbmRvbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNb
TnVtYmVyLnJhbmRvbSgwLCB0aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5j
bHVkZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlz
LnB1c2goaXRlbSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsg
aSsrKSB0aGlzLmluY2x1ZGUoYXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGVyYXNlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGkt
LTspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0
aGlzLmxlbmd0aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgYXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0p
O1xuXHRcdFx0aWYgKHR5cGUgPT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJy
YXkuY29uY2F0KCh0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlw
ZSA9PSAnYXJndW1lbnRzJyB8fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5m
bGF0dGVuKHRoaXNbaV0pIDogdGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0
fSxcblxuXHRwaWNrOiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRo
aXNbaV07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5j
dGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRc
dHZhciByZ2IgPSB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVu
Z3RoID09IDEpIHZhbHVlICs9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAx
Nik7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAn
KSc7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggPCAzKSByZXR1cm4gbnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlz
WzNdID09IDAgJiYgIWFycmF5KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0g
W107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0
aGlzW2ldIC0gMCkudG9TdHJpbmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0g
MSkgPyAnMCcgKyBiaXQgOiBiaXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6
ICcjJyArIGhleC5qb2luKCcnKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTog
RnVuY3Rpb25cblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlr
ZSBjcmVhdGUsIGJpbmQsIHBhc3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiov
XG5cbkZ1bmN0aW9uLmV4dGVuZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5
IHtcblx0XHRcdFx0cmV0dXJuIGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50
KHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0
cmV0dXJuIHRoaXMuYXBwbHkoYmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRj
aCAoZSl7fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5c
dGJpbmQ6IGZ1bmN0aW9uKHRoYXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3Mg
PSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxs
LFxuXHRcdFx0RiA9IGZ1bmN0aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7
XG5cdFx0XHR2YXIgY29udGV4dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5c
dFx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBz
ZWxmLnByb3RvdHlwZTtcblx0XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0
dmFyIHJlc3VsdCA9ICghYXJncyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250
ZXh0KVxuXHRcdFx0XHQ6IHNlbGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdz
LmNvbmNhdChBcnJheS5zbGljZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0
XHRcdHJldHVybiBjb250ZXh0ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5c
dFx0cmV0dXJuIGJvdW5kO1xuXHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVu
Y3Rpb24oYXJncywgYmluZCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9
IG51bGwpIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigp
e1xuXHRcdFx0cmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRc
dH07XG5cdH0sXG5cblx0ZGVsYXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRy
ZXR1cm4gc2V0VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJp
bmQpLCBkZWxheSk7XG5cdH0sXG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwg
YmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBu
dWxsID8gW10gOiBhcmdzKSwgYmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBOdW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQ
cm90b3R5cGVzIGxpa2UgbGltaXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVy
XG5cbi4uLlxuKi9cblxuTnVtYmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1p
biwgbWF4KXtcblx0XHRyZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtc
blx0fSxcblxuXHRyb3VuZDogZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBN
YXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVj
aXNpb24gOiAwKTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHBy
ZWNpc2lvbjtcblx0fSxcblxuXHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpczsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxu
XG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5c
dH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlz
LCBiYXNlIHx8IDEwKTtcblx0fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVz
Jyk7XG5cbihmdW5jdGlvbihtYXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNo
KGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNh
dChBcnJheS5jb252ZXJ0KGFyZ3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVt
ZW50KG1ldGhvZHMpO1xuXG59KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFu
MicsICdjZWlsJywgJ2NvcycsICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAn
cG93JywgJ3NpbicsICdzcXJ0JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNl
LCBjYXBpdGFsaXplLCB0ZXN0LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4u
LlxuKi9cblxuU3RyaW5nLmltcGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1
bmN0aW9uKHN0cmluZywgaW5kZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcyku
c2xpY2UoaW5kZXgpIDogU3RyaW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxc
blx0Ly88LyFFUzY+XG5cblx0dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0
dXJuICgodHlwZU9mKHJlZ2V4KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycg
KyByZWdleCwgcGFyYW1zKSkudGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xu
XHR9LFxuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVw
bGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1h
dGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9
KTtcblx0fSxcblxuXHRoeXBoZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0
aGlzKS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCct
JyArIG1hdGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRj
YXBpdGFsaXplOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgv
XFxiW2Etel0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJD
YXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0p
L2csICdcXFxcJDEnKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0
dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8o
XFx3ezEsMn0pKFxcd3sxLDJ9KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4
LnNsaWNlKDEpLmhleFRvUmdiKGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1
bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwz
fS9nKTtcblx0XHRyZXR1cm4gKHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0
fSxcblxuXHRzdWJzdGl0dXRlOiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyks
IGZ1bmN0aW9uKG1hdGNoLCBuYW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xc
XFwnKSByZXR1cm4gbWF0Y2guc2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAh
PSBudWxsKSA/IG9iamVjdFtuYW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBCcm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmpl
Y3QuIENvbnRhaW5zIEJyb3dzZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQs
IGFuZCB0aGUgQnJvd3NlciBIYXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFtBcnJheSwgRnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczog
W0Jyb3dzZXIsIFdpbmRvdywgRG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2lu
ZG93ID0gdGhpcztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEg
PSB1YS50b0xvd2VyQ2FzZSgpO1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRv
TG93ZXJDYXNlKCkgOiAnJyk7XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdl
IFVBLCBzbyBuZWVkIHRvIGNoZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tp
bmcgaWYgaXQncyBjaHJvbWUuXG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0o
W1xcd1xcZFxcLl0rKS8pO1xuXHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8
aWV8ZmlyZWZveHxjaHJvbWV8dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxk
XFwuXSspPy4qPyhzYWZhcml8KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xc
ZFxcLl0rKXwkKS8pIHx8IFtudWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFd
ID09ICd0cmlkZW50Jyl7XG5cdFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0g
PSBVQVs0XTtcblx0fSBlbHNlIGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdj
aHJvbWUnO1xuXHR9XG5cblx0cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8p
ID8gJ2lvcycgOiAodWEubWF0Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21h
Y3x3aW58bGludXgvKSB8fCBbJ290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicp
IHBsYXRmb3JtID0gJ3dpbmRvd3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlv
bi5wcm90b3R5cGUuZXh0ZW5kLFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFb
M10gOiBVQVsxXSxcblx0XHR2ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYm
IFVBWzRdKSA/IFVBWzRdIDogVUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xu
fTtcblxudmFyIEJyb3dzZXIgPSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFn
ZW50LCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYg
ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9j
dW1lbnRNb2RlO1xufVxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBh
dGg6ICEhKGRvY3VtZW50LmV2YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxc
blx0XHRxdWVyeTogISEoZG9jdW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2lu
ZG93LkpTT04pXG5cdH0sXG5cdHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3Rc
blxuQnJvd3Nlci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwyID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1M
Mi5YTUxIVFRQJyk7XG5cdH07XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0
dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0
dXJuIFhNTEhUVFA7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJu
IE1TWE1MMjtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hN
TDtcblx0fSk7XG5cbn0pKCk7XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5S
ZXF1ZXN0KTtcblxuXG5cbi8vIFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0
aW9uKHRleHQpe1xuXHRpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNT
Y3JpcHQpe1xuXHRcdHdpbmRvdy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZh
ciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQu
c2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0
ID0gdGV4dDtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9j
dW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtc
blxuU3RyaW5nLmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZh
ciBzY3JpcHRzID0gJyc7XG5cdHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+
KFtcXHNcXFNdKj8pPFxcL3NjcmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2Ny
aXB0cyArPSBjb2RlICsgJ1xcbic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMg
PT09IHRydWUpIEJyb3dzZXIuZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMp
ID09ICdmdW5jdGlvbicpIGV4ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7
XG5cbi8vIFdpbmRvdywgRG9jdW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDog
dGhpcy5Eb2N1bWVudCxcblx0V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5F
bGVtZW50LFxuXHRFdmVudDogdGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4k
Y29uc3RydWN0b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4k
ZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWly
cm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0p
O1xuXG50aGlzLkRvY3VtZW50ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0Rv
Y3VtZW50JywgZnVuY3Rpb24oKXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNv
bnZlcnQoJ2RvY3VtZW50JykuaGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFt
ZSwgbWV0aG9kKXtcblx0ZG9jdW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQu
aHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9j
dW1lbnQuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5c
bmlmIChkb2N1bWVudC5leGVjQ29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J0JhY2tncm91bmRJbWFnZUNhY2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4v
KjxsdElFOT4qL1xuaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5l
cil7XG5cdHZhciB1bmxvYWRFdmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVu
dCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50
Lmh0bWwgPSBkb2N1bWVudC53aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93
ID0gZG9jdW1lbnQgPSBudWxsO1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcs
IHVubG9hZEV2ZW50KTtcbn1cblxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxl
Y3Q+Lm9wdGlvbnMgKHJlZmVycyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5j
b252ZXJ0O1xudHJ5IHtcblx0YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59
IGNhdGNoIChlKXtcblx0QXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0
eXBlb2YgaXRlbSAhPSAnc3RyaW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBl
T2YoaXRlbSkgIT0gJ2FycmF5Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9
IG5ldyBBcnJheShpKTtcblx0XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0
XHRcdHJldHVybiBhcnJheTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0
fTtcblxuXHR2YXIgcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJv
dG90eXBlLnNsaWNlO1xuXHRbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2go
ZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRB
cnJheVtuYW1lXSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShB
cnJheS5jb252ZXJ0KGl0ZW0pLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5c
dH0pO1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENs
YXNzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2ls
eSBjcmVhdGluZywgZXh0ZW5kaW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJp
bmcsIEZ1bmN0aW9uLCBOdW1iZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG52YXIgQ2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywg
ZnVuY3Rpb24ocGFyYW1zKXtcblx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBh
cmFtcyA9IHtpbml0aWFsaXplOiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9u
KCl7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBu
dWxsO1xuXHRcdHZhciB2YWx1ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXpl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMu
Y2FsbGVyID0gbnVsbDtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxl
bWVudChwYXJhbXMpO1xuXG5cdG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3Rv
dHlwZS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBw
YXJlbnQgPSBmdW5jdGlvbigpe1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9y
KCdUaGUgbWV0aG9kIFwicGFyZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUg
PSB0aGlzLiRjYWxsZXIuJG5hbWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5w
YXJlbnQsXG5cdFx0cHJldmlvdXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0g
OiBudWxsO1xuXHRpZiAoIXByZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCIn
ICsgbmFtZSArICdcIiBoYXMgbm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xu
XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0
XHR2YXIgRiA9IGZ1bmN0aW9uKCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0
XHRcdFx0b2JqZWN0W2tleV0gPSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0
Y2FzZSAnYXJyYXknOiBvYmplY3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1c
blx0fVxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBr
ZXksIG1ldGhvZCl7XG5cdGlmIChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmln
aW47XG5cdHZhciB3cmFwcGVyID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0
ZWQgJiYgdGhpcy4kY2FsbGVyID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBc
IicgKyBrZXkgKyAnXCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhp
cy5jYWxsZXIsIGN1cnJlbnQgPSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJy
ZW50OyB0aGlzLiRjYWxsZXIgPSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNh
bGxlciA9IGNhbGxlcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBz
ZWxmLCAkb3JpZ2luOiBtZXRob2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59
O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYg
KENsYXNzLk11dGF0b3JzLmhhc093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3Mu
TXV0YXRvcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkg
cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtc
blx0XHRpZiAodmFsdWUuJGhpZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVb
a2V5XSA9IChyZXRhaW4pID8gdmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVs
c2Uge1xuXHRcdE9iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1c
blxuXHRyZXR1cm4gdGhpcztcbn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNz
KXtcblx0a2xhc3MuJHByb3RvdHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNz
O1xuXHRkZWxldGUga2xhc3MuJHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5D
bGFzcy5pbXBsZW1lbnQoJ2ltcGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtc
blxuQ2xhc3MuTXV0YXRvcnMgPSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0
XHR0aGlzLnBhcmVudCA9IHBhcmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNl
KHBhcmVudCk7XG5cdH0sXG5cblx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFy
cmF5LmNvbnZlcnQoaXRlbXMpLmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFu
Y2UgPSBuZXcgaXRlbTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50
LmNhbGwodGhpcywga2V5LCBpbnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0
fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIFV0aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBp
bnRvIHlvdXIgb3duIENsYXNzZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9u
IHRhc2tzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4u
Li5cbiovXG5cbihmdW5jdGlvbigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQk
Y2hhaW46IFtdLFxuXG5cdGNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVu
ZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNhbGxDaGFpbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkg
PyB0aGlzLiRjaGFpbi5zaGlmdCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0
fSxcblxuXHRjbGVhckNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9u
KHN0cmluZyl7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9u
KGZ1bGwsIGZpcnN0KXtcblx0XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59
O1xuXG50aGlzLkV2ZW50cyA9IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRk
RXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9u
KHR5cGUpO1xuXG5cdFx0XG5cblx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRz
W3R5cGVdIHx8IFtdKS5pbmNsdWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFs
ID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9u
KGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlw
ZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6
IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7
XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykg
cmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRz
LmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhp
cywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlz
LiRldmVudHNbdHlwZV07XG5cdFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0
dmFyIGluZGV4ID0gZXZlbnRzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBk
ZWxldGUgZXZlbnRzW2luZGV4XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0
eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0
aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztc
blx0XHR9XG5cdFx0aWYgKGV2ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRm
b3IgKHR5cGUgaW4gdGhpcy4kZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9
IHR5cGUpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0
XHRcdGZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0
XHR0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5c
dHNldE9wdGlvbnM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMg
PSBPYmplY3QubWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1
bWVudHMpKTtcblx0XHRpZiAodGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlv
bnMpe1xuXHRcdFx0aWYgKHR5cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwg
ISgvXm9uW0EtWl0vKS50ZXN0KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVu
dChvcHRpb24sIG9wdGlvbnNbb3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25d
O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0t
LVxuXG5uYW1lOiBDbGFzcy5UaGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGls
aXR5IENsYXNzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0
byBtYWtlIHRoZW0gXCJ0aGVuYWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVM
RklMTEVEID0gMSxcblx0U1RBVEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFz
cy5UaGVuYWJsZSA9IG5ldyBDbGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJ
TkcsXG5cdCR0aGVuYWJsZVJlc3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxc
blxuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xu
XHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dFRoZW5hYmxlU3RhdGU6IGZ1bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0
YXRlKXtcblx0XHRcdGNhc2UgU1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5n
JztcblxuXHRcdFx0Y2FzZSBTVEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmls
bGVkJztcblxuXHRcdFx0Y2FzZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWpl
Y3RlZCc7XG5cdFx0fVxuXHR9LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7
XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQp
e1xuXHRcdGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVk
ID0gJ0lkZW50aXR5Jztcblx0XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicp
IG9uUmVqZWN0ZWQgPSAnVGhyb3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFi
bGUoKTtcblxuXHRcdHRoaXMuJHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFi
bGU6IHRoZW5hYmxlLFxuXHRcdFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0
cmVqZWN0SGFuZGxlcjogb25SZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5h
YmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxu
XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVq
ZWN0ZWQpe1xuXHRcdHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxu
fSk7XG5cblRoZW5hYmxlLmV4dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHR2YXIgdGhlbmFibGU7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRc
dFx0dGhlbmFibGUgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcg
VGhlbmFibGUoKTtcblx0XHRcdHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFz
b24pO1xuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rp
b25zXG5cbmZ1bmN0aW9uIHJlc29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09
IHZhbHVlKXtcblx0XHRcdHJlamVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8g
cmVzb2x2ZSBhIHRoZW5hYmxlIHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVl
ICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0
aW9uJykpe1xuXHRcdFx0dmFyIHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFs
dWUudGhlbjtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVu
YWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0XHRcdHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihm
dW5jdGlvbigpe1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0
XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRc
dFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQg
PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtc
blx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0
aW9uKHJlYXNvbil7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0
XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFi
bGUsIHJlYXNvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRc
dFx0XHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAo
IXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0
XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUs
IHZhbHVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwg
dmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1
ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPSBTVEFURV9GVUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1c
bn1cblxuZnVuY3Rpb24gcmVqZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IHJlYXNvbjtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JF
SkVDVEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0
KHRoZW5hYmxlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5E
SU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFj
dCh0aGVuYWJsZSl7XG5cdHZhciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRc
dHJlc3VsdCA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVu
YWJsZS4kdGhlbmFibGVSZWFjdGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNU
QVRFX0ZVTEZJTExFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5c
dFx0dHlwZSA9ICdmdWxmaWxsSGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVf
UkVKRUNURUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5
cGUgPSAncmVqZWN0SGFuZGxlcic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFu
ZGxlLnBhc3MoW3Jlc3VsdCwgcmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9u
IGhhbmRsZShyZXN1bHQsIHJlYWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0g
cmVhY3Rpb25zLmxlbmd0aDsgaSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rp
b25zW2ldLFxuXHRcdFx0aGFuZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRs
ZXIgPT09ICdJZGVudGl0eScpe1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVz
dWx0KTtcblx0XHR9IGVsc2UgaWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWpl
Y3QocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5c
dFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlm
ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRp
Y2sgPT09ICdmdW5jdGlvbicpe1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2Ug
aWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJ
bW1lZGlhdGU7XG59IGVsc2Uge1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1l
b3V0KGZuLCAwKTtcblx0fTtcbn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3Rc
blxuZGVzY3JpcHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNo
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJz
ZXQ6IGZ1bmN0aW9uKG9iamVjdCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBr
ID0ga2V5c1tpXTtcblx0XHRcdGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtr
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihv
YmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0g
T2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBm
bi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biByZXN1bHRzO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVj
dCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZh
ciBrZXkgPSBrZXlzW2ldLCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwo
YmluZCwgdmFsdWUsIGtleSwgb2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZu
LCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2
YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ld
O1xuXHRcdFx0aWYgKCFmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9
IGtleXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0
dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2td
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0
aW9uKG9iamVjdCl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9
LFxuXG5cdGtleU9mOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9i
amVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsg
aSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09
PSB2YWx1ZSkgcmV0dXJuIGtleTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0
Y29udGFpbnM6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5
T2Yob2JqZWN0LCB2YWx1ZSkgIT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5j
dGlvbihvYmplY3QsIGJhc2Upe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2Jq
ZWN0LmVhY2gob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBr
ZXkgPSBiYXNlICsgJ1snICsga2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3
aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJy
YXknOlxuXHRcdFx0XHRcdHZhciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rp
b24odmFsLCBpKXtcblx0XHRcdFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRc
dFx0XHRcdHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklD
b21wb25lbnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5
U3RyaW5nLnB1c2gocmVzdWx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5q
b2luKCcmJyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5QYXJzZXJcbmRlc2NyaXB0aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5w
cm92aWRlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBh
cnNlZCxcblx0c2VwYXJhdG9ySW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQs
XG5cdGNhY2hlID0ge30sXG5cdHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xc
XFwvZztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5c
dGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5T
bGljayA9PT0gdHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBl
eHByZXNzaW9uKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFp
c1JldmVyc2VkO1xuXHR2YXIgY3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNo
ZSA6IGNhY2hlO1xuXHRpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVu
dENhY2hlW2V4cHJlc3Npb25dO1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0
ZXhwcmVzc2lvbnM6IFtdLFxuXHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5j
dGlvbigpe1xuXHRcdFx0cmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07
XG5cdHNlcGFyYXRvckluZGV4ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNz
aW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVu
Z3RoID0gcGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtw
YXJzZWQucmF3XSA9IChyZXZlcnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xu
XG52YXIgcmV2ZXJzZUNvbWJpbmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNv
bWJpbmF0b3IgPT09ICchJykgcmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0g
JyAnKSByZXR1cm4gJyEnO1xuXHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0
dXJuIGNvbWJpbmF0b3IucmVwbGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNv
bWJpbmF0b3I7XG59O1xuXG52YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2
YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0g
MDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lv
bnNbaV07XG5cdFx0dmFyIGxhc3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjog
cmV2ZXJzZUNvbWJpbmF0b3IoZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGog
PSAwOyBqIDwgZXhwLmxlbmd0aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRc
dFx0aWYgKCFjZXhwLnJldmVyc2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0g
JyAnO1xuXHRcdFx0Y2V4cC5jb21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0
XHRcdGRlbGV0ZSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZl
cnNlKCkucHVzaChsYXN0KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBl
c2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAo
YykgMjAwNy0yMDA4IFN0ZXZlbiBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9y
ZWdleC94cmVnZXhwLz4gTUlUIExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtc
XF17fSgpKis/LlxcXFxeJHwsI1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAn
XFxcXCcgKyBtYXRjaDtcblx0fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8q
XG4jIS91c3IvYmluL2VudiBydWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1Yigv
XFwoXFw/eFxcKXxcXHMrIy4qJHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIo
P3gpXig/OlxcXG5cdCAgXFxcXHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJh
dG9yICAgICAgICAgIFxcblxcXG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAg
ICMgQ29tYmluYXRvciAgICAgICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAg
ICAgICAgICAjIENvbWJpbmF0b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4r
IHwgXFxcXCogKSAgICAgIyBUYWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8
dW5pY29kZT4rICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxc
XC4gICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxu
XHR8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxc
blxcXG5cdFxcXFxbICBcXFxuXHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0
XHRcXFxccyogKFsqXiQhfnxdPz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRc
dFx0XHRcdChbXFxcIiddPykoLio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxc
blx0XHQpPyAgXFxcXHMqICBcXFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8
dW5pY29kZT4rICkoPzpcXFxuXHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwx
Ml0qKVxcXFwxMil8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxc
blx0KT9cXFxuXHQpXCJcbiovXG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJp
bmF0b3I+KylcXFxccyp8KFxcXFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2Rl
PispfFxcXFwuKDx1bmljb2RlPispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihb
Kl4kIX58XT89KSg/OlxcXFxzKig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxd
KD8hXFxcXF0pfCg6KykoPHVuaWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwx
M10qKVxcXFwxMyl8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQu
cmVwbGFjZSgvPGNvbWJpbmF0b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9
XFxcXDs8LycpICsgJ10nKVxuXHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxc
dTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgv
PHVuaWNvZGUxPi9nLCAnKD86WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG4pO1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5c
dHNlcGFyYXRvcixcblx0Y29tYmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRh
Z05hbWUsXG5cdGlkLFxuXHRjbGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1
dGVPcGVyYXRvcixcblx0YXR0cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBz
ZXVkb01hcmtlcixcblx0cHNldWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFz
c1F1b3RlZFZhbHVlLFxuXHRwc2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8
IHNlcGFyYXRvckluZGV4ID09PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJh
dG9ySW5kZXhdID0gW107XG5cdFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFy
YXRvcikgcmV0dXJuICcnO1xuXHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNo
aWxkcmVuIHx8IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21i
aW5hdG9yIHx8ICcgJztcblx0XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNz
aW9uc1tzZXBhcmF0b3JJbmRleF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0
b3JbY29tYmluYXRvckluZGV4XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvcklu
ZGV4XS5yZXZlcnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xu
XHRcdGN1cnJlbnRTZXBhcmF0b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNv
bWJpbmF0b3IsIHRhZzogJyonfTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2Vk
LmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0
YWdOYW1lKXtcblx0XHRjdXJyZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNj
YXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlk
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0
XHRjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRp
ZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtd
O1xuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0
Y3VycmVudFBhcnNlZC5jbGFzc2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0
XHRcdHJlZ2V4cDogbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05h
bWUpICsgJyhcXFxcc3wkKScpXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7
XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NR
dW90ZWRWYWx1ZTtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBz
ZXVkb0NsYXNzVmFsdWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYg
KCFjdXJyZW50UGFyc2VkLnBzZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRc
dGN1cnJlbnRQYXJzZWQucHNldWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVw
bGFjZShyZVVuZXNjYXBlLCAnJyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0
XHRcdHR5cGU6IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdc
blx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5
ID0gYXR0cmlidXRlS2V5LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZh
bHVlID0gKGF0dHJpYnV0ZVZhbHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxu
XHRcdHZhciB0ZXN0LCByZWdleHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtc
blx0XHRcdGNhc2UgJ149JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBl
UmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAn
JD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmli
dXRlVmFsdWUpICsnJCcgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAg
PSBuZXcgUmVnRXhwKCAnKF58XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAr
JyhcXFxcc3wkKScgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVn
RXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICAp
OyBicmVhaztcblx0XHRcdGNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnKj0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZh
bHVlICYmIHZhbHVlLmluZGV4T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVh
aztcblx0XHRcdGNhc2UgJyE9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJl
dHVybiBhdHRyaWJ1dGVWYWx1ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVm
YXVsdCAgIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7
XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15b
KiReXT0kLykudGVzdChhdHRyaWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRc
dFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRc
dH07XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5h
dHRyaWJ1dGVzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRc
dFx0a2V5OiBhdHRyaWJ1dGVLZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3Is
XG5cdFx0XHR2YWx1ZTogYXR0cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7
XG5cblx0fVxuXG5cdHJldHVybiAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9
ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0cmV0dXJuIHBhcnNlKGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhw
ID0gZXNjYXBlUmVnRXhwO1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztc
blxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcp
ID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5GaW5kZXJcbmRlc2NyaXB0aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVu
Z2luZS5cbnByb3ZpZGVzOiBTbGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4u
LlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNo
ZSA9IHt9LFxuXHR0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZl
YXR1cmUgLyBCdWcgZGV0ZWN0aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZu
KXtcblx0cmV0dXJuICgvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycg
KyBmbik7XG59O1xuXG5sb2NhbC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJu
ICghIWRvY3VtZW50LnhtbFZlcnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5n
LmNhbGwoZG9jdW1lbnQpID09ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVu
dC5ub2RlVHlwZSA9PSA5ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAn
SFRNTCcpO1xufTtcblxubG9jYWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5c
blx0Ly8gY29udmVydCBlbGVtZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlm
IGRvY3VtZW50IGNhbm5vdCBiZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxu
XHR2YXIgbm9kZVR5cGUgPSBkb2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkp
OyAvLyBkb2N1bWVudFxuXHRlbHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5v
d25lckRvY3VtZW50OyAvLyBub2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9j
dW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5c
dC8vIGNoZWNrIGlmIGl0J3MgdGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50
ID09PSBkb2N1bWVudCkgcmV0dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0
Ly8gY2hlY2sgaWYgd2UgaGF2ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1l
bnQgYmVmb3JlXG5cblx0dmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0
cm9vdFVpZCA9IHRoaXMuZ2V0VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXND
YWNoZVtyb290VWlkXSxcblx0XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9y
IChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tm
ZWF0dXJlXTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJl
c0NhY2hlW3Jvb3RVaWRdID0ge307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1
cmVzLmlzWE1MRG9jdW1lbnQgPSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5i
cm9rZW5TdGFyR0VCVE5cblx0PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZl
YXR1cmVzLmlkR2V0c05hbWVcblx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5HRUJDTlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3Vt
ZW50XG5cdD0gZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0
dmFyIHN0YXJTZWxlY3RzQ2xvc2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNl
Y29uZENsYXNzTmFtZUdFQkNOLCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJy
b2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191
bmlxdWVpZCc7XG5cdHZhciB0ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
O1xuXG5cdHZhciB0ZXN0Um9vdCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2JvZHknKVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0
ZXN0Tm9kZSk7XG5cblx0Ly8gb24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0
RWxlbWVudHNCeUlkIGRvZXNudCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJzxhIGlkPVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1M
RG9jdW1lbnQgPSAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7
fVxuXG5cdGlmIChmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZv
ciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3RO
b2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2Vs
ZWN0c0NvbW1lbnRzID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3Ro
ID4gMSk7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikg
Zm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5
IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0
ZWQgPSB0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVj
dHNDbG9zZWQgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0u
bm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZl
YXR1cmVzLmJyb2tlblN0YXJHRUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVj
dHNDbG9zZWQ7XG5cblx0XHQvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5z
dGVhZCBvZiBqdXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5c
dFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydc
Ij48L2E+PGIgaWQ9XCInKyBpZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFt
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtc
blx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSl7XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNo
ZXMgcmVzdWx0c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxh
IGNsYXNzPVwiZlwiPjwvYT48YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmly
c3RDaGlsZC5jbGFzc05hbWUgPSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFz
c05hbWUgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAy
KTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50
c0J5Q2xhc3NOYW1lIGRvZXNudCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJz
dCBvbmVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFz
cz1cImFcIj48L2E+PGEgY2xhc3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNv
bmRDbGFzc05hbWVHRUJDTiA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJyku
bGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9r
ZW5HRUJDTiA9IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xh
c3NOYW1lR0VCQ047XG5cdFx0fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwp
e1xuXHRcdFx0Ly8gSUUgOCByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9y
IHF1ZXJ5U2VsZWN0b3JBbGwoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5c
dFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3Rl
ZCA9IHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3Rh
clNlbGVjdHNDbG9zZWRRU0EgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2Vs
ZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRo
IG1peGVkY2FzZSBvbiBxdWlya3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5p
bm5lckhUTUwgPSAnPGEgY2xhc3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuTWl4ZWRDYXNlUVNBID0gIXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5n
dGg7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9u
dCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkg
e1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVk
PVwic2VsZWN0ZWRcIj5hPC9vcHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuQ2hlY2tlZFFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxl
bmd0aCA9PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMg
aW5jb3JyZWN0IHJlc3VsdHMgZm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNl
bGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEg
Y2xhc3M9XCJcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVR
U0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAh
PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBh
IGZvcm0gaGFzIGFuIGlucHV0IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMg
YSByZWZlcmVuY2UgdG8gdGhlIGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8Zm9ybSBhY3Rpb249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4n
O1xuXHRcdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxk
LmdldEF0dHJpYnV0ZSgnYWN0aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0
XHQvLyBuYXRpdmUgbWF0Y2hlc1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRp
dmVNYXRjaGVzU2VsZWN0b3IgPSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVj
dG9yIHx8Ki8gcm9vdC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2Vs
ZWN0b3I7XG5cdFx0aWYgKGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0
XHRcdC8vIGlmIG1hdGNoZXNTZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRh
eGVzIHdlIGNhbiB1c2UgaXRcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5j
YWxsKHJvb3QsICc6c2xpY2snKTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ciA9IG51bGw7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Qu
c2xpY2tfZXhwYW5kbyA9IDE7XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRm
ZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZl
YXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3Zl
Q2hpbGQodGVzdE5vZGUpO1xuXHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxs
O1xuXG5cdC8vIGdldEF0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0
dXJlcy5pc0hUTUxEb2N1bWVudCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0
aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNb
bmFtZV07XG5cdFx0aWYgKG1ldGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZh
ciBhdHRyaWJ1dGVOb2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVy
biAoYXR0cmlidXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0g
OiBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVH
ZXR0ZXJzW25hbWVdO1xuXHRcdHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDog
bm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuaGFzQXR0cmlidXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5o
YXNBdHRyaWJ1dGUpKSA/IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5v
ZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1
dGUpe1xuXHRcdG5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRy
ZXR1cm4gISEobm9kZSAmJiAobm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0
fTtcblxuXHQvLyBjb250YWluc1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlu
cyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIg
bmF0aXZlUm9vdENvbnRhaW5zID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRh
aW5zKSxcblx0XHRuYXRpdmVEb2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05h
dGl2ZUNvZGUoZG9jdW1lbnQuY29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5h
dGl2ZVJvb3RDb250YWlucyAmJiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNv
bnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDog
KG5hdGl2ZVJvb3RDb250YWlucyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlv
bihjb250ZXh0LCBub2RlKXtcblx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24g
ZG9jdW1lbnQuXG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBk
b2N1bWVudCkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhu
b2RlKTtcblx0fSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVu
Y3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEo
Y29udGV4dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0
aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9
PT0gY29udGV4dCkgcmV0dXJuIHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVu
dE5vZGUpKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIg
c29ydGluZ1xuXHQvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5c
blx0ZmVhdHVyZXMuZG9jdW1lbnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24g
fHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9
IDogKCdzb3VyY2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEu
c291cmNlSW5kZXggfHwgIWIuc291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNv
dXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkg
PyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRv
Y3VtZW50KSByZXR1cm4gMDtcblx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0
ZVJhbmdlKCksIGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFS
YW5nZS5zZXRTdGFydChhLCAwKTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5n
ZS5zZXRTdGFydChiLCAwKTtcblx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBh
UmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtc
blx0fSA6IG51bGw7XG5cblx0cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5c
bi8vIE1haW4gTWV0aG9kXG5cbnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/Oltc
XHctXSt8XFwqKSkkLyxcblx0cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8
JycpP1xcXS8sXG5cdHFzYUZhaWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5j
dGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQg
PSB0aGlzLmZvdW5kID0gKGZpcnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAo
IWNvbnRleHQpIHJldHVybiBmb3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNv
bnRleHQgPSBjb250ZXh0LmRvY3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5k
b3cgdG8gYSBkb2N1bWVudFxuXHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZv
dW5kO1xuXG5cdC8vIHNldHVwXG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0
dW5pcXVlcyA9IHRoaXMudW5pcXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAm
JiBhcHBlbmQubGVuZ3RoKSxcblx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVU
eXBlID09IDkpO1xuXG5cdGlmICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQg
PyBjb250ZXh0IDogY29udGV4dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250
ZXh0KTtcblxuXHQvLyBhdm9pZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBl
bmQgYXJyYXlcblx0aWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1
bmlxdWVzW3RoaXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24g
Y2hlY2tzXG5cblx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVz
c2lvbiBpcyBhIHN0cmluZ1xuXG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xu
XHRcdHZhciBzaW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rv
cik7XG5cdFx0c2ltcGxlU2VsZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2
YXIgc3ltYm9sID0gc2ltcGxlU2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxl
Y3RvclsyXTtcblxuXHRcdFx0aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcq
JyAmJiB0aGlzLmJyb2tlblN0YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0
XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlm
IChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0
XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxE
b2N1bWVudCB8fCAhY29udGV4dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0
XHRcdFx0bm9kZSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICgh
bm9kZSkgcmV0dXJuIGZvdW5kO1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUu
Z2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2Vs
ZWN0b3JzO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRc
dGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1
c2gobm9kZSk7XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0
aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSB8fCB0aGlzLmJyb2tlbkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0
dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVz
W2krK107KXtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0
VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVs
c2Uge1xuXHRcdFx0XHRcdHZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysg
U2xpY2suZXNjYXBlUmVnRXhwKG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMg
PSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0g
MDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xh
c3NOYW1lO1xuXHRcdFx0XHRcdFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChj
bGFzc05hbWUpKSkgY29udGludWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rl
O1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IChmaXJzdCkgPyBudWxsIDogZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3Rv
cnMtb3ZlcnJpZGU+Ki9cblxuXHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0
cXVlcnlTZWxlY3RvcjogaWYgKGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlm
ICghdGhpcy5pc0hUTUxEb2N1bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVz
c2lvbl1cblx0XHRcdFx0Ly9UT0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVh
bGx5IG1peGVkIGNhc2Vcblx0XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuQ2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVj
a2VkJykgPiAtMSlcblx0XHRcdFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYg
cmVFbXB0eUF0dHJpYnV0ZS50ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJ
c0RvY3VtZW50IC8vQWJvcnQgd2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRc
dFx0Ly8gIHRoZXJlIGFyZSBtdWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0
XHRcdFx0XHQvLyAgc2luY2Ugd2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290
ZWQgUVNBIGZvciBzaW5nbGUgZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHBy
ZXNzaW9uLmluZGV4T2YoJywnKSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlz
YWJsZVFTQVxuXHRcdFx0KSBicmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJl
c3Npb24gPSBleHByZXNzaW9uLCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRc
dGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVk
IFFTQVxuXHRcdFx0XHQvLyBjcmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVu
dElkID0gX2NvbnRleHQuZ2V0QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7
XG5cdFx0XHRcdF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0
X2V4cHJlc3Npb24gPSAnIycgKyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRc
dGNvbnRleHQgPSBfY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Np
b24pIHx8IG51bGw7XG5cdFx0XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwoX2V4cHJlc3Npb24pO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBD
YWNoZVtleHByZXNzaW9uXSA9IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0
XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0
XHRpZiAoY3VycmVudElkKSBfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtc
blx0XHRcdFx0XHRlbHNlIF9jb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0
XHRjb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRo
aXMuc3RhclNlbGVjdHNDbG9zZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1
ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBm
b3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMg
JiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5c
dFx0cGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNl
ZC5sZW5ndGgpIHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwp
eyAvLyB0aGVyZSBpcyBubyBleHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2Ug
aWYgKGV4cHJlc3Npb24uU2xpY2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9i
amVjdFxuXHRcdHBhcnNlZCA9IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlu
cyhjb250ZXh0LmRvY3VtZW50RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4
cHJlc3Npb24gaXMgYSBub2RlXG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikg
OiBmb3VuZCA9IGV4cHJlc3Npb247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBv
dGhlciBqdW5rXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9y
IHRoZSBudGggc2VsZWN0b3JzXG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhM
YXN0ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0
ID0ge307XG5cblx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3Rv
cnM+Ki9cblxuXHQvLyBpZiBhcHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmds
ZSBzZWxlY3RvciB3aXRoIG9uZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1
c2hVSURcblx0dGhpcy5wdXNoID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVu
Z3RoID09IDEgJiYgcGFyc2VkLmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5w
dXNoQXJyYXkgOiB0aGlzLnB1c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0g
W107XG5cblx0Ly8gZGVmYXVsdCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJp
bmF0b3IsIHRhZywgaWQsIGNsYXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztc
blx0dmFyIGN1cnJlbnRJdGVtcywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RC
aXQsIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChp
ID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9
IDA7IChjdXJyZW50Qml0ID0gY3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29t
YmluYXRvciA9ICdjb21iaW5hdG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYg
KCF0aGlzW2NvbWJpbmF0b3JdKSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0g
KHRoaXMuaXNYTUxEb2N1bWVudCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRv
VXBwZXJDYXNlKCk7XG5cdFx0aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NM
aXN0ICA9IGN1cnJlbnRCaXQuY2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0
LmNsYXNzZXM7XG5cdFx0YXR0cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRw
c2V1ZG9zICAgID0gY3VycmVudEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0g
KGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9
IHt9O1xuXG5cdFx0aWYgKGxhc3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztc
blx0XHRcdHRoaXMuZm91bmQgPSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlx
dWVzID0ge307XG5cdFx0XHR0aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09
IDApe1xuXHRcdFx0dGhpc1tjb21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RC
aXQgJiYgZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlm
IChmaXJzdCAmJiBsYXN0Qml0KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKyl7XG5cdFx0XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0
XHRpZiAoZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0g
MCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0o
Y3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBj
bGFzc0xpc3QpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1c
blxuXHQvLyBzaG91bGQgc29ydCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5
b3UgcGFzcyBtdWx0aXBsZSBleHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2Vk
LmV4cHJlc3Npb25zLmxlbmd0aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAo
Zmlyc3QpID8gKGZvdW5kWzBdIHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5s
b2NhbC51aWR4ID0gMTtcbmxvY2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5n
ZXRVSURYTUwgPSBmdW5jdGlvbihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRl
KHRoaXMudWlkayk7XG5cdGlmICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRu
b2RlLnNldEF0dHJpYnV0ZSh0aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07
XG5cbmxvY2FsLmdldFVJREhUTUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5p
cXVlTnVtYmVyIHx8IChub2RlLnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8v
IHNvcnQgYmFzZWQgb24gdGhlIHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxu
bG9jYWwuc29ydCA9IGZ1bmN0aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0
ZXIpIHJldHVybiByZXN1bHRzO1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7
XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1w
c2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNo
TlRIID0gL14oWystXT9cXGQqKT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJz
ZU5USEFyZ3VtZW50ID0gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1l
bnQubWF0Y2godGhpcy5tYXRjaE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5c
dHZhciBzcGVjaWFsID0gcGFyc2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8
fCAxO1xuXHRpZiAoYSA9PSAnLScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7
XG5cdHBhcnNlZCA9XG5cdFx0KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRc
dChzcGVjaWFsID09ICdvZGQnKVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdl
dmVuJylcdD8ge2E6IDIsIGI6IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5j
YWNoZU5USFthcmd1bWVudF0gPSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRv
ID0gZnVuY3Rpb24oY2hpbGQsIHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJu
IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9k
ZSk7XG5cdFx0aWYgKCF0aGlzW3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRc
dHZhciBlbCA9IHBhcmVudFtjaGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xu
XHRcdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0
XHRcdFx0aWYgKGVsLm5vZGVOYW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0
aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hp
bGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5c
dFx0XHRcdFx0aWYgKGVsLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNb
cG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAo
KGVsID0gZWxbc2libGluZ10pKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1
bWVudCB8fCAnbic7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8
IHRoaXMucGFyc2VOVEhBcmd1bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVy
biBmYWxzZTtcblx0XHR2YXIgYSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNb
cG9zaXRpb25zXVt1aWRdO1xuXHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRp
ZiAoYSA+IDApe1xuXHRcdFx0aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Ug
e1xuXHRcdFx0aWYgKGIgPCBwb3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgo
cG9zIC0gYikgJSBhKSA9PSAwO1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3Jz
PiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlz
Lm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cykpIHRoaXMuZm91bmQucHVzaChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMu
bWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KSl7XG5cdFx0dGhpcy51bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChu
b2RlKTtcblx0fVxufTtcblxubG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0
b3Ipe1xuXHRpZiAodGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3Rvcil7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ci5jYWxsKG5vZGUsIHNlbGVjdG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0r
PylcXHMqXFxdL2csICdbJDE9XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9
XG5cdH1cblxuXHR2YXIgcGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlm
ICghcGFyc2VkKSByZXR1cm4gdHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3Jz
XG5cdHZhciBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRl
ciA9IDAsIGksIGN1cnJlbnRFeHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJl
c3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCA9PSAxKXtcblx0XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0
XHRcdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBl
eHAudGFnIDogZXhwLnRhZy50b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAu
YXR0cmlidXRlcywgZXhwLnBzZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENv
dW50ZXIrKztcblx0XHR9XG5cdH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQu
bGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5k
b2N1bWVudCwgcGFyc2VkKSwgaXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107
KXtcblx0XHRpZiAoaXRlbSA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZh
bHNlO1xufTtcblxubG9jYWwubWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1
bWVudCl7XG5cdHZhciBwc2V1ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNb
cHNldWRvTmFtZV0pIHJldHVybiB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0
dmFyIGF0dHJpYnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4g
KGFyZ3VtZW50KSA/IGFyZ3VtZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxu
bG9jYWwubWF0Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhp
cy5pc1hNTERvY3VtZW50KSA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJD
YXNlKCk7XG5cdFx0aWYgKHRhZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSBy
ZXR1cm4gZmFsc2U7IC8vIEZpeCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdH1cblxuXHRpZiAoaWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJl
dHVybiBmYWxzZTtcblxuXHR2YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChp
ID0gY2xhc3Nlcy5sZW5ndGg7IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsICdjbGFzcycpO1xuXHRcdGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNs
cykpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJp
YnV0ZXMubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAo
cGFydC5vcGVyYXRvciA/ICFwYXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5r
ZXkpKSA6ICF0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtc
blx0fVxuXHRpZiAocHNldWRvcykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRc
dHBhcnQgPSBwc2V1ZG9zW2ldO1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0
LmtleSwgcGFydC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07
XG5cbnZhciBjb21iaW5hdG9ycyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBu
b2RlcywgYW55IGxldmVsXG5cblx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAo
dGhpcy5pc0hUTUxEb2N1bWVudCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRp
dGVtID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0
ZW0gJiYgbm9kZS5hbGwpIHx8ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0
dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lk
XSByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5v
ZGVcblx0XHRcdFx0XHQvLyBpZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVs
ZW1lbnQsIGVsc2UgaXQgd2lsbCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9
IG5vZGUuYWxsW2lkXTtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRc
dFx0aWYgKCFjaGlsZHJlblswXSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZv
ciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2Rl
ID0gaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAm
JiBpZE5vZGUubm9kZVZhbHVlID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0s
IHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5c
dFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4
dCBpcyBpbiB0aGUgZG9tIHdlIHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtp
bmcgdGhlIGdldEJ5SWQgbGFiZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJv
b3QsIG5vZGUpKSByZXR1cm47XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0
XHR9IGVsc2UgaWYgKHRoaXMuZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9k
ZSwgaXRlbSkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0
XHRcdGdldEJ5Q2xhc3M6IGlmIChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKGNsYXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGls
ZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBu
dWxsLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRnZXRCeVRhZzoge1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKHRhZyk7XG5cdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBi
cmVhayBnZXRCeVRhZztcblx0XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51
bGw7XG5cdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChp
dGVtLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0Jz4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gZGlyZWN0IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENo
aWxkKSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChu
b2RlID0gbm9kZS5uZXh0U2libGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9
PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBj
aGlsZFxuXHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0J34nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNp
YmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0
dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1
aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHR9XG5cdH0sXG5cblx0JysrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJs
aW5ncyBhbmQgcHJldmlvdXMgc2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21i
aW5hdG9yOiF+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyEnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKXsgLy8gYWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50
KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyE+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5c
blx0JyErJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZp
b3VzU2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7
XG5cdFx0fVxuXHR9LFxuXG5cdCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFz
dENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2li
bGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5n
ZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRc
dFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xu
XG5mb3IgKHZhciBjIGluIGNvbWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBj
b21iaW5hdG9yc1tjXTtcblxudmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qL1xuXG5cdCdlbXB0eSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUu
Zmlyc3RDaGlsZDtcblx0XHRyZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAm
JiAhKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0
fSxcblxuXHQnbm90JzogZnVuY3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0
aGlzLm1hdGNoTm9kZShub2RlLCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBm
dW5jdGlvbihub2RlLCB0ZXh0KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUu
dGV4dENvbnRlbnQgfHwgJycpLmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3Qt
Y2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3Vz
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBm
dW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0g
cHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFs
c2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNp
YmxpbmcpKSBpZiAobmV4dC5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywg
J3Bvc05USCcpLFxuXG5cdCdudGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygn
bGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1v
Zi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5n
JywgJ3Bvc05USFR5cGUnLCB0cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNy
ZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBl
TGFzdCcsIHRydWUpLFxuXG5cdCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRy
ZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xu
XHR9LFxuXG5cdCdldmVuJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVk
bzpudGgtY2hpbGQnXShub2RlLCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xu
XHR9LFxuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
LnByZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4g
ZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlw
ZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2Rl
Lm5vZGVOYW1lO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYg
KHByZXYubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9
IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5v
ZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0s
XG5cblx0Lyo8L29mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1
ZG9zXG5cblx0J2VuYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlz
YWJsZWQ7XG5cdH0sXG5cblx0J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
IG5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHRyZXR1cm4gbm9kZS5jaGVja2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3Vz
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhp
cy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50
eXBlIHx8IHRoaXMuaGFzQXR0cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQn
cm9vdCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtc
blx0fSxcblxuXHQnc2VsZWN0ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5z
ZWxlY3RlZDtcblx0fVxuXG5cdC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZh
ciBwIGluIHBzZXVkb3MpIGxvY2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8g
YXR0cmlidXRlcyBtZXRob2RzXG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmli
dXRlR2V0dGVycyA9IHtcblxuXHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1s
Rm9yJyBpbiB0aGlzKSA/IHRoaXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtc
blx0fSxcblxuXHQnaHJlZic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhp
cykgPyB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hy
ZWYnKTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5z
dHlsZSkgPyB0aGlzLnN0eWxlLmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtc
blx0fSxcblxuXHQndGFiaW5kZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2Rl
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH0sXG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldEF0dHJpYnV0ZSgndHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlv
bigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhM
ZW5ndGgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVj
aWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0
dHJpYnV0ZUdldHRlcnMuTUFYTEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9j
YWwuU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcn
O1xuXG4vLyBTbGljayBmaW5kZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwg
ZXhwcmVzc2lvbiwgYXBwZW5kKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQpO1xufTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4
cHJlc3Npb24pe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51
bGwsIHRydWUpO1xufTtcblxuLy8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5j
b250YWlucyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KGNvbnRhaW5lcik7XG5cdHJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xu
fTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBm
dW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVy
biBsb2NhbC5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1
dGUgPSBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5c
dHJldHVybiBsb2NhbC5oYXNBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBt
YXRjaGVyXG5cblNsaWNrLm1hdGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAo
IShub2RlICYmIHNlbGVjdG9yKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNl
bGVjdG9yID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7
XG5cdHJldHVybiBsb2NhbC5tYXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xp
Y2sgYXR0cmlidXRlIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1
bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xu
XHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0
aW9uKG5hbWUpe1xuXHRyZXR1cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5c
bi8vIFNsaWNrIHBzZXVkbyBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlv
bihuYW1lLCBmbil7XG5cdGxvY2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwg
YXJndW1lbnQpe1xuXHRcdHJldHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0
cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtc
blx0dmFyIHBzZXVkbyA9IGxvY2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSBy
ZXR1cm4gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBh
cmd1bWVudCk7XG5cdH07XG5cdHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVz
IGFjY2Vzc29yXG5cblNsaWNrLm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxv
Y2FsLm92ZXJyaWRlKHJlZ2V4cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlz
WE1MID0gbG9jYWwuaXNYTUw7XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJl
dHVybiBsb2NhbC5nZXRVSURIVE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlz
LlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRz
ICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBFbGVtZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1w
b3J0YW50IGl0ZW1zIGluIE1vb1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0
aGUgZG9sbGFycyBmdW5jdGlvbiwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGlt
ZS1zYXZlciBtZXRob2RzIHRvIGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRz
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERv
Y3VtZW50LCBBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBh
cnNlciwgU2xpY2suRmluZGVyXVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAk
JCwgSUZyYW1lLCBTZWxlY3RvcnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVs
ZW1lbnQgPSBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVu
dC5Db25zdHJ1Y3RvcnNbdGFnXTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0
b3IocHJvcHMpO1xuXHRpZiAodHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50
LmlkKHRhZykuc2V0KHByb3BzKTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlm
ICghKC9eW1xcdy1dKyQvKS50ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJz
ZSh0YWcpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykg
PyAnZGl2JyA6IHBhcnNlZC50YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBu
dWxsKSBwcm9wcy5pZCA9IHBhcnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2Vk
LmF0dHJpYnV0ZXM7XG5cdFx0aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBs
ID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0
ZXNbaV07XG5cdFx0XHRpZiAocHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5c
dFx0XHRpZiAoYXR0ci52YWx1ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9w
c1thdHRyLmtleV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYg
IWF0dHIub3BlcmF0b3IpIHByb3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYg
KHBhcnNlZC5jbGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNz
J10gPSBwYXJzZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVu
dC5uZXdFbGVtZW50KHRhZywgcHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtc
blx0RWxlbWVudC5wcm90b3R5cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJ
RTggYW5kIElFOSByZXF1aXJlIHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2Zp
cmVFdmVudCA9IChmdW5jdGlvbihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBl
LCBldmVudCl7XG5cdFx0XHRyZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQp
O1xuXHRcdH07XG5cdH0pKEVsZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBU
eXBlKCdFbGVtZW50JywgRWxlbWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJy
YXkucHJvdG90eXBlW25hbWVdKSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFt
ZV0gPSBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMs
IGVsZW1lbnRzID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0
c1tpXSA9IGVsZW1lbnRbbmFtZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50
cyA9IChlbGVtZW50cyAmJiB0eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5c
dH07XG5cblx0RWxlbWVudHMuaW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVs
ZW1lbnQpe1xuXHRFbGVtZW50LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlw
ZSA9IHtcblx0XHQnJGNvbnN0cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0
aW9uLmNvbnZlcnQoJ2VsZW1lbnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihm
dW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0
aG9kO1xuXHR9KTtcbn1cblxuRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJ
RnJhbWUgPSBuZXcgVHlwZSgnSUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFy
cmF5LmxpbmsoYXJndW1lbnRzLCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0
XHRpZnJhbWU6IGZ1bmN0aW9uKG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0
XHR9XG5cdH0pO1xuXG5cdHZhciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJh
bWU7XG5cdGlmIChwYXJhbXMuaWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZy
YW1lKTtcblx0dmFyIG9ubG9hZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRl
bGV0ZSBwcm9wcy5vbmxvYWQ7XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwg
cHJvcHMubmFtZSwgaWZyYW1lID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1l
XycgKyBTdHJpbmcudW5pcXVlSUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChp
ZnJhbWUgfHwgJ2lmcmFtZScsIHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtc
blx0XHRvbmxvYWQuY2FsbChpZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdp
bmRvdy5mcmFtZXNbcHJvcHMuaWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVu
ZXIoJ2xvYWQnLCBvbkxvYWQpO1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50
cyA9IHRoaXMuRWxlbWVudHMgPSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rl
cy5sZW5ndGgpe1xuXHRcdHZhciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9k
ZSk7XG5cdFx0XHRpZiAoIXVuaXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHRcdHRoaXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5c
bkVsZW1lbnRzLnByb3RvdHlwZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJy
YXk7XG5cbm5ldyBUeXBlKCdFbGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZp
bHRlcjogZnVuY3Rpb24oZmlsdGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRo
aXM7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihm
aWx0ZXIpID09ICdzdHJpbmcnKSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0u
bWF0Y2goZmlsdGVyKTtcblx0XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdHB1c2g6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkg
dGhpc1tsZW5ndGgrK10gPSBpdGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0g
bGVuZ3RoKTtcblx0fS5wcm90ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgaXRlbXMgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0p
O1xuXHRcdFx0aWYgKGl0ZW0pIGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBB
cnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdGNvbmNhdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxl
bWVudHModGhpcyk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRl
bHNlIG5ld0VsZW1lbnRzLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50
cztcblx0fS5wcm90ZWN0KCksXG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlz
LnB1c2goY29sbGVjdGlvbltpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRo
aXNbLS10aGlzLmxlbmd0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0p
O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnBy
b3RvdHlwZS5zcGxpY2UsIG9iamVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxu
c3BsaWNlLmNhbGwob2JqZWN0LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMu
aW1wbGVtZW50KCdzcGxpY2UnLCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5n
dGg7XG5cdHZhciByZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hp
bGUgKGxlbmd0aCA+PSB0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1
cm4gcmVzdWx0O1xufS5wcm90ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9u
KG1ldGhvZCwgbmFtZSl7XG5cdEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7
XG5cbkFycmF5Lm1pcnJvcihFbGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxl
bWVudEFjY2VwdHNIVE1MO1xudHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBj
YXRjaCAoZSl7fVxuXG52YXIgZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVy
biAoJycgKyBodG1sKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVv
dDsnKTtcbn07XG4vKjwvbHRJRTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENh
bm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0g
KGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScp
LFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0
VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0g
Y2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3Vt
ZW50LmltcGxlbWVudCh7XG5cblx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5c
dFx0aWYgKHByb3BzKXtcblx0XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRl
ZmF1bHRDaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAn
Y2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVs
bCkgcHJvcHMudmFsdWUgPSAnb24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhl
IHR5cGUgdG8gYmUgc2V0IGJlZm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRc
blx0XHRcdGlmICghY2FuQ2hhbmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRc
dFx0dmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5c
dFx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0
XHRcdFx0aWYgKHByb3BzLnR5cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4g
dGhpcy5pZChzdHlsZUVsZW1lbnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTk+Ki9cblx0XHRcdC8qPGx0SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBl
IHByb3BlcnRpZXMgaW4gSUUgPCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1M
KXtcblx0XHRcdFx0dGFnID0gJzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFn
ICs9ICcgbmFtZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0
XHRpZiAocHJvcHMudHlwZSkgdGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMu
dHlwZSkgKyAnXCInO1xuXHRcdFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
bmFtZTtcblx0XHRcdFx0ZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykp
LnNldChwcm9wcyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGlj
ay51aWRPZih3aW5kb3cpO1xuU2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBs
ZW1lbnQoe1xuXG5cdG5ld1RleHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhp
cy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMud2luZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRc
dHZhciB0eXBlcyA9IHtcblxuXHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mp
e1xuXHRcdFx0XHRpZCA9IFNsaWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9n
LCAnXFxcXCQxJykpO1xuXHRcdFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5v
Y2FzaCkgOiBudWxsO1xuXHRcdFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5v
Y2FzaCl7XG5cdFx0XHRcdFNsaWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYg
IWVsLiRmYW1pbHkgJiYgISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkp
e1xuXHRcdFx0XHRcdHZhciBmaXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8g
d3JhcHBpbmcgbmVlZGVkIGluIElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJl
RXZlbnQgPSBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2
ZW50KHR5cGUsIGV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQo
ZWwsIEVsZW1lbnQuUHJvdG90eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5c
dFx0XHR9LFxuXG5cdFx0XHRvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRc
dFx0XHRpZiAob2JqLnRvRWxlbWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVu
dChkb2MpLCBub2Nhc2gpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07
XG5cblx0XHR0eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cg
PSB0eXBlcy5kb2N1bWVudCA9IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5c
dFx0fTtcblxuXHRcdHJldHVybiBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYg
KGVsICYmIGVsLiRmYW1pbHkgJiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2
YXIgdHlwZSA9IHR5cGVPZihlbCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVz
W3R5cGVdKGVsLCBub2Nhc2gsIGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0
fSkoKVxuXG59KTtcblxuaWYgKHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQn
LCBmdW5jdGlvbihlbCwgbmMpe1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRv
Y3VtZW50KTtcbn0pO1xuXG5XaW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwg
RWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwg
bmV3IEVsZW1lbnRzKTtcblx0fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7
XG5cdH1cblxufSk7XG5cbnZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVu
dCl7XG5cdHJldHVybiBTbGljay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAo
IWRvY3VtZW50LmNvbnRhaW5zKSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQo
Y29udGFpbnMpO1xuXG5cblxuLy8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9y
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikg
cmV0dXJuIGNvbWJpbmF0b3I7XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5w
YXJzZShleHByZXNzaW9uKSk7XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHBy
ZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRl
eHByZXNzaW9uc1tpXVswXS5jb21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhw
cmVzc2lvbjtcbn07XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQ
cmV2aW91czogJyF+Jyxcblx0Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3Is
IG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lv
bil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Np
b24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRB
bGxOZXh0OiAnficsXG5cdGdldEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+
Jyxcblx0Z2V0Q2hpbGRyZW46ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0
b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxl
bWVudCh7XG5cblx0Z2V0Rmlyc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBk
b2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9u
LCAnPicpKVswXSk7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5c
dFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9y
KGV4cHJlc3Npb24sICc+JykpLmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5c
dGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7
XG5cdH0sXG5cblx0Z2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykv
ZywgJ1xcXFwkMScpKSk7XG5cdH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xu
XHRcdHJldHVybiAhZXhwcmVzc2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtc
blx0fVxuXG59KTtcblxuXG5cbmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVu
dCgnJCQnLCBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp
e1xuXHRcdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFy
Y2godGhpcy5kb2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAo
VHlwZS5pc0VudW1lcmFibGUoc2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9y
KTtcblx0fVxuXHRyZXR1cm4gbmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5z
ZXJ0ZXJzXG5cbnZhciBpbnNlcnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0
LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlm
IChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5c
blx0YWZ0ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShj
b250ZXh0LCBlbGVtZW50Lm5leHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5c
dH0sXG5cblx0dG9wOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmlu
c2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmlu
c2VydGVycy5pbnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkg
LyBzZXRQcm9wZXJ0eVxuXG52YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVy
cyA9IHt9O1xuXG4vLyBwcm9wZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5m
b3JFYWNoKFtcblx0J3R5cGUnLCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScs
ICdjZWxsUGFkZGluZycsICdjZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVy
JywgJ3Jvd1NwYW4nLCAndGFiSW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkp
e1xuXHRwcm9wZXJ0aWVzW3Byb3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtc
blxucHJvcGVydGllcy5odG1sID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJU
ZXh0JzogJ3RleHRDb250ZW50JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rp
b24ocmVhbCwga2V5KXtcblx0cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2
YWx1ZSl7XG5cdFx0bm9kZVtyZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNb
a2V5XSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7
XG5cbi8qPGx0SUU5PiovXG5wcm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRy
ZXR1cm4gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0g
J3N0eWxlJykgbm9kZS5zZXQoJ2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRp
ZXMudGV4dF0gPSB2YWx1ZTtcblx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJv
cGVydHlHZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5p
bm5lckhUTUwgOiBnZXR0ZXIobm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7
XG4vKjwvbHRJRTk+Ki9cblxuLy8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFj
dCcsICdub3dyYXAnLCAnaXNtYXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxu
XHQnZGlzYWJsZWQnLCAncmVhZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNp
emUnLFxuXHQnZGVmZXInLCAnZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xz
JywgJ2F1dG9wbGF5Jyxcblx0J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5
LmZvckVhY2goYm9vbHMsIGZ1bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93
ZXJDYXNlKCk7XG5cdGJvb2xlYW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1ts
b3dlcl0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7
XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRy
ZXR1cm4gISFub2RlW2Jvb2xdO1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2Jq
ZWN0LmFwcGVuZChwcm9wZXJ0eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2Rl
LCB2YWx1ZSl7XG5cdFx0KCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAo
dmFsdWUgfHwgJycpIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxu
XG5cdCdmb3InOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2Rl
KSA/IG5vZGUuaHRtbEZvciA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVl
KTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUu
c3R5bGUpID8gbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgn
c3R5bGUnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUp
e1xuXHRcdG5vZGUudmFsdWUgPSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5c
bn0pO1xuXG5wcm9wZXJ0eUdldHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0
dXJuICgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2Rl
LmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFk
b25seSBhbmQgdGhyb3dzXG50cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31c
bmlmIChlbC50eXBlICE9ICdidXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9u
KG5vZGUsIHZhbHVlKXtcblx0bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xu
ZWwgPSBudWxsO1xuLyogPC93ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4v
LyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNo
YW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2Lmlu
bmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYu
aW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9s
dElFOT4qL1xuXG52YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2
b2xhdGlsZUlucHV0VmFsdWUsIGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQu
dmFsdWUgPSAndCc7XG5pbnB1dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUg
PSBpbnB1dC52YWx1ZSAhPSAndCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBB
cmd1bWVudFwiIHdoZW4gdHJ5aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0
aW5wdXQudmFsdWUgPSAnJztcblx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRT
dXBwb3J0ID0gaW5wdXQudHlwZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9
IG51bGw7XG5cbmlmICh2b2xhdGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBw
cm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRc
dHZhciB2YWx1ZSA9IG5vZGUudmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2Rl
LnZhbHVlID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0
UHJvcGVydHksIHNldFByb3BlcnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dl
dEF0dHJpYnV0ZSA9IChmdW5jdGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7
XG5cdHJldHVybiAoZGl2LmdldEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xu
fSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAo
ZnVuY3Rpb24odGVzdCl7XG5cdHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9
XCJzaG91bGRfZml4XCIgdmFsdWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0
dXJuIHRlc3QuY2xvbmVOb2RlKHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0g
MTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5c
bnZhciBoYXNDbGFzc0xpc3QgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNz
TGlzdDtcblxudmFyIGNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NO
YW1lcyA9IChjbGFzc05hbWUgfHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9
O1xuXHRyZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRp
ZiAoY2xhc3NOYW1lICE9PSAnJyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVl
c1tjbGFzc05hbWVdID0gY2xhc3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlz
dCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52
YXIgcmVtb3ZlRnJvbUNsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlz
dC5yZW1vdmUobmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0
ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIo
dGhpcywgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2
YXIgYXR0cmlidXRlV2hpdGVMaXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBh
dHRyaWJ1dGVXaGl0ZUxpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywg
e30pO1xuXHRcdFx0LyogPC9sdElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xu
XHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVXaGl0
ZUxpc3RbbmFtZV07XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRc
dFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0
SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRl
TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0
dHJpYnV0ZXMpe1xuXHRcdGZvciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNl
dFByb3BlcnR5KGF0dHJpYnV0ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdl
dHRlciA9IHByb3BlcnR5R2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0
ZXIpIHJldHVybiBnZXR0ZXIodGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xs
dXRlc0dldEF0dHJpYnV0ZSl7XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9k
ZShuYW1lKSwgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdo
aXRlTGlzdCcsIHt9KTtcblx0XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAo
YXR0ci5leHBhbmRvICYmICFhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIg
b3V0ZXIgPSB0aGlzLm91dGVySFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3Blbmlu
ZyB0YWcgYW5kIGZpbmQgbWVudGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0
ZXIuc3Vic3RyKDAsIG91dGVyLnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSku
aW5kZXhPZihuYW1lKSA8IDApIHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVXaGl0ZUxp
c3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dHZhciByZXN1bHQgPSBTbGljay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJu
ICghcmVzdWx0ICYmICFTbGljay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJl
c3VsdDtcblx0fSxcblxuXHRnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdz
ID0gQXJyYXkuY29udmVydChhcmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdl
dFByb3BlcnR5LCB0aGlzKS5hc3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51
bGwpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXku
ZWFjaChhcmd1bWVudHMsIHRoaXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9w
ZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVy
dHkuc2V0KSA/IHByb3BlcnR5LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVy
dHkocHJvcCwgdmFsdWUpO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlv
bihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0cmV0dXJuIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5
KHRoaXMpIDogdGhpcy5nZXRQcm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxu
XG5cdGVyYXNlOiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlBy
b3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3Bl
cnR5LmVyYXNlLmFwcGx5KHRoaXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24o
Y2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5j
bGFzc05hbWUpLmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0Ns
YXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZv
ckVhY2goYWRkVG9DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1l
ICsgJyAnICsgdGhpcy5jbGFzc05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRyZW1vdmVDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFy
IGNsYXNzTmFtZXMgPSBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNz
TmFtZSkuZm9yRWFjaChjbGFzc05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNs
YXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9y
Y2UgPT0gbnVsbCkgZm9yY2UgPSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVy
biAoZm9yY2UpID8gdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhj
bGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQg
PSB0aGlzLCBmcmFnbWVudCwgZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJh
Z21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
aWQoZWxlbWVudHNbaV0sIHRydWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRD
aGlsZChlbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hp
bGQoZnJhZ21lbnQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDog
ZnVuY3Rpb24odGV4dCwgd2hlcmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1
bWVudCgpLm5ld1RleHROb2RlKHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rp
b24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50
LmlkKGVsLCB0cnVlKSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0
OiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10o
dGhpcywgZG9jdW1lbnQuaWQoZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZXBsYWNlczogZnVuY3Rpb24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUp
O1xuXHRcdGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHR3cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRv
Y3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihl
bCwgd2hlcmUpO1xuXHR9LFxuXG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
c2VsZWN0ZWRJbmRleDsgLy8gU2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhB
cnJheS5jb252ZXJ0KHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0
XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3Ry
aW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0
RWxlbWVudHMoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5c
dFx0XHR2YXIgdHlwZSA9IGVsLnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJs
ZWQgfHwgdHlwZSA9PSAnc3VibWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmls
ZScgfHwgdHlwZSA9PSAnaW1hZ2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5n
ZXQoJ3RhZycpID09ICdzZWxlY3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9w
dCl7XG5cdFx0XHRcdC8vIElFXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgn
dmFsdWUnKTtcblx0XHRcdH0pIDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2ti
b3gnKSAmJiAhZWwuY2hlY2tlZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRB
cnJheS5jb252ZXJ0KHZhbHVlKS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBl
b2YgdmFsICE9ICd1bmRlZmluZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVu
dChlbC5uYW1lKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xu
XHRcdH0pO1xuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5c
blxuLy8gYXBwZW5kSFRNTFxuXG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdi
ZWZvcmVCZWdpbicsXG5cdGFmdGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQn
LFxuXHR0b3A6ICdhZnRlckJlZ2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoJ2FwcGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0
aGlzLmluc2VydEFkamFjZW50SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSdd
LCBodG1sKTtcblx0cmV0dXJuIHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2
YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVu
ID0gdGVtcC5jaGlsZE5vZGVzLFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5c
dGlmICghZnJhZ21lbnQpIHJldHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7
XG5cdFx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2Vy
dGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztc
bn0pO1xuXG52YXIgY29sbGVjdGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1
bmN0aW9uKHVpZCl7XG5cdHJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7
fSkpO1xufTtcblxudmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVt
LnVuaXF1ZU51bWJlcjtcblx0aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50
cygpO1xuXHRpZiAoaXRlbS5jbGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7
XG5cdGlmICh1aWQgIT0gbnVsbCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3VpZF07XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVBy
b3BzID0ge2lucHV0OiAnY2hlY2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2
YWx1ZSd9O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtc
blx0XHR2YXIgY2hpbGRyZW4gPSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicp
O1xuXHRcdEFycmF5LmVhY2goY2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2Uo
dGhpcyk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5c
dFx0QXJyYXkuY29udmVydCh0aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiAodGhpcy5wYXJlbnROb2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlz
KSA6IHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xu
XHRcdGNvbnRlbnRzID0gY29udGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMu
Y2xvbmVOb2RlKGNvbnRlbnRzKSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRc
dGlmIChjb250ZW50cyl7XG5cdFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0
aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBj
ZS5sZW5ndGg7IGktLTspe1xuXHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ld
O1xuXHRcdFx0aWYgKCFrZWVwaWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0
Lyo8bHRJRTk+Ki9cblx0XHRcdGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5v
ZGUuY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1l
bnQpO1xuXHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0
XHRcdGlmIChub2RlLm9wdGlvbnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywg
ZW8gPSBlbGVtZW50Lm9wdGlvbnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsg
ai0tOykgbm9bal0uc2VsZWN0ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0
fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50
LnRhZ05hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3Bd
KSBub2RlW3Byb3BdID0gZWxlbWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xu
XHRcdGlmIChoYXNDbG9uZUJ1Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnb2JqZWN0JyksIHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0
Jyk7XG5cdFx0XHRmb3IgKGkgPSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRv
W2ldLm91dGVySFRNTDtcblx0XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3Vt
ZW50LmlkKGNsb25lKTtcblx0fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRd
Lmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBm
bil7XG5cdFx0aWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpe1xuXHRcdFx0Y29sbGVjdGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxu
XHRcdGlmICh0aGlzLmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBl
LCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsg
dHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBm
dW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxz
ZSB0aGlzLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmV0cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3Rv
cmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtc
blx0XHRpZiAoZGZsdCAhPSBudWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJv
cGVydHldID0gZGZsdDtcblx0XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5c
dH0sXG5cblx0c3RvcmU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3Jh
Z2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFs
dWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9w
ZXJ0eSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
Lyo8bHRJRTk+Ki9cbmlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKXtcblx0dmFyIGdjID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0
ZWQsIGNsZWFuKTtcblx0XHRpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFn
ZSgpO1xuXHRcdHdpbmRvdy5yZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3
aW5kb3cuYWRkTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMgPSB7fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtc
blxuXHRzZXQ6IGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHls
ZTtcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3Nz
VGV4dDtcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1Rl
eHQgPSAnJztcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5c
dH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bihodG1sKXtcblx0XHRpZiAoaHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAo
dHlwZU9mKGh0bWwpID09ICdhcnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAodGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwp
IHRoaXMuc3R5bGVTaGVldC5jc3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3Ro
aXMuaW5uZXJIVE1MID0gaHRtbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhp
cy5zZXQoJ2h0bWwnLCAnJyk7XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IHRydWUsIHN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJI
VE1MID0gdHJ1ZTtcblxuLyo8bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBo
dHRwOi8vamRiYXJ0bGV0dC5jb20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpO1xudmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2Pjwv
bmF2Pic7XG5zdXBwb3J0c0hUTUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09
IDEpO1xuaWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFy
dGljbGUgYXNpZGUgYXVkaW8gY2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1
cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNl
Y3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAo
bC0tKSBmcmFnbWVudC5jcmVhdGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8q
PC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9u
LmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgndGFibGUnKTtcblx0dGFibGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5c
dHJldHVybiB0cnVlO1xufSk7XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0cicpLCBodG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1s
O1xuc3VwcG9ydHNUUklubmVySFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51
bGw7XG4vKjwvbHRGRjQ+Ki9cblxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBw
b3J0c1RSSW5uZXJIVE1MIHx8ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQu
UHJvcGVydGllcy5odG1sLnNldCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0
aW9ucyA9IHtcblx0XHRcdHRhYmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRc
dHNlbGVjdDogWzEsICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwg
Jzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0
YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0
XHR0cmFuc2xhdGlvbnMudGhlYWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMu
dGJvZHk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5Piov
XG5cdFx0XHRpZiAodGhpcy5zdHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7
XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMu
Z2V0KCd0YWcnKV07XG5cdFx0XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykg
d3JhcCA9IFswLCAnJywgJyddO1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhp
cywgaHRtbCk7XG5cblx0XHRcdHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3Vw
cG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRc
dHdyYXBwZXIuaW5uZXJIVE1MID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5q
b2luKCcnKTtcblx0XHRcdHdoaWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGls
ZDtcblx0XHRcdHRoaXMuZW1wdHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRp
ZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7
XG5cdFx0XHR3cmFwcGVyID0gbnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGll
cy5odG1sLnNldCk7XG59XG4vKjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8
c2VsZWN0PjxvcHRpb24+czwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJz
dENoaWxkLnZhbHVlICE9ICdzJykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0
aWYgKHRhZyAhPSAnc2VsZWN0JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFs
dWUpO1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0
dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0
ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1
ZSA9IChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQo
J3RleHQnKTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24u
c2VsZWN0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIG9wdGlvbiA9IHRoaXMsIHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRh
ZyAhPSAnc2VsZWN0JyAmJiB0YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5
KCd2YWx1ZScpO1xuXG5cdFx0aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlv
bi5nZXRTZWxlY3RlZCgpWzBdKSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24u
Z2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVj
aWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50
ZXN0Rm9ybSA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3Bl
cnRpZXMuaWQgPSB7XG5cdHNldDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdl
dEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztc
blx0fVxufTtcbi8qPC9JRT4qL1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQg
b2JqZWN0IGNyb3NzLWJyb3dzZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmpl
Y3RdXG5cbnByb3ZpZGVzOiBFdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
X2tleXMgPSB7fTtcbnZhciBub3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xu
XHR2YXIgbm9ybWFsaXplZDtcblx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6
ZWQgPSBldmVudC53aGVlbERlbHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIw
IDogZXZlbnQud2hlZWxEZWx0YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQg
PSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0o
cmF3QW1vdW50ICUgMyA9PSAwID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0
fVxuXHRyZXR1cm4gbm9ybWFsaXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZl
bnQgPSBuZXcgVHlwZSgnRE9NRXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3
aW4pIHdpbiA9IHdpbmRvdztcblx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChl
dmVudC4kZXh0ZW5kZWQpIHJldHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0
aGlzLiRleHRlbmRlZCA9IHRydWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0
dGhpcy5jb250cm9sID0gZXZlbnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7
XG5cdHRoaXMubWV0YSA9IGV2ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0g
ZXZlbnQudHlwZTtcblx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVt
ZW50O1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0
YXJnZXQucGFyZW50Tm9kZTtcblx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xu
XG5cdGlmICh0eXBlLmluZGV4T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5j
b2RlID0gKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlm
dCB8fCB0eXBlICE9ICdrZXlwcmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYg
KHR5cGUgPT0gJ2tleWRvd24nIHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+
IDExMSAmJiBjb2RlIDwgMTI0KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRc
dGVsc2UgaWYgKGNvZGUgPiA5NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtc
blx0XHR9XG5cdFx0aWYgKHRoaXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlKS50b0xvd2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNr
JyB8fCB0eXBlID09ICdkYmxjbGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUg
PT0gJ3doZWVsJyB8fCB0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdt
b3VzZScpID09IDApe1xuXHRcdHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFk
b2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0
bWwgOiBkb2MuYm9keTtcblx0XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVgg
IT0gbnVsbCkgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxc
blx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xp
ZW50WSArIGRvYy5zY3JvbGxUb3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0
eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQg
OiBldmVudC5jbGllbnRYLFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQu
cGFnZVkgLSB3aW4ucGFnZVlPZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAo
dHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdt
b3VzZXdoZWVsJykgdGhpcy53aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRc
dHRoaXMucmlnaHRDbGljayA9IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAy
KTtcblx0XHRpZiAodHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwg
dHlwZSA9PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFy
IG92ZXJUYXJnZXQgPSB0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXIn
O1xuXHRcdFx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVy
VGFyZ2V0ID8gJ2Zyb20nIDogJ3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0
ZWQgJiYgcmVsYXRlZC5ub2RlVHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2Rl
O1xuXHRcdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0
fVxuXHR9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhP
ZignZ2VzdHVyZScpID09IDApe1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtc
blx0XHR0aGlzLnNjYWxlID0gZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0g
ZXZlbnQudGFyZ2V0VG91Y2hlcztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hh
bmdlZFRvdWNoZXM7XG5cdFx0dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3Vj
aGVzO1xuXHRcdGlmICh0b3VjaGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0g
dG91Y2hlc1swXTtcblx0XHRcdHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gu
cGFnZVl9O1xuXHRcdFx0dGhpcy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2gu
Y2xpZW50WX07XG5cdFx0fVxuXHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQg
PSB7fTtcblx0aWYgKCF0aGlzLnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50
LmltcGxlbWVudCh7XG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2
ZW50RGVmYXVsdCgpLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlv
bjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMu
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJs
ZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1
bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQu
cHJldmVudERlZmF1bHQoKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxz
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0g
ZnVuY3Rpb24oY29kZSwga2V5KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlz
O1xufTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9h
ZFNldHRlcih0cnVlKTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0
MCc6ICdkb3duJywgJzM3JzogJ2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywg
JzMyJzogJ3NwYWNlJywgJzgnOiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2Rl
bGV0ZScsICcxMyc6ICdlbnRlcidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxu
bmFtZTogRWxlbWVudC5FdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRo
b2RzIGZvciBkZWFsaW5nIHdpdGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3Vz
ZWVudGVyIGFuZCBtb3VzZWxlYXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBF
dmVudF1cblxucHJvdmlkZXM6IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdHRoaXMuYWRkRXZlbnRzKGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9j
dW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0
XHRpZiAoIWV2ZW50c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtd
fTtcblx0XHRpZiAoZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztc
blx0XHRldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBl
LFxuXHRcdFx0Y3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24g
PSBmbixcblx0XHRcdHNlbGYgPSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1
c3RvbS5vbkFkZCkgY3VzdG9tLm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYg
KGN1c3RvbS5jb25kaXRpb24pe1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkp
IHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0
XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5j
dGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2
YXIgZGVmbiA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9
O1xuXHRcdHZhciBuYXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtc
blx0XHRpZiAobmF0aXZlRXZlbnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRc
dFx0XHRkZWZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2
ZW50KGV2ZW50LCBzZWxmLmdldFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNh
bGwoc2VsZiwgZXZlbnQpID09PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRc
dFx0fVxuXHRcdFx0dGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJd
KTtcblx0XHR9XG5cdFx0ZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0
dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8
ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVd
O1xuXHRcdHZhciBpbmRleCA9IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXgg
PT0gLTEpIHJldHVybiB0aGlzO1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtc
blx0XHRkZWxldGUgbGlzdC5rZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5k
ZXhdO1xuXHRcdHZhciBjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3Vz
dG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRo
aXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNv
bnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAo
RWxlbWVudC5OYXRpdmVFdmVudHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2
YWx1ZSwgYXJndW1lbnRzWzJdKSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlv
bihldmVudHMpe1xuXHRcdGZvciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChl
dmVudCwgZXZlbnRzW2V2ZW50XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3Zl
RXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2Yo
ZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJl
bW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9
XG5cdFx0dmFyIGF0dGFjaGVkID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFh
dHRhY2hlZCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBl
IGluIGF0dGFjaGVkKSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWlu
YXRlKCdldmVudHMnKTtcblx0XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0
YXR0YWNoZWRbZXZlbnRzXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJl
bW92ZUV2ZW50KGV2ZW50cywgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0
YWNoZWRbZXZlbnRzXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2
ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMu
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJl
dHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRz
W3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5
KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5c
dFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1
bmN0aW9uKGZyb20sIHR5cGUpe1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2
YXIgZXZlbnRzID0gZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJl
dHVybiB0aGlzO1xuXHRcdGlmICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4g
ZXZlbnRzKSB0aGlzLmNsb25lRXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlm
IChldmVudHNbdHlwZV0pe1xuXHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihm
bil7XG5cdFx0XHRcdHRoaXMuYWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50
cyA9IHtcblx0Y2xpY2s6IDIsIGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIs
IGNvbnRleHRtZW51OiAyLCAvL21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6
IDIsIERPTU1vdXNlU2Nyb2xsOiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91
c2VvdXQ6IDIsIG1vdXNlbW92ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9t
b3VzZSBtb3ZlbWVudFxuXHRrZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5
Ym9hcmRcblx0b3JpZW50YXRpb25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAy
LCB0b3VjaG1vdmU6IDIsIHRvdWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0
Z2VzdHVyZXN0YXJ0OiAyLCBnZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0
dXJlXG5cdGZvY3VzOiAyLCBibHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIs
IHN1Ym1pdDogMiwgcGFzdGU6IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDog
MiwgdW5sb2FkOiAxLCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29u
dGVudExvYWRlZDogMSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5n
ZTogMSwgcG9wc3RhdGU6IDIsIHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxu
XHRlcnJvcjogMSwgYWJvcnQ6IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5c
bkVsZW1lbnQuRXZlbnRzID0ge1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwn
IGluIGRvY3VtZW50ID8gJ3doZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21v
dXNld2hlZWwnIDogJ0RPTU1vdXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5j
dGlvbihldmVudCl7XG5cdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYg
KHJlbGF0ZWQgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZh
bHNlO1xuXHRyZXR1cm4gKHJlbGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVs
JyAmJiB0eXBlT2YodGhpcykgIT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVk
KSk7XG59O1xuXG5pZiAoJ29ubW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZl
bnRzLm1vdXNlbGVhdmUgPSAyO1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xu
fSBlbHNlIHtcblx0RWxlbWVudC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91
c2VvdmVyJyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMu
bW91c2VsZWF2ZSA9IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcbn1cblxuLyo8bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIp
e1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQu
RXZlbnRzLmNoYW5nZSA9IHtcblx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUg
PSB0aGlzLnR5cGU7XG5cdFx0XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYm
ICh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFu
Z2UnIDogJ2NoYW5nZSc7XG5cdFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtc
blx0XHRcdHJldHVybiBldmVudC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZl
bnQucHJvcGVydHlOYW1lID09ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+
Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5c
bmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVk
ZSB0aGUgZGVsZWdhdGUgbWV0aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2
ZW50XVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVu
Y3Rpb24oKXtcblxudmFyIGV2ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcjtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZl
RXZlbnRzLmZvY3Vzb3V0ID0gMjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2Vs
Zil7XG5cdFx0aWYgKG1hdGNoKHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQs
IGV2ZW50LCB0YXJnZXQpO1xuXHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnRO
b2RlKTtcblx0fVxufTtcblxudmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6
ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0
fSxcblx0bW91c2VsZWF2ZToge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdm
b2N1cycgKyAoZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6
IHRydWVcblx0fSxcblx0Ymx1cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8g
J2JsdXInIDogJ2ZvY3Vzb3V0Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0
SUU5PiovXG52YXIgX2tleSA9ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1
bmN0aW9uKHR5cGUpe1xuXG5cdHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0
XHRyZW1vdmU6IGZ1bmN0aW9uKHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0
cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlz
dCAmJiBsaXN0LmZvcm1zKSBmb3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xu
XHRcdFx0XHQvLyB0aGUgZm9ybSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3Qg
aGF2ZSB0aGVcblx0XHRcdFx0Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQg
Y2FzZSB0aGUgZXZlbnQgd2FzXG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0
aWYgKGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQo
dHlwZSwgbGlzdC5mbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3Jt
ID0gKHRhcmdldC5nZXQoJ3RhZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQu
Z2V0UGFyZW50KCdmb3JtJyk7XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFy
IGxpc3RlbmVycyA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30p
LFxuXHRcdFx0XHRsaXN0ZW5lciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczog
W119LFxuXHRcdFx0XHRmb3JtcyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7
XG5cblx0XHRcdGlmIChmb3Jtcy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRm
b3Jtcy5wdXNoKGZvcm0pO1xuXG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRc
dFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtc
blx0XHRcdGZvcm0uYWRkRXZlbnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5c
blx0XHRcdGxpc3RlbmVyc1t1aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkg
KyB0eXBlICsgJ2xpc3RlbmVycycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFy
IGlucHV0T2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAn
Zm9jdXNpbicsXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0
YXJnZXQpe1xuXHRcdFx0dmFyIGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0
aGlzLnJlbW92ZUV2ZW50cyhldmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0g
PSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZl
bnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVu
dHMpO1xuXHRcdH1cblx0fTtcbn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVj
dC5hcHBlbmQobWFwLCB7XG5cdHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVz
ZXQ6IGZvcm1PYnNlcnZlcigncmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFu
Z2UnKSxcblx0c2VsZWN0OiBpbnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+
Ki9cblxudmFyIHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8u
YWRkRXZlbnQsXG5cdHJlbW92ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxh
eSA9IGZ1bmN0aW9uKG9sZCwgbWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1
c2VDYXB0dXJlKXtcblx0XHRpZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJu
IG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1
ZG9zWzBdLmtleSAhPSAncmVsYXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNl
dWRvcy5zbGljZSgxKS5lYWNoKGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6
JyArIHBzZXVkby5rZXkgKyAocHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJykn
IDogJycpO1xuXHRcdH0pO1xuXHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1
cm4gbWV0aG9kLmNhbGwodGhpcywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZu
KTtcblx0fTtcbn07XG5cbnZhciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlv
bih0eXBlLCBtYXRjaCwgZm4pe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRl
bGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBm
b3IgKHZhciBfdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZu
ICYmIHN0b3JlZFtfdWlkXS5tYXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5c
dFx0dmFyIF90eXBlID0gdHlwZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFw
W3R5cGVdIHx8IHt9O1xuXHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRj
aCA9IGZ1bmN0aW9uKHRhcmdldCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBf
bWF0Y2gpO1xuXHRcdH07XG5cblx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNb
X3R5cGVdO1xuXHRcdGlmIChfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVu
dEV2ZW50LmNvbmRpdGlvbil7XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24g
PSBfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2gg
PSBmdW5jdGlvbih0YXJnZXQsIGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0
LCBldmVudCkgJiYgY29uZGl0aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9
O1xuXHRcdH1cblxuXHRcdHZhciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7
XG5cdFx0dmFyIGRlbGVnYXRvciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNo
LCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7
fTtcblx0XHRzdG9yZWRbdWlkXSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjog
X2ZuLFxuXHRcdFx0ZGVsZWdhdG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5
cGVdID0gc3RvcmVkO1xuXHRcdHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVn
YXRvciwgX21hcC5jYXB0dXJlKTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlw
ZSwgbWF0Y2gsIGZuLCBfdWlkKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRk
ZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQp
IHJldHVybiB0aGlzO1xuXG5cdFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwg
ZGVsZWdhdG9yID0gc3RvcmVkW191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7
fTtcblx0XHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1v
dmUpIF9tYXAucmVtb3ZlKHRoaXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtc
blx0XHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50
LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRc
dHZhciBfX3VpZCwgcztcblx0XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRc
dHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9
PSBmbikgcmV0dXJuIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRj
aCwgZm4sIF9fdWlkKTtcblx0XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0
cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlv
bi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3Vt
ZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBk
ZWxlZ2F0aW9uLmFkZEV2ZW50KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBk
ZWxlZ2F0aW9uLnJlbW92ZUV2ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTog
RWxlbWVudC5TdHlsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJh
Y3Rpbmcgd2l0aCB0aGUgc3R5bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJv
dmlkZXM6IEVsZW1lbnQuU3R5bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0
bWwgPSBkb2N1bWVudC5odG1sLCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUs
IHdoaWNoIGRvZXMgbm90IHJlbW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5l
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVk
JztcbmVsLnN0eWxlLmNvbG9yID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwu
c3R5bGUuY29sb3IgPT0gJ3JlZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJu
cyBib3JkZXIqIHNob3J0aGFuZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0
aC1zdHlsZSBpbnN0ZWFkIG9mIHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHgg
c29saWQgIzEyM2FiYyc7XG5lbC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0Jv
cmRlcnNJbldyb25nT3JkZXIgPSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxs
O1xuLy88L2x0SUU5PlxuXG52YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENv
bXB1dGVkU3R5bGUsXG5cdHN1cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5zdHlsZS5ib3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0
aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0
eWxlcyk7XG59fTtcblxudmFyIGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51
bGwpLFxuXHRoYXNGaWx0ZXIgPSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxw
aGEgPSAvYWxwaGFcXChvcGFjaXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0
eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0
eScsIG9wYWNpdHkpO1xuXHRlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8
fCBvcGFjaXR5ID09IG51bGwgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5
PlxudmFyIHNldEZpbHRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2
YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBl
bGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIg
PSAocmVnZXhwLnRlc3QoZmlsdGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDog
ZmlsdGVyICsgJyAnICsgdmFsdWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxl
LnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3Bh
Y2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1l
bnQuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wYWNpdHkpe1xuXHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50
LmN1cnJlbnRTdHlsZS5oYXNMYXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChv
cGFjaXR5ID09IG51bGwgfHwgb3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwg
cmVBbHBoYSwgJycpO1xuXHRcdGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50
KSAhPSAxKSBzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScp
O1xuXHR9IGVsc2Uge1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3Bh
Y2l0eT0nICsgKG9wYWNpdHkgKiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5c
dH1cbn0gOiBzZXRWaXNpYmlsaXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkg
PyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNp
dHkgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSAnJykgPyAxIDogb3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1
bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8
IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlm
IChmaWx0ZXIpIG9wYWNpdHkgPSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSBudWxsIHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7
XG59IDogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2
ZSgnJG9wYWNpdHknKTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50
LnN0eWxlLnZpc2liaWxpdHkgPT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5
O1xufSkpO1xuXG52YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkg
PyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAn
MCUnLCB0b3A6ICcwJScsIGNlbnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEw
MCUnfSxcblx0aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5k
UG9zaXRpb25YICE9IG51bGwpLFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIg
Y2FtZWxDYXNlID0gZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFj
ZShwcmVmaXhQYXR0ZXJuLCAnJDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZh
ciByZW1vdmVTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0
eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHBy
b3BlcnR5ICsgJ1gnKTtcblx0XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3Zl
QXR0cmlidXRlKHByb3BlcnR5KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFo
YXNHZXRDb21wdXRlZFN0eWxlICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJy
ZW50U3R5bGVbY2FtZWxDYXNlKHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxl
bWVudC5nZXREb2N1bWVudCh0aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVm
YXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVs
bDtcblx0XHRyZXR1cm4gKGNvbXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHBy
b3BlcnR5ID09IGZsb2F0TmFtZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDog
Jyc7XG5cdH0sXG5cblx0c2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0
aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFs
dWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xu
XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3Bl
cnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2
YWx1ZSkgIT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9w
ZXJ0eV0gfHwgJ0AnKS5zcGxpdCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZh
bHVlKS5tYXAoZnVuY3Rpb24odmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAn
Jztcblx0XHRcdFx0cmV0dXJuICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVw
bGFjZSgnQCcsIE1hdGgucm91bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5c
dFx0fSBlbHNlIGlmICh2YWx1ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFs
dWUgPSBNYXRoLnJvdW5kKHZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0g
PSB2YWx1ZTtcblx0XHQvLzxsdElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09
IG51bGwpICYmIGRvZXNOb3RSZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1
dGUpe1xuXHRcdFx0cmVtb3ZlU3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0
aW9uKHByb3BlcnR5KXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0
T3BhY2l0eSh0aGlzKTtcblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxv
YXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVz
ICYmIHByb3BlcnR5LmluZGV4T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVy
biBbJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlv
bihjb3JuZXIpe1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xu
XHRcdFx0fSwgdGhpcykuam9pbignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5z
dHlsZVtwcm9wZXJ0eV07XG5cdFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcp
e1xuXHRcdFx0aWYgKEVsZW1lbnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkp
KXtcblx0XHRcdFx0cmVzdWx0ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5T
aG9ydFN0eWxlc1twcm9wZXJ0eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRc
dFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRo
aXMuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSAmJiAvXmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0
eSkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0
KS9nLCBmdW5jdGlvbihwb3NpdGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1tw
b3NpdGlvbl07XG5cdFx0XHR9KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYg
cHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0
aWYgKHJlc3VsdCl7XG5cdFx0XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBj
b2xvciA9IHJlc3VsdC5tYXRjaCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAo
Y29sb3IpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hl
eCgpKTtcblx0XHR9XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxl
W3Byb3BlcnR5XSl7XG5cdFx0XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0
eSkgJiYgISgvcHgkLy50ZXN0KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9w
ZXJ0eSA9PSAnd2lkdGgnKSA/IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10s
IHNpemUgPSAwO1xuXHRcdFx0XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dFx0c2l6ZSArPSB0aGlzLmdldFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRv
SW50KCkgKyB0aGlzLmdldFN0eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRc
dFx0fSwgdGhpcyk7XG5cdFx0XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2Fw
aXRhbGl6ZSgpXSAtIHNpemUgKyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlcigu
KylXaWR0aHxtYXJnaW58cGFkZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxv
YXQocmVzdWx0KSkpe1xuXHRcdFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dC8vPGx0SUU5PlxuXHRcdGlmIChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRl
cihUb3B8UmlnaHR8Qm90dG9tfExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChy
ZXN1bHQpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4r
KSQvLCAnJDIgJDMgJDEnKTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJl
c3VsdDtcblx0fSxcblxuXHRzZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2
YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0
aW9uKGtleSl7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9
LCB0aGlzKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxl
cyA9IHtcblx0bGVmdDogJ0BweCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAn
QHB4Jyxcblx0d2lkdGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1h
eEhlaWdodDogJ0BweCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFj
a2dyb3VuZENvbG9yOiAncmdiKEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNr
Z3JvdW5kUG9zaXRpb246ICdAcHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250
U2l6ZTogJ0BweCcsIGxldHRlclNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xp
cDogJ3JlY3QoQHB4IEBweCBAcHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcs
IHBhZGRpbmc6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkg
QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAn
QHB4IEBweCBAcHggQHB4JywgYm9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdy
Z2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6
SW5kZXg6ICdAJywgJ3pvb20nOiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0Bw
eCcsIG9wYWNpdHk6ICdAJywgYm9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxu
XG5cblxuXG5FbGVtZW50LlNob3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBi
b3JkZXI6IHt9LCBib3JkZXJXaWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6
IHt9fTtcblxuWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9u
KGRpcmVjdGlvbil7XG5cdHZhciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBB
bGwgPSBFbGVtZW50LlN0eWxlcztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rp
b24oc3R5bGUpe1xuXHRcdHZhciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0
eWxlXVtzZF0gPSBBbGxbc2RdID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyAr
IGRpcmVjdGlvbjtcblx0U2hvcnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAs
IEAsIEApJztcblx0dmFyIGJkdyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBi
ZGMgPSBiZCArICdDb2xvcic7XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0
aFtiZHddID0gU2hvcnRbYmRdW2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3Jk
ZXJTdHlsZVtiZHNdID0gU2hvcnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQu
Ym9yZGVyQ29sb3JbYmRjXSA9IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAs
IEApJztcbn0pO1xuXG5pZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRT
dHlsZXMuYmFja2dyb3VuZFBvc2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFj
a2dyb3VuZFBvc2l0aW9uWTogJ0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVu
dC5EaW1lbnNpb25zXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0
aCBzaXplLCBzY3JvbGwsIG9yIHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93
IG9iamVjdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0g
RWxlbWVudCBwb3NpdGlvbmluZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9v
Lm9yZy8pIGNvZGUgYW5kIHNtYXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6
Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lv
bnMgYmFzZWQgb24gW1lVSV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwg
W0JTRCBMaWNlbnNlXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1s
KS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0Vs
ZW1lbnQuRGltZW5zaW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVu
dC5hcHBlbmRDaGlsZChjaGlsZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9m
ZnNldFBhcmVudCA9PT0gZWxlbWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIg
aGVpZ2h0Q29tcG9uZW50cyA9IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRv
bScsICdib3JkZXJUb3BXaWR0aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBv
bmVudHMgPSBbJ3dpZHRoJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJM
ZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9
IGZ1bmN0aW9uKGVsKXtcblxuXHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwp
LFxuXHRcdGJvdW5kcyA9IHt4OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHdpZHRoQ29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLngg
Kz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxu
dmFyIGlzT2Zmc2V0ID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdw
b3NpdGlvbicpICE9ICdzdGF0aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRT
dGF0aWMgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFi
bGV8dGR8dGgpJC9pKS50ZXN0KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQo
e1xuXG5cdHNjcm9sbFRvOiBmdW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtc
blx0XHRcdHRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdHRoaXMuc2Nyb2xsTGVmdCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5c
dFx0Ly88bHRJRTk+XG5cdFx0Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5v
dCBjYWxjdWxhdGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJp
bGl0eSBoaWRkZW4uXG5cdFx0aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4
OiB0aGlzLm9mZnNldFdpZHRoLCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5
PlxuXG5cdFx0Ly8gVGhpcyBzdmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRl
U2l6ZSgpYCwgY2FuIGJlIHJlbW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxu
XHRcdC8vIEJ1ZyBpbmZvOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzA5ODVcblx0XHRpZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3Zn
Q2FsY3VsYXRlU2l6ZSh0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhp
cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRo
LCB5OiBib3VuZHMuaGVpZ2h0fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDog
MCwgeTogMH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6
ZSgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWln
aHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRo
aXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6
IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9s
bHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0
aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVu
dCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3Np
dGlvbi55ICs9IGVsZW1lbnQuc2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNl
dFBhcmVudDogYnJva2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVu
dCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50
LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNl
dENoZWNrID0gKHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/
IGlzT2Zmc2V0U3RhdGljIDogaXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVu
dC5wYXJlbnROb2RlKSl7XG5cdFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJu
IGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0
cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRc
dHRyeSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0O1xuXG5cdFx0aWYgKGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIg
Ym91bmQgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9j
dW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0
bWxTY3JvbGwgPSBodG1sLmdldFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMu
Z2V0U2Nyb2xscygpLFxuXHRcdFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3Np
dGlvbicpID09ICdmaXhlZCcpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5s
ZWZ0LnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3Jv
bGwueCkgLSBodG1sLmNsaWVudExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkg
KyBlbGVtU2Nyb2xscy55ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5j
bGllbnRUb3Bcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3Np
dGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRp
b247XG5cblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBv
c2l0aW9uLnggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVt
ZW50Lm9mZnNldFRvcDtcblxuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xu
XHRcdH1cblxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVu
Y3Rpb24ocmVsYXRpdmUpe1xuXHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0
XHRcdHNjcm9sbCA9IHRoaXMuZ2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0
XHRcdHg6IG9mZnNldC54IC0gc2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55
XG5cdFx0fTtcblxuXHRcdGlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChy
ZWxhdGl2ZSkpKXtcblx0XHRcdHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9z
aXRpb24oKTtcblx0XHRcdHJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24u
eCAtIGxlZnRCb3JkZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlv
bi55IC0gdG9wQm9yZGVyKHJlbGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtc
blx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlz
Qm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0
XHR2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9
IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54
LFxuXHRcdFx0dG9wOiBwb3NpdGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhl
aWdodDogc2l6ZS55XG5cdFx0fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0
aDtcblx0XHRvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9i
ajtcblx0fSxcblxuXHRjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJu
IHtcblx0XHRcdGxlZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0Jyks
XG5cdFx0XHR0b3A6IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRc
dH07XG5cdH0sXG5cblx0c2V0UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRo
aXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5c
bltEb2N1bWVudCwgV2luZG93XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJl
dHVybiB7eDogZG9jLmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxu
XHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCks
IGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhP
ZmZzZXQgfHwgZG9jLnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xs
VG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2Mg
PSBnZXRDb21wYXRFbGVtZW50KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5c
dFx0XHRib2R5ID0gdGhpcy5nZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1h
dGgubWF4KGRvYy5zY3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRo
Lm1heChkb2Muc2Nyb2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxc
blxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xu
XHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhp
cy5nZXRTaXplKCk7XG5cdFx0cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55
LCByaWdodDogc2l6ZS54LCBoZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxu
fSk7XG5cbi8vIHByaXZhdGUgbWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50Lmdl
dENvbXB1dGVkU3R5bGU7XG5cbmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtc
blx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5c
blxuXG5mdW5jdGlvbiB0b3BCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihl
bGVtZW50LCAnYm9yZGVyLXRvcC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVs
ZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRo
Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8
aHRtbCkkL2kpLnRlc3QoZWxlbWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0
RWxlbWVudChlbGVtZW50KXtcblx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0
cmV0dXJuICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVu
dC5hbGlhcyh7cG9zaXRpb246ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltX
aW5kb3csIERvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRI
ZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5c
blx0Z2V0V2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbCgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTY3JvbGwoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRT
Y3JvbGxXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCku
eDtcblx0fSxcblxuXHRnZXRUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9z
aXRpb24oKS55O1xuXHR9LFxuXG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0UG9zaXRpb24oKS54O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4
dGVuZGVkIGJ5IGFsbCBvdGhlciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJs
ZV1cblxucHJvdmlkZXM6IEZ4XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9
IHRoaXMuRnggPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBP
cHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25T
dGFydDogbmlsLFxuXHRcdG9uQ2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRc
dCovXG5cdFx0ZnBzOiA2MCxcblx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxu
XHRcdGZyYW1lczogbnVsbCxcblx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9y
ZSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1
YmplY3QgPSB0aGlzLnN1YmplY3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdH0sXG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24ocCl7XG5cdFx0XHRyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7
XG5cdFx0fTtcblx0fSxcblxuXHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZnJhbWVTa2lwKXtcblx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/
IChub3cgLSB0aGlzLnRpbWUpIDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZh
bDtcblx0XHRcdHRoaXMudGltZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMu
ZnJhbWUgPCB0aGlzLmZyYW1lcyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24o
dGhpcy5mcmFtZSAvIHRoaXMuZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0
aGlzLmZyb20sIHRoaXMudG8sIGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20s
IHRoaXMudG8sIDEpKTtcblx0XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6
IGZ1bmN0aW9uKG5vdyl7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5j
dGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBk
ZWx0YSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVu
bmluZygpKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0
XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2Fz
ZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7
IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0
OiBmdW5jdGlvbihmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0
dGhpcy5mcmFtZSA9ICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigp
O1xuXHRcdHZhciBmcmFtZXMgPSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlv
bnMuZnBzLCBkdXJhdGlvbiA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0
aW9uID0gRnguRHVyYXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRo
aXMuZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMg
fHwgTWF0aC5yb3VuZCh0aGlzLmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRp
ZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJl
c2V0VGhlbmFibGUodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0
YXJ0JywgdGhpcy5zdWJqZWN0KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVz
ID09IHRoaXMuZnJhbWUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50
KCdjaGFpbkNvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRc
dHRoaXMuZmlyZUV2ZW50KCdzdG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRo
aXMucmVzb2x2ZSh0aGlzLnN1YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtc
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMu
ZnJhbWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlz
LnN1YmplY3QpLmNsZWFyQ2hhaW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmlzUGF1c2VkKCkpIHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGlzdCA9IGluc3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAm
JiBsaXN0LmNvbnRhaW5zKHRoaXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmco
KTtcblx0fVxuXG59KTtcblxuRnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7
XG5cdHJldHVybiAodG8gLSBmcm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9u
cyA9IHsnc2hvcnQnOiAyNTAsICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGds
b2JhbCB0aW1lcnNcblxudmFyIGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxv
b3AgPSBmdW5jdGlvbigpe1xuXHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9
IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlm
IChpbnN0YW5jZSkgaW5zdGFuY2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3Rh
bmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5z
dGFuY2VzW2Zwc10gPSBbXSk7XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBz
XSkgdGltZXJzW2Zwc10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwg
bGlzdCk7XG59O1xuXG52YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxp
c3QgPSBpbnN0YW5jZXNbZnBzXTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7
XG5cdFx0aWYgKCFsaXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5z
dGFuY2VzW2Zwc107XG5cdFx0XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zw
c10pO1xuXHRcdH1cblx0fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1Nc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5
IEZ4LlR3ZWVuLCBGeC5Nb3JwaCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRngu
Q1NTXG5cbi4uLlxuKi9cblxuRnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxc
blxuXHQvL3ByZXBhcmVzIHRoZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVu
Y3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29u
dmVydCh2YWx1ZXMpO1xuXHRcdHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtc
blx0XHRpZiAodG8gPT0gbnVsbCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxl
bWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51
bml0O1xuXHRcdFx0Ly8gYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIv
ZngvYmxvYi9tYXN0ZXIvZnguanMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBl
b2YgZnJvbSA9PSAnc3RyaW5nJyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAm
JiBwYXJzZUZsb2F0KGZyb20pICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3Bl
cnR5LCB0byArIHVuaXQpO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExl
ZnQgb3IgcGl4ZWxXaWR0aFxuXHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRc
dFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxD
YXNlKCldO1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFk
YXB0ZWQgZnJvbSBEZWFuIEVkd2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAw
Ny8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0g
ZWxlbWVudC5zdHlsZS5sZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8g
KyB1bml0O1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0
XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0
XHR9XG5cdFx0XHRcdGZyb20gPSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkg
KiAocGFyc2VGbG9hdChmcm9tKSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9w
ZXJ0eSwgZnJvbSArIHVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRo
aXMucGFyc2UoZnJvbSksIHRvOiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMg
YSB2YWx1ZSBpbnRvIGFuIGFycmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2
YWx1ZSA9IEZ1bmN0aW9uLmNvbnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZh
bHVlID09ICdzdHJpbmcnKSA/IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVl
KTtcblx0XHRyZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJp
bmcodmFsKTtcblx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRngu
Q1NTLlBhcnNlcnMsIGZ1bmN0aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJu
O1xuXHRcdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChw
YXJzZWQgfHwgcGFyc2VkID09PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBh
cnNlcn07XG5cdFx0XHR9KTtcblx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBh
cnNlcjogRnguQ1NTLlBhcnNlcnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9
KTtcblx0fSxcblxuXHQvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0
cywgdXNpbmcgdGhlaXIgcGFyc2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywg
ZGVsdGEpe1xuXHRcdHZhciBjb21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0
aCwgdG8ubGVuZ3RoKSkudGltZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2
YWx1ZTogZnJvbVtpXS5wYXJzZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwg
ZGVsdGEpLCBwYXJzZXI6IGZyb21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQu
JGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBj
b21wdXRlZDtcblx0fSxcblxuXHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRz
ZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdm
eDpjc3M6dmFsdWUnKSB2YWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5l
ZCA9IFtdO1xuXHRcdHZhbHVlLmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0g
cmV0dXJuZWQuY29uY2F0KGJpdC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0
fSk7XG5cdFx0cmV0dXJuIHJldHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdl
IHRvIGFuIGVsZW1lbnRcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2
YWx1ZSwgdW5pdCl7XG5cdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2
YWx1ZSwgdW5pdCkpO1xuXHR9LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0
byBmaW5kIHRoZSB2YWx1ZXMgZm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNl
bGVjdG9yKXtcblx0XHRpZiAoRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5D
YWNoZVtzZWxlY3Rvcl07XG5cdFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdF
eHAoJ14nICsgc2VsZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJj
aFN0eWxlcyA9IGZ1bmN0aW9uKHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0
aW9uKHJ1bGUpe1xuXHRcdFx0XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5
bGVzKHJ1bGUucnVsZXMgfHwgcnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdGlmICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2Vs
ZWN0b3JUZXh0ID0gKHJ1bGUuc2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxh
Y2UoL15cXHcrLywgZnVuY3Rpb24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2Uo
KTtcblx0XHRcdFx0fSkgOiBudWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2Vs
ZWN0b3JUZXN0LnRlc3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFj
aChFbGVtZW50LlN0eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAo
IXJ1bGUuc3R5bGVbc3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47
XG5cdFx0XHRcdFx0dmFsdWUgPSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRc
dHRvW3N0eWxlXSA9ICgoL15yZ2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDog
dmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2go
ZG9jdW1lbnQuc3R5bGVTaGVldHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0g
c2hlZXQuaHJlZjtcblx0XHRcdGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAm
JiBocmVmLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFy
IHJ1bGVzID0gc2hlZXQucnVsZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHls
ZXMocnVsZXMpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0g
dG87XG5cdH1cblxufSk7XG5cbkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9
IHtcblxuXHRDb2xvcjoge1xuXHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAo
dmFsdWUubWF0Y2goL14jWzAtOWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0
cnVlKTtcblx0XHRcdHJldHVybiAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxc
ZCspLFxccyooXFxkKykvKSkpID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFs
c2U7XG5cdFx0fSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRc
dFx0cmV0dXJuIGZyb20ubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1h
dGgucm91bmQoRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xu
XHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5t
YXAoTnVtYmVyKTtcblx0XHR9XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNl
RmxvYXQsXG5cdFx0Y29tcHV0ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUsIHVuaXQpe1xuXHRcdFx0cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xu
XHRcdH1cblx0fSxcblxuXHRTdHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChm
YWxzZSksXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBv
bmU7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVy
bztcblx0XHR9XG5cdH1cblxufTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxu
ZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55
IG51bWJlciBvZiBDU1MgcHJvcGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qg
b2YgcnVsZXMsIG9yIENTUyBiYXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5c
bi4uLlxuKi9cblxuRnguTW9ycGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxc
blxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVs
ZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBh
cmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5
cGVvZiBub3cgPT0gJ3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2
YXIgcCBpbiBub3cpIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9w
dGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rp
b24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBp
biBmcm9tKSBub3dbcF0gPSB0aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRc
dHJldHVybiBub3c7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRc
dGlmICghdGhpcy5jaGVjayhwcm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVv
ZiBwcm9wZXJ0aWVzID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVy
dGllcyk7XG5cdFx0dmFyIGZyb20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHBy
b3BlcnRpZXMpe1xuXHRcdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQs
IHAsIHByb3BlcnRpZXNbcF0pO1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0
dG9bcF0gPSBwYXJzZWQudG87XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0
byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6
IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9w
dGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFt
b3JwaCl7XG5cdFx0XHRtb3JwaCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9
KTtcblx0XHRcdHRoaXMuc3RvcmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4g
bW9ycGg7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5j
dGlvbihwcm9wcyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25z
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0
byBiZSB1c2VkIHdpdGggYW55IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQ
ZW5uZXIsIDxodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFu
ZCBvcHRpbWl6ZWQgdG8gYmUgdXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxu
cHJvdmlkZXM6IEZ4LlRyYW5zaXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxu
XHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9u
cy50cmFuc2l0aW9uIHx8IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0
eXBlb2YgdHJhbnMgPT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgn
OicpO1xuXHRcdFx0dHJhbnMgPSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNb
ZGF0YVswXV0gfHwgdHJhbnNbZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFb
MV0pIHRyYW5zID0gdHJhbnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsy
XSA/IGRhdGFbMl0uY2FwaXRhbGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5z
O1xuXHR9XG5cbn0pO1xuXG5GeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFy
YW1zKXtcblx0cGFyYW1zID0gQXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0g
ZnVuY3Rpb24ocG9zKXtcblx0XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07
XG5cdHJldHVybiBPYmplY3QuYXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxu
XHRcdGVhc2VPdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24o
MSAtIHBvcywgcGFyYW1zKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAocG9zIDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6
ICgyIC0gdHJhbnNpdGlvbigyICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0
fSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8p
e1xuXHRcdHJldHVybiB6ZXJvO1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRl
bmQgPSBmdW5jdGlvbih0cmFuc2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJh
bnNpdGlvbnMpIEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24o
dHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtc
blxuXHRQb3c6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhb
MF0gfHwgNik7XG5cdH0sXG5cblx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgu
cG93KDIsIDggKiAocCAtIDEpKTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRy
ZXR1cm4gMSAtIE1hdGguc2luKE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rp
b24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxu
XG5cdEJhY2s6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0
Qm91bmNlOiBmdW5jdGlvbihwKXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAs
IGIgPSAxOyAxOyBhICs9IGIsIGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAv
IDExKXtcblx0XHRcdFx0dmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEg
KiBwKSAvIDQsIDIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHZhbHVlO1xuXHR9LFxuXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBN
YXRoLnBvdygyLCAxMCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYg
eFswXSB8fCAxKSAvIDMpO1xuXHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQn
LCAnUXVpbnQnXS5lYWNoKGZ1bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9u
c1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVy
biBNYXRoLnBvdyhwLCBpICsgMik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRngu
VHdlZW5cblxuZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNp
dGlvbiBhbnkgQ1NTIHByb3BlcnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBF
bGVtZW50LmZhZGUsIEVsZW1lbnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rp
b24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0g
ZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5c
blx0c2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0
aCA9PSAxKXtcblx0XHRcdG5vdyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnBy
b3BlcnR5IHx8IHRoaXMub3B0aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIo
dGhpcy5lbGVtZW50LCBwcm9wZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7
XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xu
XHRcdHZhciBhcmdzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVy
dHkgPSB0aGlzLm9wdGlvbnMucHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJz
ZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0
XHRyZXR1cm4gdGhpcy5wYXJlbnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7
XG5cbkVsZW1lbnQuUHJvcGVydGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0
d2VlbiA9IHRoaXMucmV0cmlldmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0
d2VlbiA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMu
c3RvcmUoJ3R3ZWVuJywgdHdlZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxu
fTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0
byk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2
YXIgZmFkZSA9IHRoaXMuZ2V0KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5h
cHBlbmQoYXJndW1lbnRzKSwgdG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3Nb
MV0gPSAndG9nZ2xlJztcblx0XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93Jzog
bWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBt
ZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpc
blx0XHRcdFx0dmFyIGZsYWcgPSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0
eWxlKCdvcGFjaXR5JykgPT0gMSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRc
dGFyZ3NbMV0gPSBmbGFnID8gMCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycs
ICFmbGFnKTtcblx0XHRcdFx0dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRk
ZWZhdWx0OiBtZXRob2QgPSAnc3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5l
bGltaW5hdGUoJ2ZhZGU6ZmxhZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdz
KTtcblx0XHR2YXIgdG8gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9k
ID09ICdzZXQnKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8g
J2hpZGRlbicgOiAndmlzaWJsZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRp
ZiAoZmFkZS4kY2hhaW4ubGVuZ3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xu
XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7
XG5cdFx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRc
dH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRp
ZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhp
cy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlz
LmNhbGxDaGFpbigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0aGlnaGxpZ2h0OiBmdW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5c
dFx0XHRlbmQgPSB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJl
bnQnKSA/ICcjZmZmJyA6IGVuZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3
ZWVuJyk7XG5cdFx0dHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2Zm
ZmY4OCcsIGVuZCkuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tn
cm91bmQtY29sb3InLCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0
XHR0d2Vlbi5jYWxsQ2hhaW4oKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246
IFBvd2VyZnVsIGFsbCBwdXJwb3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3Qu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxl
bWVudCwgQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5c
bnByb3ZpZGVzOiBSZXF1ZXN0XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0
eSA9IGZ1bmN0aW9uKCl7fSxcblx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBu
ZXcgQnJvd3Nlci5SZXF1ZXN0KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcg
Q2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5U
aGVuYWJsZV0sXG5cblx0b3B0aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30s
XG5cdFx0b25Mb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVz
czogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30s
XG5cdFx0b25DYW5jZWw6IGZ1bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJl
c3BvbnNlVGV4dCwgcmVzcG9uc2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIp
e30sXG5cdFx0b25FeGNlcHRpb246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRc
dG9uVGltZW91dDogZnVuY3Rpb24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAn
Jyxcblx0XHR3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRh
OiAnJyxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRw
UmVxdWVzdCcsXG5cdFx0XHQnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBh
cHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxc
blx0XHRmb3JtYXQ6IGZhbHNlLFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25v
cmUnLFxuXHRcdGlzU3VjY2VzczogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJs
RW5jb2RlZDogdHJ1ZSxcblx0XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czog
ZmFsc2UsXG5cdFx0ZXZhbFJlc3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5v
Q2FjaGU6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHRoaXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9
LFxuXG5cdG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhy
O1xuXHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtc
blx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVu
Y3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7
XG5cdFx0XHR0aGlzLnN0YXR1cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5c
dFx0fS5iaW5kKHRoaXMpKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5c
dFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQg
PSBlbXB0eTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50
aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3Bv
bnNlID0ge3RleHQ6IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5y
ZXNwb25zZVhNTH07XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0
aGlzLnN0YXR1cykpXG5cdFx0XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlz
LnJlc3BvbnNlLnhtbCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5c
blx0aXNTdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztc
blx0XHRyZXR1cm4gKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRp
c1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxu
XG5cdHByb2Nlc3NTY3JpcHRzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25z
LmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRl
cignQ29udGVudC10eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVy
biB0ZXh0LnN0cmlwU2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5c
dHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5w
cm9jZXNzU2NyaXB0cyh0ZXh0KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQs
IHhtbDogeG1sfSk7XG5cdH0sXG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJn
dW1lbnRzKS5jYWxsQ2hhaW4oKTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMub25GYWlsdXJlKCk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4
aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtc
blx0fSxcblxuXHRsb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVu
dCgnbG9hZHN0YXJ0JywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBm
dW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0
aGlzLnhocl0pO1xuXHR9LFxuXG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJl
RXZlbnQoJ3RpbWVvdXQnLCB0aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3Rp
bWVvdXQnLCB4aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihu
YW1lLCB2YWx1ZSl7XG5cdFx0dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4g
RnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJl
c3BvbnNlSGVhZGVyKG5hbWUpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6
IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYg
KCF0aGlzLmNoZWNrKG9wdGlvbnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5p
c1N1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRc
dHRoaXMucnVubmluZyA9IHRydWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtc
blx0XHRpZiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9
IHtkYXRhOiBvcHRpb25zfTtcblxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0
aW9ucyA9IE9iamVjdC5hcHBlbmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhv
ZDogb2xkLm1ldGhvZH0sIG9wdGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1
cmwgPSBTdHJpbmcob3B0aW9ucy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2Vy
Q2FzZSgpO1xuXG5cdFx0c3dpdGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVu
dCc6IGRhdGEgPSBkb2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmlu
ZyhkYXRhKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2
YXIgZm9ybWF0ID0gJ2Zvcm1hdD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEg
PSAoZGF0YSkgPyBmb3JtYXQgKyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZW11bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0
aG9kKSl7XG5cdFx0XHR2YXIgX21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRk
YXRhID0gKGRhdGEpID8gX21ldGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0
aG9kID0gJ3Bvc3QnO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAm
JiBbJ3Bvc3QnLCAncHV0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2Rpbmcg
PSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5l
bmNvZGluZyA6ICcnO1xuXHRcdFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0
aWYgKCF1cmwpIHVybCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRy
aW1Qb3NpdGlvbiA9IHVybC5sYXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24g
PiAtMSAmJiAodHJpbVBvc2l0aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJs
LnN1YnN0cigwLCB0cmltUG9zaXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hl
KVxuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3Ry
aW5nLnVuaXF1ZUlEKCk7XG5cblx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1l
dGhvZCA9PSAnZGVsZXRlJykpe1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEg
PyAnJicgOiAnPycpICsgZGF0YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZh
ciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5v
bmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9n
cmVzcyA9IHRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3Blbiht
ZXRob2QudG9VcHBlckNhc2UoKSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9u
cy51c2VyLCB0aGlzLm9wdGlvbnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndp
dGhDcmVkZW50aWFscykgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRl
bnRpYWxzID0gdHJ1ZTtcblxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3Rh
dGVDaGFuZ2UuYmluZCh0aGlzKTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVu
Y3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhl
YWRlcihrZXksIHZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVF
dmVudCgnZXhjZXB0aW9uJywgW2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3Jl
YXNvbjogJ2V4Y2VwdGlvbicsIHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0
XHR9LCB0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRp
bmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9
XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0
XHRpZiAoIXRoaXMub3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxz
ZSBpZiAodGhpcy5vcHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVs
YXkodGhpcy5vcHRpb25zLnRpbWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRo
aXM7XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xu
XHRcdHhoci5hYm9ydCgpO1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91
dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIu
b25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhy
Lm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5l
dyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0
dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1
dCcsICdkZWxldGUnLCAncGF0Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVM
RVRFJywgJ1BBVENIJywgJ0hFQUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNb
bWV0aG9kXSA9IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRo
b2Q6IG1ldGhvZFxuXHRcdH07XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBk
YXRhO1xuXHRcdHJldHVybiB0aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0
LmltcGxlbWVudChtZXRob2RzKTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0
c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJyku
Y2FuY2VsKCk7XG5cdFx0c2VuZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmll
dmUoJ3NlbmQnKTtcblx0XHRpZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtc
blx0XHRcdFx0ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21l
dGhvZCcpIHx8ICdwb3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRc
dFx0dGhpcy5zdG9yZSgnc2VuZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0
fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtc
blx0XHR2YXIgc2VuZGVyID0gdGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0
YTogdGhpcywgdXJsOiB1cmwgfHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1M
XG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRk
aXRpb25hbCBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0
XVxuXG5wcm92aWRlczogUmVxdWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1
cGRhdGU6IGZhbHNlLFxuXHRcdGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUs
XG5cdFx0ZmlsdGVyOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0
L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0
c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMs
IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0
cmlwU2NyaXB0cyhmdW5jdGlvbihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9
IHNjcmlwdDtcblx0XHR9KTtcblxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2go
Lzxib2R5W14+XSo+KFtcXHNcXFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVz
cG9uc2UuaHRtbCA9IG1hdGNoWzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdicp
LnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAu
Y2hpbGROb2Rlcztcblx0XHRyZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0
aW9ucy5maWx0ZXIgfHwgJyonKTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2Uu
dHJlZSA9IHJlc3BvbnNlLmVsZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0
XHR2YXIgdXBkYXRlID0gZG9jdW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0
XHRpZiAob3B0aW9ucy5maWx0ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5c
dFx0XHRlbHNlIHVwZGF0ZS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2Ug
aWYgKG9wdGlvbnMuYXBwZW5kKXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRp
b25zLmFwcGVuZCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRz
LnJldmVyc2UoKS5pbmplY3QoYXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAu
Z2V0Q2hpbGRyZW4oKSk7XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93
c2VyLmV4ZWMocmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNw
b25zZS50cmVlLCByZXNwb25zZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2
YXNjcmlwdCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50
czogcmVzcG9uc2UuZWxlbWVudHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJl
c3BvbnNlLmphdmFzY3JpcHR9KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxv
YWQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMu
Z2V0KCdsb2FkJykuY2FuY2VsKCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9
IHRoaXMucmV0cmlldmUoJ2xvYWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5l
dyBSZXF1ZXN0LkhUTUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMs
IG1ldGhvZDogJ2dldCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9
XG5cdFx0cmV0dXJuIGxvYWQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dGxvYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5Lmxpbmso
YXJndW1lbnRzLCB7ZGF0YTogVHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxu
ZGVzY3JpcHRpb246IEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cblNlZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWly
ZXM6IFtBcnJheSwgU3RyaW5nLCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxu
XG4uLi5cbiovXG5cbmlmICh0eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0g
e307XG5cblxuXG4oZnVuY3Rpb24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYics
ICdcXHQnOiAnXFxcXHQnLCAnXFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAn
XFxcXHInLCAnXCInIDogJ1xcXFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2Nh
cGUgPSBmdW5jdGlvbihjaHIpe1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAo
JzAwMDAnICsgY2hyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xu
XG5KU09OLnZhbGlkYXRlID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJl
cGxhY2UoL1xcXFwoPzpbXCJcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5c
blx0XHRcdFx0XHRyZXBsYWNlKC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8
LT9cXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0
XHRyZXBsYWNlKC8oPzpefDp8LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15b
XFxdLDp7fVxcc10qJC8pLnRlc3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5z
dHJpbmdpZnkgPyBmdW5jdGlvbihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtc
bn0gOiBmdW5jdGlvbihvYmope1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50
b0pTT04oKTtcblxuXHRzd2l0Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxu
XHRcdFx0cmV0dXJuICdcIicgKyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBl
c2NhcGUpICsgJ1wiJztcblx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2Jq
Lm1hcChKU09OLmVuY29kZSkuY2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNl
ICdoYXNoJzpcblx0XHRcdHZhciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFs
dWUpO1xuXHRcdFx0XHRpZiAoanNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6
JyArIGpzb24pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xu
XHRcdGNhc2UgJ251bWJlcic6IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0
Y2FzZSAnbnVsbCc6IHJldHVybiAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5c
bkpTT04uc2VjdXJlID0gdHJ1ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywg
c2VjdXJlKXtcblx0aWYgKCFzdHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJl
dHVybiBudWxsO1xuXG5cdGlmIChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7
XG5cdGlmIChzZWN1cmUpe1xuXHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShz
dHJpbmcpO1xuXHRcdGlmICghSlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3Io
J0pTT04gY291bGQgbm90IGRlY29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5k
IHRoZSB2YWx1ZSBpcyBub3Qgc2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsg
c3RyaW5nICsgJyknKTtcbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5K
U09OXG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGgg
YWRkaXRpb25hbCBtZXRob2RzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09O
XVxuXG5wcm92aWRlczogUmVxdWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
Km9uRXJyb3I6IGZ1bmN0aW9uKHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5c
dH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQo
b3B0aW9ucyk7XG5cdFx0T2JqZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2Nl
cHQnOiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0
fSk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5c
dFx0dHJ5IHtcblx0XHRcdGpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0
ZXh0LCB0aGlzLm9wdGlvbnMuc2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0
aGlzLmZpcmVFdmVudCgnZXJyb3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0
XHR9XG5cdFx0aWYgKGpzb24gPT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0dGhpcy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJl
c29sdmUoe2pzb246IGpzb24sIHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogQ29va2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcs
IHJlYWRpbmcsIGFuZCBkZWxldGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkg
UGV0ZXItUGF1bCBLb2NoIChodHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09w
dGlvbnMsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29v
a2llID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6
IHtcblx0XHRwYXRoOiAnLycsXG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFs
c2UsXG5cdFx0c2VjdXJlOiBmYWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5j
b2RlOiB0cnVlLFxuXHRcdGh0dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRP
cHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5lbmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVl
KTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0
aGlzLm9wdGlvbnMuZG9tYWluO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0g
JzsgcGF0aD0nICsgdGhpcy5vcHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJh
dGlvbil7XG5cdFx0XHR2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUo
ZGF0ZS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAx
MDAwKTtcblx0XHRcdHZhbHVlICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtc
blx0XHR9XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xu
XHRcdHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVl
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IHZhbHVlID0gdGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxz
KicgKyB0aGlzLmtleS5lc2NhcGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAo
dmFsdWUpID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0
ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVy
Z2Uoe30sIHRoaXMub3B0aW9ucywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUsIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZh
bHVlKTtcbn07XG5cbkNvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBD
b29raWUoa2V5KS5yZWFkKCk7XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwg
b3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xu
fTtcblxuLypcbi0tLVxuXG5uYW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
dGhlIGN1c3RvbSBldmVudCBkb21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbQnJvd3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlk
ZXM6IFtET01SZWFkeSwgRG9tUmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywg
ZG9jdW1lbnQpe1xuXG52YXIgcmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNo
b3VsZFBvbGwsXG5cdHRpbWVyLFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpO1xuXG52YXIgZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQo
dGltZXIpO1xuXHRpZiAoIXJlYWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1
ZTtcblx0XHRkb2N1bWVudC5yZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJl
YWR5KS5yZW1vdmVMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1
bWVudC5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVh
ZHknKTtcblx0fVxuXHQvLyBjbGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cg
PSB0ZXN0RWxlbWVudCA9IG51bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRm
b3IgKHZhciBpID0gY2hlY2tzLmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRk
b21yZWFkeSgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5c
bnZhciBwb2xsID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFj
aGVjaygpKSB0aW1lciA9IHNldFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRk
TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4v
LyBkb1Njcm9sbCB0ZWNobmlxdWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53
Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93
cyB3aGVuIHRoZSBET00gaXMgbm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIg
ZG9TY3JvbGxXb3JrcyA9IGZ1bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9T
Y3JvbGwoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuLy8gSWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0
byBkZXRlcm1pbmUgZG9tcmVhZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxl
bWVudC5kb1Njcm9sbCAmJiAhZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3Jv
bGxXb3Jrcyk7XG5cdHNob3VsZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChk
b2N1bWVudC5yZWFkeVN0YXRlKSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUg
PSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0
YXRlID09ICdjb21wbGV0ZScpO1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBk
b2N1bWVudCkgZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5lbHNlIHNob3VsZFBvbGwgPSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5F
bGVtZW50LkV2ZW50cy5kb21yZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRp
ZiAocmVhZHkpIGZuLmNhbGwodGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRv
bXJlYWR5IGZpcmVzIGJlZm9yZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNl
OiAnbG9hZCcsXG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlz
ID09IHdpbmRvdykgZm4uY2FsbCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdGlmICh0aGlzID09IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVs
ZXRlIEVsZW1lbnQuRXZlbnRzLmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59
O1xuXG4vLyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFk
ZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3
aW5kb3csIGRvY3VtZW50KTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8qIE1vb1Rvb2xzOiB0aGUg
amF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmln
aHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL21v
b3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIgQnVpbGQ6IGh0dHBzOi8vbW9vdG9vbHMubmV0L2Nv
cmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgwN2IxNzNkNWRlZmY2NzNmY1xuKi9cbi8qXG4tLS1c
blxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlvbjogVGhlIGhlYXJ0IG9mIE1vb1Rvb2xzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIw
MDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLyku
XG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0dHA6Ly9tb290b29s
cy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3BpcmF0aW9uOlxuICAtIENsYXNzIGltcGxlbWVudGF0
aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9n
LzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2FyZHMsIFtHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl
cy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBpbnNwaXJlZCBieSBb
UHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmlnaHQgKGMpIDIwMDUt
MjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuXG5wcm92aWRlczogW0NvcmUsIE1vb1Rvb2xzLCBU
eXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV1cblxuLi4uXG4qL1xuLyohIE1vb1Rvb2xz
OiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBj
b3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXShodHRw
czovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4qL1xuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuTW9vVG9v
bHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcsXG5cdGJ1aWxkOiAnNTI5NDIyODcyYWRmZmY0MDFi
OTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07XG5cbi8vIHR5cGVPZiwgaW5zdGFuY2VPZlxuXG52
YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0g
bnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYgKGl0ZW0uJGZhbWlseSAhPSBudWxsKSByZXR1cm4g
aXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0ZW0ubm9kZU5hbWUpe1xuXHRcdGlmIChpdGVtLm5v
ZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVudCc7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MykgcmV0dXJuICgvXFxTLykudGVzdChpdGVtLm5vZGVWYWx1ZSkgPyAndGV4dG5vZGUnIDogJ3do
aXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyl7
XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0pIHJldHVybiAnYXJndW1lbnRzJztcblx0XHRpZiAo
J2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29sbGVjdGlvbic7XG5cdH1cblxuXHRyZXR1cm4gdHlw
ZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFuY2VPZiA9IGZ1bmN0
aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBmYWxzZTtcblx0
dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5jb25zdHJ1Y3Rvcjtc
blx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0XHRpZiAoY29uc3RydWN0b3IgPT09IG9iamVjdCkg
cmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5wYXJlbnQ7XG5cdH1c
blx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVtLmhhc093blByb3BlcnR5KSByZXR1cm4gZmFsc2U7
XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVjdDtcbn07XG5c
bnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5c
bi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJsZXMgPSB0cnVlO1xuZm9yICh2YXIgaSBpbiB7dG9T
dHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7XG5pZiAoZW51bWVyYWJsZXMpIGVudW1lcmFi
bGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAncHJv
cGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAnY29uc3Ry
dWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmplY3QsIGZu
LCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51bWVyYWJsZXMubGVu
Z3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVudW1lcmFibGVzW2ldO1xuXHRcdC8vIHNpZ25hdHVy
ZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9hZFNldHRlciBjYW4gZGlyZWN0bHkgcGFzcyB0aGVc
blx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdpdGhvdXQgc3dhcHBpbmcgYXJndW1lbnRzLlxuXHRc
dGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwoYmluZCwgaywgb2Jq
ZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4PiovXG5cbi8vIEZ1bmN0aW9uIG92ZXJsb2FkaW5n
XG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5v
dmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztc
blx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmIChhID09IG51bGwpIHJldHVybiB0aGlz
O1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlwZW9mIGEgIT0gJ3N0cmluZycpe1xuXHRcdFx0Zm9y
ICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhpcywgaywgYVtrXSk7XG5cdFx0XHQvKjxsdElFOD4q
L1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KGEsIHNlbGYsIHRoaXMpO1xuXHRc
dFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuY2FsbCh0aGlzLCBhLCBi
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5
cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRo
aXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtcblx0XHR2YXIgYXJncywgcmVzdWx0O1xuXHRcdGlm
ICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJncyA9IGE7XG5cdFx0ZWxzZSBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0ZWxzZSBpZiAodXNlUGx1cmFsKSBh
cmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtcblx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJnc1tpXV0gPSBzZWxm
LmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IHNlbGYu
Y2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn07XG5cbkZ1
bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpc1tr
ZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5p
bXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpcy5wcm90b3R5cGVba2V5XSA9
IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG4vLyBGcm9tXG5cbnZhciBzbGljZSA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xu
XHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107XG5cdHJldHVybiAoVHlwZS5pc0VudW1lcmFi
bGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVPZihpdGVtKSA9PSAn
YXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dO1xufTtcblxuRnVuY3Rp
b24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSAn
ZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBpdGVtO1xuXHR9O1xu
fTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgbnVtYmVyID0g
cGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJuIGlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiBu
dWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIGl0
ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlvbi5mcm9tID0gRnVuY3Rpb24uY29udmVydDtcbk51
bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7XG5TdHJpbmcuZnJvbSA9IFN0cmluZy5jb252ZXJ0
O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0aGlkZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRkZW4gPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kcHJvdGVjdGVkID0gdHJ1
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLy8gVHlwZVxuXG52YXIgVHlwZSA9
IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCl7XG5cdGlmIChuYW1lKXtcblx0XHR2
YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHR5cGVDaGVjayA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gbG93ZXIpO1xuXHRcdH07
XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVDaGVjaztcblx0XHRpZiAob2JqZWN0ICE9
IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0gKGZ1bmN0aW9uKCl7XG5c
dFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRcdH0pLmhpZGUoKTtcblx0XHRcdFxuXHRcdH1cblx0
fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0b2JqZWN0LmV4dGVu
ZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1Y3RvciA9IFR5cGU7XG5cdG9iamVjdC5wcm90b3R5
cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xuXG5cdHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIg
dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5UeXBlLmlzRW51bWVyYWJs
ZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKGl0ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRl
bS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9TdHJpbmcuY2FsbChpdGVtKSAhPSAnW29iamVjdCBG
dW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9va3MgPSB7fTtcblxudmFyIGhvb2tzT2YgPSBmdW5j
dGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90eXBlKTtcblx0
cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29rc1t0eXBlXSA9IFtdKTtcbn07XG5cbnZhciBpbXBs
ZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4k
aGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTtcblxuXHRmb3Ig
KHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgaG9vayA9IGhvb2tz
W2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykgPT0gJ3R5cGUnKSBpbXBsZW1lbnQuY2FsbChob29r
LCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2UgaG9vay5jYWxsKHRoaXMsIG5hbWUsIG1ldGhvZCk7
XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTtcblx0aWYgKHBy
ZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXMucHJvdG90eXBlW25h
bWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlzW25hbWVdID09IG51bGwgJiYgdHlwZU9mKG1ldGhv
ZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNhbGwodGhpcywgbmFtZSwgZnVuY3Rpb24oaXRlbSl7
XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShpdGVtLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkp
O1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRp
ZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cdHZhciBwcmV2aW91cyA9IHRo
aXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtcblxuVHlwZS5pbXBsZW1lbnQoe1xuXG5cdGltcGxl
bWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0ZXh0ZW5kOiBleHRlbmQub3Zl
cmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczogZnVuY3Rpb24obmFtZSwgZXhpc3Rpbmcpe1xuXHRc
dGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUsIHRoaXMucHJvdG90eXBlW2V4aXN0aW5nXSk7XG5c
dH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRtaXJyb3I6IGZ1bmN0aW9uKGhvb2spe1xuXHRcdGhv
b2tzT2YodGhpcykucHVzaChob29rKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
bmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxuLy8gRGVmYXVsdCBUeXBlc1xuXG52YXIgZm9yY2Ug
PSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1ldGhvZHMpe1xuXHR2YXIgaXNUeXBlID0gKG9iamVj
dCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlwZSA9IG9iamVjdC5wcm90b3R5cGU7XG5cblx0aWYg
KGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTtcblxuXHRmb3IgKHZhciBp
ID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHR2YXIga2V5ID0gbWV0
aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBvYmplY3Rba2V5XSxcblx0XHRcdHByb3RvID0gcHJv
dG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2VuZXJpYykgZ2VuZXJpYy5wcm90ZWN0KCk7XG5cdFx0
aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0LmltcGxlbWVudChrZXksIHByb3RvLnByb3RlY3Qo
KSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtcblx0XHR2YXIgbWV0aG9kc0VudW1lcmFibGUgPSBw
cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUobWV0aG9kc1swXSk7XG5cdFx0b2JqZWN0LmZv
ckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoIW1ldGhvZHNFbnVtZXJhYmxl
KSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVttZXRob2RzW2ldXSwgbWV0aG9kc1tpXSk7
XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gcHJvdG90eXBlKSBmbi5jYWxsKHByb3Rv
dHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBmb3Jj
ZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBTdHJpbmcsIFtcblx0J2NoYXJBdCcsICdjaGFyQ29k
ZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycsICdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ21h
dGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNoJyxcblx0J3NsaWNlJywgJ3NwbGl0Jywg
J3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJpbScsICd0b0xvd2VyQ2FzZScsICd0b1VwcGVyQ2Fz
ZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5cdCdwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdmaWx0ZXInLCAnZm9yRWFjaCcsICdl
dmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAnY29udGFpbnMn
XG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5cdCd0b0V4cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAn
dG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nXG5dKSgnRnVuY3Rpb24nLCBGdW5jdGlvbiwg
W1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5kJ1xuXSkoJ1JlZ0V4cCcsIFJlZ0V4cCwgW1xuXHQn
ZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcsIE9iamVjdCwgW1xuXHQnY3JlYXRlJywgJ2RlZmlu
ZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAna2V5cycsXG5cdCdnZXRQcm90b3R5cGVP
ZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsXG5c
dCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4dGVuc2libGUnLCAnc2VhbCcsICdpc1NlYWxlZCcs
ICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgnRGF0ZScsIERhdGUsIFsnbm93J10pO1xuXG5PYmpl
Y3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCk7XG5cbkRhdGUuZXh0ZW5kKCdub3cn
LCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhuZXcgRGF0ZSk7XG59KTtcblxubmV3IFR5cGUoJ0Jv
b2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4ZXMgTmFOIHJldHVybmluZyBhcyBOdW1iZXJcblxu
TnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXtcblx0cmV0dXJuIGlzRmluaXRl
KHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7XG59LmhpZGUoKTtcblxuLy8gTnVtYmVyLnJhbmRv
bVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1heCl7XG5cdHJldHVy
biBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xufSk7
XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNcblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwh
RVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIGZu
LmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxuXHQvKjwvIUVTNT4q
L1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRBcnJheS5mb3JFYWNoKHRoaXMs
IGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuT2JqZWN0LmV4dGVu
ZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIga2V5cyA9IFtdO1xuXHRc
dGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
amVjdCwgaykpIGtleXMucHVzaChrKTtcblx0XHR9XG5cdFx0Lyo8bHRJRTg+Ki9cblx0XHRmb3JF
YWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmdW5jdGlvbihrKXtcblx0XHRcdGtleXMu
cHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwvbHRJRTg+Ki9cblx0XHRyZXR1cm4ga2V5cztcblx0
fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHRPYmplY3Qu
a2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdGZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9KTtcblx0fVxuXG59KTtcblxuT2JqZWN0
LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxuXG4vLyBBcnJheSAmIE9iamVjdCBjbG9uaW5nLCBP
YmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nXG5cbnZhciBjbG9uZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0pKXtcblx0XHRjYXNlICdhcnJheSc6IHJldHVybiBp
dGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2JqZWN0JzogcmV0dXJuIE9iamVjdC5jbG9uZShpdGVt
KTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRlbTtcblx0fVxufTtcblxuQXJyYXkuaW1wbGVtZW50
KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBpID0gdGhpcy5sZW5ndGgsIGNsb25lID0gbmV3
IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2YodGhpc1tpXSk7XG5c
dHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIgbWVyZ2VPbmUgPSBmdW5jdGlvbihzb3VyY2UsIGtl
eSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXtcblx0XHRjYXNlICdvYmpl
Y3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3VyY2Vba2V5XSkgPT0gJ29iamVjdCcpIE9iamVjdC5t
ZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7XG5cdFx0XHRlbHNlIHNvdXJjZVtrZXldID0gT2Jq
ZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXknOiBzb3Vy
Y2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogc291cmNlW2tl
eV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVybiBzb3VyY2U7XG59O1xuXG5PYmplY3QuZXh0ZW5k
KHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXtcblx0XHRpZiAodHlwZU9mKGsp
ID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VPbmUoc291cmNlLCBrLCB2KTtcblx0XHRmb3IgKHZh
ciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIG9i
amVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1lcmdl
T25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5XSk7XG5cdFx0fVxuXHRcdHJldHVybiBzb3VyY2U7
XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGNsb25lID0ge307
XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgY2xvbmVba2V5XSA9IGNsb25lT2Yob2JqZWN0
W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKG9y
aWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBs
OyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVkID0gYXJndW1lbnRzW2ldIHx8IHt9O1xuXHRcdFx0
Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBvcmlnaW5hbFtrZXldID0gZXh0ZW5kZWRba2V5XTtc
blx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsO1xuXHR9XG5cbn0pO1xuXG4vLyBPYmplY3QtbGVz
cyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0ZVNwYWNlJywgJ1RleHROb2RlJywgJ0NvbGxlY3Rp
b24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0bmV3IFR5cGUobmFtZSk7
XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZhciBVSUQgPSBEYXRlLm5vdygpO1xuXG5TdHJpbmcu
ZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiAoVUlEKyspLnRvU3RyaW5n
KDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBBcnJheVxuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gsIGNvbnRhaW5zLCBh
bmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1R5
cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4uLi5cbiovXG5cbkFycmF5LmltcGxlbWVudCh7XG5c
blx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChp
IGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0gW107XG5cdFx0Zm9yICh2YXIgdmFsdWUsIGkg
PSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspIGlmIChpIGluIHRoaXMpe1xu
XHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGks
IHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztc
blx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHR2YXIgbGVuZ3Ro
ID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0Zm9yICh2YXIgaSA9IChmcm9tIDwgMCkgPyBNYXRo
Lm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0
XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0dXJuIC0x
O1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciBsZW5ndGggPSB0
aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSByZXN1bHRzW2ld
ID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJl
c3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChp
IGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiB0cnVl
O1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0Y2xl
YW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe1xu
XHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtcblx0XHR9KTtcblx0fSxcblxuXHRpbnZva2U6IGZ1
bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRz
LCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4g
aXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdzKTtcblx0XHR9KTtcblx0fSxcblxuXHRh
c3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xuXHRcdHZhciBvYmogPSB7fSwgbGVuZ3RoID0gTWF0
aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0gPSB0aGlzW2ldO1xuXHRcdHJldHVybiBvYmo7XG5c
dH0sXG5cblx0bGluazogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRm
b3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHRcdFx0aWYgKG9iamVjdFtrZXldKHRoaXNbaV0p
KXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHRoaXNbaV07XG5cdFx0XHRcdFx0ZGVsZXRlIG9i
amVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKGl0ZW0sIGZy
b20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4T2YoaXRlbSwgZnJvbSkgIT0gLTE7XG5cdH0sXG5c
blx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFy
cmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIDogbnVsbDtc
blx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0
aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0gOiBudWxsO1xuXHR9
LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICghdGhpcy5jb250YWlucyhp
dGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbWJp
bmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0
aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5W2ldKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0Zm9yICh2YXIgaSA9IHRoaXMu
bGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSB0aGlzLnNwbGljZShp
LCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZs
YXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVP
Zih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBlID09ICdudWxsJykgY29udGludWU7XG5cdFx0XHRh
cnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ2NvbGxlY3Rp
b24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlzW2ldLCBBcnJheSkp
ID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNbaV0pO1xuXHRcdH1cblx0XHRyZXR1cm4g
YXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldICE9IG51bGwp
IHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRoZXhU
b1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCAhPSAzKSByZXR1cm4g
bnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYg
KHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybiBwYXJzZUlu
dCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoYXJyYXkpID8gcmdiIDogJ3JnYign
ICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRoaXMubGVuZ3RoID09
IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3BhcmVudCc7XG5cdFx0
dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKXtcblx0XHRcdHZh
ciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2KTtcblx0XHRcdGhleC5wdXNoKChiaXQu
bGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhcnJh
eSkgPyBoZXggOiAnIycgKyBoZXguam9pbignJyk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBGdW5jdGlvbiBQcm90
b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogRnVuY3Rpb25c
blxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRlbmQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtc
blx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhcmd1bWVudHNbaV0oKTtcblx0XHRcdH0gY2F0
Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxufSk7XG5cbkZ1bmN0aW9u
LmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oYXJncywgYmluZCl7XG5cdFx0dHJ5
IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZlcnQoYXJncykpO1xu
XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdC8qPCFFUzUt
YmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0aGF0KXtcblx0XHR2YXIgc2VsZiA9IHRoaXMsXG5c
dFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGljZShhcmd1bWVudHMs
IDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5jdGlvbigpe307XG5cblx0XHR2YXIgYm91bmQgPSBm
dW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRleHQgPSB0aGF0LCBsZW5ndGggPSBhcmd1bWVudHMu
bGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCl7XG5cdFx0XHRcdEYucHJv
dG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5cdFx0XHRcdGNvbnRleHQgPSBuZXcgRjtcblx0XHRc
dH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFyZ3MgJiYgIWxlbmd0aClcblx0XHRcdFx0PyBzZWxm
LmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBzZWxmLmFwcGx5KGNvbnRleHQsIGFyZ3MgJiYgbGVu
Z3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBhcmdzIHx8IGFyZ3Vt
ZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0IDogY29udGV4dDtc
blx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtcblx0fSxcblx0Lyo8LyFFUzUtYmluZD4qL1xuXG5c
dHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRp
ZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRyZXR1cm4g
ZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBzZWxmLmFwcGx5KGJpbmQsIGFyZ3MgfHwgYXJndW1l
bnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRlbGF5OiBmdW5jdGlvbihkZWxheSwgYmluZCwgYXJn
cyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6
IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9LFxuXG5cdHBlcmlvZGljYWw6IGZ1bmN0aW9uKHBl
cmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRJbnRlcnZhbCh0aGlzLnBhc3Mo
KGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBwZXJpb2RpY2FsKTtcblx0fVxuXG59
KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogTnVtYmVyXG5cbmRlc2NyaXB0aW9uOiBDb250YWlu
cyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMsIGFuZCBjZWlsLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlk
ZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51bWJlci5pbXBsZW1lbnQoe1xuXG5cdGxpbWl0OiBm
dW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWlu
LCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uKHByZWNpc2lvbil7XG5cdFx0cHJl
Y2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVkKHByZWNpc2lvbiA8
IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQodGhpcyAqIHByZWNp
c2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5cblx0dGltZXM6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChiaW5kLCBpLCB0aGlz
KTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0
KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFy
c2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH1cblxufSk7XG5cbk51bWJlci5hbGlhcygnZWFj
aCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24obWF0aCl7XG5cbnZhciBtZXRob2RzID0ge307XG5c
bm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtcblx0aWYgKCFOdW1iZXJbbmFtZV0pIG1ldGhvZHNb
bmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBNYXRoW25hbWVdLmFwcGx5KG51bGwsIFt0
aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChhcmd1bWVudHMpKSk7XG5cdH07XG59KTtcblxuTnVt
YmVyLmltcGxlbWVudChtZXRob2RzKTtcblxufSkoWydhYnMnLCAnYWNvcycsICdhc2luJywgJ2F0
YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3MnLCAnZXhwJywgJ2Zsb29yJywgJ2xvZycsICdtYXgn
LCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3FydCcsICd0YW4nXSk7XG5cbi8qXG4tLS1cblxubmFt
ZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJvdG90eXBlcyBsaWtl
IGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlLCBBcnJheV1cblxucHJvdmlkZXM6IFN0
cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5pbXBsZW1lbnQoe1xuXG5cdC8vPCFFUzY+XG5cdGNv
bnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGluZGV4KXtcblx0XHRyZXR1cm4gKGluZGV4ID8gU3Ry
aW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhPZihzdHJpbmcpID4g
LTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5cdHRlc3Q6IGZ1bmN0aW9uKHJlZ2V4LCBwYXJhbXMp
e1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8gcmVnZXggOiBuZXcg
UmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7XG5cdH0sXG5cblx0dHJpbTog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15cXHMrfFxccysk
L2csICcnKTtcblx0fSxcblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5n
KHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5cdH0sXG5cblx0Y2FtZWxDYXNl
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvLVxcRC9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNl
KCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlwaGVuYXRlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0
cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiBtYXRj
aC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGVzY2FwZVJlZ0V4cDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xc
XVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Up
e1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0fSxcblxuXHR0b0Zs
b2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5c
dGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIGhleCA9IFN0cmluZyh0aGlzKS5t
YXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwyfSkoXFx3ezEsMn0pJC8pO1xuXHRcdHJldHVybiAo
aGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHJn
YlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIHJnYiA9IFN0cmluZyh0aGlzKS5tYXRj
aCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSGV4KGFycmF5KSA6
IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdleHApe1xu
XHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShyZWdleHAgfHwgKC9cXFxcP1xceyhbXnt9
XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7XG5cdFx0XHRpZiAobWF0Y2guY2hhckF0
KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNoLnNsaWNlKDEpO1xuXHRcdFx0cmV0dXJuIChvYmpl
Y3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0gOiAnJztcblx0XHR9KTtcblx0fVxuXG59
KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogQnJvd3NlclxuXG5kZXNjcmlwdGlvbjogVGhlIEJy
b3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93c2VyIGluaXRpYWxpemF0aW9uLCBXaW5kb3cgYW5k
IERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIgSGFzaC5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIEZ1bmN0aW9uLCBOdW1iZXIsIFN0cmluZ11cblxu
cHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3csIERvY3VtZW50XVxuXG4uLi5cbiovXG5cbihmdW5j
dGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xudmFyIHdpbmRvdyA9IGRv
Y3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKHVhLCBwbGF0Zm9y
bSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcblx0cGxhdGZvcm0gPSAocGxhdGZvcm0gPyBw
bGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycpO1xuXG5cdC8vIGNocm9tZSBpcyBpbmNsdWRlZCBp
biB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBjaGVjayBmb3IgZWRnZSBmaXJzdCxcblx0Ly8gYmVm
b3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLlxuXHR2YXIgVUEgPSB1YS5tYXRjaCgvKGVkZ2Up
W1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtcblx0aWYgKCFVQSl7XG5cdFx0VUEgPSB1YS5tYXRj
aCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVyc2lvbilbXFxzXFwv
Ol0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJpfCg/OnJ2W1xcc1xcLzpdfHZlcnNpb25bXFxzXFwv
Ol0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXTtcblx0fVxuXG5c
dGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xuXHRcdFVBWzFdID0gJ2llJztcblx0XHRpZiAoVUFb
NF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxzZSBpZiAoVUFbMV0gPT0gJ2NyaW9zJyl7XG5cdFx0
VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5cdHBsYXRmb3JtID0gdWEubWF0Y2goL2lwKD86YWR8
b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRyb2lkKS8pIHx8IHVh
Lm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhlciddKVswXTtcblx0aWYgKHBsYXRmb3Jt
ID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJztcblxuXHRyZXR1cm4ge1xuXHRcdGV4dGVu
ZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxcblx0XHRuYW1lOiAoVUFbMV0gPT0gJ3ZlcnNp
b24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0dmVyc2lvbjogcGFyc2VGbG9hdCgoVUFbMV0gPT0g
J29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6IFVBWzJdKSxcblx0XHRwbGF0Zm9ybTogcGxhdGZv
cm1cblx0fTtcbn07XG5cbnZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0gcGFyc2UobmF2aWdh
dG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuaWYgKEJyb3dzZXIubmFtZSA9
PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSl7XG5cdEJyb3dzZXIudmVyc2lvbiA9IGRv
Y3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuQnJvd3Nlci5leHRlbmQoe1xuXHRGZWF0dXJlczog
e1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5ldmFsdWF0ZSksXG5cdFx0YWlyOiAhISh3aW5kb3cu
cnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpLFxuXHRcdGpz
b246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxuXHRwYXJzZVVBOiBwYXJzZVxufSk7XG5cblxuXG4v
LyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVzdCA9IChmdW5jdGlvbigpe1xuXG5cdHZhciBYTUxI
VFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdH07
XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2Jq
ZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHZhciBNU1hNTCA9IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuXHR9
O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0WE1MSFRUUCgp
O1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MMigpO1xu
XHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwoKTtcblx0XHRy
ZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgpO1xuXG5Ccm93c2VyLkZlYXR1cmVzLnhociA9ICEh
KEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4vLyBTdHJpbmcgc2NyaXB0c1xuXG5Ccm93c2VyLmV4
ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcblx0aWYgKHdp
bmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTtcblx0fSBlbHNl
IHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5c
dFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRz
Y3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQp
O1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0fVxuXHRyZXR1cm4g
dGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1lbnQoJ3N0cmlwU2NyaXB0cycsIGZ1bmN0aW9uKGV4
ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xuXHR2YXIgdGV4dCA9IHRoaXMucmVwbGFjZSgvPHNj
cmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUp
e1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdcXG4nO1xuXHRcdHJldHVybiAnJztcblx0fSk7XG5c
dGlmIChleGVjID09PSB0cnVlKSBCcm93c2VyLmV4ZWMoc2NyaXB0cyk7XG5cdGVsc2UgaWYgKHR5
cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBleGVjKHNjcmlwdHMsIHRleHQpO1xuXHRyZXR1cm4g
dGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERvY3VtZW50XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0
RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5cdFdpbmRvdzogdGhpcy5XaW5kb3csXG5cdEVsZW1l
bnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6IHRoaXMuRXZlbnRcbn0pO1xuXG50aGlzLldpbmRv
dyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ1dpbmRvdycsIGZ1bmN0aW9uKCl7fSk7
XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ3dpbmRvdycpLmhpZGUoKTtcblxu
V2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHR3aW5kb3dbbmFtZV0gPSBt
ZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVudCA9IGRvY3VtZW50LiRjb25zdHJ1Y3RvciA9IG5l
dyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9uKCl7fSk7XG5cbmRvY3VtZW50LiRmYW1pbHkgPSBG
dW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcpLmhpZGUoKTtcblxuRG9jdW1lbnQubWlycm9yKGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRvY3VtZW50W25hbWVdID0gbWV0aG9kO1xufSk7XG5c
bmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5pZiAoIWRvY3VtZW50
LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVh
ZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7XG5cdGRvY3VtZW50LmV4
ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VDYWNoZScsIGZhbHNlLCB0cnVlKTtcbn0gY2F0Y2gg
KGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0aGlzLmF0dGFjaEV2ZW50ICYmICF0aGlzLmFkZEV2
ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2FkRXZlbnQgPSBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xuXHRcdGRvY3VtZW50LmhlYWQg
PSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDtcblx0XHR3aW5kb3cgPSB0
aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVsbDtcblx0fTtcblx0dGhpcy5hdHRhY2hFdmVudCgn
b251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59XG5cbi8vIElFIGZhaWxzIG9uIGNvbGxlY3Rpb25z
IGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZlcnMgdG8gPHNlbGVjdD4pXG52YXIgYXJyYXlGcm9t
ID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5cdGFycmF5RnJvbShkb2N1bWVudC5odG1sLmNoaWxk
Tm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtc
blx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycgJiYgVHlwZS5pc0VudW1lcmFibGUoaXRl
bSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJheScpe1xuXHRcdFx0dmFyIGkgPSBpdGVtLmxlbmd0
aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5cdFx0XHR3aGlsZSAoaS0tKSBhcnJheVtpXSA9IGl0
ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheUZyb20o
aXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSxcblx0XHRz
bGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0Wydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSBwcm90b3R5cGVbbmFt
ZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBtZXRo
b2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtc
blx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9u
IGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGluZyByZXVzYWJs
ZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtB
cnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXVxuXG5wcm92aWRlczogQ2xhc3NcblxuLi4u
XG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIENsYXNzID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBl
KCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7XG5cdGlmIChpbnN0YW5jZU9mKHBhcmFtcywgRnVu
Y3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6ZTogcGFyYW1zfTtcblxuXHR2YXIgbmV3Q2xhc3Mg
PSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdGlmIChuZXdDbGFzcy4kcHJvdG90
eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IG51bGw7XG5cdFx0dGhpcy4k
ZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXplKSA/IHRoaXMu
aW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcztcblx0XHR0aGlzLiRjYWxs
ZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LmV4dGVuZCh0
aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxuXHRuZXdDbGFzcy4kY29uc3RydWN0b3IgPSBDbGFz
cztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG5ld0NsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFyZW50O1xuXG5cdHJldHVybiBuZXdDbGFzcztcbn0p
O1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24oKXtcblx0aWYgKCF0aGlzLiRjYWxsZXIpIHRocm93
IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBhcmVudFwiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5c
dHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRuYW1lLFxuXHRcdHBhcmVudCA9IHRoaXMuJGNhbGxl
ci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZpb3VzID0gKHBhcmVudCkgPyBwYXJlbnQucHJvdG90
eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVycm9yKCdUaGUg
bWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFzIG5vIHBhcmVudC4nKTtcblx0cmV0dXJuIHByZXZp
b3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgcmVzZXQgPSBmdW5jdGlvbihv
YmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHR2YXIgdmFsdWUgPSBvYmpl
Y3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0Y2FzZSAnb2JqZWN0
Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlvbigpe307XG5cdFx0XHRcdEYucHJvdG90eXBlID0g
dmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXldID0gcmVzZXQobmV3IEYpO1xuXHRcdFx0XHRicmVh
aztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5jbG9uZSgpOyBicmVh
aztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB3cmFwID0gZnVuY3Rp
b24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kLiRvcmlnaW4pIG1ldGhvZCA9IG1l
dGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKG1ldGhv
ZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1Ro
ZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdFx0dmFyIGNh
bGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyO1xuXHRcdHRoaXMuY2Fs
bGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3JhcHBlcjtcblx0XHR2YXIgcmVzdWx0ID0g
bWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0dGhpcy4kY2FsbGVyID0gY3VycmVu
dDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fS5leHRlbmQo
eyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7XG5cdHJldHVybiB3
cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIHJldGFp
bil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcblx0XHR2YWx1
ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKHZhbHVl
ID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKHR5cGVPZih2YWx1ZSkgPT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRoaWRkZW4pIHJldHVybiB0aGlzO1xuXHRcdHRoaXMu
cHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlzLCBrZXksIHZhbHVl
KTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5cGUsIGtleSwgdmFs
dWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG52YXIgZ2V0SW5zdGFuY2UgPSBmdW5j
dGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7XG5cdHZhciBwcm90byA9
IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZztcblx0cmV0dXJuIHByb3Rv
O1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1lbnQub3ZlcmxvYWRT
ZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3JzID0ge1xuXG5cdEV4dGVuZHM6IGZ1bmN0aW9uKHBh
cmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5wcm90b3R5cGUgPSBn
ZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxuXG5cdEltcGxlbWVudHM6IGZ1bmN0aW9uKGl0ZW1z
KXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0
dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gaW5zdGFuY2Up
IGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1ZSk7XG5cdFx0fSwg
dGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuRXh0cmFz
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhhdCBjYW4gYmUgaW1w
bGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4ZWN1dGlvbiBvZiBt
YW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4sIEV2ZW50cywgT3B0
aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudGhpcy5DaGFpbiA9IG5ldyBDbGFz
cyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRjaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRj
aGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLiRjaGFp
bi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDog
ZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFp
bi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgcmVtb3ZlT24g
PSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15vbihbQS1aXSkv
LCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5cdFx0cmV0dXJuIGZpcnN0LnRvTG93ZXJDYXNlKCk7
XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMgPSBuZXcgQ2xhc3Moe1xuXG5cdCRldmVudHM6IHt9
LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwpe1xuXHRcdHR5cGUg
PSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxuXG5cdFx0dGhpcy4kZXZlbnRzW3R5cGVdID0gKHRo
aXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5jbHVkZShmbik7XG5cdFx0aWYgKGludGVybmFsKSBm
bi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRz
OiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAodmFyIHR5cGUgaW4gZXZlbnRzKSB0aGlzLmFk
ZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dHlwZSA9IHJlbW92
ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0aWYg
KCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xu
XHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXko
ZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0
XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZl
bnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmIChldmVudHMgJiYgIWZuLmludGVybmFs
KXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTtcblx0XHRcdGlmIChpbmRl
eCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtc
blx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGlu
IGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0
dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChldmVudHMpIGV2ZW50cyA9IHJlbW92ZU9uKGV2ZW50
cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMuJGV2ZW50cyl7XG5cdFx0XHRpZiAoZXZlbnRzICYm
IGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtcblx0XHRcdHZhciBmbnMgPSB0aGlzLiRldmVudHNb
dHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0gZm5zLmxlbmd0aDsgaS0tOykgaWYgKGkgaW4gZm5z
KXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudCh0eXBlLCBmbnNbaV0pO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudGhpcy5PcHRpb25zID0gbmV3IENs
YXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb25zID0gdGhp
cy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFwcGx5KG51bGwsIFt7fSwgdGhpcy5vcHRpb25zXS5h
cHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnQpIGZvciAodmFyIG9wdGlv
biBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAhPSAnZnVu
Y3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTtcblx0XHRcdHRo
aXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pO1xuXHRcdFx0ZGVsZXRlIG9wdGlv
bnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuVGhlbmFibGVcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3du
IENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhlbmFibGVcIi5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLlRoZW5hYmxl
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgU1RBVEVfUEVORElORyA9IDAsXG5c
dFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNUQVRFX1JFSkVDVEVEID0gMjtcblxudmFyIFRoZW5h
YmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3Moe1xuXG5cdCR0aGVuYWJsZVN0YXRlOiBT
VEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVSZXN1bHQ6IG51bGwsXG5cdCR0aGVuYWJsZVJlYWN0
aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHJlc29sdmUodGhp
cywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlamVjdDogZnVuY3Rpb24o
cmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHN3aXRjaCAodGhpcy4k
dGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNlIFNUQVRFX1BFTkRJTkc6XG5cdFx0XHRcdHJldHVy
biAncGVuZGluZyc7XG5cblx0XHRcdGNhc2UgU1RBVEVfRlVMRklMTEVEOlxuXHRcdFx0XHRyZXR1
cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNhc2UgU1RBVEVfUkVKRUNURUQ6XG5cdFx0XHRcdHJl
dHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0fSxcblxuXHRyZXNldFRoZW5hYmxlOiBmdW5jdGlv
bihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJlc2V0KHRoaXMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBv
blJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAnZnVuY3Rpb24nKSBv
bkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5cdFx0aWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAn
ZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Rocm93ZXInO1xuXG5cdFx0dmFyIHRoZW5hYmxlID0g
bmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlzLiR0aGVuYWJsZVJlYWN0aW9ucy5wdXNoKHtcblx0
XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0XHRcdGZ1bGZpbGxIYW5kbGVyOiBvbkZ1bGZpbGxl
ZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9uUmVqZWN0ZWRcblx0XHR9KTtcblxuXHRcdGlmICh0
aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHRcdHJlYWN0KHRoaXMp
O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblxuXHQnY2F0Y2gnOiBmdW5j
dGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQp
O1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5leHRlbmQoe1xuXHRyZXNvbHZlOiBmdW5jdGlvbih2
YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRoZW5h
YmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoZW5h
YmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblx0cmVqZWN0OiBmdW5jdGlvbihyZWFz
b24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdHJlamVjdCh0aGVu
YWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH1cbn0pO1xuXG4vLyBQcml2
YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlm
ICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0aWYgKHRo
ZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRyZWplY3QodGhlbmFibGUsIG5ldyBUeXBlRXJyb3Io
J1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJsZSB3aXRoIGl0c2VsZi4nKSk7XG5cdFx0fSBlbHNl
IGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUg
PT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZhciB0aGVuO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRy
ZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIHRo
ZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHR2YXIgcmVzb2x2ZWQgPSBmYWxzZTtcblx0XHRc
dFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhlbi5j
YWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24obmV4dFZh
bHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRc
dHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodGhlbmFibGUsIG5l
eHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRc
dFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRcdFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xu
XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVq
ZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0
fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0
XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0XHRcdFx0fVxu
XHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxs
KHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZ1bGZpbGwo
dGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZnVsZmlsbCh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVlO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfRlVMRklMTEVEO1xuXG5cdFx0cmVhY3QodGhlbmFi
bGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUg
PSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5j
dGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSAhPT0g
U1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gbnVsbDtcblx0
XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG5cdH1cbn1cblxuZnVu
Y3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2YXIgc3RhdGUgPSB0aGVuYWJsZS4kdGhlbmFibGVT
dGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQsXG5cdFx0cmVhY3Rp
b25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zLFxuXHRcdHR5cGU7XG5cblx0aWYgKHN0
YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9u
cyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmlsbEhhbmRsZXInO1xuXHR9IGVsc2UgaWYgKHN0YXRl
ID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBb
XTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRsZXInO1xuXHR9XG5cblx0aWYgKHR5cGUpe1xuXHRc
dGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQsIHJlYWN0aW9ucywgdHlwZV0pKTtcblx0fVxufVxu
XG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCByZWFjdGlvbnMsIHR5cGUpe1xuXHRmb3IgKHZhciBp
ID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpe1xuXHRcdHZhciByZWFjdGlv
biA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhhbmRsZXIgPSByZWFjdGlvblt0eXBlXTtcblxuXHRc
dGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHknKXtcblx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhl
bmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGlmIChoYW5kbGVyID09PSAnVGhyb3dlcicpe1xu
XHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCBoYW5kbGVyKHJl
c3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHJlYWN0
aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG52YXIg
ZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9j
ZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKXtcblx0ZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNr
O1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyl7XG5cdGRl
ZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIHtcblx0ZGVmZXIgPSBmdW5jdGlvbihmbil7XG5c
dFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07XG59XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBPYmplY3QgZ2VuZXJpYyBtZXRob2RzXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogW09i
amVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuT2JqZWN0LmV4dGVuZCh7
XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmplY3QsIGtleXMpe1xuXHRcdHZhciByZXN1bHRzID0g
e307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHRpZiAoayBpbiBvYmplY3QpIHJlc3VsdHNba10g
PSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdG1hcDog
ZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2
YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBr
ZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0cmVzdWx0
c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xuXHRcdH1c
blx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKG9iamVjdCwg
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qu
a2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7
XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRcdGlm
IChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNba2V5XSA9IHZhbHVl
O1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRldmVyeTogZnVuY3Rpb24o
b2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xu
XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5
ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkg
cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRzb21lOiBm
dW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9i
amVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRc
dHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0s
IGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0
dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHR2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
Lmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRcdHZhbHVlcy5wdXNo
KG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0Z2V0TGVu
Z3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxl
bmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0dmFy
IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5
cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChvYmpl
Y3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBrZXk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xu
XHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHRyZXR1cm4g
T2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7XG5cdH0sXG5cblx0dG9RdWVyeVN0
cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNlKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtc
blxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRp
ZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJztcblx0XHRcdHZhciByZXN1bHQ7
XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0XHRjYXNlICdvYmplY3QnOiBy
ZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1ZSwga2V5KTsgYnJlYWs7XG5cdFx0XHRc
dGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2YXIgcXMgPSB7fTtcblx0XHRcdFx0XHR2YWx1ZS5l
YWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdFx0XHRxc1tpXSA9IHZhbDtcblx0XHRcdFx0
XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyhxcywga2V5KTtc
blx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogcmVzdWx0ID0ga2V5ICsgJz0nICsg
ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZSAhPSBu
dWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcXVl
cnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG5cblxuLypcbi0tLVxu
bmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBDU1MzIFNlbGVjdG9y
IHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7
XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRvckluZGV4LFxuXHRjb21iaW5hdG9ySW5kZXgsXG5c
dHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxuXHRyZXZlcnNlQ2FjaGUgPSB7fSxcblx0cmVVbmVz
Y2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGlzUmV2
ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0aWYgKGV4
cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJldHVybiBleHByZXNzaW9uO1xuXHRleHByZXNzaW9u
ID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHRyZXZl
cnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFyIGN1cnJlbnRDYWNoZSA9IChyZXZlcnNlZCkgPyBy
ZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYgKGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXSkgcmV0
dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXTtcblx0cGFyc2VkID0ge1xuXHRcdFNsaWNrOiB0
cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxcblx0XHRyYXc6IGV4cHJlc3Npb24sXG5cdFx0cmV2
ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBwYXJzZSh0aGlzLnJhdywgdHJ1ZSk7XG5c
dFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRleCA9IC0xO1xuXHR3aGlsZSAoZXhwcmVzc2lvbiAh
PSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNlcikpKTtcblx0
cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGg7XG5cdHJldHVybiBjdXJy
ZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2ZXJzZWQpID8gcmV2ZXJzZShwYXJzZWQpIDogcGFy
c2VkO1xufTtcblxudmFyIHJldmVyc2VDb21iaW5hdG9yID0gZnVuY3Rpb24oY29tYmluYXRvcil7
XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7XG5cdGVsc2UgaWYgKGNvbWJp
bmF0b3IgPT09ICcgJykgcmV0dXJuICchJztcblx0ZWxzZSBpZiAoKC9eIS8pLnRlc3QoY29tYmlu
YXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJlcGxhY2UoL14hLywgJycpO1xuXHRlbHNlIHJldHVy
biAnIScgKyBjb21iaW5hdG9yO1xufTtcblxudmFyIHJldmVyc2UgPSBmdW5jdGlvbihleHByZXNz
aW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGV4cCA9
IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAnKicsIGNv
bWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07XG5cblx0XHRm
b3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5ndGg7IGorKyl7XG5cdFx0XHR2YXIgY2V4cCA9IGV4
cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZlcnNlQ29tYmluYXRvcikgY2V4cC5yZXZlcnNlQ29t
YmluYXRvciA9ICcgJztcblx0XHRcdGNleHAuY29tYmluYXRvciA9IGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHR9XG5cblx0
XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Npb247XG59
O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKXsvLyBDcmVkaXQ6IFhSZWdF
eHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2ZW4gTGV2aXRoYW4gPGh0dHA6Ly9zdGV2ZW5sZXZp
dGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1JVCBMaWNlbnNlXG5cdHJldHVybiBzdHJpbmcucmVw
bGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8LCNcXHNdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0
XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5cdH0pO1xufTtcblxudmFyIHJlZ2V4cCA9IG5ldyBS
ZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYgcnVieVxucHV0cyBcIlxcdFxcdFwiICsgREFUQS5y
ZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMuKiR8XFxzK3xcXFxcJHxcXFxcbi8sJycpXG5fX0VO
RF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxcXFxzKiAoICwgKSBcXFxccyogICAgICAgICAgICAg
ICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5cXFxuXHR8IFxcXFxzKiAoIDxjb21iaW5hdG9yPisg
KSBcXFxccyogICAjIENvbWJpbmF0b3IgICAgICAgICBcXG5cXFxuXHR8ICAgICAgKCBcXFxccysg
KSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXFxuXFxcblx0fCAgICAgICgg
PHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMgVGFnICAgICAgICAgICAgICAgIFxcblxcXG5cdHwg
XFxcXCMgICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIElEICAgICAgICAgICAgICAgICBcXG5c
XFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05hbWUgICAgICAg
ICAgXFxuXFxcblx0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSAg
ICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxcblx0XHRcXFxccyogKDx1bmljb2RlMT4rKSAgKD86
ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58XT89KSAgKD86ICBcXFxuXHRcdFx0XHRcXFxccyog
KD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8pKC4qPylcXFxcOSBcXFxuXHRcdFx0XHQpXFxcblx0
XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAgXFxcblx0XFxcXF0oPyFcXFxcXSkgXFxuXFxcblx0
fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxcblx0XFxcXCggKD86XFxcblx0XHQoPzooW1xcXCIn
XSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspXFxcblx0
KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4qL1xuXHRcIl4oPzpcXFxccyooLClcXFxccyp8XFxc
XHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChcXFxccyspfCg8dW5pY29kZT4rfFxcXFwqKXxcXFxc
Iyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29kZT4rKXxcXFxcW1xcXFxzKig8dW5pY29kZTE+Kyko
PzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxccyooPzooW1xcXCInXT8pKC4qPylcXFxcOSkpKT9c
XFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1bmljb2RlPispKD86XFxcXCgoPzooPzooW1xcXCIn
XSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspKVxcXFwp
KT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5hdG9yPi8sICdbJyArIGVzY2FwZVJlZ0V4cCgnPit+
YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylcblx0LnJlcGxhY2UoLzx1bmljb2RlPi9nLCAnKD86
W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcblx0
LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18
XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuKTtcblxuZnVuY3Rpb24gcGFyc2VyKFxuXHRyYXdN
YXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNvbWJpbmF0b3IsXG5cdGNvbWJpbmF0b3JDaGlsZHJl
bixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0Y2xhc3NOYW1lLFxuXG5cdGF0dHJpYnV0ZUtleSxc
blx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0dHJpYnV0ZVF1b3RlLFxuXHRhdHRyaWJ1dGVWYWx1
ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBzZXVkb0NsYXNzLFxuXHRwc2V1ZG9RdW90ZSxcblx0
cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0cHNldWRvQ2xhc3NWYWx1ZVxuKXtcblx0aWYgKHNl
cGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdHBhcnNlZC5leHByZXNzaW9u
c1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xuXHRcdGNvbWJpbmF0b3JJbmRleCA9IC0xO1xuXHRc
dGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztcblx0fVxuXG5cdGlmIChjb21iaW5hdG9yIHx8IGNv
bWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5hdG9ySW5kZXggPT09IC0xKXtcblx0XHRjb21iaW5h
dG9yID0gY29tYmluYXRvciB8fCAnICc7XG5cdFx0dmFyIGN1cnJlbnRTZXBhcmF0b3IgPSBwYXJz
ZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdO1xuXHRcdGlmIChyZXZlcnNlZCAmJiBjdXJy
ZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0pXG5cdFx0XHRjdXJyZW50U2VwYXJhdG9yW2Nv
bWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJpbmF0b3IgPSByZXZlcnNlQ29tYmluYXRvcihjb21i
aW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4XSA9IHtjb21i
aW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307XG5cdH1cblxuXHR2YXIgY3VycmVudFBhcnNl
ZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRleF1bY29tYmluYXRvckluZGV4XTtc
blxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3VycmVudFBhcnNlZC50YWcgPSB0YWdOYW1lLnJlcGxh
Y2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoaWQpe1xuXHRcdGN1cnJlbnRQYXJz
ZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGNsYXNz
TmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycp
O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCkgY3VycmVudFBhcnNlZC5jbGFz
c0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3VycmVudFBhcnNl
ZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFzc0xpc3QucHVzaChjbGFzc05h
bWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3Nlcy5wdXNoKHtcblx0XHRcdHZhbHVlOiBjbGFz
c05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBlc2NhcGVSZWdF
eHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCknKVxuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAocHNl
dWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlIHx8IHBz
ZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNz
VmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpIDogbnVsbDtc
blxuXHRcdGlmICghY3VycmVudFBhcnNlZC5wc2V1ZG9zKSBjdXJyZW50UGFyc2VkLnBzZXVkb3Mg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBzZXVkb3MucHVzaCh7XG5cdFx0XHRrZXk6IHBzZXVk
b0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpLFxuXHRcdFx0dmFsdWU6IHBzZXVkb0NsYXNz
VmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9NYXJrZXIubGVuZ3RoID09IDEgPyAnY2xhc3MnIDog
J2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChhdHRyaWJ1dGVLZXkpe1xuXHRcdGF0
dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblx0XHRh
dHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8fCAnJykucmVwbGFjZShyZVVuZXNjYXBl
LCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVnZXhwO1xuXG5cdFx0c3dpdGNoIChhdHRyaWJ1dGVP
cGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAn
XicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBicmVhaztcblx0
XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAgZXNjYXBlUmVn
RXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfj0n
IDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxcXFxzKScrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1
dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfD0nIDogcmVnZXhw
ID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsn
KC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICAnPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgPT0gdmFsdWU7XG5cdFx0XHR9OyBi
cmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0xO1xuXHRc
dFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgIT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztc
blx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVy
biAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRlVmFsdWUgPT0g
JycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rp
b24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0aWYgKCF0ZXN0KSB0ZXN0
ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlICYmIHJlZ2V4cC50ZXN0KHZh
bHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMpIGN1cnJl
bnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcy5w
dXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRlS2V5LFxuXHRcdFx0b3BlcmF0b3I6IGF0dHJpYnV0
ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0dHJpYnV0ZVZhbHVlLFxuXHRcdFx0dGVzdDogdGVz
dFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1cm4gJyc7XG59O1xuXG4vLyBTbGljayBOU1xuXG52
YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnBhcnNlID0gZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJzZShleHByZXNzaW9uKTtcbn07XG5cblNsaWNrLmVz
Y2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNr
ID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1
bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxu
bmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlwdGlvbjogVGhlIG5ldywgc3VwZXJmYXN0IGNzcyBz
ZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczogU2xpY2suRmluZGVyXG5yZXF1aXJlczogU2xpY2su
UGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIGxvY2FsID0ge30sXG5cdGZl
YXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
O1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVjdGlvblxuXG5sb2NhbC5pc05hdGl2ZUNvZGUgPSBm
dW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xce1xccypcXFtuYXRpdmUgY29kZVxcXVxccypcXH0v
KS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9jYWwuaXNYTUwgPSBmdW5jdGlvbihkb2N1bWVudCl7
XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1bWVudC54bWwpIHx8
ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1bWVudF0nKSB8fFxu
XHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9k
ZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxvY2FsLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9j
dW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJndW1lbnRzIHRvIGRv
Y3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0aGUgZnVuY3Rpb24g
cmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7XG5cdGlmIChub2Rl
VHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0ZWxzZSBpZiAobm9kZVR5cGUpIGRvY3VtZW50ID0g
ZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZVxuXHRlbHNlIGlmIChkb2N1bWVudC5uYXZp
Z2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRvd1xuXHRlbHNlIHJl
dHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnRcblxuXHRpZiAodGhp
cy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjtcblx0dGhpcy5kb2N1bWVudCA9IGRvY3Vt
ZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRldGVjdGlvbiBvbiB0
aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdldFVJRFhNTChyb290KSxcblx0XHRmZWF0dXJlcyA9
IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5cdFx0ZmVhdHVyZTtcblxuXHRpZiAoZmVhdHVyZXMp
e1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0XHR0aGlzW2ZlYXR1cmVdID0g
ZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdGZlYXR1cmVz
ID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9O1xuXG5cdGZlYXR1cmVzLnJvb3QgPSByb290
O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1bWVudCk7XG5cblx0
ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5cdD0gZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRR
U0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1lXG5cdD0gZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNl
UVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VCQ05cblx0PSBmZWF0dXJlcy5icm9rZW5DaGVja2Vk
UVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Fcblx0PSBmZWF0dXJlcy5p
c0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvclxuXHQ9IGZh
bHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Nsb3NlZCwgc3RhclNlbGVjdHNDb21tZW50cyxcblx0
XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyO1xuXG5cdHZhciBzZWxlY3RlZCwgaWQg
PSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIgdGVzdE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDtcblx0dGVzdFJvb3QuYXBw
ZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8vIG9uIG5vbi1IVE1MIGRvY3VtZW50cyBpbm5lckhU
TUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2VzbnQgd29yayBwcm9wZXJseVxuXHR0cnkge1xuXHRc
dHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBpZD1cIicraWQrJ1wiPjwvYT4nO1xuXHRcdGZlYXR1
cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdH0g
Y2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQpe1xuXG5cdFx0dGVz
dE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuXHRcdC8vIElFIHJldHVybnMgY29tbWVu
dCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNc
blx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCcnKSk7XG5c
dFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwi
PC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50
c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0
XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRc
dHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNl
bGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdH0gY2F0Y2ggKGUpe307
XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4gPSBzdGFyU2VsZWN0c0NvbW1lbnRzIHx8
IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBlbGVtZW50cyB3aXRoIHRo
ZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBmb3IgZ2V0RWxlbWVudHNCeUlkIGZvciBzb21lIGRv
Y3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgbmFtZT1c
IicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysgaWQgKydcIj48L2I+Jztcblx0XHRcdGZlYXR1cmVz
LmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgPT09IHRlc3ROb2RlLmZp
cnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0aWYgKHRlc3ROb2RlLmdldEVsZW1l
bnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIGdldEVsZW1lbnRzQnlDbGFz
c05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+PGEgY2xhc3M9XCJiXCI+PC9hPic7XG5cdFx0XHRc
dHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGg7XG5cdFx0XHRcdHRl
c3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InO1xuXHRcdFx0XHRjYWNoZWRHZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5s
ZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBPcGVyYSA5LjYg
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2VzbnQgZGV0ZWN0cyB0aGUgY2xhc3MgaWYgaXRzIG5v
dCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNsYXNzPVwiZiBiIGFcIj48L2E+Jztcblx0XHRcdFx0
YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04gPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0ZmVh
dHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IGJyb2tl
blNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRcdH1cblxuXHRcdGlmICh0ZXN0Tm9kZS5xdWVyeVNl
bGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9m
b28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxsKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0
XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRc
dFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XG5cdFx0XHRcdGZl
YXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVu
Z3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIHF1ZXJ5U2VsZWN0b3JBbGwgZG9lc250
IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVpcmtzbW9kZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiTWlYXCI+PC9hPic7XG5cdFx0XHRcdGZl
YXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcu
TWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBXZWJraXQgYW5k
IE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlTZWxlY3RvckFsbFxu
XHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlv
biBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cdFx0XHRcdGZl
YXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnOmNo
ZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBJ
RSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09XCJcIiBzZWxlY3RvcnMg
b24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJI
VE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkVtcHR5
QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9XCJcIl0n
KS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHR9XG5cblx0XHQvLyBJ
RTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdldEF0dHJpYnV0ZSh4
KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dFxuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0
Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0aW9uPVwic1wiPjxpbnB1dCBpZD1cImFjdGlvblwi
Lz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIgPSAodGVzdE5vZGUu
Zmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlvblxuXG5cdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8IC8qcm9vdC5tc01h
dGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0
TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ip
IHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVzU2VsZWN0b3IgdHJvd3MgZXJyb3JzIG9uIGluY29y
cmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVz
U2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNrJyk7XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHR9XG5cblx0dHJ5IHtc
blx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAxO1xuXHRcdGRlbGV0ZSByb290LnNsaWNrX2V4cGFu
ZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MO1xuXHR9IGNhdGNoIChl
KXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDtcblx0fVxuXG5cdHRlc3RS
b290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtcblx0dGVzdE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RS
b290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5nZXRBdHRyaWJ1
dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgJiYgYnJva2VuRm9ybUF0dHJpYnV0ZUdldHRl
cikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1
dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmIChtZXRob2QpIHJldHVybiBtZXRob2QuY2FsbChub2Rl
KTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtc
blx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBu
dWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMu
YXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRyZXR1cm4gKG1ldGhvZCkgPyBtZXRob2QuY2Fs
bChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9O1xuXG5cdC8vIGhhc0F0dHJp
YnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMuaXNOYXRpdmVD
b2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRc
dHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHR9IDogZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0
ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUuc3BlY2lmaWVkIHx8IG5vZGUubm9kZVZh
bHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFpbnNcblx0Ly8gRklYTUU6IEFkZCBzcGVjczogbG9j
YWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgeG1sIGFuZCBodG1sIGRvY3VtZW50
cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlucyA9IHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUo
cm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZlRG9jdW1lbnRDb250YWlucyA9IGRvY3VtZW50ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50LmNvbnRhaW5zKTtcblxuXHRmZWF0dXJlcy5jb250
YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMgJiYgbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBm
dW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dC5jb250YWlucyhub2Rl
KTtcblx0fSA6IChuYXRpdmVSb290Q29udGFpbnMgJiYgIW5hdGl2ZURvY3VtZW50Q29udGFpbnMp
ID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0Ly8gSUU4IGRvZXMgbm90IGhhdmUgLmNv
bnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICgoY29u
dGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogY29udGV4dCku
Y29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9vdCAmJiByb290LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0ID09PSBu
b2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiAxNik7XG5c
dH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRpZiAobm9kZSkgZG8ge1xuXHRcdFx0
aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlO1xuXHRcdH0gd2hpbGUgKChub2RlID0g
bm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdC8vIGRvY3Vt
ZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3JlZGl0cyB0byBTaXp6bGUgKGh0dHA6Ly9zaXp6bGVq
cy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3VtZW50U29ydGVyID0gKHJvb3QuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSByZXR1cm4gMDtcblx0XHRy
ZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEgPT09IGIgPyAw
IDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgnIGluIHJvb3QpID8gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4gMDtcblx0XHRy
ZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cdH0gOiAoZG9jdW1lbnQuY3Jl
YXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLm93bmVyRG9jdW1lbnQgfHwg
IWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7XG5cdFx0dmFyIGFSYW5nZSA9IGEub3duZXJEb2N1
bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2UgPSBiLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7XG5cdFx0YVJhbmdlLnNldEVuZChhLCAwKTtc
blx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7XG5cdFx0YlJhbmdlLnNldEVuZChiLCAwKTtcblx0
XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19FTkQs
IGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5cdHJvb3QgPSBudWxsO1xuXG5cdGZvciAoZmVhdHVy
ZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xu
XHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxuXG52YXIgcmVTaW1wbGVTZWxlY3RvciA9IC9eKFsj
Ll0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5cdHJlRW1wdHlBdHRyaWJ1dGUgPSAvXFxbLitbKiRe
XT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FGYWlsRXhwQ2FjaGUgPSB7fTtcblxubG9jYWwuc2Vh
cmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBmaXJzdCl7XG5cblx0
dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChmaXJzdCkgPyBudWxsIDogKGFwcGVuZCB8fCBbXSk7
XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7XG5cdGVsc2UgaWYgKGNvbnRleHQubmF2
aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVydCB0aGUgbm9kZSBm
cm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRcblx0ZWxzZSBpZiAoIWNvbnRleHQubm9kZVR5cGUp
IHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1cFxuXG5cdHZhciBwYXJzZWQsIGksIG5vZGUsIG5v
ZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSxcblx0XHRoYXNPdGhlcnMgPSAh
IShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCksXG5cdFx0Y29udGV4dElzRG9jdW1lbnQgPSAoY29u
dGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRpZiAodGhpcy5kb2N1bWVudCAhPT0gKGNvbnRleHRJ
c0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRleHQub3duZXJEb2N1bWVudCkpIHRoaXMuc2V0RG9j
dW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMgYWxyZWFkeSBp
biB0aGUgYXBwZW5kIGFycmF5XG5cdGlmIChoYXNPdGhlcnMpIGZvciAoaSA9IGZvdW5kLmxlbmd0
aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJRChmb3VuZFtpXSldID0gdHJ1ZTtcblxuXHQvLyBl
eHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7
IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdcblxuXHRcdC8qPHNpbXBsZS1zZWxlY3RvcnMtb3Zl
cnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2VsZWN0b3IgPSBleHByZXNzaW9uLm1hdGNoKHJlU2lt
cGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNlbGVjdG9yKXtc
blxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLFxuXHRcdFx0XHRuYW1lID0g
c2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRcdGlmICghc3ltYm9sKXtcblxuXHRcdFx0XHRpZiAo
bmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5TdGFyR0VCVE4pIGJyZWFrIHNpbXBsZVNlbGVjdG9y
cztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdGlmICghKGhhc090aGVycyAm
JiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRc
dH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJyMnKXtcblxuXHRcdFx0XHRpZiAoIXRo
aXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVhayBzaW1wbGVTZWxl
Y3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG5hbWUpO1xuXHRc
dFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3VuZDtcblx0XHRcdFx0aWYgKHRoaXMuaWRHZXRzTmFt
ZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IG5hbWUpIGJyZWFr
IHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZSB8fCBudWxs
O1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0p
KSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnLicpe1xu
XG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250ZXh0LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4dC5xdWVyeVNlbGVj
dG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAoY29udGV4dC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0XHRub2Rl
cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTtcblx0XHRcdFx0XHRpZiAo
Zmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVl
c1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0
XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2hDbGFzcyA9IG5ldyBSZWdFeHAoJyhe
fFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4cChuYW1lKSArJyhcXFxcc3wkKScpO1xuXHRcdFx0
XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0XHRc
dGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUg
PSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRcdGlmICghKGNsYXNzTmFtZSAmJiBtYXRjaENs
YXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aWYgKGZpcnN0KSBy
ZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMu
Z2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9
XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0
XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9zaW1w
bGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cblx0XHQvKjxxdWVyeS1zZWxlY3Rvci1vdmVycmlk
ZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpe1xu
XG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnRcblx0XHRcdFx0fHwgcXNhRmFpbEV4cENh
Y2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8vVE9ETzogb25seSBza2lwIHdoZW4gZXhwcmVzc2lv
biBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5cdFx0XHRcdHx8IHRoaXMuYnJva2VuTWl4ZWRDYXNl
UVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhwcmVzc2lvbi5pbmRl
eE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkVtcHR5QXR0cmli
dXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSlcblx0XHRcdFx0fHwg
KCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0IHdoZW4gIWNvbnRleHRJc0RvY3VtZW50IGFuZC4u
LlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNl
bGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5IGZpeCBub24tZG9j
dW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0b3JzXG5cdFx0XHRc
dFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcsJykgPiAtMVxuXHRcdFx0XHQpXG5cdFx0XHRcdHx8
IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkgYnJlYWsgcXVlcnlTZWxlY3RvcjtcblxuXHRcdFx0
dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250ZXh0LCBjdXJyZW50
SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0Ly8gbm9uLWRvY3Vt
ZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8gY3JlZGl0cyB0byBBbmRyZXcgRHVwb250XG5cdFx0
XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2xpY2tpZCA9ICdz
bGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2xpY2tpZCk7
XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMnICsgc2xpY2tpZCArICcgJyArIF9leHByZXNzaW9u
O1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRc
dFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9y
KF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRcdFx0XHRlbHNlIG5vZGVzID0gY29udGV4dC5xdWVy
eVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHRx
c2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxO1xuXHRcdFx0XHRicmVhayBxdWVyeVNlbGVj
dG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkgX2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIGN1
cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBfY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7
XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0
XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAwOyBub2RlID0gbm9k
ZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA+ICdAJyAmJiAhKGhhc090aGVy
cyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0
XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0
XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvcXVlcnktc2VsZWN0b3Itb3ZlcnJp
ZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVzc2lvbik7XG5cdFx0
aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lv
biA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVzc2lvblxuXHRcdHJldHVybiBmb3VuZDtc
blx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHBhcnNl
ZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQgPSBleHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKHRo
aXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4dCwgZXhwcmVzc2lv
bikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZVxuXHRcdChmb3VuZCkgPyBmb3VuZC5wdXNoKGV4
cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNzaW9uO1xuXHRcdHJldHVybiBmb3VuZDtcblx0fSBl
bHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdC8qPHBzZXVk
by1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGNhY2hlIGVs
ZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9yc1xuXG5cdHRoaXMucG9zTlRIID0ge307XG5cdHRo
aXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGUgPSB7fTtcblx0dGhpcy5wb3NO
VEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1
ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYgYXBwZW5kIGlzIG51bGwgYW5kIHRoZXJlIGlzIG9u
bHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2UgcHVzaEFycmF5LCBl
bHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVzaCA9ICghaGFzT3RoZXJzICYmIChmaXJzdCB8fCAo
cGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNlZC5leHByZXNzaW9uc1swXS5sZW5ndGggPT0gMSkp
KSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5wdXNoVUlEO1xuXG5cdGlmIChmb3VuZCA9PSBudWxs
KSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1bHQgZW5naW5lXG5cblx0dmFyIGosIG0sIG47XG5c
dHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNzaW9uLCBjdXJyZW50
Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucztcblxuXHRzZWFy
Y2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9IGN1cnJlbnRFeHByZXNzaW9uW2pdKTsgaisrKXtc
blxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJpdC5jb21iaW5hdG9y
O1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNoO1xuXG5cdFx0dGFn
ICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gY3VycmVudEJpdC50YWcgOiBjdXJyZW50
Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRcdGlkICAgICAgICAgPSBjdXJyZW50Qml0LmlkO1xu
XHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNzTGlzdDtcblx0XHRjbGFzc2VzICAgID0g
Y3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0dHJpYnV0ZXMgPSBjdXJyZW50Qml0LmF0dHJpYnV0
ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJlbnRCaXQucHNldWRvcztcblx0XHRsYXN0Qml0ICAg
ID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggLSAxKSk7XG5cblx0XHR0aGlzLmJp
dFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChsYXN0Qml0KXtcblx0XHRcdHRoaXMudW5pcXVlcyA9
IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5kID0gZm91bmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRc
dHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0dGhpcy5mb3VuZCA9IFtdO1xuXHRcdH1cblxuXHRc
dGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNbY29tYmluYXRvcl0oY29udGV4dCwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdGlmIChmaXJz
dCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCkgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVt
cy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRcdFx0XHR0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJ
dGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0
KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdFx0fSBlbHNl
IGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKSB0aGlzW2Nv
bWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9XG5cblx0XHRjdXJyZW50SXRlbXMgPSB0aGlzLmZv
dW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5vZGVzIGluIGFwcGVu
ZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuXG5cdGlmIChoYXNPdGhlcnMg
fHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGggPiAxKSkgdGhpcy5zb3J0KGZvdW5kKTtcblxu
XHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5kO1xufTtcblxuLy8g
VXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5sb2NhbC51aWRrID0gJ3NsaWNrLXVuaXF1ZWlkJztc
blxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHZhciB1aWQgPSBub2RlLmdl
dEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRpZiAoIXVpZCl7XG5cdFx0dWlkID0gdGhpcy51aWR4
Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpO1xuXHR9XG5cdHJldHVy
biB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURIVE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVy
biBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0aGlzLnVpZHgrKyk7
XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1bWVudFNvcnRlciBt
ZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXtcblx0aWYgKCF0aGlzLmRv
Y3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0cztcblx0cmVzdWx0cy5zb3J0KHRoaXMuZG9jdW1l
bnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qPHBzZXVkby1zZWxlY3RvcnM+
Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5jYWNoZU5USCA9IHt9O1xuXG5s
b2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxkKik/KFthLXpdKyk/KFsrLV1cXGQrKT8kLztcblxu
bG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0dmFyIHBhcnNl
ZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJu
IGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBhcnNlZFsyXSB8fCBmYWxzZTtcblx0dmFyIGEgPSBw
YXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0gJy0nKSBhID0gLTE7XG5cdHZhciBiID0gK3BhcnNl
ZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRcdChzcGVjaWFsID09ICduJylcdD8ge2E6IGEsIGI6
IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2RkJylcdD8ge2E6IDIsIGI6IDF9IDpcblx0XHQoc3Bl
Y2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBhfTtcblxuXHRyZXR1
cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFyc2VkKTtcbn07XG5cbmxvY2FsLmNyZWF0
ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlvbnMsIG9mVHlwZSl7
XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0dmFyIHVpZCA9IHRoaXMu
Z2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0pe1xuXHRcdFx0dmFy
IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1cm4gZmFs
c2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7XG5cdFx0XHRpZiAo
b2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHRcdFx0
ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkgY29udGludWU7XG5c
dFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRc
dFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRc
dFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRc
dFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRc
dH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFyZ3Vt
ZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLmNhY2hlTlRIW2Fy
Z3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpO1xuXHRcdGlmICghcGFy
c2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIGEgPSBwYXJzZWQuYSwgYiA9IHBhcnNlZC5iLCBw
b3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtcblx0XHRpZiAoYSA9PSAwKSByZXR1cm4gYiA9PSBw
b3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRcdGlmIChwb3MgPCBiKSByZXR1cm4gZmFsc2U7XG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwgcG9zKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRc
dHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDtcblx0fTtcbn07XG5cbi8qPC9udGgtcHNldWRv
LXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLnB1c2hBcnJheSA9
IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xu
XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG59O1xuXG5sb2NhbC5wdXNoVUlE
ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0aWYgKCF0aGlzLnVuaXF1ZXNbdWlk
XSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHR0aGlzLmZv
dW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5cbmxvY2FsLm1hdGNoTm9kZSA9IGZ1bmN0aW9uKG5v
ZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5uYXRpdmVN
YXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cXFsoW149XSspPVxccyoo
W14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQxPVwiJDJcIl0nKSk7XG5cdFx0fSBjYXRjaCAobWF0
Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2Uoc2VsZWN0
b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7XG5cblx0Ly8gc2ltcGxlIChzaW5nbGUp
IHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnMsIHNpbXBs
ZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50RXhwcmVzc2lvbjtcblx0Zm9yIChpID0gMDsgKGN1
cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspe1xuXHRcdGlmIChjdXJyZW50
RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5cdFx0XHR2YXIgZXhwID0gY3VycmVudEV4cHJlc3Np
b25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsICh0aGlzLmlzWE1MRG9j
dW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcudG9VcHBlckNhc2UoKSwgZXhwLmlkLCBleHAuY2xh
c3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5wc2V1ZG9zKSkgcmV0dXJuIHRydWU7XG5cdFx0XHRz
aW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNpbXBsZUV4cENvdW50ZXIg
PT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBub2RlcyA9IHRoaXMuc2Vh
cmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07XG5cdGZvciAoaSA9IDA7IGl0ZW0gPSBu
b2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHR9XG5c
dHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2FsLm1hdGNoUHNldWRvID0gZnVuY3Rpb24obm9kZSwg
bmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86JyArIG5hbWU7XG5c
dGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1cm4gdGhpc1twc2V1ZG9OYW1lXShub2RlLCBhcmd1
bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtc
blx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUgOiAhIWF0dHJpYnV0
ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRhZyl7XG5cdFx0dmFyIG5vZGVO
YW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDogbm9kZS5ub2RlTmFt
ZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0YWcgPT0gJyonKXtcblx0XHRcdGlmIChub2RlTmFt
ZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9kZXMgYW5kIGNsb3Nl
ZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAobm9kZU5hbWUgIT0gdGFnKSByZXR1cm4g
ZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlkICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcp
ICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIGksIHBhcnQsIGNscztcblx0aWYgKGNsYXNz
ZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3RoOyBpLS07KXtcblx0XHRjbHMgPSB0aGlzLmdldEF0
dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0XHRpZiAoIShjbHMgJiYgY2xhc3Nlc1tpXS5yZWdl
eHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzKSBmb3Ig
KGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IGF0dHJpYnV0ZXNbaV07
XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSByZXR1
cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVkb3MpIGZvciAoaSA9IHBzZXVkb3MubGVuZ3RoOyBp
LS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tpXTtcblx0XHRpZiAoIXRoaXMubWF0Y2hQc2V1ZG8o
bm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJu
IHRydWU7XG59O1xuXG52YXIgY29tYmluYXRvcnMgPSB7XG5cblx0JyAnOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpeyAvLyBh
bGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxuXG5cdFx0dmFyIGksIGl0ZW0sIGNoaWxkcmVuO1xu
XG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpe1xuXHRcdFx0Z2V0QnlJZDogaWYgKGlkKXtc
blx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0
XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1lICYmIGl0ZW0gJiYg
aXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkpe1xuXHRcdFx0XHRc
dC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIHdpdGggdGhhdCBuYW1lIG9yIGlk
IGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmVzIGp1c3Qgb25lIGl0IHdpbGwgcmV0
dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0
Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlbikgcmV0dXJu
O1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcblx0
XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspe1xuXHRcdFx0XHRcdFx0
dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTtcblx0XHRcdFx0XHRcdGlm
IChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBpZCl7XG5cdFx0XHRcdFx0XHRcdHRoaXMu
cHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXRlbSl7XG5cdFx0XHRcdFx0Ly8gaWYg
dGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ugd2lsbCB0cnkgR0VC
VE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsXG5cdFx0XHRcdFx0aWYgKHRoaXMuY29udGFp
bnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuO1xuXHRcdFx0XHRcdGVsc2UgYnJlYWsgZ2V0QnlJ
ZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2RlICYmICF0aGlzLmNv
bnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47XG5cdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcs
IG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5c
dFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBpZiAoY2xhc3NlcyAmJiBub2RlLmdldEVsZW1lbnRz
QnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRjaGlsZHJlbiA9IG5v
ZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcpKTtcblx0XHRcdFx0
aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlDbGFzcztcblx0
XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwg
dGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0
XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6IHtcblx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4u
bGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5cdFx0XHRpZiAoIXRoaXMuYnJva2VuU3RhckdFQlRO
KSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0
aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBjaGlsZHJlblxuXHRcdGlmICgobm9kZSA9IG5v
ZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9
IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKTtcblx0fSxcblxuXHQnKyc6IGZ1bmN0
aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0
IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0J14n
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdGlmIChub2Rl
KXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29tYmlu
YXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51
ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlzLmJp
dFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7
XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcrKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcgYW5kIHByZXZpb3Vz
IHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0J35+Jzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0dGhpc1snY29tYmluYXRv
cjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMgdXAgdG8gZG9jdW1l
bnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAobm9kZSAhPT0gdGhp
cy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgcGFyZW50IChvbmUgbGV2ZWwpXG5c
dFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVu
dCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0g
bm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnIV4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbGFzdCBjaGlsZFxuXHRcdG5vZGUg
PSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlw
ZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0JyF+JzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHBy
ZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcp
KXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBi
cmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVz
aChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5c
dH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxbJ2NvbWJpbmF0b3I6
JyArIGNdID0gY29tYmluYXRvcnNbY107XG5cbnZhciBwc2V1ZG9zID0ge1xuXG5cdC8qPHBzZXVk
by1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHknOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgY2hp
bGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0cmV0dXJuICEoY2hpbGQgJiYgY2hpbGQubm9kZVR5
cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5s
ZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1bmN0aW9uKG5vZGUsIGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7XG5cdH0sXG5cblx0J2Nv
bnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7XG5cdFx0cmV0dXJuIChub2RlLmlubmVyVGV4
dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5pbmRleE9mKHRleHQpID4gLTE7XG5cdH0sXG5c
blx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9k
ZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2Rl
KXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5
LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlO1xuXHRcdHdoaWxl
ICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZVR5cGUgPT0gMSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5c
blx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0
U2libGluZycsICdwb3NOVEgnKSxcblxuXHQnbnRoLWxhc3QtY2hpbGQnOiBsb2NhbC5jcmVhdGVO
VEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRITGFzdCcpLFxu
XG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICdu
ZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSksXG5cblx0J250aC1sYXN0LW9mLXR5cGUn
OiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAn
cG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxuXHQnaW5kZXgnOiBmdW5jdGlvbihub2RlLCBpbmRl
eCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnJyArIChpbmRl
eCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0
aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuJyk7XG5cdH0sXG5cblx0J29kZCc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwg
JzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvKjxv
Zi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZmlyc3Qtb2YtdHlwZSc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFt
ZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LW9mLXR5
cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9
PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdv
bmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGUsIG5vZGVO
YW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2li
bGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0
dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBp
ZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0
cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBj
dXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
ICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdjaGVja2VkJzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVjdGVkO1xuXHR9LFxu
XG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSAmJiAobm9kZS5ocmVm
IHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCAndGFiaW5kZXgnKSk7XG5c
dH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUgPT09IHRo
aXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVjdGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0
dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xufTtc
blxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBwXSA9IHBzZXVkb3Nb
cF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9kc1xuXG52YXIgYXR0cmlidXRlR2V0dGVycyA9IGxv
Y2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5cblx0J2Zvcic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlzLmdldEF0dHJpYnV0
ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2hy
ZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6IHRoaXMuZ2V0QXR0
cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHlsZS5jc3NUZXh0IDogdGhpcy5nZXRBdHRyaWJ1dGUo
J3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmluZGV4JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0
cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTtcblx0XHRyZXR1
cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRl
Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9LFxuXG5cdCd0eXBlJzogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcblx0fSxcblxuXHQnbWF4bGVuZ3Ro
JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRl
Tm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0
ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fVxu
XG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4
TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5ndGg7XG5cbi8vIFNsaWNrXG5cbnZhciBT
bGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGljay52ZXJzaW9u
ID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmluZGVyXG5cblNsaWNrLnNlYXJjaCA9IGZ1bmN0aW9u
KGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29u
dGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtcbn07XG5cblNsaWNrLmZpbmQgPSBmdW5jdGlvbihj
b250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5cbi8vIFNsaWNrIGNvbnRhaW5tZW50IGNoZWNrZXJc
blxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlvbihjb250YWluZXIsIG5vZGUpe1xuXHRsb2NhbC5z
ZXREb2N1bWVudChjb250YWluZXIpO1xuXHRyZXR1cm4gbG9jYWwuY29udGFpbnMoY29udGFpbmVy
LCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBnZXR0ZXJcblxuU2xpY2suZ2V0QXR0
cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUp
O1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxuU2xpY2su
aGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFzQXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxu
Ly8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9y
KXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTtcblx0aWYgKCFzZWxl
Y3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdGxvY2FsLnNldERvY3Vt
ZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNlbGVjdG9yKTtcbn07
XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVBdHRyaWJ1dGVH
ZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBBdHRyaWJ1dGVHZXR0
ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0dXJuIGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8gYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lUHNldWRv
ID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbFsncHNldWRvOicgKyBuYW1lXSA9IGZ1bmN0
aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gZm4uY2FsbChub2RlLCBhcmd1bWVudCk7
XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9va3VwUHNldWRvID0gZnVuY3Rp
b24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBuYW1lXTtcblx0aWYg
KHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gcHNldWRvLmNh
bGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8vIFNsaWNr
IG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGljay5vdmVycmlkZSA9IGZ1bmN0aW9uKHJlZ2V4cCwg
Zm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdleHAsIGZuKTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1MO1xuXG5TbGljay51aWRPZiA9IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChub2RlKTtcbn07XG5cbmlmICghdGhpcy5T
bGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBl
b2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhp
cyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudFxuXG5kZXNjcmlwdGlvbjogT25lIG9mIHRo
ZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBNb29Ub29scy4gQ29udGFpbnMgdGhlIGRvbGxhciBm
dW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rpb24sIGFuZCBhbiBoYW5kZnVsIG9mIGNyb3NzLWJy
b3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0byBsZXQgeW91IGVhc2lseSB3b3JrIHdpdGggSFRN
TCBFbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
V2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE9iamVjdCwgTnVtYmVy
LCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl1cblxucHJvdmlkZXM6IFtFbGVtZW50LCBFbGVt
ZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0b3JzXVxuXG4uLi5cbiovXG5cbnZhciBFbGVtZW50
ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdHZhciBrb25zdHJ1Y3Rv
ciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107XG5cdGlmIChrb25zdHJ1Y3RvcikgcmV0dXJu
IGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYgKHR5cGVvZiB0YWcgIT0gJ3N0cmluZycpIHJldHVy
biBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7XG5cblx0aWYgKCFwcm9wcykgcHJvcHMgPSB7
fTtcblxuXHRpZiAoISgvXltcXHctXSskLykudGVzdCh0YWcpKXtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9uc1swXVswXTtcblx0XHR0YWcgPSAocGFyc2VkLnRh
ZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnO1xuXHRcdGlmIChwYXJzZWQuaWQgJiYgcHJv
cHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQuaWQ7XG5cblx0XHR2YXIgYXR0cmlidXRl
cyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRcdGlmIChhdHRyaWJ1dGVzKSBmb3IgKHZhciBhdHRy
LCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGF0dHIg
PSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYgKHByb3BzW2F0dHIua2V5XSAhPSBudWxsKSBjb250
aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJhdG9yID09
ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTtcblx0XHRcdGVsc2UgaWYgKCFhdHRy
LnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVlO1xuXHRcdH1c
blxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0ICYmIHByb3BzWydjbGFzcyddID09IG51bGwpIHBy
b3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNzTGlzdC5qb2luKCcgJyk7XG5cdH1cblxuXHRyZXR1
cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTtcbn07XG5cblxuaWYgKEJyb3dzZXIu
RWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVtZW50LnByb3RvdHlw
ZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWlyZSB0aGUgd3JhcHBpbmcuXG5cdEVsZW1lbnQucHJv
dG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGZpcmVFdmVudC5jYWxsKHRoaXMsIHR5
cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShFbGVtZW50LnByb3RvdHlwZS5maXJlRXZlbnQpO1xu
fVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVsZW1lbnQpLm1pcnJvcihmdW5jdGlvbihuYW1lKXtc
blx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuO1xuXG5cdHZhciBvYmogPSB7fTtc
blx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdLCBhcmdzID0g
YXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXNbaV0sIHJlc3Vs
dCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3MpO1xuXHRc
dFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTtc
blx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50cykgPyBuZXcgRWxlbWVudHMocmVzdWx0cykgOiBy
ZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRzLmltcGxlbWVudChvYmopO1xufSk7XG5cbmlmICgh
QnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wYXJlbnQgPSBPYmplY3Q7XG5cblx0RWxlbWVu
dC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25zdHJ1Y3Rvcic6IEVsZW1lbnQsXG5cdFx0JyRmYW1p
bHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50JykuaGlkZSgpXG5cdH07XG5cblx0RWxlbWVu
dC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0XHRFbGVtZW50LlByb3RvdHlwZVtu
YW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5cbkVsZW1lbnQuQ29uc3RydWN0b3JzID0ge307XG5c
blxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBw
YXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge1xuXHRcdHByb3BlcnRpZXM6IFR5cGUuaXNP
YmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlvbihvYmope1xuXHRcdFx0cmV0dXJuIChvYmogIT0g
bnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgcHJvcHMgPSBwYXJhbXMucHJvcGVydGllcyB8
fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0gZG9jdW1lbnQuaWQo
cGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxvYWQgPSBwcm9wcy5vbmxvYWQgfHwgZnVuY3Rpb24o
KXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2FkO1xuXHRwcm9wcy5pZCA9IHByb3BzLm5hbWUgPSBb
cHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwgaWZyYW1lLm5hbWUp
IDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTtcblx0aWZyYW1lID0gbmV3
IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUnLCBwcm9wcyk7XG5cblx0dmFyIG9uTG9hZCA9IGZ1
bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwoaWZyYW1lLmNvbnRlbnRXaW5kb3cpO1xuXHR9O1xu
XG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7XG5cdGVsc2UgaWZyYW1l
LmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcblx0cmV0dXJuIGlmcmFtZTtcbn0pO1xuXG52
YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMpe1xuXHRpZiAobm9k
ZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2YXIgdW5pcXVlcyA9IHt9LCBub2RlO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0dmFyIHVpZCA9IFNsaWNr
LnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1bmlxdWVzW3VpZF0pe1xuXHRcdFx0XHR1bmlxdWVz
W3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxu
XHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTtcbkVsZW1lbnRzLnBh
cmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50cykuaW1wbGVtZW50
KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlciwgYmluZCl7XG5cdFx0aWYgKCFmaWx0ZXIp
IHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVyKHRoaXMs
ICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJl
dHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5cdFx0fSA6IGZpbHRlciwgYmluZCkpO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0
aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0gaXRlbTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlz
Lmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHVuc2hpZnQ6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0
XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywgaXRlbXMpO1xuXHR9
LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG5ld0VsZW1lbnRz
ID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTtcblx0
XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMuYXBwZW5kKGl0ZW0p
O1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4g
bmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oY29sbGVj
dGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7
IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR3aGlsZSAodGhpcy5sZW5ndGgp
IGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3Rl
Y3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG4vLyBGRiwgSUVcbnZhciBzcGxpY2Ug
PSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBvYmplY3QgPSB7JzAnOiAwLCAnMSc6IDEsIGxlbmd0
aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVjdCwgMSwgMSk7XG5pZiAob2JqZWN0WzFdID09IDEp
IEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNlJywgZnVuY3Rpb24oKXtcblx0dmFyIGxlbmd0aCA9
IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzW2xlbmd0aC0t
XTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJvdGVjdCgpKTtcblxuQXJyYXkuZm9yRWFjaE1ldGhv
ZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xuXHRFbGVtZW50cy5pbXBsZW1lbnQobmFtZSwgbWV0
aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3IoRWxlbWVudHMpO1xuXG4vKjxsdElFOD4qL1xudmFy
IGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtcbnRyeSB7XG5cdGNyZWF0ZUVsZW1lbnRBY2NlcHRz
SFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aW5wdXQgbmFtZT14PicpLm5hbWUgPT0g
J3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFyIGVzY2FwZVF1b3RlcyA9IGZ1bmN0aW9uKGh0bWwp
e1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC9c
Ii9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0SUU4PiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3
OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0
eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRN
TCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJI
VE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4q
L1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywg
cHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5cdFx0XHRpZiAocHJvcHMuY2hlY2tlZCAhPSBudWxs
KSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cdFx0XHRpZiAoKHByb3Bz
LnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09ICdyYWRpbycpICYmIHByb3BzLnZh
bHVlID09IG51bGwpIHByb3BzLnZhbHVlID0gJ29uJztcblx0XHRcdC8qPGx0SUU5PiovIC8vIElF
IG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBiZWZvcmUgY2hhbmdpbmcgY29udGVudCBvZiBzdHls
ZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNoYW5nZVN0eWxlSFRNTCAmJiB0YWcgPT0gJ3N0eWxl
Jyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
dHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQv
Y3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSBkZWxldGUgcHJvcHMudHlwZTtcblx0XHRc
dFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpO1xuXHRcdFx0fVxuXHRc
dFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxsdElFOD4qLy8vIEZpeCBmb3IgcmVhZG9ubHkgbmFt
ZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOFxuXHRcdFx0aWYgKGNyZWF0ZUVsZW1lbnRB
Y2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9ICc8JyArIHRhZztcblx0XHRcdFx0aWYgKHByb3Bz
Lm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLm5hbWUpICsgJ1wi
Jztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIHRhZyArPSAnIHR5cGU9XCInICsgZXNjYXBlUXVv
dGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0XHRcdFx0dGFnICs9ICc+Jztcblx0XHRcdFx0ZGVs
ZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0fVxuXHRc
dFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlkKHRoaXMuY3JlYXRlRWxl
bWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4oZnVuY3Rpb24o
KXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtcblNsaWNrLnVpZE9mKGRvY3VtZW50KTtcblxuRG9j
dW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdUZXh0Tm9kZTogZnVuY3Rpb24odGV4dCl7XG5cdFx0
cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndpbmRvdztcblx0fSxcblxuXHRpZDogKGZ1bmN0aW9u
KCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5cblx0XHRcdHN0cmluZzogZnVuY3Rpb24oaWQsIG5v
Y2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBTbGljay5maW5kKGRvYywgJyMnICsgaWQucmVwbGFj
ZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0XHRcdFx0cmV0dXJuIChpZCkgPyB0eXBlcy5lbGVt
ZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0XHRcdH0sXG5cblx0XHRcdGVsZW1lbnQ6IGZ1bmN0
aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRTbGljay51aWRPZihlbCk7XG5cdFx0XHRcdGlmICgh
bm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQpJC9pKS50ZXN0KGVs
LnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIgZmlyZUV2ZW50ID0gZWwuZmlyZUV2ZW50O1xuXHRc
dFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBpbiBJRTcsIG9yIGVsc2UgY3Jhc2hcblx0XHRcdFx0
XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0XHRcdFx0cmV0
dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRPYmpl
Y3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3RvdHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0
dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0b2JqZWN0OiBmdW5jdGlvbihvYmosIG5vY2FzaCwg
ZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0VsZW1lbnQpIHJldHVybiB0eXBlcy5lbGVtZW50KG9i
ai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9
XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4dG5vZGUgPSB0eXBlcy53aGl0ZXNwYWNlID0gdHlw
ZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQgPSBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVy
biB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWwsIG5vY2FzaCwgZG9jKXtc
blx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5ICYmIGVsLnVuaXF1ZU51bWJlcikgcmV0dXJuIGVs
O1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YoZWwpO1xuXHRcdFx0cmV0dXJuICh0eXBlc1t0eXBl
XSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNoLCBkb2MgfHwgZG9jdW1lbnQpIDogbnVsbDtcblx0
XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlmICh3aW5kb3cuJCA9PSBudWxsKSBXaW5kb3cuaW1w
bGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5jKXtcblx0cmV0dXJuIGRvY3VtZW50LmlkKGVsLCBu
YywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxuV2luZG93LmltcGxlbWVudCh7XG5cblx0Z2V0RG9j
dW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQ7XG5cdH0sXG5cblx0
Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5b
RG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEVsZW1lbnRz
OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMsIGV4
cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudDogZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgZXhw
cmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52YXIgY29udGFpbnMgPSB7Y29udGFpbnM6IGZ1bmN0
aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xpY2suY29udGFpbnModGhpcywgZWxlbWVudCk7XG59
fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlucykgRG9jdW1lbnQuaW1wbGVtZW50KGNvbnRhaW5z
KTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY29udGFpbnMpIEVsZW1lbnQu
aW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5cbi8vIHRyZWUgd2Fsa2luZ1xuXG52YXIgaW5qZWN0
Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNvbWJpbmF0b3Ipe1xuXHRpZiAoIWV4
cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yO1xuXG5cdGV4cHJlc3Npb24gPSBPYmplY3QuY2xv
bmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpO1xuXG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJl
c3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGkt
LTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0uY29tYmluYXRvciA9IGNvbWJpbmF0b3I7XG5cblx0
cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldE5leHQ6ICd+
Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5cdGdldFBhcmVudDogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5qZWN0Q29tYmluYXRv
cihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbk9iamVjdC5mb3JFYWNo
KHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRnZXRBbGxQcmV2aW91czogJyF+Jyxcblx0Z2V0U2li
bGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVuOiAnPicsXG5cdGdldFBhcmVudHM6ICchJ1xufSwg
ZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9k
LCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50cyhpbmpl
Y3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZpcnN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0
XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3Io
ZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKGV4cHJl
c3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0
Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKS5nZXRMYXN0KCkpO1xuXHR9LFxuXG5cdGdldFdp
bmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LndpbmRvdztc
blx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25l
ckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbihpZCl7XG5cdFx0
cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcnICsgaWQpLnJlcGxh
Y2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xuXHR9LFxuXG5cdG1hdGNoOiBmdW5jdGlvbihleHBy
ZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0Y2godGhpcywgZXhw
cmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxuXG5pZiAod2luZG93LiQkID09IG51bGwpIFdpbmRv
dy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRpZiAoYXJndW1lbnRzLmxl
bmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9mIHNlbGVjdG9yID09ICdzdHJpbmcnKSByZXR1cm4g
U2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHNlbGVjdG9yLCBuZXcgRWxlbWVudHMpO1xuXHRc
dGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50
cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJuIG5ldyBFbGVtZW50cyhhcmd1bWVudHMpO1xufSk7
XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5zZXJ0ZXJzID0ge1xuXG5cdGJlZm9yZTogZnVuY3Rp
b24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9k
ZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQp
O1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2YXIg
cGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5pbnNl
cnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2libGluZyk7XG5cdH0sXG5cblx0Ym90dG9t
OiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNv
bnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0
ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENoaWxkKTtcblx0fVxu
XG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTtcblxuXG5cbi8vIGdl
dFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxudmFyIHByb3BlcnR5R2V0dGVycyA9IHt9LCBwcm9w
ZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJvcGVydGllc1xuXG52YXIgcHJvcGVydGllcyA9IHt9
O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBlJywgJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZScsICdh
Y2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAnY2VsbFNwYWNpbmcnLCAnY29sU3BhbicsXG5cdCdm
cmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCdcbl0sIGZ1bmN0aW9u
KHByb3BlcnR5KXtcblx0cHJvcGVydGllc1twcm9wZXJ0eS50b0xvd2VyQ2FzZSgpXSA9IHByb3Bl
cnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRtbCA9ICdpbm5lckhUTUwnO1xucHJvcGVydGllcy50
ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnRleHRDb250ZW50ID09IG51bGwp
ID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVudCc7XG5cbk9iamVjdC5mb3JFYWNoKHByb3BlcnRp
ZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5cdHByb3BlcnR5U2V0dGVyc1trZXldID0gZnVuY3Rp
b24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbcmVhbF0gPSB2YWx1ZTtcblx0fTtcblx0cHJvcGVy
dHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZVtyZWFsXTtc
blx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xucHJvcGVydHlTZXR0ZXJzLnRleHQgPSAoZnVuY3Rp
b24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRpZiAobm9kZS5nZXQo
J3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpO1xuXHRcdGVsc2Ugbm9k
ZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7XG5cdH07XG59KShwcm9wZXJ0eVNldHRlcnMudGV4
dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRlcil7XG5cdHJldHVy
biBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUn
KSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUpO1xuXHR9O1xufSkocHJvcGVydHlHZXR0
ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5cbi8vIEJvb2xlYW5zXG5cbnZhciBib29scyA9IFtc
blx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lzbWFwJywgJ2RlY2xhcmUnLCAnbm9zaGFkZScsICdj
aGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxlJywgJ3NlbGVjdGVk
JywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywgJ2F1dG9mb2N1cycs
ICdjb250cm9scycsICdhdXRvcGxheScsXG5cdCdsb29wJ1xuXTtcblxudmFyIGJvb2xlYW5zID0g
e307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBmdW5jdGlvbihib29sKXtcblx0dmFyIGxvd2VyID0g
Ym9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29sZWFuc1tsb3dlcl0gPSBib29sO1xuXHRwcm9wZXJ0
eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbYm9vbF0g
PSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29sXTtcblx0fTtcbn0pO1xuXG4vLyBTcGVjaWFsIGNh
c2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7XG5cblx0J2NsYXNzJzogZnVu
Y3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xh
c3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVl
KTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnaHRtbEZv
cicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3IgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdm
b3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xu
XHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5bGUuY3NzVGV4dCA9IHZhbHVlIDogbm9kZS5zZXRB
dHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xuXHR9LFxuXG5cdCd2YWx1ZSc6IGZ1bmN0aW9uKG5v
ZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwpID8gdmFsdWUgOiAn
Jztcblx0fVxuXG59KTtcblxucHJvcGVydHlHZXR0ZXJzWydjbGFzcyddID0gZnVuY3Rpb24obm9k
ZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSB8fCBu
dWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG59O1xuXG4vKiA8d2Via2l0PiAqL1xu
dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyBJRSBzZXRzIHR5
cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xudHJ5IHsgZWwudHlwZSA9ICdidXR0b24nOyB9IGNh
dGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAnYnV0dG9uJykgcHJvcGVydHlTZXR0ZXJzLnR5cGUg
PSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdG5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgdmFs
dWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwvd2Via2l0PiAqL1xuXG4vKjxJRT4qL1xuXG4vKjxs
dElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRc
bnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xu
XHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0Zmxh
ZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0p
KCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVlLCBodG1sNUlucHV0U3VwcG9ydDtcblxuLy8gIzIx
NzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5wdXQudHlwZSA9ICdzdWJtaXQnO1xudm9sYXRpbGVJ
bnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0gJ3QnO1xuXG4vLyAjMjQ0MyAtIElFIHRocm93cyBc
IkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUgaW5wdXQgdHlwZXNc
bnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7XG5cdGlucHV0LnR5cGUgPSAnZW1haWwnO1xuXHRo
dG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJztcbn0gY2F0Y2ggKGUpe31c
blxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8ICFodG1sNUlucHV0
U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKXtcblx0
dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuXHRcdG5vZGUudHlwZSA9IHR5cGU7
XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKXt9XG59O1xuLyo8L0lFPiov
XG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSAqL1xuXG4vKiA8bHRJRTk+ICovXG52YXIg
cG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oZGl2KXtcblx0ZGl2LnJhbmRvbSA9ICdh
dHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5nZXRBdHRyaWJ1dGUoJ3JhbmRvbScpID09ICdhdHRy
aWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxudmFyIGhhc0Ns
b25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xuXHR0ZXN0LmlubmVySFRNTCA9ICc8b2JqZWN0Pjxw
YXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZhbHVlPVwidGhlIHVua25vd25cIiAvPjwvb2JqZWN0
Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9kZSh0cnVlKS5maXJzdENoaWxkLmNoaWxkTm9kZXMu
bGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4vKiA8L2x0
SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0ID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0
dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1lIHx8ICcnKS5jbGVhbigpLnNwbGl0KCcgJyksIHVu
aXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFt
ZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0gJycgJiYgIXVuaXF1ZXNbY2xhc3NOYW1lXSkgcmV0
dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNsYXNzTmFtZTtcblx0fSk7XG59O1xuXG52YXIgYWRk
VG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKG5hbWUp
O1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhp
cy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIHNldHRlciA9IHBy
b3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChzZXR0ZXIpe1xuXHRc
dFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0dmFyIGF0dHJpYnV0ZUFsbG93TGlzdDtcblx0XHRcdGlmIChwb2xsdXRlc0dldEF0
dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFs
bG93TGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJRTk+ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9
PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8q
IDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0
cmlidXRlQWxsb3dMaXN0W25hbWVdO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fSBl
bHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2YWx1ZSk7XG5cdFx0
XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRy
aWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXRQcm9wZXJ0aWVzOiBm
dW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRmb3IgKHZhciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRl
cykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlXSk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xu
XHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMpO1xuXHRcdC8qIDxsdElFOT4gKi9cblx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpe1xuXHRcdFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0ZUFsbG93TGlzdCA9IHRoaXMucmV0cmlldmUoJyRh
dHRyaWJ1dGVBbGxvd0xpc3QnLCB7fSk7XG5cdFx0XHRpZiAoIWF0dHIpIHJldHVybiBudWxsO1xu
XHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAhYXR0cmlidXRlQWxsb3dMaXN0W25hbWVdKXtcblx0
XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRlckhUTUw7XG5cdFx0XHRcdC8vIHNlZ21lbnQgYnkg
dGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRlIG5hbWVcblx0XHRc
dFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRlci5zZWFyY2goL1xcLz9bJ1wiXT8+KD8hW148XSo8
WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0YXR0cmli
dXRlQWxsb3dMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyogPC9sdElF
OT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xpY2suZ2V0QXR0cmlidXRlKHRoaXMsIG5hbWUpO1xu
XHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xpY2suaGFzQXR0cmlidXRlKHRoaXMsIG5hbWUpKSA/
IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0Z2V0UHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gYXJncy5t
YXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcykuYXNzb2NpYXRlKGFyZ3MpO1xuXHR9LFxuXG5cdHJl
bW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0
eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xu
XHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5LCB0aGlzKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKXtcblx0
XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5
ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB0aGlz
LnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdGdl
dDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVz
W3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5
LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7XG5cdH0ub3ZlcmxvYWRH
ZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0g
RWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lcmFz
ZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3ZlUHJvcGVydHkocHJv
cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGhhc0NsYXNzTGlzdCA/
IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5z
KGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiBjbGFz
c2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkZENs
YXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xh
c3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc2Vz
KGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xhc3NOYW1lKS5qb2luKCcgJyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNs
YXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2gocmVtb3ZlRnJvbUNsYXNz
TGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUp
e1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSk7XG5cdFx0Y2xh
c3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xhc3NOYW1lcyk7XG5c
dFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVzLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3JjZSl7XG5c
dFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNlID0gIXRoaXMuaGFzQ2xhc3MoY2xhc3NOYW1lKTtc
blx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1lKSA6IHRoaXMucmVt
b3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZG9wdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQsIGVsZW1lbnRzID0gQXJyYXkuZmxhdHRlbihhcmd1
bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCA+IDEpIHBh
cmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG5c
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9
IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTtcblx0XHRcdGlmIChlbGVtZW50KSBwYXJl
bnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyYWdtZW50KSB0aGlz
LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFw
cGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXtcblx0XHRyZXR1cm4gdGhpcy5ncmFiKHRo
aXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUpO1xuXHR9LFxuXG5cdGdy
YWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20n
XShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwg
J2JvdHRvbSddKHRoaXMsIGRvY3VtZW50LmlkKGVsLCB0cnVlKSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXtcblx0XHRlbCA9IGRvY3VtZW50Lmlk
KGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLCBlbCk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcHM6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5c
dFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZXMo
ZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxcblxuXHRnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8vIFNhZmFyaSAzLjIuMVxuXHRcdHJldHVybiBuZXcg
RWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5jdGlvbihvcHRp
b24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZDtcblx0XHR9KSk7XG5cdH0sXG5cblx0
dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblx0
XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rp
b24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBlbC50eXBlO1xuXHRcdFx0aWYgKCFlbC5uYW1lIHx8
IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAncmVzZXQnIHx8IHR5
cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG5cdFx0XHR2YXIgdmFs
dWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxlY3RlZCgpLm1hcChm
dW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJRVxuXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuaWQo
b3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9KSA6ICgodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUg
PT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNrZWQpID8gbnVsbCA6IGVsLmdldCgndmFsdWUnKTtc
blxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2YWwpe1xuXHRcdFx0
XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVzaChlbmNvZGVV
UklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsKSk7XG5c
dFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9
XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxcblxudmFyIGFwcGVuZEluc2VydGVycyA9IHtcblx0
YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRhZnRlcjogJ2FmdGVyRW5kJyxcblx0Ym90dG9tOiAn
YmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJCZWdpbicsXG5cdGluc2lkZTogJ2JlZm9yZUVuZCdc
bn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNlcnRBZGphY2VudEhU
TUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0aW9uKGh0bWwsIHdo
ZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2VudEhUTUwoYXBwZW5kSW5zZXJ0ZXJzW3doZXJlIHx8
ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVybiB0aGlzO1xufSA6IGZ1bmN0aW9uKGh0bWwsIHdo
ZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6IGh0bWx9KSxcblx0
XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rlcyxcblx0XHRmcmFnbWVudCA9IHRlbXAuZmlyc3RD
aGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSByZXR1cm4gdGhpcztcblx0aWYgKGNoaWxkcmVuLmxl
bmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcblx0XHR9XG5cdH1c
blxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGZyYWdtZW50LCB0aGlzKTtcblx0cmV0
dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0ge307XG5cbnZh
ciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRyZXR1cm4gKHN0b3JhZ2VbdWlkXSB8fCAoc3RvcmFn
ZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIg
dWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5cdGlmIChpdGVtLnJlbW92ZUV2ZW50cykgaXRlbS5y
ZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBpdGVtLmNsZWFyQXR0
cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51bGwpe1xuXHRcdGRlbGV0ZSBjb2xsZWN0ZWRbdWlk
XTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRdO1xuXHR9XG5cdHJldHVybiBpdGVtO1xufTtcblxu
dmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdzZWxlY3RlZCcsIHRl
eHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGRlc3Ryb3k6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVuID0gY2xlYW4odGhpcykuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNoKGNoaWxkcmVuLCBjbGVhbik7XG5cdFx0RWxlbWVu
dC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5j
dGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQu
ZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihjb250ZW50cywg
a2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTtcblx0XHR2YXIgY2xv
bmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwgdGUgPSBbdGhpc10s
IGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xuXHRcdFx0Y2UuYXBwZW5kKEFycmF5LmNvbnZlcnQo
Y2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdFx0dGUuYXBwZW5kKEFycmF5
LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0fVxuXG5cdFx0
Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtcblx0XHRcdHZhciBub2RlID0gY2VbaV0sIGVsZW1l
bnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnaWQn
KTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAobm9kZS5jbGVhckF0dHJpYnV0ZXMpe1xu
XHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRlcygpO1xuXHRcdFx0XHRub2RlLm1lcmdlQXR0cmli
dXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3VuaXF1ZU51bWJl
cicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRpb25zKXtcblx0XHRcdFx0XHR2YXIgbm8gPSBub2Rl
Lm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSBu
by5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0ZWQ7XG5cdFx0XHRc
dH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHByb3AgPSBmb3JtUHJv
cHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdFx0aWYgKHByb3AgJiYgZWxl
bWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07XG5cdFx0fVxuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVCdWcpe1xuXHRcdFx0dmFyIGNvID0gY2xvbmUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChpID0gY28ubGVuZ3RoOyBpLS07KSBjb1tpXS5vdXRl
ckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5cdFx0fVxuXHRcdC8qPC9sdElFOT4qL1xuXHRcdHJl
dHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5cdH1cblxufSk7XG5cbltFbGVtZW50LCBXaW5kb3cs
IERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRMaXN0ZW5lcjogZnVuY3Rp
b24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxlY3RlZFtTbGljay51aWRPZih0aGlzKV0gPSB0aGlz
O1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRFdmVudExpc3RlbmVyKSB0aGlzLmFkZEV2ZW50TGlz
dGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuYXR0YWNoRXZl
bnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVM
aXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh0aGlzLnJlbW92ZUV2ZW50TGlz
dGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0p
O1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0eSwgZGZsdCl7XG5c
dFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9wID0gc3RvcmFnZVtw
cm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0gbnVsbCAmJiBwcm9wID09IG51bGwpIHByb3AgPSBz
dG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5cdFx0cmV0dXJuIHByb3AgIT0gbnVsbCA/IHByb3Ag
OiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRc
dHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRzdG9yYWdlW3Byb3Bl
cnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVsaW1pbmF0ZTogZnVu
Y3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMp
KTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBnYyA9IGZ1bmN0aW9uKCl7XG5cdFx0T2JqZWN0LmVh
Y2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0aWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFnZSkgQ29s
bGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cucmVtb3ZlTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtc
blx0fTtcblx0d2luZG93LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG59XG4vKjwvbHRJRTk+
Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307XG5cblxuXG5FbGVtZW50LlByb3BlcnRpZXMu
c3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihzdHlsZSl7XG5cdFx0dGhpcy5zdHlsZS5jc3NU
ZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5z
dHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnRhZyA9
IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudGFnTmFtZS50b0xvd2Vy
Q2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy5odG1sID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYgKGh0bWwgPT0gbnVsbCkgaHRtbCA9ICcnO1xuXHRc
dGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRtbC5qb2luKCcnKTtc
blxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKHRoaXMuc3R5bGVTaGVldCAmJiAhY2FuQ2hhbmdl
U3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGh0bWw7XG5cdFx0ZWxzZSAvKjwv
bHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycpO1xuXHR9XG5cbn07XG5cbnZhciBzdXBwb3J0c0hU
TUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gdHJ1ZSwgc3VwcG9y
dHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8qPGx0SUU5PiovXG4vLyB0ZWNobmlxdWUgYnkgamRi
YXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQuY29tL2lubmVyc2hpdi9cbnZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBmcmFnbWVudDtcbmRpdi5pbm5lckhUTUwg
PSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gKGRpdi5jaGlsZE5vZGVz
Lmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblx0dmFyIHRhZ3Mg
PSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2Nh
cHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBw
cm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAnKTtcblx0ZnJhZ21l
bnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGwgPSB0YWdzLmxlbmd0aDtc
blx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3JlYXRlRWxlbWVudCh0YWdzW2xdKTtcbn1cbmRpdiA9
IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbnN1cHBvcnRzVGFibGVJbm5lckhUTUwg
PSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdHZhciB0YWJsZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRhYmxlLmlubmVySFRNTCA9ICc8dHI+PHRkPjwvdGQ+
PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0pO1xuXG4vKjxsdEZGND4qL1xudmFyIHRyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwgaHRtbCA9ICc8dGQ+PC90ZD4nO1xudHIuaW5uZXJI
VE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5lckhUTUwgPSAodHIuaW5uZXJIVE1MID09IGh0bWwp
O1xudHIgPSBudWxsO1xuLyo8L2x0RkY0PiovXG5cbmlmICghc3VwcG9ydHNUYWJsZUlubmVySFRN
TCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8fCAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblxu
XHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0KXtcblxuXHRcdHZh
ciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0YWJsZTogWzEsICc8dGFibGU+JywgJzwvdGFibGU+
J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNlbGVjdD4nLCAnPC9zZWxlY3Q+J10sXG5cdFx0XHR0
Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG5cdFx0XHR0
cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J11cblx0
XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25zLnRmb290ID0gdHJh
bnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGh0bWwpe1xuXG5cdFx0XHQv
KjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMuc3R5bGVTaGVldCkgcmV0dXJuIHNldC5jYWxsKHRo
aXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgd3JhcCA9IHRyYW5zbGF0
aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRcdFx0aWYgKCF3cmFwICYmICFzdXBwb3J0c0hUTUw1
RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcnXTtcblx0XHRcdGlmICghd3JhcCkgcmV0dXJuIHNl
dC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0XHR2YXIgbGV2ZWwgPSB3cmFwWzBdLCB3cmFwcGVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHRhcmdldCA9IHdyYXBwZXI7XG5cdFx0
XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcHBl
cik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRNTCA9IFt3cmFwWzFdLCBodG1sLCB3cmFwWzJdXS5m
bGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3aGlsZSAobGV2ZWwtLSkgdGFyZ2V0ID0gdGFyZ2V0
LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVtcHR5KCkuYWRvcHQodGFyZ2V0LmNoaWxkTm9kZXMp
O1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LnJlbW92ZUNoaWxk
KHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9IG51bGw7XG5cdFx0fTtcblxuXHR9KShFbGVtZW50
LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxuLyo8L0lFPiovXG5cbi8qPGx0SUU5PiovXG52YXIg
dGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG50ZXN0Rm9ybS5pbm5l
ckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4nO1xuXG5pZiAodGVz
dEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAncycpIEVsZW1lbnQuUHJvcGVydGllcy52YWx1ZSA9
IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGFnID0gdGhpcy5nZXQoJ3Rh
ZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcpIHJldHVybiB0aGlzLnNldFByb3BlcnR5KCd2
YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxlbWVudHMoJ29wdGlv
bicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIG9wdGlvbiA9IG9wdGlvbnNbaV0sXG5c
dFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKSxcblx0XHRcdFx0
b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBv
cHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IHZhbHVlKSByZXR1
cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0KCd0YWcnKTtcblxu
XHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYgdGFnICE9ICdvcHRpb24nKSByZXR1cm4gdGhpcy5n
ZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRcdGlmICh0YWcgPT0gJ3NlbGVjdCcgJiYgIShvcHRp
b24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVswXSkpIHJldHVybiAnJztcblxuXHRcdHZhciBhdHRy
ID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7XG5cdFx0cmV0dXJuIChhdHRyICYm
IGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0
fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5pZiAo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKSkgRWxl
bWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKGlkKXtcblx0XHR0aGlzLmlk
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7XG5cdH0sXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5pZCB8fCBudWxsO1xuXHR9LFxuXHRlcmFzZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZh
bHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+Ki9cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1l
OiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5cGUsIHRvIG1ha2Ug
dGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgRnVuY3Rpb24sIFN0
cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczogRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxudmFyIF9rZXlzID0ge307XG52YXIgbm9ybWFsaXplV2hlZWxTcGVlZCA9IGZ1bmN0aW9u
KGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7XG5cdGlmIChldmVudC53aGVlbERlbHRhKXtcblx0
XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxEZWx0YSAlIDEyMCA9PSAwID8gZXZlbnQud2hlZWxE
ZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVsdGEgLyAxMjtcblx0fSBlbHNlIHtcblx0XHR2YXIg
cmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8IGV2ZW50LmRldGFpbCB8fCAwO1xuXHRcdG5vcm1h
bGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMgOiByYXdBbW91bnQg
KiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZWQ7XG59O1xuXG52YXIgRE9NRXZlbnQgPSB0
aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RPTUV2ZW50JywgZnVuY3Rpb24oZXZlbnQsIHdpbil7
XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luLmV2ZW50
O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7XG5cdHRoaXMuZXZlbnQgPSBl
dmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0cnVlO1xuXHR0aGlzLnNoaWZ0ID0gZXZlbnQuc2hp
ZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2ZW50LmN0cmxLZXk7XG5cdHRoaXMuYWx0ID0gZXZl
bnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBldmVudC5tZXRhS2V5O1xuXHR2YXIgdHlwZSA9IHRo
aXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZl
bnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykg
dGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQo
dGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRleE9mKCdrZXknKSA9PSAwKXtcblx0XHR2YXIgY29k
ZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtcblx0XHRpZiAo
IXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5cHJlc3MnKSB0aGlzLmtleSA9IF9rZXlzW2NvZGVd
O1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3duJyB8fCB0eXBlID09ICdrZXl1cCcpe1xuXHRcdFx0
aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEyNCkgdGhpcy5rZXkgPSAnZicgKyAoY29kZSAtIDEx
MSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4gOTUgJiYgY29kZSA8IDEwNikgdGhpcy5rZXkgPSBj
b2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmtleSA9PSBudWxsKSB0aGlzLmtleSA9IFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKTtcblx0fSBlbHNlIGlmICh0eXBl
ID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0gJ2NvbnRleHRtZW51
JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUu
aW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0XHR2YXIgZG9jID0gd2luLmRvY3VtZW50O1xuXHRc
dGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5cdFx0dGhpcy5wYWdlID0ge1xuXHRcdFx0eDogKGV2
ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYICsgZG9jLnNj
cm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSA6
IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wXG5cdFx0fTtcblx0XHR0aGlzLmNsaWVudCA9
IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBh
Z2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxcblx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxs
KSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xpZW50WVxuXHRcdH07
XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlID09ICd3aGVlbCcgfHwg
dHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMud2hlZWwgPSBub3JtYWxpemVXaGVlbFNwZWVkKGV2
ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0gMyB8fCBldmVudC5i
dXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91
c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21vdXNlbGVhdmUnKXtc
blx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdt
b3VzZWVudGVyJztcblx0XHRcdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBl
dmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQnXTtcblx0XHRcdHdo
aWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQu
cGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3VtZW50LmlkKHJlbGF0
ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNoJykgPT0gMCB8fCB0
eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXtcblx0XHR0aGlzLnJvdGF0aW9uID0gZXZlbnQu
cm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9IGV2ZW50LnNjYWxlO1xuXHRcdHRoaXMudGFyZ2V0
VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7XG5cdFx0dGhpcy5jaGFuZ2VkVG91Y2hlcyA9
IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRcdHZhciB0b3VjaGVzID0gdGhpcy50b3VjaGVzID0g
ZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXtcblx0XHRcdHZh
ciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0XHR0aGlzLnBhZ2UgPSB7eDogdG91Y2gucGFnZVgs
IHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRoaXMuY2xpZW50ID0ge3g6IHRvdWNoLmNsaWVudFgs
IHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhpcy5jbGllbnQpIHRo
aXMuY2xpZW50ID0ge307XG5cdGlmICghdGhpcy5wYWdlKSB0aGlzLnBhZ2UgPSB7fTtcbn0pO1xu
XG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fSxcblxuXHRzdG9w
UHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5j
YW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByZXZlbnRE
ZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KSB0
aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LnJldHVyblZh
bHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkRPTUV2ZW50LmRl
ZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtleSl7XG5cdF9rZXlzW2NvZGVdID0ga2V5O1xuXHRy
ZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50LmRlZmluZUtleXMgPSBET01FdmVudC5kZWZpbmVL
ZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleXMoe1xuXHQnMzgn
OiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6ICdsZWZ0JywgJzM5JzogJ3JpZ2h0Jyxcblx0JzI3
JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4JzogJ2JhY2tzcGFjZScsICc5JzogJ3RhYicsXG5c
dCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInXG59KTtcblxufSkoKTtcblxuXG5cblxuXG4v
KlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEVs
ZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBmaWxlIGFsc28gaW5j
bHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVudCBFdmVudHMsIGlm
IG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVzOiBFbGVtZW50LkV2ZW50XG5cbi4uLlxuKi9cblxu
KGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5jdGlv
bihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50cyhldmVudHMpO1xufX07XG5cbltFbGVtZW50LCBX
aW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMn
LCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwg
dmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50c1t0eXBlXS5rZXlzLmNvbnRhaW5zKGZuKSkgcmV0
dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMucHVzaChmbik7XG5cdFx0dmFyIHJlYWxU
eXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdLFxuXHRcdFx0
Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxmID0gdGhpcztcblx0XHRpZiAoY3VzdG9tKXtcblx0
XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3RvbS5vbkFkZC5jYWxsKHRoaXMsIGZuLCB0eXBlKTtc
blx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uKXtcblx0XHRcdFx0Y29uZGl0aW9uID0gZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uLmNhbGwodGhpcywgZXZl
bnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdFx0cmV0dXJu
IHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHJlYWxU
eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0
XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZuLmNhbGwoc2Vs
Zik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZlRXZlbnQgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50c1ty
ZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2ZW50KXtcblx0XHRcdGlmIChuYXRpdmVFdmVudCA9
PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRldmVudCA9
IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5kb3coKSk7XG5cdFx0XHRcdFx0aWYgKGNv
bmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0b3AoKTtcblx0XHRc
dFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWRkTGlzdGVuZXIocmVhbFR5cGUsIGRlZm4sIGFy
Z3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2ZW50c1t0eXBlXS52YWx1ZXMucHVzaChkZWZuKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwg
Zm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAo
IWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHR2YXIgbGlzdCA9IGV2
ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXggPSBsaXN0LmtleXMuaW5kZXhPZihmbik7XG5cdFx0
aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpcztcblx0XHR2YXIgdmFsdWUgPSBsaXN0LnZhbHVl
c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qua2V5c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qu
dmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV07XG5c
dFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uUmVtb3ZlKSBjdXN0b20ub25SZW1v
dmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHR5cGUgPSBG
dW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZlbnRzW3R5cGVdKSA/IHRoaXMucmVtb3ZlTGlzdGVu
ZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1syXSkgOiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50
czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMu
YWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRp
ZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50
cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRo
aXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xu
XHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICghZXZlbnRzKXtcblx0XHRc
dGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhpcy5yZW1vdmVFdmVudHModHlwZSk7XG5cdFx0XHR0
aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5cdFx0fSBlbHNlIGlmIChhdHRhY2hlZFtldmVudHNd
KXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRc
dFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0
ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHZhciBldmVu
dHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRz
W3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblxu
XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5
KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMs
IGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25l
RXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXtcblx0XHRmcm9tID0gZG9jdW1lbnQuaWQoZnJv
bSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20ucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICgh
ZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIXR5cGUpe1xuXHRcdFx0Zm9yICh2YXIgZXZl
bnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9uZUV2ZW50cyhmcm9tLCBldmVudFR5cGUpO1xuXHRc
dH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtcblx0XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2go
ZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50KHR5cGUsIGZuKTtcblx0XHRcdH0s
IHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRWxlbWVudC5O
YXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAyLCBkYmxjbGljazogMiwgbW91c2V1cDogMiwgbW91
c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwgLy9tb3VzZSBidXR0b25zXG5cdHdoZWVsOiAyLCBt
b3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVlbFxuXHRtb3VzZW92
ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1vdmU6IDIsIHNlbGVjdHN0YXJ0OiAyLCBzZWxlY3Rl
bmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0a2V5ZG93bjogMiwga2V5cHJlc3M6IDIsIGtleXVw
OiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBtb2JpbGVcblx0dG91
Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0b3VjaGVuZDogMiwgdG91Y2hjYW5jZWw6IDIsIC8v
IHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwgZ2VzdHVyZWVuZDog
MiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAyLCByZXNldDogMiwg
c2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9mb3JtIGVsZW1lbnRz
XG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVmb3JldW5sb2FkOiAyLCByZXNpemU6IDEsIG1vdmU6
IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJlYWR5c3RhdGVjaGFuZ2U6IDEsIC8vd2luZG93XG5c
dGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAyLCBwYWdlc2hvdzogMiwgcGFnZWhpZGU6IDIsIC8v
IGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1lc3NhZ2U6IDIgLy9t
aXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9IHtcblx0bW91c2V3aGVlbDoge1xuXHRcdGJhc2U6
ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdoZWVsJyBpbiBkb2N1
bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNjcm9sbCdcblx0fVxufTtcblxudmFyIGNo
ZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJn
ZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwpIHJldHVybiB0cnVlO1xuXHRpZiAoIXJlbGF0ZWQp
IHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYgcmVsYXRlZC5wcmVm
aXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYgIXRoaXMuY29udGFp
bnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdvbm1vdXNlZW50ZXInIGluIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50ZXIgPSBFbGVtZW50
Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjtcblx0RWxlbWVudC5Nb3VzZWVudGVyQ2hlY2sg
PSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlZW50ZXIgPSB7XG5cdFx0
YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xuXG5cdEVsZW1l
bnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25k
aXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8qPGx0SUU5PiovXG5pZiAoIXdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMucHJvcGVydHljaGFuZ2UgPSAyO1xu
XHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7XG5cdFx0YmFzZTogZnVuY3Rpb24oKXtcblx0XHRc
dHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRcdFx0cmV0dXJuICh0aGlzLmdldCgndGFnJykgPT0g
J2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94JykpID8gJ3By
b3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xuXHRcdH0sXG5cdFx0Y29uZGl0aW9uOiBmdW5jdGlv
bihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVydHljaGFuZ2UnIHx8
IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7XG5cdFx0fVxuXHR9O1xufVxu
Lyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGVs
ZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0
IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZpY2llbnQgZXZlbnQg
bWFuYWdlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRpb25dXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBldmVudExpc3RlbmVyU3VwcG9ydCA9ICEhd2luZG93
LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3VzaW4gPSBFbGVt
ZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7XG5cbnZhciBidWJibGVVcCA9IGZ1bmN0aW9u
KHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFy
Z2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkgcmV0dXJuIGZuLmNh
bGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtcblx0XHR0YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJn
ZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5cbnZhciBtYXAgPSB7XG5cdG1vdXNlZW50ZXI6IHtc
blx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRl
ckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRc
dGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0Zm9jdXM6IHtcblx0
XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycgOiAnaW4nKSxcblx0
XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJsdXI6IHtcblx0XHRiYXNlOiBldmVudExpc3RlbmVy
U3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9XG59
O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkgPSAnJGRlbGVnYXRpb246JztcbnZhciBmb3JtT2Jz
ZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxuXHRyZXR1cm4ge1xuXG5cdFx0YmFzZTogJ2ZvY3Vz
aW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxmLCB1aWQpe1xuXHRcdFx0dmFyIGxpc3Qg
PSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KVt1aWRdO1xuXHRc
dFx0aWYgKGxpc3QgJiYgbGlzdC5mb3JtcykgZm9yICh2YXIgaSA9IGxpc3QuZm9ybXMubGVuZ3Ro
OyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNv
IGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRcdC8vIHJlbW92ZUV2ZW50IG1ldGhvZCBhbnltb3Jl
LiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdhc1xuXHRcdFx0XHQvLyByZW1vdmVkIGFzIHdlbGwu
XG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0LmZvcm1zW2ldLnJl
bW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bGlz
dGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCl7XG5cdFx0
XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8gdGFyZ2V0IDogZXZl
bnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpO1xuXHRcdFx0aWYgKCFmb3JtKSByZXR1cm47XG5c
blx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3Rl
bmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVuZXIgPSBsaXN0ZW5lcnNbdWlkXSB8fCB7Zm9ybXM6
IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9ybXMgPSBsaXN0ZW5lci5mb3JtcywgZm5zID0gbGlz
dGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAhPSAtMSkgcmV0dXJu
O1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtcblxuXHRcdFx0dmFyIF9mbiA9IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtc
blx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2ZW50KHR5cGUsIF9mbik7XG5cdFx0XHRmbnMucHVz
aChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNbdWlkXSA9IGxpc3RlbmVyO1xuXHRcdFx0c2VsZi5z
dG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCBsaXN0ZW5lcnMpO1xuXHRcdH1cblx0fTtc
bn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cdHJldHVybiB7XG5c
dFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZu
LCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZhciBldmVudHMgPSB7Ymx1cjogZnVuY3Rpb24oKXtc
blx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMoZXZlbnRzKTtcblx0XHRcdH19O1xuXHRcdFx0ZXZl
bnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxmLCBtYXRj
aCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGV2ZW50LnRhcmdldC5hZGRF
dmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07XG59O1xuXG5pZiAoIWV2ZW50TGlzdGVuZXJTdXBw
b3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xuXHRzdWJtaXQ6IGZvcm1PYnNlcnZlcignc3VibWl0
JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksXG5cdGNoYW5nZTogaW5wdXRPYnNl
cnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDogaW5wdXRPYnNlcnZlcignc2VsZWN0Jylcbn0pO1xu
Lyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLFxuXHRhZGRFdmVu
dCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1vdmVFdmVudCA9IHByb3RvLnJlbW92ZUV2ZW50O1xu
XG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQsIG1ldGhvZCl7XG5cdHJldHVybiBmdW5jdGlvbih0
eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0aWYgKHR5cGUuaW5kZXhPZignOnJlbGF5JykgPT0g
LTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFy
IHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdGlmIChw
YXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5
cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgbmV3VHlwZSA9IHBhcnNlZC50YWc7XG5cdFx0
cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFjaChmdW5jdGlvbihwc2V1ZG8pe1xuXHRcdFx0bmV3
VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsgKHBzZXVkby52YWx1ZSA/ICcoJyArIHBzZXVkby52
YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtcblx0XHRvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbik7
XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIG5ld1R5cGUsIHBhcnNlZC5wc2V1ZG9zWzBd
LnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52YXIgZGVsZWdhdGlvbiA9IHtcblxuXHRhZGRFdmVu
dDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0
cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYg
KHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0aWYgKHN0b3JlZFtfdWlk
XS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0ubWF0Y2ggPT0gbWF0Y2gpIHJldHVybiB0aGlzO1xu
XHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5cGUsIF9tYXRjaCA9IG1hdGNoLCBfZm4gPSBmbiwg
X21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xu
XG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpe1xuXHRcdFx0cmV0dXJuIFNsaWNrLm1hdGNo
KHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xuXG5cdFx0dmFyIGVsZW1lbnRFdmVudCA9IEVsZW1l
bnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAoX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50
ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24pe1xuXHRcdFx0dmFyIF9fbWF0Y2ggPSBtYXRjaCwg
Y29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNvbmRpdGlvbjtcblx0
XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVudCl7XG5cdFx0XHRcdHJldHVybiBfX21h
dGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRpdGlvbi5jYWxsKHRhcmdldCwgZXZlbnQsIHR5cGUp
O1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgc2VsZiA9IHRoaXMsIHVpZCA9IFN0cmluZy51
bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0b3IgPSBfbWFwLmxpc3RlbiA/IGZ1bmN0aW9uKGV2
ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0
KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBfbWFwLmxpc3Rlbihz
ZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCk7XG5cdFx0fSA6IGZ1bmN0aW9uKGV2
ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0
KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBidWJibGVVcChzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdH07XG5cblx0XHRpZiAoIXN0b3JlZCkg
c3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3VpZF0gPSB7XG5cdFx0XHRtYXRjaDogX21hdGNoLFxu
XHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVnYXRvcjogZGVsZWdhdG9yXG5cdFx0fTtcblx0XHRz
dG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRyZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0
eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1
bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3VpZCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJl
dHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlm
ICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxuXHRcdGlmIChfdWlkKXtcblx0XHRcdHZhciBfdHlw
ZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3JlZFtfdWlkXS5kZWxlZ2F0b3IsIF9tYXAgPSBtYXBb
dHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXHRcdFx0aWYg
KF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0aGlzLCBfdWlkKTtcblx0XHRcdGRlbGV0ZSBzdG9y
ZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRcdHJldHVybiBy
ZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJlKTtcblx0
XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5cdFx0aWYgKGZuKSBmb3IgKF9fdWlkIGluIHN0b3Jl
ZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNo
ICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywg
dHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5cdFx0fSBlbHNlIGZvciAoX191aWQgaW4gc3RvcmVk
KXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2gp
IGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgcy5mbiwgX191
aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59O1xuXG5bRWxlbWVudCwgV2lu
ZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cdGFkZEV2ZW50OiByZWxheShh
ZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVudCksXG5cdHJlbW92ZUV2ZW50OiByZWxheShyZW1v
dmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVFdmVudClcbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMg
Zm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBpbiBhIGZhc2hpb25h
YmxlIHdheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBFbGVt
ZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0eWxlXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRtbCwgZWw7XG5cbi8vPGx0SUU5PlxuLy8gQ2hlY2sg
Zm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCByZW1vdmUgc3R5bGVzIHdoZW4gdGhleSdyZSBzZXQg
dG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsLnN0eWxlLmNv
bG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xvciA9IG51bGw7XG52YXIgZG9lc05vdFJlbW92ZVN0
eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdyZWQnO1xuXG4vLyBjaGVjayBmb3Igb2xkSUUsIHdo
aWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhhbmQgc3R5bGVzIGluIHRoZSB3cm9uZyBvcmRlciAo
Y29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBvZiB3aWR0aC1zdHlsZS1jb2xvcilcbnZhciBib3Jk
ZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xuZWwuc3R5bGUuYm9yZGVyID0gYm9yZGVyO1xudmFy
IHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyID0gZWwuc3R5bGUuYm9yZGVyICE9IGJvcmRlcjtc
bmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxudmFyIGhhc0dldENvbXB1dGVkU3R5bGUgPSAhIXdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRzdXBwb3J0Qm9yZGVyUmFkaXVzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51bGw7XG5cbkVsZW1l
bnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMpe1xuXHR0aGlzLnNl
dFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZhciBoYXNPcGFjaXR5ID0gKGh0bWwuc3R5bGUub3Bh
Y2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVyID0gKGh0bWwuc3R5bGUuZmlsdGVyICE9IG51bGwp
LFxuXHRyZUFscGhhID0gL2FscGhhXFwob3BhY2l0eT0oW1xcZC5dKylcXCkvaTtcblxudmFyIHNl
dFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdG9y
ZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gb3Bh
Y2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxsID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59O1xu
XG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIgPSBmdW5jdGlvbihlbGVtZW50LCByZWdleHAsIHZh
bHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRmaWx0ZXIgPSBzdHlsZS5m
aWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8fCAnJztcblx0c3R5
bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVwbGFjZShyZWdleHAs
IHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50cmltKCk7XG5cdGlmICghc3R5bGUuZmls
dGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xufTtcbi8vPC9sdElFOT5cblxu
dmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkp
e1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xufSA6IChoYXNGaWx0ZXIgPyBm
dW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0aWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8
fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxlLnpvb20gPSAx
O1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8IG9wYWNpdHkgPT0gMSl7XG5cdFx0c2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0XHRpZiAob3BhY2l0eSA9PSAxICYmIGdldE9wYWNp
dHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFj
aXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwg
J2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5ICogMTAwKS5saW1pdCgwLCAxMDApLnJvdW5kKCkg
KyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJpbGl0eSkpO1xuXG52YXIgZ2V0T3BhY2l0eSA9ICho
YXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5z
dHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnb3BhY2l0eScpO1xuXHRy
ZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNpdHkudG9GbG9hdCgpO1xufSA6IChoYXNG
aWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIGZpbHRlciA9IChlbGVtZW50LnN0eWxl
LmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpKSxcblx0XHRvcGFj
aXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJlQWxwaGEpO1xuXHRy
ZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBmaWx0ZXIgPT0gbnVsbCkgPyAxIDogKG9wYWNpdHlb
MV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1l
bnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5cdGlmIChvcGFjaXR5ID09IG51bGwpIG9wYWNpdHkg
PSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6IDEpO1xuXHRyZXR1
cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZsb2F0TmFtZSA9IChodG1sLnN0eWxlLmNzc0Zsb2F0
ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyxcblx0bmFtZWRQb3NpdGlvbnMg
PSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBjZW50ZXI6ICc1MCUnLCByaWdodDogJzEwMCUnLCBi
b3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tncm91bmRQb3NpdGlvblhZID0gKGh0bWwuc3R5bGUu
YmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSxcblx0cHJlZml4UGF0dGVybiA9IC9eLShtcykt
LztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cmV0dXJuIHByb3Bl
cnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwgJyQxLScpLmNhbWVsQ2FzZSgpO1xufTtcblxuLy88
bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcHJvcGVydHkpe1xuXHRp
ZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpe1xuXHRcdHN0eWxlLnJlbW92ZUF0
dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5cdFx0cHJvcGVydHkgKz0gJ1knO1xuXHR9XG5cdHN0
eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG59O1xuLy88L2x0SUU5PlxuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0ZWRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xu
XHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJu
IHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldO1xuXHRcdHZhciBkZWZhdWx0
VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQodGhpcykuZGVmYXVsdFZpZXcsXG5cdFx0XHRjb21w
dXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLCBu
dWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRlZC5nZXRQcm9wZXJ0
eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHByb3BlcnR5Lmh5cGhl
bmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFs
dWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpe1xuXHRcdFx0aWYgKHZhbHVlICE9
IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cdFx0XHRzZXRPcGFjaXR5KHRoaXMs
IHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRwcm9wZXJ0eSA9IGNhbWVs
Q2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlm
ICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcnKXtcblx0XHRcdHZhciBtYXAgPSAoRWxlbWVudC5T
dHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3BsaXQoJyAnKTtcblx0XHRcdHZhbHVlID0gQXJyYXku
Y29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdGlmICghbWFwW2ld
KSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVybiAodHlwZU9mKHZhbCkgPT0gJ251bWJlcicpID8g
bWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsO1xuXHRcdFx0fSkuam9p
bignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJlcih2YWx1ZSkpKXtc
blx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3R5bGVb
cHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKCh2YWx1ZSA9PSAnJyB8
fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90UmVtb3ZlU3R5bGVzICYmIHRoaXMuc3R5bGUucmVt
b3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92ZVN0eWxlKHRoaXMuc3R5bGUsIHByb3BlcnR5KTtc
blx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFN0
eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jykg
cmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVy
dHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAoc3VwcG9ydEJv
cmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRleE9mKCdib3JkZXJSYWRpdXMnKSAhPSAtMSl7XG5c
dFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVz
JywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnXS5t
YXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVbY29ybmVyXSB8
fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpvaW4oJyAnKTtcblx0XHR9XG5cdFx0dmFyIHJlc3Vs
dCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xuXHRcdGlmICghcmVzdWx0IHx8IHByb3BlcnR5ID09
ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVtZW50LlNob3J0U3R5bGVzLmhhc093blByb3BlcnR5
KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3VsdCA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBzIGlu
IEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVydHldKSByZXN1bHQucHVzaCh0aGlzLmdldFN0eWxl
KHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRy
ZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRcdH1cblx0XHRpZiAo
aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRpb25bWFldPyQvLnRl
c3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvKHRvcHxyaWdodHxi
b3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24pe1xuXHRcdFx0XHRyZXR1cm4gbmFtZWRQ
b3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0fSkgfHwgJzBweCc7XG5cdFx0fVxuXHRcdGlmICgh
cmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKSByZXR1cm4gJzBweCAw
cHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRcdFx0cmVzdWx0ID0gU3RyaW5nKHJlc3VsdCk7XG5c
dFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3JnYmE/XFwoW1xcZFxccyxdK1xcKS8pO1xu
XHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xvclswXSwgY29sb3Jb
MF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiAh
dGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRcdFx0aWYgKCgvXihoZWlnaHR8d2lkdGgpJC8pLnRl
c3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1bHQpKSl7XG5cdFx0XHRcdHZhciB2YWx1
ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQnXSA6IFsndG9wJywg
J2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRcdFx0dmFsdWVzLmVhY2goZnVuY3Rpb24odmFsdWUp
e1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5nZXRTdHlsZSgnYm9yZGVyLScgKyB2YWx1ZSArICct
d2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRTdHlsZSgncGFkZGluZy0nICsgdmFsdWUpLnRvSW50
KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gdGhpc1snb2Zmc2V0JyArIHBy
b3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4Jztcblx0XHRcdH1cblx0XHRcdGlmICgo
L15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5KSAmJiBpc05h
TihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0XHRcdFx0cmV0dXJuICcwcHgnO1xuXHRcdFx0fVxu
XHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRpZiAocmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIg
JiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRvbXxMZWZ0KT8kLy50ZXN0KHByb3BlcnR5KSAmJiAv
XiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoL14oLispXFxz
KC4rKVxccyguKykkLywgJyQyICQzICQxJyk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblxuXHRc
dHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0c2V0U3R5bGVzOiBmdW5jdGlvbihzdHlsZXMpe1xu
XHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxlcykgdGhpcy5zZXRTdHlsZShzdHlsZSwgc3R5bGVz
W3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGVzOiBmdW5jdGlv
bigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyku
ZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtl
eSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59KTtcblxuRWxl
bWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgn
LCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4JywgbWF4V2lkdGg6
ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1pbkhlaWdodDogJ0Bw
eCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tncm91bmRTaXplOiAn
QHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAnQHB4IEBweCcsIGNvbG9yOiAncmdiKEAsIEAsIEAp
Jyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4JywgbGluZUhlaWdodDog
J0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBweCknLFxuXHRtYXJnaW46ICdAcHggQHB4
IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyOiAnQHB4IEAgcmdi
KEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCknLFxuXHRib3Jk
ZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlclN0eWxlOiAnQCBAIEAgQCcsIGJvcmRl
ckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAs
IEApJyxcblx0ekluZGV4OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0OiAnQCcsIHRleHRJ
bmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0BweCBAcHggQHB4IEBw
eCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJnaW46IHt9LCBwYWRk
aW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJTdHlsZToge30sIGJv
cmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J10uZWFj
aChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2YXIgU2hvcnQgPSBFbGVtZW50LlNob3J0U3R5bGVz
O1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7XG5cdFsnbWFyZ2luJywgJ3BhZGRpbmcnXS5l
YWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlvbjtcblx0
XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdAcHgnO1xuXHR9KTtcblx0dmFyIGJkID0g
J2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNob3J0LmJvcmRlcltiZF0gPSBBbGxbYmRdID0gJ0Bw
eCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBiZHcgPSBiZCArICdXaWR0aCcsIGJkcyA9IGJkICsg
J1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InO1xuXHRTaG9ydFtiZF0gPSB7fTtcblx0U2hvcnQu
Ym9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2JkXVtiZHddID0gQWxsW2Jkd10gPSAnQHB4Jztcblx0
U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7
XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFsbFtiZGNdID0g
J3JnYihALCBALCBAKSc7XG59KTtcblxuaWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZKSBFbGVt
ZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3JvdW5kUG9zaXRpb25Y
OiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyB0
byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVtZW50cyBhbmQg
dGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVk
aXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRw
Oi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNl
bnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS5cbiAgLSBWaWV3cG9y
dCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1
aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xp
Y2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHlsZV1cblxucHJv
dmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG5cdGNoaWxkID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcw
JztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xudmFyIGJyb2tlbk9mZnNldFBhcmVudCA9
IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQpO1xuZWxlbWVudCA9IGNoaWxkID0gbnVs
bDtcblxudmFyIGhlaWdodENvbXBvbmVudHMgPSBbJ2hlaWdodCcsICdwYWRkaW5nVG9wJywgJ3Bh
ZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lkdGgnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcblx0
d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQn
LCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnXTtcblxudmFyIHN2Z0NhbGN1
bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5cblx0dmFyIGdDUyA9IHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7eDogMCwgeTogMH07XG5cblx0aGVpZ2h0Q29tcG9u
ZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnkgKz0gcGFyc2VGbG9hdChnQ1Nb
Y3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRc
dGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0cmV0dXJuIGJvdW5k
cztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJuIHN0eWxlU3Ry
aW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpO1xufTtcblxudmFy
IGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gaXNPZmZzZXQoZWwpIHx8
ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChlbC50YWdOYW1lKTtcbn07XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSl7XG5cdFx0aWYgKGlzQm9k
eSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKHgsIHkpO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExlZnQgPSB4O1xuXHRcdFx0dGhpcy5zY3JvbGxUb3Ag
PSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTaXplOiBmdW5jdGlv
bigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNp
emUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRcdC8vIFRoaXMgaWYgY2xhdXNlIGlzIGJlY2F1c2Ug
SUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvZiBlbGVtZW50cyB3
aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRcdGlmICghd2luZG93LmdldENvbXB1dGVkU3R5bGUp
IHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRIZWlnaHR9O1xuXHRc
dC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIsIGNhbGxpbmcgYHN2
Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4ZWQgdGhlIHN2ZyBz
aXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0aWYgKHRoaXMuZ2V0KCd0YWcnKSA9PSAnc3ZnJykg
cmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhpcyk7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIGJv
dW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRyZXR1cm4ge3g6IGJv
dW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07XG5cdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRy
ZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1cblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5j
dGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdl
dFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsV2lkdGgsIHk6IHRoaXMu
c2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7XG5cdFx0
cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQsIHk6IHRoaXMuc2Nyb2xsVG9wfTtcblx0fSxcblxu
XHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5wYXJlbnRO
b2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNC
b2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5zY3JvbGxMZWZ0O1xu
XHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdGVsZW1lbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxu
XHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9mZnNldFBhcmVudCA/IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJp
bmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR2
YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAn
c3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6IGlzT2Zmc2V0O1xuXHRcdHdoaWxlICgoZWxlbWVu
dCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xuXHRcdFx0aWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVu
dCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSA6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkg
fHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51
bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRc
dH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRnZXRPZmZzZXRzOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlmIChoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3Qpe1xu
XHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcblx0XHRcdFx0
aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQpLFxu
XHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3JvbGwoKSxcblx0XHRcdFx0ZWxlbVNjcm9s
bHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0XHRcdFx0aXNGaXhlZCA9IChzdHlsZVN0cmluZyh0
aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKTtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0
eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy54ICsgKChpc0ZpeGVkKSA/IDAg
OiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGllbnRMZWZ0LFxuXHRcdFx0XHR5OiBib3VuZC50b3Au
dG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC55
KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBlbGVtZW50ID0g
dGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0
dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7
XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDtcblx0XHRcdHBvc2l0aW9u
LnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5cblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNl
dFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0UG9z
aXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtcblx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZz
ZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmdldFNjcm9sbHMoKTtcblx0XHR2YXIgcG9zaXRp
b24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAtIHNjcm9sbC54LFxuXHRcdFx0eTogb2Zmc2V0Lnkg
LSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRpZiAocmVsYXRpdmUgJiYgKHJlbGF0aXZlID0gZG9j
dW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0XHR2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IHJlbGF0
aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRyZXR1cm4ge3g6IHBvc2l0aW9uLnggLSByZWxhdGl2
ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJlbGF0aXZlKSwgeTogcG9zaXRpb24ueSAtIHJlbGF0
aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihyZWxhdGl2ZSl9O1xuXHRcdH1cblx0XHRyZXR1cm4g
cG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xu
XHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5h
dGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihlbGVtZW50KSxcblx0
XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHR2YXIgb2JqID0ge1xuXHRcdFx0bGVmdDog
cG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9zaXRpb24ueSxcblx0XHRcdHdpZHRoOiBzaXplLngs
XG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRcdH07XG5cdFx0b2JqLnJpZ2h0ID0gb2JqLmxlZnQg
KyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRvbSA9IG9iai50b3AgKyBvYmouaGVpZ2h0O1xuXHRc
dHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xu
XHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBvYmoueCAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJn
aW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmoueSAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4t
dG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRc
dHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihvYmopKTtcblx0fVxu
XG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRvd10uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0
Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGllbnRXaWR0aCwgeTogZG9jLmNsaWVudEhlaWdodH07
XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdHZhciB3aW4gPSB0aGlzLmdl
dFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDog
d2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3JvbGxMZWZ0LCB5OiB3aW4ucGFnZVlPZmZzZXQgfHwg
ZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKSxcblx0XHRcdG1pbiA9IHRoaXMuZ2V0
U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdFx0cmV0
dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xsV2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIG1pbi54
KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIG1pbi55
KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHt4OiAw
LCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oKXtcblx0XHR2YXIg
c2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0
b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwgaGVpZ2h0OiBzaXplLnksIHdpZHRoOiBzaXplLnh9
O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRlIG1ldGhvZHNcblxudmFyIHN0eWxlU3RyaW5nID0g
RWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xuXG5mdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50
LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHlsZSkudG9JbnQoKSB8
fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5
bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gbGVm
dEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXIt
bGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7XG5cdHJldHVybiAo
L14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7XG59XG5cbmZ1bmN0aW9u
IGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7XG5cdHZhciBkb2MgPSBlbGVtZW50LmdldERvY3Vt
ZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdD
U1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xufVxuXG59KSgpO1xuXG4vL2FsaWFz
ZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7IC8vY29tcGF0YWJp
bGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS55
O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNp
emUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxIZWln
aHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLnk7XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Ny
b2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxcblxuXHRnZXRMZWZ0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDtcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5u
YW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGJhc2ljIGFuaW1hdGlvbiBsb2dp
YyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3RoZXIgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xh
c3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBGeFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4s
IEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
KlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRvbkNhbmNlbDogbmlsLFxuXHRcdG9uQ29tcGxldGU6
IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAsXG5cdFx0dW5pdDogZmFsc2UsXG5cdFx0ZHVyYXRp
b246IDUwMCxcblx0XHRmcmFtZXM6IG51bGwsXG5cdFx0ZnJhbWVTa2lwOiB0cnVlLFxuXHRcdGxp
bms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7XG5cdFx0dGhpcy5zZXRPcHRp
b25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0cmV0dXJuIC0oTWF0aC5jb3MoTWF0aC5QSSAqIHAp
IC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5cblx0c3RlcDogZnVuY3Rpb24obm93KXtcblx0XHRp
ZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7XG5cdFx0XHR2YXIgZGlmZiA9ICh0aGlzLnRpbWUg
IT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRpZmYgLyB0aGlzLmZy
YW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRpbWUgPSBub3c7XG5cdFx0XHR0aGlzLmZyYW1lICs9
IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSsrO1xuXHRcdH1cblxuXHRc
dGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpe1xuXHRcdFx0dmFyIGRlbHRhID0gdGhpcy50
cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7XG5cdFx0XHR0aGlzLnNldCh0aGlz
LmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUo
dGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0XHR9XG5cdH0s
XG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdHJldHVybiBub3c7XG5cdH0sXG5cblx0Y29t
cHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRyZXR1cm4gRnguY29tcHV0ZShm
cm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICgh
dGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMu
bGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtc
blx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50
cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxc
blxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhmcm9t
LCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZnJvbSA9IGZyb207XG5cdFx0dGhpcy50byA9
IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCkgPyAwIDogLTE7
XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmdldFRy
YW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVzID0gdGhpcy5vcHRpb25zLmZyYW1lcywgZnBzID0g
dGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZHVyYXRpb247XG5cdFx0
dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9uc1tkdXJhdGlvbl0gfHwgZHVyYXRpb24udG9JbnQo
KTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXHRcdHRoaXMuZnJhbWVz
ID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbiAvIHRoaXMuZnJhbWVJbnRlcnZh
bCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRc
dFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHRoaXMuZmly
ZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0cHVzaEluc3RhbmNlLmNhbGwodGhp
cywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdGlmICh0
aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBs
ZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxDaGFpbigpKSB0aGlz
LmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9
XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5zdWJqZWN0ID09PSB0aGlzID8gbnVsbCA6IHRoaXMu
c3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
dWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5c
dFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnY2Fu
Y2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7XG5cdFx0XHR0aGlzLnJlamVjdCh0aGlz
LnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwYXVzZTogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
dWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlc3VtZTogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlv
bnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbdGhpcy5vcHRpb25zLmZwc107XG5cdFx0cmV0
dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTtcblx0fSxcblxuXHRpc1BhdXNlZDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1lcykgJiYgIXRoaXMu
aXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5cbkZ4LmNvbXB1dGUgPSBmdW5jdGlvbihmcm9tLCB0
bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207XG59O1xuXG5G
eC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9
O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZhciBpbnN0YW5jZXMgPSB7fSwgdGltZXJzID0ge307
XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtcblx0dmFyIG5vdyA9IERhdGUubm93KCk7XG5cdGZv
ciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGluc3RhbmNlID0gdGhpc1tp
XTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTtcblx0fVxufTtcblxudmFy
IHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zw
c10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10pO1xuXHRsaXN0LnB1c2godGhpcyk7XG5cdGlmICgh
dGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0gbG9vcC5wZXJpb2RpY2FsKE1hdGgucm91bmQoMTAw
MCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFyIHB1bGxJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7
XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc107XG5cdGlmIChsaXN0KXtcblx0XHRsaXN0LmVy
YXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5sZW5ndGggJiYgdGltZXJzW2Zwc10pe1xuXHRcdFx0
ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRcdFx0dGltZXJzW2Zwc10gPSBjbGVhckludGVydmFs
KHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ1NTIGFuaW1hdGlvbiBsb2dp
Yy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4LkVsZW1lbnRzLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtGeCwgRWxlbWVudC5TdHlsZV1cblxucHJv
dmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5cbkZ4LkNTUyA9IG5ldyBDbGFzcyh7XG5cblx0RXh0
ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVjdFxuXG5cdHBy
ZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpe1xuXHRcdHZhbHVlcyA9
IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0XHR2YXIgZnJvbSA9IHZhbHVlc1swXSwgdG8gPSB2
YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51bGwpe1xuXHRcdFx0dG8gPSBmcm9tO1xuXHRcdFx0
ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0dmFyIHVuaXQgPSB0aGlz
Lm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29t
L3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4LmpzI0wyOTlcblx0XHRcdGlmICh1bml0ICYmIGZy
b20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmluZycgJiYgZnJvbS5zbGljZSgtdW5pdC5sZW5ndGgp
ICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9tKSAhPSAwKXtcblx0XHRcdFx0ZWxlbWVudC5zZXRT
dHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxlbWVudC5n
ZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gSUUgYW5kIE9wZXJhIHN1cHBv
cnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhcblx0XHRcdFx0aWYgKCEoL3B4JC8udGVzdCh2YWx1
ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbKCdwaXhlbC0nICsgcHJvcGVy
dHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRc
dFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJpay5lYWUubmV0L2Fy
Y2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxXG5cdFx0XHRcdFx0XHR2
YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUu
bGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZS5waXhl
bExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0O1xuXHRcdFx0XHRc
dH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9tID0gKHRvIHx8IDEpIC8gKHBhcnNlRmxvYXQodmFs
dWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJvbSkgfHwgMCk7XG5cdFx0XHRcdGVsZW1lbnQuc2V0
U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9O1xuXHR9LFxuXG5c
dC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheVxuXG5cdHBhcnNlOiBmdW5jdGlvbih2YWx1
ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5jb252ZXJ0KHZhbHVlKSgpO1xuXHRcdHZhbHVlID0g
KHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDogQXJyYXkuY29u
dmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2YWwpe1xuXHRcdFx0
dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdE9iamVj
dC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpe1xuXHRcdFx0XHRpZiAoZm91
bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBhcnNlZCA9IHBhcnNlci5wYXJzZSh2YWwpO1xuXHRc
dFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBhcnNlZCwg
cGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7XG5cdFx0XHRmb3VuZCA9IGZvdW5kIHx8IHt2YWx1
ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307XG5cdFx0XHRyZXR1cm4gZm91
bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9jb21wdXRlcyBieSBhIGZyb20gYW5kIHRvIHByZXBh
cmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBhcnNlcnMuXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24o
ZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgY29tcHV0ZWQgPSBbXTtcblx0XHQoTWF0aC5taW4o
ZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpe1xuXHRcdFx0Y29tcHV0
ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9b
aV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pO1xuXHRcdH0pO1xuXHRc
dGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdmeDpjc3M6dmFsdWUnKTtcblx0
XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5cblx0Ly9zZXJ2ZXMgdGhlIHZhbHVlIGFzIHNldHRh
YmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRpZiAodHlwZU9mKHZh
bHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcblx0XHR2
YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7XG5cdFx0XHRy
ZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5p
dCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXR1cm5lZDtcblx0fSxcblxuXHQvL3JlbmRlcnMg
dGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5cblx0cmVuZGVyOiBmdW5jdGlvbihlbGVtZW50LCBw
cm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRo
aXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0fSxcblxuXHQvL3NlYXJjaGVzIGluc2lkZSB0aGUg
cGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVzIGZvciBhIHNlbGVjdG9yXG5cblx0c2VhcmNoOiBm
dW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYgKEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0pIHJldHVy
biBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xuXHRcdHZhciB0byA9IHt9LCBzZWxlY3RvclRlc3Qg
PSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9yLmVzY2FwZVJlZ0V4cCgpICsgJyQnKTtcblxuXHRc
dHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRBcnJheS5lYWNoKHJ1
bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRcdFx0aWYgKHJ1bGUubWVkaWEpe1xuXHRcdFx0XHRc
dHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpO1xuXHRcdFx0XHRcdHJl
dHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGUpIHJldHVybjtcblx0XHRc
dFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxlLnNlbGVjdG9yVGV4dCkgPyBydWxlLnNlbGVjdG9y
VGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0aW9uKG0pe1xuXHRcdFx0XHRcdHJldHVybiBtLnRv
TG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDogbnVsbDtcblx0XHRcdFx0aWYgKCFzZWxlY3RvclRl
eHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNlbGVjdG9yVGV4dCkpIHJldHVybjtcblx0XHRcdFx0
T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBzdHlsZSl7XG5cdFx0
XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0U3R5bGVzW3N0eWxl
XSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTtc
blx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9ecmdiLykudGVzdCh2YWx1ZSkpID8gdmFsdWUucmdi
VG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRB
cnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVldCl7XG5cdFx0XHR2
YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0XHRpZiAoaHJlZiAmJiBocmVmLmluZGV4T2YoJzov
LycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgPT0gLTEpIHJldHVybjtc
blx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuXHRcdFx0
c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gRnguQ1NTLkNhY2hlW3Nl
bGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xuXG5GeC5DU1MuQ2FjaGUgPSB7fTtcblxuRnguQ1NT
LlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtcblx0XHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUu
aGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXFxk
KyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykpKSA/IFt2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVl
WzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRl
bHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7XG5cdFx0XHRc
dHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0sIGRlbHRhKSk7XG5c
dFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1
cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0fVxuXHR9LFxuXG5cdE51bWJlcjoge1xuXHRcdHBh
cnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1dGU6IEZ4LmNvbXB1dGUsXG5cdFx0c2VydmU6IGZ1
bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRcdHJldHVybiAodW5pdCkgPyB2YWx1ZSArIHVuaXQg
OiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0U3RyaW5nOiB7XG5cdFx0cGFyc2U6IEZ1bmN0aW9u
LmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKHplcm8sIG9uZSl7XG5cdFx0
XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0
cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5cbn07XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4
Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0byB0cmFu
c2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcg
YW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBG
eC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1vcnBoID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRz
OiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7XG5c
dFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5c
dFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xu
XHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJpbmcnKSBub3cgPSB0aGlzLnNlYXJjaChub3cpO1xu
XHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHAsIG5vd1tw
XSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbXB1
dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIG5vdyA9IHt9O1xuXHRcdGZv
ciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0gdGhpcy5wYXJlbnQoZnJvbVtwXSwgdG9bcF0sIGRl
bHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0
aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydGllcykpIHJldHVybiB0aGlzO1xuXHRc
dGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAnc3RyaW5nJykgcHJvcGVydGllcyA9IHRoaXMuc2Vh
cmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBmcm9tID0ge30sIHRvID0ge307XG5cdFx0Zm9yICh2
YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUodGhp
cy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3BdKTtcblx0XHRcdGZyb21bcF0gPSBwYXJzZWQuZnJv
bTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRvO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJl
bnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubW9ycGggPSB7
XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5jYW5j
ZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9ycGggPSB0aGlzLnJldHJpZXZlKCdtb3JwaCcpO1xu
XHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9ycGggPSBuZXcgRnguTW9ycGgodGhpcywge2xpbms6
ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTtcblx0XHR9XG5c
dFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRt
b3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLnN0YXJ0KHByb3Bz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5U
cmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2YgYWR2YW5jZWQgdHJh
bnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nlcy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWFzaW5nIEVxdWF0aW9ucyBi
eSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2luZy8+LCBt
b2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29scy5cblxucmVxdWly
ZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFuc2l0aW9uc1xuXG4uLi5cbiovXG5cbkZ4LmltcGxl
bWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHJhbnMgPSB0
aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJbk91dDtc
blx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdzdHJpbmcnKXtcblx0XHRcdHZhciBkYXRhID0gdHJh
bnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5zID0gRnguVHJhbnNpdGlvbnM7XG5cdFx0XHR0cmFu
cyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5zW2RhdGFbMF0uY2FwaXRhbGl6ZSgpXTtcblx0XHRc
dGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5zWydlYXNlJyArIGRhdGFbMV0uY2FwaXRhbGl6ZSgp
ICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0YWxpemUoKSA6ICcnKV07XG5cdFx0fVxuXHRcdHJl
dHVybiB0cmFucztcblx0fVxuXG59KTtcblxuRnguVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5z
aXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9IEFycmF5LmNvbnZlcnQocGFyYW1zKTtcblx0dmFy
IGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHRyYW5zaXRpb24ocG9zLCBwYXJh
bXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHtcblx0XHRlYXNlSW46
IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIDEgLSB0
cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7XG5cdFx0fSxcblx0XHRlYXNlSW5PdXQ6IGZ1bmN0
aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0aW9uKDIgKiBwb3Ms
IHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFyYW1zKSkpIC8gMjtc
blx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMgPSB7XG5cblx0bGluZWFyOiBmdW5j
dGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVybztcblx0fVxuXG59O1xuXG5cblxuRnguVHJhbnNp
dGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpe1xuXHRmb3IgKHZhciB0cmFuc2l0
aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5U
cmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTtcbn07XG5cbkZ4LlRyYW5zaXRpb25z
LmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3co
cCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxuXG5cdEV4cG86IGZ1bmN0aW9uKHApe1xuXHRcdHJl
dHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAxKSk7XG5cdH0sXG5cblx0Q2lyYzogZnVuY3Rpb24o
cCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xuXHR9LFxuXG5cdFNp
bmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MocCAqIE1hdGguUEkgLyAy
KTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlvbihwLCB4KXtcblx0XHR4ID0geCAmJiB4WzBdIHx8
IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEpICogcCAtIHgpO1xu
XHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24ocCl7XG5cdFx0dmFyIHZhbHVlO1xuXHRcdGZvciAo
dmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89IDIpe1xuXHRcdFx0aWYgKHAgPj0gKDcg
LSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZhbHVlID0gYiAqIGIgLSBNYXRoLnBvdygoMTEgLSA2
ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxuXHRFbGFzdGljOiBmdW5jdGlvbihwLCB4KXtcblx0
XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAtLXApICogTWF0aC5jb3MoMjAgKiBwICogTWF0aC5Q
SSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtcblx0fVxuXG59KTtcblxuWydRdWFkJywgJ0N1Ymlj
JywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBpKXtcblx0Rngu
VHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihwKXtc
blx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpO1xuXHR9KTtcbn0pO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZSwgZWZmZWN0
IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVudC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IFtG
eC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVtZW50LmhpZ2hsaWdodF1cblxuLi4uXG4qL1xuXG5G
eC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxp
emU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMu
c3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMp
O1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7XG5cdFx0aWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRub3cgPSBwcm9wZXJ0eTtcblx0XHRcdHByb3BlcnR5
ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7XG5cdFx0fVxuXHRcdHRo
aXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRpb25zLnVuaXQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1
cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTtcblx0XHR0
aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Muc2hpZnQoKTtcblx0
XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhpcy5wcm9wZXJ0eSwg
YXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBwYXJzZWQudG8pO1xu
XHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7XG5cblx0c2V0OiBmdW5j
dGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwoKS5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpO1xuXHRcdGlmICghdHdlZW4p
e1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5c
dFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR3ZWVu
O1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHR0d2VlbjogZnVuY3Rpb24o
cHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5zdGFydChwcm9wZXJ0
eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZhZGU6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdldCgndHdlZW4nKSwgbWV0aG9kLCBhcmdzID0gWydv
cGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyksIHRvZ2dsZTtcblx0XHRpZiAoYXJnc1sxXSA9PSBu
dWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5cdFx0c3dpdGNoIChhcmdzWzFdKXtcblx0XHRcdGNh
c2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNl
ICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2Ug
J3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywg
dGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpO1xuXHRcdFx0XHRtZXRob2QgPSAnc3RhcnQn
O1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/IDAgOiAxO1xuXHRcdFx0XHR0aGlzLnN0b3JlKCdm
YWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRcdHRvZ2dsZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFr
O1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0gJ3N0YXJ0Jztcblx0XHR9XG5cdFx0aWYgKCF0b2dn
bGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTtcblx0XHRmYWRlW21ldGhvZF0uYXBwbHko
ZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG5cdFx0
aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5Jywg
dG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtcblx0XHR9IGVsc2UgaWYgKHRvICE9IDAp
e1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxlbmd0aCl7XG5cdFx0XHRcdGZhZGUuY2hhaW4oZnVu
Y3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAn
dmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHRcdH0pO1xuXHRc
dFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxl
Jyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtc
blx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpKSByZXR1cm47XG5c
dFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblx0
XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVuZCl7XG5cdFx0aWYg
KCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJywg
dGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpKTtcblx0XHRcdGVuZCA9IChlbmQgPT0g
J3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBlbmQ7XG5cdFx0fVxuXHRcdHZhciB0d2VlbiA9IHRo
aXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVuLnN0YXJ0KCdiYWNrZ3JvdW5kLWNvbG9yJywgc3Rh
cnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFs
JykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWluKCk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0XG5cbmRl
c2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhU
VFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtP
YmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlLCBC
cm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVzdFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sXG5cdHByb2dyZXNzU3VwcG9ydCA9ICgnb25wcm9n
cmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVzdCk7XG5cbnZhciBSZXF1ZXN0ID0gdGhpcy5SZXF1
ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9u
cywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHsvKlxuXHRcdG9uUmVxdWVzdDogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRc
dG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Db21wbGV0ZTogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sXG5cdFx0b25TdWNjZXNzOiBm
dW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKXt9LFxuXHRcdG9uRmFpbHVyZTogZnVu
Y3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0aW9uOiBmdW5jdGlvbihoZWFkZXJOYW1lLCB2YWx1
ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSxcblx0XHR1c2VyOiAnJyxcblx0XHRw
YXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqL1xuXHRcdHVybDogJycs
XG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0J1gtUmVxdWVzdGVkLVdpdGgn
OiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0J0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRl
eHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH0sXG5cdFx0YXN5
bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxzZSxcblx0XHRtZXRob2Q6ICdwb3N0Jyxcblx0XHRs
aW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nlc3M6IG51bGwsXG5cdFx0ZW11bGF0aW9uOiB0cnVl
LFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5cdFx0ZW5jb2Rpbmc6ICd1dGYtOCcsXG5cdFx0ZXZh
bFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxSZXNwb25zZTogZmFsc2UsXG5cdFx0dGltZW91dDog
MCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMu
c2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVh
ZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpe1xuXHRcdHZhciB4aHIg
PSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAhdGhpcy5ydW5uaW5n
KSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0dXMgPSAw
O1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBzdGF0dXMgPSB4
aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0dXMgPSAoc3RhdHVzID09IDEyMjMpID8gMjA0IDog
c3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9u
bG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1l
b3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXG5cdFx0
dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5yZXNwb25zZVRleHQgfHwgJycsIHhtbDog
dGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNh
bGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRcdFx0dGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2Uu
dGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuZmFpbHVyZSgp
O1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc3RhdHVzID0gdGhp
cy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCk7XG5c
dH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAhIXRoaXMucnVubmlu
Zztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0czogZnVuY3Rpb24odGV4dCl7XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwgKC8oZWNtYXxqYXZhKXNjcmlwdC8pLnRlc3QodGhp
cy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpKSkgcmV0dXJuIEJyb3dzZXIuZXhlYyh0ZXh0KTtc
blx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKTtc
blx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0LCB4bWwpe1xuXHRcdHRoaXMub25TdWNj
ZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4dCksIHhtbCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0
ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9LFxuXG5cdG9uU3VjY2VzczogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVFdmVudCgnc3Vj
Y2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7XG5cdH0sXG5cblx0ZmFpbHVyZTogZnVuY3Rp
b24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdm
YWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdG9uRmFpbHVyZTogZnVuY3Rpb24o
KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQoJ2ZhaWx1cmUnLCB0
aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCl7XG5cdFx0dGhp
cy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHRw
cm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdwcm9ncmVzcycs
IFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHR0aW1lb3V0OiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0JywgdGhpcy54aHIpO1xuXHRcdHRoaXMucmVqZWN0KHty
ZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdHNldEhlYWRlcjog
ZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHRoaXMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSl7XG5c
dFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlz
Lnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHR9LFxu
XG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdHJ1
ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6
IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNo
YWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHNlbmQ6IGZ1bmN0aW9uKG9wdGlvbnMp
e1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7XG5cblx0XHR0aGlz
Lm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5vcHRpb25zLmlzU3VjY2VzcyB8fCB0aGlzLmlzU3Vj
Y2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0dmFyIHR5cGUgPSB0eXBlT2Yo
b3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnZWxlbWVudCcp
IG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307XG5cblx0XHR2YXIgb2xkID0gdGhpcy5vcHRpb25z
O1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQu
dXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTtcblx0XHR2YXIgZGF0YSA9IG9wdGlv
bnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlvbnMudXJsKSwgbWV0aG9kID0gb3B0aW9ucy5tZXRo
b2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3aXRjaCAodHlwZU9mKGRhdGEpKXtcblx0XHRcdGNh
c2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVyeVN0cmluZygpOyBi
cmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRhID0gT2JqZWN0LnRv
UXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mb3JtYXQp
e1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3JtYXQ9JyArIHRoaXMub3B0aW9ucy5mb3JtYXQ7XG5c
dFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0ICsgJyYnICsgZGF0YSA6IGZvcm1hdDtcblx0XHR9
XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAncG9zdCddLmNv
bnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9k
O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21ldGhvZDtc
blx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLnVy
bEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFy
IGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5lbmNvZGluZykgPyAnOyBjaGFyc2V0PScgKyB0aGlz
Lm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0XHRcdHRoaXMuaGVhZGVyc1snQ29udGVudC10eXBl
J10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyArIGVuY29kaW5nO1xuXHRc
dH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTtcblxu
XHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwubGFzdEluZGV4T2YoJy8nKTtcblx0XHRpZiAodHJp
bVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9mKCcjJykpID4gLTEp
IHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9uKTtcblxuXHRcdGlmICh0aGlzLm9wdGlv
bnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDog
Jz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xuXG5cdFx0aWYgKGRhdGEgJiYgKG1ldGhvZCA9PSAn
Z2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScpKXtcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2Yo
Jz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRhdGE7XG5cdFx0XHRkYXRhID0gbnVsbDtcblx0XHR9
XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCl7XG5c
dFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlzLmxvYWRzdGFydC5iaW5kKHRoaXMpO1xuXHRcdFx0
eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7XG5cdFx0fVxuXG5cdFx0
eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCwgdGhpcy5vcHRpb25zLmFzeW5jLCB0
aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtcblx0XHRpZiAoKHRoaXMu
b3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYmICd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikgeGhy
LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG5cblx0XHRPYmplY3QuZWFjaCh0aGlzLmhl
YWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0eGhyLnNl
dFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0
dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7XG5cdFx0XHRcdHRoaXMu
cmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24nLCB4aHI6IHhociwgZXhjZXB0aW9uOiBlfSk7XG5c
dFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkg
IT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUoe3JlYXNvbjogJ3NlbmQn
fSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7XG5cdFx0eGhyLnNlbmQo
ZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25TdGF0ZUNoYW5nZSgp
O1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aW1lb3V0KSB0aGlzLnRpbWVyID0gdGhpcy50
aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50aW1lb3V0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcp
IHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHZhciB4aHIgPSB0
aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRj
bGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9
XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1
cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0dGhp
cy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNl
bCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6IHhocn0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuWydnZXQnLCAn
cG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VUJywgJ1BPU1QnLCAn
UFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlvbihtZXRob2Qpe1xu
XHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIgb2JqZWN0ID0ge1xu
XHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9O1xuXHRcdGlmIChkYXRhICE9IG51bGwpIG9iamVj
dC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7XG5cdH07XG59KTtc
blxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zZW5k
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLmdl
dCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNlbmQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNlbmQgPSB0
aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0aWYgKCFzZW5kKXtcblx0XHRcdHNlbmQgPSBuZXcg
UmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCBtZXRob2Q6IHRo
aXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2FjdGlvbicpXG5cdFx0
XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTtcblx0XHR9XG5cdFx0cmV0dXJu
IHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNlbmQ6IGZ1bmN0
aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7XG5cdFx0c2VuZGVy
LnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJsIHx8IHNlbmRlci5vcHRpb25zLnVybH0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJl
cXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFz
cyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIVE1MIHJlc3Bv
bnNlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVu
dCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJlcXVlc3QuSFRNTFxuXG4uLi5cbiovXG5cblJlcXVl
c3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25z
OiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0XHRhcHBlbmQ6IGZhbHNlLFxuXHRcdGV2YWxTY3Jp
cHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFsc2UsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0QWNj
ZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fVxu
XHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBvcHRpb25zID0gdGhp
cy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRyZXNwb25zZS5odG1s
ID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2NyaXB0KXtcblx0XHRcdHJlc3BvbnNlLmph
dmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7XG5cblx0XHR2YXIgbWF0Y2ggPSByZXNwb25zZS5o
dG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9pKTtcblx0XHRpZiAo
bWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTtcblx0XHR2YXIgdGVtcCA9IG5ldyBFbGVt
ZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblxuXHRcdHJlc3BvbnNlLnRy
ZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0cmVzcG9uc2UuZWxlbWVudHMgPSB0ZW1wLmdldEVs
ZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7XG5cblx0XHRpZiAob3B0aW9ucy5maWx0ZXIp
IHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50cztcblx0XHRpZiAob3B0aW9ucy51cGRh
dGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRvY3VtZW50LmlkKG9wdGlvbnMudXBkYXRlKS5lbXB0
eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB1cGRhdGUuYWRvcHQocmVzcG9uc2UuZWxl
bWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5c
dFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7XG5cdFx0XHR2YXIgYXBwZW5kID0gZG9jdW1l
bnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25z
ZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVuZCk7XG5cdFx0XHRlbHNlIGFwcGVuZC5h
ZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5ldmFsU2Ny
aXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXG5cdFx0dGhpcy5vblN1
Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0bWwsIHJl
c3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dHJlZTogcmVzcG9uc2UudHJl
ZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1lbnRzLCBodG1sOiByZXNwb25zZS5odG1sLCBqYXZh
c2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0fSk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJv
cGVydGllcy5sb2FkID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIGxv
YWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpO1xuXHRcdGxvYWQuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCdsb2FkJyk7XG5cdFx0aWYgKCFsb2FkKXtcblx0XHRc
dGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtkYXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgdXBk
YXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdsb2FkJywgbG9h
ZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2FkO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZ2V0KCdsb2FkJykuc2VuZChB
cnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDogVHlwZS5pc1N0
cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1l
OiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5TZWVBbHNvOiA8aHR0cDovL3d3dy5qc29uLm9yZy8+
XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl1cblxucHJvdmlk
ZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRo
aXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBzcGVjaWFsID0geydcXGIn
OiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0JywgJ1xcbic6ICdcXFxcbicsICdcXGYnOiAnXFxcXGYn
LCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdcXFxcXCInLCAnXFxcXCc6ICdcXFxcXFxcXCd9O1xu
XG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXtcblx0cmV0dXJuIHNwZWNpYWxbY2hyXSB8fCAn
XFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2Uo
LTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHN0cmluZyA9
IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0p
L2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXCJbXlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxm
YWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/L2csICddJyku
XG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csICcnKTtcblxuXHRy
ZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50ZXN0KHN0cmluZyk7XG59O1xuXG5KU09OLmVuY29k
ZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rpb24ob2JqKXtcblx0cmV0dXJuIEpTT04uc3RyaW5n
aWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2JqKXtcblx0aWYgKG9iaiAmJiBvYmoudG9KU09OKSBv
YmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dpdGNoICh0eXBlT2Yob2JqKSl7XG5cdFx0Y2FzZSAn
c3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCInICsgb2JqLnJlcGxhY2UoL1tcXHgwMC1cXHgxZlxc
XFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5cdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0cmV0dXJu
ICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7XG5cdFx0Y2FzZSAnb2Jq
ZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2YXIgc3RyaW5nID0gW107XG5cdFx0XHRPYmplY3Qu
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0XHR2YXIganNvbiA9IEpTT04u
ZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYgKGpzb24pIHN0cmluZy5wdXNoKEpTT04uZW5jb2Rl
KGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICd7JyArIHN0cmlu
ZyArICd9Jztcblx0XHRjYXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzogcmV0dXJuICcnICsg
b2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1cm4gJ251bGwnO1xuXHR9XG5cblx0cmV0dXJuIG51
bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRydWU7XG5cblxuSlNPTi5kZWNvZGUgPSBmdW5jdGlv
bihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJpbmcpICE9ICdz
dHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRpZiAoc2VjdXJlID09IG51bGwpIHNlY3VyZSA9IEpT
T04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtcblx0XHRpZiAoSlNPTi5wYXJzZSkgcmV0dXJuIEpT
T04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAoIUpTT04udmFsaWRhdGUoc3RyaW5nKSkgdGhyb3cg
bmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0eSBpcyBl
bmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4nKTtcblx0fVxuXG5cdHJldHVybiBl
dmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6
IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBD
bGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIEpT
T04gZGF0YS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbUmVx
dWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJlcXVlc3QuSlNPTlxuXG4uLi5cbiovXG5cblJlcXVl
c3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25z
OiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqL1xuXHRcdHNlY3Vy
ZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRo
aXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9iamVjdC5hcHBlbmQodGhpcy5oZWFkZXJzLCB7XG5c
dFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0J1gtUmVxdWVzdCc6ICdK
U09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZh
ciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRqc29uID0gdGhpcy5yZXNwb25zZS5qc29uID0gSlNP
Ti5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25zLnNlY3VyZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3Ip
e1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7XG5cdFx0XHRy
ZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29uID09IG51bGwpe1xuXHRcdFx0dGhpcy5mYWlsdXJl
KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub25TdWNjZXNzKGpzb24sIHRleHQpO1xuXHRc
dFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7XG5cdFx0fVxuXHR9XG5c
bn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENvb2tpZVxuXG5kZXNjcmlwdGlvbjogQ2xhc3MgZm9y
IGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29raWVzLlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBCYXNlZCBvbiB0aGUgZnVu
Y3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3JnKS5cblxucmVx
dWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxuXG5wcm92aWRlczogQ29va2llXG5cbi4uLlxuKi9c
blxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogT3B0aW9ucyxcblxu
XHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8nLFxuXHRcdGRvbWFpbjogZmFsc2UsXG5cdFx0ZHVy
YXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTogZmFsc2UsXG5cdFx0ZG9jdW1lbnQ6IGRvY3VtZW50
LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRodHRwT25seTogZmFsc2Vcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRcdHRoaXMua2V5ID0ga2V5O1xuXHRc
dHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHR3cml0ZTogZnVuY3Rpb24odmFs
dWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW5jb2RlKSB2YWx1ZSA9IGVuY29kZVVSSUNvbXBv
bmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kb21haW4pIHZhbHVlICs9ICc7IGRv
bWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFpbjtcblx0XHRpZiAodGhpcy5vcHRpb25zLnBhdGgp
IHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoO1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0ZGF0
ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogMjQgKiA2
MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1ZSArPSAnOyBleHBpcmVzPScgKyBkYXRlLnRvR01U
U3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAn
OyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaHR0cE9ubHkpIHZhbHVlICs9ICc7IEh0
dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0gdGhpcy5rZXkgKyAn
PScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFkOiBmdW5jdGlvbigp
e1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUubWF0Y2goJyg/
Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtdKiknKTtcblx0
XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVsxXSkgOiBudWxsO1xu
XHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0bmV3IENvb2tpZSh0aGlzLmtleSwg
T2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9KSkud3JpdGUoJycp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5Db29raWUud3JpdGUgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25z
KS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29raWUucmVhZCA9IGZ1bmN0aW9uKGtleSl7XG5cdHJl
dHVybiBuZXcgQ29va2llKGtleSkucmVhZCgpO1xufTtcblxuQ29va2llLmRpc3Bvc2UgPSBmdW5j
dGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLmRp
c3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxubmFtZTogRE9NUmVhZHlcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRd
XG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XVxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bih3aW5kb3csIGRvY3VtZW50KXtcblxudmFyIHJlYWR5LFxuXHRsb2FkZWQsXG5cdGNoZWNrcyA9
IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1lcixcblx0dGVzdEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIGRvbXJlYWR5ID0gZnVuY3Rpb24oKXtcblx0Y2xl
YXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFyZWFkeSl7XG5cdFx0QnJvd3Nlci5sb2FkZWQgPSBy
ZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2Fk
ZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHRcdHdpbmRvdy5maXJlRXZl
bnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8gY2xlYW51cCBzY29wZSB2YXJzXG5cdGRvY3VtZW50
ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsO1xufTtcblxudmFyIGNoZWNrID0gZnVuY3Rp
b24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlmIChjaGVja3NbaV0o
KSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7
XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEwKTtcbn07XG5cbmRv
Y3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpO1xuXG4vKjxs
dElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmluaSBodHRwOi8vamF2
YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkL1xuLy8gdGVzdEVsZW1lbnQuZG9TY3Jv
bGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBpbiB0aGUgdG9wIHdp
bmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlvbigpe1xuXHR0cnkge1xuXHRcdHRlc3RF
bGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpe31cblx0
cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRvU2Nyb2xsIHdvcmtzIGFscmVhZHksIGl0IGNhbid0
IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJlYWR5XG4vLyAgIGUuZy4gaW4gYW4gaWZyYW1lXG5p
ZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYgIWRvU2Nyb2xsV29ya3MoKSl7XG5cdGNoZWNrcy5w
dXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91bGRQb2xsID0gdHJ1ZTtcbn1cbi8qPC9sdElFOD4q
L1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24oKXtcblx0
dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcblx0cmV0dXJuIChzdGF0ZSA9PSAnbG9h
ZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUnKTtcbn0pO1xuXG5pZiAoJ29ucmVhZHlzdGF0ZWNo
YW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50LmFkZExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdl
JywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xsID0gdHJ1ZTtcblxuaWYgKHNob3VsZFBvbGwpIHBv
bGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9tcmVhZHkgPSB7XG5cdG9uQWRkOiBmdW5jdGlvbihm
bil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxsKHRoaXMpO1xuXHR9XG59O1xuXG4vLyBNYWtlIHN1
cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZFxuRWxlbWVudC5FdmVudHMubG9hZCA9
IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChsb2Fk
ZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNhbGwodGhpcyk7XG5cdH0sXG5cdGNvbmRpdGlvbjog
ZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9PSB3aW5kb3cpe1xuXHRcdFx0ZG9tcmVhZHkoKTtc
blx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2FkO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY3VzdG9tIGxvYWQgZXZlbnRc
bndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9uKCl7XG5cdGxvYWRlZCA9IHRydWU7XG59
KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7XG4iCiAKIC8qKiovIH0pLAogLyogNDA2ICovCkBA
IC0xMTM2NDEsMTMgKzExMzY0MSwxMyBAQCBtb2R1bGUuZXhwb3J0cyA9ICIvKmpzaGludCBxdW90
bWFyazogZmFsCiAvKiA0MTQgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsK
IAotbW9kdWxlLmV4cG9ydHMgPSAiLy8gbGlicy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9WSURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElN
UExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNo
ZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqICovXG5cbi8vIFR5cGluZyBmb3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9u
IDEuMTAueCAvIDIuMC54XG4vLyBQcm9qZWN0OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmlu
aXRpb25zIGJ5OiBCb3JpcyBZYW5rb3YgPGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+
LCBDaHJpc3RpYW4gSG9mZm1laXN0ZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+
LCBTdGV2ZSBGZW50b24sIERpdWxsZWkgR29tZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVp
PiwgVGFzcyBJbGlvcG91bG9zIDxodHRwczovL2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3
ZWFyaW5nZW4sIFNlYW4gSGlsbCA8aHR0cHM6Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdv
b3NzZW5zIDxodHRwczovL2dpdGh1Yi5jb20vR3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6
Ly9naXRodWIuY29tL2tzdW1tZXJsaW4+LCBCYXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1
Yi5jb20vYmFzYXJhdD4sIE5pY2hvbGFzIFdvbHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253
b2x2ZXJzb24+LCBEZXJlayBDaWNlcm9uZSA8aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJv
bmU+LCBBbmRyZXcgR2FzcGFyIDxodHRwczovL2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFt
ZXMgSGFycmlzb24gRmlzaGVyIDxodHRwczovL2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vp
a2ljaGkgS29uZG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2tt
YW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxo
dHRwczovL2dpdGh1Yi5jb20vczA5MzI5ND4sIEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5j
b20vSm9zaFN0cm9ibD4sIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVp
bGx5Lz5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVm
aW5pdGVseVR5cGVkXG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRo
YXQgd2lsbCBjb25maWd1cmUgdGhlIEFKQVggcmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlB
amF4U2V0dGluZ3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0
aGUgcmVxdWVzdCBoZWFkZXIgdGhhdCB0ZWxscyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNw
b25zZSBpdCB3aWxsIGFjY2VwdCBpbiByZXR1cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVl
ZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAk
LmFqYXhTZXR1cCgpIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8q
KlxuICAgICAqIEJ5IGRlZmF1bHQsIGFsbCByZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNs
eSAoaS5lLiB0aGlzIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5j
aHJvbm91cyByZXF1ZXN0cywgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4g
cmVxdWVzdHMgYW5kIGRhdGFUeXBlOiBcImpzb25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQg
c3luY2hyb25vdXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5
IHRlbXBvcmFyaWx5IGxvY2sgdGhlIGJyb3dzZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGls
ZSB0aGUgcmVxdWVzdCBpcyBhY3RpdmUuIEFzIG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5
bmM6IGZhbHNlIHdpdGgganFYSFIgKCQuRGVmZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0
IHVzZSB0aGUgc3VjY2Vzcy9lcnJvci9jb21wbGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQg
b2YgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMg
anFYSFIuZG9uZSgpIG9yIHRoZSBkZXByZWNhdGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9c
biAgICBhc3luYz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpR
dWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNl
IHRoaXMgdG8gc2V0IGN1c3RvbSBoZWFkZXJzLCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mg
b2JqZWN0cyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBS
ZXR1cm5pbmcgZmFsc2UgaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhl
IHJlcXVlc3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJl
IGNhbGxlZCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAg
YmVmb3JlU2VuZD8gKGpxWEhSOiBKUXVlcnlYSFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGlu
Z3MpOiBhbnk7XG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNl
IHJlcXVlc3RlZCBwYWdlcyBub3QgdG8gYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBT
ZXR0aW5nIGNhY2hlIHRvIGZhbHNlIHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQg
YW5kIEdFVCByZXF1ZXN0cy4gSXQgd29ya3MgYnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwi
IHRvIHRoZSBHRVQgcGFyYW1ldGVycy4gVGhlIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBv
dGhlciB0eXBlcyBvZiByZXF1ZXN0cywgZXhjZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRl
IHRvIGEgVVJMIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAg
ICovXG4gICAgY2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVy
cm9yIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQpLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdv
IGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBv
YmplY3QgYW5kIGEgc3RyaW5nIGNhdGVnb3JpemluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0
IChcInN1Y2Nlc3NcIiwgXCJub3Rtb2RpZmllZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBc
ImFib3J0XCIsIG9yIFwicGFyc2VyZXJyb3JcIikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21w
bGV0ZSBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0
aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAg
Ki9cbiAgICBjb21wbGV0ZT8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6
IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVz
c2lvbiBwYWlycyB0aGF0IGRldGVybWluZSBob3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3Bv
bnNlLCBnaXZlbiBpdHMgY29udGVudCB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAq
L1xuICAgIGNvbnRlbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRp
bmcgdG8galF1ZXJ5LmFqYXggc291cmNlIGNvZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxs
b3dzIGNvbnRlbnRUeXBlIHRvIHNldCB0byBcImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1
Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAg
ICAgKiBXaGVuIHNlbmRpbmcgZGF0YSB0byB0aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5
cGUuIERlZmF1bHQgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJz
ZXQ9VVRGLThcIiwgd2hpY2ggaXMgZmluZSBmb3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0
bHkgcGFzcyBpbiBhIGNvbnRlbnQtdHlwZSB0byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMg
c2VudCB0byB0aGUgc2VydmVyIChldmVuIGlmIG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1M
SHR0cFJlcXVlc3Qgc3BlY2lmaWNhdGlvbiBkaWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFs
d2F5cyBVVEYtODsgc3BlY2lmeWluZyBhbm90aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhl
IGJyb3dzZXIgdG8gY2hhbmdlIHRoZSBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlw
ZT86IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNv
bnRleHQgb2YgYWxsIEFqYXgtcmVsYXRlZCBjYWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250
ZXh0IGlzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBp
biB0aGUgY2FsbCAoJC5hamF4U2V0dGluZ3MgbWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3Nl
ZCB0byAkLmFqYXgpLlxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAg
ICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4g
RWFjaCBjb252ZXJ0ZXIncyB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJh
bnNmb3JtZWQgdmFsdWUgb2YgdGhlIHJlc3BvbnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAg
ICAqL1xuICAgIGNvbnZlcnRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipc
biAgICAgKiBJZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2gg
YXMgSlNPTlApIG9uIHRoZSBzYW1lIGRvbWFpbiwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFp
biB0byB0cnVlLiBUaGlzIGFsbG93cywgZm9yIGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0
aW9uIHRvIGFub3RoZXIgZG9tYWluLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAg
IGNyb3NzRG9tYWluPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQg
dG8gdGhlIHNlcnZlci4gSXQgaXMgY29udmVydGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3Qg
YWxyZWFkeSBhIHN0cmluZy4gSXQncyBhcHBlbmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVz
dHMuIFNlZSBwcm9jZXNzRGF0YSBvcHRpb24gdG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9j
ZXNzaW5nLiBPYmplY3QgbXVzdCBiZSBLZXkvVmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFy
cmF5LCBqUXVlcnkgc2VyaWFsaXplcyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNl
ZCBvbiB0aGUgdmFsdWUgb2YgdGhlIHRyYWRpdGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxv
dykuXG4gICAgICovXG4gICAgZGF0YT86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9u
IHRvIGJlIHVzZWQgdG8gaGFuZGxlIHRoZSByYXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVx
dWVzdC5UaGlzIGlzIGEgcHJlLWZpbHRlcmluZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVz
cG9uc2UuIFlvdSBzaG91bGQgcmV0dXJuIHRoZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9u
IGFjY2VwdHMgdHdvIGFyZ3VtZW50czogVGhlIHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNl
cnZlciBhbmQgdGhlICdkYXRhVHlwZScgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0
ZXI/IChkYXRhOiBhbnksIHR5OiBhbnkpOiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUg
b2YgZGF0YSB0aGF0IHlvdSdyZSBleHBlY3RpbmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5v
bmUgaXMgc3BlY2lmaWVkLCBqUXVlcnkgd2lsbCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhl
IE1JTUUgdHlwZSBvZiB0aGUgcmVzcG9uc2UgKGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBY
TUwsIGluIDEuNCBKU09OIHdpbGwgeWllbGQgYSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNj
cmlwdCB3aWxsIGV4ZWN1dGUgdGhlIHNjcmlwdCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSBy
ZXR1cm5lZCBhcyBhIHN0cmluZykuXG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4g
ICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFp
bHMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4g
alF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgb2NjdXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlv
biBvYmplY3QsIGlmIG9uZSBvY2N1cnJlZC4gUG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25k
IGFyZ3VtZW50IChiZXNpZGVzIG51bGwpIGFyZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFi
b3J0XCIsIGFuZCBcInBhcnNlcmVycm9yXCIuIFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVy
cm9yVGhyb3duIHJlY2VpdmVzIHRoZSB0ZXh0dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVz
LCBzdWNoIGFzIFwiTm90IEZvdW5kXCIgb3IgXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMg
b2YgalF1ZXJ5IDEuNSwgdGhlIGVycm9yIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBm
dW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhp
cyBoYW5kbGVyIGlzIG5vdCBjYWxsZWQgZm9yIGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3Nz
LWRvbWFpbiBKU09OUCByZXF1ZXN0cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xu
ICAgIGVycm9yPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRo
cm93OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGds
b2JhbCBBamF4IGV2ZW50IGhhbmRsZXJzIGZvciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlz
IHRydWUuIFNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBh
amF4U3RhcnQgb3IgYWpheFN0b3AgZnJvbSBiZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVz
ZWQgdG8gY29udHJvbCB2YXJpb3VzIEFqYXggRXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVy
IGtleS92YWx1ZSBwYWlycyB0byBzZW5kIGFsb25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhN
TEh0dHBSZXF1ZXN0IHRyYW5zcG9ydC4gVGhlIGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxI
dHRwUmVxdWVzdCBpcyBhbHdheXMgYWRkZWQsIGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVz
dCB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBoZXJlLiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGlu
ZyBjYW4gYWxzbyBiZSBvdmVyd3JpdHRlbiBmcm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5j
dGlvbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8g
YmUgc3VjY2Vzc2Z1bCBvbmx5IGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUg
bGFzdCByZXF1ZXN0LiBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQg
aGVhZGVyLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBq
UXVlcnkgMS40IHRoaXMgdGVjaG5pcXVlIGFsc28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVk
IGJ5IHRoZSBzZXJ2ZXIgdG8gY2F0Y2ggdW5tb2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlm
TW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVu
dmlyb25tZW50IHRvIGJlIHJlY29nbml6ZWQgYXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5
c3RlbSksIGV2ZW4gaWYgalF1ZXJ5IGRvZXMgbm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRl
ZmF1bHQuIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBh
cyBsb2NhbDogZmlsZSwgKi1leHRlbnNpb24sIGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNl
dHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNl
IGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAg
ICAqL1xuICAgIGlzTG9jYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGluIGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3
aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAnY2FsbGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFy
dCBvZiB0aGUgcXVlcnkgc3RyaW5nIGluIHRoZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQn
fSB3b3VsZCByZXN1bHQgaW4gJ29uSlNPTlBMb2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBB
cyBvZiBqUXVlcnkgMS41LCBzZXR0aW5nIHRoZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVu
dHMgalF1ZXJ5IGZyb20gYWRkaW5nIHRoZSBcIj9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJM
IG9yIGF0dGVtcHRpbmcgdG8gdXNlIFwiPT9cIiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMg
Y2FzZSwgeW91IHNob3VsZCBhbHNvIGV4cGxpY2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNl
dHRpbmcuIEZvciBleGFtcGxlLCB7IGpzb25wOiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxs
YmFja05hbWVcIiB9XG4gICAgICovXG4gICAganNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogU3BlY2lmeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0
LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBieSBqUXVlcnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpR
dWVyeSBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1h
bmFnZSB0aGUgcmVxdWVzdHMgYW5kIHByb3ZpZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGlu
Zy4gWW91IG1heSB3YW50IHRvIHNwZWNpZnkgdGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8g
ZW5hYmxlIGJldHRlciBicm93c2VyIGNhY2hpbmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVl
cnkgMS41LCB5b3UgY2FuIGFsc28gdXNlIGEgZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4g
d2hpY2ggY2FzZSB0aGUgdmFsdWUgb2YganNvbnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBh
bnk7XG4gICAgLyoqXG4gICAgICogQSBtaW1lIHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1l
IHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBBIHBhc3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRw
UmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0LlxuICAgICAqL1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5
IGRlZmF1bHQsIGRhdGEgcGFzc2VkIGluIHRvIHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3Qg
KHRlY2huaWNhbGx5LCBhbnl0aGluZyBvdGhlciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nl
c3NlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBhIHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUg
ZGVmYXVsdCBjb250ZW50LXR5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRc
Ii4gSWYgeW91IHdhbnQgdG8gc2VuZCBhIERPTURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vz
c2VkIGRhdGEsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNz
RGF0YT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwi
c2NyaXB0XCIgdHJhbnNwb3J0IGlzIHVzZWQgKGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3
aXRoIFwianNvbnBcIiBvciBcInNjcmlwdFwiIGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBT
ZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSBvbiB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSBy
ZXF1ZXN0LiBVc2VkIHdoZW4gdGhlIGNoYXJhY3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMg
bm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgb24gdGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4g
ICAgc2NyaXB0Q2hhcnNldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Yg
bnVtZXJpYyBIVFRQIGNvZGVzIGFuZCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJl
c3BvbnNlIGhhcyB0aGUgY29ycmVzcG9uZGluZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nl
c3NmdWwsIHRoZSBzdGF0dXMgY29kZSBmdW5jdGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJz
IGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrOyBpZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNs
dWRpbmcgM3h4IHJlZGlyZWN0KSwgdGhleSB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhl
IGVycm9yIGNhbGxiYWNrLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1
c0NvZGU/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdl
dHMgcGFzc2VkIHRocmVlIGFyZ3VtZW50czogVGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2Vy
dmVyLCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIHN0YXR1czsgYW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54
LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBz
ZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdp
bGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAg
ICBzdWNjZXNzPyAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpOiBhbnk7XG4gICAgLyoqXG4gICAgICogU2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRz
KSBmb3IgdGhlIHJlcXVlc3QuIFRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQg
c2V0IHdpdGggJC5hamF4U2V0dXAoKS4gVGhlIHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUg
cG9pbnQgdGhlICQuYWpheCBjYWxsIGlzIG1hZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMg
YXJlIGluIHByb2dyZXNzIGFuZCB0aGUgYnJvd3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxh
YmxlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSByZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBj
YW4gYmUgc2VudC4gSW4galF1ZXJ5IDEuNC54IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0
IG9iamVjdCB3aWxsIGJlIGluIGFuIGludmFsaWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMg
b3V0OyBhY2Nlc3NpbmcgYW55IG9iamVjdCBtZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24u
IEluIEZpcmVmb3ggMy4wKyBvbmx5LCBzY3JpcHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBi
ZSBjYW5jZWxsZWQgYnkgYSB0aW1lb3V0OyB0aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQg
YXJyaXZlcyBhZnRlciB0aGUgdGltZW91dCBwZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86
IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRv
IHVzZSB0aGUgdHJhZGl0aW9uYWwgc3R5bGUgb2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAg
Ki9cbiAgICB0cmFkaXRpb25hbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUg
b2YgcmVxdWVzdCB0byBtYWtlIChcIlBPU1RcIiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdF
VFwiLiBOb3RlOiBPdGhlciBIVFRQIHJlcXVlc3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERF
TEVURSwgY2FuIGFsc28gYmUgdXNlZCBoZXJlLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBi
eSBhbGwgYnJvd3NlcnMuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAg
ICAgKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKi9cbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2Vy
bmFtZSB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRU
UCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86
IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0
dHBSZXF1ZXN0IG9iamVjdC4gRGVmYXVsdHMgdG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFp
bGFibGUgKElFKSwgdGhlIFhNTEh0dHBSZXF1ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJv
dmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5j
ZW1lbnRzIHRvIHRoZSBmYWN0b3J5LlxuICAgICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipc
biAgICAgKiBBbiBvYmplY3Qgb2YgZmllbGROYW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9u
IHRoZSBuYXRpdmUgWEhSIG9iamVjdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNl
dCB3aXRoQ3JlZGVudGlhbHMgdG8gdHJ1ZSBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5l
ZWRlZC4gSW4galF1ZXJ5IDEuNSwgdGhlIHdpdGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90
IHByb3BhZ2F0ZWQgdG8gdGhlIG5hdGl2ZSBYSFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1
aXJpbmcgaXQgd291bGQgaWdub3JlIHRoaXMgZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNv
bW1lbmQgdXNpbmcgalF1ZXJ5IDEuNS4xKyBzaG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBp
dC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhS
IG9iamVjdFxuKi9cbmludGVyZmFjZSBKUXVlcnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwg
SlF1ZXJ5UHJvbWlzZTxhbnk+IHtcbiAgICBvdmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJp
bmcpOiBhbnk7XG4gICAgYWJvcnQoc3RhdHVzVGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpR
dWVyeUNhbGxiYWNrIHtcbiAgICBhZGQoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBk
aXNhYmxlKCk6IGFueTtcbiAgICBlbXB0eSgpOiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6
IGFueVtdKTogYW55O1xuICAgIGZpcmVkKCk6IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4
dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJv
b2xlYW47XG4gICAgbG9jaygpOiBhbnk7XG4gICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVt
b3ZlKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVy
eSBQcm9taXNlcyB0byBpbnRlcm9wIHdpdGggbm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVy
ZmFjZSBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2
YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9
PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4p
OiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVl
OiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkp
ID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59
XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2Fs
bGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMg
dmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBK
UXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeVByb21pc2U8VD47XG5cbiAgICAvLyBEZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xu
ICAgIHBpcGUoZG9uZUZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBh
bnkpID0+IGFueSwgcHJvZ3Jlc3NGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9t
aXNlPGFueT47XG5cbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJl
amVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVz
ZSBKUXVlcnkgUHJvbWlzZXMgU3Vja1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVz
OiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJv
Z3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+
O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblBy
b2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxV
PjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVq
ZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Q
cm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8
VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkg
PT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBKUXVlcnkgZGVmZXJyZWQsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eURlZmVycmVkPFQ+IGV4dGVuZHMgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2
ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlb
XSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1
ZXJ5RGVmZXJyZWQ8VD47XG4gICAgbm90aWZ5V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFu
eVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBK
UXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZWplY3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczog
YW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIHJlc29sdmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVl
cnlEZWZlcnJlZDxUPjtcbiAgICBzdGF0ZSgpOiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdl
dD86IGFueSk6IEpRdWVyeVByb21pc2U8VD47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRo
ZSBKUXVlcnkgZXh0ZW5zaW9uIG9mIHRoZSBXM0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZh
Y2UgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtc
biAgICBkZWxlZ2F0ZVRhcmdldDogRWxlbWVudDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTog
Ym9vbGVhbjtcbiAgICBpc0ltbWVkaWF0ZVByb3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xu
ICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJp
bmc7XG4gICAgcHJldmVudERlZmF1bHQoKTogYW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1l
bnQ7XG4gICAgcmVzdWx0OiBhbnk7XG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZv
aWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAg
ICBwYWdlWTogbnVtYmVyO1xuICAgIHdoaWNoOiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVh
bjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUlucHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1
ZXJ5RXZlbnRPYmplY3Qge1xuICAgIGFsdEtleTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29s
ZWFuO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5c
bmludGVyZmFjZSBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVu
dE9iamVjdCB7XG4gICAgYnV0dG9uOiBudW1iZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAg
IGNsaWVudFk6IG51bWJlcjtcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVt
YmVyO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5Y
OiBudW1iZXI7XG4gICAgc2NyZWVuWTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5
RXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBh
bnk7XG4gICAgY2hhckNvZGU6IG51bWJlcjtcbiAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBu
dW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMg
QmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50
O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZl
bnRPYmplY3QsIEpRdWVyeUlucHV0RXZlbnRPYmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qs
IEpRdWVyeUtleUV2ZW50T2JqZWN0LCBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxu
LypcbiAgICBDb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3Nlclxu
Ki9cblxuaW50ZXJmYWNlIEpRdWVyeVN1cHBvcnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAg
IGJveE1vZGVsPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBj
aGVja0Nsb25lPzogYm9vbGVhbjtcbiAgICBjaGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzog
Ym9vbGVhbjtcbiAgICBjc3NGbG9hdD86IGJvb2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBi
b29sZWFuO1xuICAgIGh0bWxTZXJpYWxpemU/OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNw
YWNlPzogYm9vbGVhbjtcbiAgICBub0Nsb25lQ2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9u
ZUV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGFjaXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxl
ZD86IGJvb2xlYW47XG4gICAgb3B0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/
ICgpOiBib29sZWFuO1xuICAgIHN0eWxlPzogYm9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzog
Ym9vbGVhbjtcbiAgICB0Ym9keT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJh
bSB7XG4gICAgKG9iajogYW55KTogc3RyaW5nO1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6
IGJvb2xlYW4pOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNv
bnN0cnVjdCBqUXVlcnkgZXZlbnRzICh3aXRoICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBz
ZXBhcmF0ZWx5IGluc3RlYWQgb2YgaW5saW5lIGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICog
b3ZlcnJpZGluZyB0aGUgY29uc3RydWN0aW9uIGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5n
c1xuICogcmV0dXJuaW5nIHNwZWNpZmljIGV2ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBK
UXVlcnlFdmVudENvbnN0cnVjdG9yIHtcbiAgICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRp
ZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZl
bnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhl
IGludGVyZmFjZSB1c2VkIHRvIHNwZWNpZnkgZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJm
YWNlIEpRdWVyeUVhc2luZyB7XG4gICAgbGluZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBz
d2luZyhwOiBudW1iZXIpOiBudW1iZXI7XG59XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2Yg
alF1ZXJ5ICh0aG9zZSBvbiAkIGFuZCBqUXVlcnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5U3RhdGljIHtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3Vz
IEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBz
ZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFs
bCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0
aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVl
cnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBh
c3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0
IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBB
IGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4g
ICAgICovXG4gICAgYWpheCh1cmw6IHN0cmluZywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGlu
Z3MpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0
aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNl
bnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZGF0YVR5cGVzIEFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBkYXRhVHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5c
biAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAo
b3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXgg
b3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlz
IHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZv
ciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRs
ZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjog
SlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4
U2V0dGluZ3M7XG5cbiAgICAgLyoqXG4gICAgICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0
dXJlIEFqYXggcmVxdWVzdHMuIEl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxu
ICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25m
aWd1cmUgdGhlIGRlZmF1bHQgQWpheCByZXF1ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwu
XG4gICAgICAqL1xuICAgIGFqYXhTZXR1cChvcHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2
b2lkO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0
YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4
bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRo
ZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxp
Z2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdl
dCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0
byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBj
YWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRz
LlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20g
dGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0
LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcs
IHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChk
YXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTog
SlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0
aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlz
IHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQg
aXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1
Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmpl
Y3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5j
b2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3Ry
aW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3Ry
aW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBhIEphdmFTY3JpcHQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LCB0aGVuIGV4ZWN1dGUgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBz
dHJpbmcsIHN1Y2Nlc3M/OiAoc2NyaXB0OiBzdHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFY
SFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBh
cmFtO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBj
b250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBA
cGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQg
Y2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlw
ZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQg
R3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0
KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBq
cVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xu
ICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBP
U1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRh
dGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdp
dGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlv
biB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBk
YXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAg
KiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2
ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwg
aHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBM
b2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlk
ZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBl
IFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRl
bGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xu
ICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/
OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2Ug
Y2FsbGJhY2tzIGxpc3Qgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFu
YWdlIGNhbGxiYWNrIGxpc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlv
bmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2Fs
bGJhY2sgbGlzdCBiZWhhdmVzLlxuICAgICAqL1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmlu
Zyk6IEpRdWVyeUNhbGxiYWNrO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMg
dGhlIGV4ZWN1dGlvbiBvZiBqUXVlcnkncyByZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBob2xkIEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVl
c3RlZCBvciByZWxlYXNlZFxuICAgICAqL1xuICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTog
dm9pZDtcblxuICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xu
ICAgIChlbGVtZW50OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5
O1xuICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBK
UXVlcnkpOiBKUXVlcnk7XG4gICAgKGZ1bmM6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJh
eTogYW55W10pOiBKUXVlcnk7XG4gICAgKCk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJl
bGlucXVpc2ggalF1ZXJ5J3MgY29udHJvbCBvZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSByZW1vdmVBbGwgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1v
dmUgYWxsIGpRdWVyeSB2YXJpYWJsZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcg
alF1ZXJ5IGl0c2VsZikuXG4gICAgICovXG4gICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29s
ZWFuKTogT2JqZWN0O1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0
ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxs
eSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVj
dHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4u
LmRlZmVycmVkczogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47
XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5j
dGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmpl
Y3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEph
dmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBl
eGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1
c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQg
b2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48
VD4oLi4uZGVmZXJyZWRzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29r
czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAv
KipcbiAgICAgKiBTdG9yZSBhcmJpdHJhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNp
ZmllZCBlbGVtZW50LiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhl
IGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRh
dGEgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAg
ICovXG4gICAgZGF0YTxUPihlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQp
OiBUO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBm
b3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1
ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBk
YXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRh
IHRvIHNldC5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5n
KTogYW55O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9y
ZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2
YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRo
ZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAg
IGRlcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4g
ICAgaGFzRGF0YShlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6
IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEoZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3Rh
cnQ/OiAoZGVmZXJyZWQ6IEpRdWVyeURlZmVycmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcblxuICAgIC8vIEVmZmVjdHNcbiAgICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRl
cnZhbDogbnVtYmVyOyBzdG9wOiAoKSA9PiB2b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBm
YXN0OiBudW1iZXI7IH07IG9mZjogYm9vbGVhbjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZl
bnRzXG4gICAgcHJveHkoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnks
IC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3Ry
aW5nLCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcblxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0
cnVjdG9yO1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1
ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55
OyAgLy9UT0RPOiBEZWNpZGUgaG93IHdlIHdhbnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTog
Ym9vbGVhbjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0
O1xuXG4gICAgLy8gVXRpbGl0aWVzXG4gICAgY29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBj
b250YWluZWQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnks
IGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBhbnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFu
eSk6IGFueTtcbiAgICBlYWNoKGNvbGxlY3Rpb246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleElu
QXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7
XG4gICAgZWFjaDxUPihjb2xsZWN0aW9uOiBUW10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBu
dW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBUKSA9PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFy
Z2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFu
LCB0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNv
ZGU6IHN0cmluZyk6IGFueTtcblxuICAgIGdyZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1l
bnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0Pzog
Ym9vbGVhbik6IFRbXTtcblxuICAgIGluQXJyYXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZy
b21JbmRleD86IG51bWJlcik6IG51bWJlcjtcblxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29s
ZWFuO1xuICAgIGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rp
b24ob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICBpc1BsYWluT2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNYTUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5c
biAgICBtYWtlQXJyYXkob2JqOiBhbnkpOiBhbnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTog
VFtdLCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikg
PT4gVSk6IFVbXTtcbiAgICBtYXAoYXJyYXk6IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJh
eTogYW55LCBpbmRleEluQXJyYXk6IGFueSkgPT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4o
Zmlyc3Q6IFRbXSwgc2Vjb25kOiBUW10pOiBUW107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtd
LCBzZWNvbmQ6IFVbXSk6IGFueVtdO1xuXG4gICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTog
bnVtYmVyO1xuXG4gICAgcGFyc2VKU09OKGpzb246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxu
ICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBkYXRhYSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAg
ICAqL1xuICAgIHBhcnNlWE1MKGRhdGE6IHN0cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVl
dWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6
IEpRdWVyeTtcblxuICAgIHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9i
ajogYW55KTogc3RyaW5nO1xuXG4gICAgdW5pcXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAg
IC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAg
ICAqIEBwYXJhbSBjb250ZXh0IERPTSBlbGVtZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGlu
IHdoaWNoIHRoZSBIVE1MIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBr
ZWVwU2NyaXB0cyBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0
cyBwYXNzZWQgaW4gdGhlIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6
IHN0cmluZywgY29udGV4dD86IEhUTUxFbGVtZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBh
bnlbXTtcblxuICAgIEFuaW1hdGlvbihlbGVtOiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9u
czogYW55KTogYW55O1xuXG4gICAgZWFzaW5nOiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAg
VGhlIGpRdWVyeSBpbnN0YW5jZSBtZW1iZXJzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAg
Ly8gQUpBWFxuICAgIGFqYXhDb21wbGV0ZShoYW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWph
eEVycm9yKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBl
eGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChl
dmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdGFydChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFN0b3AoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNj
ZXNzKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNl
cHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0
YT86IGFueSwgY29tcGxldGU/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3Ry
aW5nO1xuICAgIHNlcmlhbGl6ZUFycmF5KCk6IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xu
ICAgIGFkZENsYXNzKGNsYXNzTmFtZXM6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhm
dW5jOiAoaW5kZXg6IGFueSwgY3VycmVudENsYXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2Vs
ZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cblxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3Ry
aW5nKTogc3RyaW5nO1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55
KTogSlF1ZXJ5O1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6
IGFueSwgYXR0cjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpR
dWVyeTtcblxuICAgIGhhc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAg
IGh0bWwoKTogc3RyaW5nO1xuICAgIGh0bWwoaHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGh0bWwoaHRtbENvbnRlbnQ6IChpbmRleDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAg
cHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7
XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFBy
b3BlcnR5VmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcmVtb3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNs
czogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3
dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4p
OiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBz
d3RjaDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2
YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgdmFsKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDog
YW55LCB2YWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQg
dGhlIHZhbHVlIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRo
ZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0
eU5hbWUgQSBDU1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3Ry
aW5nKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9w
ZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0
aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVl
IEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3Bl
cnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVt
YmVyW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9w
ZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZh
bHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1
cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50
IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAg
IGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTog
c3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRo
aXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9m
IHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVt
YmVyLCB2YWx1ZTogbnVtYmVyKSA9PiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
U2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJv
cGVydHktdmFsdWUgcGFpcnMgdG8gc2V0LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBP
YmplY3QpOiBKUXVlcnk7XG5cbiAgICBoZWlnaHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIGhlaWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGhlaWdodChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIGlubmVySGVpZ2h0KCk6IG51bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJX
aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVt
YmVyOyB0b3A6IG51bWJlcjsgfTtcbiAgICBvZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVy
eTtcbiAgICBvZmZzZXQoZnVuYzogKGluZGV4OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJl
cjtcbiAgICBvdXRlckhlaWdodCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVh
bik6IEpRdWVyeTtcblxuICAgIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBu
dW1iZXI7XG4gICAgb3V0ZXJXaWR0aCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9v
bGVhbik6IEpRdWVyeTtcblxuICAgIHBvc2l0aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51
bWJlcjsgfTtcblxuICAgIHNjcm9sbExlZnQoKTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFs
dWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Ny
b2xsVG9wKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4g
ICAgd2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIHdpZHRoKGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGF0YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpR
dWVyeTtcbiAgICBkYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4g
ICAgZGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVy
eTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgcHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBh
bnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShw
cm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1
ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJv
cGVydGllczogYW55LCBvcHRpb25zOiB7IGR1cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7
IGNvbXBsZXRlPzogRnVuY3Rpb247IHN0ZXA/OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBz
cGVjaWFsRWFzaW5nPzogYW55OyB9KTogSlF1ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51
bWJlciwgcXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRl
T3V0KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0
KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJl
ciwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBmaW5pc2goKTogSlF1ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFu
eSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFz
aW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlk
ZURvd24oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRl
RG93bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcblxuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5n
LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnks
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVh
c2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFy
UXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3Ao
cXVldWU/OiBhbnksIGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTog
SlF1ZXJ5O1xuXG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVl
cnk7XG5cbiAgICAvLyBFdmVudHNcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERh
dGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnks
IHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0
cmluZywgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50
czogYW55W10pOiBKUXVlcnk7XG5cbiAgICBibHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFu
eSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQg
b24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICov
XG4gICAgY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGlj
ayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRi
bGNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRi
bGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGRibGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgZGJsY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2Vs
ZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwiZm9jdXNcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3Vz
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgZm9jdXMoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBmb2N1cyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgZm9jdXNvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBmb2N1c291dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QmluZCB0d28gaGFuZGxlcnMgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVk
IHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhh
bmRsZXJPdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVh
dmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhIHNpbmdsZSBoYW5kbGVyIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRl
ZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAg
ICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbk91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJr
ZXlkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5
ZG93blwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBrZXlkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIGtleWRvd25cIlwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXlkb3duKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwia2V5cHJlc3NcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGtleXByZXNzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQg
ZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXl1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBsb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRv
d25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
ZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2Vkb3duKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2VlbnRlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2VlbnRlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVu
IHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRl
cihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlbGVhdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNl
bGVhdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVh
dmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92
ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlbW92ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbW91c2Vtb3ZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwibW91c2VvdXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNlb3V0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVy
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJt
b3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJtb3VzZXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
bW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIG1vdXNldXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZXVwKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tc
IiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFt
IHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxs
eSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9y
IHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAg
b2ZmKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24u
bXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhh
bmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0
aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNl
bnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBu
YW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJl
dmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2Vk
IHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9m
ZihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9u
IGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQg
dHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5
ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNv
IGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyBy
ZXR1cm4gZmFsc2UuIFJlc3QgcGFyYW1ldGVyIGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRl
cnMgcGFzc2VkIHRvIGpRdWVyeS50cmlnZ2VyKCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFt
ZXRlcnMgb24gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0
aW9uYWwgKD8gc3ludGF4KS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFu
eSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5j
dGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBc
ImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRl
ZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxl
Y3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFs
bG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1
cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJp
bmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRv
d24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0
cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBl
bGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5k
bGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBv
bihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3Jl
IGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9t
aXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRv
IHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICov
XG4gICAgb24oZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnks
IGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVy
IHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0
IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2
ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZl
bnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0
IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVu
dCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2Ug
cGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywg
c3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxu
ICAgICAqIEBwYXJhbSBkYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBU
aGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50
IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEg
c2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVk
IGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxs
IG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hl
cyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2Ug
aXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5
IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2Vs
ZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4g
ZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBv
bmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFs
IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxu
ICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRl
c2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlz
IHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0
YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUg
ZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQg
c2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmlu
Zywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRh
Y2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlz
IGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5
cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBv
cHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxl
Y3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBz
ZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVj
dG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVu
IGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0
YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50
IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSwgc2VsZWN0b3I/OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxu
ICAgICAqIFNwZWNpZnkgYSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxs
eSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgYWZ0ZXIgdGhlIERPTSBpcyByZWFkeS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVy
OiBGdW5jdGlvbik6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVz
aXplXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHJlc2l6ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
cmVzaXplKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInNjcm9sbFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzY3JvbGwoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNjcm9sbChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJzZWxlY3RcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNl
bGVjdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzZWxlY3QoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic3VibWl0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzdWJtaXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmln
Z2VyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIHRyaWdnZXIoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAg
dHJpZ2dlckhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55
W10pOiBPYmplY3Q7XG5cbiAgICB1bmJpbmQoZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVu
YmluZChldmVudFR5cGU6IHN0cmluZywgZmxzOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmlu
ZChldnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVu
ZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxl
Z2F0ZShzZWxlY3RvcjogYW55LCBldmVudHM6IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRl
KG5hbWVzcGFjZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQo
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxl
bWVudDtcbiAgICBqcXVlcnk6IHN0cmluZztcblxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVu
dERhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtc
biAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFueVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55
KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWFuaXB1bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDog
YW55W10pOiBKUXVlcnk7XG4gICAgYWZ0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIGFwcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBl
bmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
YXBwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDog
YW55W10pOiBKUXVlcnk7XG4gICAgYmVmb3JlKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBjbG9uZSh3aXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRo
RGF0YUFuZEV2ZW50cz86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBlbXB0eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRl
cih0YXJnZXQ6IGFueSk6IEpRdWVyeTtcbiAgICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBwcmVwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHBy
ZXBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgcHJlcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9y
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtc
blxuICAgIHJlcGxhY2VXaXRoKGZ1bmM6IGFueSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3Ry
aW5nO1xuICAgIHRleHQodGV4dFN0cmluZzogYW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0
cmluZzogKGluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgdG9BcnJheSgpOiBhbnlbXTtcblxuICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3
cmFwKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwSW5uZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVl
cnk7XG4gICAgd3JhcElubmVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTog
RWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55
O1xuXG4gICAgaW5kZXgoKTogbnVtYmVyO1xuICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBu
dW1iZXI7XG4gICAgaW5kZXgoZWxlbWVudDogYW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVy
dGllc1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6
IHN0cmluZ106IGFueTtcbiAgICBbeDogbnVtYmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBU
cmF2ZXJzaW5nXG4gICAgYWRkKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVl
cnk7XG4gICAgYWRkKC4uLmVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNo
aWxkcmVuKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86
IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAg
ICBjbG9zZXN0KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczog
YW55LCBjb250ZXh0PzogRWxlbWVudCk6IGFueVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5
O1xuXG4gICAgZW5kKCk6IEpRdWVyeTtcblxuICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7
XG5cbiAgICBmaWx0ZXIoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVu
YzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55
KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQo
c2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVy
eTtcbiAgICBmaW5kKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5
O1xuXG4gICAgaGFzKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5l
ZDogRWxlbWVudCk6IEpRdWVyeTtcblxuICAgIGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFu
O1xuICAgIGlzKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVs
ZW1lbnQ6IGFueSk6IGJvb2xlYW47XG4gICAgaXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4g
ICAgbGFzdCgpOiBKUXVlcnk7XG5cbiAgICBtYXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21F
bGVtZW50OiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIG5leHRVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIG5leHRVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIG5vdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChm
dW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkp
OiBKUXVlcnk7XG4gICAgbm90KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFy
ZW50KCk6IEpRdWVyeTtcblxuICAgIHBhcmVudChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHBhcmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRz
VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBw
YXJlbnRzVW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtc
biAgICBwYXJlbnRzVW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICBwcmV2KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChz
ZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0
cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50Pzog
RWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBK
UXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVt
YmVyKTogSlF1ZXJ5O1xuXG4gICAgLy8gVXRpbGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/
OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVP
ckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG4gICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBh
bnkpOiBKUXVlcnk7XG59XG5kZWNsYXJlIG1vZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQg
PSAkO1xufVxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAk
OiBKUXVlcnlTdGF0aWM7XG4vLyBsaWJzL2FuZ3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRl
ZmluaXRpb25zIGZvciBBbmd1bGFyIEpTIDEuMFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJq
cy5vcmdcbi8vIERlZmluaXRpb25zIGJ5OiBEaWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20v
ZGllZ292aWxhcj5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5r
b3YvRGVmaW5pdGVseVR5cGVkXG5cblxuXG5kZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxh
clN0YXRpYztcblxuLy8gU3VwcG9ydCBmb3IgcGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25c
bmludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAgJGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuLy8gbmcgbW9kdWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuZGVjbGFyZSBtb2R1bGUgbmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJv
dmlkZXJzIGV4dGVuZCB0aGlzIGludGVyZmFjZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgJGdldDogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEFuZ3VsYXJTdGF0aWNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJT
dGF0aWMge1xuICAgICAgICBiaW5kKGNvbnRleHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdz
OiBhbnlbXSk6IEZ1bmN0aW9uO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBt
b2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJh
cChlbGVtZW50OiBKUXVlcnksIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6
IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3Vt
ZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNv
cHkoc291cmNlOiBhbnksIGRlc3RpbmF0aW9uPzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50
OiBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljO1xuICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZh
bHVlMjogYW55KTogYm9vbGVhbjtcbiAgICAgICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4u
LnNvdXJjZXM6IGFueVtdKTogYW55O1xuICAgICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRv
cjogKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIGZyb21Kc29uKGpzb246IHN0cmluZyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJn
PzogYW55KTogYW55O1xuICAgICAgICBpbmplY3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJ
bmplY3RvclNlcnZpY2U7XG4gICAgICAgIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzRGF0ZSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZh
bHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xl
YW47XG4gICAgICAgIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlz
TnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGlzVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uo
c3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFy
IGFwcGxpY2F0aW9uXG5cdFx0b2ZmaWNpYWwgZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmlu
ZyBhbmd1bGFyIG1vZHVsZXMuXG5cdFx0c2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9hbmd1bGFyLk1vZHVsZVxuXHRcdCovXG4gICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8q
KiBuYW1lIG9mIHlvdXIgbW9kdWxlIHlvdSB3YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAg
bmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBl
bmRzIG9uICovXG4gICAgICAgICAgICByZXF1aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAg
Y29uZmlnRnVuY3Rpb24/OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFu
eVtdKTogdm9pZDtcbiAgICAgICAgdG9Kc29uKG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTog
c3RyaW5nO1xuICAgICAgICB1cHBlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAg
IHZlcnNpb246IHtcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9y
OiBudW1iZXI7XG4gICAgICAgICAgICBtaW5vcjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBu
dW1iZXI7XG4gICAgICAgICAgICBjb2RlbmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJTW9kdWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6
IHN0cmluZywgYW5pbWF0aW9uRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBh
bmltYXRpb24obmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJ
TW9kdWxlO1xuICAgICAgICBhbmltYXRpb24ob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAg
ICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhv
ZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUg
bG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1v
ZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2Ug
dGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQg
b24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0
KTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAg
ICAgICAgY29udHJvbGxlcihvYmplY3QgOiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJl
Y3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9u
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElN
b2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0
aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBp
bmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5
KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywg
ZmlsdGVyRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRl
cihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIGZpbHRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTog
SU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRD
b25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0
cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBz
ZXJ2aWNlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3Ry
aW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3Qp
OiBJTW9kdWxlO1xuXG4gICAgICAgIC8vIFByb3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5n
O1xuICAgICAgICByZXF1aXJlczogc3RyaW5nW107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVj
ZXNzYXJ5IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBu
b3QgdmVyeSBlbGVnYW50XG5cdC8vIGJlY2F1c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28n
XSBpbnN0ZWFkIG9mIGF0dHJzLmZvbyBidXQgSSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxu
XHQvLyB0aGlzIHNob3VsZCByZWFsbHkgYmUgbGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBp
dCBjcmVhdGVzIHRoaXMgcHJvYmxlbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4
NTQvMTY1NjU2XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUg
Q1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRo
ZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4g
YW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkXG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRk
aXRpb24uXG4gICAgICAgICRhZGRDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAg
ICAgICAvLyBSZW1vdmVzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFz
c1ZhbCBwYXJhbWV0ZXIgZnJvbSB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9u
cyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAg
ICAgICAgLy8gdGhlIGNsYXNzIHJlbW92YWwuXG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1Zh
bDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRl
IHZhbHVlLlxuICAgICAgICAkc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxu
ICAgICAgICAvLyBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAv
LyBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBu
ZXh0ICRkaWdlc3RcbiAgICAgICAgLy8gZm9sbG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2
ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQg
dmFsdWUgY2hhbmdlcy5cbiAgICAgICAgJG9ic2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/
OmFueSk9PmFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50
IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxu
ICAgICAgICAvLyB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNr
IHRvIGFjdHVhbCBuYW1lLlxuICAgICAgICAkYXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZvcm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7
XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xu
ICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAg
ICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9k
ZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcu
SU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4g
ICAgICAgICRzZXRQcmlzdGluZSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIE5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7
XG4gICAgICAgICRyZW5kZXIoKTogdm9pZDtcbiAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRp
b25FcnJvcktleTogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8g
RG9jdW1lbnRhdGlvbiBzdGF0ZXMgdmlld1ZhbHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3Ry
aW5nIGJ1dCBvdGhlclxuICAgICAgICAvLyB0eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0
byB1c2UgdGhlbS5cbiAgICAgICAgJHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAg
ICAgICAgJHZpZXdWYWx1ZTogYW55O1xuXG4gICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAg
ICAgICAgJHBhcnNlcnM6IElNb2RlbFBhcnNlcltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1v
ZGVsRm9ybWF0dGVyW107XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6
IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29s
ZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SU1vZGVsUGFyc2VyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElNb2RlbEZvcm1hdHRlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5
KCk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBw
bHkoZXhwOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNh
c3QobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAg
ICRkZXN0cm95KCk6IHZvaWQ7XG4gICAgICAgICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVt
aXQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAg
ICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBs
ZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcs
IGFyZ3M/OiBPYmplY3QpOiBhbnk7XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTog
SVNjb3BlKSA9PiBhbnksIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1l
bnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNv
dW50cyBvbiBpdFxuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7
XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6
IHZvaWQ7XG5cbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0
aW9uIGNoZWNraW5nIHN0cmF0ZWd5XG4gICAgICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJ
U2NvcGU7XG5cbiAgICAgICAgJG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFu
Z3VsYXJFdmVudCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAg
ICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVj
dEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHBy
ZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnks
IHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rp
b247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBh
bnksIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlv
bjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFu
eSwgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29w
ZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAg
ICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5l
d1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0
aW9uO1xuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJ
U2NvcGUpID0+IGFueSwgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBz
Y29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2Nv
cGU7XG5cbiAgICAgICAgJGlkOiBudW1iZXI7XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNc
biAgICAgICAgJCRpc29sYXRlQmluZGluZ3M6IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5ndWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2Nv
cGU6IElTY29wZTtcbiAgICAgICAgY3VycmVudFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6
IHN0cmluZztcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZh
dWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50
cyB0aGF0IHdlcmUgJGVtaXQtdGVkXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9u
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRz
IFdpbmRvdyB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZp
Y2VcbiAgICAvLyBUT0RPIHVuZG9jdW1lbnRlZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0
aGUgc291cmNlIGNvZGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJy
b3dzZXJTZXJ2aWNlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGlt
ZW91dFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZp
Y2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBs
eT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVBy
b21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSW50ZXJ2YWxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRpbnRlcnZhbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJSW50ZXJ2YWxTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVt
YmVyLCBjb3VudD86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55
PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAg
ICAobmFtZTogc3RyaW5nKTogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0
ZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3Rlcihu
YW1lOiBzdHJpbmcsIGZpbHRlckZhY3Rvcnk6IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAg
ICBpZDogc3RyaW5nO1xuXG4gICAgICAgIC8vIFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAg
ICAgICAvLyBDaGVjayBhbmd1bGFyJ3MgaTE4biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAg
TlVNQkVSX0ZPUk1BVFM6IElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBE
QVRFVElNRV9GT1JNQVRTOiBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAg
ICBwbHVyYWxDYXQ6IChudW06IGFueSkgPT4gc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBz
dHJpbmc7XG4gICAgICAgIEdST1VQX1NFUDogc3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxv
Y2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yW107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3Ry
aW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0
b3Ige1xuICAgICAgICBtaW5JbnQ6IG51bWJlcjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xu
ICAgICAgICBtYXhGcmFjOiBudW1iZXI7XG4gICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAg
ICBwb3NTdWY6IHN0cmluZztcbiAgICAgICAgbmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1
Zjogc3RyaW5nO1xuICAgICAgICBnU2l6ZTogbnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJl
cjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRv
ciB7XG4gICAgICAgIE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5n
W107XG4gICAgICAgIERBWTogc3RyaW5nW107XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtc
biAgICAgICAgQU1QTVM6IHN0cmluZ1tdO1xuICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAg
ICAgc2hvcnQ6IHN0cmluZztcbiAgICAgICAgZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9u
Z0RhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9y
dERhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9y
dFRpbWU6IHN0cmluZztcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBM
b2dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRs
b2dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xu
ICAgICAgICBkZWJ1ZzogSUxvZ0NhbGw7XG4gICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAg
ICAgaW5mbzogSUxvZ0NhbGw7XG4gICAgICAgIGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46
IElMb2dDYWxsO1xuICAgIH1cblxuICAgIC8vIFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGlu
dGVyZmFjZSBzbyB3ZSBjYW4gcmVvcGVuIGl0IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sg
bW9kdWxlLlxuICAgIGludGVyZmFjZSBJTG9nQ2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlb
XSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJz
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtc
biAgICAgICAgKGV4cHJlc3Npb246IHN0cmluZyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4
dDogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90
IHByb3ZpZGVkLCB1bmRlZmluZWQgaXMgZ29ubmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50
YXRpb25cbiAgICAgICAgLy8gZG9lcyBub3QgY2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9y
Y2UgYSB2YWx1ZSBmb3IgY29uc2lzdGVuY3kuIElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50
cyB0byB1bmRlZmluZSBpdCwgcGFzcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4g
ICAgICAgIGFzc2lnbihjb250ZXh0OiBhbnksIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4k
bG9jYXRpb25cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9u
U2VydmljZSB7XG4gICAgICAgIGFic1VybCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3Ry
aW5nO1xuICAgICAgICBoYXNoKG5ld0hhc2g6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIGhvc3QoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAg
cGF0aChuZXdQYXRoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6
IG51bWJlcjtcbiAgICAgICAgcHJvdG9jb2woKTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6
IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJj
aChwYXJhbWV0ZXJzTWFwOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2go
cGFyYW1ldGVyOiBzdHJpbmcsIHBhcmFtZXRlclZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNl
O1xuICAgICAgICB1cmwoKTogc3RyaW5nO1xuICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBl
eHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztc
biAgICAgICAgaGFzaFByZWZpeChwcmVmaXg6IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xu
ICAgICAgICBodG1sNU1vZGUoKTogYm9vbGVhbjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9u
IHN0YXRlcyB0aGF0IHBhcmFtZXRlciBpcyBzdHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1l
bnRhdGlvbiB0ZXN0cyBpdCBhcyBib29sZWFuLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAg
ICAgIC8vIHNpbmNlIHRoaXMgaXMgYSB0b2dnbGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6
IGJvb2xlYW4pOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBEb2N1bWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGRvY3VtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElEb2N1bWVudFNlcnZpY2UgZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRXhjZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2
aWNlIHtcbiAgICAgICAgKGV4Y2VwdGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVt
ZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNl
cnZpY2UgZXh0ZW5kcyBKUXVlcnkge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IFFTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRx
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAg
ICAgIGFsbChwcm9taXNlczogSVByb21pc2U8YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAg
ICAgICBkZWZlcjxUPigpOiBJRGVmZXJyZWQ8VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBh
bnkpOiBJUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNl
PFQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21p
c2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5
Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAg
ICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJ
UHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBu
b3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0Pjtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQp
ID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5v
dGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xu
XG5cbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJ
SHR0cFByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8
VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6
IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAo
cmVhc29uOiBhbnkpID0+IFRSZXN1bHQpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBm
aW5hbGx5PFRSZXN1bHQ+KGZpbmFsbHlDYWxsYmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3Vs
dD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29s
dmUodmFsdWU/OiBUKTogdm9pZDtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7
XG4gICAgICAgIG5vdGlmeShzdGF0ZT86YW55KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVBy
b21pc2U8VD47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9y
U2Nyb2xsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kYW5jaG9yU2Nyb2xsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElB
bmNob3JTY3JvbGxTZXJ2aWNlIHtcbiAgICAgICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElBbmNob3JTY3JvbGxQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICBkaXNhYmxlQXV0b1Njcm9sbGluZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIENhY2hlRmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAg
IC8vIExldHMgbm90IGZvY2UgdGhlIG9wdGlvbnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVt
YmVyLiBFdmVuIHRob3VnaFxuICAgICAgICAvLyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRl
cmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBt
aWdodCBmaW5kIGl0IHVzZWZ1bCB0byBhc3NvY2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRo
ZSBjYWNoZSBvYmplY3QuXG4gICAgICAgIC8vKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86
IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IENhY2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDog
c3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0
O1xuXG4gICAgICAgIC8vIE1ldGhvZHMgYmVsbG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAg
ICBpbmZvKCk6IGFueTtcbiAgICAgICAgZ2V0IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmpl
Y3Q7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8o
KToge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtc
blxuICAgICAgICAgICAgLy8gTm90IGdhcmFudGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9u
LW1hbmRhdG9yeSBvcHRpb25cbiAgICAgICAgICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAg
ICAgfTtcbiAgICAgICAgcHV0KGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAg
ICAgIGdldCAoa2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6
IHZvaWQ7XG4gICAgICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZv
aWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92
aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZp
Y2Uge1xuICAgICAgICAoZWxlbWVudDogc3RyaW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlu
a2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5j
dGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVM
aW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1
bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogSlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRl
TGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdG
dW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRz
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJl
Y3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElDb21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8g
VW5kb2N1bWVudGVkLCBidXQgaXQgaXMgdGhlcmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVj
dGl2ZXNNYXA6IGFueSk6IElDb21waWxlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiB7XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5v
dCBmb3JjZSBjbG9uZUF0dGFjaEZuJ3Mgc2lnbmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3Bl
LCBjbG9uZUF0dGFjaEZuPzogKGNsb25lZEVsZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3Bl
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gQ29udHJvbGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbnRyb2xsZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJQ29udHJvbGxlclNlcnZpY2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUg
ZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHN0YXRlIHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAg
ICAgICAgKGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFu
eTtcbiAgICAgICAgKGNvbnRyb2xsZXJOYW1lOiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2
aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJp
bmcsIGRlcGVuZGVuY3lBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwU2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0
IG1vZXRob2QgYW5kIHVybCBtdXN0IGJlIHByb3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElS
ZXF1ZXN0Q29uZmlnKTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJp
bmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVs
ZXRlICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBoZWFkKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQ
cm9taXNlPGFueT47XG4gICAgICAgIGpzb25wKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6
IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBw
dXQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAg
Ly8gRm9yIGRlYnVnZ2luZywgQlVUIGl0IGlzIGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxu
ICAgICAgICBwZW5kaW5nUmVxdWVzdHM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMg
anVzdCBmb3IgaGludGluZy5cbiAgICAvLyBTb21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFp
bGFibGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cCNVc2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNc
biAgICBpbnRlcmZhY2UgSVJlcXVlc3RDb25maWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztc
biAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAv
LyBYWFggaXQgaGFzIGl0J3Mgb3duIHN0cnVjdHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVm
aW5lIGl0IGluIHRoZSBmdXR1cmVcbiAgICAgICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBj
YWNoZT86IGFueTtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAg
ICAvLyBUaGVzZSBhY2NlcHQgbXVsdGlwbGUgdHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFz
IGFueVxuICAgICAgICBkYXRhPzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55
O1xuICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFu
eTsgLy8gbnVtYmVyIHwgcHJvbWlzZVxuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21p
c2VDYWxsYmFjazxUPiB7XG4gICAgICAgIChkYXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVy
czogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmln
KTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8
VD4ge1xuICAgICAgICBkYXRhPzogVDtcbiAgICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAg
ICBoZWFkZXJzPzogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25m
aWc/OiBJUmVxdWVzdENvbmZpZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNl
PFQ+IGV4dGVuZHMgSVByb21pc2U8VD4ge1xuICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0
cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2Fs
bGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAg
ICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VD
YWxsYmFja0FyZzxUPikgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0
dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAg
ICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPikgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAo
cmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElT
ZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAg
ICAgIGludGVyY2VwdG9yczogYW55W107XG4gICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBh
bnlbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2Vu
ZFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0
dHBCYWNrZW5kXG4gICAgLy8gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZp
Y2UgZGlyZWN0bHkuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRw
QmFja2VuZFNlcnZpY2Uge1xuICAgICAgICAvLyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sg
c2lnbmF0dXJlIGluIHRoZSBmdXR1cmVcbiAgICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0
cmluZywgcG9zdD86IGFueSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGlt
ZW91dD86IG51bWJlciwgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92
aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVT
ZXJ2aWNlIHtcbiAgICAgICAgKHRleHQ6IHN0cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9v
bGVhbik6IElJbnRlcnBvbGF0aW9uRnVuY3Rpb247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJp
bmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZh
Y2UgSUludGVycG9sYXRpb25GdW5jdGlvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJp
bmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMg
SVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAg
ICAgc3RhcnRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAg
ICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmlu
Zyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFRlbXBsYXRlQ2FjaGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiR0ZW1wbGF0ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUNhY2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVj
dCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4
dGVuZHMgSVNjb3BlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cblx0aW50ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRU
cnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1
c3RlZENzcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkp
OiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEpzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3Rl
ZFJlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTog
YW55KTogYW55O1xuXHRcdHBhcnNlKHR5cGU6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTog
KGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJl
c3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0
cGFyc2VBc0h0bWwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBh
bnkpID0+IGFueTtcblx0XHRwYXJzZUFzSnMoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6
IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVz
c2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRw
YXJzZUFzVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55
KSA9PiBhbnk7XG5cdFx0dHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0dHJ1c3RBc0h0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFu
eSk6IGFueTtcblx0XHR0cnVzdEFzUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0
cnVzdEFzVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5c
dH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2
aWNlIHtcbiAgICAgICAgZ2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55
KTogYW55O1xuICAgICAgICB0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtc
biAgICAgICAgdmFsdWVPZih2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRl
bmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZXNvdXJjZVVybEJsYWNrbGlzdChibGFj
a2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICAgICAgcmVzb3VyY2VVcmxXaGl0ZWxpc3Qod2hpdGVs
aXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gRGlyZWN0aXZlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZlXG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvZ3VpZGUvZGlyZWN0aXZlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBp
bnRlcmZhY2UgSURpcmVjdGl2ZXtcbiAgICAgICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVt
cGxhdGVFbGVtZW50OiBhbnksXG4gICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRy
aWJ1dGVzLFxuICAgICAgICAgICAgdHJhbnNjbHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlu
a2luZ0ZuOiBGdW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAg
IGNvbnRyb2xsZXI/OiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAg
ICAgbGluaz86XG4gICAgICAgICAgICAoc2NvcGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3Rh
bmNlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmli
dXRlcyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lk
O1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAg
ICAgICAgcmVwbGFjZT86IGJvb2xlYW47XG4gICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAg
IHJlc3RyaWN0Pzogc3RyaW5nO1xuICAgICAgICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxh
dGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlVXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86
IGJvb2xlYW47XG4gICAgICAgIHRyYW5zY2x1ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gYW5ndWxhci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5n
IGFuZ3VsYXIuZWxlbWVudCwgYW5ndWxhciByZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAv
LyBhdWdtZW50ZWQgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAg
IC8vIHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0
aWMgZXh0ZW5kcyBKUXVlcnlTdGF0aWMge1xuICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29u
dGV4dD86IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1
ZXJ5O1xuICAgICAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5
O1xuICAgICAgICAob2JqZWN0OiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAo
ZnVuYzogRnVuY3Rpb24pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtd
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAg
ICAgICAvLyBUT0RPOiBldmVudHMsIGhvdyB0byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lc
blxuICAgICAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAg
ICAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQo
b2JqOiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFt
ZTogc3RyaW5nKTogYW55O1xuICAgICAgICBpbmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3Bl
KCk6IElTY29wZTtcblxuICAgICAgICBpbmhlcml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTog
YW55KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmdd
OiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTog
YW55O1xuXG5cbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8g
bW9kdWxlIChhbmd1bGFyLmpzKVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBt
b2R1bGUgYXV0byB7XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0
b3JTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9B
VVRPLiRpbmplY3RvclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2Ug
SUluamVjdG9yU2VydmljZSB7XG4gICAgICAgICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBz
dHJpbmdbXTtcbiAgICAgICAgICAgIGFubm90YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBh
bnlbXSk6IHN0cmluZ1tdO1xuICAgICAgICAgICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4g
ICAgICAgICAgICBpbnN0YW50aWF0ZSh0eXBlQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/
OiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246
IGFueVtdKTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0
PzogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgICAgICAvLyBQcm92aWRlU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgICAgICBpbnRlcmZhY2UgSVByb3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8v
IERvY3VtZW50YXRpb24gc2F5cyBpdCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBi
dXQgYWN0dWFsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4g
YW55dGhpbmcuXG4gICAgICAgICAgICAvLyBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiBhbnk7XG4gICAgICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiB2b2lkO1xuXG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6
IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRl
Y29yYXRvcklubGluZTogYW55W10pOiB2b2lkO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBz
dHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92
aWRlcjtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRG
dW5jdGlvbjogYW55W10pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlk
ZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjogbmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2
aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQ
cm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcu
SVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1v
ZGVscy9Ub2RvSXRlbS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0Jztcblxu
ICAgIGV4cG9ydCBjbGFzcyBUb2RvSXRlbSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAg
ICAgICAgcHVibGljIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVk
OiBib29sZWFuXG4gICAgICAgICAgICApIHsgfVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRv
ZG9TY29wZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2Nv
cGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xuXHRcdHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1Rv
ZG86IHN0cmluZztcblx0XHRlZGl0ZWRUb2RvOiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86
IFRvZG9JdGVtO1xuXHRcdHJlbWFpbmluZ0NvdW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBu
dW1iZXI7XG5cdFx0YWxsQ2hlY2tlZDogYm9vbGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtc
blx0XHRzdGF0dXNGaWx0ZXI6IHsgY29tcGxldGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9u
OiBuZy5JTG9jYXRpb25TZXJ2aWNlO1xuXHRcdHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50
ZXJmYWNlcy9JVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVy
ZmFjZSBJVG9kb1N0b3JhZ2Uge1xuXHRcdGdldCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9k
b3M6IFRvZG9JdGVtW10pO1xuXHR9XG59Ly8gZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9k
dWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhh
dCBwbGFjZXMgZm9jdXMgb24gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBl
eHByZXNzaW9uIGl0IGJpbmRzIHRvIGV2YWx1YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0
IGZ1bmN0aW9uIHRvZG9Gb2N1cygkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURp
cmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwg
ZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3
YXRjaChhdHRyaWJ1dGVzLnRvZG9Gb2N1cywgbmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3
dmFsKSB7XG5cdFx0XHRcdFx0XHQkdGltZW91dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAs
IGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1c
blxuXHR0b2RvRm9jdXMuJGluamVjdCA9IFsnJHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMv
VG9kb0JsdXIudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAv
KipcbiAgICAgKiBEaXJlY3RpdmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhl
IGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byBsb3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBv
cnQgZnVuY3Rpb24gdG9kb0JsdXIoKTogbmcuSURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7
XG4gICAgICAgICAgICBsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwg
YXR0cmlidXRlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVy
JywgKCkgPT4geyAkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAg
ICAgICAgICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQo
J2JsdXInKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGly
ZWN0aXZlcy9Ub2RvRXNjYXBlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0Jztc
blxuXHRjb25zdCBFU0NBUEVfS0VZID0gMjc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0
IGNhbmNlbHMgZWRpdGluZyBhIHRvZG8gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5c
blx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xu
XHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpR
dWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93
bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVf
S0VZKSB7XG5cdFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7
XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJv
eScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0
fTtcblx0fVxufVxuLy8gc2VydmljZXMvVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtc
biAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNp
c3RzIGFuZCByZXRyaWV2ZXMgVE9ET3MgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAg
ZXhwb3J0IGNsYXNzIFRvZG9TdG9yYWdlIGltcGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAg
ICAgICBTVE9SQUdFX0lEID0gJ3RvZG9zLWFuZ3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAg
ICBnZXQgKCk6IFRvZG9JdGVtW10ge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9j
YWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxu
XG4gICAgICAgIHB1dCh0b2RvczogVG9kb0l0ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9y
YWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAg
ICAgICB9XG4gICAgfVxufS8vIGNvbnRyb2xsZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2Rv
cyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBm
b3IgdGhlIGFwcC4gVGhlIGNvbnRyb2xsZXI6XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0
cyB0aGUgbW9kZWwgdmlhIHRoZSB0b2RvU3RvcmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0
aGUgbW9kZWwgdG8gdGhlIHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQg
Ki9cblx0ZXhwb3J0IGNsYXNzIFRvZG9DdHJsIHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9J
dGVtW107XG5cblx0XHQvLyAkaW5qZWN0IGFubm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMg
JGluamVjdG9yIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVj
dGVkIGludG8gY29uc3RydWN0b3Jcblx0XHQvLyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9z
ZSB0byB0aGUgY29uc3RydWN0b3IsIGJlY2F1c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBp
biBjb3VudCBhbmQgdHlwZS5cblx0XHQvLyBTZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9n
dWlkZS9kaVxuXHRcdHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxu
XHRcdFx0JyRsb2NhdGlvbicsXG5cdFx0XHQndG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZp
bHRlcidcblx0XHRdO1xuXG5cdFx0Ly8gZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5n
dWxhckpTICRpbmplY3RvclxuXHRcdC8vIGNvbnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQg
aW4gQXBwbGljYXRpb24udHMgYW5kIHNwZWNpZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmli
dXRlIGluIGluZGV4Lmh0bWxcblx0XHRjb25zdHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3Bl
OiBJVG9kb1Njb3BlLFxuXHRcdFx0cHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZp
Y2UsXG5cdFx0XHRwcml2YXRlIHRvZG9TdG9yYWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2
YXRlIGZpbHRlckZpbHRlclxuXHRcdCkge1xuXHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2Rv
cyA9IHRvZG9TdG9yYWdlLmdldCgpO1xuXG5cdFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRc
dFx0JHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3Ig
J3ZpZXcgbW9kZWwnLiBXZSdyZSBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIg
dG8gdGhlIHNjb3BlXG5cdFx0XHQvLyBmb3IgaXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBm
cm9tIHZpZXcgLyBIVE1MXG5cdFx0XHQkc2NvcGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRj
aGluZyBmb3IgZXZlbnRzL2NoYW5nZXMgaW4gc2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmll
dy91c2VyIGlucHV0XG5cdFx0XHQvLyBpZiB5b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50
IHdpdGggbGlmZXRpbWUgbG9uZ2VyIHRoYW4gdGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91
IHVuc3Vic2NyaWJlLlxuXHRcdFx0JHNjb3BlLiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9u
VG9kb3MoKSwgdHJ1ZSk7XG5cdFx0XHQkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBw
YXRoID0+IHRoaXMub25QYXRoKHBhdGgpKVxuXG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9
PT0gJycpICRsb2NhdGlvbi5wYXRoKCcvJyk7XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9j
YXRpb247XG5cdFx0fVxuXG5cdFx0b25QYXRoKHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4k
c2NvcGUuc3RhdHVzRmlsdGVyID0gKHBhdGggPT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNv
bXBsZXRlZDogZmFsc2UgfSA6IChwYXRoID09PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBj
b21wbGV0ZWQ6IHRydWUgfSA6IHt9O1xuXHRcdH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0
aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudCA9IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3Ms
IHsgY29tcGxldGVkOiBmYWxzZSB9KS5sZW5ndGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291
bnQgPSB0aGlzLnRvZG9zLmxlbmd0aCAtIHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRc
dFx0dGhpcy4kc2NvcGUuYWxsQ2hlY2tlZCA9ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxu
XHRcdFx0dGhpcy50b2RvU3RvcmFnZS5wdXQodGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRk
VG9kbygpIHtcblx0XHRcdHZhciBuZXdUb2RvIDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9k
by50cmltKCk7XG5cdFx0XHRpZiAoIW5ld1RvZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtc
blx0XHRcdH1cblxuXHRcdFx0dGhpcy50b2Rvcy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBm
YWxzZSkpO1xuXHRcdFx0dGhpcy4kc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVk
aXRUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9k
byA9IHRvZG9JdGVtO1xuXG5cdFx0XHQvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNl
IGVkaXRpbmcgaXMgY2FuY2VsbGVkLlxuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0g
YW5ndWxhci5leHRlbmQoe30sIHRvZG9JdGVtKTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9m
KHRvZG9JdGVtKV0gPSB0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29w
ZS5yZXZlcnRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRv
ZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRo
aXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2
ZXJ0ZWQpIHtcblx0XHRcdFx0Ly8gVG9kbyBlZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZl
LlxuXHRcdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtc
blx0XHRcdH1cblx0XHRcdHRvZG9JdGVtLnRpdGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xu
XHRcdFx0aWYgKCF0b2RvSXRlbS50aXRsZSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9k
b0l0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9J
dGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zLnNwbGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0
ZW0pLCAxKTtcblx0XHR9XG5cblx0XHRjbGVhckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNj
b3BlLnRvZG9zID0gdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0
b2RvSXRlbS5jb21wbGV0ZWQpO1xuXHRcdH1cblxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29s
ZWFuKSB7XG5cdFx0XHR0aGlzLnRvZG9zLmZvckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5j
b21wbGV0ZWQgPSBjb21wbGV0ZWQ7IH0pO1xuXHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlv
bi50c1xuXG4vKipcbiAqIFRoZSBtYWluIFRvZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlw
ZSB7YW5ndWxhci5Nb2R1bGV9XG4gKi9cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3Qn
O1xuXG4gICAgdmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAg
ICAgICAgICAgLmNvbnRyb2xsZXIoJ3RvZG9DdHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAu
ZGlyZWN0aXZlKCd0b2RvQmx1cicsIHRvZG9CbHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgn
dG9kb0ZvY3VzJywgdG9kb0ZvY3VzKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2Fw
ZScsIHRvZG9Fc2NhcGUpXG4gICAgICAgICAgICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2Rv
U3RvcmFnZSk7XG59XG4iCittb2R1bGUuZXhwb3J0cyA9ICIvLyBsaWJzL2pxdWVyeS9qcXVlcnku
ZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNl
XG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElTIFBST1ZJREVEICpBUyBJUyogQkFT
SVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1Q
TElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXG5c
blNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlwaW5nIGZvciB0aGUgalF1ZXJ5IGxp
YnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFByb2plY3Q6IGh0dHA6Ly9qcXVlcnku
Y29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtvdiA8aHR0cHM6Ly9naXRodWIuY29t
L2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3RlciA8aHR0cHM6Ly9naXRodWIuY29t
L2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxlaSBHb21lcyA8aHR0cHM6Ly9naXRo
dWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS90YXNv
aWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxodHRwczovL2dpdGh1Yi5jb20vc2Vh
bnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9HdXV6PiwgS2VsbHkgU3Vt
bWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxpbj4sIEJhc2FyYXQgQWxpIFN5ZWQg
PGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9sYXMgV29sdmVyc29uIDxodHRwczov
L2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vyb25lIDxodHRwczovL2dpdGh1Yi5j
b20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9BbmRy
ZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qYW1l
c2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9naXRodWIuY29tL3NlaWtpY2hpPiwg
QmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluamFja21hbj4sIFBv
dWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkzMjk0PiwgSm9zaCBTdHJvYmwgPGh0
dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBSZWlsbHkgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9i
b3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBB
SkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgQUpBWCByZXF1ZXN0XG4qL1xuaW50
ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQg
dHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0IHRlbGxzIHRoZSBzZXJ2ZXIgd2hh
dCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGluIHJldHVybi4gSWYgdGhlIGFjY2Vw
dHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNv
IG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxuICAgICAqL1xuICAgIGFjY2VwdHM/
OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgYWxsIHJlcXVlc3RzIGFyZSBzZW50
IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCkuIElm
IHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2Uu
IENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6IFwianNvbnBcIiByZXF1ZXN0cyBk
byBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE5vdGUgdGhhdCBzeW5jaHJvbm91
cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUgYnJvd3NlciwgZGlzYWJsaW5nIGFu
eSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQXMgb2YgalF1ZXJ5IDEuOCwg
dGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAoJC5EZWZlcnJlZCkgaXMgZGVwcmVj
YXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9yL2NvbXBsZXRlIGNhbGxiYWNrIG9w
dGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIG9mIHRoZSBqcVhIUiBv
YmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRlcHJlY2F0ZWQganFYSFIuc3VjY2Vz
cygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIHBy
ZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRo
ZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGJlZm9yZSBp
dCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhlYWRlcnMsIGV0Yy4gVGhlIGpxWEhS
IGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzLiBUaGlzIGlzIGFu
IEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbiB3
aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGJlZm9yZVNlbmQg
b3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgcmVxdWVzdC5c
biAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpRdWVyeVhIUiwgc2V0dGluZ3M6IEpR
dWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gZmFsc2Us
IGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0byBiZSBjYWNoZWQgYnkgdGhlIGJy
b3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ugd2lsbCBvbmx5IHdvcmsgY29ycmVj
dGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3b3JrcyBieSBhcHBlbmRpbmcgXCJf
PXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJzLiBUaGUgcGFyYW1ldGVyIGlzIG5v
dCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3RzLCBleGNlcHQgaW4gSUU4IHdoZW4g
YSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBi
eSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBmaW5pc2hlcyAoYWZ0ZXIg
c3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCkuIFRoZSBmdW5jdGlvbiBn
ZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1M
SFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0ZWdvcml6aW5nIHRoZSBzdGF0dXMg
b2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1vZGlmaWVkXCIsIFwiZXJyb3JcIiwg
XCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJlcnJvclwiKS4gQXMgb2YgalF1ZXJ5
IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlv
bnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4
IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0
YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBzdHJpbmcv
cmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJtaW5lIGhvdyBqUXVlcnkgd2lsbCBw
YXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50IHR5cGUuICh2ZXJzaW9uIGFkZGVk
OiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
biAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3VyY2UgY29kZSwgYWpheCdzIG9wdGlv
biBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0IHRvIFwiZmFsc2VcIlxuICAgIC8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzc0
MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRhIHRvIHRoZSBzZXJ2ZXIsIHVzZSB0
aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJs
ZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBmaW5lIGZvciBtb3N0IGNhc2VzLiBJ
ZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10eXBlIHRvICQuYWpheCgpLCB0aGVu
IGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2ZW4gaWYgbm8gZGF0YSBpcyBzZW50
KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0aW9uIGRpY3RhdGVzIHRoYXQgdGhl
IGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5nIGFub3RoZXIgY2hhcnNldCB3aWxs
IG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhlIGVuY29kaW5nLlxuICAgICAqL1xu
ICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRoaXMgb2JqZWN0IHdpbGwg
YmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxhdGVkIGNhbGxiYWNrcy4gQnkgZGVm
YXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgYWpheCBz
ZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0aW5ncyBtZXJnZWQgd2l0aCB0aGUg
c2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICovXG4gICAgY29udGV4dD86IGFueTtc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhVHlwZS10by1kYXRhVHlw
ZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUgcmVzcG9uc2UuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRvIGZvcmNlIGEgY3Jvc3NEb21haW4g
cmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUgZG9tYWluLCBzZXQgdGhlIHZhbHVl
IG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgc2VydmVy
LXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4uICh2ZXJzaW9uIGFkZGVkOiAxLjUp
XG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERh
dGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBjb252ZXJ0ZWQgdG8gYSBxdWVyeSBz
dHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdzIGFwcGVuZGVkIHRvIHRoZSB1cmwg
Zm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9wdGlvbiB0byBwcmV2ZW50IHRoaXMg
YXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJlIEtleS9WYWx1ZSBwYWlycy4gSWYg
dmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVzIG11bHRpcGxlIHZhbHVlcyB3aXRo
IHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdHJhZGl0aW9uYWwgc2V0dGluZyAo
ZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRhPzogYW55O1xuICAgIC8qKlxuICAg
ICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUgdGhlIHJhdyByZXNwb25zZSBkYXRh
IG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmlsdGVyaW5nIGZ1bmN0aW9uIHRvIHNh
bml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1cm4gdGhlIHNhbml0aXplZCBkYXRh
LiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzOiBUaGUgcmF3IGRhdGEgcmV0dXJu
ZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBlJyBwYXJhbWV0ZXIuXG4gICAgICov
XG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFueSk6IGFueTtcbiAgICAvKipcbiAg
ICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4cGVjdGluZyBiYWNrIGZyb20gdGhl
IHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVyeSB3aWxsIHRyeSB0byBpbmZlciBp
dCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNwb25zZSAoYW4gWE1MIE1JTUUgdHlw
ZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5aWVsZCBhIEphdmFTY3JpcHQgb2Jq
ZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0LCBhbmQgYW55dGhpbmcg
ZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5cbiAgICAgKi9cbiAgICBkYXRhVHlw
ZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0
aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRocmVlIGFyZ3VtZW50czog
VGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QsIGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1cnJlZCBhbmQgYW4gb3B0
aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3VycmVkLiBQb3NzaWJsZSB2YWx1ZXMg
Zm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVsbCkgYXJlIFwidGltZW91dFwiLCBc
ImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJyb3JcIi4gV2hlbiBhbiBIVFRQIGVy
cm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhlIHRleHR1YWwgcG9ydGlvbiBvZiB0
aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRcIiBvciBcIkludGVybmFsIFNlcnZl
ciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJyb3Igc2V0dGluZyBjYW4gYWNjZXB0
IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0
dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3IgY3Jvc3MtZG9tYWluIHNj
cmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3RzLiBUaGlzIGlzIGFuIEFqYXggRXZl
bnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBz
dHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVy
IHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxlcnMgZm9yIHRoaXMgcmVxdWVzdC4g
VGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRvIHByZXZlbnQgdGhlIGdsb2JhbCBo
YW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBmcm9tIGJlaW5nIHRyaWdnZXJlZC4g
VGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgQWpheCBFdmVudHMuXG4gICAgICov
XG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgYWRk
aXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNlbmQgYWxvbmcgd2l0aCByZXF1ZXN0
cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0LiBUaGUgaGVhZGVyIFgtUmVxdWVz
dGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBhZGRlZCwgYnV0IGl0cyBkZWZhdWx0
IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGhlcmUuIFZhbHVlcyBpbiB0aGUg
aGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0dGVuIGZyb20gd2l0aGluIHRoZSBi
ZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGhl
YWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0
aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFu
Z2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyB0aGUg
TGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UsIGlnbm9yaW5nIHRo
ZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlxdWUgYWxzbyBjaGVja3MgdGhlICdl
dGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRjaCB1bm1vZGlmaWVkIGRhdGEuXG4g
ICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxsb3cg
dGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2duaXplZCBhcyBcImxvY2FsLFwiIChl
LmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkgZG9lcyBub3QgcmVjb2duaXplIGl0
IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIGN1cnJlbnRs
eSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVuc2lvbiwgYW5kIHdpZGdldC4gSWYg
dGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVk
IHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLiAodmVyc2lvbiBhZGRl
ZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAg
ICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgaW4gYSBqc29ucCByZXF1ZXN0
LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICdjYWxsYmFjaycgaW4gdGhlICdj
YWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgaW4gdGhlIHVybC4gU28ge2pzb25w
OidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25KU09OUExvYWQ9PycgcGFzc2VkIHRv
IHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRpbmcgdGhlIGpzb25wIG9wdGlvbiB0
byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcgdGhlIFwiP2NhbGxiYWNrXCIgc3Ry
aW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2UgXCI9P1wiIGZvciB0cmFuc2Zvcm1h
dGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28gZXhwbGljaXRseSBzZXQgdGhlIGpz
b25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsganNvbnA6IGZhbHNlLCBqc29ucENh
bGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9cbiAgICBqc29ucD86IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGZvciBh
IEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHJh
bmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGpRdWVyeS4gSXQgaXMgcHJlZmVy
YWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgYXMgaXQnbGwgbWFrZSBp
dCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQgcHJvdmlkZSBjYWxsYmFja3MgYW5k
IGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3BlY2lmeSB0aGUgY2FsbGJhY2sgd2hl
biB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIgY2FjaGluZyBvZiBHRVQgcmVxdWVz
dHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1c2UgYSBmdW5jdGlvbiBmb3IgdGhp
cyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBvZiBqc29ucENhbGxiYWNrIGlzIHNl
dCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uXG4gICAgICovXG4gICAganNv
bnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIG1pbWUgdHlwZSB0byBvdmVycmlk
ZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAg
IG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgcGFzc3dvcmQgdG8gYmUgdXNl
ZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhl
bnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQgaW4gdG8gdGhlIGRhdGEgb3B0aW9u
IGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5nIG90aGVyIHRoYW4gYSBzdHJpbmcp
IHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIGEgcXVlcnkgc3RyaW5nLCBm
aXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBcImFwcGxpY2F0aW9uL3gtd3d3LWZv
cm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgRE9NRG9jdW1lbnQsIG9yIG90
aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLlxuICAgICAq
L1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGxp
ZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMgdXNlZCAoZS5nLiwgY3Jvc3MtZG9t
YWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2NyaXB0XCIgZGF0YVR5cGUgYW5kIFwi
R0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIG9uIHRoZSBzY3JpcHQgdGFn
IHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUgY2hhcmFjdGVyIHNldCBvbiB0aGUg
bG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBvbiB0aGUgcmVtb3RlIHNjcmlw
dC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5kIGZ1bmN0aW9ucyB0byBiZSBjYWxs
ZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUuIGYgdGhlIHJl
cXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2RlIGZ1bmN0aW9ucyB0YWtlIHRoZSBz
YW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2s7IGlmIGl0IHJlc3VsdHMgaW4g
YW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0aGV5IHRha2UgdGhlIHNhbWUgcGFy
YW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAg
ICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxu
ICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBU
aGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1lbnRzOiBUaGUgZGF0YSByZXR1cm5l
ZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGRhdGFUeXBlIHBh
cmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3RhdHVzOyBhbmQgdGhlIGpxWEhSIChp
biBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QuIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVh
Y2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50
LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAgICAgKiBTZXQgYSB0aW1lb3V0IChp
biBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhpcyB3aWxsIG92ZXJyaWRlIGFueSBn
bG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgpLiBUaGUgdGltZW91dCBwZXJpb2Qg
c3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwgaXMgbWFkZTsgaWYgc2V2ZXJhbCBv
dGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBicm93c2VyIGhhcyBubyBjb25u
ZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHJlcXVlc3QgdG8gdGltZSBv
dXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkgMS40LnggYW5kIGJlbG93LCB0aGUg
WE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiB0aGUg
cmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2JqZWN0IG1lbWJlcnMgbWF5IHRocm93
IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHksIHNjcmlwdCBhbmQgSlNPTlAgcmVx
dWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVvdXQ7IHRoZSBzY3JpcHQgd2lsbCBy
dW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAgICAgKi9c
biAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUg
aWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBzdHlsZSBvZiBwYXJhbSBzZXJpYWxp
emF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwiUE9TVFwiIG9yIFwiR0VUXCIpLCBk
ZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAgcmVxdWVzdCBtZXRob2RzLCBzdWNo
IGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2VkIGhlcmUsIGJ1dCB0aGV5IGFyZSBu
b3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAgKi9cbiAgICB0eXBlPzogc3RyaW5n
O1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVybD86IHN0cmluZztcbiAgICAvKipc
biAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNw
b25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xu
ICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZvciBjcmVh
dGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZhdWx0cyB0byB0aGUgQWN0aXZlWE9i
amVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0cFJlcXVlc3Qgb3RoZXJ3aXNlLiBP
dmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGZvciBYTUxIdHRwUmVx
dWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3RvcnkuXG4gICAgICovXG4gICAgeGhyPzog
YW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBmaWVsZE5hbWUtZmllbGRWYWx1ZSBw
YWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0LiBGb3IgZXhhbXBsZSwgeW91IGNh
biB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0cnVlIGZvciBjcm9zcy1kb21haW4g
cmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0aGUgd2l0aENyZWRlbnRpYWxzIHBy
b3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0aXZlIFhIUiBhbmQgdGh1cyBDT1JT
IHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUgdGhpcyBmbGFnLiBGb3IgdGhpcyBy
ZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41LjErIHNob3VsZCB5b3UgcmVxdWly
ZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgeGhy
RmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5cbi8qXG4gICAgSW50ZXJmYWNl
IGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVhIUiBleHRlbmRzIFhN
TEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xuICAgIG92ZXJyaWRlTWltZVR5cGUo
bWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChzdGF0dXNUZXh0Pzogc3RyaW5nKTog
dm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgY2FsbGJhY2tcbiov
XG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFkZCguLi5jYWxsYmFja3M6IGFueVtd
KTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVtcHR5KCk6IGFueTtcbiAgICBmaXJl
KC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmlyZWQoKTogYm9vbGVhbjtcbiAgICBm
aXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIGhhcyhjYWxs
YmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFueTtcbiAgICBsb2NrZWQoKTogYm9v
bGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbn1cblxuLypcbiAg
ICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Agd2l0aCBub24talF1ZXJ5IHByb21p
c2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+IHtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4g
VSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFs
dWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFu
eSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxs
OiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86
IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgcHJvbWlz
ZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4g
ICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlz
Q2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6
IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFj
a3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJh
Y2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tz
OiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBh
bnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIC8vIERlcHJlY2F0ZWQgLSBnaXZl
biBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBmYWls
RmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0ZpbHRlcj86ICh4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNz
PzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAg
ICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxV
Piwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4u
cHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFu
eVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG5c
biAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNrXG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlb
XSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpR
dWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtd
KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55
W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBK
UXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlb
XSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55
W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIElu
dGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQcm9taXNlPFQ+IHtcbiAg
ICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXND
YWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tz
OiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxi
YWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2Fs
bGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3ND
YWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBub3RpZnkoLi4uYXJn
czogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBub3RpZnlXaXRoKGNvbnRleHQ6IGFu
eSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlamVjdCguLi5h
cmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlamVjdFdpdGgoY29udGV4dDog
YW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVzb2x2ZSh2
YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlKC4uLmFyZ3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdz
OiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0YXRlKCk6IHN0cmluZztcblxuICAg
IHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbn1cblxuLypcbiAgICBJ
bnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2YgdGhlIFczQyBldmVudCBvYmplY3Rc
biovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBFdmVudCB7XG4g
ICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBFbGVtZW50O1xuICAgIGlzRGVmYXVs
dFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRpYXRlUHJvcG9nYXRpb25TdG9wcGVk
KCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBu
YW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVsdCgpOiBhbnk7XG4gICAgcmVsYXRl
ZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtcbiAgICBzdG9wSW1tZWRpYXRlUHJv
cGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBwYWdl
WDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgd2hpY2g6IG51bWJlcjtcbiAgICBt
ZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCBl
eHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgYWx0S2V5OiBib29sZWFuO1xuICAg
IGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbiAgICBzaGlmdEtleTog
Ym9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QgZXh0ZW5kcyBK
UXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246IG51bWJlcjtcbiAgICBjbGllbnRY
OiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAg
ICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVy
O1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5ZOiBudW1iZXI7XG59XG5cbmludGVy
ZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qg
e1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVtYmVyO1xuICAgIGtleTogYW55O1xu
ICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBvcFN0YXRlRXZlbnRP
YmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAgIG9yaWdpbmFsRXZlbnQ6
IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVlcnlFdmVudE9iamVjdCBleHRlbmRz
IEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCwgSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3QsIEpRdWVyeVBvcFN0YXRlRXZlbnRP
YmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2YgcHJvcGVydGllcyBvZiB0aGUgY3Vy
cmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5U3VwcG9ydCB7XG4gICAgYWpheD86
IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xuICAgIGNoYW5nZUJ1YmJsZXM/OiBi
b29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xuICAgIGNoZWNrT24/OiBib29sZWFu
O1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0PzogYm9vbGVhbjtcbiAgICBocmVm
Tm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlhbGl6ZT86IGJvb2xlYW47XG4gICAg
bGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVDaGVja2VkPzogYm9vbGVh
bjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAgIG9wYWNpdHk/OiBib29sZWFuO1xu
ICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRTZWxlY3RlZD86IGJvb2xlYW47XG4g
ICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5bGU/OiBib29sZWFuO1xuICAgIHN1
Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5PzogYm9vbGVhbjtcbn1cblxuaW50ZXJm
YWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBzdHJpbmc7XG4gICAgKG9iajogYW55
LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJm
YWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMgKHdpdGggJC5FdmVudCkuIEl0IGlz
XG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBpbmxpbmUgaW4gSlF1ZXJ5U3RhdGlj
IHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1Y3Rpb24gZnVuY3Rpb24gd2l0aCBz
cGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lmaWMgZXZlbnQgb2JqZWN0cy5cbiAq
L1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ige1xuICAgIChuYW1lOiBzdHJpbmcs
IGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xuICAgIG5ldyAobmFt
ZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbn1c
blxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3BlY2lmeSBlYXNpbmcgZnVuY3Rpb25z
LlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAgICBsaW5lYXIocDogbnVtYmVyKTog
bnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLypcbiAgICBTdGF0
aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5kIGpRdWVyeSB0aGVtc2VsdmVzKVxu
Ki9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBh
biBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFq
YXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBz
ZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgo
c2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAg
KiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3Zh
bHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBh
cmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5h
amF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDogc3RyaW5nLCBzZXR0aW5ncz86IEpR
dWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBj
dXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBlYWNo
IHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFqYXgo
KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMgQW4gb3B0aW9uYWwgc3RyaW5nIGNv
bnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGRhdGFUeXBlc1xuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBB
amF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoZGF0YVR5cGVzOiBzdHJp
bmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdz
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEhhbmRs
ZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBl
YWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFq
YXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVm
YXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQ
cmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0
dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG5cbiAgICBhamF4U2V0dGlu
Z3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipcbiAgICAgICogU2V0IGRlZmF1bHQg
dmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRzIHVzZSBpcyBub3QgcmVjb21tZW5k
ZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0IG9mIGtleS92YWx1ZSBw
YWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4IHJlcXVlc3QuIEFsbCBvcHRpb25z
IGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNldHVwKG9wdGlvbnM6IEpRdWVyeUFq
YXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4
ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBU
aGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxs
aWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBn
ZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
R0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3
aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERl
ZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4g
ICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcg
dGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFy
YW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJl
cXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEg
ZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1s
LCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywg
ZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBp
ZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29k
ZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2gg
dGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBv
ciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAg
ICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQg
aWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmlu
ZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAq
IExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBmaWxlIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0ZSBpdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3JpcHQ6IHN0cmluZywgdGV4dFN0YXR1
czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG5cbiAgICBw
YXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
dXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBz
ZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBl
eGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMg
cHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0
OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAg
ICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcp
OiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0
cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAg
ICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRv
IHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNh
bGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
IFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhh
dCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVk
IGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwg
c2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRh
PzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhI
UjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAg
IC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1Qg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRh
VHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBA
cGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIu
IERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRt
bCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vz
cz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEEg
bXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIHBvd2Vy
ZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgZmxhZ3MgdGhhdCBjaGFu
Z2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4gICAgICovXG4gICAgQ2FsbGJhY2tz
KGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5cbiAgICAvKipcbiAgICAgKiBIb2xk
cyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVyeSdzIHJlYWR5IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlYWR5IGhvbGQg
aXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAgICovXG4gICAgaG9sZFJlYWR5KGhv
bGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBh
bnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgKG9iamVj
dDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSlF1ZXJ5O1xu
ICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAoZnVuYzogRnVuY3Rpb24pOiBKUXVl
cnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAgICAoKTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250cm9sIG9mIHRoZSAkIHZhcmlhYmxl
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBBIEJvb2xlYW4gaW5kaWNhdGluZyB3
aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxlcyBmcm9tIHRoZSBnbG9iYWwgc2Nv
cGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAgKi9cbiAgICBub0NvbmZsaWN0KHJl
bW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBh
IHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBv
YmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9u
b3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUg
RGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xu
ICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPltdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRl
IGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5
IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0
cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4u
ZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3Zp
ZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBt
b3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3lu
Y2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3Ig
bW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAg
ICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
blxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICBjc3NOdW1iZXI6
IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0cmFyeSBkYXRhIGFzc29jaWF0ZWQg
d2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNl
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3Nv
Y2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0
aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgZGF0
YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3Ry
aW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBuYW1l
ZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1l
bnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2Np
YXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhl
IHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVu
dCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBu
YW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVs
ZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1l
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNz
b2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50
KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJp
bmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4g
ICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4g
ICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JD
YWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShlbGVtZW50OiBFbGVtZW50
LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBEZWZlcnJl
ZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5RGVmZXJyZWQ8VD4pID0+IGFueSk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGZ4OiB7IHRpY2s6ICgp
ID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgpID0+IHZvaWQ7IHNwZWVkczogeyBz
bG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBib29sZWFuOyBzdGVwOiBhbnk7IH07
XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnks
IGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgcHJveHkoY29udGV4dDog
YW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuXG4gICAgRXZlbnQ6IEpR
dWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAgICBlcnJvcihtZXNz
YWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZXhwcjogYW55
O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cgd2Ugd2FudCB0byB0eXBlIHRoaXNc
biAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAgIHN1cHBvcnQ6
IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBjb250YWlucyhjb250YWlu
ZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBlYWNoKGNv
bGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IGFueSwgdmFsdWVPZkVsZW1l
bnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29sbGVjdGlvbjogSlF1ZXJ5LCBjYWxs
YmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogSFRNTEVsZW1lbnQp
ID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rpb246IFRbXSwgY2FsbGJhY2s6IChp
bmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IFQpID0+IGFueSk6IGFueTtcblxu
ICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG4gICAgZXh0ZW5k
KGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcblxuICAg
IGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4gICAgZ3JlcDxUPihhcnJheTogVFtd
LCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBib29s
ZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAgaW5BcnJheTxUPih2YWx1ZTogVCwg
YXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xuXG4gICAgaXNBcnJheShv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47
XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNOdW1lcmljKHZhbHVl
OiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xu
ICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1hNTERvYyhub2RlOiBOb2Rl
KTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFueSk6IGFueVtdO1xuXG4gICAgbWFw
PFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5B
cnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChhcnJheTogYW55LCBjYWxsYmFjazog
KGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTogYW55KSA9PiBhbnkpOiBhbnk7XG5c
biAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRbXSk6IFRbXTtcbiAgICBtZXJnZTxU
LFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107XG5cbiAgICBub29wKCk6IGFueTtc
blxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpTT04oanNvbjogc3RyaW5nKTogYW55
O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gWE1MIGRvY3VtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgdG8g
YmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0YTogc3RyaW5nKTogWE1MRG9jdW1l
bnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3
UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZztc
blxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAgICB1bmlxdWUoYXJyOiBhbnlbXSk6
IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gYXJyYXkg
b2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgSFRNTCBzdHJpbmcgdG8g
YmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9NIGVsZW1lbnQgdG8gc2VydmUgYXMg
dGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkXG4g
ICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8g
aW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBzdHJpbmdcbiAgICAgKi9cbiAgICBw
YXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRNTEVsZW1lbnQsIGtlZXBTY3JpcHRz
PzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9uKGVsZW06IGFueSwgcHJvcGVydGll
czogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBlYXNpbmc6IEpRdWVyeUVhc2luZztc
bn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1lbWJlcnNcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBsZXRlKGhhbmRsZXI6IGFueSk6IEpR
dWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNl
dHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFNl
bmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2Vw
dGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0YXJ0KGhhbmRsZXI6ICgpID0+
IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRp
bmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBsb2FkKHVy
bDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFueSk6IEpRdWVyeTtcblxuICAgIHNl
cmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJyYXkoKTogYW55W107XG5cbiAgICAv
LyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lczogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJyZW50Q2xhc3M6IGFueSkgPT4gc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5qcXVlcnkuY29tL2FkZEJhY2svXG4g
ICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuXG4gICAgYXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJp
bmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcs
IGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhdHRy
KG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBi
b29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAgaHRtbChodG1sU3RyaW5nOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDogKGluZGV4OiBudW1iZXIsIG9sZGh0
bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55O1xuICAgIHByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChtYXA6
IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCBmdW5jOiAoaW5k
ZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUNs
YXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAgICByZW1vdmVDbGFzcyhmdW5jOiAo
aW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZVByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b2dnbGVDbGFzcyhjbGFzc05h
bWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKHN3
dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhmdW5jOiAoaW5kZXg6IGFu
eSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHZhbCgpOiBh
bnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB2YWwo
ZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0
IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICov
XG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNl
dCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmlu
ZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1v
cmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAg
KiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9c
biAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBz
ZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9y
IG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4g
dGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24g
b2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMu
XG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBu
dW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZh
bHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5k
ZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBh
cyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1
ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IG51bWJlcik6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQg
b2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFu
IG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBzZXQuXG4gICAgICovXG4gICAgY3Nz
KHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAgIGhlaWdodCgpOiBudW1iZXI7XG4g
ICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KHZhbHVlOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQoKTogbnVtYmVyO1xuICAgIGlubmVy
SGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBpbm5lcldpZHRoKCk6IG51bWJl
cjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXQo
KTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xuICAgIG9mZnNldChjb29yZGluYXRl
czogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAoaW5kZXg6IGFueSwgY29vcmRzOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW4/OiBi
b29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZhbHVlOiBudW1iZXIsIGluY2x1ZGVN
YXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lu
PzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoKHZhbHVlOiBudW1iZXIsIGluY2x1
ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgcG9zaXRpb24oKTogeyB0b3A6IG51
bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xsTGVmdCgpOiBudW1iZXI7XG4gICAg
c2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgc2Nyb2xsVG9wKCk6IG51
bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHdpZHRo
KCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHdpZHRo
KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgoZnVuYzogKGluZGV4OiBhbnksIGhl
aWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEYXRhXG4gICAgY2xlYXJRdWV1
ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBkYXRhKGtleTogc3RyaW5nLCB2
YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuICAgIGRlcXVldWUo
cXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShuYW1lT3JMaXN0
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBwcm9taXNlKHR5cGU/OiBh
bnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIC8vIEVmZmVjdHNc
biAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGNvbXBsZXRlPzog
RnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4g
ICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IHsgZHVyYXRpb24/OiBhbnk7IGVh
c2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsgc3RlcD86IEZ1bmN0aW9uOyBxdWV1
ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0pOiBKUXVlcnk7XG5cbiAgICBkZWxh
eShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBm
YWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVJ
bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVt
YmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwg
b3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgpOiBKUXVlcnk7XG5cbiAgICBoaWRl
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBoaWRlKGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2hv
dyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVVcChk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVVcChkdXJh
dGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxu
ICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0Vu
ZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzog
c3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoc2hvd09ySGlkZTog
Ym9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xuICAgIGJpbmQoZXZlbnRUeXBlOiBz
dHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBl
dmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5k
KGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIGJsdXIoaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJsdXIo
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjaGFu
Z2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNoYW5nZSgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hh
bmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwi
Y2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNsaWNrKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vz
aW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1
c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzaW4oZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywg
dG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgYW5kIGxlYXZlcyB0
aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlckluIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyB0aGUgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91
c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxl
ckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnksIGhhbmRsZXJPdXQ6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMs
IHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0
aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlckluT3V0IEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhl
IGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluT3V0OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwiXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVzc1wiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNz
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5dXBc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXVwKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
a2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChl
dmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91
c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWVudGVyXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50
ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVu
IHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2
ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vt
b3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91dFwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdmVy
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92
ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgb2Zm
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1
Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5c
biAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhl
IG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5k
bGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNs
eSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5c
biAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yPzogc3RyaW5nLCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5k
IG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNr
XCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUg
ZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihl
dmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVy
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qgd2hlcmUgdGhlIHN0cmlu
ZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBoYW5kbGVy
IGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICog
QHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3Jp
Z2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4g
ICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVl
IGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0
IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJhbWV0ZXIgYXJncyBpcyBmb3Igb3B0
aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRyaWdnZXIoKS4gTm90ZSB0aGF0IHRo
ZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBtdXN0IGJl
IG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czog
c3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0LCAuLi5hcmdz
OiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVu
dCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMg
XCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMg
bnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJl
YWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZh
bHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNp
bXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywg
c2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5k
bGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1l
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBl
bGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBv
ciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMg
dGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNz
ZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxu
ICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBh
bnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyBy
ZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9y
IGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0
IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0
byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9j
Y3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBz
ZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0
dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIg
aXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3Jl
IEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwi
IG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5k
bGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVk
IGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0
IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20g
ZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgZGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0
aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxl
bWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9y
IG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2Vz
LCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFy
YW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBv
ZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNl
bGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQg
d2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRo
ZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rp
b24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEg
aGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVj
dXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBl
cyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3du
Lm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRv
IGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJp
Z2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBl
dmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxl
bWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxl
ciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEg
ZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25l
KGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4g
VGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVu
dCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2gg
dGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZl
bnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2Vu
dCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAg
ICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2Vu
ZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVy
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdh
eXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBA
cGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRh
IHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHsgW2tleTog
c3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywgZGF0YT86IGFueSk6IEpRdWVyeTtc
blxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlzIHJlYWR5LlxuICAgICAqL1xuICAg
IHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHJl
c2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3QoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJtaXRcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczog
YW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpOiBK
UXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQ
YXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVuYmluZChldmVudFR5cGU/OiBzdHJp
bmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBmbHM6IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgdW5kZWxlZ2F0ZSgpOiBK
UXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50czogYW55KTogSlF1ZXJ5O1xu
ICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB1bmxvYWQo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAg
ICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3RyaW5nO1xuXG4gICAgZXJyb3IoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFu
eVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10sIG5hbWU6IGFueSwg
YXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNYW5pcHVsYXRpb25cbiAgICBhZnRl
ciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZnRlcihmdW5jOiAoaW5kZXg6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1
ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIGJlZm9y
ZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBiZWZvcmUoZnVuYzogKGluZGV4OiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdpdGhEYXRhQW5kRXZlbnRzPzogYm9v
bGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIGRl
dGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGVtcHR5KCk6IEpRdWVyeTtcblxu
ICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuICAgIGluc2VydEJlZm9yZSh0
YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQoLi4uY29udGVudDogYW55W10pOiBK
UXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlQWxsKHRhcmdldDog
YW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVuYzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiBhbnkpOiBKUXVlcnk7XG4g
ICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtdO1xuXG4gICAgdW53cmFwKCk6IEpR
dWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3Jh
cChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcEFsbCh3cmFw
cGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBJbm5lcih3cmFwcGluZ0VsZW1l
bnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBlYWNoKGZ1bmM6IChpbmRl
eDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBnZXQoaW5kZXg/
OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1iZXI7XG4gICAgaW5kZXgoc2VsZWN0
b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVtZW50OiBhbnkpOiBudW1iZXI7XG5c
biAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgc2VsZWN0b3I6IHN0
cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4OiBudW1iZXJdOiBIVE1MRWxlbWVu
dDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2VsZWN0b3I6IHN0cmluZywgY29udGV4
dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xu
ICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkKG9iajogSlF1ZXJ5KTogSlF1
ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9z
ZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3Ry
aW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KG9iajogSlF1ZXJ5
KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGNsb3Nl
c3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50KTogYW55W107XG5cbiAgICBjb250
ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5O1xuXG4gICAgZXEoaW5kZXg6IG51
bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRl
cihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKG9iajogSlF1ZXJ5KTogSlF1ZXJ5
O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbmQoZWxlbWVu
dDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBm
aXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xuXG4gICAgaXMoc2VsZWN0b3I6IHN0
cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IGJvb2xl
YW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtcbiAgICBpcyhvYmo6IEpRdWVyeSk6
IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxuICAgIG1hcChjYWxsYmFjazogKGlu
ZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG5l
eHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0QWxsKHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0
ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKG9iaj86IEpRdWVyeSwgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgbm90
KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5c
biAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50KHNlbGVjdG9yPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldlVudGls
KHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJldlVu
dGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJl
dlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2li
bGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzbGljZShzdGFydDogbnVt
YmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAvLyBVdGlsaXRpZXNcblxuICAgIHF1
ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKHF1ZXVlTmFtZTogc3Ry
aW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbiAgICBxdWV1ZShuZXdRdWV1
ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xhcmUgbW9kdWxlIFwianF1ZXJ5XCIg
e1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBqUXVlcnk6IEpRdWVyeVN0YXRpYztc
bmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxpYnMvYW5ndWxhci9hbmd1bGFyLmQu
dHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIgSlMgMS4wXG4vLyBQcm9qZWN0OiBo
dHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMgYnk6IERpZWdvIFZpbGFyIDxodHRw
Oi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHVi
LmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuXG5cbmRlY2xhcmUgdmFyIGFuZ3Vs
YXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0IGZvciBwYWlubGVzcyBkZXBlbmRl
bmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAkaW5qZWN0OnN0cmluZ1td
O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBuZyBtb2R1bGUgKGFuZ3VsYXIuanMp
XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1vZHVsZSBuZyB7XG5cbiAgICAvLyBB
bGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNlXG4gICAgaW50ZXJmYWNl
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBhbnk7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRpY1xuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQoY29udGV4dDogYW55LCBmbjogRnVu
Y3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4gICAgICAgIGJvb3RzdHJhcChlbGVt
ZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAg
ICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9kdWxlcz86IGFueVtdKTogYXV0by5J
SW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogRWxlbWVudCwgbW9k
dWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAo
ZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGluYXRpb24/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0aWM7XG4gICAgICAgIGVxdWFscyh2
YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBleHRlbmQoZGVzdGlu
YXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7XG4gICAgICAgIGZvckVhY2gob2Jq
OiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IGFueSwgY29udGV4dD86
IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjogc3RyaW5nKTogYW55O1xuICAgICAg
ICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKG1vZHVsZXM/OiBh
bnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgaXNBcnJheSh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRWxlbWVudCh2YWx1
ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzT2Jq
ZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1N0cmluZyh2YWx1ZTogYW55KTog
Ym9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgLyoqIGNvbnN0cnVj
dCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZpY2lhbCBkb2NzOiBJbnRlcmZhY2Ug
Zm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0XHRzZWU6IGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0Ki9cbiAgICAgICAgbW9kdWxlKFxu
ICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUgeW91IHdhbnQgdG8gY3JlYXRlICov
XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAvKiogbmFtZSBvZiBtb2R1
bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAgIHJlcXVpcmVzPzogc3RyaW5nW10s
XG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6IElNb2R1bGU7XG4gICAgICAgIG5v
b3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0b0pzb24ob2JqOiBhbnksIHByZXR0
eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVyY2FzZShzdHI6IHN0cmluZyk6IHN0
cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgZnVsbDogc3RyaW5nO1xuICAg
ICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbm9yOiBudW1iZXI7XG4gICAg
ICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNvZGVuYW1lOiBzdHJpbmc7XG4gICAg
ICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTW9kdWxlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElNb2R1bGUge1xuICAgICAgICBh
bmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0
aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihvYmplY3Q6IE9iamVjdCk6
IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0
VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9y
bWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhjb25maWdGbjog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZp
Y2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRv
IGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWco
aW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29uc3Rh
bnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgY29uc3RhbnQo
b2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmlu
ZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGNv
bnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10p
OiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVjdCA6IE9iamVjdCk6IElNb2R1bGU7
XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgaW5saW5lQW5u
b3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG9iamVj
dDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZp
Y2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4g
ICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIo
bmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFu
eVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtc
biAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIGlu
bGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGluaXRpYWxpemF0aW9u
RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgc2Vydmlj
ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1
bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICB2
YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAgLy8gUHJvcGVydGllc1xuICAgICAg
ICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBzdHJpbmdbXTtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVz
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdHRyaWJ1dGVzIHtcblx0
Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHNjb3BlZCBhdHRy
aWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8gYmVjYXVzZSB5b3UgaGF2ZSB0byB1
c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9vIGJ1dCBJIGRvbid0IGtub3cgb2Yg
YSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBsaW1pdGVkIHRvIHJldHVy
biBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVtOiBodHRwOi8vc3RhY2tvdmVyZmxv
dy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0cmluZ106IGFueTtcblxuICAgICAg
ICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBw
YXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVu
YWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gZm9y
IHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENsYXNzKGNsYXNzVmFsOiBzdHJpbmcp
OiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZp
ZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZVxuICAgICAgICAvLyBlbGVtZW50
LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJp
Z2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVtb3ZhbC5cbiAgICAgICAgJHJlbW92
ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFNldCBET00gZWxl
bWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFuIGludGVycG9sYXRlZCBhdHRyaWJ1
dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25j
ZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAvLyBmb2xsb3dpbmcgY29tcGlsYXRp
b24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIgdGhlXG4gICAgICAgIC8v
IGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAkb2JzZXJ2ZShuYW1lOiBzdHJp
bmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgLy8gQSBtYXAg
b2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3JtYWxpemVkIG5hbWUuIFRo
aXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVyc2UgbG9va3VwIGZyb20gbm9ybWFs
aXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAgICAgICRhdHRyOiBPYmplY3Q7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRm9ybUNvbnRyb2xsZXJcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOmZvcm0u
Rm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZv
cm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGly
dHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6
IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkYWRkQ29udHJvbChjb250
cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkcmVtb3ZlQ29udHJv
bChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkc2V0RGly
dHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOm5nTW9kZWwuTmdNb2Rl
bENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU5nTW9k
ZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2b2lkO1xuICAgICAgICAkc2V0VmFs
aWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lk
O1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2aWV3VmFsdWUgYW5kIG1vZGVsVmFs
dWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAgIC8vIHR5cGVzIGRvIHdvcmsgYW5k
IGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAkc2V0Vmlld1ZhbHVlKHZhbHVlOiBh
bnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7XG5cbiAgICAgICAgJG1vZGVsVmFs
dWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVsUGFyc2VyW107XG4gICAgICAgICRm
b3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAg
ICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAg
ICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0dGVyIHtcbiAgICAgICAgKHZhbHVl
OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2Nv
cGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29w
ZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU2NvcGUge1xu
ICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiBzdHJpbmcpOiBhbnk7
XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBhbnk7XG5cbiAg
ICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJF
dmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAgICAgICAgJGRpZ2VzdCgpOiB2b2lk
O1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJF
dmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBi
dXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsKGV4cHJl
c3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtcbiAgICAgICAgJGV2YWwoZXhwcmVz
c2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86IE9iamVjdCk6IGFueTtcblxuICAg
ICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGlt
cGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjog
c3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiAoc2NvcGU6IElT
Y29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZSBieSB0
aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lcbiAgICAgICAgJG5ldyhpc29sYXRl
PzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24obmFtZTogc3RyaW5nLCBsaXN0ZW5l
cjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogRnVuY3Rp
b247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86
IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3
YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwg
b2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJv
b2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3Bl
OiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9v
bGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6
IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55
LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0
aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcs
IGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkg
PT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNz
aW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9s
ZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAg
ICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51bWJlcjtcblxuICAgICAgICAvLyBI
aWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5kaW5nczogYW55O1xuICAgICAgICAk
JHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyRXZlbnQge1xuICAg
ICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBjdXJyZW50U2NvcGU6IElTY29wZTtc
biAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogRnVuY3Rpb247
XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gQXZhaWxh
YmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRcbiAgICAgICAgc3RvcFByb3BhZ2F0
aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
V2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElXaW5kb3dT
ZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1bWVudGVkLCBzbyB3ZSBuZWVkIHRv
IGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk/OiBudW1i
ZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNl
bChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rp
b24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4p
OiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6
IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmlsdGVy
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmls
dGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJQ
cm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRmlsdGVyU2Vy
dmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeTogRnVuY3Rpb24pOiBJU2Vy
dmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExv
Y2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYWxlU2Vy
dmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgICAgLy8gVGhlc2UgYXJlIG5vdCBk
b2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIncyBpMThuIGZpbGVzIGZvciBleGVt
cGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0
b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2Ny
aXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55KSA9PiBzdHJpbmc7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAg
REVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBfU0VQOiBzdHJpbmc7XG4gICAgICAg
IFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3JbXTtcbiAgICAgICAgQ1VS
UkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJQ
YXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDogbnVtYmVyO1xuICAgICAgICBtaW5G
cmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJlcjtcbiAgICAgICAgcG9zUHJlOiBz
dHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAgICAgICBuZWdQcmU6IHN0cmluZztc
biAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdTaXplOiBudW1iZXI7XG4gICAgICAg
IGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlRGF0ZVRpbWVG
b3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBTSE9S
VE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRE
QVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5nW107XG4gICAgICAgIG1lZGl1bTog
c3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAgICAgICBmdWxsRGF0ZTogc3RyaW5n
O1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1EYXRlOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1UaW1lOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
TG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2FsbDtcbiAgICAgICAgZXJyb3I6IElM
b2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAgICAgICAgbG9nOiBJTG9nQ2FsbDtc
biAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4gICAgLy8gV2UgZGVmaW5lIHRoaXMg
YXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9wZW4gaXQgbGF0ZXIgZm9yXG4gICAg
Ly8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNlIElMb2dDYWxsIHtcbiAgICAgICAg
KC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElQ
YXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjogc3RyaW5nKTogSUNvbXBpbGVkRXhw
cmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVkRXhwcmVzc2lvbiB7XG4g
ICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcblxuICAgICAgICAvLyBJ
ZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBpcyBnb25uYSBiZSB1c2VkIHNpbmNl
IHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCBjaGVjayB0aGUgcGFyYW1l
dGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0ZW5jeS4gSWYgY29uc3VtZXJcbiAg
ICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNzIHRoZSB1bmRlZmluZWQgdmFsdWUg
ZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6IGFueSwgdmFsdWU6IGFueSk6IGFu
eTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhdGlvblNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9u
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblBy
b3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGV2X2d1
aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJzVXJsKCk6IHN0cmluZztcbiAgICAg
ICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3SGFzaDogc3RyaW5nKTogSUxvY2F0
aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgoKTogc3Ry
aW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90b2NvbCgpOiBzdHJpbmc7XG4gICAg
ICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKCk6IGFueTtc
biAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFyYW1ldGVyVmFsdWU6IGFueSk6IElM
b2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJpbmc7XG4gICAgICAgIHVybCh1cmw6
IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2Nh
dGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGhhc2hQcmVm
aXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHByZWZpeDogc3RyaW5nKTogSUxvY2F0
aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBib29sZWFuO1xuXG4gICAgICAgIC8v
IERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVyIGlzIHN0cmluZywgYnV0XG4gICAg
ICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJvb2xlYW4sIHdoaWNoIG1ha2VzIG1v
cmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHRvZ2dsZXJcbiAgICAgICAgaHRt
bDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50U2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9jdW1lbnRcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2VydmljZSBleHRlbmRzIERvY3VtZW50
IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFeGNlcHRpb25IYW5kbGVyU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZXhjZXB0
aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRXhjZXB0
aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0aW9uOiBFcnJvciwgY2F1c2U/OiBz
dHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJv
b3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7fVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVFT
ZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJvbWlzZTxhbnk+W10pOiBJUHJvbWlz
ZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZlcnJlZDxUPjtcbiAgICAgICAgcmVq
ZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xuICAgICAgICB3aGVuPFQ+KHZhbHVl
OiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElQcm9taXNlPFQ+IHtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQp
ID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNl
VmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjog
YW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHBy
b21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21p
c2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVh
c29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xu
ICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElQcm9t
aXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+
KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCk6IElQcm9taXNlPFRSZXN1bHQ+
O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxseUNhbGxiYWNrOiAoKT0+YW55KTpJ
UHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSURlZmVycmVkPFQ+IHtc
biAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xuICAgICAgICByZWplY3QocmVhc29u
PzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRlPzphbnkpOiB2b2lkO1xuICAgICAg
ICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xuICAgICAgICAoKTogdm9pZDtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZp
Y2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Nyb2xsaW5nKCk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ2FjaGVGYWN0b3J5U2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY2FjaGVGYWN0b3J5
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDYWNoZUZhY3RvcnlTZXJ2
aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUgb3B0aW9uc01hcCB0byBoYXZlIHRo
ZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGl0J3MgdGhlIE9OTFkg
b3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvZGF5LCBhIGNvbnN1bWVy
XG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGFzc29jaWF0ZSBzb21lIG90aGVy
IG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgICAgLy8oY2FjaGVJZDogc3RyaW5n
LCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogQ2FjaGVPYmplY3Q7XG4gICAg
ICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0p
OiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9kcyBiZWxsb3cgYXJlIG5vdCBkb2N1
bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAgICBnZXQgKGNhY2hlSWQ6IHN0cmlu
Zyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNhY2hlT2JqZWN0IHtc
biAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAg
c2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3QgZ2FyYW50ZWVkIHRvIGhhdmUsIHNp
bmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAgICAgICAgICAgLy9jYXBhY2l0eTog
bnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5OiBzdHJpbmcsIHZhbHVlPzogYW55
KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6IGFueTtcbiAgICAgICAgcmVtb3Zl
KGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlQWxsKCk6IHZvaWQ7XG4gICAgICAg
IGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50OiBzdHJpbmcsIHRyYW5zY2x1ZGU/
OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBs
YXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCwgdHJhbnNjbHVk
ZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVt
cGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBKUXVlcnksIHRyYW5zY2x1
ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRl
bXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZVBy
b3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1l
OiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSUNvbXBpbGVQcm92aWRlcjtc
blxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBpcyB0aGVyZS4uLlxuICAgICAgICBk
aXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBpbGVQcm92aWRlcjtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uIHtcbiAgICAgICAgLy8gTGV0
J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4ncyBzaWduYXR1cmVcbiAgICAgICAg
KHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xvbmVkRWxlbWVudD86IEpRdWVyeSwg
c2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyU2VydmljZSB7XG4gICAgICAgIC8v
IEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc3RhdGUgdGhpcywgbG9jYWxzIGFy
ZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9j
YWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxlck5hbWU6IHN0cmluZywgbG9jYWxz
PzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29udHJvbGxlclByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmlu
ZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgIHJlZ2lz
dGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6
IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBTZXJ2aWNlIHtcbiAgICAg
ICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3QgYmUgcHJvdmlkZWQuLi5cbiAgICAg
ICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAg
Z2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0
dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/
OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAganNvbnAodXJsOiBzdHJpbmcsIFJl
cXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcG9zdCh1cmw6
IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZp
ZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQgaXQgaXMgZG9jdW1lbnRlZCBhcyBw
dWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0czogYW55W107XG4gICAgfVxuXG4g
ICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAgIC8vIFNvbWUgb3BldGlvbnMgbWln
aHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3QuXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwI1VzYWdlIGZvciBvcHRpb25z
IGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVzdENvbmZpZyB7XG4gICAgICAgIG1l
dGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgcGFyYW1zPzogYW55
O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24gc3RydWN0dXJlLi4uICBwZXJoYXBz
IHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxuICAgICAgICBoZWFkZXJzPzogYW55
O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29s
ZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0aXBsZSB0eXBlcywgc28gbGV0J3Mg
ZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9y
bVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNlPzogYW55O1xuICAgICAg
ICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNlXG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAgICAgKGRhdGE6IFQsIHN0YXR1czog
bnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmcsIGNvbmZpZzog
SVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBUO1xuICAgICAgICBzdGF0dXM/OiBu
dW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7
XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHN1Y2Nlc3Mo
Y2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAg
ICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21p
c2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6
IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzog
KHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8
VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9u
c2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJy
b3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFu
eSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb3Zp
ZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVz
dENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICAgICAgcmVzcG9uc2VJ
bnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8g
dXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAgICAgIC8vIFhYWCBQZXJoYXBzIGRl
ZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAobWV0aG9kOiBz
dHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uLCBoZWFk
ZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuKTog
dm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnBvbGF0
ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGlu
dGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRp
bnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4dDogc3RyaW5nLCBtdXN0SGF2ZUV4
cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25GdW5jdGlvbjtcbiAgICAgICAgZW5k
U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uIHtcbiAgICAgICAgKGNvbnRl
eHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgc3RhcnRTeW1ib2woKTog
c3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRl
UHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIGVuZFN5bWJv
bCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNoZVNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRlbXBsYXRlQ2FjaGVcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlIGV4dGVu
ZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290
U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RT
Y29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpbnRlcmZhY2UgSVNDRVNlcnZp
Y2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFu
eTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEh0
bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSnModmFsdWU6IGFueSk6IGFueTtc
blx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVz
dGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2UodHlwZTogc3RyaW5nLCBleHByZXNz
aW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBh
cnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkp
ID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDog
YW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNKcyhleHByZXNzaW9uOiBzdHJp
bmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNSZXNv
dXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkg
PT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6
IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0
QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNSZXNvdXJjZVVybCh2YWx1ZTogYW55
KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRpc0VuYWJsZWQo
KTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFUHJv
dmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VQcm92aWRl
ciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBlbmFibGVkKHZhbHVlOiBib29s
ZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VE
ZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElT
Q0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5
QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxu
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVByb3ZpZGVyXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0
ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlc291cmNlVXJs
QmxvY2tsaXN0KGJsb2NrbGlzdDogYW55W10pOiB2b2lkO1xuICAgICAgICByZXNvdXJjZVVybEFs
bG93bGlzdChhbGxvd2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmVcbiAgICAvLyBhbmQgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3RpdmVcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xuICAgICAgICBjb21waWxlPzpcbiAg
ICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIHRlbXBsYXRlQXR0
cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0cmFuc2NsdWRlOiAoc2NvcGU6IElT
Y29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2b2lkXG4gICAgICAgICAgICApID0+
IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAgICAgICAgY29udHJvbGxlckFzPzog
c3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAgIChzY29wZTogSVNjb3BlLFxuICAg
ICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAgICAgICAgICBpbnN0YW5jZUF0dHJp
YnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29udHJvbGxlcjogYW55XG4gICAgICAg
ICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHByaW9yaXR5
PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAgICAgICAgcmVxdWlyZT86
IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4gICAgICAgIHNjb3BlPzogYW55O1xu
ICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGVVcmw/OiBhbnk7XG4gICAg
ICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJhbnNjbHVkZT86IGFueTtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhbmd1bGFyLmVsZW1lbnRcbiAgICAv
LyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1bGFyIHJldHVybnMgYSBqUXVlcnkg
b2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBsaWtlIGUu
Zy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1
bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF1Z21l
bnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRpYyB7XG4gICAgICAgIChzZWxlY3Rv
cjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVs
ZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiB7fSk6
IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAg
IChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoKTogSUF1Z21lbnRl
ZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeSBleHRlbmRz
IEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywgaG93IHRvIGRlZmluZT9cbiAgICAg
ICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IElBdWdtZW50
ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7XG5cbiAgICAgICAg
Y29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKCk6IGFueTtc
biAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5OiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEob2JqOiB7
IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShr
ZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
ICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
ICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICAgICAgICAgIGFubm90YXRlKGZu
OiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAgYW5ub3RhdGUoaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAgICAgICAgICBnZXQgKG5hbWU6IHN0
cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRlKHR5cGVDb25zdHJ1Y3RvcjogRnVu
Y3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShpbmxpbmVBbm5v
dGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoZnVuYzogRnVu
Y3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgfVxuXG4g
ICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFByb3ZpZGVTZXJ2aWNlXG4gICAgICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRwcm92aWRlXG4gICAg
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJUHJvdmlkZVNlcnZpY2Uge1xu
ICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0IHJldHVybnMgdGhlIHJlZ2lzdGVy
ZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAgIC8vIGNvbnN0YW50KG5hbWU6IHN0
cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJp
bmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICAgICAgZGVjb3JhdG9yKG5h
bWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgICAgICBm
YWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBu
Zy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlu
bGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBuZy5JU2VydmljZVByb3Zp
ZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0
cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQ
cm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBjb25zdHJ1Y3Rvcjog
RnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgdmFsdWUobmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgfVxuXG4g
ICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3Vz
ZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9JdGVtIHtcbiAgICAgICAgY29uc3Ry
dWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgICAgIHB1
YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICkgeyB9XG4gICAgfVxufVxuLy8g
aW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRl
cmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7XG5cdFx0dG9kb3M6IFRvZG9JdGVt
W107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRlZFRvZG86IFRvZG9JdGVtO1xuXHRc
dG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWluaW5nQ291bnQ6IG51bWJlcjtcblx0
XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2VkOiBib29sZWFuO1xuXHRcdHJldmVy
dGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBjb21wbGV0ZWQ/OiBib29sZWFuIH07
XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7XG5cdFx0dm06IFRvZG9DdHJsO1xu
XHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xu
XHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5cdFx0Z2V0ICgpOiBUb2RvSXRlbVtd
O1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1cbn0vLyBkaXJlY3RpdmVzL1RvZG9G
b2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAq
IERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVk
IHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVhdGVzIHRvIHRydWUuXG5c
dCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0OiBuZy5JVGltZW91dFNl
cnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29w
ZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRc
dFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0ZvY3VzLCBuZXd2YWwgPT4ge1xuXHRc
dFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0aW1lb3V0KCgpID0+IGVsZW1lbnRb
MF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9
XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0ID0gWyckdGltZW91dCddO1xuXG59
Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3Ry
aWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0aGF0IGV4ZWN1dGVzIGFuIGV4cHJl
c3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxvc2VzIGZvY3VzLlxuICAg
ICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigpOiBuZy5JRGlyZWN0aXZlIHtcbiAg
ICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxl
bWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVt
ZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvQmx1
cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBl
bGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAg
ICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0
J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkgPSAyNztcblxuXHQvKipcblx0ICog
RGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9kbyBpZiB0aGUgdXNlciBwcmVzc2Vz
IHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Fc2NhcGUoKTogbmcu
SURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29w
ZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0ZWxlbWVu
dC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNv
ZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoYXR0cmlidXRl
cy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdCRzY29w
ZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgna2V5ZG93bicpOyB9KTtc
blx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNlcy9Ub2RvU3RvcmFnZS50c1xuXG5t
b2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIFNlcnZp
Y2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9tIGxvY2FsU3RvcmFnZS5c
biAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3JhZ2UgaW1wbGVtZW50cyBJVG9kb1N0
b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzLXR5cGVzY3Jp
cHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7XG4gICAgICAgICAgICByZXR1cm4g
SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQpIHx8ICdbXScp
O1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBUb2RvSXRlbVtdKSB7XG4gICAgICAg
ICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQsIEpTT04uc3RyaW5naWZ5
KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29udHJvbGxlcnMvVG9kb0N0cmwudHNc
blxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWFp
biBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjpcblx0ICogLSByZXRyaWV2
ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRvZG9TdG9yYWdlIHNlcnZpY2Vcblx0
ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxhdGUgYW5kIHByb3ZpZGVzIGV2ZW50
IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9kb0N0cmwge1xuXG5cdFx0cHJpdmF0
ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmplY3QgYW5ub3RhdGlvbi5cblx0XHQv
LyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNp
ZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3RvclxuXHRcdC8vIGl0IGlzIGJldHRlciB0
byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3RvciwgYmVjYXVzZSB0aGUgcGFyYW1ldGVy
cyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRcdC8vIFNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xuXHRc
dFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0XHRcdCd0b2RvU3RvcmFnZScsXG5c
dFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQvLyBkZXBlbmRlbmNpZXMgYXJlIGlu
amVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0Ly8gY29udHJvbGxlcidzIG5hbWUg
aXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQgc3BlY2lmaWVkIGZyb20gbmctY29u
dHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRcdGNvbnN0cnVjdG9yKFxuXHRcdFx0
cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRwcml2YXRlICRsb2NhdGlvbjogbmcu
SUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9kb1N0b3JhZ2U6IElUb2RvU3RvcmFn
ZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnRvZG9z
ID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7XG5cblx0XHRcdCRzY29wZS5uZXdU
b2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cblx0XHRcdC8vICd2
bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFkZGluZyBhIHJlZmVyZW5jZSB0byB0
aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8vIGZvciBpdHMgbWV0aG9kcyB0byBi
ZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRcdCRzY29wZS52bSA9IHRoaXM7XG5c
blx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdlcyBpbiBzY29wZSwgd2hpY2ggYXJl
IGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8vIGlmIHlvdSBzdWJzY3JpYmUgdG8g
c2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIgdGhhbiB0aGlzIGNvbnRyb2xsZXIs
IG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQkc2NvcGUuJHdhdGNoKCd0b2Rvcycs
ICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRcdCRzY29wZS4kd2F0Y2goJ2xvY2F0
aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0aCkpXG5cblx0XHRcdGlmICgkbG9j
YXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgoJy8nKTtcblx0XHRcdCRzY29wZS5s
b2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRvblBhdGgocGF0aDogc3RyaW5nKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0aCA9PT0gJy9hY3RpdmUnKSA/
XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09ICcvY29tcGxldGVkJykg
P1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307XG5cdFx0fVxuXG5cdFx0b25Ub2Rv
cygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50ID0gdGhpcy5maWx0ZXJGaWx0
ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0aDtcblx0XHRcdHRoaXMu
JHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3RoIC0gdGhpcy4kc2NvcGUucmVtYWlu
aW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVja2VkID0gIXRoaXMuJHNjb3BlLnJl
bWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdlLnB1dCh0aGlzLnRvZG9zKTtcblx0
XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5ld1RvZG8gOiBzdHJpbmcgPSB0aGlz
LiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICghbmV3VG9kby5sZW5ndGgpIHtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZG9zLnB1c2gobmV3IFRvZG9J
dGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRzY29wZS5uZXdUb2RvID0gJyc7XG5c
dFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRz
Y29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRcdC8vIENsb25lIHRoZSBvcmlnaW5h
bCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQuXG5cdFx0XHR0aGlzLiRzY29wZS5v
cmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kb0l0ZW0pO1xuXHRcdH1cblxuXHRc
dHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvc1t0aGlz
LnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbztcblx0
XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRkb25lRWRpdGlu
Zyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSBu
dWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gbnVsbDtcblx0XHRcdGlmICh0
aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBUb2RvIGVkaXRzIHdlcmUgcmV2ZXJ0
ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gbnVsbDtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0ZW0udGl0bGUgPSB0b2RvSXRlbS50
aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRpdGxlKSB7XG5cdFx0XHRcdHRoaXMu
cmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVtb3ZlVG9kbyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3Muc3BsaWNlKHRoaXMudG9kb3Mu
aW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRcdGNsZWFyRG9uZVRvZG9zKCkge1xu
XHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIo
dG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5cdFx0fVxuXG5cdFx0bWFya0FsbChj
b21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9kb3MuZm9yRWFjaCh0b2RvSXRlbSA9
PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsgfSk7XG5cdFx0fVxuXHR9XG5cbn1c
bi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1haW4gVG9kb01WQyBhcHAgbW9kdWxl
LlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAqL1xubW9kdWxlIHRvZG9zIHtcbiAg
ICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9IGFuZ3VsYXIubW9kdWxlKCd0b2Rv
bXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcigndG9kb0N0cmwnLCBUb2RvQ3RybClc
biAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgdG9kb0JsdXIpXG4gICAgICAgICAg
ICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMpXG4gICAgICAgICAgICAuZGlyZWN0
aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAgICAgICAgIC5zZXJ2aWNlKCd0b2Rv
U3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKIAogLyoqKi8gfSksCiAvKiA0MTUgKi8KIC8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSAiLy8g
ICAgIFVuZGVyc2NvcmUuanMgMS44LjNcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xu
Ly8gICAgIChjKSAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJ
bnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBi
ZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24o
KSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBF
c3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4
cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuXG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRo
ZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRl
cnNjb3JlID0gcm9vdC5fO1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQg
bm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBl
LCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3Rv
dHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQg
YWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9
IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGlj
ZSxcbiAgICB0b1N0cmluZyAgICAgICAgID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3du
UHJvcGVydHkgICA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFT
Y3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRv
IHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAg
ICAgID0gQXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5
cyxcbiAgICBuYXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVD
cmVhdGUgICAgICAgPSBPYmplY3QuY3JlYXRlO1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVy
ZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5j
dGlvbigpe307XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2Nv
cmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
aWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5j
ZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9
O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3
aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClg
IEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwg
b2JqZWN0LlxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYg
KHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAg
ICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBf
O1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNp
b24uXG4gIF8uVkVSU0lPTiA9ICcxLjguMyc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhh
dCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAv
LyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4g
b3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVu
Y3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9p
ZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJn
Q291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2Ug
MjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIHZhbHVlLCBvdGhlcik7XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1
cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBm
dW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4g
ICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBj
b2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0
b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1
cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVu
dHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8g
Z2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVt
ZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0
aGVyXG4gIC8vIGlkZW50aXR5LCBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0
Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUs
IGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlk
ZW50aXR5O1xuICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2
YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0
dXJuIF8ubWF0Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9
O1xuICBfLml0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4g
Y2IodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBm
dW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNz
aWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgdW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAg
ICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3Ig
KHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBz
b3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNv
dXJjZSksXG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAg
ICAgaWYgKCF1bmRlZmluZWRPbmx5IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0g
c291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcg
b2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1
bmN0aW9uKHByb3RvdHlwZSkge1xuICAgIGlmICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1
cm4ge307XG4gICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5
cGUpO1xuICAgIEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBu
ZXcgQ3RvcjtcbiAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICB2YXIgcHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5
XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRv
IGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQg
YXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUu
bW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8v
IEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZh
ciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3Ro
ID0gcHJvcGVydHkoJ2xlbmd0aCcpO1xuICB2YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xs
ZWN0aW9uKSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICBy
ZXR1cm4gdHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGgg
PD0gTUFYX0FSUkFZX0lOREVYO1xuICB9O1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4g
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFj
aGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVj
dHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFy
cmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1p
emVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAg
ICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAg
IGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAg
IH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBh
cHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVj
dCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNi
KGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYm
IF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAg
ICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8g
a2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2Jq
W2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0
cztcbiAgfTtcblxuICAvLyBDcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVm
dCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGlt
aXplZCBpdGVyYXRvciBmdW5jdGlvbiBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8g
aW4gdGhlIG1haW4gZnVuY3Rpb24gd2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAg
IGZ1bmN0aW9uIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5n
dGgpIHtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCAr
PSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBp
bmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3Vy
cmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAg
IHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtl
eXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGgg
PSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDog
bGVuZ3RoIC0gMTtcbiAgICAgIC8vIERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25l
IGlzIHByb3ZpZGVkLlxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAg
IG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCAr
PSBkaXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVt
bywga2V5cywgaW5kZXgsIGxlbmd0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiog
YnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5q
ZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3Qg
PSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24g
b2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZv
bGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdo
aWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9
IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIg
a2V5O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRl
eChvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8u
ZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09
IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0
dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNl
ZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJl
ZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3Qp
KSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9
O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3Qg
ZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4
dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBt
YXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBf
LmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRl
ID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShv
YmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0
aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4g
ICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAg
aWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4g
ZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBp
ZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9i
aiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBj
b250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmop
LFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBp
bmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtl
eSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpb
Y3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBy
ZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmpl
Y3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMg
YGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8u
aW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlm
ICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9m
IGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1
cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIElu
dm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0
aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlv
bihtZXRob2QpO1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAg
ICB2YXIgZnVuYyA9IGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1
cm4gZnVuYyA9PSBudWxsID8gZnVuYyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0p
O1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ug
b2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmos
IGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5c
biAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVy
YDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6
dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJl
dHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZl
bmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRo
ZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWly
cy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8u
ZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4
aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBm
dW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZp
bml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7
XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9
IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2
YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAg
cmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAg
aXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5j
dGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQg
fHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAg
ICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVk
O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtc
blxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21w
dXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAg
ICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0g
bnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9i
aik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0
aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCBy
ZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxu
ICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBj
b21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21w
dXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09
PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RD
b21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0
dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhl
IG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1
ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8g
b2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2
YXIgc2h1ZmZsZWQgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFu
ZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBp
bmRleCk7XG4gICAgICBpZiAocmFuZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZm
bGVkW3JhbmRdO1xuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAg
ICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH07XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1
ZXMgZnJvbSBhIGNvbGxlY3Rpb24uXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJl
dHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRg
IGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVu
Y3Rpb24ob2JqLCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAg
ICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJl
dHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8u
c2h1ZmZsZShvYmopLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0
IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0
ZWUuXG4gIF8uc29ydEJ5ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8u
bWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xu
ICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3Jp
dGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29y
dChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xu
ICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAg
ICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8
IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVm
dC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBB
biBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJh
dGlvbnMuXG4gIHZhciBncm91cCA9IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtc
biAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7
XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBH
cm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBz
dHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0
dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQs
IHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5w
dXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIElu
ZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3Jv
dXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVz
IHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZh
bHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3Vu
dHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJp
b24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3Ig
YSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5
ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJl
c3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xu
XG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRl
cmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1
cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xu
ICAgIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtc
biAgICByZXR1cm4gXy52YWx1ZXMob2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJl
ciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xu
ICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9i
aikgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0
IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0
aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFs
bCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9u
KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBr
ZXksIG9iaikgPyBwYXNzIDogZmFpbCkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJu
IFtwYXNzLCBmYWlsXTtcbiAgfTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0t
LS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNz
aW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJy
YXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAg
Ly8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0g
Xy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51
bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFy
cmF5WzBdO1xuICAgIHJldHVybiBfLmluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xu
ICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhl
IGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4g
UGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJy
YXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwg
biwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwg
YXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4g
IC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwg
cmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0g
ZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVy
biB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5
Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5
Lmxlbmd0aCAtIG4pKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBm
aXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4g
IC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFu
ICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5c
biAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7
XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBu
KTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXku
XG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFy
cmF5LCBfLmlkZW50aXR5KTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBv
ZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rp
b24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwgc3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQg
PSBbXSwgaWR4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGgg
PSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9
IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZh
bHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJl
bnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxs
b3cpIHZhbHVlID0gZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFy
IGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVu
O1xuICAgICAgICB3aGlsZSAoaiA8IGxlbikge1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2
YWx1ZVtqKytdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAg
ICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0
cHV0O1xuICB9O1xuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZl
bHkgKGJ5IGRlZmF1bHQpLCBvciBqdXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rp
b24oYXJyYXksIHNoYWxsb3cpIHtcbiAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywg
ZmFsc2UpO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQg
ZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBm
dW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVl
IHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVl
biBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGht
LlxuICAvLyBBbGlhc2VkIGFzIGB1bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0
aW9uKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNC
b29sZWFuKGlzU29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRl
cmF0ZWUgPSBpc1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlm
IChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2
YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRl
cmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4g
ICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xu
ICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4g
ICAgICAgIGlmICghXy5jb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVu
LnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAg
fVxuICAgICAgfSBlbHNlIGlmICghXy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAg
ICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7
XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjog
ZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJy
YXlzLlxuICBfLnVuaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVu
KGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkg
dGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFz
c2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAg
IHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7
XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRh
aW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBh
cmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwg
aXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3Vs
dC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRh
a2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVy
IGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJz
dCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICB2YXIgcmVzdCA9IGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICBy
ZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5j
b250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVy
IG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFy
ZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAg
ICByZXR1cm4gXy51bnppcChhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2Yg
Xy56aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8g
ZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0
TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxu
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAg
IHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNz
IGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3Ig
dHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFu
ZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1
bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZh
ciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtc
biAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0
b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVu
Y3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAg
IHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVk
aWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7
XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGly
KSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSBy
ZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4g
IC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMg
YSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4Rmlu
ZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigt
MSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBz
bWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVk
IHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVk
SW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0
ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJh
dGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAg
IHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsg
aGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cg
PSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07
XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFz
dEluZGV4T2YgZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJl
ZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0
ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xu
ICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDAp
IHtcbiAgICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0
aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/
IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9
XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAg
ICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlb
aWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0
ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBs
ZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0x
O1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlk
eCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlb
aWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJy
ZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBu
b3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5k
IGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQq
KiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIo
MSwgXy5maW5kSW5kZXgsIF8uc29ydGVkSW5kZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRl
SW5kZXhGaW5kZXIoLTEsIF8uZmluZExhc3RJbmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50
ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBv
ZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBb
dGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkv
ZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3As
IHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwg
MDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAg
IHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwg
MCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9
IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lk
eF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVu
Y3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBE
ZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3Jc
biAgLy8gb3IgYSBub3JtYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4g
IHZhciBleGVjdXRlQm91bmQgPSBmdW5jdGlvbihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRl
eHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5z
dGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdz
KTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAg
IHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlz
T2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5c
biAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmlu
ZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8g
KipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxh
YmxlLlxuICBfLmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2
ZUJpbmQgJiYgZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBs
eShmdW5jLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9u
KGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVu
Y3Rpb24nKTtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2
YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywg
Ym91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkp
O1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBs
eSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBp
dHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFt
aWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2lu
ZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFy
dGlhbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDEpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBv
c2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlv
bisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFy
Z3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAg
cmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAg
fTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBv
YmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8v
IGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRo
YXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQu
XG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoLCBrZXk7XG4gICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3Io
J2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAx
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9i
altrZXldID0gXy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xu
ICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRz
IHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZh
ciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNh
Y2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhp
cywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkg
Y2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1
cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAg
cmV0dXJuIG1lbW9pemU7XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBn
aXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRo
IHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0
KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJu
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFy
Z3MpO1xuICAgIH0sIHdhaXQpO1xuICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hl
ZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBj
bGVhcmVkLlxuICBfLmRlZmVyID0gXy5wYXJ0aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dl
cmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9y
bWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBp
dCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0
aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24g
dGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2Fi
bGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9
IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywg
cmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xu
ICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9u
KCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8u
bm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHko
Y29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVs
bDtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5v
dygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBw
cmV2aW91cyA9IG5vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZp
b3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAg
ICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlm
ICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAg
IHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAg
ICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRp
bWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQg
JiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRp
bWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFz
IGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQu
IFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQg
Zm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdn
ZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhl
IHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRl
KSB7XG4gICAgdmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xu
XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkg
LSB0aW1lc3RhbXA7XG5cbiAgICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAg
ICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkg
e1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAg
ICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAg
IH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRo
aXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtc
biAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0
aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2Fs
bE5vdykge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAg
ICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1
bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNz
ZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFk
anVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25k
aXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5j
dGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5j
KTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQt
aW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJl
dHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBp
cyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25z
dW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBf
LmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2
YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxs
KHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBh
ZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xu
ICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAg
ICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVk
IHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1
bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9
IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMg
YSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0
dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxp
emF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVj
dCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5
IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNz
ZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1l
cmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2Yn
LCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3By
b3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107
XG5cbiAgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIg
bm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVj
dG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29u
c3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAv
LyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1
Y3Rvcic7XG4gICAgaWYgKF8uaGFzKG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJv
cCkpIGtleXMucHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAg
IHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBp
biBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBw
cm9wKSkge1xuICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5c
biAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxu
ICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNg
XG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSBy
ZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4g
ICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2Jq
LCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhh
c0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5
cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9i
amVjdC5cbiAgXy5hbGxLZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0
KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBp
biBvYmopIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFz
RW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlz
O1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVy
dGllcy5cbiAgXy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7
XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0
ZWUgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBvYmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5t
YXAgaXQgcmV0dXJucyBhbiBvYmplY3RcbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7
XG4gICAgdmFyIGtleXMgPSAgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5s
ZW5ndGgsXG4gICAgICAgICAgcmVzdWx0cyA9IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4g
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAg
ICAgIGN1cnJlbnRLZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5
XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1c
biAgICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGlu
dG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5
cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpb
a2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0
IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2Vy
aWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQg
PSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2Jq
W2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJs
ZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9u
cyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAg
IGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0p
KSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07
XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGlu
IHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxL
ZXlzKTtcblxuICAvLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJv
cGVydGllcyBpbiB0aGUgcGFzc2VkLWluIG9iamVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVj
dHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2ln
bmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0
aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9
IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9
IGtleXNbaV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVy
biBrZXk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBv
bmx5IGNvbnRhaW5pbmcgdGhlIHdoaXRlbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1
bmN0aW9uKG9iamVjdCwgb2l0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9
LCBvYmogPSBvYmplY3QsIGl0ZXJhdGVlLCBrZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0
dXJuIHJlc3VsdDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtl
eXMgPSBfLmFsbEtleXMob2JqKTtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVu
dHMsIGZhbHNlLCBmYWxzZSwgMSk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBr
ZXksIG9iaikgeyByZXR1cm4ga2V5IGluIG9iajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmop
O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUg
PSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRb
a2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBS
ZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgYmxhY2tsaXN0ZWQgcHJvcGVy
dGllcy5cbiAgXy5vbWl0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRl
KGl0ZXJhdGVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVu
KGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0g
ZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywg
a2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCk7XG4gIH07XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1
bHQgcHJvcGVydGllcy5cbiAgXy5kZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywg
dHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBn
aXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJl
IHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9i
amVjdC5cbiAgXy5jcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFy
IHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5k
T3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3Jl
YXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25l
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7
XG4gICAgcmV0dXJuIF8uaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwg
b2JqKTtcbiAgfTtcblxuICAvLyBJbnZva2VzIGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5k
IHRoZW4gcmV0dXJucyBvYmouXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRo
b2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBw
ZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFp
bi5cbiAgXy50YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0
b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBh
biBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0
Y2ggPSBmdW5jdGlvbihvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0
cnMpLCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVy
biAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAg
IGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFs
c2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVj
dXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVu
Y3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBh
cmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8g
U2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQu
b3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBh
ICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVs
bCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBl
ZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAg
aWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0Ns
YXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAg
IGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBz
d2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBl
eHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4g
ICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNl
ZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylc
biAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5k
IHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVz
LCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIp
YC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVj
dCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJl
ZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAg
ICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVn
YWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAg
ICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAg
ICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6
XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRp
dmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlz
ZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxp
c2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2
YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFy
cmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5
cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmpl
Y3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29u
c3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xu
ICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEu
Y29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0g
YkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3Ig
JiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYm
IGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgn
Y29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1
cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3lj
bGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAv
LyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0
cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2
ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQg
dGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0
YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0g
YVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBz
ZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJl
ciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFj
a1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4g
ICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8g
UmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5
cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRl
ZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAg
ICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVw
IGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxu
ICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xl
bmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxz
ZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5r
ZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3Vy
ZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVz
IGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVu
Z3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xu
ICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1ts
ZW5ndGhdO1xuICAgICAgICBpZiAoIShfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXld
LCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8v
IFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRy
dWU7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0
d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAg
ICByZXR1cm4gZXEoYSwgYik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5n
LCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1l
cmFibGUgb3duLXByb3BlcnRpZXMuXG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikg
JiYgKF8uaXNBcnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9i
aikpKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVu
Z3RoID09PSAwO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9c
biAgXy5pc0VsZW1lbnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9i
ai5ub2RlVHlwZSA9PT0gMSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJh
eT9cbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5p
c0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9T
dHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEg
Z2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rp
b24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21l
IGlzVHlwZSBtZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVt
YmVyLCBpc0RhdGUsIGlzUmVnRXhwLCBpc0Vycm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAn
RnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvcidd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsg
J10nO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2Yg
dGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUg
aXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJn
dW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgICByZXR1cm4gXy5oYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8v
IE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0
eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkg
OCAoIzE5MjkpLlxuICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4
QXJyYXkgIT0gJ29iamVjdCcpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtc
biAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zp
bml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05h
TihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFO
YD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5c
biAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikg
JiYgb2JqICE9PSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFu
P1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRy
dWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJv
b2xlYW5dJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4g
IF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5l
ZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxu
ICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdp
dmVuIHByb3BlcnR5IGRpcmVjdGx5XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5v
dCBvbiBhIHByb3RvdHlwZSkuXG4gIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBy
ZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07
XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAv
LyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBg
X2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJl
bmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24o
KSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xu
ICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVs
dCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVy
biB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9m
dGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlv
bih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtc
biAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5
ID0gcHJvcGVydHk7XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2Jq
ZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5j
dGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5j
dGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8v
IFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBh
IGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5t
YXRjaGVzID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBh
dHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRj
aChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioq
IHRpbWVzLlxuICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAg
ICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47
IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVz
aXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0g
bnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0
dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4g
IH07XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRp
bWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkg
e1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBv
ZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAn
Jic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wi
JzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAg
fTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5j
dGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGlu
dGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAg
dmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07
XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRz
IHRvIGJlIGVzY2FwZWRcbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2lu
KCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2
YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsg
c3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJl
cGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAg
Xy5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVh
dGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVk
IGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBg
b2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBm
dW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBmYWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9i
amVjdCA9PSBudWxsID8gdm9pZCAwIDogb2JqZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUg
PT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJu
IF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtc
blxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBl
bnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRz
LlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkg
e1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHBy
ZWZpeCArIGlkIDogaWQ7XG4gIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2Vz
IEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2lu
ZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50
ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4v
ZyxcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAg
ICAgIDogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5n
IGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8v
IGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25l
IHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0g
LyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28g
dGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIg
ZXNjYXBlcyA9IHtcbiAgICBcIidcIjogICAgICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxc
XCcsXG4gICAgJ1xccic6ICAgICAncicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIw
MjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2Nh
cGVyID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVD
aGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRj
aF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRv
IEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5n
IGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAv
LyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5c
biAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRp
bmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRT
ZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBs
YXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3Vs
YXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAo
W1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0
dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2
YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtc
blxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxp
dGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNl
ID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gs
IGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSAr
PSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7
XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2Fw
ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9
PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBv
bGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRl
ICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUp
IHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdc
IjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVk
IHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAg
IH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlz
IG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlm
ICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3Vy
Y2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5w
cm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2Fs
bChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxu
JztcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAg
ICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0
ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlz
LCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNl
IGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9
IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5j
dGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJu
IHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQg
Y2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFp
biA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAt
LS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlv
biwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08t
c3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAg
Ly8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5c
blxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRl
IHJlc3VsdHMuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAg
cmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4g
IC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVj
dC5cbiAgXy5taXhpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhv
YmopLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFt
ZV07XG4gICAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIg
YXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVu
dHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xu
ICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3Jl
IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8g
QWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNo
KFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1
bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tu
YW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9i
aiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xu
ICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmou
bGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBv
YmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rp
b25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSdd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4g
ICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQo
dGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4g
IH0pO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWlu
ZWQgb2JqZWN0LlxuICBfLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVy
biB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBm
b3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBh
cml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVP
ZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90
eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBl
ZDtcbiAgfTtcblxuICAvLyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3Ig
Y29tcGF0aWJpbGl0eSB3aXRoIEFNRCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNl
IG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAv
LyBwcmFjdGljZSBmb3IgQU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVy
c2NvcmUgcmVnaXN0ZXJzXG4gIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1
ZXJ5LCBpdCBpcyBhIGJhc2UgbGlicmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRv
IGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAv
LyBhbiBBTUQgbG9hZCByZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJv
ciB3aGVuIGFuXG4gIC8vIGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBh
IGxvYWRlciByZXF1ZXN0LlxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBk
ZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xu
ICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iCittb2R1bGUu
ZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8gICAgIGh0dHA6Ly91bmRl
cnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3Vt
ZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVu
ZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2Uu
XG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBi
cm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xu
XG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZh
ciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUg
bWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBB
cnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgRnVuY1Byb3RvID0g
RnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFi
bGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICB2YXJcbiAgICBwdXNo
ICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlICAgICAgICAgICAgPSBB
cnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmlu
ZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAg
Ly8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0
aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBu
YXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAg
ICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5k
LFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQg
ZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2
YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0
byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAo
ISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBw
ZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3Ig
KipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBv
bGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBf
YCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5l
ZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4
cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAg
IGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8v
IEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztcblxuICAvLyBJbnRlcm5h
bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVz
KSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVk
bHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgdmFyIG9w
dGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChj
b250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0g
bnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFs
dWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9
O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAg
ICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAg
ICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24p
O1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2
YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250
ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4g
ICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNv
bnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBIG1vc3RseS1pbnRlcm5h
bCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAv
LyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQg
cmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0cmFyeSBjYWxsYmFjaywg
YSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICB2YXIgY2IgPSBm
dW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVs
bCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVy
biBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmpl
Y3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0
eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkg
e1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8v
IEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4g
IHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1bmRlZmluZWRPbmx5KSB7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50
cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9i
ajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtc
biAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlz
ID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5
c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2JqW2tleV0gPT09IHZvaWQg
MCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0
dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBj
cmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBi
YXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHBy
b3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZl
Q3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAg
dmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1bmN0aW9uKGtleSkge1xu
ICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZv
aWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVscGVyIGZvciBjb2xsZWN0
aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3Vs
ZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3RcbiAgLy8gUmVsYXRlZDog
aHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMt
dG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02
NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4g
IHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9
IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxl
Y3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+
PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlv
biBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVy
c3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFu
ZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxu
ICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2gg
PSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRl
cmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3Ro
O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGgg
PSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ld
LCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7
XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRo
ZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8u
bWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJy
YXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9i
aikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVu
dEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0g
PSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAg
IHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9u
IGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7
XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVzaW5nIGFyZ3VtZW50cy5s
ZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRlb3B0aW1pemUgdGhlLCBz
ZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5
cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBs
ZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBr
ZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1
cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87
XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRl
eHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCk7
XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAg
ICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0g
ZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbml0aWFs
IHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8
IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4g
ICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvcihvYmos
IGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAgICB9O1xuICB9XG5cbiAg
Ly8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZh
bHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBfLnJlZHVjZSA9IF8uZm9s
ZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2Np
YXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgXy5yZWR1
Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiB0aGUg
Zmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0
YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGtl
eSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xu
ICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9XG4g
ICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAg
fTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVu
Y3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xu
ICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgXy5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVl
LCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJu
IHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNo
IGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubmVnYXRlKGNiKHByZWRp
Y2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2Yg
dGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5c
biAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0g
IWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlz
IHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDog
aW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXks
IG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAg
Ly8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hl
cyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIF8uc29tZSA9IF8uYW55
ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBj
YihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikg
JiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xu
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAg
IHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAo
cHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7
XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhl
IGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbiAg
Ly8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBf
LmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1
YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xu
ICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXgg
PSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4g
IH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRl
bSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtc
biAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5j
ID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24o
dmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9k
XTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVuYy5hcHBseSh2YWx1ZSwg
YXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNv
bW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgXy5wbHVjayA9
IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgXy5wcm9wZXJ0eShr
ZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBj
YXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4gIC8vIGNvbnRhaW5pbmcg
c3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0
dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07
XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlu
ZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBr
ZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtc
biAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24p
LlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIg
cmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZh
bHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkg
e1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4g
ICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPiByZXN1bHQp
IHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0g
ZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8u
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRl
ZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA+
IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUlu
ZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1
dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVt
ZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJ
bmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBu
dWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2Jq
IDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVu
Z3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAg
IGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAg
ICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0
KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAg
ICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0
eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4g
ICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xu
ICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0
aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMg
c2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVm
ZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHNldCA9IGlzQXJy
YXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBzZXQu
bGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIg
aW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmFuZCA9
IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBpbmRleCkgc2h1ZmZsZWRb
aW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFtyYW5kXSA9IHNldFtpbmRl
eF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipu
KiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8gSWYgKipuKiogaXMgbm90
IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGlu
dGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAg
Xy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8
fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhv
YmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1c
biAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xuICB9
O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNl
ZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgcmV0
dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAg
ICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4
LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KVxuICAgICAg
fTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxl
ZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEg
IT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4g
ICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAg
ICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xu
ICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdy
b3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IpIHtc
biAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFy
IHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4g
ICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtl
eSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0
LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xu
ICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQ
YXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1
bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkp
IHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAg
fSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBz
aW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91
ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0
aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0p
O1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBj
ZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRv
IGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9u
LlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAg
ICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXld
ID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJv
bSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
aWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGlj
ZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmos
IF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJl
dHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4g
aXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07
XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVs
ZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hv
c2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0
aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTtc
biAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICAgIChwcmVk
aWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTtcbiAgICB9
KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8vIEFycmF5IEZ1bmN0aW9u
c1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2Yg
YW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFs
dWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3Vh
cmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8uZmly
c3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBp
ZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1
YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXku
bGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFz
dCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1
bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGlu
XG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4gIF8uaW5pdGlhbCA9IGZ1
bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAw
LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4p
KSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3Np
bmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5
LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkg
PT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1
cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0
aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0
aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAg
YW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmpl
Y3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMg
aW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJh
eSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8
IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMg
ZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1
cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGlt
cGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZs
YXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBzdGFydEluZGV4KSB7XG4g
ICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4
IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYm
IChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAv
L2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0XG4gICAg
ICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBzdHJpY3Qp
O1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgb3V0cHV0
Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7XG4gICAgICAgICAgb3V0
cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0
cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxu
ICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVp
dGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZs
YXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFy
cmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0
aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4g
IF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShh
cnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEg
ZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxy
ZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZh
c3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8u
dW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0
ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtc
biAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAg
IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0g
aXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAo
aXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQu
cHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAo
aXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xu
ICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFs
dWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFs
dWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAg
cmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFp
bnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhl
IHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4g
Xy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4gIH07XG5cbiAgLy8gUHJv
ZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxs
IHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9u
KGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJn
dW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFy
cmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAg
ICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICBmb3IgKHZh
ciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMo
YXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJn
c0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBu
dW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGlu
IGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRpZmZlcmVuY2UgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRy
dWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAg
ICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICAv
LyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVt
ZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuICBfLnppcCA9IGZ1
bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgLy8g
Q29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5k
IGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXNcbiAg
Xy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIF8u
bWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZhciByZXN1bHQgPSBBcnJh
eShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5k
ZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJyYXksIGluZGV4KTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRv
IG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4g
IC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBv
bmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4g
IF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9
O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0g
PSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0g
PSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpbmRJbmRleCBhbmQgZmlu
ZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5k
ZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQp
IHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAw
IDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGlu
ZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlr
ZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEluZGV4ID0gY3JlYXRlUHJl
ZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0
ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZp
Z3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91
bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJj
aC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFy
IHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0
aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRo
LmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0p
IDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0
dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBp
bmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhG
aW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5j
dGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAg
ICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5t
YXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbmd0
aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCAr
IDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxl
bmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAg
IHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBp
ZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNh
bGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAg
PyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDog
bGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAg
ICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAg
cmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRo
ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlm
IHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJh
eSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBm
b3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBfLmluZGV4T2YgPSBjcmVh
dGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7XG4gIF8ubGFzdElu
ZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdEluZGV4KTtcblxuICAvLyBH
ZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVz
c2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlv
bi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhv
bi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlv
bihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0
b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gc3Rl
cCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0
YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAg
Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xu
ICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAg
fTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMg
YSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRl
ZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJv
dW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxs
aW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5
KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnBy
b3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7
XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4g
c2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9i
amVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSku
IERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBp
ZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHtc
biAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBu
YXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYg
KCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBj
YWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4ZWN1
dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2Fs
bChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8g
UGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFz
IGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFu
Z2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vo
b2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZp
bGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAgIHZhciBib3VuZEFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAg
ICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBfID8gYXJn
dW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUg
KHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlv
bisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlz
LCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBCaW5kIGEg
bnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBh
cmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBm
b3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0
IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGks
IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAobGVuZ3RoIDw9IDEpIHRo
cm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xu
ICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gYXJndW1lbnRz
W2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAg
IHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24g
Ynkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFz
aGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNo
ZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhh
c2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghXy5oYXMoY2Fj
aGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2Fj
aGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5j
dGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxz
XG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0
aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAy
KTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEg
ZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3Rh
Y2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywg
MSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwg
b25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRv
dyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAv
LyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBl
ciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhl
IGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFs
c2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxu
ICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBj
b250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBw
cmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgdmFyIGxh
dGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0g
ZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0
ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4
dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
dmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGlu
ZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQg
LSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0g
YXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQp
IHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91
dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlv
dXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4g
ICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNl
IGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0
aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJl
dHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRo
YXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8v
IGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3Bz
IGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlz
IHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwg
aW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3
YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0
YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBs
YXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxh
c3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxh
c3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlm
ICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBh
cmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAg
ICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB0aW1lc3Rh
bXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7
XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtc
biAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH1cblxuICAg
ICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0
IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxv
d2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwg
YW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4g
IF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1cm4gXy5wYXJ0aWFs
KHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24g
b2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGlj
YXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBl
YWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0
IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJn
dW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nb
c3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQg
PSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhl
Y3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRp
bWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMg
PCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAg
ICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9u
bHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuXG4g
IF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVt
byA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1l
cyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5c
biAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9u
ZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9y
IGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7
XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8g
S2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5g
IGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5w
cm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9w
cyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAg
ICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9M
b2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5
cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAg
ICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKF8u
aXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQ
cm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBw
cm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBwcm9wKSAmJiAhXy5jb250
YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1J
ZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAg
ICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFfLmNv
bnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1c
biAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3du
IHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZl
IGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlz
T2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2
ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmop
IGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwg
OS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xu
ICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVydHkg
bmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBp
ZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAg
Zm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5
LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4g
ICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBv
YmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAg
IHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTtcbiAgICB9XG4gICAg
cmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5
aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9iamVjdFxuICAvLyBJbiBj
b250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBfLm1hcE9iamVjdCA9IGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJh
dGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2JqKSxcbiAgICAgICAgICBs
ZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0ge30sXG4gICAgICAgICAg
Y3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgICByZXN1
bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBv
YmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVy
dCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIF8ucGFp
cnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZh
ciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhaXJzW2ldID0g
W2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfTtc
blxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1
ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJl
c3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24g
bmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNg
XG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5h
bWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5j
dGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVz
LnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhl
IHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVB
c3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBh
bGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpXG4gIC8vICho
dHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5j
ZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVuZE93biA9IF8uYXNzaWdu
ID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkg
b24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kS2V5ID0g
ZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaiksIGtleTtcbiAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtl
eSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBv
ZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dsaXN0ZWQgcHJvcGVydGllcy5c
biAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2
YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtleXM7XG4gICAgaWYgKG9i
aiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24ob2l0ZXJhdGVl
KSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBm
bGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVu
Y3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2JqOyB9O1xuICAgICAgb2Jq
ID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAg
ICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXks
IG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibG9j
a2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJh
dGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9
IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpLCBTdHJpbmcpO1xuICAg
ICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhXy5j
b250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucGljayhv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2Jq
ZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWdu
ZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVy
aXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwg
cHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4g
IC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJv
cHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChw
cm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAg
fTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmpl
Y3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2Jq
KSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6
IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0
aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9z
ZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4g
IC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3
aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtc
biAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0
dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFp
cnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5
cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3Qg
PT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBr
ZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9i
aikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAv
LyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxu
ICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50
aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50
aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dp
a2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9
PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0
IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAg
ICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53
cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5f
d3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8v
IENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5n
LmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJu
IGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1i
ZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJl
ZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdF
eHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2Ev
aSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8g
UHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVx
dWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3
IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAg
ICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxl
bnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFs
ZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAg
ICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVy
aWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDog
K2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2Jq
ZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBu
dW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAg
ICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRh
dGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5g
IGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICB9XG5c
biAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAg
IGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlw
ZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRo
IGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBz
IG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAg
dmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAg
aWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5z
dGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5j
dGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7
XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVx
dWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5n
IGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9u
IDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5n
IHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNl
IHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAg
ICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAg
IHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAg
ICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25h
bCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4g
ICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0g
YjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2go
Yik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAg
ICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0
ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9
IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtc
biAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmlj
IHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShh
W2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAg
ICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAg
dmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xu
ICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVy
IG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYg
KF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgd2hpbGUg
KGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgICAg
ICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFzKGIsIGtleSkgJiYgZXEo
YVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1c
biAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtc
biAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29u
IHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rp
b24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVj
dCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5pc0VtcHR5ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopIHx8IF8u
aXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBf
LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBh
IERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVy
biAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXku
aXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xu
ICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07
XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBm
dW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5
cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH07XG5c
biAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBp
c1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJyb3IuXG4gIF8uZWFjaChb
J0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVn
RXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmpl
Y3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJh
Y2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVy
ZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxu
ICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9
O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3Jr
IGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8gSUUgMTEgKCMxNjIxKSwg
YW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicg
JiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBm
YWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVt
YmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzRmluaXRl
KG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5cbiAgLy8gSXMgdGhlIGdp
dmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3aGljaCBkb2VzIG5vdCBl
cXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIF8u
aXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2
YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9
PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1
YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2Jq
ID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xu
ICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9p
ZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBv
YmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBv
dGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmos
IGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
aiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCBy
ZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJl
dHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm5vQ29uZmxp
Y3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7XG4gICAg
cmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJv
dW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVl
KSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5n
IGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgXy5jb25z
dGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0gZnVuY3Rpb24oKXt9O1xu
XG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBm
b3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG4gIF8ucHJv
cGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IGZ1bmN0
aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH07
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBh
biBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBf
Lm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xuICAgIGF0dHJzID0gXy5l
eHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBy
ZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUnVuIGEg
ZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBh
Y2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBh
bmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4g
ICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xu
ICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAt
IG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQg
dGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID0gRGF0ZS5ub3cg
fHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xu
XG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBl
TWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcm
Z3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2An
OiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmludmVydChlc2NhcGVNYXAp
O1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0
by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVzY2FwZXIgPSBmdW5jdGlv
bihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1
cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEg
a2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3VyY2UgPSAnKD86JyArIF8u
a2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChz
b3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVs
bCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmlu
ZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAg
ICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcbiAgXy51
bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIElmIHRoZSB2YWx1
ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdp
dGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lzZSwgcmV0dXJuIGl0Llxu
ICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZhbGxiYWNrKSB7XG4gICAg
dmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3RbcHJvcGVydHldO1xu
ICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9IGZhbGxiYWNrO1xuICAg
IH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6
IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1
ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVt
cG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVu
Y3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1
cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBV
bmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVc
biAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxp
bWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGUgICAgOiAvPCUo
W1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShbXFxzXFxTXSs/KSU+L2cs
XG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdo
ZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBk
ZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdl
eCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAg
dmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8g
YmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxp
dGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAgIFwiJ1wiLFxuICAgICdc
XFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAgICAnXFxuJzogICAgICdu
JyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07
XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5c
biAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcg
KyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRp
bmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNj
b3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdo
aXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVy
cG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBzZXR0
aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBz
ZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0
dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMg
aW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0
Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJj
ZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAg
ICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8Jykg
KyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2Nh
cGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xu
ICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBm
dW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xu
ICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVy
LCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4g
ICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsg
ZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVs
c2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwi
ICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNl
IGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUg
KyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUg
bWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZlc3QuXG4gICAgICByZXR1
cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElm
IGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwg
c2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7
fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9
JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24o
KXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAn
cmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZW5kZXIgPSBuZXcgRnVu
Y3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNh
dGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAg
fVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJl
bmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBj
b21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAg
dmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7XG4gICAgdGVtcGxhdGUu
c291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7
XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRkIGEgXCJjaGFpblwiIGZ1
bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8u
Y2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfKG9iaik7XG4gICAg
aW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAg
Ly8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdFxuICAvLyBj
YW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMg
b2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1h
eSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmlu
ZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNl
LCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBv
Ymo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVu
ZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNo
KF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tu
YW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5
KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQodGhpcywgZnVuYy5hcHBs
eShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEFkZCBhbGwgb2Yg
dGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgXy5taXhp
bihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFw
cGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQn
LCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2Qg
PSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmos
IGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3Nw
bGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07XG4gICAgICByZXR1cm4g
cmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3Nv
ciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ2NvbmNhdCcsICdq
b2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQ
cm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRz
KSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3Jh
cHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24o
KSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndy
YXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xu
ICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnBy
b3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7
XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJycg
KyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBh
dCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBt
YXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3Vn
aCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFu
b255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVj
YXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9w
dWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBi
ZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdl
bmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxl
ZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAn
ZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwg
ZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxufS5jYWxsKHRoaXMp
KTtcbiIKIAogLyoqKi8gfSksCiAvKiA0MTYgKi8KQEAgLTE0ODc3NSw3ICsxNDg3NzUsNyBAQCB2
YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIGNvbWJpbmUoZGVzdCwgc3Jj
KSB7CiAgICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAg
IGlmIChfLmhhcyhKU0hJTlQuYmxhY2tsaXN0LCBuYW1lKSkgcmV0dXJuOworICAgICAgaWYgKF8u
aGFzKEpTSElOVC5ibG9ja2xpc3QsIG5hbWUpKSByZXR1cm47CiAgICAgICBkZXN0W25hbWVdID0g
c3JjW25hbWVdOwogICAgIH0pOwogICB9CkBAIC0xNDkwNjAsNyArMTQ5MDYwLDcgQEAgdmFyIEpT
SElOVCA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoMSk7CiAgICAg
ICAgICAgdmFsID0gZmFsc2U7CiAKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W2tleV0gPSBr
ZXk7CisgICAgICAgICAgSlNISU5ULmJsb2NrbGlzdFtrZXldID0ga2V5OwogICAgICAgICAgIGRl
bGV0ZSBwcmVkZWZpbmVkW2tleV07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgcHJlZGVm
W2tleV0gPSAodmFsID09PSAidHJ1ZSIpOwpAQCAtMTUzODY3LDcgKzE1Mzg2Nyw3IEBAIHZhciBK
U0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBKU0hJTlQuZXJyb3JzID0gW107CiAgICAgICBK
U0hJTlQudW5kZWZzID0gW107CiAgICAgICBKU0hJTlQuaW50ZXJuYWxzID0gW107Ci0gICAgICBK
U0hJTlQuYmxhY2tsaXN0ID0ge307CisgICAgICBKU0hJTlQuYmxvY2tsaXN0ID0ge307CiAgICAg
ICBKU0hJTlQuc2NvcGUgPSAiKG1haW4pIjsKICAgICB9CiAKQEAgLTE1Mzg5Niw3ICsxNTM4OTYs
NyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogCiAgICAgICAgIGlmIChpdGVtWzBdID09
PSAiLSIpIHsKICAgICAgICAgICBzbGljZSA9IGl0ZW0uc2xpY2UoMSk7Ci0gICAgICAgICAgSlNI
SU5ULmJsYWNrbGlzdFtzbGljZV0gPSBzbGljZTsKKyAgICAgICAgICBKU0hJTlQuYmxvY2tsaXN0
W3NsaWNlXSA9IHNsaWNlOwogICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHByZWRlZmluZWQgaWYg
dGhlcmUKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtzbGljZV07CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xOTU1NzYsNyArMTk1NTc2LDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3Bl
Y2lmaWVyKG5vZGUpIAogCXZhciByZWdleFNpbmdsZUVzY2FwZSA9IC9bIidcXFxiXGZcblxyXHRd
LzsKIAogCXZhciByZWdleERpZ2l0ID0gL1swLTldLzsKLQl2YXIgcmVnZXhXaGl0ZWxpc3QgPSAv
WyAhIy0mXCgtXFtcXS1+XS87CisJdmFyIHJlZ2V4QWxsb3dsaXN0ID0gL1sgISMtJlwoLVxbXF0t
fl0vOwogCiAJdmFyIGpzZXNjID0gZnVuY3Rpb24oYXJndW1lbnQsIG9wdGlvbnMpIHsKIAkJLy8g
SGFuZGxlIG9wdGlvbnMKQEAgLTE5NTc1MSw3ICsxOTU3NTEsNyBAQCBmdW5jdGlvbiBJbXBvcnRO
YW1lc3BhY2VTcGVjaWZpZXIobm9kZSkgCiAJCQkJfQogCQkJfQogCQkJaWYgKCFvcHRpb25zLmVz
Y2FwZUV2ZXJ5dGhpbmcpIHsKLQkJCQlpZiAocmVnZXhXaGl0ZWxpc3QudGVzdChjaGFyYWN0ZXIp
KSB7CisJCQkJaWYgKHJlZ2V4QWxsb3dsaXN0LnRlc3QoY2hhcmFjdGVyKSkgewogCQkJCQkvLyBJ
dOKAmXMgYSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGAiYCwgYCdgIG9y
IGBcYCwKIAkJCQkJLy8gc28gZG9u4oCZdCBlc2NhcGUgaXQuCiAJCQkJCXJlc3VsdCArPSBjaGFy
YWN0ZXI7CkBAIC0yMDkwODEsNyArMjA5MDgxLDcgQEAgdmFyIF9nZXRJdGVyYXRvcjMgPSBfaW50
ZXJvcFJlcXVpcmVEZWZhdQogCiBleHBvcnRzLmNhbGwgPSBjYWxsOwogZXhwb3J0cy5fY2FsbCA9
IF9jYWxsOwotZXhwb3J0cy5pc0JsYWNrbGlzdGVkID0gaXNCbGFja2xpc3RlZDsKK2V4cG9ydHMu
aXNCbG9ja2xpc3RlZCA9IGlzQmxvY2tsaXN0ZWQ7CiBleHBvcnRzLnZpc2l0ID0gdmlzaXQ7CiBl
eHBvcnRzLnNraXAgPSBza2lwOwogZXhwb3J0cy5za2lwS2V5ID0gc2tpcEtleTsKQEAgLTIwOTE1
Nyw5ICsyMDkxNTcsOSBAQCBmdW5jdGlvbiBfY2FsbChmbnMpIHsKICAgcmV0dXJuIGZhbHNlOwog
fQogCi1mdW5jdGlvbiBpc0JsYWNrbGlzdGVkKCkgewotICB2YXIgYmxhY2tsaXN0ID0gdGhpcy5v
cHRzLmJsYWNrbGlzdDsKLSAgcmV0dXJuIGJsYWNrbGlzdCAmJiBibGFja2xpc3QuaW5kZXhPZih0
aGlzLm5vZGUudHlwZSkgPiAtMTsKK2Z1bmN0aW9uIGlzQmxvY2tsaXN0ZWQoKSB7CisgIHZhciBi
bG9ja2xpc3QgPSB0aGlzLm9wdHMuYmxvY2tsaXN0OworICByZXR1cm4gYmxvY2tsaXN0ICYmIGJs
b2NrbGlzdC5pbmRleE9mKHRoaXMubm9kZS50eXBlKSA+IC0xOwogfQogCiBmdW5jdGlvbiB2aXNp
dCgpIHsKQEAgLTIwOTE2Nyw3ICsyMDkxNjcsNyBAQCBmdW5jdGlvbiB2aXNpdCgpIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiAgIH0KIAotICBpZiAodGhpcy5pc0JsYWNrbGlzdGVkKCkpIHsKKyAgaWYg
KHRoaXMuaXNCbG9ja2xpc3RlZCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKQEAgLTIx
MDgyNSw3ICsyMTA4MjUsNyBAQCBmdW5jdGlvbiBzaG91bGRJZ25vcmVLZXkoa2V5KSB7CiAKICAg
aWYgKGtleSA9PT0gImVudGVyIiB8fCBrZXkgPT09ICJleGl0IiB8fCBrZXkgPT09ICJzaG91bGRT
a2lwIikgcmV0dXJuIHRydWU7CiAKLSAgaWYgKGtleSA9PT0gImJsYWNrbGlzdCIgfHwga2V5ID09
PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtleXMiKSByZXR1cm4gdHJ1ZTsKKyAgaWYgKGtl
eSA9PT0gImJsb2NrbGlzdCIgfHwga2V5ID09PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtl
eXMiKSByZXR1cm4gdHJ1ZTsKIAogICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjI1MTUsNyArMjIy
NTE1LDcgQEAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IAogCiBjb25z
dCBsaWZlY3ljbGVNZXRob2RzID0gbmV3IFNldChbImNvbXBvbmVudFdpbGxVbm1vdW50IiwgImNv
bXBvbmVudERpZE1vdW50IiwgImNvbXBvbmVudFdpbGxNb3VudCIsICJjb21wb25lbnREaWRVcGRh
dGUiLCAiY29tcG9uZW50V2lsbFVwZGF0ZSIsICJjb21wb25lbnREaWRDYXRjaCIsICJjb21wb25l
bnRXaWxsUmVjZWl2ZVByb3BzIl0pOwogCi1jb25zdCB3aGl0ZWxpc3RlZFByb3BlcnRpZXMgPSBu
ZXcgU2V0KFsicHJvcHMiLCAiY29udGV4dCIsICJyZWZzIl0pOworY29uc3QgYWxsb3dsaXN0ZWRQ
cm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKIAogZnVu
Y3Rpb24gZ2V0SW5pdGlhbFByb3BzKHJlYWxtLCBjb21wb25lbnRUeXBlKSB7CiAgIGxldCBwcm9w
c05hbWUgPSBudWxsOwpAQCAtMjIyNjg1LDcgKzIyMjY4NSw3IEBAIGZ1bmN0aW9uIGV2YWx1YXRl
Q2xhc3NDb25zdHJ1Y3RvcihyZWFsbSwKICAgICBsZXQgaW5zdGFuY2UgPSAoMCwgX2luZGV4Mi5D
b25zdHJ1Y3QpKHJlYWxtLCBjb25zdHJ1Y3RvckZ1bmMsIFtwcm9wcywgY29udGV4dF0pOwogICAg
ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShpbnN0YW5jZSBpbnN0YW5jZW9mIF9pbmRleC5PYmpl
Y3RWYWx1ZSk7CiAgICAgZm9yIChsZXQgW3Byb3BlcnR5TmFtZV0gb2YgaW5zdGFuY2UucHJvcGVy
dGllcykgewotICAgICAgaWYgKCF3aGl0ZWxpc3RlZFByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgIGlmICghYWxsb3dsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUp
KSB7CiAgICAgICAgIGluc3RhbmNlUHJvcGVydGllcy5hZGQocHJvcGVydHlOYW1lKTsKICAgICAg
IH0KICAgICB9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmct
YmVuY2htYXJrL2NsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bTIvd2ViLXRvb2xpbmctYmVuY2htYXJrL2NsaS5qcwkocmV2aXNpb24gMjcxMTIyKQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanMJKHdv
cmtpbmcgY29weSkKQEAgLTUzNTQsMzcgKzUzNTQsMzcgQEAgaWYgKHR5cGVvZiBfX2UgPT0gJ251
bWJlcicpIF9fZSA9IGNvcmU7IAogLyogMTYgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHsNCi0JaWYoIW1v
ZHVsZS53ZWJwYWNrUG9seWZpbGwpIHsNCi0JCW1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigp
IHt9Ow0KLQkJbW9kdWxlLnBhdGhzID0gW107DQotCQkvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZp
bmVkIGJ5IGRlZmF1bHQNCi0JCWlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9
IFtdOw0KLQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgImxvYWRlZCIsIHsNCi0JCQll
bnVtZXJhYmxlOiB0cnVlLA0KLQkJCWdldDogZnVuY3Rpb24oKSB7DQotCQkJCXJldHVybiBtb2R1
bGUubDsNCi0JCQl9DQotCQl9KTsNCi0JCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICJp
ZCIsIHsNCi0JCQllbnVtZXJhYmxlOiB0cnVlLA0KLQkJCWdldDogZnVuY3Rpb24oKSB7DQotCQkJ
CXJldHVybiBtb2R1bGUuaTsNCi0JCQl9DQotCQl9KTsNCi0JCW1vZHVsZS53ZWJwYWNrUG9seWZp
bGwgPSAxOw0KLQl9DQotCXJldHVybiBtb2R1bGU7DQotfTsNCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKG1vZHVsZSkgeworCWlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7CisJCW1vZHVs
ZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9OworCQltb2R1bGUucGF0aHMgPSBbXTsKKwkJLy8g
bW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0CisJCWlmKCFtb2R1bGUuY2hpbGRy
ZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdOworCQlPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxl
LCAibG9hZGVkIiwgeworCQkJZW51bWVyYWJsZTogdHJ1ZSwKKwkJCWdldDogZnVuY3Rpb24oKSB7
CisJCQkJcmV0dXJuIG1vZHVsZS5sOworCQkJfQorCQl9KTsKKwkJT2JqZWN0LmRlZmluZVByb3Bl
cnR5KG1vZHVsZSwgImlkIiwgeworCQkJZW51bWVyYWJsZTogdHJ1ZSwKKwkJCWdldDogZnVuY3Rp
b24oKSB7CisJCQkJcmV0dXJuIG1vZHVsZS5pOworCQkJfQorCQl9KTsKKwkJbW9kdWxlLndlYnBh
Y2tQb2x5ZmlsbCA9IDE7CisJfQorCXJldHVybiBtb2R1bGU7Cit9OwogCiAKIC8qKiovIH0pLAog
LyogMTcgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbigpIHsNCi0JdGhyb3cgbmV3IEVycm9yKCJkZWZpbmUgY2Fubm90IGJl
IHVzZWQgaW5kaXJlY3QiKTsNCi19Ow0KK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7CisJ
dGhyb3cgbmV3IEVycm9yKCJkZWZpbmUgY2Fubm90IGJlIHVzZWQgaW5kaXJlY3QiKTsKK307CiAK
IAogLyoqKi8gfSksCkBAIC03MjQ5LDI3ICs3MjQ5LDI3IEBAIGZ1bmN0aW9uIENhbGwocmVhbG0s
IEYsIFYsIGFyZ3NMaXN0KSB7CiAvKiAyMSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cykgewogCi12YXIgZzsNCi0NCi0vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZQ0K
LWcgPSAoZnVuY3Rpb24oKSB7DQotCXJldHVybiB0aGlzOw0KLX0pKCk7DQotDQotdHJ5IHsNCi0J
Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApDQotCWcgPSBnIHx8IEZ1
bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkgfHwgKDEsZXZhbCkoInRoaXMiKTsNCi19IGNhdGNoKGUp
IHsNCi0JLy8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGUN
Ci0JaWYodHlwZW9mIHdpbmRvdyA9PT0gIm9iamVjdCIpDQotCQlnID0gd2luZG93Ow0KLX0NCi0N
Ci0vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0
Li4uDQotLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNv
IGl0J3MNCi0vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59
DQotDQotbW9kdWxlLmV4cG9ydHMgPSBnOw0KK3ZhciBnOworCisvLyBUaGlzIHdvcmtzIGluIG5v
bi1zdHJpY3QgbW9kZQorZyA9IChmdW5jdGlvbigpIHsKKwlyZXR1cm4gdGhpczsKK30pKCk7CisK
K3RyeSB7CisJLy8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApCisJZyA9
IGcgfHwgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKSB8fCAoMSxldmFsKSgidGhpcyIpOworfSBj
YXRjaChlKSB7CisJLy8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFp
bGFibGUKKwlpZih0eXBlb2Ygd2luZG93ID09PSAib2JqZWN0IikKKwkJZyA9IHdpbmRvdzsKK30K
KworLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBp
dC4uLgorLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNv
IGl0J3MKKy8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn0K
KworbW9kdWxlLmV4cG9ydHMgPSBnOwogCiAKIC8qKiovIH0pLApAQCAtMTA0MDUsMTUgKzEwNDA1
LDE1IEBAIHRyYXZlcnNlLnJlbW92ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAodHIKICAgcmV0dXJu
IHRyZWU7CiB9OwogCi1mdW5jdGlvbiBoYXNCbGFja2xpc3RlZFR5cGUocGF0aCwgc3RhdGUpIHsK
K2Z1bmN0aW9uIGhhc0Jsb2NrbGlzdGVkVHlwZShwYXRoLCBzdGF0ZSkgewogICBpZiAocGF0aC5u
b2RlLnR5cGUgPT09IHN0YXRlLnR5cGUpIHsKICAgICBzdGF0ZS5oYXMgPSB0cnVlOwogICAgIHBh
dGguc3RvcCgpOwogICB9CiB9CiAKLXRyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwg
c2NvcGUsIHR5cGUsIGJsYWNrbGlzdFR5cGVzKSB7Ci0gIGlmICgoMCwgX2luY2x1ZGVzMi5kZWZh
dWx0KShibGFja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwordHJhdmVyc2Uu
aGFzVHlwZSA9IGZ1bmN0aW9uICh0cmVlLCBzY29wZSwgdHlwZSwgYmxvY2tsaXN0VHlwZXMpIHsK
KyAgaWYgKCgwLCBfaW5jbHVkZXMyLmRlZmF1bHQpKGJsb2NrbGlzdFR5cGVzLCB0cmVlLnR5cGUp
KSByZXR1cm4gZmFsc2U7CiAKICAgaWYgKHRyZWUudHlwZSA9PT0gdHlwZSkgcmV0dXJuIHRydWU7
CiAKQEAgLTEwNDIzLDggKzEwNDIzLDggQEAgdHJhdmVyc2UuaGFzVHlwZSA9IGZ1bmN0aW9uICh0
cmVlLCBzY29wZQogICB9OwogCiAgIHRyYXZlcnNlKHRyZWUsIHsKLSAgICBibGFja2xpc3Q6IGJs
YWNrbGlzdFR5cGVzLAotICAgIGVudGVyOiBoYXNCbGFja2xpc3RlZFR5cGUKKyAgICBibG9ja2xp
c3Q6IGJsb2NrbGlzdFR5cGVzLAorICAgIGVudGVyOiBoYXNCbG9ja2xpc3RlZFR5cGUKICAgfSwg
c2NvcGUsIHN0YXRlKTsKIAogICByZXR1cm4gc3RhdGUuaGFzOwpAQCAtMTMyMjgsOCArMTMyMjgs
OCBAQCBtb2R1bGUuZXhwb3J0cyA9ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDYyCiAvKiA1NSAqLwog
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi0vKiBXRUJQQUNLIFZBUiBJTkpF
Q1RJT04gKi8oZnVuY3Rpb24oX193ZWJwYWNrX2FtZF9vcHRpb25zX18pIHsvKiBnbG9iYWxzIF9f
d2VicGFja19hbWRfb3B0aW9uc19fICovDQotbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1k
X29wdGlvbnNfXzsNCisvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oX193ZWJw
YWNrX2FtZF9vcHRpb25zX18pIHsvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICov
Cittb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fOwogCiAvKiBXRUJQQUNL
IFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywge30pKQogCkBAIC0zNzAxMiw3ICszNzAx
Miw3IEBAIGZ1bmN0aW9uIFR5cGVkQXJyYXlTcGVjaWVzQ3JlYXRlKHJlYWxtLCAKIHZhciBwcm9t
aXNlRXhpc3RzID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbic7CiAKIC8qIGVzbGludC1k
aXNhYmxlIG5vLXVuZGVmICovCi12YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdv
YmplY3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibGFja2xp
c3QKK3ZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDog
Z2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsb2NrbGlzdAogCiB2YXIgc3ltYm9s
RXhpc3RzID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCc7CiB2YXIgbWFwRXhpc3RzID0g
dHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCc7CkBAIC0xMTM4NDAsNyArMTEzODQwLDcgQEAgbW9k
dWxlLmV4cG9ydHMgPSAie1widmVyc2lvblwiOjMsXCJzb3VyYwogLyogNDExICovCiAvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8qIE1vb1Rv
b2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3IFtWYWxlcmlvIFByb2lldHRpXSho
dHRwczovL21vb3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIgQnVpbGQ6IGh0dHBzOi8vbW9vdG9v
bHMubmV0L2NvcmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgwN2IxNzNkNWRlZmY2NzNmY1xuKi9c
bi8qXG4tLS1cblxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlvbjogVGhlIGhlYXJ0IG9mIE1vb1Rv
b2xzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY29weXJpZ2h0OiBDb3B5cmln
aHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2th
bWljYW5lLykuXG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0dHA6
Ly9tb290b29scy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3BpcmF0aW9uOlxuICAtIENsYXNzIGlt
cGxlbWVudGF0aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRzLm5h
bWUvd2VibG9nLzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2FyZHMs
IFtHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9y
Zy9saWNlbnNlcy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBpbnNw
aXJlZCBieSBbUHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmlnaHQg
KGMpIDIwMDUtMjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNv
dXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuXG5wcm92aWRlczogW0NvcmUsIE1v
b1Rvb2xzLCBUeXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV1cblxuLi4uXG4qL1xuLyoh
IE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2ll
dHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4qL1xuKGZ1bmN0aW9uKCl7XG5cbnRo
aXMuTW9vVG9vbHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcsXG5cdGJ1aWxkOiAnNTI5NDIyODcy
YWRmZmY0MDFiOTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07XG5cbi8vIHR5cGVPZiwgaW5zdGFu
Y2VPZlxuXG52YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYg
KGl0ZW0gPT0gbnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYgKGl0ZW0uJGZhbWlseSAhPSBudWxs
KSByZXR1cm4gaXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0ZW0ubm9kZU5hbWUpe1xuXHRcdGlm
IChpdGVtLm5vZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVudCc7XG5cdFx0aWYgKGl0ZW0ubm9k
ZVR5cGUgPT0gMykgcmV0dXJuICgvXFxTLykudGVzdChpdGVtLm5vZGVWYWx1ZSkgPyAndGV4dG5v
ZGUnIDogJ3doaXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAn
bnVtYmVyJyl7XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0pIHJldHVybiAnYXJndW1lbnRzJztc
blx0XHRpZiAoJ2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29sbGVjdGlvbic7XG5cdH1cblxuXHRy
ZXR1cm4gdHlwZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFuY2VP
ZiA9IGZ1bmN0aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBm
YWxzZTtcblx0dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5jb25z
dHJ1Y3Rvcjtcblx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0XHRpZiAoY29uc3RydWN0b3IgPT09
IG9iamVjdCkgcmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5wYXJl
bnQ7XG5cdH1cblx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVtLmhhc093blByb3BlcnR5KSByZXR1
cm4gZmFsc2U7XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVj
dDtcbn07XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHk7XG5cbi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJsZXMgPSB0cnVlO1xuZm9yICh2YXIg
aSBpbiB7dG9TdHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7XG5pZiAoZW51bWVyYWJsZXMp
IGVudW1lcmFibGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBl
T2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcn
LCAnY29uc3RydWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShv
YmplY3QsIGZuLCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51bWVy
YWJsZXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVudW1lcmFibGVzW2ldO1xuXHRcdC8v
IHNpZ25hdHVyZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9hZFNldHRlciBjYW4gZGlyZWN0bHkg
cGFzcyB0aGVcblx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdpdGhvdXQgc3dhcHBpbmcgYXJndW1l
bnRzLlxuXHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwoYmlu
ZCwgaywgb2JqZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4PiovXG5cbi8vIEZ1bmN0aW9uIG92
ZXJsb2FkaW5nXG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247XG5cbkZ1bmN0aW9uLnBy
b3RvdHlwZS5vdmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxm
ID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmIChhID09IG51bGwpIHJl
dHVybiB0aGlzO1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlwZW9mIGEgIT0gJ3N0cmluZycpe1xu
XHRcdFx0Zm9yICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhpcywgaywgYVtrXSk7XG5cdFx0XHQv
KjxsdElFOD4qL1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KGEsIHNlbGYsIHRo
aXMpO1xuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuY2FsbCh0
aGlzLCBhLCBiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59O1xuXG5GdW5jdGlv
bi5wcm90b3R5cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIg
c2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtcblx0XHR2YXIgYXJncywgcmVzdWx0
O1xuXHRcdGlmICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJncyA9IGE7XG5cdFx0ZWxzZSBpZiAo
YXJndW1lbnRzLmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0ZWxzZSBpZiAodXNl
UGx1cmFsKSBhcmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtcblx0XHRcdHJlc3VsdCA9IHt9O1xu
XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJnc1tp
XV0gPSBzZWxmLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3Vs
dCA9IHNlbGYuY2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtc
bn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtc
blx0dGhpc1trZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbkZ1bmN0aW9uLnBy
b3RvdHlwZS5pbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpcy5wcm90b3R5
cGVba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG4vLyBGcm9tXG5cbnZhciBz
bGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJyYXkuY29udmVydCA9IGZ1bmN0aW9u
KGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107XG5cdHJldHVybiAoVHlwZS5p
c0VudW1lcmFibGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVPZihp
dGVtKSA9PSAnYXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dO1xufTtc
blxuRnVuY3Rpb24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKHR5cGVPZihp
dGVtKSA9PSAnZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBpdGVt
O1xuXHR9O1xufTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIg
bnVtYmVyID0gcGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJuIGlzRmluaXRlKG51bWJlcikgPyBu
dW1iZXIgOiBudWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0
cmV0dXJuIGl0ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlvbi5mcm9tID0gRnVuY3Rpb24uY29u
dmVydDtcbk51bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7XG5TdHJpbmcuZnJvbSA9IFN0cmlu
Zy5jb252ZXJ0O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5c
blx0aGlkZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRkZW4gPSB0cnVlO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kcHJvdGVj
dGVkID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLy8gVHlwZVxuXG52
YXIgVHlwZSA9IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCl7XG5cdGlmIChuYW1l
KXtcblx0XHR2YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHR5cGVDaGVj
ayA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gbG93ZXIp
O1xuXHRcdH07XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVDaGVjaztcblx0XHRpZiAo
b2JqZWN0ICE9IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0gKGZ1bmN0
aW9uKCl7XG5cdFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRcdH0pLmhpZGUoKTtcblx0XHRcdFxu
XHRcdH1cblx0fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0b2Jq
ZWN0LmV4dGVuZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1Y3RvciA9IFR5cGU7XG5cdG9iamVj
dC5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xuXG5cdHJldHVybiBvYmplY3Q7XG59
O1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5UeXBlLmlz
RW51bWVyYWJsZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKGl0ZW0gIT0gbnVsbCAmJiB0
eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9TdHJpbmcuY2FsbChpdGVtKSAhPSAn
W29iamVjdCBGdW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9va3MgPSB7fTtcblxudmFyIGhvb2tz
T2YgPSBmdW5jdGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90
eXBlKTtcblx0cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29rc1t0eXBlXSA9IFtdKTtcbn07XG5c
bnZhciBpbXBsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYm
IG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTtc
blxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgaG9v
ayA9IGhvb2tzW2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykgPT0gJ3R5cGUnKSBpbXBsZW1lbnQu
Y2FsbChob29rLCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2UgaG9vay5jYWxsKHRoaXMsIG5hbWUs
IG1ldGhvZCk7XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTtc
blx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXMucHJv
dG90eXBlW25hbWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlzW25hbWVdID09IG51bGwgJiYgdHlw
ZU9mKG1ldGhvZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNhbGwodGhpcywgbmFtZSwgZnVuY3Rp
b24oaXRlbSl7XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShpdGVtLCBzbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMSkpO1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cdHZhciBwcmV2
aW91cyA9IHRoaXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4k
cHJvdGVjdGVkKSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtcblxuVHlwZS5pbXBsZW1lbnQoe1xu
XG5cdGltcGxlbWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0ZXh0ZW5kOiBl
eHRlbmQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczogZnVuY3Rpb24obmFtZSwgZXhpc3Rp
bmcpe1xuXHRcdGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUsIHRoaXMucHJvdG90eXBlW2V4aXN0
aW5nXSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRtaXJyb3I6IGZ1bmN0aW9uKGhvb2sp
e1xuXHRcdGhvb2tzT2YodGhpcykucHVzaChob29rKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxubmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxuLy8gRGVmYXVsdCBUeXBlc1xuXG52
YXIgZm9yY2UgPSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1ldGhvZHMpe1xuXHR2YXIgaXNUeXBl
ID0gKG9iamVjdCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlwZSA9IG9iamVjdC5wcm90b3R5cGU7
XG5cblx0aWYgKGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTtcblxuXHRm
b3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHR2YXIg
a2V5ID0gbWV0aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBvYmplY3Rba2V5XSxcblx0XHRcdHBy
b3RvID0gcHJvdG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2VuZXJpYykgZ2VuZXJpYy5wcm90ZWN0
KCk7XG5cdFx0aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0LmltcGxlbWVudChrZXksIHByb3Rv
LnByb3RlY3QoKSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtcblx0XHR2YXIgbWV0aG9kc0VudW1l
cmFibGUgPSBwcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUobWV0aG9kc1swXSk7XG5cdFx0
b2JqZWN0LmZvckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoIW1ldGhvZHNF
bnVtZXJhYmxlKSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVttZXRob2RzW2ldXSwgbWV0
aG9kc1tpXSk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gcHJvdG90eXBlKSBmbi5j
YWxsKHByb3RvdHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7XG5cdFx0fTtcblx0fVxuXG5cdHJl
dHVybiBmb3JjZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBTdHJpbmcsIFtcblx0J2NoYXJBdCcs
ICdjaGFyQ29kZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycsICdpbmRleE9mJywgJ2xhc3RJbmRl
eE9mJywgJ21hdGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNoJyxcblx0J3NsaWNlJywg
J3NwbGl0JywgJ3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJpbScsICd0b0xvd2VyQ2FzZScsICd0
b1VwcGVyQ2FzZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5cdCdwb3AnLCAncHVzaCcsICdyZXZl
cnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pv
aW4nLCAnc2xpY2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdmaWx0ZXInLCAnZm9y
RWFjaCcsICdldmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAn
Y29udGFpbnMnXG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5cdCd0b0V4cG9uZW50aWFsJywgJ3Rv
Rml4ZWQnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nXG5dKSgnRnVuY3Rpb24nLCBG
dW5jdGlvbiwgW1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5kJ1xuXSkoJ1JlZ0V4cCcsIFJlZ0V4
cCwgW1xuXHQnZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcsIE9iamVjdCwgW1xuXHQnY3JlYXRl
JywgJ2RlZmluZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAna2V5cycsXG5cdCdnZXRQ
cm90b3R5cGVPZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlO
YW1lcycsXG5cdCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4dGVuc2libGUnLCAnc2VhbCcsICdp
c1NlYWxlZCcsICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgnRGF0ZScsIERhdGUsIFsnbm93J10p
O1xuXG5PYmplY3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCk7XG5cbkRhdGUuZXh0
ZW5kKCdub3cnLCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhuZXcgRGF0ZSk7XG59KTtcblxubmV3
IFR5cGUoJ0Jvb2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4ZXMgTmFOIHJldHVybmluZyBhcyBO
dW1iZXJcblxuTnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXtcblx0cmV0dXJu
IGlzRmluaXRlKHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7XG59LmhpZGUoKTtcblxuLy8gTnVt
YmVyLnJhbmRvbVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1heCl7
XG5cdHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBt
aW4pO1xufSk7XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNcblxuQXJyYXkuaW1wbGVtZW50KHtc
blxuXHQvKjwhRVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmIChpIGlu
IHRoaXMpIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxuXHQv
KjwvIUVTNT4qL1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRBcnJheS5mb3JF
YWNoKHRoaXMsIGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuT2Jq
ZWN0LmV4dGVuZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIga2V5cyA9
IFtdO1xuXHRcdGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0
eS5jYWxsKG9iamVjdCwgaykpIGtleXMucHVzaChrKTtcblx0XHR9XG5cdFx0Lyo8bHRJRTg+Ki9c
blx0XHRmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmdW5jdGlvbihrKXtcblx0
XHRcdGtleXMucHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwvbHRJRTg+Ki9cblx0XHRyZXR1cm4g
a2V5cztcblx0fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0
XHRPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdGZuLmNh
bGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9KTtcblx0fVxuXG59KTtc
blxuT2JqZWN0LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxuXG4vLyBBcnJheSAmIE9iamVjdCBj
bG9uaW5nLCBPYmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nXG5cbnZhciBjbG9uZU9mID0gZnVu
Y3Rpb24oaXRlbSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0pKXtcblx0XHRjYXNlICdhcnJheSc6
IHJldHVybiBpdGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2JqZWN0JzogcmV0dXJuIE9iamVjdC5j
bG9uZShpdGVtKTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRlbTtcblx0fVxufTtcblxuQXJyYXku
aW1wbGVtZW50KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBpID0gdGhpcy5sZW5ndGgsIGNs
b25lID0gbmV3IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2YodGhp
c1tpXSk7XG5cdHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIgbWVyZ2VPbmUgPSBmdW5jdGlvbihz
b3VyY2UsIGtleSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXtcblx0XHRj
YXNlICdvYmplY3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3VyY2Vba2V5XSkgPT0gJ29iamVjdCcp
IE9iamVjdC5tZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7XG5cdFx0XHRlbHNlIHNvdXJjZVtr
ZXldID0gT2JqZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYXJy
YXknOiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDog
c291cmNlW2tleV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVybiBzb3VyY2U7XG59O1xuXG5PYmpl
Y3QuZXh0ZW5kKHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXtcblx0XHRpZiAo
dHlwZU9mKGspID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VPbmUoc291cmNlLCBrLCB2KTtcblx0
XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIG9iamVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmpl
Y3QpIG1lcmdlT25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5XSk7XG5cdFx0fVxuXHRcdHJldHVy
biBzb3VyY2U7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGNs
b25lID0ge307XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgY2xvbmVba2V5XSA9IGNsb25l
T2Yob2JqZWN0W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1
bmN0aW9uKG9yaWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVkID0gYXJndW1lbnRzW2ldIHx8IHt9
O1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBvcmlnaW5hbFtrZXldID0gZXh0ZW5k
ZWRba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsO1xuXHR9XG5cbn0pO1xuXG4vLyBP
YmplY3QtbGVzcyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0ZVNwYWNlJywgJ1RleHROb2RlJywg
J0NvbGxlY3Rpb24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0bmV3IFR5
cGUobmFtZSk7XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZhciBVSUQgPSBEYXRlLm5vdygpO1xu
XG5TdHJpbmcuZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiAoVUlEKysp
LnRvU3RyaW5nKDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBBcnJh
eVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gsIGNv
bnRhaW5zLCBhbmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1
aXJlczogW1R5cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4uLi5cbiovXG5cbkFycmF5LmltcGxl
bWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRc
dFx0aWYgKChpIGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGZpbHRlcjog
ZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0gW107XG5cdFx0Zm9yICh2YXIg
dmFsdWUsIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspIGlmIChpIGlu
IHRoaXMpe1xuXHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwg
dmFsdWUsIGksIHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4g
cmVzdWx0cztcblx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHR2
YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0Zm9yICh2YXIgaSA9IChmcm9tIDwg
MCkgPyBNYXRoLm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0aDsg
aSsrKXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTtcblx0XHR9XG5cdFx0
cmV0dXJuIC0xO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciBs
ZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSBy
ZXN1bHRzW2ldID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRc
dFx0aWYgKChpIGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJl
dHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qPC8hRVM1Piov
XG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9u
KGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtcblx0XHR9KTtcblx0fSxcblxuXHRp
bnZva2U6IGZ1bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuc2xpY2Uo
YXJndW1lbnRzLCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7XG5cdFx0
XHRyZXR1cm4gaXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdzKTtcblx0XHR9KTtcblx0
fSxcblxuXHRhc3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xuXHRcdHZhciBvYmogPSB7fSwgbGVu
Z3RoID0gTWF0aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTtcblx0XHRmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0gPSB0aGlzW2ldO1xuXHRcdHJldHVy
biBvYmo7XG5cdH0sXG5cblx0bGluazogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgcmVzdWx0
ID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHRcdFx0aWYgKG9iamVjdFtrZXld
KHRoaXNbaV0pKXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHRoaXNbaV07XG5cdFx0XHRcdFx0
ZGVsZXRlIG9iamVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9
XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9u
KGl0ZW0sIGZyb20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4T2YoaXRlbSwgZnJvbSkgIT0gLTE7
XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dGhpcy5wdXNoLmFwcGx5
KHRoaXMsIGFycmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFd
IDogbnVsbDtcblx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0
aGlzLmxlbmd0aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0gOiBu
dWxsO1xuXHR9LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICghdGhpcy5j
b250YWlucyhpdGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNvbWJpbmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFy
cmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5W2ldKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0Zm9yICh2YXIg
aSA9IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSB0aGlz
LnNwbGljZShpLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1wdHk6
IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGZsYXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0Zm9y
ICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgdHlw
ZSA9IHR5cGVPZih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBlID09ICdudWxsJykgY29udGludWU7
XG5cdFx0XHRhcnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0g
J2NvbGxlY3Rpb24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlzW2ld
LCBBcnJheSkpID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNbaV0pO1xuXHRcdH1cblx0
XHRyZXR1cm4gYXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ld
ICE9IG51bGwpIHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxc
blxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCAhPSAz
KSByZXR1cm4gbnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVy
biBwYXJzZUludCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoYXJyYXkpID8gcmdi
IDogJ3JnYignICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJh
eSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRoaXMu
bGVuZ3RoID09IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3BhcmVu
dCc7XG5cdFx0dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKXtc
blx0XHRcdHZhciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2KTtcblx0XHRcdGhleC5w
dXNoKChiaXQubGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTtcblx0XHR9XG5cdFx0cmV0
dXJuIChhcnJheSkgPyBoZXggOiAnIycgKyBoZXguam9pbignJyk7XG5cdH1cblxufSk7XG5cblxu
XG4vKlxuLS0tXG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBGdW5j
dGlvbiBQcm90b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczog
RnVuY3Rpb25cblxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRlbmQoe1xuXG5cdGF0dGVtcHQ6IGZ1
bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwg
bDsgaSsrKXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhcmd1bWVudHNbaV0oKTtcblx0
XHRcdH0gY2F0Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxufSk7XG5c
bkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oYXJncywgYmluZCl7
XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZlcnQo
YXJncykpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5c
dC8qPCFFUzUtYmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0aGF0KXtcblx0XHR2YXIgc2VsZiA9
IHRoaXMsXG5cdFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGljZShh
cmd1bWVudHMsIDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5jdGlvbigpe307XG5cblx0XHR2YXIg
Ym91bmQgPSBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRleHQgPSB0aGF0LCBsZW5ndGggPSBh
cmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCl7XG5cdFx0
XHRcdEYucHJvdG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5cdFx0XHRcdGNvbnRleHQgPSBuZXcg
Rjtcblx0XHRcdH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFyZ3MgJiYgIWxlbmd0aClcblx0XHRc
dFx0PyBzZWxmLmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBzZWxmLmFwcGx5KGNvbnRleHQsIGFy
Z3MgJiYgbGVuZ3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBhcmdz
IHx8IGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0IDog
Y29udGV4dDtcblx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtcblx0fSxcblx0Lyo8LyFFUzUtYmlu
ZD4qL1xuXG5cdHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHZhciBzZWxmID0gdGhp
cztcblx0XHRpZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0
XHRyZXR1cm4gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBzZWxmLmFwcGx5KGJpbmQsIGFyZ3Mg
fHwgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRlbGF5OiBmdW5jdGlvbihkZWxheSwg
YmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQodGhpcy5wYXNzKChhcmdzID09IG51
bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9LFxuXG5cdHBlcmlvZGljYWw6IGZ1
bmN0aW9uKHBlcmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRJbnRlcnZhbCh0
aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBwZXJpb2RpY2FsKTtc
blx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogTnVtYmVyXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMsIGFu
ZCBjZWlsLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVc
blxucHJvdmlkZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51bWJlci5pbXBsZW1lbnQoe1xuXG5c
dGxpbWl0OiBmdW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0dXJuIE1hdGgubWluKG1heCwgTWF0
aC5tYXgobWluLCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uKHByZWNpc2lvbil7
XG5cdFx0cHJlY2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVkKHBy
ZWNpc2lvbiA8IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQodGhp
cyAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5cblx0dGltZXM6IGZ1bmN0aW9uKGZu
LCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChiaW5k
LCBpLCB0aGlzKTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBw
YXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRy
ZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH1cblxufSk7XG5cbk51bWJlci5h
bGlhcygnZWFjaCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24obWF0aCl7XG5cbnZhciBtZXRob2Rz
ID0ge307XG5cbm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtcblx0aWYgKCFOdW1iZXJbbmFtZV0p
IG1ldGhvZHNbbmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBNYXRoW25hbWVdLmFwcGx5
KG51bGwsIFt0aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChhcmd1bWVudHMpKSk7XG5cdH07XG59
KTtcblxuTnVtYmVyLmltcGxlbWVudChtZXRob2RzKTtcblxufSkoWydhYnMnLCAnYWNvcycsICdh
c2luJywgJ2F0YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3MnLCAnZXhwJywgJ2Zsb29yJywgJ2xv
ZycsICdtYXgnLCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3FydCcsICd0YW4nXSk7XG5cbi8qXG4t
LS1cblxubmFtZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJvdG90
eXBlcyBsaWtlIGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlLCBBcnJheV1cblxucHJv
dmlkZXM6IFN0cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5pbXBsZW1lbnQoe1xuXG5cdC8vPCFF
UzY+XG5cdGNvbnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGluZGV4KXtcblx0XHRyZXR1cm4gKGlu
ZGV4ID8gU3RyaW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhPZihz
dHJpbmcpID4gLTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5cdHRlc3Q6IGZ1bmN0aW9uKHJlZ2V4
LCBwYXJhbXMpe1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8gcmVn
ZXggOiBuZXcgUmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7XG5cdH0sXG5c
blx0dHJpbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15c
XHMrfFxccyskL2csICcnKTtcblx0fSxcblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5cdH0sXG5cblx0
Y2FtZWxDYXNlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgv
LVxcRC9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRv
VXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlwaGVuYXRlOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gp
e1xuXHRcdFx0cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7XG5c
dFx0fSk7XG5cdH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3Ry
aW5nKHRoaXMpLnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJl
dHVybiBtYXRjaC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGVzY2FwZVJlZ0V4
cDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4qKz9e
JHt9KCl8W1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1bmN0
aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0fSxc
blxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xu
XHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIGhleCA9IFN0cmlu
Zyh0aGlzKS5tYXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwyfSkoXFx3ezEsMn0pJC8pO1xuXHRc
dHJldHVybiAoaGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsO1xuXHR9
LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIHJnYiA9IFN0cmluZyh0
aGlzKS5tYXRjaCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSGV4
KGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCBy
ZWdleHApe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShyZWdleHAgfHwgKC9cXFxc
P1xceyhbXnt9XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7XG5cdFx0XHRpZiAobWF0
Y2guY2hhckF0KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNoLnNsaWNlKDEpO1xuXHRcdFx0cmV0
dXJuIChvYmplY3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0gOiAnJztcblx0XHR9KTtc
blx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogQnJvd3NlclxuXG5kZXNjcmlwdGlv
bjogVGhlIEJyb3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93c2VyIGluaXRpYWxpemF0aW9uLCBX
aW5kb3cgYW5kIERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIgSGFzaC5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIEZ1bmN0aW9uLCBOdW1iZXIsIFN0
cmluZ11cblxucHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3csIERvY3VtZW50XVxuXG4uLi5cbiov
XG5cbihmdW5jdGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xudmFyIHdp
bmRvdyA9IGRvY3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKHVh
LCBwbGF0Zm9ybSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcblx0cGxhdGZvcm0gPSAocGxh
dGZvcm0gPyBwbGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycpO1xuXG5cdC8vIGNocm9tZSBpcyBp
bmNsdWRlZCBpbiB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBjaGVjayBmb3IgZWRnZSBmaXJzdCxc
blx0Ly8gYmVmb3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLlxuXHR2YXIgVUEgPSB1YS5tYXRj
aCgvKGVkZ2UpW1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtcblx0aWYgKCFVQSl7XG5cdFx0VUEg
PSB1YS5tYXRjaCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVyc2lv
bilbXFxzXFwvOl0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJpfCg/OnJ2W1xcc1xcLzpdfHZlcnNp
b25bXFxzXFwvOl0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXTtc
blx0fVxuXG5cdGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xuXHRcdFVBWzFdID0gJ2llJztcblx0
XHRpZiAoVUFbNF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxzZSBpZiAoVUFbMV0gPT0gJ2NyaW9z
Jyl7XG5cdFx0VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5cdHBsYXRmb3JtID0gdWEubWF0Y2go
L2lwKD86YWR8b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRyb2lk
KS8pIHx8IHVhLm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhlciddKVswXTtcblx0aWYg
KHBsYXRmb3JtID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJztcblxuXHRyZXR1cm4ge1xu
XHRcdGV4dGVuZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxcblx0XHRuYW1lOiAoVUFbMV0g
PT0gJ3ZlcnNpb24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0dmVyc2lvbjogcGFyc2VGbG9hdCgo
VUFbMV0gPT0gJ29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6IFVBWzJdKSxcblx0XHRwbGF0Zm9y
bTogcGxhdGZvcm1cblx0fTtcbn07XG5cbnZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0gcGFy
c2UobmF2aWdhdG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuaWYgKEJyb3dz
ZXIubmFtZSA9PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSl7XG5cdEJyb3dzZXIudmVy
c2lvbiA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuQnJvd3Nlci5leHRlbmQoe1xuXHRG
ZWF0dXJlczoge1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5ldmFsdWF0ZSksXG5cdFx0YWlyOiAh
ISh3aW5kb3cucnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ip
LFxuXHRcdGpzb246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxuXHRwYXJzZVVBOiBwYXJzZVxufSk7
XG5cblxuXG4vLyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVzdCA9IChmdW5jdGlvbigpe1xuXG5c
dHZhciBYTUxIVFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0
KCk7XG5cdH07XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBB
Y3RpdmVYT2JqZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHZhciBNU1hNTCA9IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRU
UCcpO1xuXHR9O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0
WE1MSFRUUCgpO1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1T
WE1MMigpO1xuXHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwo
KTtcblx0XHRyZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgpO1xuXG5Ccm93c2VyLkZlYXR1cmVz
LnhociA9ICEhKEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4vLyBTdHJpbmcgc2NyaXB0c1xuXG5C
cm93c2VyLmV4ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtc
blx0aWYgKHdpbmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTtc
blx0fSBlbHNlIHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2Ny
aXB0Jyk7XG5cdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQn
KTtcblx0XHRzY3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGls
ZChzY3JpcHQpO1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0fVxu
XHRyZXR1cm4gdGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1lbnQoJ3N0cmlwU2NyaXB0cycsIGZ1
bmN0aW9uKGV4ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xuXHR2YXIgdGV4dCA9IHRoaXMucmVw
bGFjZSgvPHNjcmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihh
bGwsIGNvZGUpe1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdcXG4nO1xuXHRcdHJldHVybiAnJztc
blx0fSk7XG5cdGlmIChleGVjID09PSB0cnVlKSBCcm93c2VyLmV4ZWMoc2NyaXB0cyk7XG5cdGVs
c2UgaWYgKHR5cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBleGVjKHNjcmlwdHMsIHRleHQpO1xu
XHRyZXR1cm4gdGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERvY3VtZW50XG5cbkJyb3dzZXIuZXh0
ZW5kKHtcblx0RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5cdFdpbmRvdzogdGhpcy5XaW5kb3cs
XG5cdEVsZW1lbnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6IHRoaXMuRXZlbnRcbn0pO1xuXG50
aGlzLldpbmRvdyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ1dpbmRvdycsIGZ1bmN0
aW9uKCl7fSk7XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ3dpbmRvdycpLmhp
ZGUoKTtcblxuV2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHR3aW5kb3db
bmFtZV0gPSBtZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVudCA9IGRvY3VtZW50LiRjb25zdHJ1
Y3RvciA9IG5ldyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9uKCl7fSk7XG5cbmRvY3VtZW50LiRm
YW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcpLmhpZGUoKTtcblxuRG9jdW1lbnQu
bWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRvY3VtZW50W25hbWVdID0gbWV0aG9k
O1xufSk7XG5cbmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5pZiAo
IWRvY3VtZW50LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnaGVhZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7XG5cdGRv
Y3VtZW50LmV4ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VDYWNoZScsIGZhbHNlLCB0cnVlKTtc
bn0gY2F0Y2ggKGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0aGlzLmF0dGFjaEV2ZW50ICYmICF0
aGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2FkRXZlbnQgPSBmdW5jdGlvbigpe1xu
XHRcdHRoaXMuZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xuXHRcdGRvY3Vt
ZW50LmhlYWQgPSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDtcblx0XHR3
aW5kb3cgPSB0aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVsbDtcblx0fTtcblx0dGhpcy5hdHRh
Y2hFdmVudCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59XG5cbi8vIElFIGZhaWxzIG9uIGNv
bGxlY3Rpb25zIGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZlcnMgdG8gPHNlbGVjdD4pXG52YXIg
YXJyYXlGcm9tID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5cdGFycmF5RnJvbShkb2N1bWVudC5o
dG1sLmNoaWxkTm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFycmF5LmNvbnZlcnQgPSBmdW5jdGlv
bihpdGVtKXtcblx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycgJiYgVHlwZS5pc0VudW1l
cmFibGUoaXRlbSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJheScpe1xuXHRcdFx0dmFyIGkgPSBp
dGVtLmxlbmd0aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5cdFx0XHR3aGlsZSAoaS0tKSBhcnJh
eVtpXSA9IGl0ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXHRcdHJldHVybiBh
cnJheUZyb20oaXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlw
ZSxcblx0XHRzbGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0Wydwb3AnLCAncHVzaCcsICdyZXZl
cnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pv
aW4nLCAnc2xpY2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSBwcm90
b3R5cGVbbmFtZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJl
dHVybiBtZXRob2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDEpKTtcblx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNz
IEZ1bmN0aW9uIGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGlu
ZyByZXVzYWJsZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IFtBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXVxuXG5wcm92aWRlczogQ2xh
c3NcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIENsYXNzID0gdGhpcy5DbGFzcyA9
IG5ldyBUeXBlKCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7XG5cdGlmIChpbnN0YW5jZU9mKHBh
cmFtcywgRnVuY3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6ZTogcGFyYW1zfTtcblxuXHR2YXIg
bmV3Q2xhc3MgPSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdGlmIChuZXdDbGFz
cy4kcHJvdG90eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IG51bGw7XG5c
dFx0dGhpcy4kZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXpl
KSA/IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcztcblx0XHR0
aGlzLiRjYWxsZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9
LmV4dGVuZCh0aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxuXHRuZXdDbGFzcy4kY29uc3RydWN0
b3IgPSBDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG5ld0NsYXNz
O1xuXHRuZXdDbGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFyZW50O1xuXG5cdHJldHVybiBuZXdD
bGFzcztcbn0pO1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24oKXtcblx0aWYgKCF0aGlzLiRjYWxs
ZXIpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBhcmVudFwiIGNhbm5vdCBiZSBjYWxs
ZWQuJyk7XG5cdHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRuYW1lLFxuXHRcdHBhcmVudCA9IHRo
aXMuJGNhbGxlci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZpb3VzID0gKHBhcmVudCkgPyBwYXJl
bnQucHJvdG90eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVy
cm9yKCdUaGUgbWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFzIG5vIHBhcmVudC4nKTtcblx0cmV0
dXJuIHByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgcmVzZXQgPSBm
dW5jdGlvbihvYmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHR2YXIgdmFs
dWUgPSBvYmplY3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0Y2Fz
ZSAnb2JqZWN0Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlvbigpe307XG5cdFx0XHRcdEYucHJv
dG90eXBlID0gdmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXldID0gcmVzZXQobmV3IEYpO1xuXHRc
dFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5jbG9u
ZSgpOyBicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB3cmFw
ID0gZnVuY3Rpb24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kLiRvcmlnaW4pIG1l
dGhvZCA9IG1ldGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKG1ldGhvZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBuZXcg
RXJyb3IoJ1RoZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5c
dFx0dmFyIGNhbGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyO1xuXHRc
dHRoaXMuY2FsbGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3JhcHBlcjtcblx0XHR2YXIg
cmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0dGhpcy4kY2FsbGVy
ID0gY3VycmVudDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0
fS5leHRlbmQoeyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7XG5c
dHJldHVybiB3cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUsIHJldGFpbil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtc
blx0XHR2YWx1ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0
aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKHR5cGVPZih2YWx1
ZSkgPT0gJ2Z1bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRoaWRkZW4pIHJldHVybiB0aGlzO1xu
XHRcdHRoaXMucHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlzLCBr
ZXksIHZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5cGUs
IGtleSwgdmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG52YXIgZ2V0SW5zdGFu
Y2UgPSBmdW5jdGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7XG5cdHZh
ciBwcm90byA9IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZztcblx0cmV0
dXJuIHByb3RvO1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1lbnQu
b3ZlcmxvYWRTZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3JzID0ge1xuXG5cdEV4dGVuZHM6IGZ1
bmN0aW9uKHBhcmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5wcm90
b3R5cGUgPSBnZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxuXG5cdEltcGxlbWVudHM6IGZ1bmN0
aW9uKGl0ZW1zKXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0ZW0p
e1xuXHRcdFx0dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4g
aW5zdGFuY2UpIGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1ZSk7
XG5cdFx0fSwgdGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xh
c3MuRXh0cmFzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhhdCBj
YW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4ZWN1
dGlvbiBvZiBtYW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4sIEV2
ZW50cywgT3B0aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudGhpcy5DaGFpbiA9
IG5ldyBDbGFzcyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRjaGFpbjogZnVuY3Rpb24oKXtcblx0
XHR0aGlzLiRjaGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0
aGlzLiRjaGFpbi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBhcmd1
bWVudHMpIDogZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0
aGlzLiRjaGFpbi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIg
cmVtb3ZlT24gPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15v
bihbQS1aXSkvLCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5cdFx0cmV0dXJuIGZpcnN0LnRvTG93
ZXJDYXNlKCk7XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMgPSBuZXcgQ2xhc3Moe1xuXG5cdCRl
dmVudHM6IHt9LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwpe1xu
XHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxuXG5cdFx0dGhpcy4kZXZlbnRzW3R5
cGVdID0gKHRoaXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5jbHVkZShmbik7XG5cdFx0aWYgKGlu
dGVybmFsKSBmbi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAodmFyIHR5cGUgaW4gZXZlbnRz
KSB0aGlzLmFkZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dHlw
ZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07
XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0
KGFyZ3MpO1xuXHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkg
Zm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBh
cmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVF
dmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0
XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmIChldmVudHMgJiYgIWZu
LmludGVybmFsKXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTtcblx0XHRc
dGlmIChpbmRleCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2
YXIgdHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9y
ICh0eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xu
XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChldmVudHMpIGV2ZW50cyA9IHJlbW92
ZU9uKGV2ZW50cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMuJGV2ZW50cyl7XG5cdFx0XHRpZiAo
ZXZlbnRzICYmIGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtcblx0XHRcdHZhciBmbnMgPSB0aGlz
LiRldmVudHNbdHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0gZm5zLmxlbmd0aDsgaS0tOykgaWYg
KGkgaW4gZm5zKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudCh0eXBlLCBmbnNbaV0pO1xuXHRc
dFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudGhpcy5PcHRpb25z
ID0gbmV3IENsYXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRp
b25zID0gdGhpcy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFwcGx5KG51bGwsIFt7fSwgdGhpcy5v
cHRpb25zXS5hcHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnQpIGZvciAo
dmFyIG9wdGlvbiBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25d
KSAhPSAnZnVuY3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTtc
blx0XHRcdHRoaXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pO1xuXHRcdFx0ZGVs
ZXRlIG9wdGlvbnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7
XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuVGhlbmFibGVcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRv
IHlvdXIgb3duIENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhlbmFibGVcIi5cblxubGljZW5zZTog
TUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNz
LlRoZW5hYmxlXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgU1RBVEVfUEVORElO
RyA9IDAsXG5cdFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNUQVRFX1JFSkVDVEVEID0gMjtcblxu
dmFyIFRoZW5hYmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3Moe1xuXG5cdCR0aGVuYWJs
ZVN0YXRlOiBTVEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVSZXN1bHQ6IG51bGwsXG5cdCR0aGVu
YWJsZVJlYWN0aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHJl
c29sdmUodGhpcywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlamVjdDog
ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHN3aXRj
aCAodGhpcy4kdGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNlIFNUQVRFX1BFTkRJTkc6XG5cdFx0
XHRcdHJldHVybiAncGVuZGluZyc7XG5cblx0XHRcdGNhc2UgU1RBVEVfRlVMRklMTEVEOlxuXHRc
dFx0XHRyZXR1cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNhc2UgU1RBVEVfUkVKRUNURUQ6XG5c
dFx0XHRcdHJldHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0fSxcblxuXHRyZXNldFRoZW5hYmxl
OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJlc2V0
KHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRoZW46IGZ1bmN0aW9uKG9uRnVs
ZmlsbGVkLCBvblJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAnZnVu
Y3Rpb24nKSBvbkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5cdFx0aWYgKHR5cGVvZiBvblJlamVj
dGVkICE9PSAnZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Rocm93ZXInO1xuXG5cdFx0dmFyIHRo
ZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlzLiR0aGVuYWJsZVJlYWN0aW9ucy5w
dXNoKHtcblx0XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0XHRcdGZ1bGZpbGxIYW5kbGVyOiBv
bkZ1bGZpbGxlZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9uUmVqZWN0ZWRcblx0XHR9KTtcblxu
XHRcdGlmICh0aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHRcdHJl
YWN0KHRoaXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblxuXHQnY2F0
Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9u
UmVqZWN0ZWQpO1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5leHRlbmQoe1xuXHRyZXNvbHZlOiBm
dW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5j
ZW9mIFRoZW5hYmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCB2
YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblx0cmVqZWN0OiBmdW5j
dGlvbihyZWFzb24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdHJl
amVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH1cbn0pO1xu
XG4vLyBQcml2YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZXNvbHZlKHRoZW5hYmxlLCB2YWx1
ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5c
dFx0aWYgKHRoZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRyZWplY3QodGhlbmFibGUsIG5ldyBU
eXBlRXJyb3IoJ1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJsZSB3aXRoIGl0c2VsZi4nKSk7XG5c
dFx0fSBlbHNlIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBl
b2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZhciB0aGVuO1xuXHRcdFx0dHJ5IHtc
blx0XHRcdFx0dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xu
XHRcdFx0XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAo
dHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHR2YXIgcmVzb2x2ZWQgPSBmYWxz
ZTtcblx0XHRcdFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRc
dFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rp
b24obmV4dFZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0
XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodGhl
bmFibGUsIG5leHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxu
XHRcdFx0XHRcdFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRcdFx0XHRcdFx0XHRcdGlmICghcmVz
b2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0
XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRc
dFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChleGNlcHRpb24p
e1xuXHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkID0g
dHJ1ZTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0
XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0
XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRc
dGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZnVs
ZmlsbCh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09
IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVlO1xu
XHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfRlVMRklMTEVEO1xuXG5cdFx0cmVh
Y3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlamVjdCh0aGVuYWJsZSwgcmVhc29u
KXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0
XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxu
fVxuXG5mdW5jdGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVT
dGF0ZSAhPT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0g
bnVsbDtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG5cdH1c
bn1cblxuZnVuY3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2YXIgc3RhdGUgPSB0aGVuYWJsZS4k
dGhlbmFibGVTdGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQsXG5c
dFx0cmVhY3Rpb25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zLFxuXHRcdHR5cGU7XG5c
blx0aWYgKHN0YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmlsbEhhbmRsZXInO1xuXHR9IGVsc2Ug
aWYgKHN0YXRlID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFj
dGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRsZXInO1xuXHR9XG5cblx0aWYgKHR5
cGUpe1xuXHRcdGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQsIHJlYWN0aW9ucywgdHlwZV0pKTtc
blx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCByZWFjdGlvbnMsIHR5cGUpe1xuXHRm
b3IgKHZhciBpID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpe1xuXHRcdHZh
ciByZWFjdGlvbiA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhhbmRsZXIgPSByZWFjdGlvblt0eXBl
XTtcblxuXHRcdGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHknKXtcblx0XHRcdHJlc29sdmUocmVh
Y3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGlmIChoYW5kbGVyID09PSAnVGhy
b3dlcicpe1xuXHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCBo
YW5kbGVyKHJlc3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVq
ZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxu
fVxuXG52YXIgZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHR5
cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKXtcblx0ZGVmZXIgPSBwcm9jZXNz
Lm5leHRUaWNrO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVk
Jyl7XG5cdGRlZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIHtcblx0ZGVmZXIgPSBmdW5jdGlv
bihmbil7XG5cdFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07XG59XG5cbn0pKCk7XG5cbi8qXG4t
LS1cblxubmFtZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBPYmplY3QgZ2VuZXJpYyBtZXRob2Rz
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92
aWRlczogW09iamVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuT2JqZWN0
LmV4dGVuZCh7XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmplY3QsIGtleXMpe1xuXHRcdHZhciBy
ZXN1bHRzID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHRpZiAoayBpbiBvYmplY3QpIHJl
c3VsdHNba10gPSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxu
XG5cdG1hcDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7
fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRc
dFx0cmVzdWx0c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3Qp
O1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9u
KG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMg
PSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5n
dGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5XTtc
blx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNba2V5
XSA9IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRldmVyeTog
ZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhv
YmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0
XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5
XSwga2V5KSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHRzb21lOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVj
dC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsr
KXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgb2Jq
ZWN0W2tleV0sIGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5c
dH0sXG5cblx0dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZXMgPSBbXTtc
blx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7
IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRcdHZh
bHVlcy5wdXNoKG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5c
blx0Z2V0TGVuZ3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhv
YmplY3QpLmxlbmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7
XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAw
OyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRc
dGlmIChvYmplY3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBrZXk7XG5cdFx0fVxuXHRcdHJldHVy
biBudWxsO1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0
XHRyZXR1cm4gT2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7XG5cdH0sXG5cblx0
dG9RdWVyeVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNlKXtcblx0XHR2YXIgcXVlcnlTdHJp
bmcgPSBbXTtcblxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7
XG5cdFx0XHRpZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJztcblx0XHRcdHZh
ciByZXN1bHQ7XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0XHRjYXNlICdv
YmplY3QnOiByZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1ZSwga2V5KTsgYnJlYWs7
XG5cdFx0XHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2YXIgcXMgPSB7fTtcblx0XHRcdFx0
XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdFx0XHRxc1tpXSA9IHZhbDtc
blx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyhx
cywga2V5KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogcmVzdWx0ID0ga2V5
ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2
YWx1ZSAhPSBudWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7XG5cdFx0fSk7XG5cblx0XHRy
ZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG5cblxu
Lypcbi0tLVxubmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBDU1Mz
IFNlbGVjdG9yIHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1
bmN0aW9uKCl7XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRvckluZGV4LFxuXHRjb21iaW5hdG9y
SW5kZXgsXG5cdHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxuXHRyZXZlcnNlQ2FjaGUgPSB7fSxc
blx0cmVVbmVzY2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Np
b24sIGlzUmV2ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDtc
blx0aWYgKGV4cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJldHVybiBleHByZXNzaW9uO1xuXHRl
eHByZXNzaW9uID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycp
O1xuXHRyZXZlcnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFyIGN1cnJlbnRDYWNoZSA9IChyZXZl
cnNlZCkgPyByZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYgKGN1cnJlbnRDYWNoZVtleHByZXNz
aW9uXSkgcmV0dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXTtcblx0cGFyc2VkID0ge1xuXHRc
dFNsaWNrOiB0cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxcblx0XHRyYXc6IGV4cHJlc3Npb24s
XG5cdFx0cmV2ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBwYXJzZSh0aGlzLnJhdywg
dHJ1ZSk7XG5cdFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRleCA9IC0xO1xuXHR3aGlsZSAoZXhw
cmVzc2lvbiAhPSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNl
cikpKTtcblx0cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGg7XG5cdHJl
dHVybiBjdXJyZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2ZXJzZWQpID8gcmV2ZXJzZShwYXJz
ZWQpIDogcGFyc2VkO1xufTtcblxudmFyIHJldmVyc2VDb21iaW5hdG9yID0gZnVuY3Rpb24oY29t
YmluYXRvcil7XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7XG5cdGVsc2Ug
aWYgKGNvbWJpbmF0b3IgPT09ICcgJykgcmV0dXJuICchJztcblx0ZWxzZSBpZiAoKC9eIS8pLnRl
c3QoY29tYmluYXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJlcGxhY2UoL14hLywgJycpO1xuXHRl
bHNlIHJldHVybiAnIScgKyBjb21iaW5hdG9yO1xufTtcblxudmFyIHJldmVyc2UgPSBmdW5jdGlv
bihleHByZXNzaW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9u
cztcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0
dmFyIGV4cCA9IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFn
OiAnKicsIGNvbWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07
XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5ndGg7IGorKyl7XG5cdFx0XHR2YXIg
Y2V4cCA9IGV4cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZlcnNlQ29tYmluYXRvcikgY2V4cC5y
ZXZlcnNlQ29tYmluYXRvciA9ICcgJztcblx0XHRcdGNleHAuY29tYmluYXRvciA9IGNleHAucmV2
ZXJzZUNvbWJpbmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0
XHR9XG5cblx0XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7XG5cdH1cblx0cmV0dXJuIGV4cHJl
c3Npb247XG59O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKXsvLyBDcmVk
aXQ6IFhSZWdFeHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2ZW4gTGV2aXRoYW4gPGh0dHA6Ly9z
dGV2ZW5sZXZpdGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1JVCBMaWNlbnNlXG5cdHJldHVybiBz
dHJpbmcucmVwbGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8LCNcXHNdL2csIGZ1bmN0aW9uKG1h
dGNoKXtcblx0XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5cdH0pO1xufTtcblxudmFyIHJlZ2V4
cCA9IG5ldyBSZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYgcnVieVxucHV0cyBcIlxcdFxcdFwi
ICsgREFUQS5yZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMuKiR8XFxzK3xcXFxcJHxcXFxcbi8s
JycpXG5fX0VORF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxcXFxzKiAoICwgKSBcXFxccyogICAg
ICAgICAgICAgICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5cXFxuXHR8IFxcXFxzKiAoIDxjb21i
aW5hdG9yPisgKSBcXFxccyogICAjIENvbWJpbmF0b3IgICAgICAgICBcXG5cXFxuXHR8ICAgICAg
KCBcXFxccysgKSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXFxuXFxcblx0
fCAgICAgICggPHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMgVGFnICAgICAgICAgICAgICAgIFxc
blxcXG5cdHwgXFxcXCMgICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIElEICAgICAgICAgICAg
ICAgICBcXG5cXFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05h
bWUgICAgICAgICAgXFxuXFxcblx0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0
dHJpYnV0ZSAgICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxcblx0XHRcXFxccyogKDx1bmljb2Rl
MT4rKSAgKD86ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58XT89KSAgKD86ICBcXFxuXHRcdFx0
XHRcXFxccyogKD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8pKC4qPylcXFxcOSBcXFxuXHRcdFx0
XHQpXFxcblx0XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAgXFxcblx0XFxcXF0oPyFcXFxcXSkg
XFxuXFxcblx0fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxcblx0XFxcXCggKD86XFxcblx0XHQo
PzooW1xcXCInXSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0q
KSspXFxcblx0KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4qL1xuXHRcIl4oPzpcXFxccyooLClc
XFxccyp8XFxcXHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChcXFxccyspfCg8dW5pY29kZT4rfFxc
XFwqKXxcXFxcIyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29kZT4rKXxcXFxcW1xcXFxzKig8dW5p
Y29kZTE+KykoPzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxccyooPzooW1xcXCInXT8pKC4qPylc
XFxcOSkpKT9cXFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1bmljb2RlPispKD86XFxcXCgoPzoo
PzooW1xcXCInXSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0q
KSspKVxcXFwpKT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5hdG9yPi8sICdbJyArIGVzY2FwZVJl
Z0V4cCgnPit+YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylcblx0LnJlcGxhY2UoLzx1bmljb2Rl
Pi9nLCAnKD86W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEt
Zl0pJylcblx0LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFxcXHdcXFxcdTAwYTEtXFxc
XHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuKTtcblxuZnVuY3Rpb24gcGFyc2Vy
KFxuXHRyYXdNYXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNvbWJpbmF0b3IsXG5cdGNvbWJpbmF0
b3JDaGlsZHJlbixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0Y2xhc3NOYW1lLFxuXG5cdGF0dHJp
YnV0ZUtleSxcblx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0dHJpYnV0ZVF1b3RlLFxuXHRhdHRy
aWJ1dGVWYWx1ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBzZXVkb0NsYXNzLFxuXHRwc2V1ZG9R
dW90ZSxcblx0cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0cHNldWRvQ2xhc3NWYWx1ZVxuKXtc
blx0aWYgKHNlcGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdHBhcnNlZC5l
eHByZXNzaW9uc1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xuXHRcdGNvbWJpbmF0b3JJbmRleCA9
IC0xO1xuXHRcdGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztcblx0fVxuXG5cdGlmIChjb21iaW5h
dG9yIHx8IGNvbWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5hdG9ySW5kZXggPT09IC0xKXtcblx0
XHRjb21iaW5hdG9yID0gY29tYmluYXRvciB8fCAnICc7XG5cdFx0dmFyIGN1cnJlbnRTZXBhcmF0
b3IgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdO1xuXHRcdGlmIChyZXZlcnNl
ZCAmJiBjdXJyZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0pXG5cdFx0XHRjdXJyZW50U2Vw
YXJhdG9yW2NvbWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJpbmF0b3IgPSByZXZlcnNlQ29tYmlu
YXRvcihjb21iaW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4
XSA9IHtjb21iaW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307XG5cdH1cblxuXHR2YXIgY3Vy
cmVudFBhcnNlZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRleF1bY29tYmluYXRv
ckluZGV4XTtcblxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3VycmVudFBhcnNlZC50YWcgPSB0YWdO
YW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoaWQpe1xuXHRcdGN1
cnJlbnRQYXJzZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2Ug
aWYgKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UocmVVbmVz
Y2FwZSwgJycpO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCkgY3VycmVudFBh
cnNlZC5jbGFzc0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3Vy
cmVudFBhcnNlZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFzc0xpc3QucHVz
aChjbGFzc05hbWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3Nlcy5wdXNoKHtcblx0XHRcdHZh
bHVlOiBjbGFzc05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBl
c2NhcGVSZWdFeHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCknKVxuXHRcdH0pO1xuXG5cdH0gZWxz
ZSBpZiAocHNldWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1Zh
bHVlIHx8IHBzZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBz
ZXVkb0NsYXNzVmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycp
IDogbnVsbDtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5wc2V1ZG9zKSBjdXJyZW50UGFyc2Vk
LnBzZXVkb3MgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBzZXVkb3MucHVzaCh7XG5cdFx0XHRr
ZXk6IHBzZXVkb0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpLFxuXHRcdFx0dmFsdWU6IHBz
ZXVkb0NsYXNzVmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9NYXJrZXIubGVuZ3RoID09IDEgPyAn
Y2xhc3MnIDogJ2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChhdHRyaWJ1dGVLZXkp
e1xuXHRcdGF0dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcn
KTtcblx0XHRhdHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8fCAnJykucmVwbGFjZShy
ZVVuZXNjYXBlLCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVnZXhwO1xuXG5cdFx0c3dpdGNoIChh
dHRyaWJ1dGVPcGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhw
KCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBi
cmVhaztcblx0XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAg
ZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrO1xuXHRcdFx0
Y2FzZSAnfj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxcXFxzKScrIGVzY2FwZVJlZ0V4
cChhdHRyaWJ1dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfD0n
IDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRl
VmFsdWUpICsnKC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICAnPScgOiB0ZXN0ID0gZnVu
Y3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgPT0gdmFsdWU7XG5c
dFx0XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7
XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+
IC0xO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgIT0gdmFsdWU7XG5cdFx0XHR9
OyBicmVhaztcblx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
XHRcdHJldHVybiAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRl
VmFsdWUgPT0gJycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0
ID0gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0aWYgKCF0
ZXN0KSB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlICYmIHJlZ2V4
cC50ZXN0KHZhbHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmF0dHJpYnV0
ZXMpIGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuYXR0
cmlidXRlcy5wdXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRlS2V5LFxuXHRcdFx0b3BlcmF0b3I6
IGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0dHJpYnV0ZVZhbHVlLFxuXHRcdFx0
dGVzdDogdGVzdFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1cm4gJyc7XG59O1xuXG4vLyBTbGlj
ayBOU1xuXG52YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnBhcnNlID0g
ZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJzZShleHByZXNzaW9uKTtcbn07XG5c
blNsaWNrLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcblxuaWYgKCF0aGlzLlNsaWNrKSB0
aGlzLlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBv
cnRzICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxu
Lypcbi0tLVxubmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlwdGlvbjogVGhlIG5ldywgc3VwZXJm
YXN0IGNzcyBzZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczogU2xpY2suRmluZGVyXG5yZXF1aXJl
czogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIGxvY2FsID0g
e30sXG5cdGZlYXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nO1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVjdGlvblxuXG5sb2NhbC5pc05hdGl2
ZUNvZGUgPSBmdW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xce1xccypcXFtuYXRpdmUgY29kZVxc
XVxccypcXH0vKS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9jYWwuaXNYTUwgPSBmdW5jdGlvbihk
b2N1bWVudCl7XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1bWVu
dC54bWwpIHx8ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1bWVu
dF0nKSB8fFxuXHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAmJiBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQubm9kZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxvY2FsLnNldERvY3VtZW50ID0gZnVu
Y3Rpb24oZG9jdW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJndW1l
bnRzIHRvIGRvY3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0aGUg
ZnVuY3Rpb24gcmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7XG5c
dGlmIChub2RlVHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0ZWxzZSBpZiAobm9kZVR5cGUpIGRv
Y3VtZW50ID0gZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZVxuXHRlbHNlIGlmIChkb2N1
bWVudC5uYXZpZ2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRvd1xu
XHRlbHNlIHJldHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnRcblxu
XHRpZiAodGhpcy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjtcblx0dGhpcy5kb2N1bWVu
dCA9IGRvY3VtZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRldGVj
dGlvbiBvbiB0aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZhciByb290ID0gZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdldFVJRFhNTChyb290KSxcblx0XHRm
ZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5cdFx0ZmVhdHVyZTtcblxuXHRpZiAo
ZmVhdHVyZXMpe1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0XHR0aGlzW2Zl
YXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5c
dGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9O1xuXG5cdGZlYXR1cmVzLnJv
b3QgPSByb290O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1bWVu
dCk7XG5cblx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5cdD0gZmVhdHVyZXMuc3RhclNlbGVj
dHNDbG9zZWRRU0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1lXG5cdD0gZmVhdHVyZXMuYnJva2Vu
TWl4ZWRDYXNlUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VCQ05cblx0PSBmZWF0dXJlcy5icm9r
ZW5DaGVja2VkUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Fcblx0PSBm
ZWF0dXJlcy5pc0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
clxuXHQ9IGZhbHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Nsb3NlZCwgc3RhclNlbGVjdHNDb21t
ZW50cyxcblx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVudHNC
eUNsYXNzTmFtZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyO1xuXG5cdHZhciBzZWxl
Y3RlZCwgaWQgPSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIgdGVzdE5vZGUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5IHx8
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDtcblx0dGVz
dFJvb3QuYXBwZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8vIG9uIG5vbi1IVE1MIGRvY3VtZW50
cyBpbm5lckhUTUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2VzbnQgd29yayBwcm9wZXJseVxuXHR0
cnkge1xuXHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBpZD1cIicraWQrJ1wiPjwvYT4nO1xu
XHRcdGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChp
ZCk7XG5cdH0gY2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQpe1xu
XG5cdFx0dGVzdE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuXHRcdC8vIElFIHJldHVy
bnMgY29tbWVudCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBk
b2N1bWVudHNcblx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50
KCcnKSk7XG5cdFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnKicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjbG9zZWQgbm9k
ZXMgKEVHOlwiPC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21l
IGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9m
b28+Jztcblx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KTtcblx0XHRcdHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVu
Z3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdH0gY2F0
Y2ggKGUpe307XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4gPSBzdGFyU2VsZWN0c0Nv
bW1lbnRzIHx8IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBlbGVtZW50
cyB3aXRoIHRoZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBmb3IgZ2V0RWxlbWVudHNCeUlkIGZv
ciBzb21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAn
PGEgbmFtZT1cIicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysgaWQgKydcIj48L2I+Jztcblx0XHRc
dGZlYXR1cmVzLmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgPT09IHRl
c3ROb2RlLmZpcnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0aWYgKHRlc3ROb2Rl
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIGdldEVsZW1l
bnRzQnlDbGFzc05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3RO
b2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+PGEgY2xhc3M9XCJiXCI+PC9hPic7
XG5cdFx0XHRcdHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGg7XG5c
dFx0XHRcdHRlc3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InO1xuXHRcdFx0XHRjYWNo
ZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoJ2InKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBP
cGVyYSA5LjYgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2VzbnQgZGV0ZWN0cyB0aGUgY2xhc3Mg
aWYgaXRzIG5vdCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5p
bm5lckhUTUwgPSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNsYXNzPVwiZiBiIGFcIj48L2E+Jztc
blx0XHRcdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04gPSAodGVzdE5vZGUuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxu
XHRcdFx0ZmVhdHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1l
IHx8IGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRcdH1cblxuXHRcdGlmICh0ZXN0Tm9k
ZS5xdWVyeVNlbGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9kZXMg
KEVHOlwiPC9mb28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxsKCcqJykgZm9yIHNvbWUgZG9jdW1l
bnRzXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+
Jztcblx0XHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XG5c
dFx0XHRcdGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBID0gKHNlbGVjdGVkICYmICEhc2Vs
ZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xu
XHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIHF1ZXJ5U2VsZWN0b3JB
bGwgZG9lc250IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVpcmtzbW9kZVxuXHRcdFx0dHJ5IHtc
blx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiTWlYXCI+PC9hPic7XG5c
dFx0XHRcdGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNlbGVj
dG9yQWxsKCcuTWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBX
ZWJraXQgYW5kIE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlTZWxl
Y3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxzZWxl
Y3Q+PG9wdGlvbiBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7XG5c
dFx0XHRcdGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3Rv
ckFsbCgnOmNoZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5c
dFx0XHQvLyBJRSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09XCJcIiBz
ZWxlY3RvcnMgb24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5v
ZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJy
b2tlbkVtcHR5QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFz
cyo9XCJcIl0nKS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHR9XG5c
blx0XHQvLyBJRTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdldEF0
dHJpYnV0ZSh4KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dFxuXHRcdHRyeSB7XG5c
dFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0aW9uPVwic1wiPjxpbnB1dCBpZD1c
ImFjdGlvblwiLz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIgPSAo
dGVzdE5vZGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7XG5cdFx0
fSBjYXRjaCAoZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlvblxu
XG5cdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8IC8q
cm9vdC5tc01hdGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJv
b3Qud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChmZWF0dXJlcy5uYXRpdmVNYXRjaGVz
U2VsZWN0b3IpIHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVzU2VsZWN0b3IgdHJvd3MgZXJyb3Jz
IG9uIGluY29ycmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0XG5cdFx0XHRmZWF0dXJlcy5uYXRp
dmVNYXRjaGVzU2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNrJyk7XG5cdFx0XHRmZWF0dXJlcy5u
YXRpdmVNYXRjaGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHR9XG5c
blx0dHJ5IHtcblx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAxO1xuXHRcdGRlbGV0ZSByb290LnNs
aWNrX2V4cGFuZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MO1xuXHR9
IGNhdGNoIChlKXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDtcblx0fVxu
XG5cdHRlc3RSb290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtcblx0dGVzdE5vZGUgPSBzZWxlY3Rl
ZCA9IHRlc3RSb290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5n
ZXRBdHRyaWJ1dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgJiYgYnJva2VuRm9ybUF0dHJp
YnV0ZUdldHRlcikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhp
cy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmIChtZXRob2QpIHJldHVybiBtZXRob2Qu
Y2FsbChub2RlKTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9k
ZShuYW1lKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUpID8gYXR0cmlidXRlTm9kZS5ub2Rl
VmFsdWUgOiBudWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhv
ZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRyZXR1cm4gKG1ldGhvZCkgPyBt
ZXRob2QuY2FsbChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9O1xuXG5cdC8v
IGhhc0F0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMu
aXNOYXRpdmVDb2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1
dGUpe1xuXHRcdHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHR9IDogZnVu
Y3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2Rl
KGF0dHJpYnV0ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUuc3BlY2lmaWVkIHx8IG5v
ZGUubm9kZVZhbHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFpbnNcblx0Ly8gRklYTUU6IEFkZCBz
cGVjczogbG9jYWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgeG1sIGFuZCBodG1s
IGRvY3VtZW50cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlucyA9IHJvb3QgJiYgdGhpcy5pc05h
dGl2ZUNvZGUocm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZlRG9jdW1lbnRDb250YWlucyA9IGRv
Y3VtZW50ICYmIHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50LmNvbnRhaW5zKTtcblxuXHRmZWF0
dXJlcy5jb250YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMgJiYgbmF0aXZlRG9jdW1lbnRDb250
YWlucykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dC5jb250
YWlucyhub2RlKTtcblx0fSA6IChuYXRpdmVSb290Q29udGFpbnMgJiYgIW5hdGl2ZURvY3VtZW50
Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0Ly8gSUU4IGRvZXMgbm90
IGhhdmUgLmNvbnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2Rl
IHx8ICgoY29udGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDog
Y29udGV4dCkuY29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9vdCAmJiByb290LmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250
ZXh0ID09PSBub2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkg
JiAxNik7XG5cdH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRpZiAobm9kZSkgZG8g
e1xuXHRcdFx0aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlO1xuXHRcdH0gd2hpbGUg
KChub2RlID0gbm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5c
dC8vIGRvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3JlZGl0cyB0byBTaXp6bGUgKGh0dHA6
Ly9zaXp6bGVqcy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3VtZW50U29ydGVyID0gKHJvb3QuY29t
cGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSByZXR1cm4g
MDtcblx0XHRyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEg
PT09IGIgPyAwIDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgnIGluIHJvb3QpID8gZnVuY3Rpb24o
YSwgYil7XG5cdFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4g
MDtcblx0XHRyZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cdH0gOiAoZG9j
dW1lbnQuY3JlYXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLm93bmVyRG9j
dW1lbnQgfHwgIWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7XG5cdFx0dmFyIGFSYW5nZSA9IGEu
b3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2UgPSBiLm93bmVyRG9jdW1lbnQuY3Jl
YXRlUmFuZ2UoKTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7XG5cdFx0YVJhbmdlLnNldEVu
ZChhLCAwKTtcblx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7XG5cdFx0YlJhbmdlLnNldEVuZChi
LCAwKTtcblx0XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFS
VF9UT19FTkQsIGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5cdHJvb3QgPSBudWxsO1xuXG5cdGZv
ciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2Zl
YXR1cmVdO1xuXHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxuXG52YXIgcmVTaW1wbGVTZWxlY3Rv
ciA9IC9eKFsjLl0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5cdHJlRW1wdHlBdHRyaWJ1dGUgPSAv
XFxbLitbKiReXT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FGYWlsRXhwQ2FjaGUgPSB7fTtcblxu
bG9jYWwuc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBmaXJz
dCl7XG5cblx0dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChmaXJzdCkgPyBudWxsIDogKGFwcGVu
ZCB8fCBbXSk7XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7XG5cdGVsc2UgaWYgKGNv
bnRleHQubmF2aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVydCB0
aGUgbm9kZSBmcm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRcblx0ZWxzZSBpZiAoIWNvbnRleHQu
bm9kZVR5cGUpIHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1cFxuXG5cdHZhciBwYXJzZWQsIGks
IG5vZGUsIG5vZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSxcblx0XHRoYXNP
dGhlcnMgPSAhIShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCksXG5cdFx0Y29udGV4dElzRG9jdW1l
bnQgPSAoY29udGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRpZiAodGhpcy5kb2N1bWVudCAhPT0g
KGNvbnRleHRJc0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRleHQub3duZXJEb2N1bWVudCkpIHRo
aXMuc2V0RG9jdW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMg
YWxyZWFkeSBpbiB0aGUgYXBwZW5kIGFycmF5XG5cdGlmIChoYXNPdGhlcnMpIGZvciAoaSA9IGZv
dW5kLmxlbmd0aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJRChmb3VuZFtpXSldID0gdHJ1ZTtc
blxuXHQvLyBleHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAn
c3RyaW5nJyl7IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdcblxuXHRcdC8qPHNpbXBsZS1zZWxl
Y3RvcnMtb3ZlcnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2VsZWN0b3IgPSBleHByZXNzaW9uLm1h
dGNoKHJlU2ltcGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNl
bGVjdG9yKXtcblxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLFxuXHRcdFx0
XHRuYW1lID0gc2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRcdGlmICghc3ltYm9sKXtcblxuXHRc
dFx0XHRpZiAobmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5TdGFyR0VCVE4pIGJyZWFrIHNpbXBs
ZVNlbGVjdG9ycztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1l
KG5hbWUpO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRc
dFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdGlmICghKGhh
c090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7
XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJyMnKXtcblxuXHRcdFx0
XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVhayBz
aW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG5h
bWUpO1xuXHRcdFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3VuZDtcblx0XHRcdFx0aWYgKHRoaXMu
aWRHZXRzTmFtZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IG5h
bWUpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9k
ZSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJ
RChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJvbCA9
PSAnLicpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250ZXh0
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4dC5x
dWVyeVNlbGVjdG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAoY29u
dGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRc
dFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTtcblx0XHRc
dFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRcdGZvciAo
aSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMg
JiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0
XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2hDbGFzcyA9IG5ldyBS
ZWdFeHAoJyhefFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4cChuYW1lKSArJyhcXFxcc3wkKScp
O1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xu
XHRcdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRj
bGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRcdGlmICghKGNsYXNzTmFtZSAm
JiBtYXRjaENsYXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aWYg
KGZpcnN0KSByZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlx
dWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxu
XHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZv
dW5kKTtcblx0XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6IGZvdW5kO1xuXG5cdFx0fVxuXHRc
dC8qPC9zaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cblx0XHQvKjxxdWVyeS1zZWxlY3Rv
ci1vdmVycmlkZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2VsZWN0
b3JBbGwpe1xuXG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnRcblx0XHRcdFx0fHwgcXNh
RmFpbEV4cENhY2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8vVE9ETzogb25seSBza2lwIHdoZW4g
ZXhwcmVzc2lvbiBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5cdFx0XHRcdHx8IHRoaXMuYnJva2Vu
TWl4ZWRDYXNlUVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhwcmVz
c2lvbi5pbmRleE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkVt
cHR5QXR0cmlidXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSlcblx0
XHRcdFx0fHwgKCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0IHdoZW4gIWNvbnRleHRJc0RvY3Vt
ZW50IGFuZC4uLlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMg
aW4gdGhlIHNlbGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5IGZp
eCBub24tZG9jdW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0b3Jz
XG5cdFx0XHRcdFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcsJykgPiAtMVxuXHRcdFx0XHQpXG5c
dFx0XHRcdHx8IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkgYnJlYWsgcXVlcnlTZWxlY3Rvcjtc
blxuXHRcdFx0dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250ZXh0
LCBjdXJyZW50SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0Ly8g
bm9uLWRvY3VtZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8gY3JlZGl0cyB0byBBbmRyZXcgRHVw
b250XG5cdFx0XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2xp
Y2tpZCA9ICdzbGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywg
c2xpY2tpZCk7XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMnICsgc2xpY2tpZCArICcgJyArIF9l
eHByZXNzaW9uO1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTtcblx0XHRc
dH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gY29udGV4dC5xdWVy
eVNlbGVjdG9yKF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRcdFx0XHRlbHNlIG5vZGVzID0gY29u
dGV4dC5xdWVyeVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xu
XHRcdFx0XHRxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxO1xuXHRcdFx0XHRicmVhayBx
dWVyeVNlbGVjdG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKCFjb250ZXh0SXNE
b2N1bWVudCl7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkgX2NvbnRleHQuc2V0QXR0cmlidXRl
KCdpZCcsIGN1cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBfY29udGV4dC5yZW1vdmVBdHRyaWJ1
dGUoJ2lkJyk7XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0
XHR9XG5cblx0XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAwOyBu
b2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA+ICdAJyAmJiAh
KGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9k
ZSk7XG5cdFx0XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRc
dFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQu
cHVzaChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZv
dW5kKTtcblx0XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvcXVlcnktc2VsZWN0
b3Itb3ZlcnJpZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVzc2lv
bik7XG5cdFx0aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAo
ZXhwcmVzc2lvbiA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVzc2lvblxuXHRcdHJldHVy
biBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lvbiBp
cyBhIHBhcnNlZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQgPSBleHByZXNzaW9uO1xuXHR9IGVs
c2UgaWYgKHRoaXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4dCwg
ZXhwcmVzc2lvbikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZVxuXHRcdChmb3VuZCkgPyBmb3Vu
ZC5wdXNoKGV4cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNzaW9uO1xuXHRcdHJldHVybiBmb3Vu
ZDtcblx0fSBlbHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5c
dC8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8v
IGNhY2hlIGVsZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9yc1xuXG5cdHRoaXMucG9zTlRIID0g
e307XG5cdHRoaXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGUgPSB7fTtcblx0
dGhpcy5wb3NOVEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4q
Ly8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYgYXBwZW5kIGlzIG51bGwgYW5kIHRo
ZXJlIGlzIG9ubHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2UgcHVz
aEFycmF5LCBlbHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVzaCA9ICghaGFzT3RoZXJzICYmIChm
aXJzdCB8fCAocGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNlZC5leHByZXNzaW9uc1swXS5sZW5n
dGggPT0gMSkpKSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5wdXNoVUlEO1xuXG5cdGlmIChmb3Vu
ZCA9PSBudWxsKSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1bHQgZW5naW5lXG5cblx0dmFyIGos
IG0sIG47XG5cdHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNzaW9u
LCBjdXJyZW50Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucztc
blxuXHRzZWFyY2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25z
W2ldKTsgaSsrKSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9IGN1cnJlbnRFeHByZXNzaW9uW2pd
KTsgaisrKXtcblxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJpdC5j
b21iaW5hdG9yO1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNoO1xu
XG5cdFx0dGFnICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gY3VycmVudEJpdC50YWcg
OiBjdXJyZW50Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRcdGlkICAgICAgICAgPSBjdXJyZW50
Qml0LmlkO1xuXHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNzTGlzdDtcblx0XHRjbGFz
c2VzICAgID0gY3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0dHJpYnV0ZXMgPSBjdXJyZW50Qml0
LmF0dHJpYnV0ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJlbnRCaXQucHNldWRvcztcblx0XHRs
YXN0Qml0ICAgID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggLSAxKSk7XG5cblx0
XHR0aGlzLmJpdFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChsYXN0Qml0KXtcblx0XHRcdHRoaXMu
dW5pcXVlcyA9IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5kID0gZm91bmQ7XG5cdFx0fSBlbHNl
IHtcblx0XHRcdHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0dGhpcy5mb3VuZCA9IFtdO1xuXHRc
dH1cblxuXHRcdGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNbY29tYmluYXRvcl0oY29udGV4dCwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRc
dGlmIChmaXJzdCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCkgZm9yIChtID0gMCwgbiA9IGN1
cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRcdFx0XHR0aGlzW2NvbWJpbmF0b3Jd
KGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywg
Y2xhc3NMaXN0KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRc
dFx0fSBlbHNlIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsr
KSB0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9XG5cblx0XHRjdXJyZW50SXRlbXMg
PSB0aGlzLmZvdW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5vZGVz
IGluIGFwcGVuZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuXG5cdGlmICho
YXNPdGhlcnMgfHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGggPiAxKSkgdGhpcy5zb3J0KGZv
dW5kKTtcblxuXHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5kO1xu
fTtcblxuLy8gVXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5sb2NhbC51aWRrID0gJ3NsaWNrLXVu
aXF1ZWlkJztcblxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHZhciB1aWQg
PSBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRpZiAoIXVpZCl7XG5cdFx0dWlkID0g
dGhpcy51aWR4Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpO1xuXHR9
XG5cdHJldHVybiB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURIVE1MID0gZnVuY3Rpb24obm9kZSl7
XG5cdHJldHVybiBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0aGlz
LnVpZHgrKyk7XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1bWVu
dFNvcnRlciBtZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXtcblx0aWYg
KCF0aGlzLmRvY3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0cztcblx0cmVzdWx0cy5zb3J0KHRo
aXMuZG9jdW1lbnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qPHBzZXVkby1z
ZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5jYWNoZU5USCA9
IHt9O1xuXG5sb2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxkKik/KFthLXpdKyk/KFsrLV1cXGQr
KT8kLztcblxubG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0
dmFyIHBhcnNlZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgpO1xuXHRpZiAoIXBhcnNl
ZCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBhcnNlZFsyXSB8fCBmYWxzZTtcblx0
dmFyIGEgPSBwYXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0gJy0nKSBhID0gLTE7XG5cdHZhciBi
ID0gK3BhcnNlZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRcdChzcGVjaWFsID09ICduJylcdD8g
e2E6IGEsIGI6IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2RkJylcdD8ge2E6IDIsIGI6IDF9IDpc
blx0XHQoc3BlY2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBhfTtc
blxuXHRyZXR1cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFyc2VkKTtcbn07XG5cbmxv
Y2FsLmNyZWF0ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlvbnMs
IG9mVHlwZSl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0pe1xu
XHRcdFx0dmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdGlmICghcGFyZW50KSBy
ZXR1cm4gZmFsc2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7XG5c
dFx0XHRpZiAob2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtc
blx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkgY29u
dGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3Vu
dCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fSBlbHNl
IHtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51
ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7
XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdGFyZ3VtZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLmNh
Y2hlTlRIW2FyZ3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpO1xuXHRc
dGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIGEgPSBwYXJzZWQuYSwgYiA9IHBh
cnNlZC5iLCBwb3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtcblx0XHRpZiAoYSA9PSAwKSByZXR1
cm4gYiA9PSBwb3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRcdGlmIChwb3MgPCBiKSByZXR1cm4g
ZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwgcG9zKSByZXR1cm4gZmFsc2U7XG5c
dFx0fVxuXHRcdHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDtcblx0fTtcbn07XG5cbi8qPC9u
dGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLnB1
c2hBcnJheSA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3Mpe1xuXHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG59O1xuXG5sb2Nh
bC5wdXNoVUlEID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyl7XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0aWYgKCF0aGlzLnVu
aXF1ZXNbdWlkXSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0
XHR0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5cbmxvY2FsLm1hdGNoTm9kZSA9IGZ1
bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhp
cy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5u
YXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cXFsoW149
XSspPVxccyooW14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQxPVwiJDJcIl0nKSk7XG5cdFx0fSBj
YXRjaCAobWF0Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBhcnNlZCA9IHRoaXMuU2xpY2sucGFy
c2Uoc2VsZWN0b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7XG5cblx0Ly8gc2ltcGxl
IChzaW5nbGUpIHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lv
bnMsIHNpbXBsZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50RXhwcmVzc2lvbjtcblx0Zm9yIChp
ID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspe1xuXHRcdGlm
IChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5cdFx0XHR2YXIgZXhwID0gY3VycmVu
dEV4cHJlc3Npb25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsICh0aGlz
LmlzWE1MRG9jdW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcudG9VcHBlckNhc2UoKSwgZXhwLmlk
LCBleHAuY2xhc3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5wc2V1ZG9zKSkgcmV0dXJuIHRydWU7
XG5cdFx0XHRzaW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNpbXBsZUV4
cENvdW50ZXIgPT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBub2RlcyA9
IHRoaXMuc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07XG5cdGZvciAoaSA9IDA7
IGl0ZW0gPSBub2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0cnVl
O1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2FsLm1hdGNoUHNldWRvID0gZnVuY3Rp
b24obm9kZSwgbmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86JyAr
IG5hbWU7XG5cdGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1cm4gdGhpc1twc2V1ZG9OYW1lXShu
b2RlLCBhcmd1bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShub2Rl
LCBuYW1lKTtcblx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUgOiAh
IWF0dHJpYnV0ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRhZyl7XG5cdFx0
dmFyIG5vZGVOYW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDogbm9k
ZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0YWcgPT0gJyonKXtcblx0XHRcdGlm
IChub2RlTmFtZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9kZXMg
YW5kIGNsb3NlZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAobm9kZU5hbWUgIT0gdGFn
KSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlkICYmIG5vZGUuZ2V0QXR0cmli
dXRlKCdpZCcpICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIGksIHBhcnQsIGNscztcblx0
aWYgKGNsYXNzZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3RoOyBpLS07KXtcblx0XHRjbHMgPSB0
aGlzLmdldEF0dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0XHRpZiAoIShjbHMgJiYgY2xhc3Nl
c1tpXS5yZWdleHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChhdHRyaWJ1
dGVzKSBmb3IgKGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IGF0dHJp
YnV0ZXNbaV07XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0QXR0
cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFydC5r
ZXkpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVkb3MpIGZvciAoaSA9IHBzZXVkb3Mu
bGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tpXTtcblx0XHRpZiAoIXRoaXMubWF0
Y2hQc2V1ZG8obm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdH1c
blx0cmV0dXJuIHRydWU7XG59O1xuXG52YXIgY29tYmluYXRvcnMgPSB7XG5cblx0JyAnOiBmdW5j
dGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xp
c3QpeyAvLyBhbGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxuXG5cdFx0dmFyIGksIGl0ZW0sIGNo
aWxkcmVuO1xuXG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpe1xuXHRcdFx0Z2V0QnlJZDog
aWYgKGlkKXtcblx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQp
O1xuXHRcdFx0XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1lICYm
IGl0ZW0gJiYgaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkpe1xu
XHRcdFx0XHRcdC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIHdpdGggdGhhdCBu
YW1lIG9yIGlkIGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmVzIGp1c3Qgb25lIGl0
IHdpbGwgcmV0dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9uXG5c
dFx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJl
bikgcmV0dXJuO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2NoaWxk
cmVuXTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspe1xuXHRc
dFx0XHRcdFx0dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTtcblx0XHRc
dFx0XHRcdGlmIChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBpZCl7XG5cdFx0XHRcdFx0
XHRcdHRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5c
dFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXRlbSl7XG5cdFx0XHRc
dFx0Ly8gaWYgdGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ugd2ls
bCB0cnkgR0VCVE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsXG5cdFx0XHRcdFx0aWYgKHRo
aXMuY29udGFpbnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuO1xuXHRcdFx0XHRcdGVsc2UgYnJl
YWsgZ2V0QnlJZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2RlICYm
ICF0aGlzLmNvbnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47XG5cdFx0XHRcdHRoaXMucHVzaChp
dGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRy
ZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBpZiAoY2xhc3NlcyAmJiBub2RlLmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRjaGls
ZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcpKTtc
blx0XHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlD
bGFzcztcblx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1
c2goaXRlbSwgdGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJl
dHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6IHtcblx0XHRcdGNoaWxkcmVuID0g
bm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYg
Y2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5cdFx0XHRpZiAoIXRoaXMuYnJva2Vu
U3RhckdFQlROKSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVu
W2krK107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBjaGlsZHJlblxuXHRcdGlmICgo
bm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09
IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKTtcblx0fSxcblxuXHQn
Kyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
eyAvLyBuZXh0IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0s
XG5cblx0J14nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5maXJzdENoaWxkO1xuXHRc
dGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhp
c1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3Ncblx0XHR3aGlsZSAo
KG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAx
KSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlm
ICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlk
XSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcrKyc6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcgYW5k
IHByZXZpb3VzIHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiEr
J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5c
blx0J35+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7IC8vIG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0dGhpc1sn
Y29tYmluYXRvcjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyk7XG5cdFx0dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzogZnVuY3Rpb24obm9kZSwgdGFnLCBp
ZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMgdXAg
dG8gZG9jdW1lbnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAobm9k
ZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgcGFyZW50IChvbmUg
bGV2ZWwpXG5cdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRpZiAobm9kZSAhPT0gdGhp
cy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nXG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtc
blx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnIV4nOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbGFzdCBjaGlsZFxu
XHRcdG5vZGUgPSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9k
ZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0
JyF+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyl7IC8vIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91
c1NpYmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRc
dFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVl
c1t1aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRc
dHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHR9XG5cdH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxbJ2Nv
bWJpbmF0b3I6JyArIGNdID0gY29tYmluYXRvcnNbY107XG5cbnZhciBwc2V1ZG9zID0ge1xuXG5c
dC8qPHBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHknOiBmdW5jdGlvbihub2RlKXtcblx0
XHR2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0cmV0dXJuICEoY2hpbGQgJiYgY2hp
bGQubm9kZVR5cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50
IHx8ICcnKS5sZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1bmN0aW9uKG5vZGUsIGV4cHJlc3Np
b24pe1xuXHRcdHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7XG5cdH0s
XG5cblx0J2NvbnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7XG5cdFx0cmV0dXJuIChub2Rl
LmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5pbmRleE9mKHRleHQpID4gLTE7
XG5cdH0sXG5cblx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1
cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3QtY2hpbGQnOiBmdW5j
dGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5v
ZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxu
XG5cdCdvbmx5LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlO1xu
XHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZVR5
cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAo
KG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJu
IGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPG50aC1wc2V1ZG8tc2VsZWN0
b3JzPiovXG5cblx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGls
ZCcsICduZXh0U2libGluZycsICdwb3NOVEgnKSxcblxuXHQnbnRoLWxhc3QtY2hpbGQnOiBsb2Nh
bC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRI
TGFzdCcpLFxuXG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RD
aGlsZCcsICduZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSksXG5cblx0J250aC1sYXN0
LW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1Np
YmxpbmcnLCAncG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxuXHQnaW5kZXgnOiBmdW5jdGlvbihu
b2RlLCBpbmRleCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAn
JyArIChpbmRleCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuJyk7XG5cdH0sXG5cblx0
J29kZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxk
J10obm9kZSwgJzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9c
blxuXHQvKjxvZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZmlyc3Qtb2YtdHlwZSc6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0
d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9
PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCds
YXN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5v
ZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5u
b2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9
LFxuXG5cdCdvbmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5v
ZGUsIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnBy
ZXZpb3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFs
c2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNp
YmxpbmcpKSBpZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRc
dHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9c
blxuXHQvLyBjdXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0cmV0dXJuICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdkaXNhYmxlZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdjaGVja2VkJzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVjdGVk
O1xuXHR9LFxuXG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzLmlz
SFRNTERvY3VtZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSAmJiAo
bm9kZS5ocmVmIHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCAndGFiaW5k
ZXgnKSk7XG5cdH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5v
ZGUgPT09IHRoaXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVjdGVkJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0cmV0dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKjwvcHNldWRvLXNlbGVjdG9y
cz4qL1xufTtcblxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBwXSA9
IHBzZXVkb3NbcF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9kc1xuXG52YXIgYXR0cmlidXRlR2V0
dGVycyA9IGxvY2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5cblx0J2Zvcic6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlzLmdl
dEF0dHJpYnV0ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYnOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiAoJ2hyZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6IHRo
aXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHlsZS5jc3NUZXh0IDogdGhpcy5nZXRB
dHRyaWJ1dGUoJ3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmluZGV4JzogZnVuY3Rpb24oKXtcblx0
XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTtc
blx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8g
YXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9LFxuXG5cdCd0eXBlJzogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcblx0fSxcblxuXHQn
bWF4bGVuZ3RoJzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0
QXR0cmlidXRlTm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYm
IGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVs
bDtcblx0fVxuXG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0ZUdl
dHRlcnMubWF4TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5ndGg7XG5cbi8vIFNsaWNr
XG5cbnZhciBTbGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGlj
ay52ZXJzaW9uID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmluZGVyXG5cblNsaWNrLnNlYXJjaCA9
IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7XG5cdHJldHVybiBsb2NhbC5z
ZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtcbn07XG5cblNsaWNrLmZpbmQgPSBm
dW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250
ZXh0LCBleHByZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5cbi8vIFNsaWNrIGNvbnRhaW5tZW50
IGNoZWNrZXJcblxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlvbihjb250YWluZXIsIG5vZGUpe1xu
XHRsb2NhbC5zZXREb2N1bWVudChjb250YWluZXIpO1xuXHRyZXR1cm4gbG9jYWwuY29udGFpbnMo
Y29udGFpbmVyLCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBnZXR0ZXJcblxuU2xp
Y2suZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3Vt
ZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtc
blxuU2xpY2suaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNl
dERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFzQXR0cmlidXRlKG5vZGUsIG5hbWUp
O1xufTtcblxuLy8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5vZGUs
IHNlbGVjdG9yKXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTtcblx0
aWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdGxvY2Fs
LnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNlbGVj
dG9yKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVB
dHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxvY2FsLmF0dHJpYnV0ZUdl
dHRlcnNbbmFtZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBBdHRy
aWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0dXJuIGxvY2FsLmF0dHJpYnV0ZUdl
dHRlcnNbbmFtZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8gYWNjZXNzb3JcblxuU2xpY2suZGVm
aW5lUHNldWRvID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbFsncHNldWRvOicgKyBuYW1l
XSA9IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gZm4uY2FsbChub2RlLCBh
cmd1bWVudCk7XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9va3VwUHNldWRv
ID0gZnVuY3Rpb24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBuYW1l
XTtcblx0aWYgKHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0XHRyZXR1cm4g
cHNldWRvLmNhbGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gbnVsbDtcbn07XG5c
bi8vIFNsaWNrIG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGljay5vdmVycmlkZSA9IGZ1bmN0aW9u
KHJlZ2V4cCwgZm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdleHAsIGZuKTtcblx0cmV0dXJuIHRo
aXM7XG59O1xuXG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1MO1xuXG5TbGljay51aWRPZiA9IGZ1
bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChub2RlKTtcbn07XG5cbmlm
ICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25K
Uz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1v
bkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudFxuXG5kZXNjcmlwdGlvbjog
T25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBNb29Ub29scy4gQ29udGFpbnMgdGhl
IGRvbGxhciBmdW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rpb24sIGFuZCBhbiBoYW5kZnVsIG9m
IGNyb3NzLWJyb3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0byBsZXQgeW91IGVhc2lseSB3b3Jr
IHdpdGggSFRNTCBFbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE9iamVj
dCwgTnVtYmVyLCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl1cblxucHJvdmlkZXM6IFtFbGVt
ZW50LCBFbGVtZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0b3JzXVxuXG4uLi5cbiovXG5cbnZh
ciBFbGVtZW50ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdHZhciBr
b25zdHJ1Y3RvciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107XG5cdGlmIChrb25zdHJ1Y3Rv
cikgcmV0dXJuIGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYgKHR5cGVvZiB0YWcgIT0gJ3N0cmlu
ZycpIHJldHVybiBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7XG5cblx0aWYgKCFwcm9wcykg
cHJvcHMgPSB7fTtcblxuXHRpZiAoISgvXltcXHctXSskLykudGVzdCh0YWcpKXtcblx0XHR2YXIg
cGFyc2VkID0gU2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9uc1swXVswXTtcblx0XHR0YWcgPSAo
cGFyc2VkLnRhZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnO1xuXHRcdGlmIChwYXJzZWQu
aWQgJiYgcHJvcHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQuaWQ7XG5cblx0XHR2YXIg
YXR0cmlidXRlcyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRcdGlmIChhdHRyaWJ1dGVzKSBmb3Ig
KHZhciBhdHRyLCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0
XHRcdGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYgKHByb3BzW2F0dHIua2V5XSAhPSBu
dWxsKSBjb250aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9w
ZXJhdG9yID09ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTtcblx0XHRcdGVsc2Ug
aWYgKCFhdHRyLnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVl
O1xuXHRcdH1cblxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0ICYmIHByb3BzWydjbGFzcyddID09
IG51bGwpIHByb3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNzTGlzdC5qb2luKCcgJyk7XG5cdH1c
blxuXHRyZXR1cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTtcbn07XG5cblxuaWYg
KEJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVtZW50
LnByb3RvdHlwZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWlyZSB0aGUgd3JhcHBpbmcuXG5cdEVs
ZW1lbnQucHJvdG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXtcblx0XHRy
ZXR1cm4gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGZpcmVFdmVudC5jYWxs
KHRoaXMsIHR5cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShFbGVtZW50LnByb3RvdHlwZS5maXJl
RXZlbnQpO1xufVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVsZW1lbnQpLm1pcnJvcihmdW5jdGlv
bihuYW1lKXtcblx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuO1xuXG5cdHZhciBv
YmogPSB7fTtcblx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtd
LCBhcmdzID0gYXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDAs
IGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXNb
aV0sIHJlc3VsdCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFy
Z3MpO1xuXHRcdFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2Vs
ZW1lbnQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50cykgPyBuZXcgRWxlbWVudHMocmVz
dWx0cykgOiByZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRzLmltcGxlbWVudChvYmopO1xufSk7
XG5cbmlmICghQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wYXJlbnQgPSBPYmplY3Q7XG5c
blx0RWxlbWVudC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25zdHJ1Y3Rvcic6IEVsZW1lbnQsXG5c
dFx0JyRmYW1pbHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50JykuaGlkZSgpXG5cdH07XG5c
blx0RWxlbWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0XHRFbGVtZW50LlBy
b3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5cbkVsZW1lbnQuQ29uc3RydWN0b3Jz
ID0ge307XG5cblxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9uKCl7
XG5cdHZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge1xuXHRcdHByb3BlcnRpZXM6
IFR5cGUuaXNPYmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlvbihvYmope1xuXHRcdFx0cmV0dXJu
IChvYmogIT0gbnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgcHJvcHMgPSBwYXJhbXMucHJv
cGVydGllcyB8fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0gZG9j
dW1lbnQuaWQocGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxvYWQgPSBwcm9wcy5vbmxvYWQgfHwg
ZnVuY3Rpb24oKXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2FkO1xuXHRwcm9wcy5pZCA9IHByb3Bz
Lm5hbWUgPSBbcHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwgaWZy
YW1lLm5hbWUpIDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTtcblx0aWZy
YW1lID0gbmV3IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUnLCBwcm9wcyk7XG5cblx0dmFyIG9u
TG9hZCA9IGZ1bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwoaWZyYW1lLmNvbnRlbnRXaW5kb3cp
O1xuXHR9O1xuXG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7XG5cdGVs
c2UgaWZyYW1lLmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcblx0cmV0dXJuIGlmcmFtZTtc
bn0pO1xuXG52YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMpe1xu
XHRpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2YXIgdW5pcXVlcyA9IHt9LCBub2Rl
O1xuXHRcdGZvciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0dmFyIHVp
ZCA9IFNsaWNrLnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1bmlxdWVzW3VpZF0pe1xuXHRcdFx0
XHR1bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnB1c2gobm9kZSk7XG5cdFx0XHR9
XG5cdFx0fVxuXHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTtcbkVs
ZW1lbnRzLnBhcmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50cyku
aW1wbGVtZW50KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlciwgYmluZCl7XG5cdFx0aWYg
KCFmaWx0ZXIpIHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmls
dGVyKHRoaXMsICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVtKXtc
blx0XHRcdHJldHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5cdFx0fSA6IGZpbHRlciwgYmluZCkp
O1xuXHR9LnByb3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsZW5ndGgg
PSB0aGlzLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0p
O1xuXHRcdFx0aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0gaXRlbTtcblx0XHR9XG5cdFx0cmV0
dXJuICh0aGlzLmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHVuc2hpZnQ6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1l
bnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0pO1xu
XHRcdH1cblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywgaXRl
bXMpO1xuXHR9LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG5l
d0VsZW1lbnRzID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0g
YXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3VtZW50
c1tpXTtcblx0XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMuYXBw
ZW5kKGl0ZW0pO1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0
XHRyZXR1cm4gbmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGFwcGVuZDogZnVuY3Rp
b24oY29sbGVjdGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0
aDsgaSA8IGw7IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LnByb3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR3aGlsZSAodGhp
cy5sZW5ndGgpIGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LnByb3RlY3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG4vLyBGRiwgSUVcbnZh
ciBzcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBvYmplY3QgPSB7JzAnOiAwLCAnMSc6
IDEsIGxlbmd0aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVjdCwgMSwgMSk7XG5pZiAob2JqZWN0
WzFdID09IDEpIEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNlJywgZnVuY3Rpb24oKXtcblx0dmFy
IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlz
W2xlbmd0aC0tXTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJvdGVjdCgpKTtcblxuQXJyYXkuZm9y
RWFjaE1ldGhvZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xuXHRFbGVtZW50cy5pbXBsZW1lbnQo
bmFtZSwgbWV0aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3IoRWxlbWVudHMpO1xuXG4vKjxsdElF
OD4qL1xudmFyIGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtcbnRyeSB7XG5cdGNyZWF0ZUVsZW1l
bnRBY2NlcHRzSFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aW5wdXQgbmFtZT14Picp
Lm5hbWUgPT0gJ3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFyIGVzY2FwZVF1b3RlcyA9IGZ1bmN0
aW9uKGh0bWwpe1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5y
ZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0SUU4PiovXG5cbi8qPGx0SUU5Piov
XG4vLyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNh
bkNoYW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2
LmlubmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFk
aXYuaW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8q
PC9sdElFOT4qL1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld0VsZW1lbnQ6IGZ1bmN0
aW9uKHRhZywgcHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5cdFx0XHRpZiAocHJvcHMuY2hlY2tl
ZCAhPSBudWxsKSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cdFx0XHRp
ZiAoKHByb3BzLnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09ICdyYWRpbycpICYm
IHByb3BzLnZhbHVlID09IG51bGwpIHByb3BzLnZhbHVlID0gJ29uJztcblx0XHRcdC8qPGx0SUU5
PiovIC8vIElFIG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBiZWZvcmUgY2hhbmdpbmcgY29udGVu
dCBvZiBzdHlsZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNoYW5nZVN0eWxlSFRNTCAmJiB0YWcg
PT0gJ3N0eWxlJyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdzdHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0eXBl
JywgJ3RleHQvY3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSBkZWxldGUgcHJvcHMudHlw
ZTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpO1xuXHRc
dFx0fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxsdElFOD4qLy8vIEZpeCBmb3IgcmVh
ZG9ubHkgbmFtZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOFxuXHRcdFx0aWYgKGNyZWF0
ZUVsZW1lbnRBY2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9ICc8JyArIHRhZztcblx0XHRcdFx0
aWYgKHByb3BzLm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLm5h
bWUpICsgJ1wiJztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIHRhZyArPSAnIHR5cGU9XCInICsg
ZXNjYXBlUXVvdGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0XHRcdFx0dGFnICs9ICc+Jztcblx0
XHRcdFx0ZGVsZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRc
dFx0fVxuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlkKHRoaXMu
Y3JlYXRlRWxlbWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4o
ZnVuY3Rpb24oKXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtcblNsaWNrLnVpZE9mKGRvY3VtZW50
KTtcblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdUZXh0Tm9kZTogZnVuY3Rpb24odGV4
dCl7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdH0sXG5cblx0Z2V0
RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0V2lu
ZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndpbmRvdztcblx0fSxcblxuXHRpZDog
KGZ1bmN0aW9uKCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5cblx0XHRcdHN0cmluZzogZnVuY3Rp
b24oaWQsIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBTbGljay5maW5kKGRvYywgJyMnICsg
aWQucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0XHRcdFx0cmV0dXJuIChpZCkgPyB0
eXBlcy5lbGVtZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0XHRcdH0sXG5cblx0XHRcdGVsZW1l
bnQ6IGZ1bmN0aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRTbGljay51aWRPZihlbCk7XG5cdFx0
XHRcdGlmICghbm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQpJC9p
KS50ZXN0KGVsLnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIgZmlyZUV2ZW50ID0gZWwuZmlyZUV2
ZW50O1xuXHRcdFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBpbiBJRTcsIG9yIGVsc2UgY3Jhc2hc
blx0XHRcdFx0XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0
XHRcdFx0cmV0dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRc
dFx0XHRPYmplY3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3RvdHlwZSk7XG5cdFx0XHRcdH1cblx0
XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0b2JqZWN0OiBmdW5jdGlvbihvYmos
IG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0VsZW1lbnQpIHJldHVybiB0eXBlcy5l
bGVtZW50KG9iai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7
XG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4dG5vZGUgPSB0eXBlcy53aGl0ZXNw
YWNlID0gdHlwZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQgPSBmdW5jdGlvbih6ZXJvKXtcblx0
XHRcdHJldHVybiB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWwsIG5vY2Fz
aCwgZG9jKXtcblx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5ICYmIGVsLnVuaXF1ZU51bWJlcikg
cmV0dXJuIGVsO1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YoZWwpO1xuXHRcdFx0cmV0dXJuICh0
eXBlc1t0eXBlXSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNoLCBkb2MgfHwgZG9jdW1lbnQpIDog
bnVsbDtcblx0XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlmICh3aW5kb3cuJCA9PSBudWxsKSBX
aW5kb3cuaW1wbGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5jKXtcblx0cmV0dXJuIGRvY3VtZW50
LmlkKGVsLCBuYywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxuV2luZG93LmltcGxlbWVudCh7XG5c
blx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQ7XG5c
dH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG5bRG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdl
dEVsZW1lbnRzOiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gU2xpY2suc2VhcmNo
KHRoaXMsIGV4cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudDog
ZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQo
dGhpcywgZXhwcmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52YXIgY29udGFpbnMgPSB7Y29udGFp
bnM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xpY2suY29udGFpbnModGhpcywgZWxl
bWVudCk7XG59fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlucykgRG9jdW1lbnQuaW1wbGVtZW50
KGNvbnRhaW5zKTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY29udGFpbnMp
IEVsZW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5cbi8vIHRyZWUgd2Fsa2luZ1xuXG52
YXIgaW5qZWN0Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNvbWJpbmF0b3Ipe1xu
XHRpZiAoIWV4cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yO1xuXG5cdGV4cHJlc3Npb24gPSBP
YmplY3QuY2xvbmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpO1xuXG5cdHZhciBleHByZXNzaW9u
cyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSBleHByZXNzaW9ucy5s
ZW5ndGg7IGktLTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0uY29tYmluYXRvciA9IGNvbWJpbmF0
b3I7XG5cblx0cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdl
dE5leHQ6ICd+Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5cdGdldFBhcmVudDogJyEnXG59LCBm
dW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2Qs
IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5qZWN0
Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbk9iamVj
dC5mb3JFYWNoKHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRnZXRBbGxQcmV2aW91czogJyF+Jyxc
blx0Z2V0U2libGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVuOiAnPicsXG5cdGdldFBhcmVudHM6
ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1l
bnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVt
ZW50cyhpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59
KTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZpcnN0OiBmdW5jdGlvbihleHByZXNz
aW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENv
bWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0
aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhp
cywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKS5nZXRMYXN0KCkpO1xuXHR9LFxu
XG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50
LndpbmRvdztcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5vd25lckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbihp
ZCl7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcnICsg
aWQpLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xuXHR9LFxuXG5cdG1hdGNoOiBmdW5j
dGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0Y2go
dGhpcywgZXhwcmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxuXG5pZiAod2luZG93LiQkID09IG51
bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRpZiAoYXJn
dW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9mIHNlbGVjdG9yID09ICdzdHJpbmcn
KSByZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHNlbGVjdG9yLCBuZXcgRWxlbWVu
dHMpO1xuXHRcdGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5l
dyBFbGVtZW50cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJuIG5ldyBFbGVtZW50cyhhcmd1bWVu
dHMpO1xufSk7XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5zZXJ0ZXJzID0ge1xuXG5cdGJlZm9y
ZTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQu
cGFyZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQs
IGVsZW1lbnQpO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtc
blx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBh
cmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2libGluZyk7XG5cdH0sXG5c
blx0Ym90dG9tOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50LmFwcGVu
ZENoaWxkKGNvbnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVu
dCl7XG5cdFx0ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENoaWxk
KTtcblx0fVxuXG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTtcblxu
XG5cbi8vIGdldFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxudmFyIHByb3BlcnR5R2V0dGVycyA9
IHt9LCBwcm9wZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJvcGVydGllc1xuXG52YXIgcHJvcGVy
dGllcyA9IHt9O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBlJywgJ3ZhbHVlJywgJ2RlZmF1bHRW
YWx1ZScsICdhY2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAnY2VsbFNwYWNpbmcnLCAnY29sU3Bh
bicsXG5cdCdmcmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCdcbl0s
IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cHJvcGVydGllc1twcm9wZXJ0eS50b0xvd2VyQ2FzZSgp
XSA9IHByb3BlcnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRtbCA9ICdpbm5lckhUTUwnO1xucHJv
cGVydGllcy50ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnRleHRDb250ZW50
ID09IG51bGwpID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVudCc7XG5cbk9iamVjdC5mb3JFYWNo
KHByb3BlcnRpZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5cdHByb3BlcnR5U2V0dGVyc1trZXld
ID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbcmVhbF0gPSB2YWx1ZTtcblx0fTtc
blx0cHJvcGVydHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9k
ZVtyZWFsXTtcblx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xucHJvcGVydHlTZXR0ZXJzLnRleHQg
PSAoZnVuY3Rpb24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRpZiAo
bm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpO1xuXHRc
dGVsc2Ugbm9kZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7XG5cdH07XG59KShwcm9wZXJ0eVNl
dHRlcnMudGV4dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRlcil7
XG5cdHJldHVybiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUuZ2V0KCd0YWcnKSA9
PSAnc3R5bGUnKSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUpO1xuXHR9O1xufSkocHJv
cGVydHlHZXR0ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5cbi8vIEJvb2xlYW5zXG5cbnZhciBi
b29scyA9IFtcblx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lzbWFwJywgJ2RlY2xhcmUnLCAnbm9z
aGFkZScsICdjaGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxlJywg
J3NlbGVjdGVkJywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywgJ2F1
dG9mb2N1cycsICdjb250cm9scycsICdhdXRvcGxheScsXG5cdCdsb29wJ1xuXTtcblxudmFyIGJv
b2xlYW5zID0ge307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBmdW5jdGlvbihib29sKXtcblx0dmFy
IGxvd2VyID0gYm9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29sZWFuc1tsb3dlcl0gPSBib29sO1xu
XHRwcm9wZXJ0eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5v
ZGVbYm9vbF0gPSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0gZnVu
Y3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29sXTtcblx0fTtcbn0pO1xuXG4vLyBT
cGVjaWFsIGNhc2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7XG5cblx0J2Ns
YXNzJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnY2xhc3NOYW1lJyBpbiBub2RlKSA/
IG5vZGUuY2xhc3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFz
cycsIHZhbHVlKTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRc
dCgnaHRtbEZvcicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3IgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0
cmlidXRlKCdmb3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24obm9kZSwg
dmFsdWUpe1xuXHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5bGUuY3NzVGV4dCA9IHZhbHVlIDog
bm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xuXHR9LFxuXG5cdCd2YWx1ZSc6IGZ1
bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwpID8g
dmFsdWUgOiAnJztcblx0fVxuXG59KTtcblxucHJvcGVydHlHZXR0ZXJzWydjbGFzcyddID0gZnVu
Y3Rpb24obm9kZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNz
TmFtZSB8fCBudWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG59O1xuXG4vKiA8d2Vi
a2l0PiAqL1xudmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyBJ
RSBzZXRzIHR5cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xudHJ5IHsgZWwudHlwZSA9ICdidXR0
b24nOyB9IGNhdGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAnYnV0dG9uJykgcHJvcGVydHlTZXR0
ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdG5vZGUuc2V0QXR0cmlidXRlKCd0
eXBlJywgdmFsdWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwvd2Via2l0PiAqL1xuXG4vKjxJRT4q
L1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxl
IGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xu
XHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7
XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4g
ZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnaW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVlLCBodG1sNUlucHV0U3VwcG9ydDtc
blxuLy8gIzIxNzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5wdXQudHlwZSA9ICdzdWJtaXQnO1xu
dm9sYXRpbGVJbnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0gJ3QnO1xuXG4vLyAjMjQ0MyAtIElF
IHRocm93cyBcIkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUgaW5w
dXQgdHlwZXNcbnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7XG5cdGlucHV0LnR5cGUgPSAnZW1h
aWwnO1xuXHRodG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJztcbn0gY2F0
Y2ggKGUpe31cblxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8ICFo
dG1sNUlucHV0U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB0
eXBlKXtcblx0dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuXHRcdG5vZGUudHlw
ZSA9IHR5cGU7XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKXt9XG59O1xu
Lyo8L0lFPiovXG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSAqL1xuXG4vKiA8bHRJRTk+
ICovXG52YXIgcG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oZGl2KXtcblx0ZGl2LnJh
bmRvbSA9ICdhdHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5nZXRBdHRyaWJ1dGUoJ3JhbmRvbScp
ID09ICdhdHRyaWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxu
dmFyIGhhc0Nsb25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xuXHR0ZXN0LmlubmVySFRNTCA9ICc8
b2JqZWN0PjxwYXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZhbHVlPVwidGhlIHVua25vd25cIiAv
Pjwvb2JqZWN0Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9kZSh0cnVlKS5maXJzdENoaWxkLmNo
aWxkTm9kZXMubGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7
XG4vKiA8L2x0SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0ID0gISFkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NO
YW1lKXtcblx0dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1lIHx8ICcnKS5jbGVhbigpLnNwbGl0
KCcgJyksIHVuaXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9u
KGNsYXNzTmFtZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0gJycgJiYgIXVuaXF1ZXNbY2xhc3NO
YW1lXSkgcmV0dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNsYXNzTmFtZTtcblx0fSk7XG59O1xu
XG52YXIgYWRkVG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3Qu
YWRkKG5hbWUpO1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1l
KXtcblx0dGhpcy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1l
bnQoe1xuXG5cdHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIHNl
dHRlciA9IHByb3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChzZXR0
ZXIpe1xuXHRcdFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Lyog
PGx0SUU5PiAqL1xuXHRcdFx0dmFyIGF0dHJpYnV0ZVdoaXRlTGlzdDtcblx0XHRcdGlmIChwb2xs
dXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0
dHJpYnV0ZVdoaXRlTGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJRTk+ICovXG5cblx0XHRcdGlm
ICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5c
dFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBk
ZWxldGUgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xu
XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2YWx1
ZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmli
dXRlKSBhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvKiA8L2x0SUU5
PiAqL1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXRQcm9w
ZXJ0aWVzOiBmdW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRmb3IgKHZhciBhdHRyaWJ1dGUgaW4g
YXR0cmlidXRlcykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbYXR0cmli
dXRlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0UHJvcGVydHk6IGZ1bmN0aW9u
KG5hbWUpe1xuXHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdldHRlcnNbbmFtZS50b0xvd2VyQ2Fz
ZSgpXTtcblx0XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMpO1xuXHRcdC8qIDxsdElF
OT4gKi9cblx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpe1xuXHRcdFx0dmFyIGF0dHIgPSB0
aGlzLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0ZVdoaXRlTGlzdCA9IHRoaXMucmV0
cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHRpZiAoIWF0dHIpIHJldHVy
biBudWxsO1xuXHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAhYXR0cmlidXRlV2hpdGVMaXN0W25h
bWVdKXtcblx0XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRlckhUTUw7XG5cdFx0XHRcdC8vIHNl
Z21lbnQgYnkgdGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRlIG5h
bWVcblx0XHRcdFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRlci5zZWFyY2goL1xcLz9bJ1wiXT8+
KD8hW148XSo8WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gbnVsbDtcblx0XHRc
dFx0YXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0
LyogPC9sdElFOT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xpY2suZ2V0QXR0cmlidXRlKHRoaXMs
IG5hbWUpO1xuXHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xpY2suaGFzQXR0cmlidXRlKHRoaXMs
IG5hbWUpKSA/IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0Z2V0UHJvcGVydGllczogZnVuY3Rp
b24oKXtcblx0XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKTtcblx0XHRyZXR1
cm4gYXJncy5tYXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcykuYXNzb2NpYXRlKGFyZ3MpO1xuXHR9
LFxuXG5cdHJlbW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5z
ZXRQcm9wZXJ0eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0aWVzOiBmdW5j
dGlvbigpe1xuXHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5LCB0
aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3AsIHZh
bHVlKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0
KHByb3BlcnR5ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2YWx1
ZSkgOiB0aGlzLnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtcblx0fS5vdmVybG9hZFNldHRlcigp
LFxuXG5cdGdldDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Q
cm9wZXJ0aWVzW3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/
IHByb3BlcnR5LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7XG5cdH0u
b3ZlcmxvYWRHZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHBy
b3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9w
ZXJ0eS5lcmFzZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3ZlUHJv
cGVydHkocHJvcCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGhhc0Ns
YXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3NMaXN0
LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJl
dHVybiBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9LFxu
XG5cdGFkZENsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNs
YXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dGhpcy5jbGFzc05hbWUg
PSBjbGFzc2VzKGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xhc3NOYW1lKS5qb2luKCcgJyk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1
bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2gocmVtb3Zl
RnJvbUNsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihj
bGFzc05hbWUpe1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSk7
XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xhc3NO
YW1lcyk7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVzLmpvaW4oJyAnKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBm
b3JjZSl7XG5cdFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNlID0gIXRoaXMuaGFzQ2xhc3MoY2xh
c3NOYW1lKTtcblx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1lKSA6
IHRoaXMucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZG9wdDogZnVuY3Rpb24o
KXtcblx0XHR2YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQsIGVsZW1lbnRzID0gQXJyYXkuZmxh
dHRlbihhcmd1bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0
aCA+IDEpIHBhcmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIg
ZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTtcblx0XHRcdGlmIChlbGVt
ZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyYWdt
ZW50KSB0aGlzLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGFwcGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXtcblx0XHRyZXR1cm4gdGhp
cy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUpO1xuXHR9
LFxuXG5cdGdyYWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8
ICdib3R0b20nXShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNb
d2hlcmUgfHwgJ2JvdHRvbSddKHRoaXMsIGRvY3VtZW50LmlkKGVsLCB0cnVlKSk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXtcblx0XHRlbCA9IGRv
Y3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlz
LCBlbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcHM6IGZ1bmN0aW9uKGVsLCB3
aGVyZSl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHRoaXMu
cmVwbGFjZXMoZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxcblxuXHRnZXRTZWxlY3RlZDogZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8vIFNhZmFyaSAzLjIuMVxuXHRcdHJl
dHVybiBuZXcgRWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5j
dGlvbihvcHRpb24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZDtcblx0XHR9KSk7XG5c
dH0sXG5cblx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcg
PSBbXTtcblx0XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVh
Y2goZnVuY3Rpb24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBlbC50eXBlO1xuXHRcdFx0aWYgKCFl
bC5uYW1lIHx8IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAncmVz
ZXQnIHx8IHR5cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG5cdFx0
XHR2YXIgdmFsdWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxlY3Rl
ZCgpLm1hcChmdW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJRVxuXHRcdFx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQob3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9KSA6ICgodHlwZSA9PSAncmFkaW8n
IHx8IHR5cGUgPT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNrZWQpID8gbnVsbCA6IGVsLmdldCgn
dmFsdWUnKTtcblxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2YWwp
e1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVz
aChlbmNvZGVVUklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQo
dmFsKSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbign
JicpO1xuXHR9XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxcblxudmFyIGFwcGVuZEluc2VydGVy
cyA9IHtcblx0YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRhZnRlcjogJ2FmdGVyRW5kJyxcblx0
Ym90dG9tOiAnYmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJCZWdpbicsXG5cdGluc2lkZTogJ2Jl
Zm9yZUVuZCdcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNlcnRB
ZGphY2VudEhUTUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0aW9u
KGh0bWwsIHdoZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2VudEhUTUwoYXBwZW5kSW5zZXJ0ZXJz
W3doZXJlIHx8ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVybiB0aGlzO1xufSA6IGZ1bmN0aW9u
KGh0bWwsIHdoZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6IGh0
bWx9KSxcblx0XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rlcyxcblx0XHRmcmFnbWVudCA9IHRl
bXAuZmlyc3RDaGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSByZXR1cm4gdGhpcztcblx0aWYgKGNo
aWxkcmVuLmxlbmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcblx0
XHR9XG5cdH1cblxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGZyYWdtZW50LCB0aGlz
KTtcblx0cmV0dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0g
e307XG5cbnZhciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRyZXR1cm4gKHN0b3JhZ2VbdWlkXSB8
fCAoc3RvcmFnZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0ZW0p
e1xuXHR2YXIgdWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5cdGlmIChpdGVtLnJlbW92ZUV2ZW50
cykgaXRlbS5yZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBpdGVt
LmNsZWFyQXR0cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51bGwpe1xuXHRcdGRlbGV0ZSBjb2xs
ZWN0ZWRbdWlkXTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRdO1xuXHR9XG5cdHJldHVybiBpdGVt
O1xufTtcblxudmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdzZWxl
Y3RlZCcsIHRleHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGRl
c3Ryb3k6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVuID0gY2xlYW4odGhpcykuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNoKGNoaWxkcmVuLCBjbGVhbik7XG5c
dFx0RWxlbWVudC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGVt
cHR5OiBmdW5jdGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5lYWNo
KEVsZW1lbnQuZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZGlzcG9zZTog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihj
b250ZW50cywga2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTtcblx0
XHR2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwgdGUg
PSBbdGhpc10sIGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xuXHRcdFx0Y2UuYXBwZW5kKEFycmF5
LmNvbnZlcnQoY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdFx0dGUuYXBw
ZW5kKEFycmF5LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0
fVxuXG5cdFx0Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtcblx0XHRcdHZhciBub2RlID0gY2Vb
aV0sIGVsZW1lbnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0dHJp
YnV0ZSgnaWQnKTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAobm9kZS5jbGVhckF0dHJp
YnV0ZXMpe1xuXHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRlcygpO1xuXHRcdFx0XHRub2RlLm1l
cmdlQXR0cmlidXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3Vu
aXF1ZU51bWJlcicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRpb25zKXtcblx0XHRcdFx0XHR2YXIg
bm8gPSBub2RlLm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zO1xuXHRcdFx0XHRcdGZvciAo
dmFyIGogPSBuby5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0ZWQ7
XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHByb3Ag
PSBmb3JtUHJvcHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdFx0aWYgKHBy
b3AgJiYgZWxlbWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07XG5cdFx0fVxu
XG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVCdWcpe1xuXHRcdFx0dmFyIGNvID0g
Y2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChpID0gY28ubGVuZ3RoOyBpLS07KSBj
b1tpXS5vdXRlckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5cdFx0fVxuXHRcdC8qPC9sdElFOT4q
L1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5cdH1cblxufSk7XG5cbltFbGVtZW50
LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRMaXN0ZW5l
cjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxlY3RlZFtTbGljay51aWRPZih0aGlz
KV0gPSB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRFdmVudExpc3RlbmVyKSB0aGlzLmFk
ZEV2ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMu
YXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh0aGlzLnJlbW92
ZUV2ZW50TGlzdGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1
bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZGZsdCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9wID0g
c3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0gbnVsbCAmJiBwcm9wID09IG51bGwp
IHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5cdFx0cmV0dXJuIHByb3AgIT0gbnVs
bCA/IHByb3AgOiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFs
dWUpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRzdG9y
YWdlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVsaW1p
bmF0ZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVp
ZE9mKHRoaXMpKTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAod2luZG93LmF0dGFjaEV2ZW50ICYm
ICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBnYyA9IGZ1bmN0aW9uKCl7XG5cdFx0
T2JqZWN0LmVhY2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0aWYgKHdpbmRvdy5Db2xsZWN0R2Fy
YmFnZSkgQ29sbGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cucmVtb3ZlTGlzdGVuZXIoJ3VubG9h
ZCcsIGdjKTtcblx0fTtcblx0d2luZG93LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG59XG4v
KjwvbHRJRTk+Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307XG5cblxuXG5FbGVtZW50LlBy
b3BlcnRpZXMuc3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihzdHlsZSl7XG5cdFx0dGhpcy5z
dHlsZS5jc3NUZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiB0aGlzLnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5c
dFx0dGhpcy5zdHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0
aWVzLnRhZyA9IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudGFnTmFt
ZS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy5odG1sID0g
e1xuXG5cdHNldDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYgKGh0bWwgPT0gbnVsbCkgaHRtbCA9
ICcnO1xuXHRcdGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRtbC5q
b2luKCcnKTtcblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKHRoaXMuc3R5bGVTaGVldCAmJiAh
Y2FuQ2hhbmdlU3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGh0bWw7XG5cdFx0
ZWxzZSAvKjwvbHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdH0sXG5cdGVyYXNlOiBm
dW5jdGlvbigpe1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycpO1xuXHR9XG5cbn07XG5cbnZhciBz
dXBwb3J0c0hUTUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gdHJ1
ZSwgc3VwcG9ydHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8qPGx0SUU5PiovXG4vLyB0ZWNobmlx
dWUgYnkgamRiYXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQuY29tL2lubmVyc2hpdi9cbnZhciBk
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBmcmFnbWVudDtcbmRpdi5p
bm5lckhUTUwgPSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gKGRpdi5j
aGlsZE5vZGVzLmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblx0
dmFyIHRhZ3MgPSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRh
aWxzIGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2
IG91dHB1dCBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAnKTtc
blx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGwgPSB0YWdz
Lmxlbmd0aDtcblx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3JlYXRlRWxlbWVudCh0YWdzW2xdKTtc
bn1cbmRpdiA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbnN1cHBvcnRzVGFibGVJ
bm5lckhUTUwgPSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdHZhciB0YWJsZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRhYmxlLmlubmVySFRNTCA9ICc8dHI+
PHRkPjwvdGQ+PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0pO1xuXG4vKjxsdEZGND4qL1xudmFy
IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwgaHRtbCA9ICc8dGQ+PC90ZD4nO1xu
dHIuaW5uZXJIVE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5lckhUTUwgPSAodHIuaW5uZXJIVE1M
ID09IGh0bWwpO1xudHIgPSBudWxsO1xuLyo8L2x0RkY0PiovXG5cbmlmICghc3VwcG9ydHNUYWJs
ZUlubmVySFRNTCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8fCAhc3VwcG9ydHNIVE1MNUVsZW1l
bnRzKXtcblxuXHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0KXtc
blxuXHRcdHZhciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0YWJsZTogWzEsICc8dGFibGU+Jywg
JzwvdGFibGU+J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNlbGVjdD4nLCAnPC9zZWxlY3Q+J10s
XG5cdFx0XHR0Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10s
XG5cdFx0XHR0cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFi
bGU+J11cblx0XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25zLnRm
b290ID0gdHJhbnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGh0bWwpe1xu
XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMuc3R5bGVTaGVldCkgcmV0dXJuIHNl
dC5jYWxsKHRoaXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgd3JhcCA9
IHRyYW5zbGF0aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRcdFx0aWYgKCF3cmFwICYmICFzdXBw
b3J0c0hUTUw1RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcnXTtcblx0XHRcdGlmICghd3JhcCkg
cmV0dXJuIHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0XHR2YXIgbGV2ZWwgPSB3cmFwWzBd
LCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHRhcmdldCA9IHdyYXBw
ZXI7XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQuYXBwZW5kQ2hp
bGQod3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRNTCA9IFt3cmFwWzFdLCBodG1sLCB3
cmFwWzJdXS5mbGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3aGlsZSAobGV2ZWwtLSkgdGFyZ2V0
ID0gdGFyZ2V0LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVtcHR5KCkuYWRvcHQodGFyZ2V0LmNo
aWxkTm9kZXMpO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LnJl
bW92ZUNoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9IG51bGw7XG5cdFx0fTtcblxuXHR9
KShFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxuLyo8L0lFPiovXG5cbi8qPGx0SUU5
PiovXG52YXIgdGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG50ZXN0
Rm9ybS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4nO1xu
XG5pZiAodGVzdEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAncycpIEVsZW1lbnQuUHJvcGVydGll
cy52YWx1ZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGFnID0gdGhp
cy5nZXQoJ3RhZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcpIHJldHVybiB0aGlzLnNldFBy
b3BlcnR5KCd2YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxlbWVu
dHMoJ29wdGlvbicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRmb3IgKHZhciBp
ID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIG9wdGlvbiA9IG9wdGlv
bnNbaV0sXG5cdFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKSxc
blx0XHRcdFx0b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24u
dmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IHZh
bHVlKSByZXR1cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0KCd0
YWcnKTtcblxuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYgdGFnICE9ICdvcHRpb24nKSByZXR1
cm4gdGhpcy5nZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRcdGlmICh0YWcgPT0gJ3NlbGVjdCcg
JiYgIShvcHRpb24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVswXSkpIHJldHVybiAnJztcblxuXHRc
dHZhciBhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7XG5cdFx0cmV0dXJu
IChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3Rl
eHQnKTtcblx0fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElF
PiovXG5pZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9kZSgn
aWQnKSkgRWxlbWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKGlkKXtcblx0
XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7XG5cdH0s
XG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5pZCB8fCBudWxsO1xuXHR9LFxu
XHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2Rl
KCdpZCcpLnZhbHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+Ki9cblxufSkoKTtcblxuLypcbi0t
LVxuXG5uYW1lOiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5cGUs
IHRvIG1ha2UgdGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgRnVu
Y3Rpb24sIFN0cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczogRXZlbnRcblxuLi4uXG4qL1xuXG4o
ZnVuY3Rpb24oKXtcblxudmFyIF9rZXlzID0ge307XG52YXIgbm9ybWFsaXplV2hlZWxTcGVlZCA9
IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7XG5cdGlmIChldmVudC53aGVlbERl
bHRhKXtcblx0XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxEZWx0YSAlIDEyMCA9PSAwID8gZXZl
bnQud2hlZWxEZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVsdGEgLyAxMjtcblx0fSBlbHNlIHtc
blx0XHR2YXIgcmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8IGV2ZW50LmRldGFpbCB8fCAwO1xu
XHRcdG5vcm1hbGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMgOiBy
YXdBbW91bnQgKiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZWQ7XG59O1xuXG52YXIgRE9N
RXZlbnQgPSB0aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RPTUV2ZW50JywgZnVuY3Rpb24oZXZl
bnQsIHdpbil7XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7XG5cdGV2ZW50ID0gZXZlbnQgfHwg
d2luLmV2ZW50O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7XG5cdHRoaXMu
ZXZlbnQgPSBldmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0cnVlO1xuXHR0aGlzLnNoaWZ0ID0g
ZXZlbnQuc2hpZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2ZW50LmN0cmxLZXk7XG5cdHRoaXMu
YWx0ID0gZXZlbnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBldmVudC5tZXRhS2V5O1xuXHR2YXIg
dHlwZSA9IHRoaXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZhciB0YXJnZXQgPSBldmVudC50YXJn
ZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5
cGUgPT0gMykgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdHRoaXMudGFyZ2V0ID0gZG9j
dW1lbnQuaWQodGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRleE9mKCdrZXknKSA9PSAwKXtcblx0
XHR2YXIgY29kZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtc
blx0XHRpZiAoIXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5cHJlc3MnKSB0aGlzLmtleSA9IF9r
ZXlzW2NvZGVdO1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3duJyB8fCB0eXBlID09ICdrZXl1cCcp
e1xuXHRcdFx0aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEyNCkgdGhpcy5rZXkgPSAnZicgKyAo
Y29kZSAtIDExMSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4gOTUgJiYgY29kZSA8IDEwNikgdGhp
cy5rZXkgPSBjb2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmtleSA9PSBudWxsKSB0aGlz
LmtleSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKTtcblx0fSBlbHNl
IGlmICh0eXBlID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0gJ2Nv
bnRleHRtZW51JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3JvbGwn
IHx8IHR5cGUuaW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0XHR2YXIgZG9jID0gd2luLmRvY3Vt
ZW50O1xuXHRcdGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NT
UzFDb21wYXQnKSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5cdFx0dGhpcy5wYWdlID0ge1xuXHRc
dFx0eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRY
ICsgZG9jLnNjcm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVu
dC5wYWdlWSA6IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wXG5cdFx0fTtcblx0XHR0aGlz
LmNsaWVudCA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VY
IC0gd2luLnBhZ2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxcblx0XHRcdHk6IChldmVudC5wYWdl
WSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xpZW50
WVxuXHRcdH07XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlID09ICd3
aGVlbCcgfHwgdHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMud2hlZWwgPSBub3JtYWxpemVXaGVl
bFNwZWVkKGV2ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0gMyB8
fCBldmVudC5idXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlw
ZSA9PSAnbW91c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21vdXNl
bGVhdmUnKXtcblx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0
eXBlID09ICdtb3VzZWVudGVyJztcblx0XHRcdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRh
cmdldCB8fCBldmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQnXTtc
blx0XHRcdHdoaWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9
IHJlbGF0ZWQucGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3VtZW50
LmlkKHJlbGF0ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNoJykg
PT0gMCB8fCB0eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXtcblx0XHR0aGlzLnJvdGF0aW9u
ID0gZXZlbnQucm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9IGV2ZW50LnNjYWxlO1xuXHRcdHRo
aXMudGFyZ2V0VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7XG5cdFx0dGhpcy5jaGFuZ2Vk
VG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRcdHZhciB0b3VjaGVzID0gdGhpcy50
b3VjaGVzID0gZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXtc
blx0XHRcdHZhciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0XHR0aGlzLnBhZ2UgPSB7eDogdG91
Y2gucGFnZVgsIHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRoaXMuY2xpZW50ID0ge3g6IHRvdWNo
LmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhpcy5j
bGllbnQpIHRoaXMuY2xpZW50ID0ge307XG5cdGlmICghdGhpcy5wYWdlKSB0aGlzLnBhZ2UgPSB7
fTtcbn0pO1xuXG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fSxc
blxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGVsc2UgdGhp
cy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnByZXZlbnRE
ZWZhdWx0KSB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50
LnJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkRP
TUV2ZW50LmRlZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtleSl7XG5cdF9rZXlzW2NvZGVdID0g
a2V5O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50LmRlZmluZUtleXMgPSBET01FdmVu
dC5kZWZpbmVLZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleXMo
e1xuXHQnMzgnOiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6ICdsZWZ0JywgJzM5JzogJ3JpZ2h0
Jyxcblx0JzI3JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4JzogJ2JhY2tzcGFjZScsICc5Jzog
J3RhYicsXG5cdCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInXG59KTtcblxufSkoKTtcblxu
XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZlbnRcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIEVsZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBmaWxl
IGFsc28gaW5jbHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVudCBF
dmVudHMsIGlmIG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBbRWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVzOiBFbGVtZW50LkV2ZW50XG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0
OiBmdW5jdGlvbihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50cyhldmVudHMpO1xufX07XG5cbltF
bGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRF
dmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZl
KCdldmVudHMnLCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtr
ZXlzOiBbXSwgdmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50c1t0eXBlXS5rZXlzLmNvbnRhaW5z
KGZuKSkgcmV0dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMucHVzaChmbik7XG5cdFx0
dmFyIHJlYWxUeXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVd
LFxuXHRcdFx0Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxmID0gdGhpcztcblx0XHRpZiAoY3Vz
dG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3RvbS5vbkFkZC5jYWxsKHRoaXMsIGZu
LCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uKXtcblx0XHRcdFx0Y29uZGl0aW9u
ID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uLmNhbGwo
dGhpcywgZXZlbnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRc
dFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VzdG9tLmJh
c2UpIHJlYWxUeXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0
eXBlKTtcblx0XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZu
LmNhbGwoc2VsZik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZlRXZlbnQgPSBFbGVtZW50Lk5hdGl2
ZUV2ZW50c1tyZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2ZW50KXtcblx0XHRcdGlmIChuYXRp
dmVFdmVudCA9PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0
XHRldmVudCA9IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5kb3coKSk7XG5cdFx0XHRc
dFx0aWYgKGNvbmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0b3Ao
KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWRkTGlzdGVuZXIocmVhbFR5cGUs
IGRlZm4sIGFyZ3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2ZW50c1t0eXBlXS52YWx1ZXMucHVz
aChkZWZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rp
b24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtc
blx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHR2YXIg
bGlzdCA9IGV2ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXggPSBsaXN0LmtleXMuaW5kZXhPZihm
bik7XG5cdFx0aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpcztcblx0XHR2YXIgdmFsdWUgPSBs
aXN0LnZhbHVlc1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qua2V5c1tpbmRleF07XG5cdFx0ZGVs
ZXRlIGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHNb
dHlwZV07XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uUmVtb3ZlKSBjdXN0
b20ub25SZW1vdmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2Up
IHR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xu
XHRcdH1cblx0XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZlbnRzW3R5cGVdKSA/IHRoaXMucmVt
b3ZlTGlzdGVuZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1syXSkgOiB0aGlzO1xuXHR9LFxuXG5c
dGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciBldmVudCBpbiBldmVu
dHMpIHRoaXMuYWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlw
ZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBl
IGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0
cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2
ZW50cycpO1xuXHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICghZXZlbnRz
KXtcblx0XHRcdGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhpcy5yZW1vdmVFdmVudHModHlwZSk7
XG5cdFx0XHR0aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5cdFx0fSBlbHNlIGlmIChhdHRhY2hl
ZFtldmVudHNdKXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZu
KXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMsIGZuKTtcblx0XHRcdH0sIHRoaXMp
O1xuXHRcdFx0ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRc
dHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8
fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChh
cmdzKTtcblxuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0
aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFw
cGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNsb25lRXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXtcblx0XHRmcm9tID0gZG9jdW1l
bnQuaWQoZnJvbSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20ucmV0cmlldmUoJ2V2ZW50cycpO1xu
XHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIXR5cGUpe1xuXHRcdFx0Zm9y
ICh2YXIgZXZlbnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9uZUV2ZW50cyhmcm9tLCBldmVudFR5
cGUpO1xuXHRcdH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtcblx0XHRcdGV2ZW50c1t0eXBlXS5r
ZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50KHR5cGUsIGZuKTtc
blx0XHRcdH0sIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
RWxlbWVudC5OYXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAyLCBkYmxjbGljazogMiwgbW91c2V1
cDogMiwgbW91c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwgLy9tb3VzZSBidXR0b25zXG5cdHdo
ZWVsOiAyLCBtb3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVlbFxu
XHRtb3VzZW92ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1vdmU6IDIsIHNlbGVjdHN0YXJ0OiAy
LCBzZWxlY3RlbmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0a2V5ZG93bjogMiwga2V5cHJlc3M6
IDIsIGtleXVwOiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBtb2Jp
bGVcblx0dG91Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0b3VjaGVuZDogMiwgdG91Y2hjYW5j
ZWw6IDIsIC8vIHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwgZ2Vz
dHVyZWVuZDogMiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAyLCBy
ZXNldDogMiwgc2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9mb3Jt
IGVsZW1lbnRzXG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVmb3JldW5sb2FkOiAyLCByZXNpemU6
IDEsIG1vdmU6IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJlYWR5c3RhdGVjaGFuZ2U6IDEsIC8v
d2luZG93XG5cdGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAyLCBwYWdlc2hvdzogMiwgcGFnZWhp
ZGU6IDIsIC8vIGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1lc3Nh
Z2U6IDIgLy9taXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9IHtcblx0bW91c2V3aGVlbDoge1xu
XHRcdGJhc2U6ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdoZWVs
JyBpbiBkb2N1bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNjcm9sbCdcblx0fVxufTtc
blxudmFyIGNoZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJl
bGF0ZWRUYXJnZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwpIHJldHVybiB0cnVlO1xuXHRpZiAo
IXJlbGF0ZWQpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYgcmVs
YXRlZC5wcmVmaXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYgIXRo
aXMuY29udGFpbnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdvbm1vdXNlZW50ZXInIGluIGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50ZXIg
PSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjtcblx0RWxlbWVudC5Nb3VzZWVu
dGVyQ2hlY2sgPSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlZW50ZXIg
PSB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xu
XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxc
blx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8qPGx0SUU5PiovXG5pZiAoIXdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMucHJvcGVydHljaGFu
Z2UgPSAyO1xuXHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7XG5cdFx0YmFzZTogZnVuY3Rpb24o
KXtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRcdFx0cmV0dXJuICh0aGlzLmdldCgn
dGFnJykgPT0gJ2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94
JykpID8gJ3Byb3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xuXHRcdH0sXG5cdFx0Y29uZGl0aW9u
OiBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVydHlj
aGFuZ2UnIHx8IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7XG5cdFx0fVxu
XHR9O1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVs
ZW1lbnQuRGVsZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRp
dmUgb2JqZWN0IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZpY2ll
bnQgZXZlbnQgbWFuYWdlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBbRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRpb25d
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBldmVudExpc3RlbmVyU3VwcG9ydCA9
ICEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3Vz
aW4gPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7XG5cbnZhciBidWJibGVVcCA9
IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdHdoaWxlICh0YXJn
ZXQgJiYgdGFyZ2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkgcmV0
dXJuIGZuLmNhbGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtcblx0XHR0YXJnZXQgPSBkb2N1bWVu
dC5pZCh0YXJnZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5cbnZhciBtYXAgPSB7XG5cdG1vdXNl
ZW50ZXI6IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQu
TW91c2VlbnRlckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6IHtcblx0XHRiYXNlOiAnbW91c2Vv
dXQnLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0Zm9j
dXM6IHtcblx0XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycgOiAn
aW4nKSxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJsdXI6IHtcblx0XHRiYXNlOiBldmVu
dExpc3RlbmVyU3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsXG5cdFx0Y2FwdHVyZTogdHJ1
ZVxuXHR9XG59O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkgPSAnJGRlbGVnYXRpb246JztcbnZh
ciBmb3JtT2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxuXHRyZXR1cm4ge1xuXG5cdFx0YmFz
ZTogJ2ZvY3VzaW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxmLCB1aWQpe1xuXHRcdFx0
dmFyIGxpc3QgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KVt1
aWRdO1xuXHRcdFx0aWYgKGxpc3QgJiYgbGlzdC5mb3JtcykgZm9yICh2YXIgaSA9IGxpc3QuZm9y
bXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBkZXN0
cm95ZWQsIHNvIGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRcdC8vIHJlbW92ZUV2ZW50IG1ldGhv
ZCBhbnltb3JlLiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdhc1xuXHRcdFx0XHQvLyByZW1vdmVk
IGFzIHdlbGwuXG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0LmZv
cm1zW2ldLnJlbW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9LFxu
XG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVp
ZCl7XG5cdFx0XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8gdGFy
Z2V0IDogZXZlbnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpO1xuXHRcdFx0aWYgKCFmb3JtKSBy
ZXR1cm47XG5cblx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBl
ICsgJ2xpc3RlbmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVuZXIgPSBsaXN0ZW5lcnNbdWlkXSB8
fCB7Zm9ybXM6IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9ybXMgPSBsaXN0ZW5lci5mb3Jtcywg
Zm5zID0gbGlzdGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAhPSAt
MSkgcmV0dXJuO1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtcblxuXHRcdFx0dmFyIF9mbiA9IGZ1
bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwg
dGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2ZW50KHR5cGUsIF9mbik7XG5cdFx0
XHRmbnMucHVzaChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNbdWlkXSA9IGxpc3RlbmVyO1xuXHRc
dFx0c2VsZi5zdG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCBsaXN0ZW5lcnMpO1xuXHRc
dH1cblx0fTtcbn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cdHJl
dHVybiB7XG5cdFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwg
bWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZhciBldmVudHMgPSB7Ymx1cjogZnVu
Y3Rpb24oKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMoZXZlbnRzKTtcblx0XHRcdH19O1xu
XHRcdFx0ZXZlbnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChz
ZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGV2ZW50LnRh
cmdldC5hZGRFdmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07XG59O1xuXG5pZiAoIWV2ZW50TGlz
dGVuZXJTdXBwb3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xuXHRzdWJtaXQ6IGZvcm1PYnNlcnZl
cignc3VibWl0JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksXG5cdGNoYW5nZTog
aW5wdXRPYnNlcnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDogaW5wdXRPYnNlcnZlcignc2VsZWN0
Jylcbn0pO1xuLyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLFxu
XHRhZGRFdmVudCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1vdmVFdmVudCA9IHByb3RvLnJlbW92
ZUV2ZW50O1xuXG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQsIG1ldGhvZCl7XG5cdHJldHVybiBm
dW5jdGlvbih0eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0aWYgKHR5cGUuaW5kZXhPZignOnJl
bGF5JykgPT0gLTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7
XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUpLmV4cHJlc3Npb25zWzBdWzBdO1xu
XHRcdGlmIChwYXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5jYWxs
KHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgbmV3VHlwZSA9IHBhcnNlZC50
YWc7XG5cdFx0cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFjaChmdW5jdGlvbihwc2V1ZG8pe1xu
XHRcdFx0bmV3VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsgKHBzZXVkby52YWx1ZSA/ICcoJyAr
IHBzZXVkby52YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtcblx0XHRvbGQuY2FsbCh0aGlzLCB0
eXBlLCBmbik7XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIG5ld1R5cGUsIHBhcnNlZC5w
c2V1ZG9zWzBdLnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52YXIgZGVsZWdhdGlvbiA9IHtcblxu
XHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXtcblx0XHR2YXIgc3RvcmFnZSA9
IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07
XG5cdFx0aWYgKHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0aWYgKHN0
b3JlZFtfdWlkXS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0ubWF0Y2ggPT0gbWF0Y2gpIHJldHVy
biB0aGlzO1xuXHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5cGUsIF9tYXRjaCA9IG1hdGNoLCBf
Zm4gPSBmbiwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHR0eXBlID0gX21hcC5iYXNlIHx8
IF90eXBlO1xuXG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpe1xuXHRcdFx0cmV0dXJuIFNs
aWNrLm1hdGNoKHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xuXG5cdFx0dmFyIGVsZW1lbnRFdmVu
dCA9IEVsZW1lbnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAoX21hcC5jb25kaXRpb24gfHwgZWxl
bWVudEV2ZW50ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24pe1xuXHRcdFx0dmFyIF9fbWF0Y2gg
PSBtYXRjaCwgY29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNvbmRp
dGlvbjtcblx0XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVudCl7XG5cdFx0XHRcdHJl
dHVybiBfX21hdGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRpdGlvbi5jYWxsKHRhcmdldCwgZXZl
bnQsIHR5cGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgc2VsZiA9IHRoaXMsIHVpZCA9
IFN0cmluZy51bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0b3IgPSBfbWFwLmxpc3RlbiA/IGZ1
bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZl
bnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBfbWFw
Lmxpc3RlbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCk7XG5cdFx0fSA6IGZ1
bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZl
bnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBidWJi
bGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdH07XG5cblx0XHRpZiAo
IXN0b3JlZCkgc3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3VpZF0gPSB7XG5cdFx0XHRtYXRjaDog
X21hdGNoLFxuXHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVnYXRvcjogZGVsZWdhdG9yXG5cdFx0
fTtcblx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRyZXR1cm4gYWRkRXZlbnQuY2Fs
bCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdH0sXG5cblx0cmVtb3Zl
RXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3VpZCl7XG5cdFx0dmFyIHN0b3JhZ2Ug
PSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVd
O1xuXHRcdGlmICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxuXHRcdGlmIChfdWlkKXtcblx0XHRc
dHZhciBfdHlwZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3JlZFtfdWlkXS5kZWxlZ2F0b3IsIF9t
YXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xu
XHRcdFx0aWYgKF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0aGlzLCBfdWlkKTtcblx0XHRcdGRl
bGV0ZSBzdG9yZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRc
dHJldHVybiByZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0
dXJlKTtcblx0XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5cdFx0aWYgKGZuKSBmb3IgKF9fdWlk
IGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNo
ID09IG1hdGNoICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNh
bGwodGhpcywgdHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5cdFx0fSBlbHNlIGZvciAoX191aWQg
aW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2gg
PT0gbWF0Y2gpIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwg
cy5mbiwgX191aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59O1xuXG5bRWxl
bWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cdGFkZEV2ZW50
OiByZWxheShhZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVudCksXG5cdHJlbW92ZUV2ZW50OiBy
ZWxheShyZW1vdmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVFdmVudClcbn0pO1xuXG59KSgpO1xu
XG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBpbiBh
IGZhc2hpb25hYmxlIHdheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBFbGVtZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0eWxlXG5cbi4uLlxuKi9cblxuKGZ1
bmN0aW9uKCl7XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRtbCwgZWw7XG5cbi8vPGx0SUU5Plxu
Ly8gQ2hlY2sgZm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCByZW1vdmUgc3R5bGVzIHdoZW4gdGhl
eSdyZSBzZXQgdG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmVs
LnN0eWxlLmNvbG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xvciA9IG51bGw7XG52YXIgZG9lc05v
dFJlbW92ZVN0eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdyZWQnO1xuXG4vLyBjaGVjayBmb3Ig
b2xkSUUsIHdoaWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhhbmQgc3R5bGVzIGluIHRoZSB3cm9u
ZyBvcmRlciAoY29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBvZiB3aWR0aC1zdHlsZS1jb2xvcilc
bnZhciBib3JkZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xuZWwuc3R5bGUuYm9yZGVyID0gYm9y
ZGVyO1xudmFyIHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyID0gZWwuc3R5bGUuYm9yZGVyICE9
IGJvcmRlcjtcbmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxudmFyIGhhc0dldENvbXB1dGVkU3R5
bGUgPSAhIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRzdXBwb3J0Qm9yZGVyUmFkaXVzID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51bGw7
XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMpe1xu
XHR0aGlzLnNldFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZhciBoYXNPcGFjaXR5ID0gKGh0bWwu
c3R5bGUub3BhY2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVyID0gKGh0bWwuc3R5bGUuZmlsdGVy
ICE9IG51bGwpLFxuXHRyZUFscGhhID0gL2FscGhhXFwob3BhY2l0eT0oW1xcZC5dKylcXCkvaTtc
blxudmFyIHNldFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxl
bWVudC5zdG9yZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0ZWxlbWVudC5zdHlsZS52aXNpYmls
aXR5ID0gb3BhY2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxsID8gJ3Zpc2libGUnIDogJ2hpZGRl
bic7XG59O1xuXG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIgPSBmdW5jdGlvbihlbGVtZW50LCBy
ZWdleHAsIHZhbHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRmaWx0ZXIg
PSBzdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8fCAn
Jztcblx0c3R5bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVwbGFj
ZShyZWdleHAsIHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50cmltKCk7XG5cdGlmICgh
c3R5bGUuZmlsdGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xufTtcbi8vPC9s
dElFOT5cblxudmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQs
IG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xufSA6IChoYXNG
aWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0aWYgKCFlbGVtZW50LmN1cnJl
bnRTdHlsZSB8fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxl
Lnpvb20gPSAxO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8IG9wYWNpdHkgPT0gMSl7XG5cdFx0
c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0XHRpZiAob3BhY2l0eSA9PSAxICYm
IGdldE9wYWNpdHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdh
bHBoYShvcGFjaXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwg
cmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5ICogMTAwKS5saW1pdCgwLCAxMDAp
LnJvdW5kKCkgKyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJpbGl0eSkpO1xuXG52YXIgZ2V0T3Bh
Y2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0g
ZWxlbWVudC5zdHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnb3BhY2l0
eScpO1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNpdHkudG9GbG9hdCgpO1xu
fSA6IChoYXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIGZpbHRlciA9IChlbGVt
ZW50LnN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpKSxc
blx0XHRvcGFjaXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJlQWxw
aGEpO1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBmaWx0ZXIgPT0gbnVsbCkgPyAxIDog
KG9wYWNpdHlbMV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0
eSA9IGVsZW1lbnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5cdGlmIChvcGFjaXR5ID09IG51bGwp
IG9wYWNpdHkgPSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6IDEp
O1xuXHRyZXR1cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZsb2F0TmFtZSA9IChodG1sLnN0eWxl
LmNzc0Zsb2F0ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyxcblx0bmFtZWRQ
b3NpdGlvbnMgPSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBjZW50ZXI6ICc1MCUnLCByaWdodDog
JzEwMCUnLCBib3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tncm91bmRQb3NpdGlvblhZID0gKGh0
bWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSxcblx0cHJlZml4UGF0dGVybiA9
IC9eLShtcyktLztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cmV0
dXJuIHByb3BlcnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwgJyQxLScpLmNhbWVsQ2FzZSgpO1xu
fTtcblxuLy88bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcHJvcGVy
dHkpe1xuXHRpZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpe1xuXHRcdHN0eWxl
LnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5cdFx0cHJvcGVydHkgKz0gJ1knO1xu
XHR9XG5cdHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG59O1xuLy88L2x0SUU5Plxu
XG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0ZWRTdHlsZTogZnVuY3Rpb24ocHJv
cGVydHkpe1xuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRTdHls
ZSkgcmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldO1xuXHRcdHZh
ciBkZWZhdWx0VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQodGhpcykuZGVmYXVsdFZpZXcsXG5c
dFx0XHRjb21wdXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHls
ZSh0aGlzLCBudWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRlZC5n
ZXRQcm9wZXJ0eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHByb3Bl
cnR5Lmh5cGhlbmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNldFN0eWxlOiBmdW5jdGlvbihwcm9w
ZXJ0eSwgdmFsdWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpe1xuXHRcdFx0aWYg
KHZhbHVlICE9IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cdFx0XHRzZXRPcGFj
aXR5KHRoaXMsIHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRwcm9wZXJ0
eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkp
O1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcnKXtcblx0XHRcdHZhciBtYXAgPSAo
RWxlbWVudC5TdHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3BsaXQoJyAnKTtcblx0XHRcdHZhbHVl
ID0gQXJyYXkuY29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdGlm
ICghbWFwW2ldKSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVybiAodHlwZU9mKHZhbCkgPT0gJ251
bWJlcicpID8gbWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsO1xuXHRc
dFx0fSkuam9pbignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJlcih2
YWx1ZSkpKXtcblx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHRo
aXMuc3R5bGVbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKCh2YWx1
ZSA9PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90UmVtb3ZlU3R5bGVzICYmIHRoaXMu
c3R5bGUucmVtb3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92ZVN0eWxlKHRoaXMuc3R5bGUsIHBy
b3BlcnR5KTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdv
cGFjaXR5JykgcmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5cdFx0cHJvcGVydHkgPSBjYW1lbENh
c2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAo
c3VwcG9ydEJvcmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRleE9mKCdib3JkZXJSYWRpdXMnKSAh
PSAtMSl7XG5cdFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJp
Z2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbUxlZnRS
YWRpdXMnXS5tYXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVb
Y29ybmVyXSB8fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpvaW4oJyAnKTtcblx0XHR9XG5cdFx0
dmFyIHJlc3VsdCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xuXHRcdGlmICghcmVzdWx0IHx8IHBy
b3BlcnR5ID09ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVtZW50LlNob3J0U3R5bGVzLmhhc093
blByb3BlcnR5KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3VsdCA9IFtdO1xuXHRcdFx0XHRmb3Ig
KHZhciBzIGluIEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVydHldKSByZXN1bHQucHVzaCh0aGlz
LmdldFN0eWxlKHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdFx0XHR9
XG5cdFx0XHRyZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRcdH1c
blx0XHRpZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRpb25b
WFldPyQvLnRlc3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvKHRv
cHxyaWdodHxib3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24pe1xuXHRcdFx0XHRyZXR1
cm4gbmFtZWRQb3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0fSkgfHwgJzBweCc7XG5cdFx0fVxu
XHRcdGlmICghcmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKSByZXR1
cm4gJzBweCAwcHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRcdFx0cmVzdWx0ID0gU3RyaW5nKHJl
c3VsdCk7XG5cdFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3JnYmE/XFwoW1xcZFxccyxd
K1xcKS8pO1xuXHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xvclsw
XSwgY29sb3JbMF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRT
dHlsZSAmJiAhdGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRcdFx0aWYgKCgvXihoZWlnaHR8d2lk
dGgpJC8pLnRlc3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1bHQpKSl7XG5cdFx0XHRc
dHZhciB2YWx1ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQnXSA6
IFsndG9wJywgJ2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRcdFx0dmFsdWVzLmVhY2goZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5nZXRTdHlsZSgnYm9yZGVyLScgKyB2
YWx1ZSArICctd2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRTdHlsZSgncGFkZGluZy0nICsgdmFs
dWUpLnRvSW50KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gdGhpc1snb2Zm
c2V0JyArIHByb3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4Jztcblx0XHRcdH1cblx0
XHRcdGlmICgoL15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5
KSAmJiBpc05hTihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0XHRcdFx0cmV0dXJuICcwcHgnO1xu
XHRcdFx0fVxuXHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRpZiAocmV0dXJuc0JvcmRlcnNJbldy
b25nT3JkZXIgJiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRvbXxMZWZ0KT8kLy50ZXN0KHByb3Bl
cnR5KSAmJiAvXiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2Uo
L14oLispXFxzKC4rKVxccyguKykkLywgJyQyICQzICQxJyk7XG5cdFx0fVxuXHRcdC8vPC9sdElF
OT5cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0c2V0U3R5bGVzOiBmdW5jdGlvbihz
dHlsZXMpe1xuXHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxlcykgdGhpcy5zZXRTdHlsZShzdHls
ZSwgc3R5bGVzW3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGVz
OiBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRBcnJheS5mbGF0dGVuKGFy
Z3VtZW50cykuZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmdl
dFN0eWxlKGtleSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59
KTtcblxuRWxlbWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0
b206ICdAcHgnLCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4Jywg
bWF4V2lkdGg6ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1pbkhl
aWdodDogJ0BweCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tncm91
bmRTaXplOiAnQHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAnQHB4IEBweCcsIGNvbG9yOiAncmdi
KEAsIEAsIEApJyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4JywgbGlu
ZUhlaWdodDogJ0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBweCknLFxuXHRtYXJnaW46
ICdAcHggQHB4IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyOiAn
QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkn
LFxuXHRib3JkZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlclN0eWxlOiAnQCBAIEAg
QCcsIGJvcmRlckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkg
cmdiKEAsIEAsIEApJyxcblx0ekluZGV4OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0OiAn
QCcsIHRleHRJbmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0BweCBA
cHggQHB4IEBweCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJnaW46
IHt9LCBwYWRkaW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJTdHls
ZToge30sIGJvcmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdM
ZWZ0J10uZWFjaChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2YXIgU2hvcnQgPSBFbGVtZW50LlNo
b3J0U3R5bGVzO1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7XG5cdFsnbWFyZ2luJywgJ3Bh
ZGRpbmcnXS5lYWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2YXIgc2QgPSBzdHlsZSArIGRpcmVj
dGlvbjtcblx0XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdAcHgnO1xuXHR9KTtcblx0
dmFyIGJkID0gJ2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNob3J0LmJvcmRlcltiZF0gPSBBbGxb
YmRdID0gJ0BweCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBiZHcgPSBiZCArICdXaWR0aCcsIGJk
cyA9IGJkICsgJ1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InO1xuXHRTaG9ydFtiZF0gPSB7fTtc
blx0U2hvcnQuYm9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2JkXVtiZHddID0gQWxsW2Jkd10gPSAn
QHB4Jztcblx0U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jk
c10gPSAnQCc7XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFs
bFtiZGNdID0gJ3JnYihALCBALCBAKSc7XG59KTtcblxuaWYgKGhhc0JhY2tncm91bmRQb3NpdGlv
blhZKSBFbGVtZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3JvdW5k
UG9zaXRpb25YOiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307XG59KSgpO1xuXG4vKlxu
LS0tXG5cbm5hbWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
bWV0aG9kcyB0byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVt
ZW50cyBhbmQgdGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5jcmVkaXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294
ZG9vXShodHRwOi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBb
TEdQTCBMaWNlbnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS5cbiAg
LSBWaWV3cG9ydCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFo
b28uY29tL3l1aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5j
b20veXVpL2xpY2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHls
ZV1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0
aW9uKCl7XG5cbnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG5c
dGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbGVtZW50LnN0eWxlLmhl
aWdodCA9ICcwJztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xudmFyIGJyb2tlbk9mZnNl
dFBhcmVudCA9IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQpO1xuZWxlbWVudCA9IGNo
aWxkID0gbnVsbDtcblxudmFyIGhlaWdodENvbXBvbmVudHMgPSBbJ2hlaWdodCcsICdwYWRkaW5n
VG9wJywgJ3BhZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lkdGgnLCAnYm9yZGVyQm90dG9tV2lk
dGgnXSxcblx0d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcsICdwYWRkaW5nTGVmdCcsICdwYWRk
aW5nUmlnaHQnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnXTtcblxudmFy
IHN2Z0NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5cblx0dmFyIGdDUyA9IHdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7eDogMCwgeTogMH07XG5cblx0aGVp
Z2h0Q29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnkgKz0gcGFyc2VG
bG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihj
c3Mpe1xuXHRcdGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0cmV0
dXJuIGJvdW5kcztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJu
IHN0eWxlU3RyaW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpO1xu
fTtcblxudmFyIGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gaXNPZmZz
ZXQoZWwpIHx8ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChlbC50YWdOYW1lKTtcbn07XG5c
bkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSl7XG5cdFx0
aWYgKGlzQm9keSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKHgsIHkp
O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExlZnQgPSB4O1xuXHRcdFx0dGhpcy5z
Y3JvbGxUb3AgPSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTaXpl
OiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRv
dygpLmdldFNpemUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRcdC8vIFRoaXMgaWYgY2xhdXNlIGlz
IGJlY2F1c2UgSUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvZiBl
bGVtZW50cyB3aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRcdGlmICghd2luZG93LmdldENvbXB1
dGVkU3R5bGUpIHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRIZWln
aHR9O1xuXHRcdC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIsIGNh
bGxpbmcgYHN2Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4ZWQg
dGhlIHN2ZyBzaXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzogaHR0cHM6Ly9idWd6aWxsYS5tb3pp
bGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0aWYgKHRoaXMuZ2V0KCd0YWcnKSA9
PSAnc3ZnJykgcmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhpcyk7XG5cblx0XHR0cnkge1xuXHRc
dFx0dmFyIGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRyZXR1
cm4ge3g6IGJvdW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07XG5cdFx0fSBjYXRjaCAoZSl7
XG5cdFx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1cblx0fSxcblxuXHRnZXRTY3JvbGxT
aXplOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdp
bmRvdygpLmdldFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsV2lkdGgs
IHk6IHRoaXMuc2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7
XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xs
KCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQsIHk6IHRoaXMuc2Nyb2xsVG9wfTtc
blx0fSxcblxuXHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhp
cy5wYXJlbnROb2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHR3aGlsZSAoZWxlbWVu
dCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5zY3Jv
bGxMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdGVs
ZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtc
blx0fSxcblxuXHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9mZnNldFBhcmVudCA/IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwg
c3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7
XG5cblx0XHR2YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRp
b24nKSA9PSAnc3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6IGlzT2Zmc2V0O1xuXHRcdHdoaWxl
ICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xuXHRcdFx0aWYgKGlzT2Zmc2V0Q2hl
Y2soZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0
fSA6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHko
ZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykg
cmV0dXJuIG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFy
ZW50O1xuXHRcdH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRnZXRP
ZmZzZXRzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3QgPSB0
aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlmIChoYXNHZXRCb3VuZGluZ0NsaWVu
dFJlY3Qpe1xuXHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxc
blx0XHRcdFx0aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVs
ZW1lbnQpLFxuXHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3JvbGwoKSxcblx0XHRcdFx0
ZWxlbVNjcm9sbHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0XHRcdFx0aXNGaXhlZCA9IChzdHls
ZVN0cmluZyh0aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKTtcblxuXHRcdFx0cmV0dXJuIHtc
blx0XHRcdFx0eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy54ICsgKChpc0Zp
eGVkKSA/IDAgOiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGllbnRMZWZ0LFxuXHRcdFx0XHR5OiBi
b3VuZC50b3AudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDogaHRt
bFNjcm9sbC55KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBl
bGVtZW50ID0gdGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0aWYgKGlzQm9keSh0
aGlzKSkgcmV0dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShl
bGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDtcblx0XHRc
dHBvc2l0aW9uLnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5cblx0XHRcdGVsZW1lbnQgPSBlbGVt
ZW50Lm9mZnNldFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5c
blx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtcblx0XHR2YXIgb2Zmc2V0ID0gdGhp
cy5nZXRPZmZzZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmdldFNjcm9sbHMoKTtcblx0XHR2
YXIgcG9zaXRpb24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAtIHNjcm9sbC54LFxuXHRcdFx0eTog
b2Zmc2V0LnkgLSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRpZiAocmVsYXRpdmUgJiYgKHJlbGF0
aXZlID0gZG9jdW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0XHR2YXIgcmVsYXRpdmVQb3NpdGlv
biA9IHJlbGF0aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRyZXR1cm4ge3g6IHBvc2l0aW9uLngg
LSByZWxhdGl2ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJlbGF0aXZlKSwgeTogcG9zaXRpb24u
eSAtIHJlbGF0aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihyZWxhdGl2ZSl9O1xuXHRcdH1cblx0
XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGVs
ZW1lbnQpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdl
dENvb3JkaW5hdGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihlbGVt
ZW50KSxcblx0XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHR2YXIgb2JqID0ge1xuXHRc
dFx0bGVmdDogcG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9zaXRpb24ueSxcblx0XHRcdHdpZHRo
OiBzaXplLngsXG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRcdH07XG5cdFx0b2JqLnJpZ2h0ID0g
b2JqLmxlZnQgKyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRvbSA9IG9iai50b3AgKyBvYmouaGVp
Z2h0O1xuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlv
bihvYmope1xuXHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBvYmoueCAtIHN0eWxlTnVtYmVyKHRo
aXMsICdtYXJnaW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmoueSAtIHN0eWxlTnVtYmVyKHRoaXMs
ICdtYXJnaW4tdG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlvbihv
Ymope1xuXHRcdHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihvYmop
KTtcblx0fVxuXG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRvd10uaW52b2tlKCdpbXBsZW1lbnQn
LCB7XG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxl
bWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGllbnRXaWR0aCwgeTogZG9jLmNsaWVu
dEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdHZhciB3aW4g
PSB0aGlzLmdldFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJl
dHVybiB7eDogd2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3JvbGxMZWZ0LCB5OiB3aW4ucGFnZVlP
ZmZzZXQgfHwgZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rp
b24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKSxcblx0XHRcdG1pbiA9
IHRoaXMuZ2V0U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5O1xu
XG5cdFx0cmV0dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xsV2lkdGgsIGJvZHkuc2Nyb2xsV2lk
dGgsIG1pbi54KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxIZWln
aHQsIG1pbi55KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIHt4OiAwLCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oKXtc
blx0XHR2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHJldHVybiB7dG9wOiAwLCBsZWZ0
OiAwLCBib3R0b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwgaGVpZ2h0OiBzaXplLnksIHdpZHRo
OiBzaXplLnh9O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRlIG1ldGhvZHNcblxudmFyIHN0eWxl
U3RyaW5nID0gRWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xuXG5mdW5jdGlvbiBzdHlsZU51bWJl
cihlbGVtZW50LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHlsZSku
dG9JbnQoKSB8fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpe1xuXHRy
ZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbn1cblxuZnVu
Y3Rpb24gbGVmdEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQs
ICdib3JkZXItbGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7XG5c
dHJldHVybiAoL14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7XG59XG5c
bmZ1bmN0aW9uIGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7XG5cdHZhciBkb2MgPSBlbGVtZW50
LmdldERvY3VtZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRN
b2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xufVxuXG59KSgpO1xu
XG4vL2FsaWFzZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7IC8v
Y29tcGF0YWJpbGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdpbXBs
ZW1lbnQnLCB7XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdl
dFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbExlZnQ6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDtcblx0fSxcblxuXHRnZXRT
Y3JvbGxIZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgp
Lnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0U2Nyb2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0VG9wOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxcblxuXHRnZXRMZWZ0OiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDtcblx0fVxuXG59KTtcblxuLypc
bi0tLVxuXG5uYW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGJhc2ljIGFuaW1h
dGlvbiBsb2dpYyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3RoZXIgRnggQ2xhc3Nlcy5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQ2hhaW4sIEV2ZW50cywgT3B0
aW9ucywgQ2xhc3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBGeFxuXG4uLi5cbiovXG5cbihmdW5j
dGlvbigpe1xuXG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRz
OiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6
IHtcblx0XHQvKlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRvbkNhbmNlbDogbmlsLFxuXHRcdG9u
Q29tcGxldGU6IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAsXG5cdFx0dW5pdDogZmFsc2UsXG5c
dFx0ZHVyYXRpb246IDUwMCxcblx0XHRmcmFtZXM6IG51bGwsXG5cdFx0ZnJhbWVTa2lwOiB0cnVl
LFxuXHRcdGxpbms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0
aW9ucyl7XG5cdFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7XG5cdFx0dGhp
cy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0cmV0dXJuIC0oTWF0aC5jb3MoTWF0
aC5QSSAqIHApIC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5cblx0c3RlcDogZnVuY3Rpb24obm93
KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7XG5cdFx0XHR2YXIgZGlmZiA9ICh0
aGlzLnRpbWUgIT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRpZmYg
LyB0aGlzLmZyYW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRpbWUgPSBub3c7XG5cdFx0XHR0aGlz
LmZyYW1lICs9IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSsrO1xuXHRc
dH1cblxuXHRcdGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpe1xuXHRcdFx0dmFyIGRlbHRh
ID0gdGhpcy50cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7XG5cdFx0XHR0aGlz
LnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpO1xuXHRcdH0gZWxz
ZSB7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLnNldCh0aGlz
LmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0
XHR9XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdHJldHVybiBub3c7XG5cdH0s
XG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRyZXR1cm4gRngu
Y29tcHV0ZShmcm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xu
XHRcdGlmICghdGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlz
Lm9wdGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1
cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNz
KGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxz
ZTtcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5j
aGVjayhmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZnJvbSA9IGZyb207XG5cdFx0
dGhpcy50byA9IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCkg
PyAwIDogLTE7XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zaXRpb24gPSB0
aGlzLmdldFRyYW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVzID0gdGhpcy5vcHRpb25zLmZyYW1l
cywgZnBzID0gdGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZHVyYXRp
b247XG5cdFx0dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9uc1tkdXJhdGlvbl0gfHwgZHVyYXRp
b24udG9JbnQoKTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXHRcdHRo
aXMuZnJhbWVzID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbiAvIHRoaXMuZnJh
bWVJbnRlcnZhbCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGlu
Zycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRc
dHRoaXMuZmlyZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0cHVzaEluc3RhbmNl
LmNhbGwodGhpcywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBmdW5j
dGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51
bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0
XHRcdGlmICh0aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtcblx0XHRcdFx0dGhpcy5maXJlRXZl
bnQoJ2NvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxDaGFp
bigpKSB0aGlzLmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0
XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVjdCk7
XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5zdWJqZWN0ID09PSB0aGlzID8gbnVs
bCA6IHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNh
bmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25z
LmZwcyk7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLmZpcmVF
dmVudCgnY2FuY2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7XG5cdFx0XHR0aGlzLnJl
amVjdCh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRw
YXVzZTogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25z
LmZwcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlc3VtZTogZnVuY3Rp
b24oKXtcblx0XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCB0
aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpc1J1bm5pbmc6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbdGhpcy5vcHRpb25zLmZwc107
XG5cdFx0cmV0dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTtcblx0fSxcblxuXHRpc1Bh
dXNlZDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1lcykg
JiYgIXRoaXMuaXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5cbkZ4LmNvbXB1dGUgPSBmdW5jdGlv
bihmcm9tLCB0bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207
XG59O1xuXG5GeC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9u
Zyc6IDEwMDB9O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZhciBpbnN0YW5jZXMgPSB7fSwgdGlt
ZXJzID0ge307XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtcblx0dmFyIG5vdyA9IERhdGUubm93
KCk7XG5cdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGluc3RhbmNl
ID0gdGhpc1tpXTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTtcblx0fVxu
fTtcblxudmFyIHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5z
dGFuY2VzW2Zwc10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10pO1xuXHRsaXN0LnB1c2godGhpcyk7
XG5cdGlmICghdGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0gbG9vcC5wZXJpb2RpY2FsKE1hdGgu
cm91bmQoMTAwMCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFyIHB1bGxJbnN0YW5jZSA9IGZ1bmN0
aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc107XG5cdGlmIChsaXN0KXtcblx0
XHRsaXN0LmVyYXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5sZW5ndGggJiYgdGltZXJzW2Zwc10p
e1xuXHRcdFx0ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRcdFx0dGltZXJzW2Zwc10gPSBjbGVh
ckludGVydmFsKHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4t
LS1cblxubmFtZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ1NTIGFuaW1h
dGlvbiBsb2dpYy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4LkVsZW1lbnRzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtGeCwgRWxlbWVudC5TdHls
ZV1cblxucHJvdmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5cbkZ4LkNTUyA9IG5ldyBDbGFzcyh7
XG5cblx0RXh0ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVj
dFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpe1xuXHRc
dHZhbHVlcyA9IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0XHR2YXIgZnJvbSA9IHZhbHVlc1sw
XSwgdG8gPSB2YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51bGwpe1xuXHRcdFx0dG8gPSBmcm9t
O1xuXHRcdFx0ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0dmFyIHVu
aXQgPSB0aGlzLm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9n
aXRodWIuY29tL3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4LmpzI0wyOTlcblx0XHRcdGlmICh1
bml0ICYmIGZyb20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmluZycgJiYgZnJvbS5zbGljZSgtdW5p
dC5sZW5ndGgpICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9tKSAhPSAwKXtcblx0XHRcdFx0ZWxl
bWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtcblx0XHRcdFx0dmFyIHZhbHVlID0g
ZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gSUUgYW5kIE9w
ZXJhIHN1cHBvcnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhcblx0XHRcdFx0aWYgKCEoL3B4JC8u
dGVzdCh2YWx1ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbKCdwaXhlbC0n
ICsgcHJvcGVydHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7
XG5cdFx0XHRcdFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJpay5l
YWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxXG5cdFx0
XHRcdFx0XHR2YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDtcblx0XHRcdFx0XHRcdGVsZW1l
bnQuc3R5bGUubGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVudC5z
dHlsZS5waXhlbExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0O1xu
XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9tID0gKHRvIHx8IDEpIC8gKHBhcnNl
RmxvYXQodmFsdWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJvbSkgfHwgMCk7XG5cdFx0XHRcdGVs
ZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0KTtcblx0XHRcdH1cblx0XHR9XG5c
dFx0cmV0dXJuIHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9O1xu
XHR9LFxuXG5cdC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheVxuXG5cdHBhcnNlOiBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5jb252ZXJ0KHZhbHVlKSgpO1xuXHRc
dHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDog
QXJyYXkuY29udmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2YWwp
e1xuXHRcdFx0dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0
XHRcdE9iamVjdC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpe1xuXHRcdFx0
XHRpZiAoZm91bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBhcnNlZCA9IHBhcnNlci5wYXJzZSh2
YWwpO1xuXHRcdFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6
IHBhcnNlZCwgcGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7XG5cdFx0XHRmb3VuZCA9IGZvdW5k
IHx8IHt2YWx1ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307XG5cdFx0XHRy
ZXR1cm4gZm91bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9jb21wdXRlcyBieSBhIGZyb20gYW5k
IHRvIHByZXBhcmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBhcnNlcnMuXG5cblx0Y29tcHV0ZTog
ZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgY29tcHV0ZWQgPSBbXTtcblx0XHQo
TWF0aC5taW4oZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpe1xuXHRc
dFx0Y29tcHV0ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52
YWx1ZSwgdG9baV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pO1xuXHRc
dH0pO1xuXHRcdGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdmeDpjc3M6dmFs
dWUnKTtcblx0XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5cblx0Ly9zZXJ2ZXMgdGhlIHZhbHVl
IGFzIHNldHRhYmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRpZiAo
dHlwZU9mKHZhbHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVl
KTtcblx0XHR2YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7
XG5cdFx0XHRyZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52
YWx1ZSwgdW5pdCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXR1cm5lZDtcblx0fSxcblxuXHQv
L3JlbmRlcnMgdGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5cblx0cmVuZGVyOiBmdW5jdGlvbihl
bGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRcdGVsZW1lbnQuc2V0U3R5bGUocHJv
cGVydHksIHRoaXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0fSxcblxuXHQvL3NlYXJjaGVzIGlu
c2lkZSB0aGUgcGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVzIGZvciBhIHNlbGVjdG9yXG5cblx0
c2VhcmNoOiBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYgKEZ4LkNTUy5DYWNoZVtzZWxlY3Rv
cl0pIHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xuXHRcdHZhciB0byA9IHt9LCBzZWxl
Y3RvclRlc3QgPSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9yLmVzY2FwZVJlZ0V4cCgpICsgJyQn
KTtcblxuXHRcdHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRBcnJh
eS5lYWNoKHJ1bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRcdFx0aWYgKHJ1bGUubWVkaWEpe1xu
XHRcdFx0XHRcdHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpO1xuXHRc
dFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGUpIHJldHVy
bjtcblx0XHRcdFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxlLnNlbGVjdG9yVGV4dCkgPyBydWxl
LnNlbGVjdG9yVGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0aW9uKG0pe1xuXHRcdFx0XHRcdHJl
dHVybiBtLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDogbnVsbDtcblx0XHRcdFx0aWYgKCFz
ZWxlY3RvclRleHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNlbGVjdG9yVGV4dCkpIHJldHVybjtc
blx0XHRcdFx0T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBzdHls
ZSl7XG5cdFx0XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0U3R5
bGVzW3N0eWxlXSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVb
c3R5bGVdKTtcblx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9ecmdiLykudGVzdCh2YWx1ZSkpID8g
dmFsdWUucmdiVG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07
XG5cblx0XHRBcnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVldCl7
XG5cdFx0XHR2YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0XHRpZiAoaHJlZiAmJiBocmVmLmlu
ZGV4T2YoJzovLycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgPT0gLTEp
IHJldHVybjtcblx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVz
O1xuXHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gRnguQ1NT
LkNhY2hlW3NlbGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xuXG5GeC5DU1MuQ2FjaGUgPSB7fTtc
blxuRnguQ1NTLlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtcblx0XHRwYXJzZTogZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1
cm4gdmFsdWUuaGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1h
dGNoKC8oXFxkKyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykpKSA/IFt2YWx1ZVsxXSwgdmFsdWVb
Ml0sIHZhbHVlWzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oZnJv
bSwgdG8sIGRlbHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7
XG5cdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0sIGRl
bHRhKSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSl7XG5c
dFx0XHRyZXR1cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0fVxuXHR9LFxuXG5cdE51bWJlcjog
e1xuXHRcdHBhcnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1dGU6IEZ4LmNvbXB1dGUsXG5cdFx0
c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRcdHJldHVybiAodW5pdCkgPyB2YWx1
ZSArIHVuaXQgOiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0U3RyaW5nOiB7XG5cdFx0cGFyc2U6
IEZ1bmN0aW9uLmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKHplcm8sIG9u
ZSl7XG5cdFx0XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHplcm8p
e1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5cbn07XG5cblxuXG4vKlxuLS0tXG5c
bm5hbWU6IEZ4Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVj
dCB0byB0cmFuc2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1l
bnQgdXNpbmcgYW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnBy
b3ZpZGVzOiBGeC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1vcnBoID0gbmV3IENsYXNzKHtcblxu
XHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0
aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxl
bWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlv
bihub3cpe1xuXHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJpbmcnKSBub3cgPSB0aGlzLnNlYXJj
aChub3cpO1xuXHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQs
IHAsIG5vd1twXSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIG5vdyA9IHt9
O1xuXHRcdGZvciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0gdGhpcy5wYXJlbnQoZnJvbVtwXSwg
dG9bcF0sIGRlbHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlv
bihwcm9wZXJ0aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydGllcykpIHJldHVybiB0
aGlzO1xuXHRcdGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAnc3RyaW5nJykgcHJvcGVydGllcyA9
IHRoaXMuc2VhcmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBmcm9tID0ge30sIHRvID0ge307XG5c
dFx0Zm9yICh2YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRcdHZhciBwYXJzZWQgPSB0aGlzLnBy
ZXBhcmUodGhpcy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3BdKTtcblx0XHRcdGZyb21bcF0gPSBw
YXJzZWQuZnJvbTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRvO1xuXHRcdH1cblx0XHRyZXR1cm4g
dGhpcy5wYXJlbnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMu
bW9ycGggPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgnbW9y
cGgnKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9ycGggPSB0aGlzLnJldHJpZXZlKCdt
b3JwaCcpO1xuXHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9ycGggPSBuZXcgRnguTW9ycGgodGhp
cywge2xpbms6ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTtc
blx0XHR9XG5cdFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRtb3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLnN0
YXJ0KHByb3BzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5u
YW1lOiBGeC5UcmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2YgYWR2
YW5jZWQgdHJhbnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nlcy5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWFzaW5nIEVx
dWF0aW9ucyBieSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vh
c2luZy8+LCBtb2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29scy5c
blxucmVxdWlyZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFuc2l0aW9uc1xuXG4uLi5cbiovXG5c
bkZ4LmltcGxlbWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHR2YXIg
dHJhbnMgPSB0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5lLmVh
c2VJbk91dDtcblx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdzdHJpbmcnKXtcblx0XHRcdHZhciBk
YXRhID0gdHJhbnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5zID0gRnguVHJhbnNpdGlvbnM7XG5c
dFx0XHR0cmFucyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5zW2RhdGFbMF0uY2FwaXRhbGl6ZSgp
XTtcblx0XHRcdGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5zWydlYXNlJyArIGRhdGFbMV0uY2Fw
aXRhbGl6ZSgpICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0YWxpemUoKSA6ICcnKV07XG5cdFx0
fVxuXHRcdHJldHVybiB0cmFucztcblx0fVxuXG59KTtcblxuRnguVHJhbnNpdGlvbiA9IGZ1bmN0
aW9uKHRyYW5zaXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9IEFycmF5LmNvbnZlcnQocGFyYW1z
KTtcblx0dmFyIGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHRyYW5zaXRpb24o
cG9zLCBwYXJhbXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHtcblx0
XHRlYXNlSW46IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0
dXJuIDEgLSB0cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7XG5cdFx0fSxcblx0XHRlYXNlSW5P
dXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0aW9u
KDIgKiBwb3MsIHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFyYW1z
KSkpIC8gMjtcblx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMgPSB7XG5cblx0bGlu
ZWFyOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVybztcblx0fVxuXG59O1xuXG5cblxu
RnguVHJhbnNpdGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpe1xuXHRmb3IgKHZh
ciB0cmFuc2l0aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9
IG5ldyBGeC5UcmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTtcbn07XG5cbkZ4LlRy
YW5zaXRpb25zLmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4g
TWF0aC5wb3cocCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxuXG5cdEV4cG86IGZ1bmN0aW9uKHAp
e1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAxKSk7XG5cdH0sXG5cblx0Q2lyYzog
ZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xuXHR9
LFxuXG5cdFNpbmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MocCAqIE1h
dGguUEkgLyAyKTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlvbihwLCB4KXtcblx0XHR4ID0geCAm
JiB4WzBdIHx8IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEpICog
cCAtIHgpO1xuXHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24ocCl7XG5cdFx0dmFyIHZhbHVlO1xu
XHRcdGZvciAodmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89IDIpe1xuXHRcdFx0aWYg
KHAgPj0gKDcgLSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZhbHVlID0gYiAqIGIgLSBNYXRoLnBv
dygoMTEgLSA2ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9
XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxuXHRFbGFzdGljOiBmdW5jdGlvbihw
LCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAtLXApICogTWF0aC5jb3MoMjAgKiBw
ICogTWF0aC5QSSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtcblx0fVxuXG59KTtcblxuWydRdWFk
JywgJ0N1YmljJywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBp
KXtcblx0RnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihmdW5j
dGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpO1xuXHR9KTtcbn0pO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHls
ZSwgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVudC5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJv
dmlkZXM6IFtGeC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVtZW50LmhpZ2hsaWdodF1cblxuLi4u
XG4qL1xuXG5GeC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5c
dGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVu
dCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50
KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7XG5cdFx0
aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRub3cgPSBwcm9wZXJ0eTtcblx0XHRc
dHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7XG5cdFx0
fVxuXHRcdHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRp
b25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihw
cm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJvbSwg
dG8pKSByZXR1cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRz
KTtcblx0XHR0aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Muc2hp
ZnQoKTtcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhpcy5w
cm9wZXJ0eSwgYXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBwYXJz
ZWQudG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7XG5cblx0
c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwoKS5z
ZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpO1xuXHRcdGlm
ICghdHdlZW4pe1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdjYW5j
ZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHR3ZWVuO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHR0d2Vlbjog
ZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5zdGFy
dChwcm9wZXJ0eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZhZGU6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdldCgndHdlZW4nKSwgbWV0aG9kLCBh
cmdzID0gWydvcGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyksIHRvZ2dsZTtcblx0XHRpZiAoYXJn
c1sxXSA9PSBudWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5cdFx0c3dpdGNoIChhcmdzWzFdKXtc
blx0XHRcdGNhc2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xu
XHRcdFx0Y2FzZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xu
XHRcdFx0Y2FzZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5c
dFx0XHRjYXNlICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0
XHRcdGNhc2UgJ3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFk
ZTpmbGFnJywgdGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpO1xuXHRcdFx0XHRtZXRob2Qg
PSAnc3RhcnQnO1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/IDAgOiAxO1xuXHRcdFx0XHR0aGlz
LnN0b3JlKCdmYWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRcdHRvZ2dsZSA9IHRydWU7XG5cdFx0
XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0gJ3N0YXJ0Jztcblx0XHR9XG5cdFx0
aWYgKCF0b2dnbGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTtcblx0XHRmYWRlW21ldGhv
ZF0uYXBwbHkoZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0gYXJnc1thcmdzLmxlbmd0aCAtIDFd
O1xuXG5cdFx0aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNp
YmlsaXR5JywgdG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtcblx0XHR9IGVsc2UgaWYg
KHRvICE9IDApe1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxlbmd0aCl7XG5cdFx0XHRcdGZhZGUu
Y2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2li
aWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHRc
dH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScs
ICd2aXNpYmxlJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhZGUuY2hhaW4oZnVu
Y3Rpb24oKXtcblx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpKSBy
ZXR1cm47XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdoaWRk
ZW4nKTtcblx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVuZCl7
XG5cdFx0aWYgKCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9y
aWdpbmFsJywgdGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpKTtcblx0XHRcdGVuZCA9
IChlbmQgPT0gJ3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBlbmQ7XG5cdFx0fVxuXHRcdHZhciB0
d2VlbiA9IHRoaXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVuLnN0YXJ0KCdiYWNrZ3JvdW5kLWNv
bG9yJywgc3RhcnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHR0
aGlzLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0
Om9yaWdpbmFsJykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWluKCk7XG5cdFx0fS5iaW5kKHRoaXMp
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1
ZXN0XG5cbmRlc2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBV
c2VzIFhNTEhUVFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IFtPYmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRo
ZW5hYmxlLCBCcm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVzdFxuXG4uLi5cbiovXG5cbihmdW5j
dGlvbigpe1xuXG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sXG5cdHByb2dyZXNzU3VwcG9ydCA9
ICgnb25wcm9ncmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVzdCk7XG5cbnZhciBSZXF1ZXN0ID0g
dGhpcy5SZXF1ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50
cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHsvKlxuXHRcdG9uUmVx
dWVzdDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCwgeGhy
KXt9LFxuXHRcdG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Db21w
bGV0ZTogZnVuY3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sXG5cdFx0b25T
dWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKXt9LFxuXHRcdG9uRmFp
bHVyZTogZnVuY3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0aW9uOiBmdW5jdGlvbihoZWFkZXJO
YW1lLCB2YWx1ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSxcblx0XHR1c2VyOiAn
Jyxcblx0XHRwYXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqL1xuXHRc
dHVybDogJycsXG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0J1gtUmVxdWVz
dGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0J0FjY2VwdCc6ICd0ZXh0L2phdmFz
Y3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH0s
XG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxzZSxcblx0XHRtZXRob2Q6ICdwb3N0
Jyxcblx0XHRsaW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nlc3M6IG51bGwsXG5cdFx0ZW11bGF0
aW9uOiB0cnVlLFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5cdFx0ZW5jb2Rpbmc6ICd1dGYtOCcs
XG5cdFx0ZXZhbFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxSZXNwb25zZTogZmFsc2UsXG5cdFx0
dGltZW91dDogMCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xu
XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlzLm9w
dGlvbnMuaGVhZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpe1xuXHRc
dHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAhdGhp
cy5ydW5uaW5nKSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5z
dGF0dXMgPSAwO1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBz
dGF0dXMgPSB4aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0dXMgPSAoc3RhdHVzID09IDEyMjMp
ID8gMjA0IDogc3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0eGhyLm9ucmVhZHlzdGF0
ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNz
ID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0
Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0
fVxuXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5yZXNwb25zZVRleHQgfHwg
JycsIHhtbDogdGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaXNT
dWNjZXNzLmNhbGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRcdFx0dGhpcy5zdWNjZXNzKHRoaXMu
cmVzcG9uc2UudGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMu
ZmFpbHVyZSgpO1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc3Rh
dHVzID0gdGhpcy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8
IDMwMCk7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAhIXRo
aXMucnVubmluZztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0czogZnVuY3Rpb24odGV4dCl7XG5c
dFx0aWYgKHRoaXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwgKC8oZWNtYXxqYXZhKXNjcmlwdC8p
LnRlc3QodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpKSkgcmV0dXJuIEJyb3dzZXIuZXhl
Yyh0ZXh0KTtcblx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxT
Y3JpcHRzKTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0LCB4bWwpe1xuXHRcdHRo
aXMub25TdWNjZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4dCksIHhtbCk7XG5cdFx0dGhpcy5y
ZXNvbHZlKHt0ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9LFxuXG5cdG9uU3VjY2VzczogZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVF
dmVudCgnc3VjY2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7XG5cdH0sXG5cblx0ZmFpbHVy
ZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgpO1xuXHRcdHRoaXMucmVqZWN0KHty
ZWFzb246ICdmYWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdG9uRmFpbHVyZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQoJ2Zh
aWx1cmUnLCB0aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCl7
XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTtcblx0
fSxcblxuXHRwcm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdw
cm9ncmVzcycsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHR0aW1lb3V0OiBmdW5jdGlv
bigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0JywgdGhpcy54aHIpO1xuXHRcdHRoaXMu
cmVqZWN0KHtyZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdHNl
dEhlYWRlcjogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHRoaXMuaGVhZGVyc1tuYW1lXSA9
IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldEhlYWRlcjogZnVuY3Rpb24o
bmFtZSl7XG5cdFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHJl
dHVybiB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcblx0XHR9LmJpbmQodGhpcykp
O1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSBy
ZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2Ug
J2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4n
OiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBm
YWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHNlbmQ6IGZ1bmN0aW9u
KG9wdGlvbnMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7XG5c
blx0XHR0aGlzLm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5vcHRpb25zLmlzU3VjY2VzcyB8fCB0
aGlzLmlzU3VjY2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0dmFyIHR5cGUg
PSB0eXBlT2Yob3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAn
ZWxlbWVudCcpIG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307XG5cblx0XHR2YXIgb2xkID0gdGhp
cy5vcHRpb25zO1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwg
dXJsOiBvbGQudXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTtcblx0XHR2YXIgZGF0
YSA9IG9wdGlvbnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlvbnMudXJsKSwgbWV0aG9kID0gb3B0
aW9ucy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3aXRjaCAodHlwZU9mKGRhdGEpKXtc
blx0XHRcdGNhc2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVyeVN0
cmluZygpOyBicmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRhID0g
T2JqZWN0LnRvUXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9u
cy5mb3JtYXQpe1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3JtYXQ9JyArIHRoaXMub3B0aW9ucy5m
b3JtYXQ7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0ICsgJyYnICsgZGF0YSA6IGZvcm1h
dDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAn
cG9zdCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIF9tZXRob2QgPSAnX21ldGhvZD0n
ICsgbWV0aG9kO1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDog
X21ldGhvZDtcblx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5v
cHRpb25zLnVybEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCddLmNvbnRhaW5zKG1ldGhvZCkpe1xu
XHRcdFx0dmFyIGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5lbmNvZGluZykgPyAnOyBjaGFyc2V0
PScgKyB0aGlzLm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0XHRcdHRoaXMuaGVhZGVyc1snQ29u
dGVudC10eXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyArIGVuY29k
aW5nO1xuXHRcdH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRo
bmFtZTtcblxuXHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwubGFzdEluZGV4T2YoJy8nKTtcblx0
XHRpZiAodHJpbVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9mKCcj
JykpID4gLTEpIHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9uKTtcblxuXHRcdGlmICh0
aGlzLm9wdGlvbnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0x
ID8gJyYnIDogJz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xuXG5cdFx0aWYgKGRhdGEgJiYgKG1l
dGhvZCA9PSAnZ2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScpKXtcblx0XHRcdHVybCArPSAodXJs
LmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRhdGE7XG5cdFx0XHRkYXRhID0gbnVs
bDtcblx0XHR9XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHByb2dyZXNzU3Vw
cG9ydCl7XG5cdFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlzLmxvYWRzdGFydC5iaW5kKHRoaXMp
O1xuXHRcdFx0eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7XG5cdFx0
fVxuXG5cdFx0eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCwgdGhpcy5vcHRpb25z
LmFzeW5jLCB0aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtcblx0XHRp
ZiAoKHRoaXMub3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYmICd3aXRoQ3JlZGVudGlhbHMnIGlu
IHhocikgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblx0XHR4aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG5cblx0XHRPYmplY3QuZWFj
aCh0aGlzLmhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0dHJ5IHtcblx0XHRc
dFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKXtc
blx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7XG5cdFx0
XHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24nLCB4aHI6IHhociwgZXhjZXB0aW9u
OiBlfSk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRUaGVuYWJs
ZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUoe3JlYXNv
bjogJ3NlbmQnfSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7XG5cdFx0
eGhyLnNlbmQoZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25TdGF0
ZUNoYW5nZSgpO1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aW1lb3V0KSB0aGlzLnRpbWVy
ID0gdGhpcy50aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50aW1lb3V0LCB0aGlzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlz
LnJ1bm5pbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHZh
ciB4aHIgPSB0aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtcblx0XHRpZiAodGhpcy50aW1lcil7
XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1l
cjtcblx0XHR9XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChw
cm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7
XG5cdFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5maXJlRXZl
bnQoJ2NhbmNlbCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6IHho
cn0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgbWV0aG9kcyA9IHt9O1xu
WydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VUJywg
J1BPU1QnLCAnUFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlvbiht
ZXRob2Qpe1xuXHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIgb2Jq
ZWN0ID0ge1xuXHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9O1xuXHRcdGlmIChkYXRhICE9IG51
bGwpIG9iamVjdC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7XG5c
dH07XG59KTtcblxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbkVsZW1lbnQuUHJvcGVy
dGllcy5zZW5kID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIHNlbmQg
PSB0aGlzLmdldCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNlbmQuc2V0T3B0aW9ucyhvcHRpb25z
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IHNlbmQgPSB0aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0aWYgKCFzZW5kKXtcblx0XHRcdHNl
bmQgPSBuZXcgUmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCBt
ZXRob2Q6IHRoaXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2FjdGlv
bicpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNl
bmQ6IGZ1bmN0aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7XG5c
dFx0c2VuZGVyLnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJsIHx8IHNlbmRlci5vcHRpb25zLnVy
bH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IFJlcXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVx
dWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBI
VE1MIHJlc3BvbnNlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBbRWxlbWVudCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJlcXVlc3QuSFRNTFxuXG4uLi5cbiov
XG5cblJlcXVlc3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxu
XHRvcHRpb25zOiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0XHRhcHBlbmQ6IGZhbHNlLFxuXHRc
dGV2YWxTY3JpcHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFsc2UsXG5cdFx0aGVhZGVyczoge1xu
XHRcdFx0QWNjZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyon
XG5cdFx0fVxuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBvcHRp
b25zID0gdGhpcy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRyZXNw
b25zZS5odG1sID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2NyaXB0KXtcblx0XHRcdHJl
c3BvbnNlLmphdmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7XG5cblx0XHR2YXIgbWF0Y2ggPSBy
ZXNwb25zZS5odG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9pKTtc
blx0XHRpZiAobWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTtcblx0XHR2YXIgdGVtcCA9
IG5ldyBFbGVtZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblxuXHRcdHJl
c3BvbnNlLnRyZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0cmVzcG9uc2UuZWxlbWVudHMgPSB0
ZW1wLmdldEVsZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7XG5cblx0XHRpZiAob3B0aW9u
cy5maWx0ZXIpIHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50cztcblx0XHRpZiAob3B0
aW9ucy51cGRhdGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRvY3VtZW50LmlkKG9wdGlvbnMudXBk
YXRlKS5lbXB0eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB1cGRhdGUuYWRvcHQocmVz
cG9uc2UuZWxlbWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUuc2V0KCdodG1sJywgcmVzcG9uc2Uu
aHRtbCk7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7XG5cdFx0XHR2YXIgYXBwZW5k
ID0gZG9jdW1lbnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVy
KSByZXNwb25zZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVuZCk7XG5cdFx0XHRlbHNl
IGFwcGVuZC5hZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9u
cy5ldmFsU2NyaXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXG5cdFx0
dGhpcy5vblN1Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNl
Lmh0bWwsIHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dHJlZTogcmVz
cG9uc2UudHJlZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1lbnRzLCBodG1sOiByZXNwb25zZS5o
dG1sLCBqYXZhc2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0fSk7XG5cdH1cblxufSk7XG5cbkVs
ZW1lbnQuUHJvcGVydGllcy5sb2FkID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dmFyIGxvYWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpO1xuXHRcdGxvYWQuc2V0T3B0
aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCdsb2FkJyk7XG5cdFx0aWYgKCFsb2Fk
KXtcblx0XHRcdGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtkYXRhOiB0aGlzLCBsaW5rOiAnY2Fu
Y2VsJywgdXBkYXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCds
b2FkJywgbG9hZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2FkO1xuXHR9XG5cbn07XG5cbkVsZW1l
bnQuaW1wbGVtZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZ2V0KCdsb2Fk
Jykuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDog
VHlwZS5pc1N0cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0t
LVxuXG5uYW1lOiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5TZWVBbHNvOiA8aHR0cDovL3d3dy5q
c29uLm9yZy8+XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl1c
blxucHJvdmlkZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVm
aW5lZCcpIHRoaXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBzcGVjaWFs
ID0geydcXGInOiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0JywgJ1xcbic6ICdcXFxcbicsICdcXGYn
OiAnXFxcXGYnLCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdcXFxcXCInLCAnXFxcXCc6ICdcXFxc
XFxcXCd9O1xuXG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXtcblx0cmV0dXJuIHNwZWNpYWxb
Y2hyXSB8fCAnXFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2
KSkuc2xpY2UoLTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7XG5c
dHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAtOWEt
ZkEtRl17NH0pL2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXCJbXlwiXFxcXFxcblxccl0q
XCJ8dHJ1ZXxmYWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/
L2csICddJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csICcn
KTtcblxuXHRyZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50ZXN0KHN0cmluZyk7XG59O1xuXG5K
U09OLmVuY29kZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rpb24ob2JqKXtcblx0cmV0dXJuIEpT
T04uc3RyaW5naWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2JqKXtcblx0aWYgKG9iaiAmJiBvYmou
dG9KU09OKSBvYmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dpdGNoICh0eXBlT2Yob2JqKSl7XG5c
dFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCInICsgb2JqLnJlcGxhY2UoL1tcXHgw
MC1cXHgxZlxcXFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5cdFx0Y2FzZSAnYXJyYXknOlxuXHRc
dFx0cmV0dXJuICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7XG5cdFx0
Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2YXIgc3RyaW5nID0gW107XG5cdFx0
XHRPYmplY3QuZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0XHR2YXIganNv
biA9IEpTT04uZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYgKGpzb24pIHN0cmluZy5wdXNoKEpT
T04uZW5jb2RlKGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICd7
JyArIHN0cmluZyArICd9Jztcblx0XHRjYXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzogcmV0
dXJuICcnICsgb2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1cm4gJ251bGwnO1xuXHR9XG5cblx0
cmV0dXJuIG51bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRydWU7XG5cblxuSlNPTi5kZWNvZGUg
PSBmdW5jdGlvbihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJp
bmcpICE9ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRpZiAoc2VjdXJlID09IG51bGwpIHNl
Y3VyZSA9IEpTT04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtcblx0XHRpZiAoSlNPTi5wYXJzZSkg
cmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAoIUpTT04udmFsaWRhdGUoc3RyaW5n
KSkgdGhyb3cgbmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1
cml0eSBpcyBlbmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4nKTtcblx0fVxuXG5c
dHJldHVybiBldmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59O1xuXG59KSgpO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMg
UmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Igc2VuZGluZyBhbmQgcmVj
ZWl2aW5nIEpTT04gZGF0YS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBbUmVxdWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJlcXVlc3QuSlNPTlxuXG4uLi5cbiov
XG5cblJlcXVlc3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxu
XHRvcHRpb25zOiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqL1xu
XHRcdHNlY3VyZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMp
e1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9iamVjdC5hcHBlbmQodGhpcy5oZWFk
ZXJzLCB7XG5cdFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0J1gtUmVx
dWVzdCc6ICdKU09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQp
e1xuXHRcdHZhciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRqc29uID0gdGhpcy5yZXNwb25zZS5q
c29uID0gSlNPTi5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25zLnNlY3VyZSk7XG5cdFx0fSBjYXRj
aCAoZXJyb3Ipe1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7
XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29uID09IG51bGwpe1xuXHRcdFx0dGhp
cy5mYWlsdXJlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub25TdWNjZXNzKGpzb24sIHRl
eHQpO1xuXHRcdFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7XG5cdFx0
fVxuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENvb2tpZVxuXG5kZXNjcmlwdGlvbjog
Q2xhc3MgZm9yIGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29raWVz
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBCYXNlZCBv
biB0aGUgZnVuY3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3Jn
KS5cblxucmVxdWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxuXG5wcm92aWRlczogQ29va2llXG5c
bi4uLlxuKi9cblxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogT3B0
aW9ucyxcblxuXHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8nLFxuXHRcdGRvbWFpbjogZmFsc2Us
XG5cdFx0ZHVyYXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTogZmFsc2UsXG5cdFx0ZG9jdW1lbnQ6
IGRvY3VtZW50LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRodHRwT25seTogZmFsc2Vcblx0fSxc
blxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRcdHRoaXMua2V5ID0g
a2V5O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHR3cml0ZTogZnVu
Y3Rpb24odmFsdWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW5jb2RlKSB2YWx1ZSA9IGVuY29k
ZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kb21haW4pIHZhbHVl
ICs9ICc7IGRvbWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFpbjtcblx0XHRpZiAodGhpcy5vcHRp
b25zLnBhdGgpIHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoO1xuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xu
XHRcdFx0ZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgdGhpcy5vcHRpb25zLmR1cmF0aW9u
ICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1ZSArPSAnOyBleHBpcmVzPScgKyBk
YXRlLnRvR01UU3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2
YWx1ZSArPSAnOyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaHR0cE9ubHkpIHZhbHVl
ICs9ICc7IEh0dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0gdGhp
cy5rZXkgKyAnPScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFkOiBm
dW5jdGlvbigpe1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUu
bWF0Y2goJyg/Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtd
KiknKTtcblx0XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVsxXSkg
OiBudWxsO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0bmV3IENvb2tpZSh0
aGlzLmtleSwgT2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9KSku
d3JpdGUoJycpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5Db29raWUud3JpdGUg
PSBmdW5jdGlvbihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5
LCBvcHRpb25zKS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29raWUucmVhZCA9IGZ1bmN0aW9uKGtl
eSl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSkucmVhZCgpO1xufTtcblxuQ29va2llLmRpc3Bv
c2UgPSBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9w
dGlvbnMpLmRpc3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxubmFtZTogRE9NUmVhZHlcblxuZGVz
Y3JpcHRpb246IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1l
bnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XVxuXG4uLi5cbiovXG5c
bihmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50KXtcblxudmFyIHJlYWR5LFxuXHRsb2FkZWQsXG5c
dGNoZWNrcyA9IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1lcixcblx0dGVzdEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIGRvbXJlYWR5ID0gZnVuY3Rpb24o
KXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFyZWFkeSl7XG5cdFx0QnJvd3Nlci5s
b2FkZWQgPSByZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ0RPTUNv
bnRlbnRMb2FkZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2Un
LCBjaGVjayk7XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHRcdHdpbmRv
dy5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8gY2xlYW51cCBzY29wZSB2YXJzXG5c
dGRvY3VtZW50ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsO1xufTtcblxudmFyIGNoZWNr
ID0gZnVuY3Rpb24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlmIChj
aGVja3NbaV0oKSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRy
ZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91
dCh0aW1lcik7XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEwKTtc
bn07XG5cbmRvY3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkp
O1xuXG4vKjxsdElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmluaSBo
dHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkL1xuLy8gdGVzdEVsZW1l
bnQuZG9TY3JvbGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBpbiB0
aGUgdG9wIHdpbmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlvbigpe1xuXHR0cnkge1xu
XHRcdHRlc3RFbGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2gg
KGUpe31cblx0cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRvU2Nyb2xsIHdvcmtzIGFscmVhZHks
IGl0IGNhbid0IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJlYWR5XG4vLyAgIGUuZy4gaW4gYW4g
aWZyYW1lXG5pZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYgIWRvU2Nyb2xsV29ya3MoKSl7XG5c
dGNoZWNrcy5wdXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91bGRQb2xsID0gdHJ1ZTtcbn1cbi8q
PC9sdElFOD4qL1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rp
b24oKXtcblx0dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcblx0cmV0dXJuIChzdGF0
ZSA9PSAnbG9hZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUnKTtcbn0pO1xuXG5pZiAoJ29ucmVh
ZHlzdGF0ZWNoYW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50LmFkZExpc3RlbmVyKCdyZWFkeXN0
YXRlY2hhbmdlJywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xsID0gdHJ1ZTtcblxuaWYgKHNob3Vs
ZFBvbGwpIHBvbGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9tcmVhZHkgPSB7XG5cdG9uQWRkOiBm
dW5jdGlvbihmbil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxsKHRoaXMpO1xuXHR9XG59O1xuXG4v
LyBNYWtlIHN1cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZFxuRWxlbWVudC5FdmVu
dHMubG9hZCA9IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRc
dGlmIChsb2FkZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNhbGwodGhpcyk7XG5cdH0sXG5cdGNv
bmRpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9PSB3aW5kb3cpe1xuXHRcdFx0ZG9t
cmVhZHkoKTtcblx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2FkO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY3VzdG9tIGxv
YWQgZXZlbnRcbndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9uKCl7XG5cdGxvYWRlZCA9
IHRydWU7XG59KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7XG4iCittb2R1bGUuZXhwb3J0cyA9
ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBbVmFsZXJpbyBQ
cm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1aWxkOiBodHRw
czovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdiMTczZDVkZWZm
NjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3JpcHRpb246IFRoZSBoZWFy
dCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNvcHlyaWdo
dDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0
aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9vbHMgcHJvZHVjdGlvbiB0
ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJhdGlvbjpcbiAg
LSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0cDovL2RlYW4u
ZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMpIDIwMDYgRGVh
biBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwOi8vb3Bl
bnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAgLSBTb21lIGZ1bmN0aW9u
YWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3Byb3RvdHlwZWpzLm9yZykg
Q29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtNSVQgTGljZW5zZV0oaHR0
cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxucHJvdmlkZXM6
IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRpdmVdXG5cbi4u
LlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFs
ZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuKi9cbihmdW5jdGlv
bigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxuXHRidWlsZDog
JzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmInXG59O1xuXG4vLyB0eXBl
T2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cdGlmIChpdGVtLiRmYW1p
bHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlmIChpdGVtLm5vZGVOYW1l
KXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnO1xuXHRcdGlm
IChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3QoaXRlbS5ub2RlVmFsdWUp
ID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlmICh0eXBlb2YgaXRlbS5s
ZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4gJ2Fy
Z3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24nO1xu
XHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGluc3RhbmNlT2YgPSB0aGlz
Lmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRlbSA9PSBudWxs
KSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9yIHx8
IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0aWYgKGNvbnN0
cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0cnVjdG9yID0gY29uc3Ry
dWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICghaXRlbS5oYXNPd25Qcm9w
ZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0ZW0gaW5zdGFu
Y2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1lcmFibGVzID0gdHJ1ZTtc
bmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMgPSBudWxsO1xuaWYgKGVu
dW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHknLCAndmFsdWVPZicsICdp
c1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywg
J3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJhYmxlcykgZm9yICh2YXIg
aSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVtZXJhYmxlc1tp
XTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIgY2Fu
IGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRob3V0IHN3YXBw
aW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBm
bi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9sdElFOD4qL1xuXG4vLyBG
dW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0aW9uO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xu
XHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoYSA9
PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdz
dHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFba10p
O1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShh
LCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRz
ZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufTtc
blxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFs
KXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5cdFx0dmFyIGFy
Z3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhO1xuXHRc
dGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJndW1lbnRzO1xuXHRcdGVs
c2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJncyl7XG5cdFx0XHRyZXN1
bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgcmVz
dWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1
bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24oa2V5
LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRo
aXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuLy8gRnJv
bVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbkFycmF5LmNvbnZlcnQg
PSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHRyZXR1
cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnKSA/
ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2UuY2FsbChpdGVtKSA6IFtp
dGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJu
ICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVt
KXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJldHVybiBpc0Zpbml0ZShu
dW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252ZXJ0ID0gZnVuY3Rpb24o
aXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVuY3Rpb24uZnJvbSA9IEZ1
bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0O1xuU3RyaW5nLmZy
b20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxuXG5GdW5jdGlvbi5pbXBs
ZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVuID0gdHJ1ZTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8v
IFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3Qpe1xu
XHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHZh
ciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiAodHlwZU9mKGl0ZW0p
ID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hlY2s7
XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5wcm90b3R5cGUuJGZhbWls
eSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9KS5oaWRlKCk7
XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBudWxs
O1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBl
O1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVjdDtcblxuXHRyZXR1cm4g
b2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztc
blxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIChpdGVtICE9
IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwo
aXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFyIGhvb2tzID0ge307XG5c
bnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0eXBlT2Yob2Jq
ZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAoaG9va3NbdHlwZV0gPSBb
XSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYg
KG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZhciBob29rcyA9IGhvb2tz
T2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKyl7XG5c
dFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykg
aW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhvb2suY2FsbCh0
aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3VzID0gdGhpcy5wcm90b3R5
cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAodGhpc1tuYW1lXSA9PSBu
dWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5h
bWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBwbHkoaXRlbSwgc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xu
XHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAh
cHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtcbn07XG5cblR5cGUuaW1w
bGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpLFxuXG5c
dGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1bmN0aW9uKG5h
bWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0aGlzLnByb3Rv
dHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0bWlycm9yOiBmdW5j
dGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7XG5cbi8vIERlZmF1bHQg
VHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXtcblx0
dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90b3R5cGUgPSBvYmplY3Qu
cHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5hbWUsIG9iamVj
dCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmljID0gb2JqZWN0W2tleV0s
XG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVyaWMpIGdlbmVy
aWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9iamVjdC5pbXBsZW1lbnQo
a2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlwZSl7XG5cdFx0dmFyIG1l
dGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhvZHNb
MF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYg
KCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsg
aSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0aG9k
c1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIHByb3Rv
dHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpO1xuXHRcdH07XG5c
dH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBbXG5c
dCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFpbnMnLCAnaW5kZXhPZics
ICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNlJywgJ3NlYXJjaCcsXG5c
dCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9Mb3dl
ckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwgW1xuXHQncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnZmls
dGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3JlZHVj
ZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwgW1xuXHQndG9FeHBvbmVu
dGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1
bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdcbl0pKCdSZWdF
eHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmplY3QnLCBPYmplY3QsIFtc
blx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tleXMn
LFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dldE93
blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxlJywg
J3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0RhdGUnLCBEYXRl
LCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigpO1xu
XG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJuICsobmV3IERhdGUpO1xu
fSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8vIGZpeGVzIE5hTiByZXR1
cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9uKCl7
XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251bGwnO1xufS5oaWRlKCk7
XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFuZG9tJywgZnVuY3Rpb24o
bWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1p
biArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5cbkFycmF5Lmlt
cGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1c
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0
QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7XG5cdFx0XHRpZiAoaGFz
T3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7XG5cdFx0fVxuXHRcdC8q
PGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVuY3Rp
b24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0SUU4PiovXG5c
dFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBmbiwg
YmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5c
dFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fSk7XG5c
dH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7XG5cblxuLy8gQXJyYXkg
JiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xuXG52YXIgY2xv
bmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7XG5cdFx0Y2Fz
ZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2UgJ29iamVjdCc6IHJldHVy
biBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07XG5cdH1cbn07
XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xuXHR2YXIgaSA9IHRoaXMu
bGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGktLSkgY2xvbmVbaV0gPSBj
bG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxudmFyIG1lcmdlT25lID0g
ZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVPZihjdXJyZW50
KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yoc291cmNlW2tleV0pID09
ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpO1xuXHRcdFx0ZWxz
ZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0XHRcdGJyZWFrO1xuXHRc
dGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25lKCk7IGJyZWFrO1xuXHRc
dGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRyZXR1cm4gc291cmNlO1xu
fTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgaywgdil7
XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwg
aywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0W2tleV0pO1xuXHRcdH1c
blx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihvYmplY3Qpe1xu
XHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tl
eV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0
YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRlbmRlZCA9IGFyZ3VtZW50
c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5
XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbDtcblx0fVxuXG59
KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAnV2hpdGVTcGFjZScsICdU
ZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2goZnVuY3Rpb24obmFtZSl7
XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIgVUlEID0gRGF0
ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpe1xuXHRyZXR1
cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxu
bmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMgbGlr
ZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlcblxuLi4uXG4qL1xuXG5B
cnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBp
LCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXHRc
dGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsr
KSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtcblx0XHRcdGlmIChmbi5j
YWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVuY3Rpb24oaXRlbSwgZnJv
bSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXHRcdGZvciAodmFyIGkg
PSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9tIHx8IDA7IGkg
PCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG5c
dFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShsZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKGkg
aW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHQv
KjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmZpbHRl
cihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51bGw7XG5cdFx0fSk7XG5c
dH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0XHR2YXIgYXJncyA9IEFy
cmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7XG5c
dFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlzKXtcblx0XHR2YXIgb2Jq
ID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tpXTtc
blx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0XHRcdGlmIChv
YmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzW2ldO1xu
XHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0
fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdGNvbnRhaW5z
OiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0sIGZy
b20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHRoaXMu
cHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhpcy5s
ZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9tKDAsIHRoaXMubGVuZ3Ro
IC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRp
ZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtpXSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRc
dGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0g
aXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcnJheSA9IFtd
O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9PSAnbnVsbCcp
IGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5JyB8
fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3RhbmNl
T2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0aW9uKCl7XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRp
ZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0aW9u
KHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7XG5c
dFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGFy
cmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxuXHRyZ2JUb0hleDogZnVu
Y3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsO1xuXHRc
dGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAn
dHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7XG5c
dFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7XG5cdFx0
fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycpO1xuXHR9XG5c
bn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFzcywgYW5kIGRl
bGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxu
cHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5kKHtcblxuXHRh
dHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXJndW1lbnRz
W2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9
XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKGFy
Z3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBBcnJh
eS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1cm4gbnVsbDtc
blx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rpb24odGhhdCl7XG5cdFx0
dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gQXJy
YXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rpb24oKXt9O1xu
XG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBjb250ZXh0ID0gdGhhdCwg
bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlzIGluc3RhbmNlb2YgYm91
bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBlO1xuXHRcdFx0XHRjb250
ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdzICYmICFsZW5n
dGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRcdDogc2VsZi5hcHBseShj
b250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNlKGFyZ3VtZW50
cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNvbnRleHQgPT0gdGhhdCA/
IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5cdH0sXG5cdC8q
PC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR2YXIg
c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZlcnQo
YXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2VsZi5hcHBseShi
aW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxuXHRkZWxheTogZnVuY3Rp
b24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHRoaXMucGFzcygo
YXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtcblx0fSxcblxuXHRwZXJp
b2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0
SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVy
aW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IE51bWJlclxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91bmQs
IHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xuXG5OdW1iZXIuaW1wbGVt
ZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRcdHJldHVybiBNYXRoLm1p
bihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbihw
cmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCku
dG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xuXHRcdHJldHVybiBNYXRo
LnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdHRpbWVzOiBm
dW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzOyBpKyspIGZu
LmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFz
ZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9XG5cbn0pO1xu
XG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0aW9uKG1hdGgpe1xuXG52
YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdGlmICghTnVt
YmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gTWF0aFtu
YW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKSkp
O1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbn0pKFsnYWJzJywg
J2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdm
bG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10p
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgU3Ry
aW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0b0lu
dC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZSwgQXJy
YXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJpbmcuaW1wbGVtZW50KHtc
blxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5nLCBpbmRleCl7XG5cdFx0
cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkgOiBTdHJpbmcodGhpcykp
LmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0ZXN0OiBmdW5j
dGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdyZWdl
eHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRoaXMp
O1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5y
ZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xu
XHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLmNo
YXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhlbmF0ZTogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0
aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hhckF0KDApLnRvTG93ZXJD
YXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBmdW5jdGlvbihtYXRjaCl7
XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRl
c2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNl
KC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9LFxuXG5cdHRv
SW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAx
MCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9h
dCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciBo
ZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sxLDJ9
KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpIDog
bnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciByZ2Ig
PSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJldHVybiAocmdiKSA/IHJn
Yi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6IGZ1bmN0aW9u
KG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVnZXhw
IHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5hbWUpe1xuXHRc
dFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTtc
blx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDogJyc7
XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEJyb3dzZXJcblxu
ZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFs
aXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBGdW5jdGlvbiwg
TnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVudF1c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVu
dDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xuXG52YXIgcGFyc2UgPSBm
dW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG5cdHBsYXRm
b3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6ICcnKTtcblxuXHQvLyBj
aHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIGVk
Z2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNocm9tZS5cblx0dmFyIFVB
ID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSspLyk7XG5cdGlmICghVUEp
e1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx0cmlkZW50fGNy
aW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwoPzpydltcXHNc
XC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykgfHwgW251bGwsICd1bmtu
b3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0XHRVQVsxXSA9
ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9IGVsc2UgaWYgKFVBWzFd
ID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRwbGF0Zm9ybSA9
IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86d2Vi
b3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXInXSlb
MF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAnd2luZG93cyc7XG5cblx0
cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQsXG5cdFx0bmFt
ZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxuXHRcdHZlcnNpb246IHBh
cnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFbNF0gOiBVQVsyXSksXG5c
dFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJvd3NlciA9IHRoaXMuQnJv
d3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5c
bmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpe1xuXHRC
cm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbkJyb3dzZXIuZXh0
ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLFxu
XHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0fSxcblx0cGFyc2VVQTog
cGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJlcXVlc3QgPSAoZnVuY3Rp
b24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBYTUxI
dHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9z
b2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlv
bigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwgZnVuY3Rpb24o
KXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5jdGlvbigpe1xu
XHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxufSkoKTtcblxuQnJvd3Nl
ci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8gU3RyaW5nIHNj
cmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5cdGlmICghdGV4dCkgcmV0
dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93LmV4ZWNTY3Jp
cHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3VtZW50LmhlYWQu
YXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlw
dCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50KCdzdHJpcFNj
cmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAnJztcblx0dmFyIHRleHQg
PSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8XFwvc2NyaXB0Pi9naSwg
ZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxuJztcblx0XHRy
ZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5leGVjKHNjcmlw
dHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRz
LCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93LCBEb2N1bWVudFxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50LFxuXHRXaW5kb3c6IHRo
aXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0aGlzLkV2ZW50
XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdXaW5k
b3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCd3
aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtc
blx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9jdW1lbnQgPSBkb2N1bWVu
dC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pO1xuXG5k
b2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7XG5c
bkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1bWVudFtuYW1l
XSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKSB0
cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZEltYWdlQ2FjaGUnLCBmYWxz
ZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5pZiAodGhpcy5hdHRhY2hF
dmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVubG9hZEV2ZW50ID0gZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtc
blx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LndpbmRvdyA9IG51
bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7XG5cdH07XG5c
dHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xufVxuXG4vLyBJRSBm
YWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxzZWxl
Y3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkge1xuXHRhcnJheUZyb20o
ZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJheS5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYmIFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXtcblx0XHRc
dHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpO1xuXHRcdFx0d2hpbGUg
KGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdH1cblx0
XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBwcm90b3R5cGUgPSBBcnJh
eS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7XG5cdFsncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgbWV0
aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQoaXRlbSksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRpbmcsIGFuZCBp
bXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE51bWJlcl1cblxucHJv
dmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBDbGFzcyA9IHRo
aXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJhbXMpe1xuXHRpZiAoaW5z
dGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRpYWxpemU6IHBhcmFtc307
XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRp
ZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLiRjYWxsZXIg
PSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFyIHZhbHVlID0gKHRoaXMu
aW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRo
aXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsO1xuXHRcdHJldHVybiB2
YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7XG5cblx0bmV3Q2xhc3Mu
JGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS4kY29uc3RydWN0b3Ig
PSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDtcblxuXHRy
ZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7XG5cdGlmICgh
dGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJlbnRcIiBjYW5u
b3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxlci4kbmFtZSxcblx0XHRw
YXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRwcmV2aW91cyA9IChwYXJl
bnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlmICghcHJldmlvdXMpIHRo
cm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBubyBwYXJlbnQu
Jyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFy
IHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtc
blx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVuY3Rpb24oKXt9O1xuXHRc
dFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9IHJlc2V0KG5l
dyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IG9iamVjdFtrZXldID0g
dmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmplY3Q7XG59O1xu
XG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZC4k
b3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdyYXBwZXIgPSBmdW5jdGlv
bigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVsbCkg
dGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdcIiBjYW5ub3QgYmUgY2Fs
bGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3VycmVudCA9IHRoaXMuJGNh
bGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBwZXI7
XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHRo
aXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuXHRcdHJldHVybiBy
ZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46IG1ldGhvZCwgJG5hbWU6
IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJvcGVy
dHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywgdmFs
dWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0fVxuXG5cdGlmICh0
eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1ZS4kaGlkZGVuKSByZXR1
cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFpbikgPyB2YWx1ZSA6IHdy
YXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1lcmdlKHRoaXMu
cHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxudmFy
IGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90eXBpbmcgPSB0
cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4kcHJvdG90eXBp
bmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVudCgnaW1wbGVtZW50Jywg
aW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9IHtcblxuXHRF
eHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xuXHRc
dHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0fSxcblxuXHRJbXBsZW1l
bnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChpdGVtcykuZWFjaChmdW5j
dGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRcdFx0Zm9yICh2
YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBrZXksIGluc3RhbmNlW2tl
eV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBDbGFz
c2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBlYXNl
IHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5FeHRyYXMs
IENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnRo
aXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5cblx0Y2hhaW46IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0KCkuYXBwbHko
dGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0cmV0dXJuIHN0cmluZy5y
ZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRcdHJldHVybiBm
aXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZlbnRzID0gbmV3IENsYXNz
KHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGlu
dGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0XHRcblxuXHRcdHRoaXMu
JGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4pO1xu
XHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciB0eXBl
IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkp
e1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZl
bnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJy
YXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRp
ZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBw
bHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0eXBlID0gcmVtb3ZlT24o
dHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoZXZl
bnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBldmVudHMuaW5kZXhPZihm
bik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNbaW5kZXhdO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50
cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtc
blx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRz
W3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZlbnRzKSBldmVu
dHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0aGlzLiRldmVudHMpe1xu
XHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGludWU7XG5cdFx0XHR2YXIg
Zm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZucy5sZW5ndGg7
IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5z
W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnRo
aXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBseShudWxsLCBb
e30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRcdGlmICh0aGlzLmFkZEV2
ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRpZiAodHlwZU9mKG9wdGlv
bnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qob3B0aW9uKSkg
Y29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tvcHRpb25dKTtc
blx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLlRoZW5hYmxlXG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1wbGVt
ZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBcInRoZW5hYmxlXCIuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlk
ZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIFNU
QVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFURV9SRUpFQ1RF
RCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0gbmV3IENsYXNzKHtcblxu
XHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5hYmxlUmVzdWx0OiBudWxs
LFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVl
KXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0ZTogZnVuY3Rpb24oKXtc
blx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBTVEFURV9QRU5E
SU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX0ZVTEZJ
TExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX1JF
SkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9XG5cdH0sXG5cblx0cmVz
ZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtc
blx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0aGVuOiBmdW5j
dGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBvbkZ1bGZpbGxl
ZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknO1xuXHRcdGlmICh0eXBl
b2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9ICdUaHJvd2VyJztcblxu
XHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4kdGhlbmFibGVS
ZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0XHRmdWxmaWxs
SGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVyOiBvblJlamVjdGVkXG5c
dFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7
XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0s
XG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0cmV0dXJuIHRoaXMudGhl
bihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFibGUuZXh0ZW5kKHtcblx0
cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJsZTtcblx0XHRpZiAodmFs
dWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVlO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0cmVzb2x2ZSh0
aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cdHJl
amVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUo
KTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gcmVzb2x2ZSh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVqZWN0KHRoZW5h
YmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBpdHNl
bGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVj
dCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIgdGhlbjtcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBjYXRjaCAoZXhj
ZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxu
XHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0dmFyIHJlc29s
dmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dHJ5IHtc
blx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0
XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7
XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRy
ZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0
XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRcdFx0XHRcdFx0
XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRcdFx0XHRcdFx0
XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAo
ZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRy
ZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9u
KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNl
IHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxz
ZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1
bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJs
ZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQg
PSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExFRDtc
blxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWplY3QodGhlbmFi
bGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVO
RElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJs
ZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9QRU5E
SU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtcblx0dmFyIHN0YXRlID0g
dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhlbmFibGUuJHRoZW5hYmxl
UmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyxcblx0
XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxIYW5kbGVyJztc
blx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RIYW5kbGVyJztcblx0fVxu
XG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVzdWx0LCByZWFjdGlvbnMs
IHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25zLCB0
eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgKytp
KXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5kbGVyID0gcmVh
Y3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7XG5cdFx0XHRy
ZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAoaGFuZGxl
ciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0
KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50
aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5c
dFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0
XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZp
bmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7XG5cdGRlZmVy
ID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0g
J3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7XG5cdGRlZmVy
ID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xuXHR9O1xufVxuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlvbjogT2JqZWN0IGdlbmVy
aWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5
cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGsgaW4g
b2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0
cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBy
ZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5
c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtl
eSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZmlsdGVy
OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRc
dHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV0sIHZhbHVlID0gb2Jq
ZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3QpKSBy
ZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5c
blx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAoIWZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtl
eXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChmbi5jYWxs
KGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJu
IGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgdmFs
dWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07
XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVz
O1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRyZXR1cm4gT2Jq
ZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0aW9uKG9iamVj
dCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNb
aV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1cm4ga2V5O1xuXHRcdH1c
blx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24ob2JqZWN0LCB2
YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZhbHVlKSAhPSBudWxsO1xu
XHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7XG5cdFx0dmFy
IHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1bmN0aW9uKHZh
bHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAnWycgKyBrZXkgKyAnXSc7
XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRc
dFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWUsIGtl
eSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRcdFx0dmFyIHFzID0ge307
XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRcdFx0cXNb
aV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2JqZWN0LnRvUXVl
cnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IHJl
c3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0XHR9XG5c
dFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQpO1xuXHRcdH0p
O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxufSko
KTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRpb246IFN0YW5k
YWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGljay5QYXJzZXJcbi4uLlxu
Ki9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJbmRleCxcblx0
Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0cmV2ZXJzZUNh
Y2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlv
bihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0
dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVlKSByZXR1cm4gZXhwcmVz
c2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15cXHMrfFxc
cyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBjdXJyZW50Q2Fj
aGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5cdGlmIChjdXJyZW50Q2Fj
aGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07XG5cdHBhcnNl
ZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczogW10sXG5cdFx0cmF3OiBl
eHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyc2Uo
dGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9ySW5kZXggPSAtMTtcblx0
d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UocmVn
ZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVzc2lvbnMubGVu
Z3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJl
dmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1
bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0gJyEnKSByZXR1cm4gJyAn
O1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAnISc7XG5cdGVsc2UgaWYg
KCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8s
ICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07XG5cbnZhciByZXZlcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24u
ZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBp
Kyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFzdCA9IHtwYXJ0
czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmluYXRvcihleHBbMF0uY29t
YmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspe1xu
XHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0
b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNvbWJpbmF0b3Ig
PSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxhc3QpO1xuXHR9XG5cdHJl
dHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmlu
Zyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFu
IDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZVxu
XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxcXF4kfCwjXFxzXS9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9KTtcbn07XG5c
bnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1YnlcbnB1dHMg
XCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxccysjLiokfFxccyt8XFxc
XCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0ICBcXFxccyogKCAsICkg
XFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAgXFxuXFxcblx0fCBcXFxc
cyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9yICAgICAgICAgXFxuXFxc
blx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29tYmluYXRvckNoaWxkcmVu
IFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAgICAjIFRhZyAgICAgICAg
ICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBJRCAg
ICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29kZT4rICAgICAgICkgICAg
ICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsgIFxcXG5cdFx0XFxcXHMq
ICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWypeJCF+fF0/PSkgICg/OiAg
XFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwiJ10/KSguKj8pXFxcXDkg
XFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxccyogIFxcXG5cdFxcXFxd
KD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/OlxcXG5cdFxcXFwoICg/
OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClcIlxuKi9cblx0XCJeKD86
XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxcXHMrKXwoPHVu
aWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+Kyl8XFxcXFtc
XFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86XFxcXHMqKD86KFtcXFwi
J10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDorKSg8dW5pY29kZT4rKSg/
OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycg
KyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAnXScpXG5cdC5yZXBsYWNl
KC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2csICcoPzpbOlxcXFx3XFxc
XHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcbik7XG5cbmZ1bmN0
aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxuXHRjb21iaW5hdG9yLFxu
XHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQsXG5cdGNsYXNzTmFtZSxc
blxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRyaWJ1dGVRdW90
ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxuXHRwc2V1ZG9DbGFzcyxc
blx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBzZXVkb0NsYXNz
VmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXtcblx0
XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0XHRjb21iaW5h
dG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7XG5cdH1cblxuXHRp
ZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29tYmluYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRcdHZhciBjdXJy
ZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTtcblx0XHRp
ZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdKVxuXHRcdFx0
Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VDb21iaW5hdG9yID0gcmV2
ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNlcGFyYXRvclsrK2NvbWJp
bmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFnOiAnKid9O1xuXHR9XG5c
blx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhd
W2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJlbnRQYXJzZWQu
dGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGlk
KXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5c
blx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBs
YWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc0xpc3Qp
IGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNs
YXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xh
c3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzZXMucHVzaCh7
XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVnRXhwKCcoXnxc
XFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxzfCQpJylcblx0XHR9KTtc
blxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNl
dWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBzZXVkb0NsYXNz
VmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBsYWNlKHJlVW5l
c2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3Vy
cmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1ZG9zLnB1c2go
e1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSxcblx0XHRc
dHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNldWRvTWFya2VyLmxlbmd0
aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAoYXR0
cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycp
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4cDtcblxuXHRc
dHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDogcmVnZXhwID0g
bmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICAgICAg
ICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAg
ICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAgICApOyBicmVh
aztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICcoXnxcXFxccyknKyBl
c2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyApOyBicmVhaztcblx0XHRc
dGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhw
KGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAgJz0nIDog
dGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09
IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZihhdHRyaWJ1
dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0nIDogdGVzdCA9
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9IHZhbHVl
O1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYg
KGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJpYnV0ZU9wZXJh
dG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxu
XHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1
ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlmICghY3VycmVudFBhcnNl
ZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtleSxcblx0XHRc
dG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVlOiBhdHRyaWJ1dGVWYWx1
ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0cmV0dXJuICcnO1xufTtc
blxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGlj
ay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gcGFyc2UoZXhwcmVzc2lv
bik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5cbmlmICghdGhp
cy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0
eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiov
dGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRpb246IFRoZSBu
ZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlkZXM6IFNsaWNrLkZpbmRl
clxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZh
ciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRvU3RyaW5nID0gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb25cblxubG9j
YWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4gKC9cXHtcXHMqXFxbbmF0
aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5cbmxvY2FsLmlzWE1MID0g
ZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVyc2lvbikgfHwg
KCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVudCkgPT0gJ1tvYmplY3Qg
WE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xuXG5sb2NhbC5zZXREb2N1
bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1lbnRzIC8gd2lu
ZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJhcG9s
YXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlwZSA9IGRvY3VtZW50Lm5v
ZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50XG5cdGVsc2UgaWYgKG5v
ZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGVcblx0ZWxz
ZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3VtZW50LmRvY3VtZW50OyAv
LyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0aGUgb2xkIGRv
Y3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50KSByZXR1cm47XG5cdHRo
aXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUgZmVh
dHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxuXHR2YXIgcm9vdCA9IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhpcy5nZXRVSURYTUwocm9v
dCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRcdGZlYXR1cmU7
XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRc
dFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0XHRyZXR1cm47
XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7fTtcblxuXHRm
ZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMuaXNY
TUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9IGZlYXR1cmVz
LnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxuXHQ9IGZlYXR1
cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNOXG5cdD0gZmVh
dHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRl
UVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0YXJT
ZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04sIGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjtcblxu
XHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0dmFyIHRlc3ROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290ID0gZG9jdW1l
bnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHJv
b3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxuXHQvLyBvbiBub24tSFRN
TCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsgcHJv
cGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9XCInK2lkKydc
Ij48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZlYXR1cmVzLmlzSFRNTERv
Y3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykg
Zm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMgPSAodGVzdE5vZGUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRcdC8vIElFIHJldHVybnMg
Y2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1M
ID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChzZWxlY3RlZCAmJiAhIXNl
bGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtc
blx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3Rh
clNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8vIElFIHJldHVy
bnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9yIGdldEVsZW1l
bnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5u
ZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1cIicrIGlkICsnXCI+PC9i
Pic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdGlm
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8gU2FmYXJpIDMu
MiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0cnkge1xuXHRc
dFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxhIGNsYXNzPVwi
YlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJyku
bGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9ICdiJztcblx0
XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxu
XHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVjdHMg
dGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48YSBjbGFzcz1cImYgYiBh
XCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3ROb2Rl
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVudHNC
eUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtcblx0XHR9XG5cblx0XHRp
ZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJldHVybnMgY2xv
c2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZvciBz
b21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
J2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUucXVlcnlTZWxlY3RvckFs
bCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxlY3Rl
ZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkg
PT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBxdWVy
eVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGVcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIk1pWFwi
PjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5vZGUu
cXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxu
XHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25zIG9u
IHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRN
TCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29wdGlvbj48L3Nl
bGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBID0gKHRlc3ROb2RlLnF1
ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xuXHRcdFx0fSBjYXRjaCAo
ZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0clsq
XiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0
XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xuXHRcdFx0XHRm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9y
QWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQgeCwg
Zm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXRcblx0
XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj1cInNcIj48
aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9rZW5Gb3JtQXR0cmlidXRl
R2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAhPSAn
cycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVzU2VsZWN0b3Ig
ZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3QubWF0
Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290Lm1vek1hdGNoZXNTZWxl
Y3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVhdHVyZXMubmF0
aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRy
b3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxuXHRcdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpO1xuXHRcdFx0
ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRvID0gMTtcblx0XHRkZWxl
dGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlE
SFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURY
TUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5cdHRlc3ROb2Rl
ID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tl
bkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1l
dGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0aG9kKSByZXR1
cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/IGF0dHJpYnV0
ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRc
dHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0cmV0dXJuICht
ZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblx0
fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1dGUgPSAocm9v
dCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkpID8gZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTtc
blx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5vZGUuZ2V0QXR0
cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNp
ZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5zXG5cdC8vIEZJ
WE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHht
bCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5hdGl2ZURvY3VtZW50Q29u
dGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1bWVudC5jb250YWlucyk7
XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2ZURv
Y3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNv
bnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFuYXRp
dmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdC8vIElF
OCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0XHRyZXR1cm4gY29udGV4
dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKHJvb3QgJiYgcm9vdC5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRy
ZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0aWYg
KG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtcblx0
XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRcdHJldHVybiBmYWxzZTtc
blx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8vIGNyZWRpdHMgdG8gU2l6
emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9
IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlm
ICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0
ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBpbiByb290KSA/
IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJbmRl
eCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xu
XHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICgh
YS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwO1xuXHRcdHZhciBh
UmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0KGEsIDApO1xuXHRcdGFS
YW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xuXHRcdGJSYW5n
ZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtcblxuXHRyb290ID0gbnVs
bDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVhdHVyZV0gPSBm
ZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRob2RcblxudmFyIHJlU2lt
cGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQvLFxuXHRyZUVtcHR5QXR0
cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0cXNhRmFpbEV4cENhY2hl
ID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFw
cGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8gbnVs
bCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kO1xuXHRl
bHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRleHQuZG9jdW1lbnQ7IC8v
IENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3VtZW50XG5cdGVsc2UgaWYg
KCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBcblxuXHR2YXIg
cGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhpcy51bmlxdWVzID0ge30s
XG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxuXHRcdGNvbnRl
eHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5cblx0aWYgKHRoaXMuZG9j
dW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9j
dW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lkIGR1cGxpY2F0
aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRpZiAoaGFzT3RoZXJzKSBm
b3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQoZm91bmRbaV0p
XSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRpZiAodHlwZW9mIGV4cHJl
c3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3RyaW5nXG5cblx0XHQvKjxz
aW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBsZVNlbGVjdG9yID0gZXhw
cmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1wbGVTZWxlY3RvcnM6IGlm
IChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3Rvclsx
XSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRpZiAoIXN5bWJv
bCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlROKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwg
bnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5w
dXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcjJyl7
XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1bWVu
dCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0gY29udGV4dC5nZXRFbGVt
ZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7XG5cdFx0XHRc
dGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVW
YWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChmaXJzdCkg
cmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxuXHRcdFx0fSBlbHNlIGlm
IChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwg
KCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04pICYm
IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRc
dFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5HRUJD
Til7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobmFt
ZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRc
dFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoQ2xh
c3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkgKyco
XFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRc
dFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0XHRpZiAoIShj
bGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTtcblx0XHRc
dFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhl
cnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRc
dFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDtcblxu
XHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXG5cdFx0Lyo8cXVl
cnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9yOiBpZiAoY29udGV4dC5x
dWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50XG5cdFx0
XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0XHQvL1RPRE86IG9ubHkg
c2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRcdFx0XHR8fCB0
aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5DaGVja2VkUVNB
ICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0XHR8fCAodGhp
cy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmlidXRlLnRlc3QoZXhwcmVz
c2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFjb250
ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11bHRpcGxlIGV4
cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBzaW5jZSB3ZSBjdXJyZW50
bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNzaW9u
IHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTFcblx0
XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJyZWFrIHF1ZXJ5
U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24sIF9jb250ZXh0
ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5c
dFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRcdC8vIGNyZWRpdHMgdG8g
QW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1dGUo
J2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2NvbnRleHQuc2V0QXR0cmli
dXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNraWQg
KyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0LnBhcmVudE5v
ZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIGNv
bnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtcblx0XHRcdFx0ZWxzZSBu
b2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7XG5cdFx0XHR9IGNh
dGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dID0gMTtcblx0XHRc
dFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmICgh
Y29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50SWQpIF9jb250ZXh0LnNl
dEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2NvbnRleHQucmVt
b3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBfY29udGV4dDtcblx0XHRc
dFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSkgZm9y
IChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUg
PiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3Vu
ZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytd
Oyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUp
XSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3F1
ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNl
KGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kO1xuXHR9
IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Npb25c
blx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8vIGV4
cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFyc2VkID0gZXhwcmVzc2lv
bjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50IHx8
IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGVcblx0XHQoZm91
bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjtcblx0XHRy
ZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1cm4gZm91bmQ7
XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+
Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNcblxuXHR0aGlz
LnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBl
ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRoLXBzZXVkby1z
ZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFwcGVuZCBpcyBu
dWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGV4cHJlc3Np
b24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2ggPSAoIWhhc090
aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVzc2lv
bnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDtcblxu
XHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0IGVuZ2luZVxu
XG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0LCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1zLCBjdXJyZW50
RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhw
cmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBl
eHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50RXhw
cmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0b3I6JyArIGN1
cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRpbnVl
IHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1cnJl
bnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtcblx0XHRpZCAgICAgICAg
ID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xpc3Q7
XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0XHRhdHRyaWJ1dGVzID0g
Y3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBzZXVk
b3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoIC0g
MSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRpZiAobGFzdEJpdCl7XG5c
dFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9IGZvdW5kO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRoaXMuZm91bmQg
PSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0aGlzW2NvbWJpbmF0b3Jd
KGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlz
dCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAobSA9
IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtcblx0XHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxuXG5cdFx0Y3Vy
cmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3VsZCBzb3J0IGlmIHRoZXJl
IGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4cHJlc3Npb25z
LlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkpIHRo
aXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVsbCkg
OiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAxO1xubG9jYWwudWlkayA9
ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUpe1xu
XHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtcblx0aWYgKCF1aWQpe1xu
XHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlkaywg
dWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0VUlESFRNTCA9IGZ1bmN0
aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVlTnVt
YmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9jdW1l
bnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVzdWx0
cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7XG5cdHJlc3Vs
dHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4v
Kjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwu
Y2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xcZCopPyhbYS16XSsp
PyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihhcmd1
bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTtcblx0
aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwg
ZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChhID09ICctJykgYSA9IC0x
O1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1cblx0XHQoc3BlY2lhbCA9
PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcpXHQ/IHthOiAy
LCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjogMH0gOiB7YTog
MCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9IHBhcnNlZCk7
XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwgc2libGluZywg
cG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xu
XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAoIXRoaXNbcG9zaXRpb25z
XVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAo
IXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFyZW50W2NoaWxkXSwgY291
bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGUu
bm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZU5hbWUgIT0gbm9k
ZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChl
bCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZVR5cGUgIT0g
MSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0g
PSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0
fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztcblx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5USEFyZ3VtZW50KGFyZ3Vt
ZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBhID0gcGFyc2Vk
LmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07XG5cdFx0aWYgKGEg
PT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5cdFx0XHRpZiAocG9zIDwg
YikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBvcykgcmV0dXJu
IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7XG5cdH07XG59
O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xu
fTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdGlm
ICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1ZXNbdWlkXSA9
IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59O1xuXG5sb2NhbC5tYXRj
aE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0
dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVwbGFj
ZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywgJ1skMT1cIiQyXCJdJykp
O1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZhciBwYXJzZWQgPSB0aGlz
LlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiB0cnVlO1xuXG5c
dC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJlc3Npb25zID0gcGFyc2Vk
LmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Npb247
XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpe1xuXHRcdFx0dmFyIGV4
cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihu
b2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJDYXNl
KCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykpIHJl
dHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRcdH1cblx0fVxuXG5cdGlm
IChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBpdGVtO1xuXHRm
b3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChpdGVtID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5tYXRjaFBzZXVk
byA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFyIHBzZXVkb05hbWUgPSAn
cHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNbcHNl
dWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRBdHRy
aWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8gYXJndW1lbnQgPT0gYXR0
cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9yID0gZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0
YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gbm9kZS5ub2Rl
TmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRpZiAodGFnID09ICcqJyl7
XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBjb21t
ZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG5vZGVO
YW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpZCAmJiBub2Rl
LmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBpLCBwYXJ0
LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0aWYgKCEoY2xz
ICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRp
ZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTspe1xuXHRcdHBh
cnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVzdCh0
aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9zKSBmb3IgKGkg
PSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07XG5cdFx0aWYg
KCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJuIGZh
bHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJpbmF0b3JzID0ge1xuXG5c
dCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxuXHRcdHZhciBp
LCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERvY3VtZW50KXtcblx0XHRc
dGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMuaWRH
ZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUg
IT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyB3
aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlmIHRoZXJlcyBq
dXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxsIGJlIGEgY29s
bGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRdO1xuXHRcdFx0XHRcdGlm
ICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBdKSBjaGlsZHJl
biA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2kr
K107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lk
Jyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQpe1xu
XHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWl0ZW0p
e1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBkb20gd2UgcmV0dXJuLCBl
bHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJZCBsYWJlbFxuXHRcdFx0
XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjtcblx0XHRcdFx0
XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCAh
PT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuO1xuXHRcdFx0XHR0
aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYgKGNsYXNzZXMg
JiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0
XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0Lmpv
aW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJy
ZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytd
OykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7XG5cdFx0XHRj
aGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcblx0XHRcdGlmICghKGNo
aWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRcdFx0aWYgKCF0
aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZvciAoaSA9IDA7IGl0ZW0g
PSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRyZW5c
blx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRpZiAobm9kZS5u
b2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7XG5c
dH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5c
dFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUuZmlyc3RD
aGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlz
LnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzXG5c
dFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9k
ZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7
XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRV
bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnKysnOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29tYmluYXRvcjorJ10obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBzaWJsaW5nc1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1bmN0aW9uKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBhbGwgcGFyZW50
IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2Rl
KSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IHBh
cmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0aWYgKG5v
ZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5jdGlvbihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0JyFeJzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGxh
c3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRc
dFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOiEr
J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxu
XHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5v
ZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250
aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlz
LmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMgaW4gY29tYmluYXRvcnMp
IGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52YXIgcHNldWRv
cyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2VtcHR5JzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHJldHVybiAhKGNo
aWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9kZS50
ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3QnOiBmdW5jdGlvbihub2Rl
LCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUsIGV4cHJlc3Np
b24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpe1xuXHRcdHJl
dHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhPZih0
ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LWNo
aWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGlu
ZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2
ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChw
cmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5c
dFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBlID09
IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjxudGgtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8o
J2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5cblx0J250aC1sYXN0LWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5n
JywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1
ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlwZScsIHRydWUpLFxuXG5c
dCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAn
cHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0J2luZGV4Jzog
ZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxk
J10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBmdW5jdGlvbihu
b2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybicpO1xu
XHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8L250aC1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2ZpcnN0
LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVO
YW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0
fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1l
ID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFy
IHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChwcmV2
ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFtZSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBm
YWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2YtdHlwZS1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnZGlzYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQn
Y2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmNoZWNrZWQgfHwgbm9k
ZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1
cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09
IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUobm9k
ZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdzZWxlY3RlZCc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0Lyo8L3BzZXVk
by1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3BzZXVk
bzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNcblxudmFyIGF0
dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5cdCdmb3InOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1sRm9y
IDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdocmVmJzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVm
JywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4dCA6
IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRleCc6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ3Rh
YmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3Bl
Y2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQndHlw
ZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG5c
dH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUg
PSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVycy5NQVhMRU5HVEggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4bGVuZ3RoO1xu
XG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRlclxuXG5TbGlj
ay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7XG59O1xuXG5TbGlj
ay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5cdHJldHVybiBsb2NhbC5z
ZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4vLyBTbGljayBj
b250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVy
LCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtcblx0cmV0dXJuIGxvY2Fs
LmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgZ2V0
dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2Nh
bC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0ZShub2RlLCBu
YW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0ZShu
b2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xpY2subWF0Y2ggPSBmdW5j
dGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2VsZWN0b3IpKSByZXR1cm4g
ZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0cnVl
O1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLm1hdGNoTm9kZShu
b2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgYWNjZXNzb3JcblxuU2xp
Y2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2su
bG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5cdHJldHVybiBsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNldWRvIGFjY2Vzc29yXG5c
blNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWxbJ3BzZXVk
bzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0dXJuIGZuLmNh
bGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxv
b2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRvID0gbG9jYWxbJ3BzZXVk
bzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7XG5c
dFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIG51
bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3JcblxuU2xpY2sub3ZlcnJpZGUg
PSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUocmVnZXhwLCBmbik7XG5c
dHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDtcblxuU2xpY2su
dWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9kZSk7
XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHko
Lyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6
IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnRcblxuZGVz
Y3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMuIENv
bnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4g
aGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBl
YXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1bmN0
aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJdXG5cbnByb3Zp
ZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc11cblxuLi4u
XG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJvcHMp
e1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9yc1t0YWddO1xuXHRpZiAo
a29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0eXBlb2YgdGFn
ICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMpO1xuXG5cdGlm
ICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0rJC8pLnRlc3QodGFnKSl7
XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07XG5c
dFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFyc2VkLnRhZztcblx0XHRp
ZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlkO1xu
XG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztcblx0XHRpZiAoYXR0cmli
dXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRcdGlmIChwcm9wc1thdHRy
LmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRyLnZhbHVlICE9IG51bGwg
JiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9IGF0dHIudmFsdWU7XG5c
dFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJvcHNbYXR0ci5r
ZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAmJiBwcm9wc1sn
Y2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xpc3Quam9pbign
ICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQodGFnLCBwcm9wcyk7XG59
O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnByb3RvdHlwZSA9IEJyb3dz
ZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdyYXBw
aW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9uKGZpcmVFdmVu
dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdHJldHVybiBmaXJl
RXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0fSkoRWxlbWVudC5wcm90
b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJy
b3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVbbmFtZV0pIHJldHVybjtc
blxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJl
c3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0cnVlO1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1l
bnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVudFtuYW1lXS5hcHBseShl
bGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5cGVPZihyZXN1
bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxlbWVudHMpID8gbmV3IEVs
ZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVtZW50cy5pbXBsZW1lbnQo
b2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucGFyZW50ID0g
T2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCckY29uc3RydWN0b3InOiBF
bGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgnZWxlbWVudCcpLmhpZGUo
KVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdFx0
RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xufVxuXG5FbGVtZW50LkNv
bnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUnLCBm
dW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtcblx0XHRw
cm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24ob2JqKXtcblx0
XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHByb3BzID0g
cGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBhcmFtcy5pZnJhbWUpIGlm
cmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIgb25sb2FkID0gcHJvcHMu
b25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9ubG9hZDtcblx0cHJvcHMu
aWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUgPyAoaWZyYW1l
LmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51bmlxdWVJRCgpXS5waWNr
KCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMpO1xu
XG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5jYWxsKGlmcmFtZS5jb250
ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1twcm9wcy5pZF0pIG9uTG9h
ZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG5cdHJldHVy
biBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0aW9u
KG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFyIHVuaXF1ZXMg
PSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0
XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlmICghdW5pcXVlc1t1aWRd
KXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wdXNoKG5vZGUp
O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJvdG90eXBlID0ge2xlbmd0
aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5cGUoJ0VsZW1lbnRzJywg
RWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJpbmQp
e1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRz
KEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVuY3Rp
b24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRcdH0gOiBmaWx0
ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07XG5cdFx0
fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9LnByb3RlY3QoKSxcblxu
XHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRl
bSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgaXRlbXMucHVz
aChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5
KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5jdGlvbigpe1xu
XHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0g
PSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkpIG5ld0Vs
ZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVudHMucHVzaChpdGVtKTtc
blx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRhcHBl
bmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sbGVj
dGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0
d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVuY3Rpb24oKXtcblxuLy8g
RkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycw
JzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpO1xu
aWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9u
KCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9IHNwbGljZS5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3RoKSBk
ZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59LnByb3RlY3QoKSk7XG5c
bkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1lKXtcblx0RWxlbWVudHMu
aW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWlycm9yKEVsZW1lbnRzKTtc
blxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUw7XG50cnkge1xuXHRj
cmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlucHV0
IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5cbnZhciBlc2NhcGVRdW90
ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwpLnJlcGxhY2UoLyYvZywg
JyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8qPC9sdElFOD4qL1xuXG4v
KjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1l
bnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkg
e1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0
ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztc
bn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdFbGVt
ZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMpe1xuXHRcdFx0aWYgKHBy
b3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVja2Vk
O1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PSAn
cmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7XG5cdFx0
XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNoYW5n
aW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFjYW5DaGFuZ2VTdHlsZUhU
TUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVFbGVtZW50LnNldEF0dHJp
YnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkgZGVsZXRl
IHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxlRWxlbWVudCkuc2V0KHBy
b3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJRTg+Ki8vLyBG
aXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBpbiBJRSA8IDhcblx0XHRc
dGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAnPCcgKyB0YWc7
XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwiJyArIGVzY2FwZVF1b3Rl
cyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSB0YWcgKz0gJyB0
eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7XG5cdFx0XHRcdHRhZyAr
PSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
dHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtcblx0fVxuXG59KTtcblxu
fSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRvdyk7XG5TbGljay51aWRP
Zihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3VGV4dE5vZGU6IGZ1
bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHR9
LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy53aW5kb3c7XG5cdH0s
XG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0ge1xuXG5cdFx0XHRzdHJp
bmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlkID0gU2xpY2suZmluZChk
b2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7XG5cdFx0XHRcdHJldHVy
biAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0XHR9LFxuXG5c
dFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRcdFx0U2xpY2sudWlkT2Yo
ZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAmJiAhKC9eKD86b2JqZWN0
fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZpcmVFdmVudCA9
IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBvciBl
bHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50
KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZlbnQpO1xuXHRcdFx0XHRc
dH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0XHRcdG9iamVjdDogZnVu
Y3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmoudG9FbGVtZW50KSByZXR1
cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7XG5cdFx0XHRcdHJl
dHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVzLnRleHRub2RlID0gdHlw
ZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3VtZW50ID0gZnVuY3Rpb24o
emVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9u
KGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51bmlx
dWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKGVsKTtcblx0XHRc
dHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRv
Y3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xuXG5pZiAod2luZG93LiQg
PT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7XG5cdHJldHVy
biBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7XG5cbldpbmRvdy5pbXBs
ZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmRv
Y3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcs
IHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIFNs
aWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9LFxuXG5cdGdl
dEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChT
bGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtcblxudmFyIGNvbnRhaW5z
ID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJuIFNsaWNrLmNvbnRhaW5z
KHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50
LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5cblxuXG4vLyB0cmVlIHdh
bGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjb21i
aW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjtcblxuXHRleHBy
ZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Npb24pKTtcblxuXHR2YXIg
ZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gZXhw
cmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0b3Ig
PSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxuT2JqZWN0LmZvckVh
Y2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4nLFxuXHRnZXRQYXJlbnQ6
ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1l
bnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVt
ZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0p
O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0QWxsUHJldmlv
dXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGlsZHJlbjogJz4nLFxuXHRn
ZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7
XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRGaXJzdDogZnVuY3Rp
b24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlz
LCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtcblx0fSxcblxuXHRnZXRM
YXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2su
c2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFzdCgp
KTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3du
ZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRnZXRFbGVtZW50QnlJZDog
ZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsICcj
JyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpKTtcblx0fSxcblxuXHRt
YXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFleHByZXNzaW9uIHx8IFNs
aWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xuXG5cblxuaWYgKHdpbmRv
dy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0aW9uKHNlbGVjdG9yKXtc
blx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9
PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3Rvciwg
bmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVyYWJsZShzZWxlY3Rvcikp
IHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJldHVybiBuZXcgRWxlbWVu
dHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFyIGluc2VydGVycyA9IHtc
blxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9y
ZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oY29udGV4dCwg
ZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAo
cGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQubmV4dFNpYmxpbmcp
O1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxl
bWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0aW9uKGNvbnRl
eHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQu
Zmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lkZSA9IGluc2VydGVycy5i
b3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZhciBwcm9wZXJ0
eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8vIHByb3BlcnRpZXNcblxu
dmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQndHlwZScsICd2YWx1ZScs
ICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5n
JywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3BhbicsICd0YWJJbmRleCcsICd1
c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJvcGVydHkudG9M
b3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwgPSAnaW5uZXJI
VE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS50
ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENvbnRlbnQnO1xuXG5PYmpl
Y3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkpe1xuXHRwcm9wZXJ0eVNl
dHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW3JlYWxdID0gdmFs
dWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+Ki9cbnByb3BlcnR5U2V0
dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7
XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2RlLnNldCgnaHRtbCcsIHZh
bHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlO1xuXHR9O1xufSko
cHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9IChmdW5jdGlv
bihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlLmdl
dCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdldHRlcihub2RlKTtcblx0
fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4vLyBCb29sZWFu
c1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNs
YXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFkT25seScsICdt
dWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZlcicsICdkZWZhdWx0Q2hl
Y2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXknLFxuXHQnbG9vcCdcbl07
XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24oYm9v
bCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVhbnNbbG93ZXJd
ID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2xv
d2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVbYm9vbF07XG5cdH07XG59
KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHByb3BlcnR5U2V0dGVycywg
e1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2NsYXNzTmFtZScg
aW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykgOiBub2RlLnNldEF0dHJp
YnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9uKG5vZGUsIHZh
bHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1sRm9yID0gdmFsdWUgOiBu
b2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0
aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1RleHQg
PSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTtcblx0fSxcblxuXHQn
dmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9ICh2YWx1ZSAh
PSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3BlcnR5R2V0dGVyc1snY2xh
c3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUpID8g
bm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xufTtc
blxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRv
bicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRyeSB7IGVsLnR5
cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicpIHBy
b3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRub2RlLnNldEF0
dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4vKiA8L3dlYmtpdD4gKi9c
blxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRN
TCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7
XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcg
PSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdp
bjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31c
blx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZhciBpbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwgaHRtbDVJbnB1
dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0JztcbmlucHV0LnR5cGUgPSAn
c3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0JztcblxuLy8g
IzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlpbmcgdG8gdXNl
IGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xuXHRpbnB1dC50
eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1dC50eXBlID09ICdlbWFp
bCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0aWxlSW5wdXRW
YWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rp
b24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52YWx1ZTtcblx0
XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBjYXRjaCAo
ZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi9cblxu
LyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRpdil7
XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChkaXYuZ2V0QXR0cmlidXRl
KCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0dGVzdC5pbm5l
ckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhcIiB2YWx1ZT1cInRoZSB1
bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUodHJ1ZSkuZmly
c3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNzTGlzdCA9ICEhZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIgY2xhc3NlcyA9IGZ1bmN0
aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJykuY2xl
YW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBjbGFzc05hbWVzLmZpbHRl
cihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUgIT09ICcnICYmICF1bmlx
dWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7XG5c
dH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMu
Y2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NMaXN0ID0gZnVu
Y3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbn07XG5cbkVsZW1l
bnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xu
XHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dEFsbG93TGlzdDtcblx0XHRc
dGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRBbGxvd0xpc3QgPSB0aGlzLnJldHJp
ZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30pO1xuXHRcdFx0LyogPC9sdElFOT4gKi9cblxu
XHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShu
YW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRy
aWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dEFsbG93TGlzdFtuYW1lXTtcblx0XHRcdFx0LyogPC9sdElF
OT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsICcn
ICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dl
dEF0dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0Lyog
PC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5cdFx0Zm9yICh2YXIgYXR0cmli
dXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1dGVz
W2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5OiBm
dW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0ZXJzW25hbWUudG9M
b3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdldHRlcih0aGlzKTtcblx0XHQv
KiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKXtcblx0XHRcdHZhciBh
dHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVBbGxvd0xpc3QgPSB0
aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30pO1xuXHRcdFx0aWYgKCFhdHRy
KSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0dHJpYnV0ZUFsbG93
TGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MO1xuXHRcdFx0
XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmluZCBtZW50aW9uIG9mIGF0dHJp
YnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwgb3V0ZXIuc2VhcmNoKC9cXC8/
WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJuIG51bGw7
XG5cdFx0XHRcdGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0
fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0dHJpYnV0
ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNrLmhhc0F0dHJpYnV0
ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxuXG5cdGdldFByb3BlcnRpZXM6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50cyk7XG5c
dFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0ZShhcmdz
KTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0dXJu
IHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVydGll
czogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1vdmVQcm9w
ZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihw
cm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3Bd
O1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNhbGwodGhp
cywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5cdH0ub3ZlcmxvYWRT
ZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVs
ZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHByb3BlcnR5ICYmIHByb3BlcnR5
LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5KHByb3Ap
O1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKHByb3Ape1xuXHRc
dHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkg
JiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0aGlzLnJl
bW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhhc0NsYXNz
OiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiB0aGlzLmNs
YXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NOYW1lKTtc
blx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlzdCwgdGhpcyk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHRoaXMuY2xh
c3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSkuam9pbign
ICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBoYXNDbGFzc0xp
c3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNo
KHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXModGhpcy5jbGFz
c05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNzTmFtZXMuZXJhc2Us
IGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2luKCcgJyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNz
TmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhhc0Ns
YXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFkZENsYXNzKGNsYXNz
TmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRvcHQ6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9IEFy
cmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXHRcdGlm
IChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRc
dFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1ZSk7XG5cdFx0XHRp
ZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblxuXHRcdGlm
IChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7XG5cdFx0cmV0
dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUodGV4dCksIHdoZXJl
KTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3
aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5z
ZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7XG5cdFx0
ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hp
bGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBzOiBmdW5jdGlv
bihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdHJldHVy
biB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5cblx0Z2V0U2VsZWN0
ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkgMy4yLjFc
blx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQodGhpcy5vcHRpb25zKS5maWx0
ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQ7XG5cdFx0
fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHF1ZXJ5
U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4dGFy
ZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBlID0gZWwudHlwZTtcblx0XHRc
dGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8IHR5cGUg
PT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJldHVybjtc
blxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8gZWwuZ2V0
U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0Ly8gSUVcblx0XHRcdFx0cmV0
dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkgOiAoKHR5cGUgPT0g
J3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51bGwgOiBl
bC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQodmFsdWUpLmVhY2goZnVuY3Rp
b24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5U3Ry
aW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2RlVVJJQ29t
cG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5n
LmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5cbnZhciBhcHBlbmRJ
bnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0ZXI6ICdhZnRlckVu
ZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVnaW4nLFxuXHRpbnNp
ZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCgnYXBwZW5kSFRNTCcsICgn
aW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkgPyBm
dW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRIVE1MKGFwcGVuZElu
c2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4gdGhpcztcbn0gOiBm
dW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2RpdicsIHto
dG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsXG5cdFx0ZnJhZ21l
bnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0dXJuIHRoaXM7XG5c
dGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0
ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZHJlbltp
XSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShmcmFnbWVu
dCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0ZWQgPSB7fSwgc3Rv
cmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0dXJuIChzdG9yYWdl
W3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52YXIgY2xlYW4gPSBmdW5jdGlv
bihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRpZiAoaXRlbS5yZW1v
dmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChpdGVtLmNsZWFyQXR0cmlidXRl
cykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxsKXtcblx0XHRkZWxl
dGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtcblx0fVxuXHRyZXR1
cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywgb3B0aW9u
OiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtc
blxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGlsZHJlbiA9IGNsZWFuKHRoaXMp
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXkuZWFjaChjaGlsZHJlbiwgY2xl
YW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSxc
blxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252ZXJ0KHRoaXMuY2hpbGROb2Rl
cykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGRp
c3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBhcmVudE5vZGUpID8gdGhpcy5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVu
Y3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMgPSBjb250ZW50cyAhPT0gZmFs
c2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29udGVudHMpLCBjZSA9IFtjbG9u
ZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0XHRcdGNlLmFwcGVu
ZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHRc
dHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkp
O1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHR2YXIgbm9k
ZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAoIWtlZXBpZCkgbm9kZS5yZW1v
dmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKG5vZGUuY2xl
YXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0XHRcdFx0
bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmli
dXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUub3B0aW9ucyl7XG5cdFx0XHRc
dFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9ucztcblx0XHRcdFx0
XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVvW2pdLnNl
bGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZh
ciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRc
dGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVtZW50W3Byb3BdO1xu
XHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVnKXtcblx0XHRcdHZh
ciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSwgdG8gPSB0aGlzLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZvciAoaSA9IGNvLmxlbmd0aDsg
aS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRcdH1cblx0XHQvKjwv
bHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9XG5cbn0pO1xuXG5b
RWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0YWRk
TGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAod2luZG93LmF0dGFjaEV2ZW50
ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0ZWRbU2xpY2sudWlk
T2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcikg
dGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxz
ZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAodGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4s
ICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUs
IGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRyaWV2ZTogZnVuY3Rpb24ocHJv
cGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKSwg
cHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0ICE9IG51bGwgJiYgcHJvcCA9
PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRcdHJldHVybiBwcm9w
ICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9yZTogZnVuY3Rpb24ocHJvcGVy
dHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5c
dFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChT
bGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xuaWYgKHdpbmRvdy5hdHRhY2hF
dmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2MgPSBmdW5jdGlvbigp
e1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlmICh3aW5kb3cuQ29s
bGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2luZG93LnJlbW92ZUxpc3RlbmVy
KCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywgZ2Mp
O1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGllcyA9IHt9O1xuXG5cblxuRWxl
bWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVuY3Rpb24oc3R5bGUpe1xuXHRc
dHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5jdGlv
bigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQu
UHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMu
aHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRcdGlmIChodG1sID09IG51bGwp
IGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkgPT0gJ2FycmF5JykgaHRtbCA9
IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0aGlzLnN0eWxlU2hl
ZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQgPSBodG1s
O1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHR9LFxuXHRl
cmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcsICcnKTtcblx0fVxuXG59O1xu
XG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlubmVySFRN
TCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xuXG4vKjxsdElFOT4qL1xuLy8g
dGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5lcnNoaXYv
XG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgZnJhZ21lbnQ7
XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBvcnRzSFRNTDVFbGVtZW50cyA9
IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50
cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0YWxp
c3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1l
dGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8nLnNwbGl0
KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBs
ID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1lbnQodGFn
c1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5zdXBwb3J0
c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHR2YXIgdGFi
bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHR0YWJsZS5pbm5lckhUTUwg
PSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7XG59KTtcblxuLyo8bHRGRjQ+
Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAnPHRkPjwv
dGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJIVE1MID0gKHRyLmlu
bmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZGND4qL1xuXG5pZiAoIXN1cHBv
cnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBvcnRzSFRN
TDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0ID0gKGZ1bmN0aW9u
KHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRcdFx0dGFibGU6IFsxLCAnPHRh
YmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxlY3Q+JywgJzwvc2Vs
ZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3Rh
YmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9k
eT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9ucy50aGVhZCA9IHRyYW5zbGF0
aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRcdHJldHVybiBmdW5jdGlvbiho
dG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQpIHJl
dHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFy
IHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtcblx0XHRcdGlmICghd3JhcCAm
JiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107XG5cdFx0XHRpZiAo
IXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxuXHRcdFx0dmFyIGxldmVsID0g
d3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0YXJnZXQg
PSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LmFw
cGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5lckhUTUwgPSBbd3JhcFsxXSwg
aHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRcdFx0d2hpbGUgKGxldmVsLS0p
IHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0eSgpLmFkb3B0KHRh
cmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFn
bWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIgPSBudWxsO1xuXHRcdH07
XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8qPC9JRT4qL1xuXG4v
KjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScp
O1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+PC9zZWxl
Y3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVtZW50LlBy
b3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRh
ZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdzZWxlY3QnKSByZXR1cm4gdGhp
cy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLmdl
dEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBvcHRpb24g
PSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3Zh
bHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8g
b3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVl
ID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0fVxuXHR9LFxu
XG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0gdGhpcywgdGFnID0gb3B0aW9u
LmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAnb3B0aW9u
JykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRpZiAodGFnID09ICdz
ZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVkKClbMF0pKSByZXR1cm4gJyc7
XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpO1xuXHRc
dHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRpb24u
Z2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVsbDtcbi8qPC9sdElFOT4qL1xu
XG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmdldEF0dHJpYnV0
ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtcblx0c2V0OiBmdW5jdGlvbihp
ZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9IGlk
O1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgbnVsbDtc
blx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmli
dXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8L0lFPiovXG5cbn0pKCk7XG5c
bi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBFdmVu
dCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nlci5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwgQXJy
YXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlkZXM6IEV2ZW50XG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xudmFyIG5vcm1hbGl6ZVdoZWVs
U3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxpemVkO1xuXHRpZiAoZXZlbnQu
d2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50LndoZWVsRGVsdGEgJSAxMjAgPT0g
MCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVlbERlbHRhIC8gMTI7XG5cdH0g
ZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRhaWwg
fHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAzID09IDAgPyByYXdBbW91bnQg
LyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVkO1xufTtcblxu
dmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcsIGZ1bmN0
aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2luZG93O1xuXHRldmVudCA9IGV2
ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2ZW50O1xu
XHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1ZTtcblx0dGhpcy5z
aGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVudC5jdHJsS2V5O1xu
XHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRhID0gZXZlbnQubWV0YUtleTtc
blx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xuXHR2YXIgdGFyZ2V0ID0gZXZl
bnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0
Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHR0aGlzLnRhcmdl
dCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUuaW5kZXhPZigna2V5JykgPT0g
MCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5
Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykgdGhpcy5r
ZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5ZG93bicgfHwgdHlwZSA9PSAn
a2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUgPCAxMjQpIHRoaXMua2V5ID0g
J2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1ICYmIGNvZGUgPCAx
MDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRpZiAodGhpcy5rZXkgPT0gbnVs
bCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7XG5c
dH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2RibGNsaWNrJyB8fCB0eXBl
ID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ0RPTU1vdXNl
U2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0dmFyIGRvYyA9IHdp
bi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2Rl
ID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRcdHRoaXMucGFnZSA9
IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIDogZXZlbnQu
Y2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwp
ID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNjcm9sbFRvcFxuXHRcdH07XG5c
dFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBldmVu
dC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVudFgsXG5cdFx0XHR5OiAoZXZl
bnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5wYWdlWU9mZnNldCA6IGV2ZW50
LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlw
ZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0gbm9ybWFs
aXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENsaWNrID0gKGV2ZW50LndoaWNo
ID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0eXBlID09ICdtb3VzZW92ZXIn
IHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0eXBlID09
ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUgPT0gJ21vdXNlb3Zl
cicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJl
bGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJvbScgOiAndG8nKSArICdFbGVt
ZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVkLm5vZGVUeXBlID09IDMpIHJl
bGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBk
b2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZS5pbmRleE9mKCd0
b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykgPT0gMCl7XG5cdFx0dGhpcy5y
b3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBldmVudC5zY2FsZTtc
blx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXHRcdHRoaXMu
Y2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2YXIgdG91Y2hlcyA9
IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYgdG91Y2hl
c1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0dGhpcy5wYWdlID0g
e3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlzLmNsaWVudCA9IHt4
OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0XHR9XG5cdH1cblxuXHRpZiAo
IXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAoIXRoaXMucGFnZSkgdGhpcy5w
YWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtcblxuXHRzdG9wOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0aW9uKCk7
XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2
ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRl
bHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5w
cmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGVsc2UgdGhp
cy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0p
O1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkpe1xuXHRfa2V5c1tj
b2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01FdmVudC5kZWZpbmVLZXlzID0g
RE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5ET01FdmVudC5kZWZp
bmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAnMzcnOiAnbGVmdCcsICczOSc6
ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNrc3BhY2Un
LCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzogJ2VudGVyJ1xufSk7XG5cbn0p
KCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50XG5cbmRlc2NyaXB0
aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBldmVudHMuIFRo
aXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgY3VzdG9tIEVs
ZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92aWRlczogRWxlbWVudC5FdmVu
dFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50LlByb3BlcnRpZXMuZXZlbnRz
ID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRFdmVudHMoZXZlbnRzKTtcbn19
O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5c
blx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5y
ZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRzW3R5cGVdKSBldmVudHNbdHlw
ZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChldmVudHNbdHlwZV0ua2V5cy5j
b250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLnB1c2goZm4p
O1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBFbGVtZW50LkV2ZW50
c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cdFx0
aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2FsbCh0
aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7XG5cdFx0XHRcdGNv
bmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlv
bi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xu
XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1
c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwo
dGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVuY3Rpb24oKXtcblx0XHRcdHJl
dHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2ZW50ID0gRWxlbWVu
dC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVudCl7XG5cdFx0XHRp
ZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlvbihldmVudCl7XG5c
dFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0V2luZG93KCkpO1xu
XHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNlKSBldmVu
dC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkZExpc3RlbmVyKHJl
YWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0XHRldmVudHNbdHlwZV0udmFs
dWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6
IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZl
bnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5c
dFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGluZGV4ID0gbGlzdC5rZXlzLmlu
ZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIHZh
bHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LmtleXNbaW5kZXhdO1xu
XHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFyIGN1c3RvbSA9IEVsZW1lbnQu
RXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vblJlbW92
ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1c3Rv
bS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0
eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkgPyB0
aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpcztcblx0
fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgZXZlbnQg
aW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNbZXZlbnRdKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0
dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0XHRcdGZv
ciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtc
blx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0YWNoZWQgPSB0aGlzLnJldHJp
ZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpcztcblx0XHRpZiAo
IWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3ZlRXZlbnRz
KHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpO1xuXHRcdH0gZWxzZSBpZiAo
YXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVudHNdLmtleXMuZWFjaChmdW5j
dGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBmbik7XG5cdFx0XHR9
LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5
KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFl
dmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNv
bnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtc
blx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxz
ZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7XG5cdFx0ZnJvbSA9
IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBmcm9tLnJldHJpZXZlKCdldmVu
dHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCF0eXBlKXtcblx0
XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJvbSwg
ZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5cdFx0XHRldmVudHNb
dHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5hZGRFdmVudCh0eXBl
LCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGljazogMiwgZGJsY2xpY2s6IDIs
IG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0dG9u
c1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8vbW91c2Ug
d2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxlY3Rz
dGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50XG5cdGtleWRvd246IDIsIGtl
eXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmllbnRhdGlvbmNoYW5nZTogMiwg
Ly8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6IDIsIHRv
dWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVjaGFuZ2U6
IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJsdXI6IDIsIGNoYW5n
ZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBwYXN0ZTogMiwgaW5wdXQ6IDIs
IC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9hZDogMiwg
cmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRlY2hhbmdl
OiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNob3c6IDIs
IHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBhYm9ydDogMSwgc2Nyb2xsOiAx
LCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVudHMgPSB7XG5cdG1vdXNld2hl
ZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hlZWwnIDogJ29ubW91
c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAnRE9NTW91c2VTY3JvbGwnXG5c
dH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIHJlbGF0ZWQgPSBl
dmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBudWxsKSByZXR1cm4gdHJ1ZTtc
blx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAocmVsYXRlZCAhPSB0aGlz
ICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9jdW1lbnQn
ICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlmICgnb25tb3VzZWVudGVyJyBp
biBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3Vz
ZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2ZSA9IDI7XG5cdEVsZW1lbnQu
TW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRFbGVtZW50LkV2ZW50cy5tb3Vz
ZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogY2hlY2tc
blx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRcdGJhc2U6ICdtb3Vz
ZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxuXG4vKjxsdElFOT4qL1xuaWYg
KCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLnByb3Bl
cnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdlID0ge1xuXHRcdGJhc2U6IGZ1
bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0XHRcdHJldHVybiAodGhp
cy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdj
aGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJztcblx0XHR9LFxuXHRcdGNv
bmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUgIT0gJ3By
b3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0gJ2NoZWNrZWQnO1xu
XHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5u
YW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVsZW1l
bnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgZm9yIG1vcmUg
ZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EZWxl
Z2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZXZlbnRMaXN0ZW5lclN1
cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50
cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNvdXQgPSAyO1xuXG52YXIgYnVi
YmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHR3aGls
ZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAobWF0Y2godGFyZ2V0LCBldmVu
dCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7XG5cdFx0dGFyZ2V0ID0g
ZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59O1xuXG52YXIgbWFwID0ge1xu
XHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBF
bGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7XG5cdFx0YmFzZTog
J21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5cdH0s
XG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3VwcG9ydCA/
ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVyOiB7XG5cdFx0YmFz
ZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9jdXNvdXQnLFxuXHRcdGNhcHR1
cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0gJyRkZWxlZ2F0aW9u
Oic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cblx0cmV0dXJuIHtcblxu
XHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24oc2VsZiwgdWlkKXtc
blx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMn
LCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFyIGkgPSBs
aXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRoZSBmb3JtIG1heSBoYXZlIGJl
ZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQvLyByZW1vdmVFdmVu
dCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVudCB3YXNcblx0XHRcdFx0Ly8g
cmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCkg
bGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7XG5cdFx0XHR9XG5c
dFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFy
Z2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0LmdldCgndGFnJykgPT0gJ2Zvcm0n
KSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtcblx0XHRcdGlmICgh
Zm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5yZXRyaWV2ZShfa2V5
ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxpc3RlbmVyID0gbGlzdGVuZXJz
W3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1zID0gbGlzdGVuZXIu
Zm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYgKGZvcm1zLmluZGV4T2YoZm9y
bSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5cblx0XHRcdHZhciBf
Zm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwg
ZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVudCh0eXBlLCBfZm4p
O1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVuZXJzW3VpZF0gPSBsaXN0ZW5l
cjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywgbGlzdGVuZXJz
KTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUp
e1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0XHRsaXN0ZW46IGZ1bmN0aW9u
KHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0XHR2YXIgZXZlbnRzID0ge2Js
dXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2ZW50cyk7XG5cdFx0
XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0YnVi
YmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0XHRl
dmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xufTtcblxuaWYgKCFl
dmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHtcblx0c3VibWl0OiBmb3Jt
T2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2VydmVyKCdyZXNldCcpLFxuXHRj
aGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlucHV0T2JzZXJ2ZXIo
J3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJvdG8gPSBFbGVtZW50LnByb3Rv
dHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0cmVtb3ZlRXZlbnQgPSBwcm90
by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2Qpe1xuXHRy
ZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlmICh0eXBlLmluZGV4
T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNh
cHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0eXBlKS5leHByZXNzaW9uc1sw
XVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxheScpIHJldHVybiBv
bGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIG5ld1R5cGUgPSBw
YXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24ocHNl
dWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtleSArIChwc2V1ZG8udmFsdWUg
PyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0fSk7XG5cdFx0b2xkLmNhbGwo
dGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBuZXdUeXBlLCBw
YXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtcblxudmFyIGRlbGVnYXRpb24g
PSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7XG5cdFx0dmFyIHN0
b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdl
W3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQgaW4gc3RvcmVkKXtcblx0XHRc
dGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191aWRdLm1hdGNoID09IG1hdGNo
KSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBlLCBfbWF0Y2ggPSBt
YXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0dHlwZSA9IF9tYXAu
YmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0KXtcblx0XHRcdHJl
dHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxuXHRcdHZhciBlbGVt
ZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9tYXAuY29uZGl0aW9u
IHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0aW9uKXtcblx0XHRcdHZhciBf
X21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVu
dC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnQpe1xuXHRc
dFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRpb24uY2FsbCh0YXJn
ZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGYgPSB0aGlz
LCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVsZWdhdG9yID0gX21hcC5saXN0
ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2ZW50
ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRhcmdl
dCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpO1xuXHRc
dH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2ZW50
ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRhcmdl
dCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHR9O1xuXG5c
dFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRdID0ge1xuXHRcdFx0
bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0b3I6IGRlbGVnYXRv
clxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0cmV0dXJuIGFkZEV2
ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHR9LFxuXG5c
dHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQpe1xuXHRcdHZhciBz
dG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFn
ZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0XHRpZiAoX3VpZCl7
XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0uZGVsZWdh
dG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBf
dHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3VpZCk7XG5c
dFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7
XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9t
YXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRcdGlmIChmbikgZm9y
IChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAo
cy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5yZW1vdmVF
dmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpO1xuXHRcdH0gZWxzZSBmb3Ig
KF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChz
Lm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwg
bWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufTtc
blxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXHRh
ZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRkRXZlbnQpLFxuXHRyZW1vdmVF
dmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpXG59KTtcblxu
fSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxlXG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxlbWVu
dHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVudC5TdHlsZVxuXG4uLi5cbiov
XG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsO1xuXG4vLzxs
dElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0eWxlcyB3
aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUuY29sb3IgPSBudWxsO1xudmFy
IGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJztcblxuLy8gY2hl
Y2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxlcyBpbiB0
aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgtc3R5bGUt
Y29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJztcbmVsLnN0eWxlLmJvcmRl
ciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0eWxlLmJv
cmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZhciBoYXNHZXRDb21w
dXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxcblx0c3VwcG9ydEJvcmRlclJh
ZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJvcmRlclJhZGl1cyAh
PSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0ge3NldDogZnVuY3Rpb24oc3R5
bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xuXG52YXIgaGFzT3BhY2l0eSA9
IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9IChodG1sLnN0eWxl
LmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNpdHk9KFtcXGQuXSsp
XFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7
XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVsZW1lbnQuc3R5bGUu
dmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNpYmxlJyA6
ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0RmlsdGVyID0gZnVuY3Rpb24oZWxl
bWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG5cdFx0
ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVy
JykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVzdChmaWx0ZXIpID8gZmlsdGVy
LnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1ZSkudHJpbSgpO1xu
XHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTtcbn07
XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlvbihl
bGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTtcbn0g
OiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGlmICghZWxlbWVu
dC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkgZWxlbWVu
dC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBvcGFjaXR5ID09IDEp
e1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7XG5cdFx0aWYgKG9wYWNpdHkg
PT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50LCByZUFs
cGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0RmlsdGVyKGVs
ZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCkubGltaXQo
MCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZpc2liaWxpdHkpKTtcblxudmFy
IGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3Bh
Y2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUo
J29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5LnRvRmxv
YXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBmaWx0ZXIg
PSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0
ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3BhY2l0eSA9IGZpbHRlci5tYXRj
aChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwgfHwgZmlsdGVyID09IG51bGwp
ID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFy
IG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpO1xuXHRpZiAob3BhY2l0eSA9
PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9PSAnaGlkZGVuJyA/
IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZhciBmbG9hdE5hbWUgPSAoaHRt
bC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9hdCcsXG5c
dG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAnNTAlJywg
cmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3JvdW5kUG9zaXRpb25Y
WSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0gbnVsbCksXG5cdHByZWZpeFBh
dHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbihwcm9wZXJ0eSl7
XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5jYW1lbENh
c2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24oc3R5bGUs
IHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKXtcblx0
XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpO1xuXHRcdHByb3BlcnR5ICs9
ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xufTtcbi8vPC9s
dElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0
aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgdGhpcy5jdXJy
ZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1lbENhc2UocHJvcGVydHkpXTtc
blx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRlZmF1bHRW
aWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVybiAoY29tcHV0ZWQpID8gY29t
cHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxvYXROYW1lKSA/ICdmbG9hdCcg
OiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxuXHRzZXRTdHlsZTogZnVuY3Rp
b24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKXtcblx0
XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXHRcdFx0
c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0
cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHBy
b3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIg
bWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7XG5cdFx0
XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkpe1xuXHRc
dFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4gKHR5cGVPZih2YWwp
ID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0aC5yb3VuZCh2YWwpKSA6IHZh
bDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09IFN0cmluZyhO
dW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuXHRcdH1c
blx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0SUU5PlxuXHRcdGlm
ICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0eWxlcyAm
JiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVTdHlsZSh0aGlzLnN0
eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmIChwcm9wZXJ0
eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMpO1xuXHRcdHByb3BlcnR5ID0g
Y2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5c
dFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHkuaW5kZXhPZignYm9yZGVyUmFk
aXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3Jk
ZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJCb3R0
b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRcdHJldHVybiB0aGlz
LnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlzKS5qb2luKCcgJyk7XG5cdFx0
fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0XHRpZiAoIXJlc3Vs
dCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVudC5TaG9ydFN0eWxl
cy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQgPSBbXTtcblx0XHRc
dFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5XSkgcmVzdWx0LnB1
c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuam9pbignICcpO1xu
XHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtc
blx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZICYmIC9eYmFja2dyb3VuZFBv
c2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxh
Y2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0aW9uKXtcblx0XHRc
dFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0XHRcdH0pIHx8ICcwcHgnO1xu
XHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9u
JykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtcblx0XHRcdHJlc3VsdCA9IFN0
cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2JhP1xcKFtc
XGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2Uo
Y29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1cblx0XHRpZiAoIWhhc0dldENv
bXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtcblx0XHRcdGlmICgoL14oaGVp
Z2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQvLnRlc3QocmVzdWx0KSkpe1xu
XHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0JywgJ3Jp
Z2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRcdHZhbHVlcy5lYWNo
KGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0U3R5bGUoJ2JvcmRl
ci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3BhZGRpbmct
JyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJuIHRo
aXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0gc2l6ZSArICdweCc7XG5cdFx0
XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykudGVzdChw
cm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0XHRcdHJldHVybiAn
MHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKHJldHVybnNCb3Jk
ZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxCb3R0b218TGVmdCk/JC8udGVz
dChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5y
ZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAkMScpO1xuXHRcdH1cblx0XHQv
LzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNldFN0eWxlczogZnVu
Y3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHRoaXMuc2V0U3R5
bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0QXJyYXkuZmxh
dHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJlc3VsdFtrZXldID0g
dGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5c
dH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4JywgdG9wOiAnQHB4
JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0BweCcsIGhlaWdodDog
J0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4JywgbWluV2lkdGg6ICdAcHgn
LCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCknLCBi
YWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgnLCBjb2xv
cjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2luZzogJ0Bw
eCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgpJyxcblx0
bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0BweCBAcHggQHB4IEBweCcsIGJv
cmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAs
IEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHlsZTog
J0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAs
IEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9udFdl
aWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBib3JkZXJSYWRpdXM6
ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hvcnRTdHlsZXMgPSB7
bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJvcmRlcldpZHRoOiB7fSwgYm9y
ZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1RvcCcsICdSaWdodCcsICdCb3R0
b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtcblx0dmFyIFNob3J0ID0gRWxl
bWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzO1xuXHRbJ21hcmdp
bicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5cdFx0dmFyIHNkID0gc3R5bGUg
KyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4Jztcblx0
fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xuXHRTaG9ydC5ib3JkZXJbYmRd
ID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3ID0gYmQgKyAnV2lk
dGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJztcblx0U2hvcnRbYmRd
ID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9IEFsbFti
ZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1bYmRzXSA9
IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvcltiZGNdID0gU2hvcnRbYmRdW2Jk
Y10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5cbmlmIChoYXNCYWNrZ3JvdW5k
UG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24gPSB7YmFj
a2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAnQCd9O1xufSkoKTtc
blxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9sbCwgb3IgcG9zaXRpb25pbmcg
b2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0aW9uaW5nIGJhc2VkIG9uIHRo
ZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBhbmQgc21hcnQgYnJvd3NlciBm
aXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRt
bCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBbWVVJXShodHRwOi8vZGV2ZWxv
cGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6Ly9kZXZlbG9wZXIu
eWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEVsZW1l
bnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNpb25zXVxuXG4uLi5cbiovXG5c
bihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWxlbWVudC5z
dHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbnZhciBicm9r
ZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09PSBlbGVtZW50KTtcbmVsZW1l
bnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25lbnRzID0gWydoZWlnaHQnLCAn
cGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRvcFdpZHRoJywgJ2JvcmRlckJv
dHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGluZ0xlZnQn
LCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJ107
XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpe1xuXG5cdHZhciBnQ1MgPSB3
aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRzID0ge3g6IDAsIHk6IDB9O1xu
XG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy55ICs9
IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhDb21wb25lbnRzLmVhY2goZnVu
Y3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7
XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7XG5c
dHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycgfHwgaXNCb2R5
KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJu
IGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QoZWwudGFnTmFtZSk7
XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1bmN0aW9uKHgsIHkp
e1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5nZXRXaW5kb3coKS5zY3JvbGxU
byh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0geDtcblx0XHRc
dHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5n
ZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5cblx0XHQvLyBUaGlzIGlmIGNs
YXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBnZXRCb3VuZGluZ0NsaWVudFJl
Y3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRpZiAoIXdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRoaXMub2Zm
c2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2ZyBzZWN0aW9uIHVu
ZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4gYmUgcmVtb3ZlZCB3aGVuIEZG
IGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0dHBzOi8vYnVnemls
bGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlmICh0aGlzLmdldCgn
dGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXplKHRoaXMpO1xuXG5cdFx0dHJ5
IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRc
dFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9O1xuXHRcdH0gY2F0
Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0
U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhp
cy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9s
bFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5j
dGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdl
dFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5OiB0aGlzLnNjcm9s
bFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVu
dCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0d2hpbGUg
KGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1l
bnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5zY3JvbGxUb3A7XG5c
dFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdH1cblx0XHRyZXR1cm4gcG9z
aXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZzZXRQYXJlbnQgPyBm
dW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVsZW1l
bnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVy
biBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJpbmcoZWxlbWVudCwg
J3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0aWMgOiBpc09mZnNldDtcblx0
XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKXtcblx0XHRcdGlmIChpc09m
ZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAo
aXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdm
aXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlbGVtZW50Lm9m
ZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5c
blx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFzR2V0Qm91bmRpbmdDbGllbnRS
ZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0XHRpZiAoaGFzR2V0Qm91bmRp
bmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50KCkuZG9j
dW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xsKCksXG5c
dFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0XHRcdGlzRml4ZWQg
PSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7XG5cblx0XHRcdHJl
dHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueCAr
ICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCxcblx0XHRc
dFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnkgKyAoKGlzRml4ZWQpID8g
MCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRcdFx0fTtcblx0XHR9XG5cblx0
XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdGlmIChp
c0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdoaWxlIChlbGVtZW50ICYmICFp
c0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExlZnQ7
XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5cdFx0XHRlbGVtZW50
ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xu
XHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5cdFx0dmFyIG9mZnNl
dCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5nZXRTY3JvbGxzKCk7
XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0LnggLSBzY3JvbGwueCxcblx0
XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5cdFx0aWYgKHJlbGF0aXZlICYm
IChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0dmFyIHJlbGF0aXZl
UG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHt4OiBwb3Np
dGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRlcihyZWxhdGl2ZSksIHk6IHBv
c2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3JkZXIocmVsYXRpdmUpfTtcblx0
XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5j
dGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5k
b3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRp
b24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0dmFyIG9iaiA9
IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0aW9uLnksXG5cdFx0
XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9O1xuXHRcdG9iai5y
aWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5ib3R0b20gPSBvYmoudG9wICsg
b2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1dGVQb3NpdGlvbjog
ZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogb2JqLnggLSBzdHlsZU51
bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDogb2JqLnkgLSBzdHlsZU51bWJl
cih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxuXHRzZXRQb3NpdGlvbjogZnVu
Y3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9zaXRp
b24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgnaW1w
bGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENv
bXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgsIHk6IGRv
Yy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTtc
blx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwgeTogd2lu
LnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksXG5cdFx0
XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0aGlzLmdldERvY3VtZW50KCku
Ym9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBib2R5LnNj
cm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3JvbGxIZWlnaHQsIGJvZHkuc2Ny
b2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHRyZXR1cm4ge3RvcDog
MCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6ZS55
LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBtZXRob2RzXG5cbnZh
ciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxuZnVuY3Rpb24gc3R5
bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWxlbWVudCwg
c3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJvcmRlcihlbGVtZW50
KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRoJyk7XG59
XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihl
bGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gaXNCb2R5KGVsZW1l
bnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRhZ05hbWUp
O1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpe1xuXHR2YXIgZG9jID0g
ZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBkb2Mu
Y29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcbn1cblxu
fSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBvc2l0aW9u
J30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRdLmludm9r
ZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxUb3A6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0fSxcblxuXHRnZXRTY3JvbGxM
ZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7XG5cdH0sXG5c
blx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9s
bFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFRvcDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5cblx0Z2V0TGVmdDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7XG5cdH1cblxufSk7
XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBiYXNp
YyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNzZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0NoYWluLCBFdmVu
dHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRlczogRnhcblxuLi4uXG4qL1xu
XG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7XG5cblx0SW1w
bGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRv
cHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25DYW5jZWw6IG5pbCxc
blx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxuXHRcdHVuaXQ6IGZh
bHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxuXHRcdGZyYW1lU2tp
cDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0
aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlzO1xu
XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHRnZXRUcmFuc2l0aW9uOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0XHRcdHJldHVybiAtKE1hdGgu
Y29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9LFxuXG5cdHN0ZXA6IGZ1bmN0
aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApe1xuXHRcdFx0dmFyIGRp
ZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBmcmFtZXMg
PSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhpcy50aW1lID0gbm93O1xuXHRc
dFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJhbWUr
Kztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKXtcblx0XHRcdHZh
ciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8gdGhpcy5mcmFtZXMpO1xuXHRc
dFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEpKTtcblx0
XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhpcy5z
ZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpO1xuXHRcdFx0dGhpcy5zdG9w
KCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRyZXR1cm4gbm93
O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0cmV0
dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rp
b24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVybiB0cnVlO1xuXHRcdHN3aXRj
aCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwo
KTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxs
ZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1
cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRvKXtcblx0XHRpZiAo
IXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmZyb20gPSBmcm9t
O1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5mcmFt
ZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0dGhpcy50cmFuc2l0
aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9IHRoaXMub3B0aW9u
cy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRpb25z
LmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNbZHVyYXRpb25dIHx8
IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztc
blx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24gLyB0
aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0g
J3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1YmplY3QpO1xuXHRc
dH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpO1xuXHRcdHB1c2hJ
bnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c3Rv
cDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRp
bWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZw
cyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5cdFx0XHRcdHRoaXMu
ZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHRcdGlmICghdGhpcy5j
YWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1YmplY3Qp
O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0b3AnLCB0aGlzLnN1
YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRoaXMuc3ViamVjdCA9PT0gdGhp
cyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRc
dFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMu
b3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhp
cy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xlYXJDaGFpbigpO1xuXHRcdFx0
dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRc
dFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMu
b3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXN1bWU6
IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkgcHVzaEluc3RhbmNlLmNhbGwo
dGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aXNS
dW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5zdGFuY2VzW3RoaXMub3B0aW9u
cy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFpbnModGhpcyk7XG5cdH0sXG5c
blx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmZyYW1lIDwgdGhpcy5m
cmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0pO1xuXG5GeC5jb21wdXRlID0g
ZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0byAtIGZyb20pICogZGVsdGEg
KyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6IDI1MCwgJ25vcm1hbCc6IDUw
MCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xuXG52YXIgaW5zdGFuY2VzID0g
e30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdHZhciBub3cgPSBE
YXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdHZhciBp
bnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBpbnN0YW5jZS5zdGVwKG5vdyk7
XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlz
dCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtcblx0bGlzdC5wdXNo
KHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxvb3AucGVyaW9kaWNh
bChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5cbnZhciBwdWxsSW5zdGFuY2Ug
PSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdO1xuXHRpZiAobGlz
dCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxpc3QubGVuZ3RoICYmIHRpbWVy
c1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRcdHRpbWVyc1tmcHNd
ID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59O1xuXG59KSgpO1xu
XG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENT
UyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5FbGVtZW50
cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRngsIEVsZW1l
bnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4qL1xuXG5GeC5DU1MgPSBuZXcg
Q2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhlIGJhc2UgZnJvbS90
byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWVz
KXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0dmFyIGZyb20gPSB2
YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9PSBudWxsKXtcblx0XHRcdHRv
ID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTtcblx0XHRc
dHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFwdGVkIGZyb206IGh0
dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rlci9meC5qcyNMMjk5XG5cdFx0
XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdzdHJpbmcnICYmIGZyb20uc2xp
Y2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkgIT0gMCl7XG5cdFx0
XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7XG5cdFx0XHRcdHZhciB2
YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHRcdC8vIElF
IGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdpZHRoXG5cdFx0XHRcdGlmICgh
KC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlWygn
cGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0XHRcdFx0aWYgKHZhbHVlID09
IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3YXJkcycgaHR0cDov
L2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5
MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7XG5cdFx0XHRcdFx0
XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGVs
ZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0g
bGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9ICh0byB8fCAxKSAv
IChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0KGZyb20pIHx8IDApO1xuXHRc
dFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7XG5cdFx0XHR9XG5c
dFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9tKSwgdG86IHRoaXMucGFyc2Uo
dG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXlcblxuXHRwYXJz
ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2YWx1ZSko
KTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpID8gdmFsdWUuc3BsaXQo
JyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rp
b24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFyIGZvdW5kID0gZmFs
c2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFyc2VyKXtc
blx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZhciBwYXJzZWQgPSBwYXJzZXIu
cGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09IDApIGZvdW5kID0g
e3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRcdH0pO1xuXHRcdFx0Zm91bmQg
PSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vycy5TdHJpbmd9O1xu
XHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8vY29tcHV0ZXMgYnkgYSBm
cm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLlxuXG5cdGNv
bXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNvbXB1dGVkID0gW107
XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihp
KXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21wdXRlKGZy
b21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5wYXJzZXJ9
KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZng6
Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5cdC8vc2VydmVzIHRo
ZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5c
dFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5wYXJz
ZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0dmFsdWUuZWFjaChmdW5jdGlv
bihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25jYXQoYml0LnBhcnNlci5zZXJ2
ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmV0dXJuZWQ7XG5cdH0s
XG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5cdHJlbmRlcjogZnVu
Y3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtcblx0XHRlbGVtZW50LnNldFN0
eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7XG5cdH0sXG5cblx0Ly9zZWFy
Y2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxlY3Rv
clxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRcdGlmIChGeC5DU1MuQ2FjaGVb
c2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0XHR2YXIgdG8gPSB7
fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5lc2NhcGVSZWdFeHAo
KSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVuY3Rpb24ocnVsZXMpe1xuXHRc
dFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRcdGlmIChydWxlLm1l
ZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxlcyB8fCBydWxlLmNzc1J1bGVz
KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFydWxlLnN0eWxl
KSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRleHQp
ID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBmdW5jdGlvbihtKXtcblx0XHRc
dFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51bGw7XG5cdFx0XHRc
dGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVzdChzZWxlY3RvclRleHQpKSBy
ZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2YWx1
ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtzdHlsZV0gfHwgRWxlbWVudC5T
aG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9IFN0cmluZyhydWxl
LnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3QodmFs
dWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtc
blx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cywgZnVuY3Rpb24o
c2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0aWYgKGhyZWYgJiYg
aHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1bWVudC5kb21haW4p
ID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVldC5j
c3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7XG5cdFx0cmV0dXJu
IEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59KTtcblxuRnguQ1NTLkNhY2hl
ID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9yOiB7XG5cdFx0cGFyc2U6IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05YS1mXXszLDZ9JC9p
KSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0cmV0dXJuICgodmFsdWUgPSB2
YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8pKSkgPyBbdmFsdWVbMV0s
IHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxuXHRcdGNvbXB1dGU6IGZ1bmN0
aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAoZnVuY3Rpb24odmFs
dWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21baV0sIHRv
W2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xuXHRcdH1cblx0fSxcblxuXHRO
dW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRjb21wdXRlOiBGeC5jb21wdXRl
LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRyZXR1cm4gKHVuaXQp
ID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0cmluZzoge1xuXHRc
dHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbih6
ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlv
bih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0fVxuXG59O1xuXG5cblxuLypc
bi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGVz
LCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIGZvciBh
biBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3IgQ1NTIGJhc2VkIHNlbGVjdG9y
IHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNT
U1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5GeC5Nb3JwaCA9IG5ldyBDbGFz
cyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1l
bnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50
LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNldDog
ZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93ID0gdGhp
cy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykgdGhpcy5yZW5kZXIodGhpcy5l
bGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZhciBu
b3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50KGZy
b21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRzdGFydDog
ZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMpKSBy
ZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0cmluZycpIHByb3Bl
cnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJvbSA9IHt9LCB0byA9
IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5cdFx0XHR2YXIgcGFyc2VkID0g
dGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7XG5cdFx0XHRmcm9t
W3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNlZC50bztcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9w
ZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5n
ZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBoID0gdGhpcy5yZXRy
aWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBoID0gbmV3IEZ4Lk1v
cnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbW9ycGgnLCBt
b3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxuXG59O1xuXG5FbGVtZW50Lmlt
cGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0aGlzLmdldCgnbW9y
cGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4t
LS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEgc2V0
IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIEZ4IENs
YXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEVh
c2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0cGVubmVy
LmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdpdGggTW9v
VG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRnguVHJhbnNpdGlvbnNcblxuLi4u
XG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNpdGlvbnMu
U2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7XG5cdFx0
XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9IEZ4LlRyYW5zaXRp
b25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBdLmNhcGl0
YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScgKyBkYXRh
WzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkgOiAnJyld
O1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4LlRyYW5zaXRpb24g
PSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBBcnJheS5jb252ZXJ0
KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVybiB0cmFu
c2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hcHBlbmQoZWFzZUlu
LCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rpb24ocG9zKXtcblx0
XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpO1xuXHRcdH0sXG5cdFx0
ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIChwb3MgPD0gMC41ID8gdHJh
bnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAtIHBvcyks
IHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zID0ge1xu
XG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJuIHplcm87XG5cdH1cblxufTtc
blxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25zKXtcblx0
Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRnguVHJhbnNpdGlvbnNbdHJhbnNp
dGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXSk7XG59O1xu
XG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0
cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0fSxcblxuXHRFeHBvOiBmdW5j
dGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkpO1xuXHR9LFxuXG5c
dENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29zKHAp
KTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGguY29z
KHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVuY3Rpb24ocCwgeCl7XG5cdFx0
eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgMikgKiAoKHgg
KyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0aW9uKHApe1xuXHRcdHZhciB2
YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwgYiAvPSAyKXtcblx0
XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1ZSA9IGIgKiBiIC0g
TWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7XG5cdFx0XHRcdGJyZWFrO1xu
XHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0RWxhc3RpYzogZnVu
Y3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1hdGguY29z
KDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5cdH1cblxufSk7XG5c
blsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24odHJhbnNp
dGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRp
b24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTtcblx0fSk7XG59
KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkg
RnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFuIGVs
ZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NT
XG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdobGlnaHRd
XG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNT
UyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlz
LmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlz
LnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBub3cp
e1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdFx0bm93ID0gcHJvcGVydHk7
XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnByb3BlcnR5
O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHByb3BlcnR5LCBub3csIHRo
aXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdGFydDogZnVu
Y3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydHks
IGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5mbGF0dGVuKGFy
Z3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0eSB8fCBh
cmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQs
IHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVudChwYXJzZWQuZnJv
bSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnR3ZWVuID0g
e1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJykuY2Fu
Y2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRn
ZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2ZSgndHdlZW4nKTtc
blx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMsIHtsaW5r
OiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7XG5cdFx0fVxu
XHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0
dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVu
Jykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyksIG1l
dGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVudHMpLCB0b2dnbGU7XG5cdFx0
aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRcdHN3aXRjaCAoYXJn
c1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAxOyBi
cmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAwOyBi
cmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDE7IGJy
ZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMDsgYnJl
YWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9IHRoaXMucmV0cmll
dmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHknKSA9PSAxKTtcblx0XHRcdFx0
bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAwIDogMTtcblx0XHRc
dFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0b2dnbGUgPSB0cnVl
O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0
fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7XG5cdFx0ZmFk
ZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0byA9IGFyZ3NbYXJncy5sZW5n
dGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0dGhpcy5zZXRTdHls
ZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG5cdFx0fSBl
bHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5ndGgpe1xuXHRcdFx0
XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0eWxl
KCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLmNhbGxDaGFpbigpO1xu
XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2li
aWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmYWRlLmNo
YWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ29wYWNp
dHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHkn
LCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHR9KTtcblx0XHR9
XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0
LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRoaXMucmV0cmlldmUoJ2hpZ2hs
aWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InKSk7XG5cdFx0
XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYnIDogZW5kO1xuXHRcdH1cblx0
XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0d2Vlbi5zdGFydCgnYmFja2dy
b3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5jaGFpbihmdW5jdGlvbigpe1xu
XHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMucmV0cmlldmUoJ2hp
Z2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxDaGFpbigpO1xuXHRcdH0uYmlu
ZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFt
ZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVxdWVzdCBD
bGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBD
bGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJlcXVlc3RcblxuLi4uXG4qL1xu
XG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxuXHRwcm9ncmVzc1N1
cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJlcXVlc3QpO1xuXG52YXIgUmVx
dWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0NoYWlu
LCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7Lypcblx0
XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRzdGFydDogZnVuY3Rpb24oZXZl
bnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRc
dG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNlbDogZnVuY3Rpb24oKXt9LFxu
XHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCByZXNwb25zZVhNTCl7fSxcblx0
XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4Y2VwdGlvbjogZnVuY3Rpb24o
aGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBmdW5jdGlvbigpe30sXG5cdFx0
dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50aWFsczogZmFsc2Us
Ki9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdCdY
LVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdBY2NlcHQnOiAndGV4
dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidc
blx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDogZmFsc2UsXG5cdFx0bWV0aG9k
OiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNTdWNjZXNzOiBudWxsLFxuXHRc
dGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRcdGVuY29kaW5nOiAn
dXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRldmFsUmVzcG9uc2U6IGZhbHNl
LFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vcblx0fSxcblxuXHRpbml0aWFs
aXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVl
c3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpcy5oZWFkZXJzID0g
dGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5nZTogZnVuY3Rpb24o
KXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9IDQg
fHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRc
dHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0
XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMuc3RhdHVzID0gKHN0YXR1cyA9
PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHhoci5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25w
cm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdGlmICh0aGlzLnRpbWVyKXtc
blx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVy
O1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDogdGhpcy54aHIucmVzcG9uc2VU
ZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtcblx0XHRpZiAodGhpcy5vcHRp
b25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlcblx0XHRcdHRoaXMuc3VjY2Vz
cyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1sKTtcblx0XHRlbHNlXG5cdFx0
XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAoc3RhdHVzID49IDIwMCAmJiBz
dGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9uKHRl
eHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgvKGVjbWF8amF2YSlz
Y3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSkpIHJldHVybiBCcm93
c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMub3B0aW9u
cy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1sKXtc
blx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQpLCB4bWwpO1xuXHRc
dHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtcblx0fSxcblxuXHRvblN1Y2Nl
c3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJndW1lbnRz
KS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxDaGFpbigpO1xuXHR9LFxuXG5c
dGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtcblx0XHR0aGlzLnJl
amVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRvbkZh
aWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmlyZUV2
ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFydDogZnVuY3Rpb24o
ZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRoaXMueGhy
XSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVF
dmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0dGltZW91dDog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTtcblx0
XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjogdGhpcy54aHJ9KTtcblx0fSxc
blxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0aGlzLmhlYWRlcnNb
bmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRIZWFkZXI6IGZ1
bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5c
dFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG5cdFx0fS5iaW5k
KHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVu
bmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5cdFx0
XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2Ug
J2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyBy
ZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzZW5kOiBm
dW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9ucykpIHJldHVybiB0
aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1Y2Nl
c3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHRcdHZh
ciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBlID09ICdzdHJpbmcnIHx8IHR5
cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9O1xuXG5cdFx0dmFyIG9s
ZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7ZGF0YTogb2xk
LmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0aW9ucyk7XG5cdFx0
dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1ldGhv
ZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0Y2ggKHR5cGVPZihk
YXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRhdGEpLnRv
UXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzog
ZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlz
Lm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlzLm9w
dGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRhdGEg
OiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbXVsYXRpb24gJiYgIVsn
Z2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBfbWV0aG9kID0gJ19t
ZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0aG9kICsgJyYnICsg
ZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0fVxuXG5cdFx0aWYg
KHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdwdXQnXS5jb250YWlucyhtZXRo
b2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5jb2RpbmcpID8gJzsg
Y2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7XG5cdFx0XHR0aGlzLmhlYWRl
cnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcg
KyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9jYXRp
b24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRleE9mKCcv
Jyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmltUG9zaXRpb24gPSB1cmwuaW5k
ZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3NpdGlvbik7XG5cblx0
XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/
JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTtcblxuXHRcdGlmIChkYXRh
ICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxldGUnKSl7XG5cdFx0XHR1cmwg
Kz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBkYXRhO1xuXHRcdFx0ZGF0
YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmIChwcm9n
cmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5sb2Fkc3RhcnQuYmlu
ZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy5iaW5kKHRoaXMp
O1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRoaXMu
b3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29yZCk7
XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAmJiAnd2l0aENyZWRlbnRp
YWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG5cdFx0eGhyLm9ucmVh
ZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO1xuXG5cdFx0T2Jq
ZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuXHRcdFx0fSBjYXRj
aCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBba2V5LCB2YWx1ZV0p
O1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4aHIsIGV4
Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0
VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5hYmxl
KHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgncmVxdWVzdCcp
O1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmFzeW5jKSB0aGlz
Lm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudGltZW91dCkgdGhp
cy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwgdGhpcyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRcdGlm
ICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtc
blx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5cdFx0aWYgKHRoaXMu
dGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRo
aXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0
XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9
IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMu
ZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnY2FuY2VsJywg
eGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIG1ldGhvZHMg
PSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdoZWFkJywg
J0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVBRCddLmVhY2goZnVu
Y3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7XG5cdFx0
dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fTtcblx0XHRpZiAoZGF0
YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRoaXMuc2VuZChvYmpl
Y3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG5FbGVtZW50
LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZh
ciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0XHRzZW5kLnNldE9wdGlvbnMo
b3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xu
XHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlmICghc2VuZCl7XG5c
dFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlzLCBsaW5rOiAnY2Fu
Y2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1cmw6IHRoaXMuZ2V0
KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5kJywgc2VuZCk7XG5c
dFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtc
blxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0aGlzLmdldCgnc2Vu
ZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIub3B0
aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIGJh
c2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVyYWN0aW5n
IHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkhUTUxcblxu
Li4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJlcXVl
c3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0YXBwZW5kOiBmYWxz
ZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHRcdGhlYWRl
cnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3ht
bCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2
YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xuXG5c
dFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNjcmlwdCl7XG5c
dFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xuXG5cdFx0dmFyIG1h
dGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xcU10qPyk8XFwvYm9k
eT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0gbWF0Y2hbMV07XG5cdFx0dmFy
IHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5c
blx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJlc3BvbnNlLmVsZW1l
bnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8fCAnKicpO1xuXG5cdFx0aWYg
KG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7XG5cdFx0
aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUgPSBkb2N1bWVudC5pZChvcHRp
b25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgdXBkYXRlLmFk
b3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBkYXRlLnNldCgnaHRtbCcsIHJl
c3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQpe1xuXHRcdFx0dmFy
IGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtcblx0XHRcdGlmIChvcHRpb25z
LmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChhcHBlbmQpO1xuXHRc
dFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigpKTtcblx0XHR9XG5cdFx0aWYg
KG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNwb25zZS5qYXZhc2NyaXB0KTtc
blxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNlLmVsZW1lbnRzLCBy
ZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlzLnJlc29sdmUoe3Ry
ZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRtbDogcmVz
cG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0pO1xuXHR9XG5cbn0p
O1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwoKTtcblx0XHRsb2Fk
LnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBm
dW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpO1xuXHRcdGlm
ICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0YTogdGhpcywgbGlu
azogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0J30pO1xuXHRcdFx0dGhpcy5z
dG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbG9hZDtcblx0fVxuXG59O1xu
XG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmdl
dCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtkYXRhOiBUeXBlLmlzT2JqZWN0
LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5c
bi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjogSlNPTiBlbmNvZGVyIGFuZCBk
ZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuU2VlQWxzbzogPGh0dHA6
Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIE51bWJlciwgRnVu
Y3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxuaWYgKHR5cGVvZiBKU09OID09
ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
c3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxcdCcsICdcXG4nOiAnXFxcXG4n
LCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicgOiAnXFxcXFwiJywgJ1xcXFwn
OiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7XG5cdHJldHVybiBz
cGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIuY2hhckNvZGVBdCgwKS50b1N0
cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRhdGUgPSBmdW5jdGlvbihzdHJp
bmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/OltcIlxcXFxcXC9iZm5ydF18
dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1wiW15cIlxcXFxc
XG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1d
P1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/Ol58OnwsKSg/OlxccypcXFsp
Ky9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSokLykudGVzdChzdHJpbmcpO1xu
fTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7XG5cdHJl
dHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9uKG9iail7XG5cdGlmIChvYmog
JiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5cdHN3aXRjaCAodHlwZU9mKG9i
aikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyArIG9iai5yZXBsYWNl
KC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInO1xuXHRcdGNhc2UgJ2FycmF5
Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5jb2RlKS5jbGVhbigpICsgJ10n
O1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFyIHN0cmluZyA9IFtd
O1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdFx0
dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChqc29uKSBzdHJpbmcu
cHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5cdFx0XHR9KTtcblx0XHRcdHJl
dHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzogY2FzZSAnYm9vbGVh
bic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzogcmV0dXJuICdudWxsJztcblx0
fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUgPSB0cnVlO1xuXG5cbkpTT04u
ZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0cmluZyB8fCB0eXBl
T2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cblx0aWYgKHNlY3VyZSA9PSBu
dWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3VyZSl7XG5cdFx0aWYgKEpTT04u
cGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0aWYgKCFKU09OLnZhbGlkYXRl
KHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRoZSBpbnB1
dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUuJyk7XG5c
dH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpO1xufTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhl
IGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRpbmcg
YW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkpTT05cblxu
Li4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJlcXVl
c3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVuY3Rpb24odGV4dCwgZXJyb3Ip
e30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihv
cHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0XHRPYmplY3QuYXBwZW5kKHRo
aXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHRc
dCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlv
bih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRcdFx0anNvbiA9IHRoaXMucmVz
cG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0aW9ucy5zZWN1cmUpO1xuXHRc
dH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIFt0ZXh0LCBl
cnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoanNvbiA9PSBudWxsKXtcblx0
XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uU3VjY2Vzcyhq
c29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjoganNvbiwgdGV4dDogdGV4dH0p
O1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBDb29raWVcblxuZGVzY3Jp
cHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIGJyb3dzZXIg
Q29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0g
QmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtvY2ggKGh0dHA6Ly9xdWlya3Nt
b2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nlcl1cblxucHJvdmlkZXM6IENv
b2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVu
dHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6ICcvJyxcblx0XHRkb21haW46
IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1cmU6IGZhbHNlLFxuXHRcdGRv
Y3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0cE9ubHk6IGZhbHNl
XG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0XHR0aGlz
LmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0d3Jp
dGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFsdWUg
PSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZG9tYWlu
KSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5kb21haW47XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9wdGlvbnMucGF0aDtc
blx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRcdHZhciBkYXRlID0gbmV3IERh
dGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5k
dXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUgKz0gJzsgZXhwaXJl
cz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25zLnNl
Y3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhpcy5vcHRpb25zLmh0dHBPbmx5
KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tp
ZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZG9jdW1lbnQu
Y29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4cCgpICsg
Jz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25lbnQodmFs
dWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdG5ldyBD
b29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVyYXRpb246
IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuQ29va2ll
LndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29v
a2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxuQ29va2llLnJlYWQgPSBmdW5j
dGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTtcbn07XG5cbkNvb2tp
ZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUo
a2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0tXG5cbm5hbWU6IERPTVJlYWR5
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRvbXJlYWR5LlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtCcm93c2VyLCBFbGVtZW50
LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5LCBEb21SZWFkeV1cblxuLi4u
XG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5cbnZhciByZWFkeSxcblx0bG9h
ZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0dGltZXIsXG5cdHRlc3RFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbnZhciBkb21yZWFkeSA9IGZ1
bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghcmVhZHkpe1xuXHRcdEJy
b3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3VtZW50LnJlbW92ZUxpc3RlbmVy
KCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0YXRl
Y2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVudCgnZG9tcmVhZHknKTtcblx0
XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5cdC8vIGNsZWFudXAgc2NvcGUg
dmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50ID0gbnVsbDtcbn07XG5cbnZh
ciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBjaGVja3MubGVuZ3RoOyBpLS07
KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0dXJuIHRydWU7XG5c
dH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBmdW5jdGlvbigpe1xuXHRjbGVh
clRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91dChwb2xs
LCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRv
bXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBEaWVnbyBQ
ZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC9cbi8vIHRl
c3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVhZHksIG9u
bHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24oKXtcblx0
dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9
IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJZiBkb1Njcm9sbCB3b3JrcyBh
bHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBkb21yZWFkeVxuLy8gICBlLmcu
IGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xsICYmICFkb1Njcm9sbFdvcmtz
KCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0c2hvdWxkUG9sbCA9IHRydWU7
XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUpIGNoZWNrcy5wdXNo
KGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG5cdHJldHVy
biAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7XG59KTtcblxuaWYg
KCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5lcign
cmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9IHRydWU7XG5cbmlm
IChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0ge1xuXHRv
bkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTtcblx0fVxu
fTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMgYmVmb3JlIGxvYWRcbkVsZW1l
bnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6IGZ1bmN0aW9uKGZu
KXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBmbi5jYWxsKHRoaXMpO1xuXHR9
LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0gd2luZG93KXtcblx0
XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDtcblx0XHR9
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMgaXMgYmFzZWQgb24gdGhlIGN1
c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5jdGlvbigpe1xuXHRs
b2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIgogCiAvKioqLyB9
KSwKIC8qIDQxMiAqLwpAQCAtMTEzODk0LDEzICsxMTM4OTQsMTMgQEAgbW9kdWxlLmV4cG9ydHMg
PSAiLypqc2hpbnQgcXVvdG1hcms6IGZhbAogLyogNDIwICovCiAvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVy
eS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1
c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElTIENPREUgSVMgUFJPVklERUQgKkFTIElTKiBC
QVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJ
TVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5c
blxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
c2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkg
bGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAueFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVy
eS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9yaXMgWWFua292IDxodHRwczovL2dpdGh1Yi5j
b20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhvZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5j
b20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9uLCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dp
dGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3BvdWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rh
c29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFuIEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9z
ZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBT
dW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9rc3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3ll
ZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBz
Oi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVyZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdhc3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0Fu
ZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZpc2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2ph
bWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxodHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+
LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwg
UG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIuY29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8
aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRo
dWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29t
L2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhl
IEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmlndXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVu
dCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3
aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBhY2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNj
ZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8g
c28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0
cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNl
bnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4g
SWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVzdHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxz
ZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBkYXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3Rz
IGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9u
b3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBsb2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcg
YW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3QgaXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44
LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRoIGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXBy
ZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nlc3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sg
b3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhS
IG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBvciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNj
ZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEg
cHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkg
dGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3Jl
IGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBjdXN0b20gaGVhZGVycywgZXRjLiBUaGUganFY
SFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMg
YW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNlIGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9u
IHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2Vu
ZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0
LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChqcVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczog
SlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBmYWxz
ZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFnZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUg
YnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3Jy
ZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVzdHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBc
Il89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBhcmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMg
bm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgcmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hl
biBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVk
IGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAg
KiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRl
ciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9u
IGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBY
TUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1
cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIsIFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwi
LCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBcInBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVl
cnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0
aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFq
YXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxldGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0
U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmlu
Zy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhhdCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxs
IHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRzIGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRk
ZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9
O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5hamF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0
aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlwZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAg
Ly8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMv
NzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5kaW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNl
IHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11
cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdoaWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMu
IElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBjb250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRo
ZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNlcnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNl
bnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNwZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0
aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNwZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdp
bGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICov
XG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2ls
bCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBBamF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBk
ZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4
IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQuYWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRo
ZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5cbiAgICAgKi9cbiAgICBjb250ZXh0PzogYW55
O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFU
eXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVyJ3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0
IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVlIG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24g
YWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBh
bnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFp
biByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFs
dWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhpcyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2
ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVyIGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEu
NSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
RGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5
IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVy
bCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vzc0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhp
cyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJ
ZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNlcmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdp
dGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5n
IChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4g
ICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRvIGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRh
dGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBhIHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8g
c2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hvdWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRh
dGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1
cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAnZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAg
Ki9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxu
ICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0
aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmllZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVy
IGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0
eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNPTiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBv
YmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVjdXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGlu
ZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFU
eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlm
IHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRz
OiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBz
dHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlcnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBv
cHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBvbmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVl
cyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVzaWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIs
IFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJwYXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAg
ZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNlaXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9m
IHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5vdCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2Vy
dmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2Nl
cHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGlu
IHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBub3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4g
c2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAgcmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBF
dmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6
IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRo
ZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVudCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0
LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFs
IGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFqYXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVk
LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAg
Ki9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBh
ZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVl
c3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1
ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1
bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJlIGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRo
ZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUgb3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhl
IGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAg
aGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93
IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwgb25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNo
YW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4gVGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRo
ZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgaWdub3Jpbmcg
dGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlzIHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUg
J2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVyIHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5c
biAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxv
dyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBiZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIg
KGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlmIGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUg
aXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgY3VycmVu
dGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUsICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJ
ZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5k
ZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xvY2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVl
c3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUg
J2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNv
bnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQg
dG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEuNSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9u
IHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9tIGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBz
dHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5nIHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9y
bWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUg
anNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhhbXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25w
Q2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxuICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5n
O1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9y
IGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUg
cmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVm
ZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtl
IGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVlc3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBh
bmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2FudCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3
aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIgYnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1
ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNhbiBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0
aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMg
c2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBq
c29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxuICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJy
aWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4g
ICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1
c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0
aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAg
ICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRhIHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRp
b24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmlu
Zykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5zZm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcs
IGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVudC10eXBlIFwiYXBwbGljYXRpb24veC13d3ct
Zm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Ig
b3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAg
ICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBw
bGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5zcG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1k
b21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIgb3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQg
XCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0
YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRo
ZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2Ny
aXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJzZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBjb2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNh
bGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUg
cmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3RhdHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhl
IHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2VzcyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBp
biBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRpcmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBw
YXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFjay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAg
ICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoq
XG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
IFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJlZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVy
bmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUg
cGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIg
KGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEu
NSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4g
RWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZl
bnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5n
LCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAgIC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQg
KGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55
IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWpheFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlv
ZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFqYXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFs
IG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVzcyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNv
bm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1l
IG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIEluIGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRo
ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRo
ZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5nIGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhy
b3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMuMCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCBy
ZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxs
IHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIgdGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAq
L1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1
ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRpdGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlh
bGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxu
ICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8gbWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiks
IGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3RoZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1
Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNvIGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJl
IG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJp
bmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNo
IHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICovXG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8q
KlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJl
c3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICov
XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNy
ZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVY
T2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRoZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2Uu
IE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBS
ZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUgZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/
OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVl
IHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhIUiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3Ug
Y2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRpYWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFp
biByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVyeSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMg
cHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRvIHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENP
UlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxkIGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlz
IHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpRdWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1
aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4
aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZh
Y2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMg
WE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlw
ZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAgIGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcp
OiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xu
Ki9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55
W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZp
cmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtcbiAgICBmaXJlZCgpOiBib29sZWFuO1xuICAg
IGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgaGFzKGNh
bGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxvY2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBi
b29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFja3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxu
ICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8gaW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJv
bWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9
PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2
YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjog
YW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdl
bmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihv
bkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0
PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVy
aWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9t
aXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtc
biAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdh
eXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2Fs
bGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNr
czogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxi
YWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxs
YmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6
IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxi
YWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdp
dmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZh
aWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHByb2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4g
YW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1
ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jl
c3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICgu
Li5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhl
bjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczog
YW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dy
ZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9u
RnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/
OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dy
ZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtc
blxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21pc2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVs
ZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFu
eVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55
W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFu
eVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkp
OiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6
IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9n
cmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG59XG5cbi8qXG4gICAg
SW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVycmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9c
bmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBleHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xu
ICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5
c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2Fs
bGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFj
a3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2Fs
bGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXND
YWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2Fs
bGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxi
YWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVz
c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5h
cmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDog
YW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4u
LmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0
OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZl
KHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmUoLi4uYXJnczogYW55W10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFy
Z3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4g
ICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAg
IEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVuc2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVj
dFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtc
biAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZh
dWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAgaXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3Bw
ZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAg
IG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZlbnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxh
dGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3VsdDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQ
cm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBh
Z2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAg
IG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0
IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4g
ICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5
OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRz
IEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVu
dFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xu
ICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1i
ZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAgIHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50
ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVj
dCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJDb2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7
XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVu
dE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVu
dDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVu
ZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlN
b3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVudE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVu
dE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBj
dXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFjZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4
PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJvb2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86
IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJvb2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xl
YW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAgY3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhy
ZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBodG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAg
ICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29s
ZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xlYW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47
XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtc
biAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtcbiAgICBzdHlsZT86IGJvb2xlYW47XG4gICAg
c3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAgdGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRl
cmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBh
bnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRl
cmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQg
aXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0
aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhlIGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRo
IHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmluZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxu
ICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmlu
ZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChu
YW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xu
fVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlv
bnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNpbmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIp
OiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0
YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ugb24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMp
XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3Jt
IGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUg
QWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJl
IHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWph
eChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkv
dmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdz
IGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAk
LmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzog
SlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxl
IGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVh
Y2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWph
eCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcg
Y29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJl
IEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0
cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGlu
Z3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFu
ZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3Jl
IGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQu
YWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBk
ZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWph
eFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhT
ZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0
aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4gICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVs
dCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1l
bmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFtIG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVl
IHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZhdWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlv
bnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAgICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5
QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRo
ZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFt
IHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMg
ZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBl
IFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRl
bGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAg
IGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhI
UjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRU
UCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFp
bmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFt
IGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVy
IHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBw
YXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4g
RGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5c
biAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAo
ZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwg
ZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRh
IGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVx
dWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmlu
ZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0
YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4
bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5n
LCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5n
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhS
O1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVk
IGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJp
bmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5j
b2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3Ry
aW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3Ry
aW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0
YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0
aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9u
IHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAg
Z2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnks
IHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhS
O1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZhU2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhlbiBleGVjdXRlIGl0LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJl
cXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9u
IHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAg
Z2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAg
IHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRo
ZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlz
IHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlz
IGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBp
cyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0g
ZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1
bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4g
ICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQg
dG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEg
Y2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVk
cy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0
aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0
ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29u
LCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRh
dGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpx
WEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4g
ICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9T
VCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0
YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0
aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9u
IHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRh
dGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAq
IEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZl
ci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBo
dG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNj
ZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9
PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICog
QSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93
ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBsaXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNo
YW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFj
a3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxsYmFjaztcblxuICAgIC8qKlxuICAgICAqIEhv
bGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24gb2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9s
ZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFzZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHko
aG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86
IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDogRWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2Jq
ZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7
XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpR
dWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVyeSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFi
bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVtb3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5n
IHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkgdmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBz
Y29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYpLlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3Qo
cmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVz
IGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3Jl
IG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hy
b25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9y
ZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICov
XG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBK
UXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1
dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFs
bHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmpl
Y3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPigu
Li5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJv
dmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9y
IG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFz
eW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBv
ciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAg
ICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+
O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIGNzc051bWJl
cjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3RvcmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4gUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMg
c2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFz
c29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5n
IHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBk
YXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBz
dHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5h
bWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxl
bWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3Nv
Y2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0
aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVt
ZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0
IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEo
ZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxl
bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBh
c3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1l
bnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0
cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5c
biAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtc
biAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVP
ckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1l
bnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVy
cmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVkOiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55
KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgZng6IHsgdGljazog
KCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsgc3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7
IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsg
fTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFu
eSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0
OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBhbnk7XG5cbiAgICBFdmVudDog
SlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGVycm9yKG1l
c3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBh
bnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVjaWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhp
c1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9y
dDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRh
aW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2go
Y29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxl
bWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNh
bGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVu
dCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4oY29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazog
KGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogVCkgPT4gYW55KTogYW55O1xu
XG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRl
bmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4g
ICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBhbnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBU
W10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJv
b2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBU
LCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5
KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0VtcHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVh
bjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc051bWVyaWModmFs
dWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFpbk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47
XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5v
ZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5KG9iajogYW55KTogYW55W107XG5cbiAgICBt
YXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJ
bkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4gICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNr
OiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJbkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtc
blxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNlY29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdl
PFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10pOiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55
O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAgIHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBh
bnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1l
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0
byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJzZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1
bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBu
ZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAgICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5n
O1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmluZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtd
KTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJh
eSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0
byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29udGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBh
cyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRNTCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRc
biAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0
byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAg
IHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRleHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlw
dHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBBbmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0
aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtcblxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5n
O1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5zdGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFj
ZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBhamF4Q29tcGxldGUoaGFuZGxlcjogYW55KTog
SlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwg
c2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4
U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhj
ZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9wKGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVy
eTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0
dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQo
dXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBsZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAg
c2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJpYWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAg
IC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhjbGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9c
biAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0
dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0
cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmlu
ZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0
dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBoYXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6
IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmluZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxDb250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xk
aHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6
IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJv
cChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1h
cDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChp
bmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3Zl
Q2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6
IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJv
cChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNz
TmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Mo
c3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDog
YW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6
IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZh
bChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmly
c3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhw
cm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9y
IG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAg
Ki9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUg
c2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlO
YW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8g
c2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3Ry
aW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3Ig
bW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAg
ICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAq
L1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhl
IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5
TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRv
IHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0
cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUg
b3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxu
ICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0
LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlv
biBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50
cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6
IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9w
ZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUg
dmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBp
bmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVl
IGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZh
bHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMg
QW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBhaXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBj
c3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtc
biAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5lckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5u
ZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVt
YmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNl
dCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5h
dGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86
IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJIZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVk
ZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJn
aW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5j
bHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDog
bnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAgICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAg
ICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTog
bnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lk
dGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lk
dGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwg
aGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1
ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcs
IHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55
OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1
ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxp
c3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86
IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0
c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/
OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRp
b24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtc
biAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsg
ZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1
ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRl
bGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFk
ZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBu
dW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55
LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhp
ZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVy
YXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5c
biAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBz
aG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnks
IGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVw
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1
cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpR
dWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRv
RW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/
OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRl
OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8gRXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6
IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcs
IGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJp
bmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4g
ICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1
cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNo
YW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdl
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBj
aGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgY2xpY2soKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlj
a1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
VHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxl
cj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3VzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAg
ICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9j
dXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZv
Y3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRsZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRz
LCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVz
IHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50Llxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBt
b3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5k
bGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91
dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFuZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50
cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVz
IHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0
aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW5PdXQ6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4g
ICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBrZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJl
c3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1
cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVw
KGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBt
b3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5n
IGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBh
biBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBl
bnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAg
ICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1l
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdo
ZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxl
YXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRh
OiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92
ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
b3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICov
XG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBv
ZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywg
c3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwi
LlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0
aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhh
bmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91
c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNl
LlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBh
bmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xp
Y2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRo
ZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2Zm
KGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3Ry
aW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBl
cyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRs
ZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAg
KiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBv
cmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5c
biAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0
b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQg
aGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Ut
c2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwi
Y2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFs
dWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRo
YXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBSZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBv
cHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBqUXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQg
dGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3Qg
YmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRheCkuXG4gICAgICovXG4gICAgb24oZXZlbnRz
OiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFy
Z3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2
ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBh
cyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVj
dG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNl
bGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBp
cyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQg
cmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUg
ZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQg
c2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5n
LCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEg
c2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVk
IGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxs
IG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hl
cyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBh
c3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMg
YSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2Uu
XG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6
IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9u
IGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlz
IHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9w
dGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVu
Y3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVj
dG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNl
bGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0
b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4g
aXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRh
IHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQg
b2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0s
IHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxl
ciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1v
cmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQs
XCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhh
bmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0
ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3Jp
cHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3Rv
bSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9y
IHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBl
bGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUg
b3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFj
ZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBw
YXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRz
IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUg
c2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJl
ZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4g
VGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5j
dGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZl
bnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2gg
YSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4
ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRv
d24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0
cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBl
bGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5k
bGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBv
bmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRz
LiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2
ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGlj
aCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBl
dmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVz
ZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAg
ICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNj
ZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRs
ZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFs
d2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAq
IEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRh
dGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5
O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4g
ICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAg
cmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAq
L1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2VsZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5c
biAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJz
OiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2VyKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6
IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRy
YVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xuXG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0
cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpR
dWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6
IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5n
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7
XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9h
ZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIEludGVybmFsc1xu
ICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvciho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHB1c2hTdGFjayhlbGVtZW50czog
YW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55
LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFm
dGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmQoLi4uY29udGVudDogYW55W10pOiBK
UXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVm
b3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBi
b29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAg
ZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xu
XG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3Jl
KHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6
IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAg
IHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlV2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5c
biAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtc
biAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXkoKTogYW55W107XG5cbiAgICB1bndyYXAoKTog
SlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3
cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdy
YXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxl
bWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJbm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGVhY2goZnVuYzogKGlu
ZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRl
eD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxl
Y3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGluZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtc
blxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjog
c3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVt
ZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAgIGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250
ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCguLi5lbGVtZW50czogYW55W10pOiBKUXVlcnk7
XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNs
b3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBz
dHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVl
cnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xv
c2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNv
bnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgpOiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVyKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmls
dGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVl
cnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVt
ZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAg
IGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBKUXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjog
c3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9v
bGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBib29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5
KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAo
aW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
bmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZp
bHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQs
IGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpR
dWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBu
b3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtc
blxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5
O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBz
dHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50
aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2
VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBw
cmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBz
aWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBu
dW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtcblxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAg
cXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4gICAgcXVldWUocXVldWVOYW1lOiBz
dHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1
ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xufVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlc
IiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xhcmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGlj
O1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGljO1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIu
ZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgQW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6
IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZpbml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0
dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRo
dWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5n
dWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8vIFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVu
ZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVuY3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5n
W107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5q
cylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRlY2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8v
IEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQgdGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZh
Y2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAgICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBG
dW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5jdGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVs
ZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xu
ICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRv
LklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBt
b2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJh
cChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2
aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtc
biAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpRdWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxz
KHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0
aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChv
Ymo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0
PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNvbihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAg
ICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBh
bnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZh
bHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29s
ZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNP
YmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkp
OiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAg
ICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICAvKiogY29uc3Ry
dWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxuXHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFj
ZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUo
XG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3VyIG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUg
Ki9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1v
ZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAgICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdb
XSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9uPzogYW55KTogSU1vZHVsZTtcbiAgICAgICAg
bm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJl
dHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAgICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTog
c3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4g
ICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAgICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAg
ICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAgICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAg
ICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAg
IGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1hdGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1v
ZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVu
Y3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0
KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0
XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJm
b3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0Zu
OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2Vy
dmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMg
dG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZp
ZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25z
dGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFu
dChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3Ry
aW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAg
Y29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlb
XSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVs
ZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVu
Y3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVB
bm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUob2Jq
ZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2Vy
dmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5
KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRl
cihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxl
O1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjog
YW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVj
dG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywg
aW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJv
dmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRp
b25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBydW4oaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJp
bmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2
aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1v
ZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAg
IHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVl
KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxuICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAg
ICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVxdWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0
ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xu
XHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0
dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2FudFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRv
IHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBhdHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBv
ZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0
dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlzIHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJm
bG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRbbmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAg
ICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFs
IHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUg
ZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBm
b3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAgICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmlu
Zyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3ZlcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNp
ZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1l
bnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0
cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBjbGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVt
b3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBl
bGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6
IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJp
YnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVyIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBv
bmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4gICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxh
dGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAg
Ly8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0
cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1h
cCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4g
VGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3Jt
YWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9y
bS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
Rm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRk
aXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxp
ZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAgICAgICRhZGRDb250cm9sKGNv
bnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250
cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXRE
aXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJpc3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBOZ01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01v
ZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdN
b2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVuZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRW
YWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZv
aWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxW
YWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJcbiAgICAgICAgLy8gdHlwZXMgZG8gd29yayBh
bmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4gICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6
IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFsdWU6IGFueTtcblxuICAgICAgICAkbW9kZWxW
YWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJzOiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAg
JGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltdO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAg
ICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAg
ICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55
O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFs
dWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBT
Y29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNj
b3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7
XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IHN0cmluZyk6IGFu
eTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxu
ICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxh
ckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZv
aWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxh
ckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWws
IGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhw
cmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0KTogYW55O1xuICAgICAgICAkZXZhbChleHBy
ZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4g
ICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwg
aW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9u
OiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IChzY29wZTog
SVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5
IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBzdHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xh
dGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAgICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3Rl
bmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5j
dGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVy
Pzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAg
JHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55
LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5Pzog
Ym9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2Nv
cGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBi
b29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29w
ZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBh
bnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVu
Y3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmlu
ZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3Bl
KSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJl
c3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwg
b2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAg
ICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAgICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8v
IEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNvbGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAg
ICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4g
ICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3Bl
O1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlv
bjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgICAgICAvLyBBdmFp
bGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRlbWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFn
YXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRv
d1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9ETyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQg
dG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51
bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2Fu
Y2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5j
dGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVh
bik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+
KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0
ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRm
aWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRl
clByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJT
ZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmluZyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAg
ICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElT
ZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
TG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVT
ZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztcblxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90
IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sgYW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4
ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRTOiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3Jp
cHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFUUzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVz
Y3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAobnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAg
ICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAgICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAg
ICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBD
VVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJl
clBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAgbWluSW50OiBudW1iZXI7XG4gICAgICAgIG1p
bkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJhYzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6
IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJpbmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5n
O1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAgICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAg
ICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGlt
ZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBNT05USDogc3RyaW5nW107XG4gICAgICAgIFNI
T1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBEQVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9S
VERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1TOiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVt
OiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJpbmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJp
bmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmlu
ZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmlu
ZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjog
SUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dDYWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxs
O1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAgICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhp
cyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2UgY2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAg
ICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBpbnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAg
ICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHByZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRF
eHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtc
biAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuXG4gICAgICAgIC8v
IElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5kZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2lu
Y2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJh
bWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9yIGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxu
ICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUgaXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1
ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24oY29udGV4dDogYW55LCB2YWx1ZTogYW55KTog
YW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRp
b25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9u
UHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZf
Z3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50
ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAgICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAg
ICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAgaGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBz
dHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtc
biAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAgICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAg
ICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55
O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01hcDogYW55KTogSUxvY2F0aW9uU2VydmljZTtc
biAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3RyaW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTog
SUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJsKCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVy
bDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxv
Y2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFBy
ZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9j
YXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVNb2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAg
Ly8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBwYXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAg
ICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMgaXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMg
bW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBo
dG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1l
bnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNl
cHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNl
cHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAgIChleGNlcHRpb246IEVycm9yLCBjYXVzZT86
IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
Um9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMgSlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
UVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlzZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9t
aXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4oKTogSURlZmVycmVkPFQ+O1xuICAgICAgICBy
ZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFs
dWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4g
e1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTog
VCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55
KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNl
PFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21p
c2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29u
OiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVBy
b21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAo
cHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55
KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJv
bWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChy
ZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47
XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVBy
b21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3Vs
dD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3Vs
dD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkp
OklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4g
e1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFz
b24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3RpZnkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAg
ICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9sbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2VydmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJsZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3Rv
cnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNl
cnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBmb2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUg
dGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05M
WSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG9kYXksIGEgY29uc3Vt
ZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3Ro
ZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJp
bmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAg
ICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsg
fSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAvLyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRv
Y3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3Ry
aW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qg
e1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAg
ICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAgIC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwg
c2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5
OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAgIHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBh
bnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTogc3RyaW5nKTogYW55O1xuICAgICAgICByZW1v
dmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAg
ICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAgKGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVk
ZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVt
cGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2Ns
dWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElU
ZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNj
bHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJ
VGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxl
UHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5h
bWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVy
O1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwgYnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAg
IGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkpOiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBM
ZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVBdHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAg
ICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hGbj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5
LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAg
Ly8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMg
YXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBs
b2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChjb250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2Nh
bHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlk
ZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3Ry
aW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVn
aXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtd
KTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAg
ICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAg
ICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAg
ICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJ
SHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVhZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZp
Zz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBqc29ucCh1cmw6IHN0cmluZywg
UmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVy
bDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8
YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/
OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29u
ZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFz
IHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGluZ1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5c
biAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRpbmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBt
aWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlv
bnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNlIElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAg
bWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBh
bnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBpdCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhh
cHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBh
bnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJv
b2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNjZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQn
cyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAgZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNm
b3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAg
ICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4ge1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVz
OiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZywgY29uZmln
OiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJv
bWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAgZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86
IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmlu
ZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RDb25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQcm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2Vz
cyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4g
ICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJv
bWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25z
ZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/
OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlz
ZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNw
b25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBl
cnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4g
YW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1
ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgICAgICByZXNwb25z
ZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAgIC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0
byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5LlxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNlIHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMg
ZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6
IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBhbnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhl
YWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIsIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4p
OiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVycG9s
YXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
aW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAgICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZl
RXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBl
bmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29u
dGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQ
cm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgp
OiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xh
dGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgZW5kU3lt
Ym9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1wbGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0
ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJv
b3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9v
dFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2Vy
dmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTog
YW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVk
SHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55
O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRy
dXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJl
c3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0
cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFu
eSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0
OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0
cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jl
c291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55
KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDog
YW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1
c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBh
bnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxl
ZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQ
cm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2Nl
UHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3Zp
ZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJv
b2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFND
RURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAgIGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBt
YXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAgICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZh
bHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVlT2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9
XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRl
UHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVn
YXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VV
cmxCbGFja2xpc3QoYmxhY2tsaXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJs
V2hpdGVsaXN0KHdoaXRlbGlzdDogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJlY3RpdmV7XG4gICAgICAgIGNvbXBpbGU/Olxu
ICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgdGVtcGxhdGVB
dHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTog
SVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rpb24pID0+IHZvaWRcbiAgICAgICAgICAgICkg
PT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzogYW55O1xuICAgICAgICBjb250cm9sbGVyQXM/
OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAgICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4g
ICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0
cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAg
ICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgcHJpb3Jp
dHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/OiBib29sZWFuO1xuICAgICAgICByZXF1aXJl
PzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7
XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAg
ICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAgICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAg
IC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1lbnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVy
eSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2Ug
ZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2Fu
Z3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVn
bWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVj
dG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAo
ZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTog
SUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpR
dWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAg
ICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVu
dGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVu
ZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzogZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAg
ICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21l
bnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVtZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5
O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAg
ICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55
O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5cbiAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6
IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6
IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRh
KGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxhci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3JcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZpY2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUo
Zm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAgICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5v
dGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGdldCAobmFtZTog
c3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5zdGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBG
dW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGlubGluZUFu
bm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShmdW5jOiBG
dW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICB9XG5c
biAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAg
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAg
ICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7
XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0
ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24g
ZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAgICAgICAgICAgLy8gY29uc3RhbnQobmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICAgICAgY29uc3RhbnQobmFtZTogc3Ry
aW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0
cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3Io
bmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAg
IGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6
IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywg
aW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAg
ICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJv
dmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTog
c3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2Vydmlj
ZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9y
OiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1l
OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5c
biAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0udHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAn
dXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xhc3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25z
dHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAg
cHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAgICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4v
LyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGlu
dGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcuSVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0
ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5cdFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5c
dFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xu
XHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFsbENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2
ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmlsdGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4g
fTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7
XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7
XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9yYWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVt
W107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtdKTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9k
b0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0
ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxp
ZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBiaW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5c
blx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0
U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNj
b3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5c
dFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRlcy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5c
dFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVu
dFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRc
dH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3VzLiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5c
bn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBz
dHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGlyZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhw
cmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4g
ICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xu
ICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluazogKCRzY29wZTogbmcuSVNjb3BlLCBl
bGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGVs
ZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9C
bHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7
IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xu
ICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0VzY2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xu
XHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVNDQVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQg
KiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRpbmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNz
ZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBu
Zy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNj
b3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVt
ZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5
Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1
dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNj
b3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0p
O1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8vIHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5c
bm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogU2Vy
dmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmlldmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdl
LlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBUb2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2Rv
U3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9JRCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNj
cmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2RvSXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVy
biBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1td
Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQodG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAg
ICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdp
ZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50
c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBt
YWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRoZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJp
ZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZpYSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxu
XHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZl
bnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBjbGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2
YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRc
dC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVu
Y2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVy
IHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0
ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5c
dFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRpb24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxc
blx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtcblxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUg
aW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFt
ZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9uLnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1j
b250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5odG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0
XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxcblx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBu
Zy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJpdmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9y
YWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9k
b3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFnZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5l
d1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8g
J3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4gV2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRv
IHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxuXHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRv
IGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRNTFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztc
blxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBh
cmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxuXHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0
byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxl
ciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5cblx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9z
JywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUpO1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9j
YXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9uUGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRs
b2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRpb24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3Bl
LmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1cblxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcp
IHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0ZpbHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScp
ID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNlIH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQn
KSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVlIH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRv
ZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZp
bHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDogZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhp
cy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rvcy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1h
aW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3BlLmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUu
cmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9kb1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xu
XHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRo
aXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRcdFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9k
b0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRcdHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztc
blx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMu
JHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtcblxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdp
bmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNhbmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3Bl
Lm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5c
dFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3Ro
aXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0gdGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xu
XHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0
aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9
IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYg
KHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZl
cnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVt
LnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9kb0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhp
cy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2Rv
KHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rv
cy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRl
cih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxldGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxs
KGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVt
ID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29tcGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxu
fVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4gKiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1
bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9kdWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xu
ICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3Rv
ZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJs
KVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAg
ICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRvZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJl
Y3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBlKVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3Rv
ZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxuIgorbW9kdWxlLmV4cG9ydHMgPSAiLy8gbGli
cy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQg
KGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7
IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9W
SURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJ
TUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04t
SU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cbi8vIFR5cGluZyBm
b3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9uIDEuMTAueCAvIDIuMC54XG4vLyBQcm9qZWN0
OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmluaXRpb25zIGJ5OiBCb3JpcyBZYW5rb3YgPGh0
dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+LCBDaHJpc3RpYW4gSG9mZm1laXN0ZXIgPGh0
dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+LCBTdGV2ZSBGZW50b24sIERpdWxsZWkgR29t
ZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVpPiwgVGFzcyBJbGlvcG91bG9zIDxodHRwczov
L2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3ZWFyaW5nZW4sIFNlYW4gSGlsbCA8aHR0cHM6
Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdvb3NzZW5zIDxodHRwczovL2dpdGh1Yi5jb20v
R3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6Ly9naXRodWIuY29tL2tzdW1tZXJsaW4+LCBC
YXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1Yi5jb20vYmFzYXJhdD4sIE5pY2hvbGFzIFdv
bHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253b2x2ZXJzb24+LCBEZXJlayBDaWNlcm9uZSA8
aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJvbmU+LCBBbmRyZXcgR2FzcGFyIDxodHRwczov
L2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFtZXMgSGFycmlzb24gRmlzaGVyIDxodHRwczov
L2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vpa2ljaGkgS29uZG8gPGh0dHBzOi8vZ2l0aHVi
LmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2ttYW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5q
YW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxodHRwczovL2dpdGh1Yi5jb20vczA5MzI5ND4s
IEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5jb20vSm9zaFN0cm9ibD4sIEpvaG4gUmVpbGx5
IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVpbGx5Lz5cbi8vIERlZmluaXRpb25zOiBodHRw
czovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkXG5cbi8qXG4gICAgSW50
ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRoYXQgd2lsbCBjb25maWd1cmUgdGhlIEFKQVgg
cmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlBamF4U2V0dGluZ3Mge1xuICAgIC8qKlxuICAg
ICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0aGUgcmVxdWVzdCBoZWFkZXIgdGhhdCB0ZWxs
cyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNwb25zZSBpdCB3aWxsIGFjY2VwdCBpbiByZXR1
cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNv
bW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC5cbiAgICAg
Ki9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGFsbCBy
ZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNseSAoaS5lLiB0aGlzIGlzIHNldCB0byB0cnVl
IGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5jaHJvbm91cyByZXF1ZXN0cywgc2V0IHRoaXMg
b3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4gcmVxdWVzdHMgYW5kIGRhdGFUeXBlOiBcImpz
b25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQgc3luY2hyb25vdXMgb3BlcmF0aW9uLiBOb3Rl
IHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5IHRlbXBvcmFyaWx5IGxvY2sgdGhlIGJyb3dz
ZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGlsZSB0aGUgcmVxdWVzdCBpcyBhY3RpdmUuIEFz
IG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5bmM6IGZhbHNlIHdpdGgganFYSFIgKCQuRGVm
ZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0IHVzZSB0aGUgc3VjY2Vzcy9lcnJvci9jb21w
bGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9k
cyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMganFYSFIuZG9uZSgpIG9yIHRoZSBkZXByZWNh
dGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9cbiAgICBhc3luYz86IGJvb2xlYW47XG4gICAg
LyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1
c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3Qp
IG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNlIHRoaXMgdG8gc2V0IGN1c3RvbSBoZWFkZXJz
LCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mgb2JqZWN0cyBhcmUgcGFzc2VkIGFzIGFyZ3Vt
ZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBSZXR1cm5pbmcgZmFsc2UgaW4gdGhlIGJlZm9y
ZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhlIHJlcXVlc3QuIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJlIGNhbGxlZCByZWdhcmRsZXNzIG9mIHRoZSB0
eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAgYmVmb3JlU2VuZD8gKGpxWEhSOiBKUXVlcnlY
SFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBhbnk7XG4gICAgLyoqXG4gICAgICog
SWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNlIHJlcXVlc3RlZCBwYWdlcyBub3QgdG8gYmUg
Y2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBTZXR0aW5nIGNhY2hlIHRvIGZhbHNlIHdpbGwg
b25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQgYW5kIEdFVCByZXF1ZXN0cy4gSXQgd29ya3Mg
YnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwiIHRvIHRoZSBHRVQgcGFyYW1ldGVycy4gVGhl
IHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBvdGhlciB0eXBlcyBvZiByZXF1ZXN0cywgZXhj
ZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRlIHRvIGEgVVJMIHRoYXQgaGFzIGFscmVhZHkg
YmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAgICovXG4gICAgY2FjaGU/OiBib29sZWFuO1xu
ICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3Qg
ZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVycm9yIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQp
LiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdvIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBq
UXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYW5kIGEgc3RyaW5nIGNhdGVnb3Jp
emluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0IChcInN1Y2Nlc3NcIiwgXCJub3Rtb2RpZmll
ZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBcImFib3J0XCIsIG9yIFwicGFyc2VyZXJyb3Jc
IikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21wbGV0ZSBzZXR0aW5nIGNhbiBhY2NlcHQgYW4g
YXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4u
IFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBjb21wbGV0ZT8gKGpxWEhSOiBK
UXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBv
YmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVzc2lvbiBwYWlycyB0aGF0IGRldGVybWluZSBo
b3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3BvbnNlLCBnaXZlbiBpdHMgY29udGVudCB0eXBl
LiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNvbnRlbnRzPzogeyBba2V5OiBz
dHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRpbmcgdG8galF1ZXJ5LmFqYXggc291cmNlIGNv
ZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxsb3dzIGNvbnRlbnRUeXBlIHRvIHNldCB0byBc
ImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVs
eVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAgICAgKiBXaGVuIHNlbmRpbmcgZGF0YSB0byB0
aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5cGUuIERlZmF1bHQgaXMgXCJhcHBsaWNhdGlv
bi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIiwgd2hpY2ggaXMgZmluZSBm
b3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0bHkgcGFzcyBpbiBhIGNvbnRlbnQtdHlwZSB0
byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMgc2VudCB0byB0aGUgc2VydmVyIChldmVuIGlm
IG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1MSHR0cFJlcXVlc3Qgc3BlY2lmaWNhdGlvbiBk
aWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFsd2F5cyBVVEYtODsgc3BlY2lmeWluZyBhbm90
aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhlIGJyb3dzZXIgdG8gY2hhbmdlIHRoZSBlbmNv
ZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlwZT86IGFueTtcbiAgICAvKipcbiAgICAgKiBU
aGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNvbnRleHQgb2YgYWxsIEFqYXgtcmVsYXRlZCBj
YWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250ZXh0IGlzIGFuIG9iamVjdCB0aGF0IHJlcHJl
c2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBpbiB0aGUgY2FsbCAoJC5hamF4U2V0dGluZ3Mg
bWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3NlZCB0byAkLmFqYXgpLlxuICAgICAqL1xuICAg
IGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4gRWFjaCBjb252ZXJ0ZXIncyB2YWx1ZSBpcyBh
IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgb2YgdGhlIHJlc3Bv
bnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNvbnZlcnRlcnM/OiB7IFtr
ZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBJZiB5b3Ugd2lzaCB0byBmb3Jj
ZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2ggYXMgSlNPTlApIG9uIHRoZSBzYW1lIGRvbWFp
biwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFpbiB0byB0cnVlLiBUaGlzIGFsbG93cywgZm9y
IGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0aW9uIHRvIGFub3RoZXIgZG9tYWluLiAodmVy
c2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNyb3NzRG9tYWluPzogYm9vbGVhbjtcbiAg
ICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4gSXQgaXMgY29udmVy
dGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3QgYWxyZWFkeSBhIHN0cmluZy4gSXQncyBhcHBl
bmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVzdHMuIFNlZSBwcm9jZXNzRGF0YSBvcHRpb24g
dG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9jZXNzaW5nLiBPYmplY3QgbXVzdCBiZSBLZXkv
VmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFycmF5LCBqUXVlcnkgc2VyaWFsaXplcyBtdWx0
aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIHRyYWRp
dGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxvdykuXG4gICAgICovXG4gICAgZGF0YT86IGFu
eTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gaGFuZGxlIHRoZSBy
YXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVxdWVzdC5UaGlzIGlzIGEgcHJlLWZpbHRlcmlu
ZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVzcG9uc2UuIFlvdSBzaG91bGQgcmV0dXJuIHRo
ZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGFyZ3VtZW50czogVGhl
IHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciBhbmQgdGhlICdkYXRhVHlwZScgcGFy
YW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0ZXI/IChkYXRhOiBhbnksIHR5OiBhbnkpOiBh
bnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgZGF0YSB0aGF0IHlvdSdyZSBleHBlY3Rp
bmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5vbmUgaXMgc3BlY2lmaWVkLCBqUXVlcnkgd2ls
bCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhlIE1JTUUgdHlwZSBvZiB0aGUgcmVzcG9uc2Ug
KGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBYTUwsIGluIDEuNCBKU09OIHdpbGwgeWllbGQg
YSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNjcmlwdCB3aWxsIGV4ZWN1dGUgdGhlIHNjcmlw
dCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSByZXR1cm5lZCBhcyBhIHN0cmluZykuXG4gICAg
ICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0
byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0
aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVz
dCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgb2Nj
dXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlvbiBvYmplY3QsIGlmIG9uZSBvY2N1cnJlZC4g
UG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IChiZXNpZGVzIG51bGwpIGFy
ZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFib3J0XCIsIGFuZCBcInBhcnNlcmVycm9yXCIu
IFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVycm9yVGhyb3duIHJlY2VpdmVzIHRoZSB0ZXh0
dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVzLCBzdWNoIGFzIFwiTm90IEZvdW5kXCIgb3Ig
XCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGVycm9yIHNl
dHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2ls
bCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhpcyBoYW5kbGVyIGlzIG5vdCBjYWxsZWQgZm9y
IGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3NzLWRvbWFpbiBKU09OUCByZXF1ZXN0cy4gVGhp
cyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGVycm9yPyAoanFYSFI6IEpRdWVyeVhI
UiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRocm93OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoq
XG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGdsb2JhbCBBamF4IGV2ZW50IGhhbmRsZXJzIGZv
ciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlzIHRydWUuIFNldCB0byBmYWxzZSB0byBwcmV2
ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBhamF4U3RhcnQgb3IgYWpheFN0b3AgZnJvbSBi
ZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB2YXJpb3VzIEFqYXgg
RXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
QW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVyIGtleS92YWx1ZSBwYWlycyB0byBzZW5kIGFs
b25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhNTEh0dHBSZXF1ZXN0IHRyYW5zcG9ydC4gVGhl
IGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxIdHRwUmVxdWVzdCBpcyBhbHdheXMgYWRkZWQs
IGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVzdCB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBoZXJl
LiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGluZyBjYW4gYWxzbyBiZSBvdmVyd3JpdHRlbiBm
cm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlc
biAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoq
XG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8gYmUgc3VjY2Vzc2Z1bCBvbmx5IGlmIHRoZSBy
ZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCByZXF1ZXN0LiBUaGlzIGlzIGRvbmUg
YnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQgaGVhZGVyLiBEZWZhdWx0IHZhbHVlIGlzIGZh
bHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBqUXVlcnkgMS40IHRoaXMgdGVjaG5pcXVlIGFs
c28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVkIGJ5IHRoZSBzZXJ2ZXIgdG8gY2F0Y2ggdW5t
b2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlmTW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIC8q
KlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVudmlyb25tZW50IHRvIGJlIHJlY29nbml6ZWQg
YXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5c3RlbSksIGV2ZW4gaWYgalF1ZXJ5IGRvZXMg
bm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRlZmF1bHQuIFRoZSBmb2xsb3dpbmcgcHJvdG9j
b2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBhcyBsb2NhbDogZmlsZSwgKi1leHRlbnNpb24s
IGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNldHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBp
dCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhv
ZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIGlzTG9jYWw/OiBib29sZWFu
O1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGlu
IGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAnY2Fs
bGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGluIHRo
ZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQnfSB3b3VsZCByZXN1bHQgaW4gJ29uSlNPTlBM
b2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBBcyBvZiBqUXVlcnkgMS41LCBzZXR0aW5nIHRo
ZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVudHMgalF1ZXJ5IGZyb20gYWRkaW5nIHRoZSBc
Ij9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJMIG9yIGF0dGVtcHRpbmcgdG8gdXNlIFwiPT9c
IiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCBhbHNvIGV4cGxp
Y2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNldHRpbmcuIEZvciBleGFtcGxlLCB7IGpzb25w
OiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxsYmFja05hbWVcIiB9XG4gICAgICovXG4gICAg
anNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBp
bnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBqUXVl
cnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpRdWVyeSBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1l
IGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1hbmFnZSB0aGUgcmVxdWVzdHMgYW5kIHByb3Zp
ZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGluZy4gWW91IG1heSB3YW50IHRvIHNwZWNpZnkg
dGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8gZW5hYmxlIGJldHRlciBicm93c2VyIGNhY2hp
bmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVlcnkgMS41LCB5b3UgY2FuIGFsc28gdXNlIGEg
ZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgb2YganNv
bnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uLlxu
ICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBtaW1l
IHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1lIHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUu
MSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHBh
c3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBI
VFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xuICAgIHBhc3N3b3Jk
Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGRhdGEgcGFzc2VkIGluIHRv
IHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3QgKHRlY2huaWNhbGx5LCBhbnl0aGluZyBvdGhl
ciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nlc3NlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBh
IHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUgZGVmYXVsdCBjb250ZW50LXR5cGUgXCJhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIi4gSWYgeW91IHdhbnQgdG8gc2VuZCBhIERP
TURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vzc2VkIGRhdGEsIHNldCB0aGlzIG9wdGlvbiB0
byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNzRGF0YT86IGJvb2xlYW47XG4gICAgLyoqXG4g
ICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwic2NyaXB0XCIgdHJhbnNwb3J0IGlzIHVzZWQg
KGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3aXRoIFwianNvbnBcIiBvciBcInNjcmlwdFwi
IGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBTZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSBv
biB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSByZXF1ZXN0LiBVc2VkIHdoZW4gdGhlIGNoYXJh
Y3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgb24g
dGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4gICAgc2NyaXB0Q2hhcnNldD86IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgbnVtZXJpYyBIVFRQIGNvZGVzIGFuZCBmdW5j
dGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlc3BvbnNlIGhhcyB0aGUgY29ycmVzcG9uZGlu
ZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIHRoZSBzdGF0dXMgY29kZSBmdW5j
dGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrOyBp
ZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNsdWRpbmcgM3h4IHJlZGlyZWN0KSwgdGhleSB0
YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIGVycm9yIGNhbGxiYWNrLiAodmVyc2lvbiBh
ZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1c0NvZGU/OiB7IFtrZXk6IHN0cmluZ106IGFu
eTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVx
dWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHRocmVlIGFyZ3VtZW50czog
VGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRv
IHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHN0YXR1czsg
YW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LiBB
cyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkg
b2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMg
aXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBzdWNjZXNzPyAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpOiBhbnk7XG4gICAgLyoqXG4gICAgICog
U2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3IgdGhlIHJlcXVlc3QuIFRoaXMgd2ls
bCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQgc2V0IHdpdGggJC5hamF4U2V0dXAoKS4gVGhl
IHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUgcG9pbnQgdGhlICQuYWpheCBjYWxsIGlzIG1h
ZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMgYXJlIGluIHByb2dyZXNzIGFuZCB0aGUgYnJv
d3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxhYmxlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBy
ZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBjYW4gYmUgc2VudC4gSW4galF1ZXJ5IDEuNC54
IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCB3aWxsIGJlIGluIGFuIGludmFs
aWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMgb3V0OyBhY2Nlc3NpbmcgYW55IG9iamVjdCBt
ZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24uIEluIEZpcmVmb3ggMy4wKyBvbmx5LCBzY3Jp
cHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBiZSBjYW5jZWxsZWQgYnkgYSB0aW1lb3V0OyB0
aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQgYXJyaXZlcyBhZnRlciB0aGUgdGltZW91dCBw
ZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBT
ZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgdHJhZGl0aW9uYWwgc3R5bGUg
b2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAgKi9cbiAgICB0cmFkaXRpb25hbD86IGJvb2xl
YW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgcmVxdWVzdCB0byBtYWtlIChcIlBPU1Rc
IiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdFVFwiLiBOb3RlOiBPdGhlciBIVFRQIHJlcXVl
c3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERFTEVURSwgY2FuIGFsc28gYmUgdXNlZCBoZXJl
LCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMuXG4gICAgICovXG4g
ICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKi9cbiAgICB1cmw/OiBz
dHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2VybmFtZSB0byBiZSB1c2VkIHdpdGggWE1MSHR0
cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVx
dWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBD
YWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4gRGVmYXVsdHMg
dG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFpbGFibGUgKElFKSwgdGhlIFhNTEh0dHBSZXF1
ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlv
biBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBmYWN0b3J5LlxuICAg
ICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgZmllbGRO
YW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9uIHRoZSBuYXRpdmUgWEhSIG9iamVjdC4gRm9y
IGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNldCB3aXRoQ3JlZGVudGlhbHMgdG8gdHJ1ZSBm
b3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5lZWRlZC4gSW4galF1ZXJ5IDEuNSwgdGhlIHdp
dGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90IHByb3BhZ2F0ZWQgdG8gdGhlIG5hdGl2ZSBY
SFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1aXJpbmcgaXQgd291bGQgaWdub3JlIHRoaXMg
ZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNvbW1lbmQgdXNpbmcgalF1ZXJ5IDEuNS4xKyBz
aG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBpdC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxu
ICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xufVxuXG4v
KlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhSIG9iamVjdFxuKi9cbmludGVyZmFjZSBKUXVl
cnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwgSlF1ZXJ5UHJvbWlzZTxhbnk+IHtcbiAgICBv
dmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpOiBhbnk7XG4gICAgYWJvcnQoc3RhdHVz
VGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1
ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUNhbGxiYWNrIHtcbiAgICBhZGQoLi4u
Y2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBkaXNhYmxlKCk6IGFueTtcbiAgICBlbXB0eSgp
OiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6IGFueVtdKTogYW55O1xuICAgIGZpcmVkKCk6
IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFu
eTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJvb2xlYW47XG4gICAgbG9jaygpOiBhbnk7XG4g
ICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVtb3ZlKC4uLmNhbGxiYWNrczogYW55W10pOiBh
bnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVyeSBQcm9taXNlcyB0byBpbnRlcm9wIHdpdGgg
bm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVyZmFjZSBKUXVlcnlHZW5lcmljUHJvbWlzZTxU
PiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAo
cmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWpl
Y3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0
aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFzb246IGFu
eSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtc
biAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+
KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0
aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAg
YWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBk
b25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCgu
Li5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4u
LnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgYWx3YXlz
KC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUo
Li4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4u
ZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4u
LnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICAvLyBE
ZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xuICAgIHBpcGUoZG9uZUZpbHRlcj86ICh4OiBh
bnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgcHJvZ3Jlc3NGaWx0ZXI/
OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5cbiAgICB0aGVuPFU+KG9u
RnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkg
PT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBv
blByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlz
ZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86
ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jl
c3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVl
cnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVzZSBKUXVlcnkgUHJvbWlzZXMgU3Vja1xuICAg
IHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAo
Li4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFu
eVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAo
Li4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9
PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjog
YW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6
ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/
OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dy
ZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtc
bn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgZGVmZXJyZWQsIHBhcnQgb2Yg
Y2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeURlZmVycmVkPFQ+IGV4dGVuZHMgSlF1ZXJ5
UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBh
bHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBk
b25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwo
Li4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3Mo
Li4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgYWx3
YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBk
b25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFp
bCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dy
ZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4g
ICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgbm90aWZ5
V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5c
biAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZWpl
Y3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
blxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZSgu
Li5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlc29sdmVXaXRoKGNvbnRl
eHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBzdGF0ZSgp
OiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8VD47
XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRoZSBKUXVlcnkgZXh0ZW5zaW9uIG9mIHRoZSBX
M0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZhY2UgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IGV4
dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtcbiAgICBkZWxlZ2F0ZVRhcmdldDogRWxlbWVu
dDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbjtcbiAgICBpc0ltbWVkaWF0ZVBy
b3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkKCk6
IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgcHJldmVudERlZmF1bHQoKTog
YW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgcmVzdWx0OiBhbnk7XG4gICAg
c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uKCk6
IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVyO1xuICAgIHdoaWNo
OiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUlu
cHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAgIGFsdEtl
eTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29sZWFuO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47
XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgYnV0dG9uOiBudW1i
ZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVudFk6IG51bWJlcjtcbiAgICBvZmZz
ZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4g
ICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5YOiBudW1iZXI7XG4gICAgc2NyZWVuWTogbnVt
YmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5RXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJ
bnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBhbnk7XG4gICAgY2hhckNvZGU6IG51bWJlcjtc
biAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVl
cnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAg
ICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5RXZl
bnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QsIEpRdWVyeUlucHV0RXZlbnRP
YmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QsIEpRdWVyeUtleUV2ZW50T2JqZWN0LCBKUXVl
cnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxuLypcbiAgICBDb2xsZWN0aW9uIG9mIHByb3Bl
cnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3NlclxuKi9cblxuaW50ZXJmYWNlIEpRdWVyeVN1cHBv
cnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAgIGJveE1vZGVsPzogYm9vbGVhbjtcbiAgICBj
aGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBjaGVja0Nsb25lPzogYm9vbGVhbjtcbiAgICBj
aGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzogYm9vbGVhbjtcbiAgICBjc3NGbG9hdD86IGJv
b2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBib29sZWFuO1xuICAgIGh0bWxTZXJpYWxpemU/
OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNwYWNlPzogYm9vbGVhbjtcbiAgICBub0Nsb25l
Q2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9uZUV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGFj
aXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxlZD86IGJvb2xlYW47XG4gICAgb3B0U2VsZWN0
ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/ICgpOiBib29sZWFuO1xuICAgIHN0eWxlPzog
Ym9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzogYm9vbGVhbjtcbiAgICB0Ym9keT86IGJvb2xl
YW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJhbSB7XG4gICAgKG9iajogYW55KTogc3RyaW5n
O1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6IGJvb2xlYW4pOiBzdHJpbmc7XG59XG5cbi8q
KlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNvbnN0cnVjdCBqUXVlcnkgZXZlbnRzICh3aXRo
ICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgaW5saW5l
IGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICogb3ZlcnJpZGluZyB0aGUgY29uc3RydWN0aW9u
IGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5nc1xuICogcmV0dXJuaW5nIHNwZWNpZmljIGV2
ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFdmVudENvbnN0cnVjdG9yIHtcbiAg
ICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVj
dDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5
RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIHNwZWNpZnkg
ZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUVhc2luZyB7XG4gICAgbGlu
ZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBzd2luZyhwOiBudW1iZXIpOiBudW1iZXI7XG59
XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2YgalF1ZXJ5ICh0aG9zZSBvbiAkIGFuZCBqUXVl
cnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5U3RhdGljIHtcblxuICAgIC8qKlxu
ICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQg
Y29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEg
ZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAg
ICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHNldHRpbmdz
IEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0
LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55
IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheCh1cmw6IHN0cmlu
Zywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipc
biAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0
aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9j
ZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVR5cGVzIEFuIG9w
dGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBkYXRh
VHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFs
dWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVy
KGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAob3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpR
dWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogdm9pZDtcbiAgICAv
KipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcg
b3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBw
cm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhh
bmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAg
ICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0
czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xu
XG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3M7XG5cbiAgICAgLyoqXG4gICAg
ICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuIEl0cyB1c2Ug
aXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxuICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBIHNl
dCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIGRlZmF1bHQgQWpheCByZXF1
ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwuXG4gICAgICAqL1xuICAgIGFqYXhTZXR1cChv
cHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogTG9h
ZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBA
cGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIu
IERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCku
XG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4
dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3Ry
aW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2
ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBB
IHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5c
biAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50
IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJv
bSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3Jp
cHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVj
dCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAg
ICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRv
IHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBv
YmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVl
c3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4
ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBU
aGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxs
aWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBn
ZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJp
bmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRo
YXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0
SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAq
IExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8g
dGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5c
biAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNz
PzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBh
bnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBhIEphdmFTY3JpcHQgZmlsZSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LCB0aGVuIGV4ZWN1dGUgaXQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0
byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5c
biAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoc2NyaXB0OiBz
dHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1
ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBhcmFtO1xuXG4gICAgLyoqXG4gICAgICogTG9h
ZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2gg
dGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1
bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVk
IGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxu
ICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhl
IHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0
ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5n
IHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBh
cmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNh
biBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUg
b2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1
ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1
cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0
dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6
IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVz
aW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8g
dGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4g
UmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0
IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQg
ZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBz
Y3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/
OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhS
OiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG5cbiAg
ICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2UgY2FsbGJhY2tzIGxpc3Qgb2JqZWN0IHRoYXQg
cHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFuYWdlIGNhbGxiYWNrIGxpc3RzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVk
IGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzLlxuICAgICAq
L1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmluZyk6IEpRdWVyeUNhbGxiYWNrO1xuXG4gICAg
LyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMgdGhlIGV4ZWN1dGlvbiBvZiBqUXVlcnkncyBy
ZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBob2xkIEluZGljYXRlcyB3aGV0aGVy
IHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVlc3RlZCBvciByZWxlYXNlZFxuICAgICAqL1xu
ICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTogdm9pZDtcblxuICAgIChzZWxlY3Rvcjogc3Ry
aW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIChlbGVtZW50OiBFbGVtZW50KTogSlF1
ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5O1xuICAgIChlbGVtZW50QXJyYXk6IEVsZW1l
bnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgKGZ1bmM6
IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJheTogYW55W10pOiBKUXVlcnk7XG4gICAgKCk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbGlucXVpc2ggalF1ZXJ5J3MgY29udHJvbCBv
ZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW1vdmVBbGwgQSBCb29s
ZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1vdmUgYWxsIGpRdWVyeSB2YXJpYWJsZXMgZnJv
bSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcgalF1ZXJ5IGl0c2VsZikuXG4gICAgICovXG4g
ICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29sZWFuKTogT2JqZWN0O1xuXG4gICAgLyoqXG4g
ICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQg
b24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVw
cmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJy
ZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2Jq
ZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMg
YSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUg
b2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJv
bm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3Jl
IERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9c
biAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAv
KipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBi
YXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhh
dCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBk
ZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlw
dCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBhbnlbXSk6IEpR
dWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29rczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07
XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSBhcmJpdHJhcnkg
ZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBlbGVtZW50LiBSZXR1cm5zIHRoZSB2
YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9N
IGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBB
IHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB2
YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAgICovXG4gICAgZGF0YTxUPihlbGVtZW50OiBF
bGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBUO1xuICAgIC8qKlxuICAgICAqIFJldHVy
bnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBq
UXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUg
Zm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBl
bGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBz
dHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKi9cbiAgICBkYXRh
KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFJl
dHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBi
eSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3Rv
cmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERP
TSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGEo
ZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAgIGRlcXVldWUoZWxlbWVudDogRWxlbWVudCwg
cXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4gICAgaGFzRGF0YShlbGVtZW50OiBFbGVtZW50
KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0
cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3Ry
aW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEo
ZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVy
cmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3RhcnQ/OiAoZGVmZXJyZWQ6IEpRdWVyeURlZmVy
cmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIC8vIEVmZmVjdHNcbiAg
ICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRlcnZhbDogbnVtYmVyOyBzdG9wOiAoKSA9PiB2
b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBmYXN0OiBudW1iZXI7IH07IG9mZjogYm9vbGVh
bjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZlbnRzXG4gICAgcHJveHkoZm46ICguLi5hcmdz
OiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAg
IHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IGFueTtc
blxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0cnVjdG9yO1xuXG4gICAgLy8gSW50ZXJuYWxz
XG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91
c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55OyAgLy9UT0RPOiBEZWNpZGUgaG93IHdlIHdh
bnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTogYm9vbGVhbjtcblxuICAgIC8vIFByb3BlcnRp
ZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0O1xuXG4gICAgLy8gVXRpbGl0aWVzXG4gICAg
Y29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBjb250YWluZWQ6IEVsZW1lbnQpOiBib29sZWFu
O1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBh
bnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFueSk6IGFueTtcbiAgICBlYWNoKGNvbGxlY3Rp
b246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1l
bnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaDxUPihjb2xsZWN0aW9uOiBU
W10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBUKSA9
PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFyZ2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTog
YW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFuLCB0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55
W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNvZGU6IHN0cmluZyk6IGFueTtcblxuICAgIGdy
ZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6
IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0PzogYm9vbGVhbik6IFRbXTtcblxuICAgIGluQXJy
YXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZyb21JbmRleD86IG51bWJlcik6IG51bWJlcjtc
blxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRW1wdHlPYmplY3Qob2Jq
OiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFuO1xuICAg
IGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICBpc1BsYWluT2JqZWN0KG9iajog
YW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNY
TUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5cbiAgICBtYWtlQXJyYXkob2JqOiBhbnkpOiBh
bnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTogVFtdLCBjYWxsYmFjazogKGVsZW1lbnRPZkFy
cmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gVSk6IFVbXTtcbiAgICBtYXAoYXJyYXk6
IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogYW55LCBpbmRleEluQXJyYXk6IGFueSkg
PT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBUW10pOiBU
W107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtdLCBzZWNvbmQ6IFVbXSk6IGFueVtdO1xuXG4g
ICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTogbnVtYmVyO1xuXG4gICAgcGFyc2VKU09OKGpz
b246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRv
IGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhYSB3ZWxsLWZvcm1l
ZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqL1xuICAgIHBhcnNlWE1MKGRhdGE6IHN0
cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVO
YW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIHRyaW0oc3RyOiBz
dHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9iajogYW55KTogc3RyaW5nO1xuXG4gICAgdW5p
cXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmlu
ZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRh
IEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqIEBwYXJhbSBjb250ZXh0IERPTSBlbGVt
ZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBIVE1MIGZyYWdtZW50IHdp
bGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBrZWVwU2NyaXB0cyBBIEJvb2xlYW4gaW5kaWNh
dGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIEhUTUwgc3RyaW5n
XG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6IHN0cmluZywgY29udGV4dD86IEhUTUxFbGVt
ZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBhbnlbXTtcblxuICAgIEFuaW1hdGlvbihlbGVt
OiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogYW55KTogYW55O1xuXG4gICAgZWFzaW5n
OiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAgVGhlIGpRdWVyeSBpbnN0YW5jZSBtZW1iZXJz
XG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAgLy8gQUpBWFxuICAgIGFqYXhDb21wbGV0ZSho
YW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheEVycm9yKGhhbmRsZXI6IChldmVudDogYW55
LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0
aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdGFy
dChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0b3AoaGFuZGxlcjogKCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNjZXNzKGhhbmRsZXI6IChldmVudDogYW55LCBq
cVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0YT86IGFueSwgY29tcGxldGU/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3RyaW5nO1xuICAgIHNlcmlhbGl6ZUFycmF5KCk6
IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIGFkZENsYXNzKGNsYXNzTmFtZXM6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY3VycmVudENs
YXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5
LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
blxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAgIGF0dHIoYXR0
cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIoYXR0cmli
dXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgYXR0cjogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpRdWVyeTtcblxuICAgIGhhc0NsYXNzKGNsYXNz
TmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAgIGh0bWwoKTogc3RyaW5nO1xuICAgIGh0bWwo
aHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwoaHRtbENvbnRlbnQ6IChpbmRl
eDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1s
KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6
IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5
O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0
cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFByb3BlcnR5VmFsdWU6IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcmVt
b3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9n
Z2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAg
ICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Mo
ZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBzd3RjaDogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4g
ICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBudW1iZXIpOiBK
UXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHN0eWxlIHByb3BlcnRp
ZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkuXG4gICAg
ICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAgIC8qKlxuICAg
ICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9w
ZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHBy
b3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3Bl
cnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFs
dWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3Ry
aW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9w
ZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZh
bHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHBy
b3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyW10pOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNo
ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHBy
b3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRo
ZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhl
IGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFs
dWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywg
dmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUg
c2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlO
YW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24g
cmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4g
UmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5k
IHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5h
bWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSA9PiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0
aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJvcGVydHktdmFsdWUgcGFpcnMgdG8gc2V0Llxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBPYmplY3QpOiBKUXVlcnk7XG5cbiAgICBoZWln
aHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIGhl
aWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhlaWdodChmdW5jOiAoaW5kZXg6IGFu
eSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGlubmVySGVpZ2h0KCk6IG51
bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgaW5u
ZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJXaWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5
O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgfTtcbiAgICBv
ZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVyeTtcbiAgICBvZmZzZXQoZnVuYzogKGluZGV4
OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBvdXRlckhlaWdodChp
bmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlckhlaWdodCh2YWx1ZTog
bnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIG91dGVyV2lk
dGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJXaWR0aCh2YWx1
ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHBvc2l0
aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgfTtcblxuICAgIHNjcm9sbExlZnQo
KTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAg
IHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIpOiBKUXVl
cnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4gICAgd2lkdGgodmFsdWU6IG51bWJlcik6IEpR
dWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHdpZHRoKGZ1bmM6
IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGF0
YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZGF0
YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBkYXRhKG9iajogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgZGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7
XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92
ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAg
cHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5c
biAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzog
YW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGll
czogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjb21wbGV0ZT86IEZ1bmN0
aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBvcHRpb25zOiB7IGR1
cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7IGNvbXBsZXRlPzogRnVuY3Rpb247IHN0ZXA/
OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBzcGVjaWFsRWFzaW5nPzogYW55OyB9KTogSlF1
ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51bWJlciwgcXVldWVOYW1lPzogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlT3V0KGR1cmF0aW9uPzogYW55LCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvKGR1cmF0aW9uOiBh
bnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRv
KGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2lu
Zz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmaW5pc2goKTogSlF1
ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7
XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFu
eSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTog
SlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVG9nZ2xlKGR1
cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVRvZ2dsZShk
dXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
blxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
ICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/
OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3AocXVldWU/OiBhbnksIGNsZWFyUXVldWU/OiBi
b29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlKGR1cmF0
aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoZHVyYXRpb24/
OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9n
Z2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICAvLyBFdmVudHNcbiAgICBi
aW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmluZChldmVu
dFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnksIHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBK
UXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgcHJldmVudEJ1YmJsZTogYm9vbGVh
bik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50czogYW55W10pOiBKUXVlcnk7XG5cbiAgICBi
bHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBj
aGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgY2xpY2soaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRibGNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNrKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soZXZlbnREYXRh
PzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJp
bmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZm9jdXNcIiBldmVudCBvbiBh
biBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhldmVudERhdGE/OiBhbnks
IGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChldmVudERhdGE6
IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCB0d28gaGFuZGxlcnMgdG8gdGhlIG1h
dGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50
ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMg
dGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXJPdXQgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhIHNpbmdsZSBoYW5kbGVyIHRvIHRoZSBt
YXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVu
dGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRl
cnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbk91
dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5ZG93blwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlkb3duKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGtleWRvd25cIlwiIEph
dmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlkb3duKGV2ZW50RGF0YT86
IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5cHJlc3NcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXByZXNzKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmln
Z2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXl1
cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBK
UXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5n
IGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIg
SmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5k
bGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VlbnRl
clwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcigpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdo
ZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbGVhdmVcIiBldmVudCBvbiBh
biBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBs
ZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAg
ICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2
YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0
IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVy
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdXRcIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlb3V0KCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91
c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZXVwXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxu
ICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2
ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVz
dCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9y
IFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2gg
c2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRh
Y2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1
bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNp
YWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rv
cj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVk
IGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMs
IHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5c
Ii5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBh
dHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAg
ICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUg
YW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0
IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJh
dGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyBy
ZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2
ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBt
YXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2
ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHsgW2tleTogc3RyaW5nXTog
YW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0
dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8g
dGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUg
b3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFj
ZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9y
IGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuIFJlc3QgcGFyYW1ldGVy
IGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRlcnMgcGFzc2VkIHRvIGpRdWVyeS50cmlnZ2Vy
KCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgb24gdGhlIGV2ZW50IGhhbmRsZXIg
ZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0aW9uYWwgKD8gc3ludGF4KS5cbiAgICAgKi9c
biAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRz
IHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAg
KiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5k
YW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYg
dGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmln
Z2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEg
ZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24o
ZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRh
Y2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRo
ZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9y
IG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2Vz
LCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFy
YW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBv
ZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNl
bGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQg
d2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRh
IERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFs
c28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2Vz
IHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6
IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0
aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVu
dCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50
IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAg
KiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5k
YW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIu
IElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5
cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBw
YXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEg
d2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiB7IFtrZXk6IHN0
cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnksIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVu
dHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIg
ZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFp
bmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tc
IiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFu
ZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9y
IG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJt
aXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBwYXJhbSBkYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJp
bmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0
byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBt
b3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0
aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2lu
XCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0
aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUg
ZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBh
bHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRo
YW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAq
L1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhl
IGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0
eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBl
bGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBv
ciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMg
dGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNz
ZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxu
ICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTog
YW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZv
ciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIg
ZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4g
b2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3Bh
Y2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhl
IHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhl
IGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBm
aWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwg
Y2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVs
ZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRs
ZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbmUo
ZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcsIGRhdGE/
OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIERPTSBpcyByZWFk
eS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVyOiBGdW5jdGlvbik6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVzaXplXCIgZXZlbnQgb24gYW4gZWxlbWVudC5c
biAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGV2ZW50RGF0YTogT2JqZWN0LCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNjcm9sbFwiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChldmVudERhdGE6IE9i
amVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzZWxlY3RcIiBldmVudCBv
biBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNlbGVjdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3QoZXZlbnRE
YXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic3VibWl0XCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
c3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0
YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2
ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChl
dmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5l
eHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHRyaWdnZXIoZXZlbnQ6IEpRdWVy
eUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlckhhbmRsZXIoZXZlbnRUeXBlOiBz
dHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55W10pOiBPYmplY3Q7XG5cbiAgICB1bmJpbmQo
ZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuYmluZChldmVudFR5cGU6IHN0cmluZywgZmxz
OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmluZChldnQ6IGFueSk6IEpRdWVyeTtcblxuICAg
IHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZl
bnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudHM6
IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKG5hbWVzcGFjZTogc3RyaW5nKTogSlF1ZXJ5
O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
Ly8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxlbWVudDtcbiAgICBqcXVlcnk6IHN0cmluZztc
blxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVudERhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcHVzaFN0
YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFu
eVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWFuaXB1
bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYWZ0ZXIo
ZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZCguLi5jb250
ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYmVmb3Jl
KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9uZSh3aXRoRGF0
YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4pOiBK
UXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBlbXB0
eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRlcih0YXJnZXQ6IGFueSk6IEpRdWVyeTtcbiAg
ICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kKC4uLmNv
bnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHByZXBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0
bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVuZFRvKHRhcmdldDogYW55KTog
SlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVw
bGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlcGxhY2VXaXRoKGZ1bmM6IGFu
eSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3RyaW5nO1xuICAgIHRleHQodGV4dFN0cmluZzog
YW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0cmluZzogKGluZGV4OiBudW1iZXIsIHRleHQ6
IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9BcnJheSgpOiBhbnlbXTtcblxu
ICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3cmFwKHdyYXBwaW5nRWxlbWVudDogYW55KTog
SlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwSW5u
ZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3JhcElubmVyKGZ1bmM6IChp
bmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAg
ZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTogRWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55O1xuXG4gICAgaW5kZXgoKTogbnVtYmVyO1xu
ICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBudW1iZXI7XG4gICAgaW5kZXgoZWxlbWVudDog
YW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAgIGxlbmd0aDogbnVtYmVyO1xu
ICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbiAgICBbeDogbnVt
YmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBUcmF2ZXJzaW5nXG4gICAgYWRkKHNlbGVjdG9y
OiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgYWRkKC4uLmVsZW1lbnRzOiBh
bnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZChv
Ymo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNoaWxkcmVuKHNlbGVjdG9yPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGNsb3Nl
c3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgY2xv
c2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KGVsZW1lbnQ6IGFueSk6IEpR
dWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczogYW55LCBjb250ZXh0PzogRWxlbWVudCk6IGFu
eVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5O1xuXG4gICAgZW5kKCk6IEpRdWVyeTtcblxu
ICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBmaWx0ZXIoc2VsZWN0b3I6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihvYmo6
IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtc
biAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaW5kKG9iajogSlF1ZXJ5KTog
SlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5O1xuXG4gICAgaGFzKHNlbGVjdG9yOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5lZDogRWxlbWVudCk6IEpRdWVyeTtcblxuICAg
IGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGlzKGZ1bmM6IChpbmRleDogYW55
KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW47XG4gICAg
aXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4gICAgbGFzdCgpOiBKUXVlcnk7XG5cbiAgICBt
YXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21FbGVtZW50OiBFbGVtZW50KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4
dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5leHRVbnRpbChzZWxlY3Rv
cj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChlbGVt
ZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChv
Ymo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIG5vdChzZWxlY3Rv
cjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgbm90KG9iajogSlF1
ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFyZW50KCk6IEpRdWVyeTtcblxuICAgIHBhcmVu
dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHMoc2VsZWN0b3I/OiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzVW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZp
bHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJlbnRzVW50aWwoZWxlbWVudD86IEVsZW1l
bnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJlbnRzVW50aWwob2JqPzogSlF1
ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2KHNlbGVjdG9yPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
c2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgLy8gVXRp
bGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1
ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG4g
ICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG59XG5kZWNsYXJlIG1v
ZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQgPSAkO1xufVxuZGVjbGFyZSB2YXIgalF1ZXJ5
OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAkOiBKUXVlcnlTdGF0aWM7XG4vLyBsaWJzL2Fu
Z3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRlZmluaXRpb25zIGZvciBBbmd1bGFyIEpTIDEu
MFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJqcy5vcmdcbi8vIERlZmluaXRpb25zIGJ5OiBE
aWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20vZGllZ292aWxhcj5cbi8vIERlZmluaXRpb25z
OiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkXG5cblxuXG5k
ZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxhclN0YXRpYztcblxuLy8gU3VwcG9ydCBmb3Ig
cGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25cbmludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAg
JGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbmcgbW9k
dWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZGVjbGFyZSBtb2R1bGUg
bmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJvdmlkZXJzIGV4dGVuZCB0aGlzIGludGVyZmFj
ZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgJGdldDogYW55O1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuZ3VsYXJTdGF0aWNcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGlcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJTdGF0aWMge1xuICAgICAgICBiaW5kKGNvbnRl
eHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSk6IEZ1bmN0aW9uO1xuICAgICAg
ICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmpl
Y3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBKUXVlcnksIG1vZHVsZXM/
OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1l
bnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAg
ICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3VtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRv
LklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNvcHkoc291cmNlOiBhbnksIGRlc3RpbmF0aW9u
PzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50OiBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljO1xu
ICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZhbHVlMjogYW55KTogYm9vbGVhbjtcbiAgICAg
ICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4uLnNvdXJjZXM6IGFueVtdKTogYW55O1xuICAg
ICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRvcjogKHZhbHVlOiBhbnksIGtleTogYW55KSA9
PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4gICAgICAgIGZyb21Kc29uKGpzb246IHN0cmlu
Zyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJnPzogYW55KTogYW55O1xuICAgICAgICBpbmpl
Y3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGlz
QXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGF0ZSh2YWx1ZTogYW55KTog
Ym9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRnVuY3Rpb24odmFs
dWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFu
O1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNTdHJp
bmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzVW5kZWZpbmVkKHZhbHVlOiBhbnkp
OiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAg
ICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFyIGFwcGxpY2F0aW9uXG5cdFx0b2ZmaWNpYWwg
ZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmluZyBhbmd1bGFyIG1vZHVsZXMuXG5cdFx0c2Vl
OiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuXHRcdCovXG4g
ICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIHlvdXIgbW9kdWxlIHlvdSB3
YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAg
LyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBlbmRzIG9uICovXG4gICAgICAgICAgICByZXF1
aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAgY29uZmlnRnVuY3Rpb24/OiBhbnkpOiBJTW9k
dWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAgdG9Kc29u
KG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTogc3RyaW5nO1xuICAgICAgICB1cHBlcmNhc2Uo
c3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgIGZ1
bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9yOiBudW1iZXI7XG4gICAgICAgICAgICBtaW5v
cjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBudW1iZXI7XG4gICAgICAgICAgICBjb2RlbmFt
ZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9h
bmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTW9k
dWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmluZywgYW5pbWF0aW9uRmFjdG9yeTog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBpbmxp
bmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBhbmltYXRpb24o
b2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5n
IHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5l
ZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBj
b25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3Vy
ZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29y
ayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9c
biAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4g
ICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgY29udHJv
bGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9k
dWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29u
c3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihvYmplY3QgOiBP
YmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3Rp
dmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBz
dHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAg
IGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFt
ZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4g
ICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtc
biAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeUZ1bmN0aW9uOiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90
YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVBy
b3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIo
bmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxl
O1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHJ1
bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHJ1
bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2
aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3Rv
cjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG9iamVjdDogT2JqZWN0KTogSU1v
ZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtc
biAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuXG4gICAgICAgIC8vIFBy
b3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICByZXF1aXJlczogc3RyaW5n
W107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQXR0cmlidXRlc1xu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZS5kaXJl
Y3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
QXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gYWNjZXNz
IHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBub3QgdmVyeSBlbGVnYW50XG5cdC8vIGJlY2F1
c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28nXSBpbnN0ZWFkIG9mIGF0dHJzLmZvbyBidXQg
SSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxuXHQvLyB0aGlzIHNob3VsZCByZWFsbHkgYmUg
bGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBpdCBjcmVhdGVzIHRoaXMgcHJvYmxlbTogaHR0
cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4NTQvMTY1NjU2XG5cdFtuYW1lOiBzdHJpbmdd
OiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBi
eSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRoZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBh
bmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVk
XG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRkaXRpb24uXG4gICAgICAgICRhZGRDbGFzcyhj
bGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBSZW1vdmVzIHRoZSBDU1MgY2xh
c3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgZnJvbSB0aGVcbiAg
ICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1h
dGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAgICAgICAgLy8gdGhlIGNsYXNzIHJlbW92YWwu
XG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAgICAg
ICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRlIHZhbHVlLlxuICAgICAgICAkc2V0KGtleTog
c3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAvLyBPYnNlcnZlcyBhbiBpbnRl
cnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAvLyBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2ls
bCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBuZXh0ICRkaWdlc3RcbiAgICAgICAgLy8gZm9s
bG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVy
IHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQgdmFsdWUgY2hhbmdlcy5cbiAgICAgICAgJG9i
c2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/OmFueSk9PmFueSk6IEZ1bmN0aW9uO1xuXG4g
ICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9y
bWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxuICAgICAgICAvLyB0byBkbyByZXZlcnNlIGxv
b2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNrIHRvIGFjdHVhbCBuYW1lLlxuICAgICAgICAk
YXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZv
cm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVh
bjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4g
ICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAg
JGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAg
ICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtc
biAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4gICAgICAgICRzZXRQcmlzdGluZSgpOiB2b2lk
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE5nTW9kZWxDb250cm9s
bGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2
ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7XG4gICAgICAgICRyZW5kZXIoKTogdm9pZDtc
biAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktleTogc3RyaW5nLCBpc1ZhbGlk
OiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdmlld1Zh
bHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3RyaW5nIGJ1dCBvdGhlclxuICAgICAgICAvLyB0
eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0byB1c2UgdGhlbS5cbiAgICAgICAgJHNldFZp
ZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAgICAgICAgJHZpZXdWYWx1ZTogYW55O1xuXG4g
ICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAgICAgICAgJHBhcnNlcnM6IElNb2RlbFBhcnNl
cltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1vZGVsRm9ybWF0dGVyW107XG4gICAgICAgICRl
cnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTog
Ym9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9v
bGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsUGFyc2VyIHtcbiAgICAgICAgKHZh
bHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbEZvcm1hdHRlciB7
XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5KCk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4
cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiAoc2NvcGU6IElTY29wZSkgPT4g
YW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNhc3QobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBh
bnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAgICRkZXN0cm95KCk6IHZvaWQ7XG4gICAgICAg
ICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVtaXQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBh
bnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4
cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAg
ICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcsIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG4gICAg
ICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGFyZ3M/OiBPYmpl
Y3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25h
bCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbEFz
eW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVz
c2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gRGVmYXVs
dHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0aW9uIGNoZWNraW5nIHN0cmF0ZWd5XG4gICAg
ICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJU2NvcGU7XG5cbiAgICAgICAgJG9uKG5hbWU6
IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFuZ3VsYXJFdmVudCwgLi4uYXJnczogYW55W10p
ID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0
cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0
aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzog
KG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2Jq
ZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4
cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogc3RyaW5nLCBvYmpl
Y3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhw
cmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFu
eSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86
IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhw
cmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnks
IHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2hDb2xsZWN0
aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI6IChu
ZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5j
dGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2NvcGU7XG5cbiAgICAgICAgJGlkOiBudW1iZXI7
XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNcbiAgICAgICAgJCRpc29sYXRlQmluZGluZ3M6
IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5n
dWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2NvcGU6IElTY29wZTtcbiAgICAgICAgY3VycmVu
dFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcHJldmVudERl
ZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4g
ICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50cyB0aGF0IHdlcmUgJGVtaXQtdGVkXG4gICAg
ICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRzIFdpbmRvdyB7fVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZpY2VcbiAgICAvLyBUT0RPIHVuZG9jdW1lbnRl
ZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgc291cmNlIGNvZGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJyb3dzZXJTZXJ2aWNlIHt9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGltZW91dFxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rp
b24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+
O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJ2YWxTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnZhbFxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJ2YWxTZXJ2aWNlIHtcbiAgICAg
ICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyLCBjb3VudD86IG51bWJlciwgaW52b2tl
QXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6
IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAgICAobmFtZTogc3RyaW5nKTogRnVuY3Rpb247
XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNl
UHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3Rvcnk6
IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAgICBpZDogc3RyaW5nO1xuXG4gICAgICAgIC8v
IFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICAvLyBDaGVjayBhbmd1bGFyJ3MgaTE4
biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAgTlVNQkVSX0ZPUk1BVFM6IElMb2NhbGVOdW1i
ZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBEQVRFVElNRV9GT1JNQVRTOiBJTG9jYWxlRGF0
ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBwbHVyYWxDYXQ6IChudW06IGFueSkgPT4g
c3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3Jp
cHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBzdHJpbmc7XG4gICAgICAgIEdST1VQX1NFUDog
c3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9y
W107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3Ige1xuICAgICAgICBtaW5JbnQ6IG51bWJl
cjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xuICAgICAgICBtYXhGcmFjOiBudW1iZXI7XG4g
ICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAgICBwb3NTdWY6IHN0cmluZztcbiAgICAgICAg
bmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1Zjogc3RyaW5nO1xuICAgICAgICBnU2l6ZTog
bnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIE1PTlRIOiBzdHJpbmdb
XTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5nW107XG4gICAgICAgIERBWTogc3RyaW5nW107
XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtcbiAgICAgICAgQU1QTVM6IHN0cmluZ1tdO1xu
ICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAgICAgc2hvcnQ6IHN0cmluZztcbiAgICAgICAg
ZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9uZ0RhdGU6IHN0cmluZztcbiAgICAgICAgbWVk
aXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9ydERhdGU6IHN0cmluZztcbiAgICAgICAgbWVk
aXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9ydFRpbWU6IHN0cmluZztcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xuICAgICAgICBkZWJ1ZzogSUxvZ0NhbGw7XG4g
ICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAgICAgaW5mbzogSUxvZ0NhbGw7XG4gICAgICAg
IGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46IElMb2dDYWxsO1xuICAgIH1cblxuICAgIC8v
IFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGludGVyZmFjZSBzbyB3ZSBjYW4gcmVvcGVuIGl0
IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sgbW9kdWxlLlxuICAgIGludGVyZmFjZSBJTG9n
Q2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJzZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtcbiAgICAgICAgKGV4cHJlc3Npb246IHN0cmlu
Zyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxl
ZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4dDogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7
XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90IHByb3ZpZGVkLCB1bmRlZmluZWQgaXMgZ29u
bmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb25cbiAgICAgICAgLy8gZG9lcyBub3Qg
Y2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9yY2UgYSB2YWx1ZSBmb3IgY29uc2lzdGVuY3ku
IElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50cyB0byB1bmRlZmluZSBpdCwgcGFzcyB0aGUg
dW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4gICAgICAgIGFzc2lnbihjb250ZXh0OiBhbnks
IHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4kbG9jYXRpb25cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uU2VydmljZSB7XG4gICAgICAgIGFic1VybCgp
OiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3RyaW5nO1xuICAgICAgICBoYXNoKG5ld0hhc2g6
IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIGhvc3QoKTogc3RyaW5nO1xuICAg
ICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAgcGF0aChuZXdQYXRoOiBzdHJpbmcpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6IG51bWJlcjtcbiAgICAgICAgcHJvdG9jb2wo
KTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAg
IHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXJzTWFwOiBhbnkpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyOiBzdHJpbmcsIHBhcmFtZXRl
clZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICB1cmwoKTogc3RyaW5nO1xu
ICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztcbiAgICAgICAgaGFzaFByZWZpeChwcmVmaXg6
IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgICAgICBodG1sNU1vZGUoKTogYm9vbGVh
bjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IHBhcmFtZXRlciBpcyBz
dHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiB0ZXN0cyBpdCBhcyBib29sZWFu
LCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAgICAgIC8vIHNpbmNlIHRoaXMgaXMgYSB0b2dn
bGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6IGJvb2xlYW4pOiBJTG9jYXRpb25Qcm92aWRl
cjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEb2N1bWVudFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGRvY3VtZW50
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElEb2N1bWVudFNlcnZpY2Ug
ZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRXhj
ZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlIHtcbiAgICAgICAgKGV4Y2VwdGlvbjog
RXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNlcnZpY2UgZXh0ZW5kcyBKUXVlcnkge31cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFFTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRxXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAgICAgIGFsbChwcm9taXNlczogSVByb21pc2U8
YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAgICAgICBkZWZlcjxUPigpOiBJRGVmZXJyZWQ8
VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiBJUHJvbWlzZTx2b2lkPjtcbiAgICAg
ICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNlPFQ+O1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAo
cHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/
OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4g
YW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0Nh
bGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxs
YmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55
KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNj
ZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/
OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkp
ID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuXG5cbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4o
b25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJSHR0cFByb21pc2U8VFJlc3VsdD4pOiBJUHJv
bWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNv
bjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAg
ICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQpOiBJ
UHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBmaW5hbGx5PFRSZXN1bHQ+KGZpbmFsbHlDYWxs
YmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29sdmUodmFsdWU/OiBUKTogdm9pZDtcbiAgICAg
ICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7XG4gICAgICAgIG5vdGlmeShzdGF0ZT86YW55
KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9yU2Nyb2xsU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kYW5jaG9yU2Nyb2xsXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmNob3JTY3JvbGxTZXJ2aWNlIHtcbiAgICAg
ICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmNob3JTY3JvbGxQcm92aWRl
ciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXNhYmxlQXV0b1Njcm9sbGlu
ZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENhY2hl
RmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
Q2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAgIC8vIExldHMgbm90IGZvY2UgdGhlIG9wdGlv
bnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVtYmVyLiBFdmVuIHRob3VnaFxuICAgICAgICAv
LyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRlcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0
b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBtaWdodCBmaW5kIGl0IHVzZWZ1bCB0byBhc3Nv
Y2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRoZSBjYWNoZSBvYmplY3QuXG4gICAgICAgIC8v
KGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IENh
Y2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBh
Y2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0O1xuXG4gICAgICAgIC8vIE1ldGhvZHMgYmVs
bG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICBpbmZvKCk6IGFueTtcbiAgICAgICAgZ2V0
IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmplY3Q7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8oKToge1xuICAgICAgICAgICAgaWQ6IHN0cmlu
ZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtcblxuICAgICAgICAgICAgLy8gTm90IGdhcmFu
dGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9uLW1hbmRhdG9yeSBvcHRpb25cbiAgICAgICAg
ICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgICAgcHV0KGtleTogc3Ry
aW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAgICAgIGdldCAoa2V5OiBzdHJpbmcpOiBhbnk7
XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQ7XG4gICAgICAgIHJlbW92ZUFsbCgp
OiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZpY2Uge1xuICAgICAgICAoZWxlbWVudDogc3Ry
aW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86
IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEVs
ZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5
PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDog
SlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0
eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAg
ICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElD
b21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8gVW5kb2N1bWVudGVkLCBidXQgaXQgaXMgdGhl
cmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVjdGl2ZXNNYXA6IGFueSk6IElDb21waWxlUHJv
dmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiB7
XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5vdCBmb3JjZSBjbG9uZUF0dGFjaEZuJ3Mgc2ln
bmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3BlLCBjbG9uZUF0dGFjaEZuPzogKGNsb25lZEVs
ZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3BlKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29udHJvbGxlclNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbnRyb2xsZXJcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbnRyb2xsZXJQcm92aWRl
clxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29udHJvbGxlclNlcnZp
Y2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHN0YXRl
IHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAgICAgICAgKGNvbnRyb2xsZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgKGNvbnRyb2xsZXJOYW1l
OiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNv
bnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdp
c3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiB2b2lk
O1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGRlcGVuZGVuY3lBbm5vdGFkZWRDb25z
dHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRw
U2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0IG1vZXRob2QgYW5kIHVybCBtdXN0IGJlIHBy
b3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElSZXF1ZXN0Q29uZmlnKTogSUh0dHBQcm9taXNl
PGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJ
SHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVsZXRlICh1cmw6IHN0cmluZywgUmVxdWVzdENv
bmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBoZWFkKHVybDogc3RyaW5n
LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGpzb25w
KHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4g
ICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6
IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwdXQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwg
UmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWZhdWx0
czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAgLy8gRm9yIGRlYnVnZ2luZywgQlVUIGl0IGlz
IGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxuICAgICAgICBwZW5kaW5nUmVxdWVzdHM6IGFu
eVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMganVzdCBmb3IgaGludGluZy5cbiAgICAvLyBT
b21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1
ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cCNV
c2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNcbiAgICBpbnRlcmZhY2UgSVJlcXVlc3RDb25m
aWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztcbiAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAg
ICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAvLyBYWFggaXQgaGFzIGl0J3Mgb3duIHN0cnVj
dHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVmaW5lIGl0IGluIHRoZSBmdXR1cmVcbiAgICAg
ICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBjYWNoZT86IGFueTtcbiAgICAgICAgd2l0aENy
ZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAgICAvLyBUaGVzZSBhY2NlcHQgbXVsdGlwbGUg
dHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFzIGFueVxuICAgICAgICBkYXRhPzogYW55O1xu
ICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXNwb25z
ZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFueTsgLy8gbnVtYmVyIHwgcHJvbWlzZVxuICAg
IH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2VDYWxsYmFjazxUPiB7XG4gICAgICAgIChk
YXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVyczogKGhlYWRlck5hbWU6IHN0cmluZykgPT4g
c3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmlnKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4ge1xuICAgICAgICBkYXRhPzogVDtcbiAg
ICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAgICBoZWFkZXJzPzogKGhlYWRlck5hbWU6IHN0
cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25maWc/OiBJUmVxdWVzdENvbmZpZztcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlPFQ+IGV4dGVuZHMgSVByb21pc2U8VD4ge1xu
ICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRw
UHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNr
PFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxs
YmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gVFJlc3VsdCwg
ZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+
IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3ND
YWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gSVByb21p
c2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxi
YWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBk
ZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAgICAgIGludGVyY2VwdG9yczogYW55W107XG4g
ICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2VuZFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBCYWNrZW5kXG4gICAgLy8gWW91IHNob3Vs
ZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgZGlyZWN0bHkuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwQmFja2VuZFNlcnZpY2Uge1xuICAgICAgICAv
LyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sgc2lnbmF0dXJlIGluIHRoZSBmdXR1cmVcbiAg
ICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgcG9zdD86IGFueSwgY2FsbGJhY2s/
OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGltZW91dD86IG51bWJlciwgd2l0aENyZWRlbnRp
YWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVTZXJ2aWNlIHtcbiAgICAgICAgKHRleHQ6IHN0
cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9vbGVhbik6IElJbnRlcnBvbGF0aW9uRnVuY3Rp
b247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6
IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRpb25GdW5jdGlvbiB7
XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2wodmFsdWU6IHN0cmlu
Zyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xu
ICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFRlbXBsYXRlQ2FjaGVTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0ZW1wbGF0
ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUNh
Y2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVjdCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4dGVuZHMgSVNjb3BlIHt9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0aW50
ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVU
cnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZENzcyh2YWx1ZTogYW55KTogYW55O1xu
XHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEpzKHZh
bHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFJlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBh
bnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHBhcnNlKHR5cGU6
IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkp
ID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBh
bnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0h0bWwoZXhwcmVzc2lvbjogc3Ry
aW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSnMo
ZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtc
blx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzVXJsKGV4cHJlc3Npb246IHN0cmlu
Zyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0dHJ1c3RBcyh0eXBl
OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0h0bWwodmFsdWU6IGFueSk6
IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzUmVzb3Vy
Y2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzVXJsKHZhbHVlOiBhbnkpOiBhbnk7
XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5cdH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZW5h
YmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2aWNlIHtcbiAgICAgICAgZ2V0VHJ1c3RlZCh0
eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuICAgICAgICB0cnVzdEFzKHR5
cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgdmFsdWVPZih2YWx1ZTogYW55
KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVs
ZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAg
ICAgICByZXNvdXJjZVVybEJsb2NrbGlzdChibG9ja2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICAg
ICAgcmVzb3VyY2VVcmxBbGxvd2xpc3QoYWxsb3dsaXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRGlyZWN0aXZlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZl
XG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlyZWN0aXZlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpbnRlcmZhY2UgSURpcmVjdGl2ZXtcbiAgICAg
ICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVtcGxhdGVFbGVtZW50OiBhbnksXG4gICAgICAg
ICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgdHJhbnNj
bHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlua2luZ0ZuOiBGdW5jdGlvbikgPT4gdm9pZFxu
ICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXI/OiBhbnk7XG4gICAgICAg
IGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAgICAgbGluaz86XG4gICAgICAgICAgICAoc2Nv
cGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3RhbmNlRWxlbWVudDogYW55LFxuICAgICAgICAg
ICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvbnRyb2xs
ZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lkO1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xu
ICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAgICAgICAgcmVwbGFjZT86IGJvb2xlYW47XG4g
ICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAgIHJlc3RyaWN0Pzogc3RyaW5nO1xuICAgICAg
ICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRl
VXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86IGJvb2xlYW47XG4gICAgICAgIHRyYW5zY2x1
ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYW5ndWxh
ci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5nIGFuZ3VsYXIuZWxlbWVudCwgYW5ndWxhciBy
ZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAvLyBhdWdtZW50ZWQgd2l0aCBhZGRpdGlvbmFs
IG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAgIC8vIHNlZTogaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0aWMgZXh0ZW5kcyBKUXVlcnlTdGF0aWMge1xu
ICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAg
ICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudEFycmF5
OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiBKUXVlcnkp
OiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24pOiBJQXVnbWVudGVk
SlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAg
ICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBdWdtZW50
ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAgICAgICAvLyBUT0RPOiBldmVudHMsIGhvdyB0
byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lcblxuICAgICAgICBmaW5kKHNlbGVjdG9yOiBz
dHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQob2JqOiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1
ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICBp
bmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3BlKCk6IElTY29wZTtcblxuICAgICAgICBpbmhl
cml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgICAgICBpbmhl
cml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgICAg
IGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xuXG5cbiAgICB9XG5cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8gbW9kdWxlIChhbmd1bGFyLmpzKVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBtb2R1bGUgYXV0byB7XG5cbiAgICAgICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0b3JTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRpbmplY3RvclxuICAgICAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2UgSUluamVjdG9yU2VydmljZSB7XG4gICAgICAg
ICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBzdHJpbmdbXTtcbiAgICAgICAgICAgIGFubm90
YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IHN0cmluZ1tdO1xuICAgICAgICAg
ICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICAgICBpbnN0YW50aWF0ZSh0eXBl
Q29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBp
bnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogYW55O1xuICAgICAgICAgICAg
aW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0PzogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7
XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBQcm92aWRl
U2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVU
Ty4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2UgSVBy
b3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBpdCByZXR1
cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBidXQgYWN0dWFsXG4gICAgICAgICAgICAvLyBp
bXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gICAgICAgICAgICAvLyBj
b25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBjb25z
dGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgICAgICBkZWNv
cmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAg
ICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcklubGluZTogYW55W10pOiB2b2lk
O1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rp
b246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIGZhY3Rvcnko
bmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBuZy5JU2Vydmlj
ZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjog
bmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBw
cm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlv
bik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmlu
ZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAg
ICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7
XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1vZGVscy9Ub2RvSXRlbS50c1xuXG5tb2R1bGUg
dG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGV4cG9ydCBjbGFzcyBUb2RvSXRlbSB7
XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgICAgcHVibGljIHRpdGxlOiBzdHJpbmcs
XG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVkOiBib29sZWFuXG4gICAgICAgICAgICApIHsg
fVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TY29wZS50c1xuXG5tb2R1bGUgdG9kb3Mg
e1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2NvcGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xuXHRc
dHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1RvZG86IHN0cmluZztcblx0XHRlZGl0ZWRUb2Rv
OiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86IFRvZG9JdGVtO1xuXHRcdHJlbWFpbmluZ0Nv
dW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBudW1iZXI7XG5cdFx0YWxsQ2hlY2tlZDogYm9v
bGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtcblx0XHRzdGF0dXNGaWx0ZXI6IHsgY29tcGxl
dGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlO1xuXHRc
dHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1N0b3JhZ2UudHNcblxu
bW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1N0b3JhZ2Uge1xuXHRcdGdl
dCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9kb3M6IFRvZG9JdGVtW10pO1xuXHR9XG59Ly8g
ZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3Qn
O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBwbGFjZXMgZm9jdXMgb24gdGhlIGVsZW1l
bnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBleHByZXNzaW9uIGl0IGJpbmRzIHRvIGV2YWx1
YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Gb2N1cygkdGltZW91
dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0
XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVz
OiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3YXRjaChhdHRyaWJ1dGVzLnRvZG9Gb2N1cywg
bmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3dmFsKSB7XG5cdFx0XHRcdFx0XHQkdGltZW91
dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAsIGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0
XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHR0b2RvRm9jdXMuJGluamVjdCA9IFsn
JHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMvVG9kb0JsdXIudHNcblxubW9kdWxlIHRvZG9z
IHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBEaXJlY3RpdmUgdGhhdCBl
eGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byBs
b3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9kb0JsdXIoKTogbmcu
SURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rOiAoJHNjb3Bl
OiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG4gICAg
ICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVyJywgKCkgPT4geyAkc2NvcGUuJGFwcGx5KGF0
dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuJG9uKCckZGVz
dHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2JsdXInKTsgfSk7XG4gICAgICAgICAgICB9
XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGlyZWN0aXZlcy9Ub2RvRXNjYXBlLnRzXG5cbm1v
ZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHRjb25zdCBFU0NBUEVfS0VZID0gMjc7
XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IGNhbmNlbHMgZWRpdGluZyBhIHRvZG8gaWYg
dGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0
b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAo
JHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7
XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRc
dGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVfS0VZKSB7XG5cdFx0XHRcdFx0XHQkc2NvcGUu
JGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtc
blxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQo
J2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufVxuLy8gc2VydmljZXMvVG9k
b1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAv
KipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNpc3RzIGFuZCByZXRyaWV2ZXMgVE9ET3MgZnJv
bSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9TdG9yYWdlIGlt
cGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAgICAgICBTVE9SQUdFX0lEID0gJ3RvZG9zLWFu
Z3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAgICBnZXQgKCk6IFRvZG9JdGVtW10ge1xuICAg
ICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9S
QUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1dCh0b2RvczogVG9kb0l0
ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0lE
LCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAgICAgICB9XG4gICAgfVxufS8vIGNvbnRyb2xs
ZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQv
Kipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBmb3IgdGhlIGFwcC4gVGhlIGNvbnRyb2xsZXI6
XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0cyB0aGUgbW9kZWwgdmlhIHRoZSB0b2RvU3Rv
cmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0aGUgbW9kZWwgdG8gdGhlIHRlbXBsYXRlIGFu
ZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQgKi9cblx0ZXhwb3J0IGNsYXNzIFRvZG9DdHJs
IHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9JdGVtW107XG5cblx0XHQvLyAkaW5qZWN0IGFu
bm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMgJGluamVjdG9yIHdpdGggaW5mb3JtYXRpb24g
YWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVjdGVkIGludG8gY29uc3RydWN0b3Jcblx0XHQv
LyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9zZSB0byB0aGUgY29uc3RydWN0b3IsIGJlY2F1
c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBpbiBjb3VudCBhbmQgdHlwZS5cblx0XHQvLyBT
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaVxuXHRcdHB1YmxpYyBzdGF0aWMg
JGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxuXHRcdFx0JyRsb2NhdGlvbicsXG5cdFx0XHQn
dG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZpbHRlcidcblx0XHRdO1xuXG5cdFx0Ly8gZGVw
ZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5ndWxhckpTICRpbmplY3RvclxuXHRcdC8vIGNv
bnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQgaW4gQXBwbGljYXRpb24udHMgYW5kIHNwZWNp
ZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmlidXRlIGluIGluZGV4Lmh0bWxcblx0XHRjb25z
dHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3BlOiBJVG9kb1Njb3BlLFxuXHRcdFx0cHJpdmF0
ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXG5cdFx0XHRwcml2YXRlIHRvZG9TdG9y
YWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2YXRlIGZpbHRlckZpbHRlclxuXHRcdCkge1xu
XHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2RvcyA9IHRvZG9TdG9yYWdlLmdldCgpO1xuXG5c
dFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdFx0JHNjb3BlLmVkaXRlZFRvZG8gPSBudWxs
O1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3IgJ3ZpZXcgbW9kZWwnLiBXZSdyZSBhZGRpbmcg
YSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHNjb3BlXG5cdFx0XHQvLyBmb3Ig
aXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIHZpZXcgLyBIVE1MXG5cdFx0XHQkc2Nv
cGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRjaGluZyBmb3IgZXZlbnRzL2NoYW5nZXMgaW4g
c2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmlldy91c2VyIGlucHV0XG5cdFx0XHQvLyBpZiB5
b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50IHdpdGggbGlmZXRpbWUgbG9uZ2VyIHRoYW4g
dGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91IHVuc3Vic2NyaWJlLlxuXHRcdFx0JHNjb3Bl
LiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9uVG9kb3MoKSwgdHJ1ZSk7XG5cdFx0XHQkc2Nv
cGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBwYXRoID0+IHRoaXMub25QYXRoKHBhdGgpKVxu
XG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9PT0gJycpICRsb2NhdGlvbi5wYXRoKCcvJyk7
XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9jYXRpb247XG5cdFx0fVxuXG5cdFx0b25QYXRo
KHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4kc2NvcGUuc3RhdHVzRmlsdGVyID0gKHBhdGgg
PT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogZmFsc2UgfSA6IChwYXRoID09
PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IHRydWUgfSA6IHt9O1xuXHRc
dH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudCA9
IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3MsIHsgY29tcGxldGVkOiBmYWxzZSB9KS5sZW5n
dGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291bnQgPSB0aGlzLnRvZG9zLmxlbmd0aCAtIHRo
aXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRcdFx0dGhpcy4kc2NvcGUuYWxsQ2hlY2tlZCA9
ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxuXHRcdFx0dGhpcy50b2RvU3RvcmFnZS5wdXQo
dGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRkVG9kbygpIHtcblx0XHRcdHZhciBuZXdUb2Rv
IDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9kby50cmltKCk7XG5cdFx0XHRpZiAoIW5ld1Rv
ZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy50b2Rv
cy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBmYWxzZSkpO1xuXHRcdFx0dGhpcy4kc2NvcGUu
bmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVkaXRUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkg
e1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IHRvZG9JdGVtO1xuXG5cdFx0XHQvLyBD
bG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNlIGVkaXRpbmcgaXMgY2FuY2VsbGVkLlxuXHRc
dFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gYW5ndWxhci5leHRlbmQoe30sIHRvZG9JdGVt
KTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRc
dHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKV0gPSB0aGlzLiRzY29wZS5v
cmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IHRydWU7XG5cdFx0fVxu
XG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29w
ZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IG51
bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2ZXJ0ZWQpIHtcblx0XHRcdFx0Ly8gVG9kbyBl
ZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZlLlxuXHRcdFx0XHR0aGlzLiRzY29wZS5yZXZl
cnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRvZG9JdGVtLnRp
dGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xuXHRcdFx0aWYgKCF0b2RvSXRlbS50aXRsZSkg
e1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9kb0l0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblxu
XHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zLnNw
bGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pLCAxKTtcblx0XHR9XG5cblx0XHRjbGVh
ckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnRvZG9zID0gdGhpcy50b2RvcyA9IHRo
aXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0b2RvSXRlbS5jb21wbGV0ZWQpO1xuXHRcdH1c
blxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29sZWFuKSB7XG5cdFx0XHR0aGlzLnRvZG9zLmZv
ckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5jb21wbGV0ZWQgPSBjb21wbGV0ZWQ7IH0pO1xu
XHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlvbi50c1xuXG4vKipcbiAqIFRoZSBtYWluIFRv
ZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlwZSB7YW5ndWxhci5Nb2R1bGV9XG4gKi9cbm1v
ZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRvZG9tdmMgPSBhbmd1
bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ3RvZG9D
dHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvQmx1cicsIHRvZG9C
bHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0ZvY3VzJywgdG9kb0ZvY3VzKVxuICAg
ICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2FwZScsIHRvZG9Fc2NhcGUpXG4gICAgICAgICAg
ICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2RvU3RvcmFnZSk7XG59XG4iCiAKIC8qKiovIH0p
LAogLyogNDIxICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVs
ZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3Vu
ZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9j
dW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAg
VW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5z
ZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0t
LS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhl
IGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUgc2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7
XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAg
dmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRo
ZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9
IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8g
PSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJp
YWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1
c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9
IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3Ry
aW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxu
ICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25z
IHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAg
IG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAg
ICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJp
bmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0gT2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtl
ZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4g
IHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNl
IHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlm
ICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3Jh
cHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZv
ciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhl
IG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQg
YF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZp
bmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUu
ZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4g
ICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAg
Ly8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVy
bmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2lu
ZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0
ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIg
b3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYg
KGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9
PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2
YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAg
IH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAg
ICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAg
ICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xu
ICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlv
bik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3Is
IHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNv
bnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtc
biAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHko
Y29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVy
bmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4g
IC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJl
ZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNr
LCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9
IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBu
dWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0
dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09i
amVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBfLnByb3Bl
cnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0
KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAg
Ly8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5c
biAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rpb24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkp
IHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1l
bnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4g
b2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
e1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtl
eXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBr
ZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZpbmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9p
ZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBy
ZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9y
IGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFy
IGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qo
cHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRp
dmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAg
ICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAg
IHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8g
dm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxl
Y3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hv
dWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVk
OiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3Nl
Yy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJN
LTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtc
biAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCdsZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtl
ID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29s
bGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3Ro
ID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0
aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3Ju
ZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBI
YW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxs
XG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFj
aCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5n
dGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0
aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpb
aV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5r
ZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2Jq
KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4g
dGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAg
Xy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4g
ICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNB
cnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwg
b2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJy
ZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4
XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4g
ICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rp
b24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIp
IHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3IgZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRz
Lmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUs
IHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBr
ZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8
IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/
IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpb
Y3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVt
bztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29u
dGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0
KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4g
ICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXgg
PSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRp
YWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
IDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtc
biAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9i
aiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxu
ICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2Yg
dmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5m
b2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3Nv
Y2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJl
ZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRo
ZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRl
Y3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250
ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAg
a2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7
XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1c
biAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xu
ICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRl
c3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBm
dW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107
XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2Jq
LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFs
dWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1
cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hp
Y2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGlj
YXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJl
ZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBv
ZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxg
LlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkg
e1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMg
PSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtl
eXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0
aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0g
OiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtl
eSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxu
ICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRj
aGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5h
bnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9
IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2Jq
KSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7
XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAg
ICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlm
IChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1
ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0
aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxu
ICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5kIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9
IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwg
Z3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7
XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRl
eCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtc
biAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBp
dGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkg
e1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1
bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlv
bih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRo
b2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVl
LCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEg
Y29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNr
ID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5
KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNl
IGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmlu
ZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwg
YXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAg
fTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBm
aW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMg
YGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykg
e1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAv
LyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlv
bikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZh
ciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAg
dmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxs
KSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtc
biAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3Vs
dCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAg
fSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAg
Xy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1
dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVk
ID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAt
SW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29t
cHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVs
ZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0
ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9
IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09
IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBv
YmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAg
ICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAg
ICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxp
c3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xu
ICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmlu
aXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtc
biAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7
XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxl
Y3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRl
cyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3No
dWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNB
cnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNl
dC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5k
ID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxl
ZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2lu
ZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAq
Km4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBu
b3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUg
aW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxu
ICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxs
IHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVz
KG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAg
fVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4g
IH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1
Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICBy
ZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xu
ICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5k
ZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAg
ICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0g
bGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAo
YSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtc
biAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxu
ICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7
XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwi
Z3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikg
e1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2
YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtc
biAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIg
a2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1
bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07
XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24u
IFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBm
dW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAo
ZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5
KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xu
ICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24s
IHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5
b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVu
Y3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAg
fSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBh
IGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUg
dG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJp
b24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xu
ICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tl
eV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBm
cm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAg
ICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNs
aWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9i
aiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8udmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBm
dW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVy
biBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAg
fTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2Ug
ZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVuXG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3
aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0
aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0
ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtd
O1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikge1xuICAgICAgKHBy
ZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAg
IH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rp
b25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBv
ZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2
YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipn
dWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5m
aXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAg
IGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwg
Z3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJh
eS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBs
YXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFy
Z3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMg
aW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0g
ZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXks
IDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDog
bikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFz
c2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJy
YXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJh
eSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJl
dHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBN
YXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVy
eXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWls
YCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9i
amVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVl
cyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFy
cmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwg
fHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVl
cyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJl
dHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwg
aW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIg
ZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtc
biAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5k
ZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkg
JiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAg
IC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAg
ICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmlj
dCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRw
dXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hpbGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBv
dXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgh
c3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9
XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwg
ZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8u
ZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4o
YXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9m
IHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5c
biAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNl
KGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2Ug
YSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBh
bHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEg
ZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0g
Xy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7
XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVy
YXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNl
O1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4g
ICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7
IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQg
PSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlm
IChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3Vs
dC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlm
IChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7
XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2
YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2
YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAg
ICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250
YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0
aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVy
biBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQ
cm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBh
bGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rp
b24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBh
cmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgo
YXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4g
ICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAo
dmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghXy5jb250YWlu
cyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBh
cmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBh
IG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQg
aW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1
bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwg
dHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4g
ICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4g
IC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVs
ZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0g
ZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAv
LyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBh
bmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xu
ICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYg
Xy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFy
cmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xu
ICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGlu
dG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBc
biAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0t
IG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5c
biAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0g
e307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ld
XSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBd
XSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07
XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBm
aW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZp
bmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZh
ciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/
IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5n
dGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwg
aW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xu
ICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1s
aWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQ
cmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGlj
YXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8g
ZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNo
b3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2Vh
cmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNv
bnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2
YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVu
Z3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1h
dGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlk
XSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICBy
ZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhl
IGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRl
eEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAg
ICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRo
Lm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVu
Z3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3Ro
ICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYg
bGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAg
ICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAg
IGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2Uu
Y2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05hTik7XG4gICAgICAgIHJldHVybiBpZHggPj0g
MCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkg
OiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAg
ICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAg
ICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2Yg
dGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEg
aWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFy
cmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8v
IGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNy
ZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0
SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8v
IEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dy
ZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0
aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0
aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0
aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAg
c3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBz
dGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0g
c3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAg
ICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7
XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xu
ICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBh
cyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3Zp
ZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywg
Ym91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNh
bGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBw
bHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMu
cHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdz
KTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVy
biBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4g
b2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5
KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRg
IGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkg
e1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJu
IG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBp
ZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJl
IGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhl
Y3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5j
YWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAv
LyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBo
YXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNo
YW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFj
ZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUt
ZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJn
cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigp
IHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4g
ICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBh
cmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGls
ZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0
aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRo
aXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQg
YSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5n
IGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVs
IGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmpl
Y3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIg
aSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwga2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkg
dGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7
XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVu
dHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4g
ICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlv
biBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBo
YXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNh
Y2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8g
aGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhj
YWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5j
YWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1
bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2Fs
bHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVu
Y3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMs
IDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVu
Yy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMg
YSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBz
dGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBf
LCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2ls
bCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2lu
ZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4g
IC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2Ug
cGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0
aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBm
YWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8u
XG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFy
IGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFy
IHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIg
bGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09
PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1
bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250
ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFk
aW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2Fp
dCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3Mg
PSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2Fp
dCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1l
b3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2
aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtc
biAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVs
c2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAg
IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAg
cmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwg
dGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAg
Ly8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3Rv
cHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAg
aXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdl
LCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMs
IHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1l
c3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFy
IGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYg
bGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0g
bGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAg
aWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQs
IGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAg
ICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVz
dGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91
dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQp
O1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250
ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4g
ICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmly
c3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFs
bG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVy
LCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5c
biAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBfLnBhcnRp
YWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lv
biBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVk
aWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0
ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBh
IGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMs
IGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRo
YXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBh
cmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBm
dW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJn
c1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3Vs
dCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAg
ICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBl
eGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24o
dGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1l
cyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAg
ICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwg
b25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5c
biAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAg
IHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgICBt
ZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRp
bWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtc
blxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qg
b25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBm
b3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAy
KTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAv
LyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4u
LmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9
LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVBy
b3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAg
ICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0
b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBr
ZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xu
ICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAo
Xy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9i
alByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFy
IHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlmIChfLmhhcyhvYmosIHByb3ApICYmICFfLmNv
bnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51
bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xu
ICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8u
Y29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAg
fVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBv
d24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRp
dmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8u
aXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0
aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9i
aikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUg
PCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7
XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0
eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAg
ICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8
IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtc
biAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFu
IG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
dmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4g
ICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAg
ICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBw
bHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIElu
IGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMgYW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRl
cmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAg
IGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAg
ICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsg
aW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJl
c3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXks
IG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252
ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5w
YWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAg
dmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0g
PSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9
O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZh
bHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtc
biAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xu
ICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlv
biBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9k
c2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIg
bmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1
bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFt
ZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0
aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0
ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRo
IGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8g
KGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJl
bmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3Np
Z24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtl
eSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkg
PSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNi
KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xu
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwg
a2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5
IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9wZXJ0aWVz
LlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3QsIG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAo
b2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0
ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9w
dGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9
IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBm
dW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBv
YmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtl
eXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xu
ICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtl
eSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJs
YWNrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRl
cmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlz
ID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4g
ICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFf
LmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNr
KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBv
YmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3Np
Z25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5o
ZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25h
bCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVc
biAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBw
cm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYg
KHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xu
ICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9i
amVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChv
YmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgp
IDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3
aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJw
b3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5c
biAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRz
IHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikg
e1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBw
YWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24ob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBr
ZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVj
dCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7
XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9
IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4g
b2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4g
IC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAu
XG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRl
bnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRl
bnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8v
d2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChh
ID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJp
Y3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxu
ICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBV
bndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBh
Ll93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAg
Ly8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJp
bmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1
cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51
bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBh
cmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJl
Z0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAv
YS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAv
LyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUg
ZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBu
ZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAg
ICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZh
bGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2
YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4g
ICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVt
ZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIg
OiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tv
YmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRv
IG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4g
ICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQg
ZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5h
TmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1c
blxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4g
ICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0
eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdp
dGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0
YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAg
ICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAg
ICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBp
bnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1
bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikp
IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUg
ZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3Rp
bmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rp
b24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXpp
bmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2lu
Y2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxu
ICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4g
ICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4g
ICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlv
bmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5c
biAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09
PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBv
ZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVz
aChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxu
ICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBk
ZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3Ro
ID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNl
O1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVy
aWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVx
KGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAg
ICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAg
ICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xuICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7
XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1i
ZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBp
ZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGls
ZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAg
ICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBl
cShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAg
fVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBv
ZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgp
O1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlz
b24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5j
dGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2
ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2Jq
ZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5j
dGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChp
c0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwg
Xy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJu
IF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVl
IGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2
ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJh
eS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7
XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9
IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4g
dHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtc
blxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24s
IGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNo
KFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdS
ZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29i
amVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xuICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxs
YmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdo
ZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUu
XG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9
IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAg
IH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdv
cmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4gb2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEp
LCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9u
JyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8
IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBu
dW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5p
dGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUg
Z2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90
IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4g
Xy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29iajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xlYW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBy
ZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmop
ID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBl
cXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBv
YmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/
XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2
b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFu
IG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGlu
IG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9i
aiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwo
b2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0t
LS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUs
IHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4g
UmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25m
bGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAg
ICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBh
cm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFs
dWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRp
bmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNv
bnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307
XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9u
IGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5w
cm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVu
Y3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqW2tleV07XG4gICAg
fTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVy
IGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4g
IF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBf
LmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAg
IHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4g
YSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAg
IGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJu
IGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWlu
IGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtc
biAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7
XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4
IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdl
dCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5v
dyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07
XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2Nh
cGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+Jzog
JyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAn
YCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVzY2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1h
cCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdz
IHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0
aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJl
dHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcg
YSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsg
Xy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhw
KHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xu
ICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBu
dWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3Ry
aW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xu
ICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBf
LnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZh
bHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQg
d2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQu
XG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAg
ICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07
XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4g
ICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3Qp
IDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5p
cXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0
ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBm
dW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJl
dHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQs
IFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRo
ZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRl
bGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88
JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4v
ZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8g
V2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRv
IGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJl
Z2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxu
ICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0
byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcg
bGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAg
J1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAg
J24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAg
fTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztc
blxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxc
JyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxh
dGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVy
c2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMg
d2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50
ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBi
YWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNl
dHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3Mp
IHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBz
ZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVy
cyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBt
YXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291
cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAg
ICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wn
KSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVz
Y2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7
XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIs
IGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7
XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2Fw
ZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5c
biAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIg
KyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0g
ZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0o
XCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVs
c2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0
ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRo
ZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJl
dHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8g
SWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2Nh
bCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8
fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuXG4gICAgc291cmNlID0gXCJ2YXIgX190LF9f
cD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlv
bigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSAr
ICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBG
dW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0g
Y2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAg
ICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4g
cmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhl
IGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAg
ICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0
ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9
JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIg
ZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAg
Xy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAg
ICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxu
ICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2Fs
bGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8v
IGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9u
cyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMg
bWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWlu
aW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFu
Y2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6
IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUg
VW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVh
Y2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBf
W25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigp
IHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBw
bHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFw
cGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBv
ZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1p
eGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdy
YXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhv
ZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigp
IHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9i
aiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAn
c3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVy
biByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vz
c29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsnY29uY2F0Jywg
J2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJh
eVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAg
ICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVu
dHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3
cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAgXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlv
bigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVu
d3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25z
XG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8u
cHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlwZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1
ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAn
JyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5z
IGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0
IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2VtYW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhv
dWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9yIEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUg
YW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVyc1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBi
ZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBw
b3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGluIGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90
IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQgcmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQg
Z2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAvLyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2Fs
bGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09
ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtd
LCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhp
cykpO1xuIgorbW9kdWxlLmV4cG9ydHMgPSAiLy8gICAgIFVuZGVyc2NvcmUuanMgMS44LjNcbi8v
ICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTUgSmVyZW15
IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVk
aXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBc
biAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBg
d2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuXG4gIHZh
ciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9g
IHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRlcnNjb3JlID0gcm9vdC5fO1xuXG4gIC8vIFNh
dmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZh
ciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5
cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sg
cmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5c
biAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGlj
ZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSxcbiAgICB0b1N0cmluZyAgICAgICAgID0g
T2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3duUHJvcGVydHkgICA9IE9ialByb3RvLmhhc093
blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBp
bXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVy
ZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAgICAgID0gQXJyYXkuaXNBcnJheSxcbiAgICBu
YXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5cyxcbiAgICBuYXRpdmVCaW5kICAgICAgICAg
PSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVDcmVhdGUgICAgICAgPSBPYmplY3QuY3JlYXRl
O1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlw
ZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5jdGlvbigpe307XG5cbiAgLy8gQ3JlYXRlIGEg
c2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4g
IHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVy
biBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtc
biAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJz
Y29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRp
YmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClgIEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhl
IGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0LlxuICBpZiAodHlwZW9mIGV4cG9y
dHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmlu
ZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMg
PSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9
IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjguMyc7
XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9y
IGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNr
LCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5j
dGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291
bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0
Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0
dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwg
dmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBv
dGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBvdGhlcik7
XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBj
b2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGlu
ZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlv
bihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVy
biBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlv
bik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1
cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8g
QSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2Fu
IGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJu
aW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyXG4gIC8vIGlkZW50aXR5LCBhbiBhcmJp
dHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nv
ci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAg
aWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlkZW50aXR5O1xuICAgIGlmIChfLmlzRnVuY3Rp
b24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xu
ICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIF8ubWF0Y2hlcih2YWx1ZSk7XG4gICAg
cmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9O1xuICBfLml0ZXJhdGVlID0gZnVuY3Rpb24o
dmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2IodmFsdWUsIGNvbnRleHQsIEluZmluaXR5
KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWdu
ZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywg
dW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBs
ZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09
IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxu
ICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNvdXJjZSksXG4gICAgICAgICAgICBsID0ga2V5
cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAg
ICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKCF1bmRlZmluZWRPbmx5IHx8IG9i
altrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAg
ICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5h
bCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBh
bm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSkge1xuICAgIGlm
ICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1cm4ge307XG4gICAgaWYgKG5hdGl2ZUNyZWF0
ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIEN0b3IucHJvdG90eXBlID0g
cHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBuZXcgQ3RvcjtcbiAgICBDdG9yLnByb3RvdHlw
ZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgcHJvcGVydHkgPSBm
dW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4g
b2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEhl
bHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVj
dGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0
XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2
LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDgg
SklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZhciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBv
dygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3RoID0gcHJvcGVydHkoJ2xlbmd0aCcpO1xuICB2
YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGxlbmd0aCA9
IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gdHlwZW9mIGxlbmd0aCA9PSAnbnVt
YmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGggPD0gTUFYX0FSUkFZX0lOREVYO1xuICB9O1xu
XG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5c
biAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFjaGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9y
RWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVjdHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlr
ZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFycmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBk
ZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29u
dGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4g
ICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9y
IChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAg
IGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAg
dmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMu
bGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1d
LCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xu
XG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFj
aCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2
YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5n
dGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0
aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xu
ICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAg
IHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBv
YmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBy
ZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVmdCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3Jl
YXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGltaXplZCBpdGVyYXRvciBmdW5jdGlvbiBhcyB1
c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8gaW4gdGhlIG1haW4gZnVuY3Rpb24gd2lsbCBk
ZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAgIGZ1bmN0aW9uIGl0ZXJhdG9yKG9iaiwgaXRl
cmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpIHtcbiAgICAgIGZvciAoOyBpbmRleCA+
PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJl
bnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJh
dGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAg
ICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJh
dGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0
ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBf
LmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAg
ICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIC8vIERldGVy
bWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25lIGlzIHByb3ZpZGVkLlxuICAgICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAgIG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5k
ZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBkaXI7XG4gICAgICB9XG4gICAgICByZXR1
cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCk7XG4g
ICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBm
cm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAg
Xy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8g
VGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBm
b2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxu
ICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFs
aWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5O1xuICAgIGlmIChpc0FycmF5TGlrZShv
YmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRleChvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7
XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8uZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1
cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBw
YXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIg
PSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFy
IHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xu
ICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYg
KHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAg
IH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVs
ZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rp
b24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBf
Lm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5l
IHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFs
aWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGlj
YXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtc
biAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAg
ICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMg
PyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRL
ZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0
cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0
aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxu
ICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4g
ICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFp
c0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8
fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGlu
ZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9i
aikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8g
RGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1
c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxu
ICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRl
bSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0g
Xy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBn
dWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJv
bUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVu
dHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9u
KG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7
XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlvbihtZXRob2QpO1xuICAgIHJldHVybiBfLm1h
cChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzRnVuYyA/IG1ldGhv
ZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gZnVuYyA6IGZ1
bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNl
IHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVy
dHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChv
YmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBv
ZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xu
ICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0g
ZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hl
cihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24g
dXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFp
bmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlv
bihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykp
O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJh
c2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmlu
aXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwg
JiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBf
LnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7
IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYg
KHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1c
biAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29u
dGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtc
biAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAg
ICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAm
JiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAg
ICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0g
ZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rp
b24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwg
bGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBp
ZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJh
eUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0g
b2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQg
PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBp
bmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21w
dXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJl
c3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAg
ICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBT
aHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAv
LyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlz
aGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICB2
YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2YXIgc2h1ZmZsZWQgPSBBcnJheShsZW5ndGgp
O1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFuZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4Kysp
IHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBpbmRleCk7XG4gICAgICBpZiAocmFuZCAhPT0g
aW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZmbGVkW3JhbmRdO1xuICAgICAgc2h1ZmZsZWRb
cmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH07XG5c
biAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24uXG4gIC8v
IElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1l
bnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3Jr
IHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVuY3Rpb24ob2JqLCBuLCBndWFyZCkge1xuICAg
IGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAgICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkg
b2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0
aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8uc2h1ZmZsZShvYmopLnNsaWNlKDAsIE1hdGgu
bWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBj
cml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG4gIF8uc29ydEJ5ID0gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNv
bnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGlu
ZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAg
ICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRl
eCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xu
ICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJp
YTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lk
IDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4g
LTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAg
IH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZv
ciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG4gIHZhciBncm91cCA9IGZ1bmN0
aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRl
eHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7
XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAg
IGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBy
ZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBi
eSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdy
b3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdy
b3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5o
YXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5
XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBi
eSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5
b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4
QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5
XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0
aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3Ry
aW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhl
XG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2
YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsg
ZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFs
LCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShv
YmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSBy
ZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtcbiAgICByZXR1cm4gXy52YWx1ZXMob2JqKTtc
biAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3Qu
XG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJu
IDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9i
aikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJh
eXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGlj
YXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGlj
YXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7
XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgcGFzcyA9
IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2Jq
KSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBrZXksIG9iaikgPyBwYXNzIDogZmFpbCkucHVz
aCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtwYXNzLCBmYWlsXTtcbiAgfTtcblxuICAv
LyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBm
aXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBm
aXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBg
dGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBg
Xy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4s
IGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYg
KG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICAgIHJldHVybiBfLmluaXRp
YWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0
aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBv
blxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBh
bGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxu
ICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xp
Y2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8
fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4gIC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9m
IGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFs
dWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7
XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVs
bCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBf
LnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIG4pKTtcbiAgfTtcblxuICAv
LyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFs
aWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4gIC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRo
ZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRo
ZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9w
ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJy
YXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBh
bGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFy
cmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBfLmlkZW50aXR5KTtcbiAgfTtcblxu
ICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVu
Y3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwg
c3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQgPSBbXSwgaWR4ID0gMDtcbiAgICBmb3IgKHZh
ciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJy
YXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZhbHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVl
KSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1l
bnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxsb3cpIHZhbHVlID0gZmxhdHRlbih2YWx1ZSwg
c2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7
XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVuO1xuICAgICAgICB3aGlsZSAoaiA8IGxlbikg
e1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgICB9XG4gICAg
ICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xu
ICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8vIEZsYXR0ZW4g
b3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciBqdXN0IG9u
ZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rpb24oYXJyYXksIHNoYWxsb3cpIHtcbiAgICBy
ZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywgZmFsc2UpO1xuICB9O1xuXG4gIC8vIFJldHVy
biBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lm
aWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVy
biBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIH07XG5c
biAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0
aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRp
b24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuICAvLyBBbGlhc2VkIGFzIGB1bmlxdWVg
LlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0aW9uKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0
ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNCb29sZWFuKGlzU29ydGVkKSkge1xuICAgICAg
Y29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRlcmF0ZWUgPSBpc1NvcnRlZDtcbiAgICAgIGlz
U29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFy
IHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5
KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAg
ICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZh
bHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBj
b21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4g
ICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhzZWVu
LCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAg
IHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghXy5jb250
YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAg
ICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBh
cnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20g
YWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLnVuaW9uID0gZnVuY3Rpb24o
KSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSkpO1xu
ICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNo
YXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNl
Y3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIg
YXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0g
PSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVl
O1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAg
aWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAg
ICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBv
bmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxl
bWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5k
aWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdCA9IGZsYXR0ZW4oYXJn
dW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0
aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5jb250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAg
fSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5n
bGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhl
ci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXy51bnppcChhcmd1bWVudHMp
O1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2YgXy56aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJy
YXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNo
YXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5n
dGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2
YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFy
cmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ29u
dmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBg
W2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUg
c2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3Bv
bmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAg
IHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3Ro
KGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAg
cmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVz
dWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJu
IHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBm
aW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZVBy
ZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJl
ZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRl
eHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5k
ZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAm
JiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUo
YXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAg
ICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4
IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRJ
bmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXgg
PSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRv
ciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAv
LyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBV
c2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2Jq
LCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRl
eHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAs
IGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAg
ICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVy
YXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7
XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9u
IHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zXG4gIGZ1bmN0
aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJlZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtc
biAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAw
LCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251
bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAgICAgICAgIGkgPSBpZHggPj0g
MCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4g
ICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkg
OiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZElu
ZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXks
IGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xu
ICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGlj
YXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAg
cmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHgg
PSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4
ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtc
biAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5
LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5Llxu
ICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFz
cyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAg
Xy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoMSwgXy5maW5kSW5kZXgsIF8uc29ydGVkSW5k
ZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoLTEsIF8uZmluZExhc3RJ
bmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFy
aXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBg
cmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXSho
dHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBf
LnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBu
dWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9
XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRo
LmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXko
bGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0
YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICBy
ZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0
ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3JcbiAgLy8gb3IgYSBub3JtYWwgZnVuY3Rpb24g
d2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4gIHZhciBleGVjdXRlQm91bmQgPSBmdW5jdGlv
bihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7
XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5zdGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4g
c291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVh
dGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFw
cGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1
bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91
bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4g
IC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBg
RnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxhYmxlLlxuICBfLmJpbmQgPSBmdW5jdGlvbihm
dW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2ZUJpbmQgJiYgZnVuYy5iaW5kID09PSBuYXRp
dmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBseShmdW5jLCBzbGljZS5jYWxsKGFyZ3VtZW50
cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9y
KCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYXJncyA9IHNs
aWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAg
ICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3Mu
Y29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5k
O1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEg
dmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxs
ZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xu
ICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1l
bnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFydGlhbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAg
ICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBib3Vu
ZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRB
cmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJn
c1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlvbisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICAg
IH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFyZ3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChh
cmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBi
b3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07
XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2Jq
ZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8vIGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJl
IGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZp
bmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLCBrZXk7XG4gICAgaWYg
KGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVu
Y3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAg
IGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9ialtrZXldID0gXy5iaW5kKG9ialtrZXldLCBv
YmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhw
ZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1
bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7
XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAn
JyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAg
ICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtc
biAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJuIG1lbW9pemU7XG4gIH07XG5cbiAg
Ly8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRz
LCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4g
IF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5j
YWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAg
ICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0sIHdhaXQpO1xuICB9O1xu
XG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hlZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUg
Y3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBjbGVhcmVkLlxuICBfLmRlZmVyID0gXy5wYXJ0
aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hl
biBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJp
bmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rp
b24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBt
b3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlr
ZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAv
LyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGlu
ZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIG9wdGlv
bnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0g
bnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9
IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRp
b25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVs
bDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAo
IXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBmdW5j
dGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5vdygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAm
JiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IG5vdztcbiAgICAgIHZhciBy
ZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlz
O1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCBy
ZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xl
YXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9
XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNv
bnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVs
bDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFs
c2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4g
ICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJu
cyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2Vk
LCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxl
ZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJ
ZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAv
LyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0g
ZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIGFyZ3Ms
IGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24o
KSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkgLSB0aW1lc3RhbXA7XG5cbiAgICAgIGlmIChs
YXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQo
bGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBu
dWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMu
YXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0g
YXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1
bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRz
O1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtcbiAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRp
YXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91
dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICByZXN1bHQgPSBm
dW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7
XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNl
Y29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJl
Zm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdp
bmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAg
cmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEg
bmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9
IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJl
dHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxu
ICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0
IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0
aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAg
ICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZh
ciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hp
bGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1
cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQg
d2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0
ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAg
ICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBh
cmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykg
dGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAg
dmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAw
KSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9
XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztc
biAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhl
Y3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2Fs
bCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRp
YWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVjdCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0t
LS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkg
YGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0
b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBu
b25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmlu
ZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093
blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAgZnVuY3Rpb24gY29sbGVjdE5vbkVu
dW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIgbm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQ
cm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAg
IHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnBy
b3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwg
Y2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKF8uaGFzKG9iaiwg
cHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIGtleXMucHVzaChwcm9wKTtcblxuICAg
IHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAgIHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNb
bm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90
b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkge1xuICAgICAgICBrZXlzLnB1c2go
cHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9m
IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2Ny
aXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtl
eXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3Ig
KHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAg
ICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJv
cHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBh
bGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC5cbiAgXy5hbGxLZXlzID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIg
a2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICAg
IC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9w
cyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRo
ZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgXy52YWx1ZXMgPSBmdW5jdGlv
bihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBr
ZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tp
XV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUg
cmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBv
YmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5tYXAgaXQgcmV0dXJucyBhbiBvYmplY3RcbiAg
Xy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRl
cmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAgXy5rZXlzKG9i
aiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0cyA9
IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGN1cnJlbnRLZXkgPSBrZXlzW2luZGV4
XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5
XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICB9
O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1g
IHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtl
eXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpba2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1
cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4g
b2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAg
fVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qg
b2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlh
c2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9ucyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAg
ICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxu
ICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2Jq
ZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8u
ZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzKTtcblxuICAvLyBBc3NpZ25zIGEgZ2l2
ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGllcyBpbiB0aGUgcGFzc2VkLWluIG9i
amVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2
YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRl
bmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJu
cyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0
XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAg
cHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAocHJlZGlj
YXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gICAgfVxuICB9O1xuXG4gIC8v
IFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93bGlz
dGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1bmN0aW9uKG9iamVjdCwgb2l0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBvYmogPSBvYmplY3QsIGl0ZXJhdGVlLCBr
ZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoXy5pc0Z1
bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtleXMgPSBfLmFsbEtleXMob2JqKTtcbiAgICAg
IGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7
XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSk7XG4gICAg
ICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikgeyByZXR1cm4ga2V5IGluIG9i
ajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtl
eSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVy
YXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qg
d2l0aG91dCB0aGUgYmxvY2tsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5vbWl0ID0gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUp
KSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRlKGl0ZXJhdGVlKTtcbiAgICB9IGVsc2Uge1xu
ICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAx
KSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAg
ICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywga2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAg
IHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRmls
bCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgXy5kZWZhdWx0
cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywgdHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlcyBhbiBv
YmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAv
LyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJl
IGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9iamVjdC5cbiAgXy5jcmVhdGUgPSBmdW5jdGlv
bihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90
eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJl
dHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBs
aWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25lID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYg
KCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIF8uaXNBcnJheShvYmop
ID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwgb2JqKTtcbiAgfTtcblxuICAvLyBJbnZva2Vz
IGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5kIHRoZW4gcmV0dXJucyBvYmouXG4gIC8vIFRo
ZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0
aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJt
ZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi5cbiAgXy50YXAgPSBmdW5jdGlvbihvYmos
IGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xu
ICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9m
IGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0Y2ggPSBmdW5jdGlvbihvYmplY3QsIGF0dHJz
KSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0cnMpLCBsZW5ndGggPSBrZXlzLmxlbmd0aDtc
biAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBP
YmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5
XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVl
O1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24g
Zm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVuY3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2sp
IHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0
aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJv
cG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdh
bCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtc
biAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBudWxsID09
IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBhID09
PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3Rh
bmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5f
d3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFz
c05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5n
LmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAg
Ly8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29s
ZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0n
OlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29u
IChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5n
XSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0
IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVx
dWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9
PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5h
TmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0
KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJu
ICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVk
IGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAv
ICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxu
ICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBh
bmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFy
ZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3Rl
IHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAg
ICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9
PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmpl
Y3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9
ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAg
IC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVu
dCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJh
bWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25z
dHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0
b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4g
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0
cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxu
ICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0
aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJv
bSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAg
IC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdz
IGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlz
IGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJT
dGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAo
bGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVy
c2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3Rl
ZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0
YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3Qg
dG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xu
ICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3Rz
IGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJh
eSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3Nhcnku
XG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3Ro
KSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25v
cmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4g
ICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0
dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUg
b2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGgg
PSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWlu
IHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVh
bGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxz
ZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFj
aCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShfLmhh
cyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4g
ZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZy
b20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAg
ICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSBh
IGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIF8u
aXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gZXEoYSwgYik7XG4gIH07XG5c
biAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFu
IFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMuXG4gIF8u
aXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRy
dWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikgJiYgKF8uaXNBcnJheShvYmopIHx8IF8uaXNT
dHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9iaikpKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0g
MDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICB9O1xuXG4gIC8vIElz
IGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbiAgXy5pc0VsZW1lbnQgPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gIH07XG5c
biAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT9cbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1
J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5pc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBm
dW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVj
dCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xu
ICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2Jq
O1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYm
ICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21lIGlzVHlwZSBtZXRob2RzOiBpc0FyZ3VtZW50
cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0RhdGUsIGlzUmVnRXhwLCBpc0Vy
cm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJl
cicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvciddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1sn
aXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0b1N0cmluZy5jYWxs
KG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xuICAgIH07XG4gIH0pO1xuXG4gIC8v
IERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhl
bSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJn
dW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBf
LmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gXy5oYXMob2JqLCAn
Y2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBh
cHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8v
IElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkgOCAoIzE5MjkpLlxuICBpZiAodHlwZW9mIC8u
LyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0gJ29iamVjdCcpIHtcbiAgICBf
LmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09
ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2Jq
ZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xu
XG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIg
d2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5cbiAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9PSArb2JqO1xuICB9O1xuXG4g
IC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0
cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbiAgfTtcblxuICAvLyBJcyBh
IGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4gIF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlh
YmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJl
dHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxuICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3Ig
Y2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5XG4gIC8v
IG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHByb3RvdHlwZSkuXG4gIF8uaGFz
ID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3du
UHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNc
biAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9D
b25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHBy
ZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVj
dC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNV
bmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50
aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkg
PSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVk
aWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVy
c2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5j
dGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9
IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5ID0gcHJvcGVydHk7XG5cbiAgLy8gR2VuZXJh
dGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHBy
b3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2Jq
ID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBv
Ympba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNo
ZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZh
bHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5tYXRjaGVzID0gZnVuY3Rpb24oYXR0cnMpIHtc
biAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9
O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxuICBfLnRpbWVzID0gZnVuY3Rp
b24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1h
eCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAx
KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShp
KTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVn
ZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVzaXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlv
bihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xu
ICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5y
YW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH07XG5cbiAgLy8gQSAocG9zc2libHkgZmFz
dGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICBf
Lm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdl
dFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGlu
Zy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0
OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcm
I3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5p
bnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVz
Y2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVF
c2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRj
aCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZv
ciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWRcbiAgICB2YXIgc291
cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2luKCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RS
ZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChz
b3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5n
ID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RS
ZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBl
cikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgXy5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVz
Y2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxu
ICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0
aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBgb2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndp
c2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBm
YWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdm9pZCAwIDogb2Jq
ZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUg
PSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1
ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtcblxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBp
bnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAv
LyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAg
Xy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVy
ICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG4gIH07XG5cbiAg
Ly8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0
ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2Ug
YWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2
YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0o
W1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAgICAgIDogLzwlLShbXFxzXFxTXSs/KSU+L2dc
biAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91
IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24g
b3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBu
b3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hh
cmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBh
XG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogICAg
ICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxcXCcsXG4gICAgJ1xccic6ICAgICAncicsXG4g
ICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5
JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVyID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIw
Mjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAg
ICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlw
dCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlv
bi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRl
cnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVv
dGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25s
eSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVu
Y3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAm
JiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8u
ZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29t
YmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRp
b24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8
fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRj
aCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxu
ICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBs
YXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAg
dmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJl
cGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1
YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQp
LnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1h
dGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2FwZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCIn
K1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxu
J1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0g
XCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidc
IjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJztc
XG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRv
YmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2Zm
ZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxu
XCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEg
dmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJj
ZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2Ug
PSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBc
InByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xu
ICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHRyeSB7XG4gICAgICB2YXIg
cmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNv
dXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAg
ICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtc
biAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAg
Ly8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNv
bXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmon
O1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4n
ICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFk
ZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2Nv
cmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNl
ID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3Rh
bmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5k
ZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2Jq
ZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBh
bHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdy
YXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciByZXN1bHQgPSBm
dW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8o
b2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4gIC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVu
Y3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5taXhpbiA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihuYW1lKSB7XG4gICAg
ICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07XG4gICAgICBfLnByb3RvdHlwZVtuYW1l
XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAg
ICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0
KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxu
ICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBv
YmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8gQWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0
aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScs
ICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtc
biAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1l
XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBt
ZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQn
IHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBd
O1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8v
IEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVh
Y2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFy
IG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5j
dGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dy
YXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSBy
ZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuICBfLnByb3RvdHlwZS52
YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4g
IC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBmb3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5n
aW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBhcml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lm
aWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVPZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8u
cHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7
XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBBTUQgcmVnaXN0
cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEFNRCBsb2Fk
ZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNlIG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9k
dWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAvLyBwcmFjdGljZSBmb3IgQU1EIHJlZ2lzdHJh
dGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVyc2NvcmUgcmVnaXN0ZXJzXG4gIC8vIGFzIGEg
bmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1ZXJ5LCBpdCBpcyBhIGJhc2UgbGlicmFyeSB0
aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRvIGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0
eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAvLyBhbiBBTUQgbG9hZCByZXF1ZXN0LiBUaG9z
ZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIGFuXG4gIC8vIGFub255bW91cyBk
ZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIGxvYWRlciByZXF1ZXN0LlxuICBpZiAodHlw
ZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCd1
bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4g
IH1cbn0uY2FsbCh0aGlzKSk7XG4iCiAKIC8qKiovIH0pLAogLyogNDIyICovCkBAIC0xNDkwMjgs
NyArMTQ5MDI4LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKIAogICBmdW5jdGlvbiBj
b21iaW5lKGRlc3QsIHNyYykgewogICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICBpZiAoXy5oYXMoSlNISU5ULmJsYWNrbGlzdCwgbmFtZSkpIHJldHVy
bjsKKyAgICAgIGlmIChfLmhhcyhKU0hJTlQuYmxvY2tsaXN0LCBuYW1lKSkgcmV0dXJuOwogICAg
ICAgZGVzdFtuYW1lXSA9IHNyY1tuYW1lXTsKICAgICB9KTsKICAgfQpAQCAtMTQ5MzEzLDcgKzE0
OTMxMyw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAga2V5ID0ga2V5
LnNsaWNlKDEpOwogICAgICAgICAgIHZhbCA9IGZhbHNlOwogCi0gICAgICAgICAgSlNISU5ULmJs
YWNrbGlzdFtrZXldID0ga2V5OworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rba2V5XSA9IGtl
eTsKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtrZXldOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgIHByZWRlZltrZXldID0gKHZhbCA9PT0gInRydWUiKTsKQEAgLTE1NDEyMCw3ICsx
NTQxMjAsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogICAgICAgSlNISU5ULmVycm9y
cyA9IFtdOwogICAgICAgSlNISU5ULnVuZGVmcyA9IFtdOwogICAgICAgSlNISU5ULmludGVybmFs
cyA9IFtdOwotICAgICAgSlNISU5ULmJsYWNrbGlzdCA9IHt9OworICAgICAgSlNISU5ULmJsb2Nr
bGlzdCA9IHt9OwogICAgICAgSlNISU5ULnNjb3BlID0gIihtYWluKSI7CiAgICAgfQogCkBAIC0x
NTQxNDksNyArMTU0MTQ5LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKIAogICAgICAg
ICBpZiAoaXRlbVswXSA9PT0gIi0iKSB7CiAgICAgICAgICAgc2xpY2UgPSBpdGVtLnNsaWNlKDEp
OwotICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rbc2xpY2VdID0gc2xpY2U7CisgICAgICAgICAg
SlNISU5ULmJsb2NrbGlzdFtzbGljZV0gPSBzbGljZTsKICAgICAgICAgICAvLyByZW1vdmUgZnJv
bSBwcmVkZWZpbmVkIGlmIHRoZXJlCiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRbc2xpY2Vd
OwogICAgICAgICB9IGVsc2UgewpAQCAtMTk1ODI5LDcgKzE5NTgyOSw3IEBAIGZ1bmN0aW9uIElt
cG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSAKIAl2YXIgcmVnZXhTaW5nbGVFc2NhcGUgPSAv
WyInXFxcYlxmXG5cclx0XS87CiAKIAl2YXIgcmVnZXhEaWdpdCA9IC9bMC05XS87Ci0JdmFyIHJl
Z2V4V2hpdGVsaXN0ID0gL1sgISMtJlwoLVxbXF0tfl0vOworCXZhciByZWdleEFsbG93bGlzdCA9
IC9bICEjLSZcKC1cW1xdLX5dLzsKIAogCXZhciBqc2VzYyA9IGZ1bmN0aW9uKGFyZ3VtZW50LCBv
cHRpb25zKSB7CiAJCS8vIEhhbmRsZSBvcHRpb25zCkBAIC0xOTYwMDQsNyArMTk2MDA0LDcgQEAg
ZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUpIAogCQkJCX0KIAkJCX0KIAkJ
CWlmICghb3B0aW9ucy5lc2NhcGVFdmVyeXRoaW5nKSB7Ci0JCQkJaWYgKHJlZ2V4V2hpdGVsaXN0
LnRlc3QoY2hhcmFjdGVyKSkgeworCQkJCWlmIChyZWdleEFsbG93bGlzdC50ZXN0KGNoYXJhY3Rl
cikpIHsKIAkJCQkJLy8gSXTigJlzIGEgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciB0aGF0IGlz
IG5vdCBgImAsIGAnYCBvciBgXGAsCiAJCQkJCS8vIHNvIGRvbuKAmXQgZXNjYXBlIGl0LgogCQkJ
CQlyZXN1bHQgKz0gY2hhcmFjdGVyOwpAQCAtMjA5MzM0LDcgKzIwOTMzNCw3IEBAIHZhciBfZ2V0
SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXUKIAogZXhwb3J0cy5jYWxsID0gY2FsbDsK
IGV4cG9ydHMuX2NhbGwgPSBfY2FsbDsKLWV4cG9ydHMuaXNCbGFja2xpc3RlZCA9IGlzQmxhY2ts
aXN0ZWQ7CitleHBvcnRzLmlzQmxvY2tsaXN0ZWQgPSBpc0Jsb2NrbGlzdGVkOwogZXhwb3J0cy52
aXNpdCA9IHZpc2l0OwogZXhwb3J0cy5za2lwID0gc2tpcDsKIGV4cG9ydHMuc2tpcEtleSA9IHNr
aXBLZXk7CkBAIC0yMDk0MTAsOSArMjA5NDEwLDkgQEAgZnVuY3Rpb24gX2NhbGwoZm5zKSB7CiAg
IHJldHVybiBmYWxzZTsKIH0KIAotZnVuY3Rpb24gaXNCbGFja2xpc3RlZCgpIHsKLSAgdmFyIGJs
YWNrbGlzdCA9IHRoaXMub3B0cy5ibGFja2xpc3Q7Ci0gIHJldHVybiBibGFja2xpc3QgJiYgYmxh
Y2tsaXN0LmluZGV4T2YodGhpcy5ub2RlLnR5cGUpID4gLTE7CitmdW5jdGlvbiBpc0Jsb2NrbGlz
dGVkKCkgeworICB2YXIgYmxvY2tsaXN0ID0gdGhpcy5vcHRzLmJsb2NrbGlzdDsKKyAgcmV0dXJu
IGJsb2NrbGlzdCAmJiBibG9ja2xpc3QuaW5kZXhPZih0aGlzLm5vZGUudHlwZSkgPiAtMTsKIH0K
IAogZnVuY3Rpb24gdmlzaXQoKSB7CkBAIC0yMDk0MjAsNyArMjA5NDIwLDcgQEAgZnVuY3Rpb24g
dmlzaXQoKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKHRoaXMuaXNCbGFja2xp
c3RlZCgpKSB7CisgIGlmICh0aGlzLmlzQmxvY2tsaXN0ZWQoKSkgewogICAgIHJldHVybiBmYWxz
ZTsKICAgfQogCkBAIC0yMTEwNzgsNyArMjExMDc4LDcgQEAgZnVuY3Rpb24gc2hvdWxkSWdub3Jl
S2V5KGtleSkgewogCiAgIGlmIChrZXkgPT09ICJlbnRlciIgfHwga2V5ID09PSAiZXhpdCIgfHwg
a2V5ID09PSAic2hvdWxkU2tpcCIpIHJldHVybiB0cnVlOwogCi0gIGlmIChrZXkgPT09ICJibGFj
a2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJu
IHRydWU7CisgIGlmIChrZXkgPT09ICJibG9ja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8
IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CiAKICAgcmV0dXJuIGZhbHNlOwogfQpA
QCAtMjIyNzY4LDcgKzIyMjc2OCw3IEBAIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJk
KG9iaikgeyAKIAogY29uc3QgbGlmZWN5Y2xlTWV0aG9kcyA9IG5ldyBTZXQoWyJjb21wb25lbnRX
aWxsVW5tb3VudCIsICJjb21wb25lbnREaWRNb3VudCIsICJjb21wb25lbnRXaWxsTW91bnQiLCAi
Y29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVcGRhdGUiLCAiY29tcG9uZW50RGlk
Q2F0Y2giLCAiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyJdKTsKIAotY29uc3Qgd2hpdGVsaXN0
ZWRQcm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKK2Nv
bnN0IGFsbG93bGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250ZXh0Iiwg
InJlZnMiXSk7CiAKIGZ1bmN0aW9uIGdldEluaXRpYWxQcm9wcyhyZWFsbSwgY29tcG9uZW50VHlw
ZSkgewogICBsZXQgcHJvcHNOYW1lID0gbnVsbDsKQEAgLTIyMjkzOCw3ICsyMjI5MzgsNyBAQCBm
dW5jdGlvbiBldmFsdWF0ZUNsYXNzQ29uc3RydWN0b3IocmVhbG0sCiAgICAgbGV0IGluc3RhbmNl
ID0gKDAsIF9pbmRleDIuQ29uc3RydWN0KShyZWFsbSwgY29uc3RydWN0b3JGdW5jLCBbcHJvcHMs
IGNvbnRleHRdKTsKICAgICAoMCwgX2ludmFyaWFudDIuZGVmYXVsdCkoaW5zdGFuY2UgaW5zdGFu
Y2VvZiBfaW5kZXguT2JqZWN0VmFsdWUpOwogICAgIGZvciAobGV0IFtwcm9wZXJ0eU5hbWVdIG9m
IGluc3RhbmNlLnByb3BlcnRpZXMpIHsKLSAgICAgIGlmICghd2hpdGVsaXN0ZWRQcm9wZXJ0aWVz
Lmhhcyhwcm9wZXJ0eU5hbWUpKSB7CisgICAgICBpZiAoIWFsbG93bGlzdGVkUHJvcGVydGllcy5o
YXMocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpbnN0YW5jZVByb3BlcnRpZXMuYWRkKHByb3Bl
cnR5TmFtZSk7CiAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416902</attachid>
            <date>2021-01-02 15:05:59 -0800</date>
            <delta_ts>2021-01-02 15:10:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>test2.txt</filename>
            <type>text/plain</type>
            <size>1392204</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzExMjIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIxLTAxLTAyICBC
ZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbm9uLWluY2x1
c2l2ZSBsYW5ndWFnZSBmcm9tIEpldFN0cmVhbSAyLjAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3RyZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9y
LXBheWxvYWQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNwZWN0b3Iu
UmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2Zvcm1h
dFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuc3R5bGVGb3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRPTU5vZGUuV2ViSW5zcGVjdG9yLlJlc291cmNlLldlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLmlzQWxs
b3dsaXN0ZWRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUu
X2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuaXNXaGl0ZWxpc3RlZFByb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBKZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanM6
CisKIDIwMjAtMTItMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01vdGlvbk1hcmtdIEluY3JlYXNlIHRoZSB3YXJtLXVwIHRpbWUgZm9yIGVhY2ggc3Vi
LXRlc3QgZnJvbSAxMDBtcyB0byAxMDAwbXMKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9yLXBheWxvYWQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9hZC5qcwkocmV2
aXNpb24gMjcxMTIyKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9p
bnNwZWN0b3ItcGF5bG9hZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNTgwOSw5ICs1ODA5LDkgQEAg
ZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqLHRva2VuKQogZnVuY3Rpb24gaW50ZWdlckZvcm1h
dHRlcihvYmopCiB7bGV0IHZhbHVlPXR5cGVvZiBvYmoudmFsdWU9PT0ibnVtYmVyIj9vYmoudmFs
dWU6b2JqLmRlc2NyaXB0aW9uO3JldHVybiBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzLmQodmFs
dWUpO30KIHZhciBjdXJyZW50U3R5bGU9bnVsbDtmdW5jdGlvbiBzdHlsZUZvcm1hdHRlcihvYmop
Ci17Y3VycmVudFN0eWxlPXt9O3ZhciBidWZmZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpO2J1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIixvYmouZGVzY3JpcHRpb24pO2Zvcih2YXIg
aT0wO2k8YnVmZmVyLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBwcm9wZXJ0eT1idWZmZXIuc3R5bGVb
aV07aWYoaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KSkKK3tjdXJyZW50U3R5bGU9e307
dmFyIGJ1ZmZlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7YnVmZmVyLnNldEF0dHJp
YnV0ZSgic3R5bGUiLG9iai5kZXNjcmlwdGlvbik7Zm9yKHZhciBpPTA7aTxidWZmZXIuc3R5bGUu
bGVuZ3RoO2krKyl7dmFyIHByb3BlcnR5PWJ1ZmZlci5zdHlsZVtpXTtpZihpc0FsbG93bGlzdGVk
UHJvcGVydHkocHJvcGVydHkpKQogY3VycmVudFN0eWxlW3Byb3BlcnR5XT1idWZmZXIuc3R5bGVb
cHJvcGVydHldO319Ci1mdW5jdGlvbiBpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCitm
dW5jdGlvbiBpc0FsbG93bGlzdGVkUHJvcGVydHkocHJvcGVydHkpCiB7Zm9yKHZhciBwcmVmaXgg
b2ZbImJhY2tncm91bmQiLCJib3JkZXIiLCJjb2xvciIsImZvbnQiLCJsaW5lIiwibWFyZ2luIiwi
cGFkZGluZyIsInRleHQiXSl7aWYocHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXgpfHxwcm9wZXJ0
eS5zdGFydHNXaXRoKCItd2Via2l0LSIrcHJlZml4KSkKIHJldHVybiB0cnVlO30KIHJldHVybiBm
YWxzZTt9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVu
Y2htYXJrL2Jyb3dzZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2VyLmpzCShyZXZpc2lvbiAyNzExMjIpCisr
KyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVuY2htYXJrL2Jyb3dz
ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwMzg4LDE1ICsxMDM4OCwxNSBAQCB0cmF2ZXJzZS5y
ZW1vdmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHRyCiAgIHJldHVybiB0cmVlOwogfTsKIAotZnVu
Y3Rpb24gaGFzQmxhY2tsaXN0ZWRUeXBlKHBhdGgsIHN0YXRlKSB7CitmdW5jdGlvbiBoYXNCbG9j
a2xpc3RlZFR5cGUocGF0aCwgc3RhdGUpIHsKICAgaWYgKHBhdGgubm9kZS50eXBlID09PSBzdGF0
ZS50eXBlKSB7CiAgICAgc3RhdGUuaGFzID0gdHJ1ZTsKICAgICBwYXRoLnN0b3AoKTsKICAgfQog
fQogCi10cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlLCB0eXBlLCBibGFj
a2xpc3RUeXBlcykgewotICBpZiAoKDAsIF9pbmNsdWRlczIuZGVmYXVsdCkoYmxhY2tsaXN0VHlw
ZXMsIHRyZWUudHlwZSkpIHJldHVybiBmYWxzZTsKK3RyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlv
biAodHJlZSwgc2NvcGUsIHR5cGUsIGJsb2NrbGlzdFR5cGVzKSB7CisgIGlmICgoMCwgX2luY2x1
ZGVzMi5kZWZhdWx0KShibG9ja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwog
CiAgIGlmICh0cmVlLnR5cGUgPT09IHR5cGUpIHJldHVybiB0cnVlOwogCkBAIC0xMDQwNiw4ICsx
MDQwNiw4IEBAIHRyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2NvcGUKICAgfTsK
IAogICB0cmF2ZXJzZSh0cmVlLCB7Ci0gICAgYmxhY2tsaXN0OiBibGFja2xpc3RUeXBlcywKLSAg
ICBlbnRlcjogaGFzQmxhY2tsaXN0ZWRUeXBlCisgICAgYmxvY2tsaXN0OiBibG9ja2xpc3RUeXBl
cywKKyAgICBlbnRlcjogaGFzQmxvY2tsaXN0ZWRUeXBlCiAgIH0sIHNjb3BlLCBzdGF0ZSk7CiAK
ICAgcmV0dXJuIHN0YXRlLmhhczsKQEAgLTM2OTczLDcgKzM2OTczLDcgQEAgZnVuY3Rpb24gVHlw
ZWRBcnJheVNwZWNpZXNDcmVhdGUocmVhbG0sIAogdmFyIHByb21pc2VFeGlzdHMgPSB0eXBlb2Yg
UHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJzsKIAogLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi8K
LXZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDogZ2xv
YmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsYWNrbGlzdAordmFyIGdsb2JhbE9iamVj
dCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1k
aXNhYmxlLWxpbmUgaWQtYmxvY2tsaXN0CiAKIHZhciBzeW1ib2xFeGlzdHMgPSB0eXBlb2YgU3lt
Ym9sICE9PSAndW5kZWZpbmVkJzsKIHZhciBtYXBFeGlzdHMgPSB0eXBlb2YgTWFwICE9PSAndW5k
ZWZpbmVkJzsKQEAgLTExMzU4Nyw3ICsxMTM1ODcsNyBAQCBtb2R1bGUuZXhwb3J0cyA9ICJ7XCJ2
ZXJzaW9uXCI6MyxcInNvdXJjCiAvKiA0MDUgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0
IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJp
Z2h0IChjKSAyMDA2LTIwMTcgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0
LykuKi8gXG4vKiFcbldlYiBCdWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVy
L2U0MjZhOWFlNzE2N2M1ODA3YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBD
b3JlXG5cbmRlc2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtW
YWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9y
czogVGhlIE1vb1Rvb2xzIHByb2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZl
bG9wZXJzLylcblxuaW5zcGlyYXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGly
ZWQgYnkgW0Jhc2UuanNdKGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9i
YXNlLykgQ29weXJpZ2h0IChjKSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGlj
ZW5zZS5waHApXG4gIC0gU29tZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUu
anNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBT
dGVwaGVuc29uLCBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9t
aXQtbGljZW5zZS5waHApXG5cbnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVP
ZiwgaW5zdGFuY2VPZiwgTmF0aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZh
c2NyaXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDog
Q29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHVi
LmNvbS9rYW1pY2FuZS8pLiovXG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0
dmVyc2lvbjogJzEuNi4wJyxcblx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2Yzdj
YTUxMTRlZTk1ZTJiJ1xufTtcblxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2Yg
PSB0aGlzLnR5cGVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1
cm4gJ251bGwnO1xuXHRpZiAoaXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1p
bHkoKTtcblxuXHRpZiAoaXRlbS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MSkgcmV0dXJuICdlbGVtZW50Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4g
KC9cXFMvKS50ZXN0KGl0ZW0ubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7
XG5cdH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAo
J2NhbGxlZScgaW4gaXRlbSkgcmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4g
aXRlbSkgcmV0dXJuICdjb2xsZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtc
bn07XG5cbnZhciBpbnN0YW5jZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwg
b2JqZWN0KXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3Ry
dWN0b3IgPSBpdGVtLiRjb25zdHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAo
Y29uc3RydWN0b3Ipe1xuXHRcdGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1
ZTtcblx0XHRjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElF
OD4qL1xuXHRpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0
SUU4PiovXG5cdHJldHVybiBpdGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093
blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+
Ki9cbnZhciBlbnVtZXJhYmxlcyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0p
IGVudW1lcmFibGVzID0gbnVsbDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hh
c093blByb3BlcnR5JywgJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51
bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xu
ZnVuY3Rpb24gZm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRpZiAoZW51bWVyYWJsZXMpIGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTsp
e1xuXHRcdHZhciBrID0gZW51bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXkt
dmFsdWUsIHNvIG92ZXJsb2FkU2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1l
dGhvZCBmdW5jdGlvbiwgd2l0aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093
blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xu
XHR9XG59XG4vKjwvbHRJRTg+Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1
bmN0aW9uID0gdGhpcy5GdW5jdGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0
dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4g
ZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYg
KHVzZVBsdXJhbCB8fCB0eXBlb2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGlu
IGEpIHNlbGYuY2FsbCh0aGlzLCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRm
b3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9h
ZEdldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0
dXJuIGZ1bmN0aW9uKGEpe1xuXHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBh
ICE9ICdzdHJpbmcnKSBhcmdzID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MSkgYXJncyA9IGFyZ3VtZW50cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07
XG5cdFx0aWYgKGFyZ3Mpe1xuXHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlz
LCBhcmdzW2ldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMs
IGEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJv
dG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1
ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9
IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59
Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlO1xuXG5BcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVt
ID09IG51bGwpIHJldHVybiBbXTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAm
JiB0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8g
aXRlbSA6IHNsaWNlLmNhbGwoaXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicp
ID8gaXRlbSA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51
bWJlci5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0
KGl0ZW0pO1xuXHRyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xu
XG5TdHJpbmcuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xu
fTtcblxuXG5cbkZ1bmN0aW9uLmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20g
PSBOdW1iZXIuY29udmVydDtcblN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhp
ZGUsIHByb3RlY3RcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuJGhpZGRlbiA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cHJvdGVjdDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBl
ID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9
IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5
cGVbJ2lzJyArIG5hbWVdID0gdHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5c
dFx0XHRvYmplY3QucHJvdG90eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0
dXJuIGxvd2VyO1xuXHRcdFx0fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYg
KG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xu
XHRvYmplY3QuJGNvbnN0cnVjdG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3Ry
dWN0b3IgPSBvYmplY3Q7XG5cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9
IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rp
b24oaXRlbSl7XG5cdHJldHVybiAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9
PSAnbnVtYmVyJyAmJiB0b1N0cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScg
KTtcbn07XG5cbnZhciBob29rcyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdHZhciB0eXBlID0gdHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9v
a3NbdHlwZV0gfHwgKGhvb2tzW3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJl
dHVybjtcblxuXHR2YXIgaG9va3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAw
OyBpIDwgaG9va3MubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0
aWYgKHR5cGVPZihob29rKSA9PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1l
dGhvZCk7XG5cdFx0ZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5c
dHZhciBwcmV2aW91cyA9IHRoaXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0g
bnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRo
b2Q7XG5cblx0aWYgKHRoaXNbbmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVu
Y3Rpb24nKSBleHRlbmQuY2FsbCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1
cm4gbWV0aG9kLmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xu
fTtcblxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2Qg
JiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtc
blx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFt
ZV0gPSBtZXRob2Q7XG59O1xuXG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBs
ZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRl
cigpLFxuXG5cdGFsaWFzOiBmdW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50
LmNhbGwodGhpcywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9h
ZFNldHRlcigpLFxuXG5cdG1pcnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlz
KS5wdXNoKGhvb2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgn
VHlwZScsIFR5cGUpO1xuXG4vLyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9u
KG5hbWUsIG9iamVjdCwgbWV0aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVj
dCksXG5cdFx0cHJvdG90eXBlID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBv
YmplY3QgPSBuZXcgVHlwZShuYW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0g
bWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxu
XHRcdFx0Z2VuZXJpYyA9IG9iamVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5
XTtcblxuXHRcdGlmIChnZW5lcmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBl
ICYmIHByb3RvKSBvYmplY3QuaW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxu
XG5cdGlmIChpc1R5cGUpe1xuXHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5w
cm9wZXJ0eUlzRW51bWVyYWJsZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhv
ZCA9IGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFy
IGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxs
KHByb3RvdHlwZSwgcHJvdG90eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1c
blx0XHRcdGZvciAodmFyIGtleSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90
b3R5cGVba2V5XSwga2V5KTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxu
Zm9yY2UoJ1N0cmluZycsIFN0cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29u
Y2F0JywgJ2NvbnRhaW5zJywgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVv
dGUnLCAncmVwbGFjZScsICdzZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywg
J3N1YnN0cmluZycsICd0cmltJywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0Fy
cmF5JywgQXJyYXksIFtcblx0J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdp
bmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21h
cCcsICdzb21lJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1i
ZXInLCBOdW1iZXIsIFtcblx0J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0
cmluZycsICd0b1ByZWNpc2lvbidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBs
eScsICdjYWxsJywgJ2JpbmQnXG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rl
c3QnXG5dKSgnT2JqZWN0JywgT2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHkn
LCAnZGVmaW5lUHJvcGVydGllcycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93
blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRF
eHRlbnNpb25zJywgJ2lzRXh0ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScs
ICdpc0Zyb3plbidcbl0pKCdEYXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQg
PSBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9u
KCl7XG5cdHJldHVybiArKG5ldyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJv
b2xlYW4pO1xuXG4vLyBmaXhlcyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJv
dG90eXBlLiRmYW1pbHkgPSBmdW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAn
bnVtYmVyJyA6ICdudWxsJztcbn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJl
ci5leHRlbmQoJ3JhbmRvbScsIGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxv
b3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9y
RWFjaCwgZWFjaCwga2V5c1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0
Zm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5k
LCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFj
aDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRr
ZXlzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIg
ayBpbiBvYmplY3Qpe1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkg
a2V5cy5wdXNoKGspO1xuXHRcdH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RF
bnVtYmVyYWJsZUtleShvYmplY3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xu
XHRcdH0pO1xuXHRcdC8qPC9sdElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZv
ckVhY2g6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVj
dCkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5
XSwga2V5LCBvYmplY3QpO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9i
amVjdC5mb3JFYWNoO1xuXG5cbi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJn
aW5nIGFuZCBhcHBlbmRpbmdcblxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dp
dGNoICh0eXBlT2YoaXRlbSkpe1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUo
KTtcblx0XHRjYXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRl
ZmF1bHQ6IHJldHVybiBpdGVtO1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywg
ZnVuY3Rpb24oKXtcblx0dmFyIGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7
XG5cdHdoaWxlIChpLS0pIGNsb25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNs
b25lO1xufSk7XG5cbnZhciBtZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50
KXtcblx0c3dpdGNoICh0eXBlT2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0
XHRpZiAodHlwZU9mKHNvdXJjZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJj
ZVtrZXldLCBjdXJyZW50KTtcblx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUo
Y3VycmVudCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0g
Y3VycmVudC5jbG9uZSgpOyBicmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJl
bnQ7XG5cdH1cblx0cmV0dXJuIHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1l
cmdlOiBmdW5jdGlvbihzb3VyY2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmlu
ZycpIHJldHVybiBtZXJnZU9uZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJn
dW1lbnRzW2ldO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNl
LCBrZXksIG9iamVjdFtrZXldKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxu
XHRjbG9uZTogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3Ig
KHZhciBrZXkgaW4gb2JqZWN0KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5c
dFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xu
XHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgZXh0ZW5kZWQgPSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gZXh0ZW5kZWQpIG9yaWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0
XHRyZXR1cm4gb3JpZ2luYWw7XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5c
blsnT2JqZWN0JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1
bWVudHMnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4v
LyBVbmlxdWUgSURcblxudmFyIFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3Vu
aXF1ZUlEJywgZnVuY3Rpb24oKXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7
XG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBBcnJheSBQcm90b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJv
dmlkZXM6IEFycmF5XG5cbi4uLlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1
PiovXG5cdGV2ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgIWZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0
aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1
ZSA9IHRoaXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJl
c3VsdHMucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5c
dGluZGV4T2Y6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aCA+Pj4gMDtcblx0XHRmb3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxl
bmd0aCArIGZyb20pIDogZnJvbSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5c
blx0bWFwOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3Ro
ID4+PiAwLCByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxs
KGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0
fSxcblxuXHRzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1
cm4gaXRlbSAhPSBudWxsO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0
aG9kTmFtZSl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRc
dHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhv
ZE5hbWVdLmFwcGx5KGl0ZW0sIGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTog
ZnVuY3Rpb24oa2V5cyl7XG5cdFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlz
Lmxlbmd0aCwga2V5cy5sZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIG9ialtrZXlzW2ldXSA9IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRs
aW5rOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtl
eSBpbiBvYmplY3Qpe1xuXHRcdFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0
XHRcdHJlc3VsdFtrZXldID0gdGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07
XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHJlc3VsdDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0
cmV0dXJuIHRoaXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLmxlbmd0aCkgPyB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5c
dGdldFJhbmRvbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNb
TnVtYmVyLnJhbmRvbSgwLCB0aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5j
bHVkZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlz
LnB1c2goaXRlbSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsg
aSsrKSB0aGlzLmluY2x1ZGUoYXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGVyYXNlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGkt
LTspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0
aGlzLmxlbmd0aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgYXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0p
O1xuXHRcdFx0aWYgKHR5cGUgPT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJy
YXkuY29uY2F0KCh0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlw
ZSA9PSAnYXJndW1lbnRzJyB8fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5m
bGF0dGVuKHRoaXNbaV0pIDogdGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0
fSxcblxuXHRwaWNrOiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRo
aXNbaV07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5j
dGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRc
dHZhciByZ2IgPSB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVu
Z3RoID09IDEpIHZhbHVlICs9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAx
Nik7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAn
KSc7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggPCAzKSByZXR1cm4gbnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlz
WzNdID09IDAgJiYgIWFycmF5KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0g
W107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0
aGlzW2ldIC0gMCkudG9TdHJpbmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0g
MSkgPyAnMCcgKyBiaXQgOiBiaXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6
ICcjJyArIGhleC5qb2luKCcnKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTog
RnVuY3Rpb25cblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlr
ZSBjcmVhdGUsIGJpbmQsIHBhc3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiov
XG5cbkZ1bmN0aW9uLmV4dGVuZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5
IHtcblx0XHRcdFx0cmV0dXJuIGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50
KHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0
cmV0dXJuIHRoaXMuYXBwbHkoYmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRj
aCAoZSl7fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5c
dGJpbmQ6IGZ1bmN0aW9uKHRoYXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3Mg
PSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxs
LFxuXHRcdFx0RiA9IGZ1bmN0aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7
XG5cdFx0XHR2YXIgY29udGV4dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5c
dFx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBz
ZWxmLnByb3RvdHlwZTtcblx0XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0
dmFyIHJlc3VsdCA9ICghYXJncyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250
ZXh0KVxuXHRcdFx0XHQ6IHNlbGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdz
LmNvbmNhdChBcnJheS5zbGljZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0
XHRcdHJldHVybiBjb250ZXh0ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5c
dFx0cmV0dXJuIGJvdW5kO1xuXHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVu
Y3Rpb24oYXJncywgYmluZCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9
IG51bGwpIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigp
e1xuXHRcdFx0cmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRc
dH07XG5cdH0sXG5cblx0ZGVsYXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRy
ZXR1cm4gc2V0VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJp
bmQpLCBkZWxheSk7XG5cdH0sXG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwg
YmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBu
dWxsID8gW10gOiBhcmdzKSwgYmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBOdW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQ
cm90b3R5cGVzIGxpa2UgbGltaXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVy
XG5cbi4uLlxuKi9cblxuTnVtYmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1p
biwgbWF4KXtcblx0XHRyZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtc
blx0fSxcblxuXHRyb3VuZDogZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBN
YXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVj
aXNpb24gOiAwKTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHBy
ZWNpc2lvbjtcblx0fSxcblxuXHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpczsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxu
XG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5c
dH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlz
LCBiYXNlIHx8IDEwKTtcblx0fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVz
Jyk7XG5cbihmdW5jdGlvbihtYXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNo
KGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNh
dChBcnJheS5jb252ZXJ0KGFyZ3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVt
ZW50KG1ldGhvZHMpO1xuXG59KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFu
MicsICdjZWlsJywgJ2NvcycsICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAn
cG93JywgJ3NpbicsICdzcXJ0JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNl
LCBjYXBpdGFsaXplLCB0ZXN0LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4u
LlxuKi9cblxuU3RyaW5nLmltcGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1
bmN0aW9uKHN0cmluZywgaW5kZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcyku
c2xpY2UoaW5kZXgpIDogU3RyaW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxc
blx0Ly88LyFFUzY+XG5cblx0dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0
dXJuICgodHlwZU9mKHJlZ2V4KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycg
KyByZWdleCwgcGFyYW1zKSkudGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xu
XHR9LFxuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVw
bGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1h
dGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9
KTtcblx0fSxcblxuXHRoeXBoZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0
aGlzKS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCct
JyArIG1hdGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRj
YXBpdGFsaXplOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgv
XFxiW2Etel0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJD
YXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0p
L2csICdcXFxcJDEnKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0
dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8o
XFx3ezEsMn0pKFxcd3sxLDJ9KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4
LnNsaWNlKDEpLmhleFRvUmdiKGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1
bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwz
fS9nKTtcblx0XHRyZXR1cm4gKHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0
fSxcblxuXHRzdWJzdGl0dXRlOiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyks
IGZ1bmN0aW9uKG1hdGNoLCBuYW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xc
XFwnKSByZXR1cm4gbWF0Y2guc2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAh
PSBudWxsKSA/IG9iamVjdFtuYW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBCcm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmpl
Y3QuIENvbnRhaW5zIEJyb3dzZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQs
IGFuZCB0aGUgQnJvd3NlciBIYXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFtBcnJheSwgRnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczog
W0Jyb3dzZXIsIFdpbmRvdywgRG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2lu
ZG93ID0gdGhpcztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEg
PSB1YS50b0xvd2VyQ2FzZSgpO1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRv
TG93ZXJDYXNlKCkgOiAnJyk7XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdl
IFVBLCBzbyBuZWVkIHRvIGNoZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tp
bmcgaWYgaXQncyBjaHJvbWUuXG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0o
W1xcd1xcZFxcLl0rKS8pO1xuXHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8
aWV8ZmlyZWZveHxjaHJvbWV8dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxk
XFwuXSspPy4qPyhzYWZhcml8KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xc
ZFxcLl0rKXwkKS8pIHx8IFtudWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFd
ID09ICd0cmlkZW50Jyl7XG5cdFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0g
PSBVQVs0XTtcblx0fSBlbHNlIGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdj
aHJvbWUnO1xuXHR9XG5cblx0cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8p
ID8gJ2lvcycgOiAodWEubWF0Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21h
Y3x3aW58bGludXgvKSB8fCBbJ290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicp
IHBsYXRmb3JtID0gJ3dpbmRvd3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlv
bi5wcm90b3R5cGUuZXh0ZW5kLFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFb
M10gOiBVQVsxXSxcblx0XHR2ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYm
IFVBWzRdKSA/IFVBWzRdIDogVUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xu
fTtcblxudmFyIEJyb3dzZXIgPSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFn
ZW50LCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYg
ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9j
dW1lbnRNb2RlO1xufVxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBh
dGg6ICEhKGRvY3VtZW50LmV2YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxc
blx0XHRxdWVyeTogISEoZG9jdW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2lu
ZG93LkpTT04pXG5cdH0sXG5cdHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3Rc
blxuQnJvd3Nlci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwyID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1M
Mi5YTUxIVFRQJyk7XG5cdH07XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0
dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0
dXJuIFhNTEhUVFA7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJu
IE1TWE1MMjtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hN
TDtcblx0fSk7XG5cbn0pKCk7XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5S
ZXF1ZXN0KTtcblxuXG5cbi8vIFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0
aW9uKHRleHQpe1xuXHRpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNT
Y3JpcHQpe1xuXHRcdHdpbmRvdy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZh
ciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQu
c2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0
ID0gdGV4dDtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9j
dW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtc
blxuU3RyaW5nLmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZh
ciBzY3JpcHRzID0gJyc7XG5cdHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+
KFtcXHNcXFNdKj8pPFxcL3NjcmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2Ny
aXB0cyArPSBjb2RlICsgJ1xcbic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMg
PT09IHRydWUpIEJyb3dzZXIuZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMp
ID09ICdmdW5jdGlvbicpIGV4ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7
XG5cbi8vIFdpbmRvdywgRG9jdW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDog
dGhpcy5Eb2N1bWVudCxcblx0V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5F
bGVtZW50LFxuXHRFdmVudDogdGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4k
Y29uc3RydWN0b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4k
ZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWly
cm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0p
O1xuXG50aGlzLkRvY3VtZW50ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0Rv
Y3VtZW50JywgZnVuY3Rpb24oKXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNv
bnZlcnQoJ2RvY3VtZW50JykuaGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFt
ZSwgbWV0aG9kKXtcblx0ZG9jdW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQu
aHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9j
dW1lbnQuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5c
bmlmIChkb2N1bWVudC5leGVjQ29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J0JhY2tncm91bmRJbWFnZUNhY2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4v
KjxsdElFOT4qL1xuaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5l
cil7XG5cdHZhciB1bmxvYWRFdmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVu
dCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50
Lmh0bWwgPSBkb2N1bWVudC53aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93
ID0gZG9jdW1lbnQgPSBudWxsO1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcs
IHVubG9hZEV2ZW50KTtcbn1cblxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxl
Y3Q+Lm9wdGlvbnMgKHJlZmVycyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5j
b252ZXJ0O1xudHJ5IHtcblx0YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59
IGNhdGNoIChlKXtcblx0QXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0
eXBlb2YgaXRlbSAhPSAnc3RyaW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBl
T2YoaXRlbSkgIT0gJ2FycmF5Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9
IG5ldyBBcnJheShpKTtcblx0XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0
XHRcdHJldHVybiBhcnJheTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0
fTtcblxuXHR2YXIgcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJv
dG90eXBlLnNsaWNlO1xuXHRbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2go
ZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRB
cnJheVtuYW1lXSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShB
cnJheS5jb252ZXJ0KGl0ZW0pLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5c
dH0pO1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENs
YXNzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2ls
eSBjcmVhdGluZywgZXh0ZW5kaW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJp
bmcsIEZ1bmN0aW9uLCBOdW1iZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG52YXIgQ2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywg
ZnVuY3Rpb24ocGFyYW1zKXtcblx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBh
cmFtcyA9IHtpbml0aWFsaXplOiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9u
KCl7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBu
dWxsO1xuXHRcdHZhciB2YWx1ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXpl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMu
Y2FsbGVyID0gbnVsbDtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxl
bWVudChwYXJhbXMpO1xuXG5cdG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3Rv
dHlwZS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBw
YXJlbnQgPSBmdW5jdGlvbigpe1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9y
KCdUaGUgbWV0aG9kIFwicGFyZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUg
PSB0aGlzLiRjYWxsZXIuJG5hbWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5w
YXJlbnQsXG5cdFx0cHJldmlvdXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0g
OiBudWxsO1xuXHRpZiAoIXByZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCIn
ICsgbmFtZSArICdcIiBoYXMgbm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xu
XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0
XHR2YXIgRiA9IGZ1bmN0aW9uKCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0
XHRcdFx0b2JqZWN0W2tleV0gPSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0
Y2FzZSAnYXJyYXknOiBvYmplY3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1c
blx0fVxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBr
ZXksIG1ldGhvZCl7XG5cdGlmIChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmln
aW47XG5cdHZhciB3cmFwcGVyID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0
ZWQgJiYgdGhpcy4kY2FsbGVyID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBc
IicgKyBrZXkgKyAnXCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhp
cy5jYWxsZXIsIGN1cnJlbnQgPSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJy
ZW50OyB0aGlzLiRjYWxsZXIgPSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNh
bGxlciA9IGNhbGxlcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBz
ZWxmLCAkb3JpZ2luOiBtZXRob2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59
O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYg
KENsYXNzLk11dGF0b3JzLmhhc093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3Mu
TXV0YXRvcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkg
cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtc
blx0XHRpZiAodmFsdWUuJGhpZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVb
a2V5XSA9IChyZXRhaW4pID8gdmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVs
c2Uge1xuXHRcdE9iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1c
blxuXHRyZXR1cm4gdGhpcztcbn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNz
KXtcblx0a2xhc3MuJHByb3RvdHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNz
O1xuXHRkZWxldGUga2xhc3MuJHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5D
bGFzcy5pbXBsZW1lbnQoJ2ltcGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtc
blxuQ2xhc3MuTXV0YXRvcnMgPSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0
XHR0aGlzLnBhcmVudCA9IHBhcmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNl
KHBhcmVudCk7XG5cdH0sXG5cblx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFy
cmF5LmNvbnZlcnQoaXRlbXMpLmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFu
Y2UgPSBuZXcgaXRlbTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50
LmNhbGwodGhpcywga2V5LCBpbnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0
fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIFV0aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBp
bnRvIHlvdXIgb3duIENsYXNzZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9u
IHRhc2tzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4u
Li5cbiovXG5cbihmdW5jdGlvbigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQk
Y2hhaW46IFtdLFxuXG5cdGNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVu
ZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNhbGxDaGFpbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkg
PyB0aGlzLiRjaGFpbi5zaGlmdCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0
fSxcblxuXHRjbGVhckNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9u
KHN0cmluZyl7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9u
KGZ1bGwsIGZpcnN0KXtcblx0XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59
O1xuXG50aGlzLkV2ZW50cyA9IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRk
RXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9u
KHR5cGUpO1xuXG5cdFx0XG5cblx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRz
W3R5cGVdIHx8IFtdKS5pbmNsdWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFs
ID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9u
KGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlw
ZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6
IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7
XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykg
cmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRz
LmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhp
cywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlz
LiRldmVudHNbdHlwZV07XG5cdFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0
dmFyIGluZGV4ID0gZXZlbnRzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBk
ZWxldGUgZXZlbnRzW2luZGV4XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0
eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0
aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztc
blx0XHR9XG5cdFx0aWYgKGV2ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRm
b3IgKHR5cGUgaW4gdGhpcy4kZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9
IHR5cGUpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0
XHRcdGZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0
XHR0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5c
dHNldE9wdGlvbnM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMg
PSBPYmplY3QubWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1
bWVudHMpKTtcblx0XHRpZiAodGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlv
bnMpe1xuXHRcdFx0aWYgKHR5cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwg
ISgvXm9uW0EtWl0vKS50ZXN0KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVu
dChvcHRpb24sIG9wdGlvbnNbb3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25d
O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0t
LVxuXG5uYW1lOiBDbGFzcy5UaGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGls
aXR5IENsYXNzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0
byBtYWtlIHRoZW0gXCJ0aGVuYWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVM
RklMTEVEID0gMSxcblx0U1RBVEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFz
cy5UaGVuYWJsZSA9IG5ldyBDbGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJ
TkcsXG5cdCR0aGVuYWJsZVJlc3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxc
blxuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xu
XHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dFRoZW5hYmxlU3RhdGU6IGZ1bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0
YXRlKXtcblx0XHRcdGNhc2UgU1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5n
JztcblxuXHRcdFx0Y2FzZSBTVEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmls
bGVkJztcblxuXHRcdFx0Y2FzZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWpl
Y3RlZCc7XG5cdFx0fVxuXHR9LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7
XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQp
e1xuXHRcdGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVk
ID0gJ0lkZW50aXR5Jztcblx0XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicp
IG9uUmVqZWN0ZWQgPSAnVGhyb3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFi
bGUoKTtcblxuXHRcdHRoaXMuJHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFi
bGU6IHRoZW5hYmxlLFxuXHRcdFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0
cmVqZWN0SGFuZGxlcjogb25SZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5h
YmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxu
XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVq
ZWN0ZWQpe1xuXHRcdHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxu
fSk7XG5cblRoZW5hYmxlLmV4dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHR2YXIgdGhlbmFibGU7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRc
dFx0dGhlbmFibGUgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcg
VGhlbmFibGUoKTtcblx0XHRcdHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFz
b24pO1xuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rp
b25zXG5cbmZ1bmN0aW9uIHJlc29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09
IHZhbHVlKXtcblx0XHRcdHJlamVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8g
cmVzb2x2ZSBhIHRoZW5hYmxlIHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVl
ICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0
aW9uJykpe1xuXHRcdFx0dmFyIHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFs
dWUudGhlbjtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVu
YWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0XHRcdHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihm
dW5jdGlvbigpe1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0
XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRc
dFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQg
PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtc
blx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0
aW9uKHJlYXNvbil7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0
XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFi
bGUsIHJlYXNvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRc
dFx0XHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAo
IXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0
XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUs
IHZhbHVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwg
dmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1
ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPSBTVEFURV9GVUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1c
bn1cblxuZnVuY3Rpb24gcmVqZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IHJlYXNvbjtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JF
SkVDVEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0
KHRoZW5hYmxlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5E
SU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFj
dCh0aGVuYWJsZSl7XG5cdHZhciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRc
dHJlc3VsdCA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVu
YWJsZS4kdGhlbmFibGVSZWFjdGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNU
QVRFX0ZVTEZJTExFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5c
dFx0dHlwZSA9ICdmdWxmaWxsSGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVf
UkVKRUNURUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5
cGUgPSAncmVqZWN0SGFuZGxlcic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFu
ZGxlLnBhc3MoW3Jlc3VsdCwgcmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9u
IGhhbmRsZShyZXN1bHQsIHJlYWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0g
cmVhY3Rpb25zLmxlbmd0aDsgaSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rp
b25zW2ldLFxuXHRcdFx0aGFuZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRs
ZXIgPT09ICdJZGVudGl0eScpe1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVz
dWx0KTtcblx0XHR9IGVsc2UgaWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWpl
Y3QocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5c
dFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlm
ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRp
Y2sgPT09ICdmdW5jdGlvbicpe1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2Ug
aWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJ
bW1lZGlhdGU7XG59IGVsc2Uge1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1l
b3V0KGZuLCAwKTtcblx0fTtcbn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3Rc
blxuZGVzY3JpcHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNo
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJz
ZXQ6IGZ1bmN0aW9uKG9iamVjdCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBr
ID0ga2V5c1tpXTtcblx0XHRcdGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtr
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihv
YmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0g
T2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBm
bi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biByZXN1bHRzO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVj
dCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZh
ciBrZXkgPSBrZXlzW2ldLCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwo
YmluZCwgdmFsdWUsIGtleSwgb2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZu
LCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2
YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ld
O1xuXHRcdFx0aWYgKCFmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9
IGtleXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0
dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2td
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0
aW9uKG9iamVjdCl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9
LFxuXG5cdGtleU9mOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9i
amVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsg
aSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09
PSB2YWx1ZSkgcmV0dXJuIGtleTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0
Y29udGFpbnM6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5
T2Yob2JqZWN0LCB2YWx1ZSkgIT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5j
dGlvbihvYmplY3QsIGJhc2Upe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2Jq
ZWN0LmVhY2gob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBr
ZXkgPSBiYXNlICsgJ1snICsga2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3
aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJy
YXknOlxuXHRcdFx0XHRcdHZhciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rp
b24odmFsLCBpKXtcblx0XHRcdFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRc
dFx0XHRcdHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklD
b21wb25lbnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5
U3RyaW5nLnB1c2gocmVzdWx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5q
b2luKCcmJyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5QYXJzZXJcbmRlc2NyaXB0aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5w
cm92aWRlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBh
cnNlZCxcblx0c2VwYXJhdG9ySW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQs
XG5cdGNhY2hlID0ge30sXG5cdHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xc
XFwvZztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5c
dGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5T
bGljayA9PT0gdHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBl
eHByZXNzaW9uKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFp
c1JldmVyc2VkO1xuXHR2YXIgY3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNo
ZSA6IGNhY2hlO1xuXHRpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVu
dENhY2hlW2V4cHJlc3Npb25dO1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0
ZXhwcmVzc2lvbnM6IFtdLFxuXHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5j
dGlvbigpe1xuXHRcdFx0cmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07
XG5cdHNlcGFyYXRvckluZGV4ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNz
aW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVu
Z3RoID0gcGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtw
YXJzZWQucmF3XSA9IChyZXZlcnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xu
XG52YXIgcmV2ZXJzZUNvbWJpbmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNv
bWJpbmF0b3IgPT09ICchJykgcmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0g
JyAnKSByZXR1cm4gJyEnO1xuXHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0
dXJuIGNvbWJpbmF0b3IucmVwbGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNv
bWJpbmF0b3I7XG59O1xuXG52YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2
YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0g
MDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lv
bnNbaV07XG5cdFx0dmFyIGxhc3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjog
cmV2ZXJzZUNvbWJpbmF0b3IoZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGog
PSAwOyBqIDwgZXhwLmxlbmd0aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRc
dFx0aWYgKCFjZXhwLnJldmVyc2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0g
JyAnO1xuXHRcdFx0Y2V4cC5jb21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0
XHRcdGRlbGV0ZSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZl
cnNlKCkucHVzaChsYXN0KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBl
c2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAo
YykgMjAwNy0yMDA4IFN0ZXZlbiBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9y
ZWdleC94cmVnZXhwLz4gTUlUIExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtc
XF17fSgpKis/LlxcXFxeJHwsI1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAn
XFxcXCcgKyBtYXRjaDtcblx0fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8q
XG4jIS91c3IvYmluL2VudiBydWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1Yigv
XFwoXFw/eFxcKXxcXHMrIy4qJHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIo
P3gpXig/OlxcXG5cdCAgXFxcXHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJh
dG9yICAgICAgICAgIFxcblxcXG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAg
ICMgQ29tYmluYXRvciAgICAgICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAg
ICAgICAgICAjIENvbWJpbmF0b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4r
IHwgXFxcXCogKSAgICAgIyBUYWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8
dW5pY29kZT4rICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxc
XC4gICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxu
XHR8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxc
blxcXG5cdFxcXFxbICBcXFxuXHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0
XHRcXFxccyogKFsqXiQhfnxdPz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRc
dFx0XHRcdChbXFxcIiddPykoLio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxc
blx0XHQpPyAgXFxcXHMqICBcXFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8
dW5pY29kZT4rICkoPzpcXFxuXHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwx
Ml0qKVxcXFwxMil8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxc
blx0KT9cXFxuXHQpXCJcbiovXG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJp
bmF0b3I+KylcXFxccyp8KFxcXFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2Rl
PispfFxcXFwuKDx1bmljb2RlPispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihb
Kl4kIX58XT89KSg/OlxcXFxzKig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxd
KD8hXFxcXF0pfCg6KykoPHVuaWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwx
M10qKVxcXFwxMyl8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQu
cmVwbGFjZSgvPGNvbWJpbmF0b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9
XFxcXDs8LycpICsgJ10nKVxuXHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxc
dTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgv
PHVuaWNvZGUxPi9nLCAnKD86WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG4pO1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5c
dHNlcGFyYXRvcixcblx0Y29tYmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRh
Z05hbWUsXG5cdGlkLFxuXHRjbGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1
dGVPcGVyYXRvcixcblx0YXR0cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBz
ZXVkb01hcmtlcixcblx0cHNldWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFz
c1F1b3RlZFZhbHVlLFxuXHRwc2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8
IHNlcGFyYXRvckluZGV4ID09PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJh
dG9ySW5kZXhdID0gW107XG5cdFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFy
YXRvcikgcmV0dXJuICcnO1xuXHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNo
aWxkcmVuIHx8IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21i
aW5hdG9yIHx8ICcgJztcblx0XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNz
aW9uc1tzZXBhcmF0b3JJbmRleF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0
b3JbY29tYmluYXRvckluZGV4XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvcklu
ZGV4XS5yZXZlcnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xu
XHRcdGN1cnJlbnRTZXBhcmF0b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNv
bWJpbmF0b3IsIHRhZzogJyonfTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2Vk
LmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0
YWdOYW1lKXtcblx0XHRjdXJyZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNj
YXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlk
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0
XHRjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRp
ZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtd
O1xuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0
Y3VycmVudFBhcnNlZC5jbGFzc2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0
XHRcdHJlZ2V4cDogbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05h
bWUpICsgJyhcXFxcc3wkKScpXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7
XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NR
dW90ZWRWYWx1ZTtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBz
ZXVkb0NsYXNzVmFsdWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYg
KCFjdXJyZW50UGFyc2VkLnBzZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRc
dGN1cnJlbnRQYXJzZWQucHNldWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVw
bGFjZShyZVVuZXNjYXBlLCAnJyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0
XHRcdHR5cGU6IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdc
blx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5
ID0gYXR0cmlidXRlS2V5LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZh
bHVlID0gKGF0dHJpYnV0ZVZhbHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxu
XHRcdHZhciB0ZXN0LCByZWdleHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtc
blx0XHRcdGNhc2UgJ149JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBl
UmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAn
JD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmli
dXRlVmFsdWUpICsnJCcgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAg
PSBuZXcgUmVnRXhwKCAnKF58XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAr
JyhcXFxcc3wkKScgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVn
RXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICAp
OyBicmVhaztcblx0XHRcdGNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnKj0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZh
bHVlICYmIHZhbHVlLmluZGV4T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVh
aztcblx0XHRcdGNhc2UgJyE9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJl
dHVybiBhdHRyaWJ1dGVWYWx1ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVm
YXVsdCAgIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7
XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15b
KiReXT0kLykudGVzdChhdHRyaWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRc
dFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRc
dH07XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5h
dHRyaWJ1dGVzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRc
dFx0a2V5OiBhdHRyaWJ1dGVLZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3Is
XG5cdFx0XHR2YWx1ZTogYXR0cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7
XG5cblx0fVxuXG5cdHJldHVybiAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9
ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0cmV0dXJuIHBhcnNlKGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhw
ID0gZXNjYXBlUmVnRXhwO1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztc
blxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcp
ID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5GaW5kZXJcbmRlc2NyaXB0aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVu
Z2luZS5cbnByb3ZpZGVzOiBTbGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4u
LlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNo
ZSA9IHt9LFxuXHR0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZl
YXR1cmUgLyBCdWcgZGV0ZWN0aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZu
KXtcblx0cmV0dXJuICgvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycg
KyBmbik7XG59O1xuXG5sb2NhbC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJu
ICghIWRvY3VtZW50LnhtbFZlcnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5n
LmNhbGwoZG9jdW1lbnQpID09ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVu
dC5ub2RlVHlwZSA9PSA5ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAn
SFRNTCcpO1xufTtcblxubG9jYWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5c
blx0Ly8gY29udmVydCBlbGVtZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlm
IGRvY3VtZW50IGNhbm5vdCBiZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxu
XHR2YXIgbm9kZVR5cGUgPSBkb2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkp
OyAvLyBkb2N1bWVudFxuXHRlbHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5v
d25lckRvY3VtZW50OyAvLyBub2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9j
dW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5c
dC8vIGNoZWNrIGlmIGl0J3MgdGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50
ID09PSBkb2N1bWVudCkgcmV0dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0
Ly8gY2hlY2sgaWYgd2UgaGF2ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1l
bnQgYmVmb3JlXG5cblx0dmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0
cm9vdFVpZCA9IHRoaXMuZ2V0VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXND
YWNoZVtyb290VWlkXSxcblx0XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9y
IChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tm
ZWF0dXJlXTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJl
c0NhY2hlW3Jvb3RVaWRdID0ge307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1
cmVzLmlzWE1MRG9jdW1lbnQgPSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5i
cm9rZW5TdGFyR0VCVE5cblx0PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZl
YXR1cmVzLmlkR2V0c05hbWVcblx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5HRUJDTlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3Vt
ZW50XG5cdD0gZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0
dmFyIHN0YXJTZWxlY3RzQ2xvc2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNl
Y29uZENsYXNzTmFtZUdFQkNOLCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJy
b2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191
bmlxdWVpZCc7XG5cdHZhciB0ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
O1xuXG5cdHZhciB0ZXN0Um9vdCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2JvZHknKVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0
ZXN0Tm9kZSk7XG5cblx0Ly8gb24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0
RWxlbWVudHNCeUlkIGRvZXNudCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJzxhIGlkPVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1M
RG9jdW1lbnQgPSAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7
fVxuXG5cdGlmIChmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZv
ciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3RO
b2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2Vs
ZWN0c0NvbW1lbnRzID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3Ro
ID4gMSk7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikg
Zm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5
IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0
ZWQgPSB0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVj
dHNDbG9zZWQgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0u
bm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZl
YXR1cmVzLmJyb2tlblN0YXJHRUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVj
dHNDbG9zZWQ7XG5cblx0XHQvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5z
dGVhZCBvZiBqdXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5c
dFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydc
Ij48L2E+PGIgaWQ9XCInKyBpZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFt
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtc
blx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSl7XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNo
ZXMgcmVzdWx0c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxh
IGNsYXNzPVwiZlwiPjwvYT48YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmly
c3RDaGlsZC5jbGFzc05hbWUgPSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFz
c05hbWUgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAy
KTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50
c0J5Q2xhc3NOYW1lIGRvZXNudCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJz
dCBvbmVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFz
cz1cImFcIj48L2E+PGEgY2xhc3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNv
bmRDbGFzc05hbWVHRUJDTiA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJyku
bGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9r
ZW5HRUJDTiA9IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xh
c3NOYW1lR0VCQ047XG5cdFx0fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwp
e1xuXHRcdFx0Ly8gSUUgOCByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9y
IHF1ZXJ5U2VsZWN0b3JBbGwoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5c
dFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3Rl
ZCA9IHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3Rh
clNlbGVjdHNDbG9zZWRRU0EgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2Vs
ZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRo
IG1peGVkY2FzZSBvbiBxdWlya3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5p
bm5lckhUTUwgPSAnPGEgY2xhc3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuTWl4ZWRDYXNlUVNBID0gIXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5n
dGg7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9u
dCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkg
e1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVk
PVwic2VsZWN0ZWRcIj5hPC9vcHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuQ2hlY2tlZFFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxl
bmd0aCA9PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMg
aW5jb3JyZWN0IHJlc3VsdHMgZm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNl
bGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEg
Y2xhc3M9XCJcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVR
U0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAh
PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBh
IGZvcm0gaGFzIGFuIGlucHV0IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMg
YSByZWZlcmVuY2UgdG8gdGhlIGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8Zm9ybSBhY3Rpb249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4n
O1xuXHRcdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxk
LmdldEF0dHJpYnV0ZSgnYWN0aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0
XHQvLyBuYXRpdmUgbWF0Y2hlc1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRp
dmVNYXRjaGVzU2VsZWN0b3IgPSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVj
dG9yIHx8Ki8gcm9vdC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2Vs
ZWN0b3I7XG5cdFx0aWYgKGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0
XHRcdC8vIGlmIG1hdGNoZXNTZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRh
eGVzIHdlIGNhbiB1c2UgaXRcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5j
YWxsKHJvb3QsICc6c2xpY2snKTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ciA9IG51bGw7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Qu
c2xpY2tfZXhwYW5kbyA9IDE7XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRm
ZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZl
YXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3Zl
Q2hpbGQodGVzdE5vZGUpO1xuXHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxs
O1xuXG5cdC8vIGdldEF0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0
dXJlcy5pc0hUTUxEb2N1bWVudCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0
aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNb
bmFtZV07XG5cdFx0aWYgKG1ldGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZh
ciBhdHRyaWJ1dGVOb2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVy
biAoYXR0cmlidXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0g
OiBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVH
ZXR0ZXJzW25hbWVdO1xuXHRcdHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDog
bm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuaGFzQXR0cmlidXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5o
YXNBdHRyaWJ1dGUpKSA/IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5v
ZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1
dGUpe1xuXHRcdG5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRy
ZXR1cm4gISEobm9kZSAmJiAobm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0
fTtcblxuXHQvLyBjb250YWluc1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlu
cyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIg
bmF0aXZlUm9vdENvbnRhaW5zID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRh
aW5zKSxcblx0XHRuYXRpdmVEb2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05h
dGl2ZUNvZGUoZG9jdW1lbnQuY29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5h
dGl2ZVJvb3RDb250YWlucyAmJiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNv
bnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDog
KG5hdGl2ZVJvb3RDb250YWlucyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlv
bihjb250ZXh0LCBub2RlKXtcblx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24g
ZG9jdW1lbnQuXG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBk
b2N1bWVudCkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhu
b2RlKTtcblx0fSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVu
Y3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEo
Y29udGV4dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0
aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9
PT0gY29udGV4dCkgcmV0dXJuIHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVu
dE5vZGUpKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIg
c29ydGluZ1xuXHQvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5c
blx0ZmVhdHVyZXMuZG9jdW1lbnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24g
fHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9
IDogKCdzb3VyY2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEu
c291cmNlSW5kZXggfHwgIWIuc291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNv
dXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkg
PyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRv
Y3VtZW50KSByZXR1cm4gMDtcblx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0
ZVJhbmdlKCksIGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFS
YW5nZS5zZXRTdGFydChhLCAwKTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5n
ZS5zZXRTdGFydChiLCAwKTtcblx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBh
UmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtc
blx0fSA6IG51bGw7XG5cblx0cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5c
bi8vIE1haW4gTWV0aG9kXG5cbnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/Oltc
XHctXSt8XFwqKSkkLyxcblx0cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8
JycpP1xcXS8sXG5cdHFzYUZhaWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5j
dGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQg
PSB0aGlzLmZvdW5kID0gKGZpcnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAo
IWNvbnRleHQpIHJldHVybiBmb3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNv
bnRleHQgPSBjb250ZXh0LmRvY3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5k
b3cgdG8gYSBkb2N1bWVudFxuXHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZv
dW5kO1xuXG5cdC8vIHNldHVwXG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0
dW5pcXVlcyA9IHRoaXMudW5pcXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAm
JiBhcHBlbmQubGVuZ3RoKSxcblx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVU
eXBlID09IDkpO1xuXG5cdGlmICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQg
PyBjb250ZXh0IDogY29udGV4dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250
ZXh0KTtcblxuXHQvLyBhdm9pZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBl
bmQgYXJyYXlcblx0aWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1
bmlxdWVzW3RoaXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24g
Y2hlY2tzXG5cblx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVz
c2lvbiBpcyBhIHN0cmluZ1xuXG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xu
XHRcdHZhciBzaW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rv
cik7XG5cdFx0c2ltcGxlU2VsZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2
YXIgc3ltYm9sID0gc2ltcGxlU2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxl
Y3RvclsyXTtcblxuXHRcdFx0aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcq
JyAmJiB0aGlzLmJyb2tlblN0YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0
XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlm
IChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0
XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxE
b2N1bWVudCB8fCAhY29udGV4dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0
XHRcdFx0bm9kZSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICgh
bm9kZSkgcmV0dXJuIGZvdW5kO1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUu
Z2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2Vs
ZWN0b3JzO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRc
dGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1
c2gobm9kZSk7XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0
aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSB8fCB0aGlzLmJyb2tlbkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0
dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVz
W2krK107KXtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0
VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVs
c2Uge1xuXHRcdFx0XHRcdHZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysg
U2xpY2suZXNjYXBlUmVnRXhwKG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMg
PSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0g
MDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xh
c3NOYW1lO1xuXHRcdFx0XHRcdFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChj
bGFzc05hbWUpKSkgY29udGludWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rl
O1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IChmaXJzdCkgPyBudWxsIDogZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3Rv
cnMtb3ZlcnJpZGU+Ki9cblxuXHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0
cXVlcnlTZWxlY3RvcjogaWYgKGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlm
ICghdGhpcy5pc0hUTUxEb2N1bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVz
c2lvbl1cblx0XHRcdFx0Ly9UT0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVh
bGx5IG1peGVkIGNhc2Vcblx0XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuQ2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVj
a2VkJykgPiAtMSlcblx0XHRcdFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYg
cmVFbXB0eUF0dHJpYnV0ZS50ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJ
c0RvY3VtZW50IC8vQWJvcnQgd2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRc
dFx0Ly8gIHRoZXJlIGFyZSBtdWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0
XHRcdFx0XHQvLyAgc2luY2Ugd2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290
ZWQgUVNBIGZvciBzaW5nbGUgZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHBy
ZXNzaW9uLmluZGV4T2YoJywnKSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlz
YWJsZVFTQVxuXHRcdFx0KSBicmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJl
c3Npb24gPSBleHByZXNzaW9uLCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRc
dGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVk
IFFTQVxuXHRcdFx0XHQvLyBjcmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVu
dElkID0gX2NvbnRleHQuZ2V0QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7
XG5cdFx0XHRcdF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0
X2V4cHJlc3Npb24gPSAnIycgKyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRc
dGNvbnRleHQgPSBfY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Np
b24pIHx8IG51bGw7XG5cdFx0XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwoX2V4cHJlc3Npb24pO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBD
YWNoZVtleHByZXNzaW9uXSA9IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0
XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0
XHRpZiAoY3VycmVudElkKSBfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtc
blx0XHRcdFx0XHRlbHNlIF9jb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0
XHRjb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRo
aXMuc3RhclNlbGVjdHNDbG9zZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1
ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBm
b3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMg
JiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5c
dFx0cGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNl
ZC5sZW5ndGgpIHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwp
eyAvLyB0aGVyZSBpcyBubyBleHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2Ug
aWYgKGV4cHJlc3Npb24uU2xpY2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9i
amVjdFxuXHRcdHBhcnNlZCA9IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlu
cyhjb250ZXh0LmRvY3VtZW50RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4
cHJlc3Npb24gaXMgYSBub2RlXG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikg
OiBmb3VuZCA9IGV4cHJlc3Npb247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBv
dGhlciBqdW5rXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9y
IHRoZSBudGggc2VsZWN0b3JzXG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhM
YXN0ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0
ID0ge307XG5cblx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3Rv
cnM+Ki9cblxuXHQvLyBpZiBhcHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmds
ZSBzZWxlY3RvciB3aXRoIG9uZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1
c2hVSURcblx0dGhpcy5wdXNoID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVu
Z3RoID09IDEgJiYgcGFyc2VkLmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5w
dXNoQXJyYXkgOiB0aGlzLnB1c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0g
W107XG5cblx0Ly8gZGVmYXVsdCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJp
bmF0b3IsIHRhZywgaWQsIGNsYXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztc
blx0dmFyIGN1cnJlbnRJdGVtcywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RC
aXQsIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChp
ID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9
IDA7IChjdXJyZW50Qml0ID0gY3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29t
YmluYXRvciA9ICdjb21iaW5hdG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYg
KCF0aGlzW2NvbWJpbmF0b3JdKSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0g
KHRoaXMuaXNYTUxEb2N1bWVudCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRv
VXBwZXJDYXNlKCk7XG5cdFx0aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NM
aXN0ICA9IGN1cnJlbnRCaXQuY2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0
LmNsYXNzZXM7XG5cdFx0YXR0cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRw
c2V1ZG9zICAgID0gY3VycmVudEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0g
KGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9
IHt9O1xuXG5cdFx0aWYgKGxhc3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztc
blx0XHRcdHRoaXMuZm91bmQgPSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlx
dWVzID0ge307XG5cdFx0XHR0aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09
IDApe1xuXHRcdFx0dGhpc1tjb21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RC
aXQgJiYgZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlm
IChmaXJzdCAmJiBsYXN0Qml0KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKyl7XG5cdFx0XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0
XHRpZiAoZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0g
MCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0o
Y3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBj
bGFzc0xpc3QpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1c
blxuXHQvLyBzaG91bGQgc29ydCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5
b3UgcGFzcyBtdWx0aXBsZSBleHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2Vk
LmV4cHJlc3Npb25zLmxlbmd0aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAo
Zmlyc3QpID8gKGZvdW5kWzBdIHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5s
b2NhbC51aWR4ID0gMTtcbmxvY2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5n
ZXRVSURYTUwgPSBmdW5jdGlvbihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRl
KHRoaXMudWlkayk7XG5cdGlmICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRu
b2RlLnNldEF0dHJpYnV0ZSh0aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07
XG5cbmxvY2FsLmdldFVJREhUTUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5p
cXVlTnVtYmVyIHx8IChub2RlLnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8v
IHNvcnQgYmFzZWQgb24gdGhlIHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxu
bG9jYWwuc29ydCA9IGZ1bmN0aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0
ZXIpIHJldHVybiByZXN1bHRzO1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7
XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1w
c2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNo
TlRIID0gL14oWystXT9cXGQqKT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJz
ZU5USEFyZ3VtZW50ID0gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1l
bnQubWF0Y2godGhpcy5tYXRjaE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5c
dHZhciBzcGVjaWFsID0gcGFyc2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8
fCAxO1xuXHRpZiAoYSA9PSAnLScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7
XG5cdHBhcnNlZCA9XG5cdFx0KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRc
dChzcGVjaWFsID09ICdvZGQnKVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdl
dmVuJylcdD8ge2E6IDIsIGI6IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5j
YWNoZU5USFthcmd1bWVudF0gPSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRv
ID0gZnVuY3Rpb24oY2hpbGQsIHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJu
IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9k
ZSk7XG5cdFx0aWYgKCF0aGlzW3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRc
dHZhciBlbCA9IHBhcmVudFtjaGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xu
XHRcdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0
XHRcdFx0aWYgKGVsLm5vZGVOYW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0
aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hp
bGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5c
dFx0XHRcdFx0aWYgKGVsLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNb
cG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAo
KGVsID0gZWxbc2libGluZ10pKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1
bWVudCB8fCAnbic7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8
IHRoaXMucGFyc2VOVEhBcmd1bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVy
biBmYWxzZTtcblx0XHR2YXIgYSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNb
cG9zaXRpb25zXVt1aWRdO1xuXHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRp
ZiAoYSA+IDApe1xuXHRcdFx0aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Ug
e1xuXHRcdFx0aWYgKGIgPCBwb3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgo
cG9zIC0gYikgJSBhKSA9PSAwO1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3Jz
PiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlz
Lm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cykpIHRoaXMuZm91bmQucHVzaChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMu
bWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KSl7XG5cdFx0dGhpcy51bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChu
b2RlKTtcblx0fVxufTtcblxubG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0
b3Ipe1xuXHRpZiAodGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3Rvcil7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ci5jYWxsKG5vZGUsIHNlbGVjdG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0r
PylcXHMqXFxdL2csICdbJDE9XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9
XG5cdH1cblxuXHR2YXIgcGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlm
ICghcGFyc2VkKSByZXR1cm4gdHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3Jz
XG5cdHZhciBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRl
ciA9IDAsIGksIGN1cnJlbnRFeHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJl
c3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCA9PSAxKXtcblx0XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0
XHRcdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBl
eHAudGFnIDogZXhwLnRhZy50b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAu
YXR0cmlidXRlcywgZXhwLnBzZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENv
dW50ZXIrKztcblx0XHR9XG5cdH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQu
bGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5k
b2N1bWVudCwgcGFyc2VkKSwgaXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107
KXtcblx0XHRpZiAoaXRlbSA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZh
bHNlO1xufTtcblxubG9jYWwubWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1
bWVudCl7XG5cdHZhciBwc2V1ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNb
cHNldWRvTmFtZV0pIHJldHVybiB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0
dmFyIGF0dHJpYnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4g
KGFyZ3VtZW50KSA/IGFyZ3VtZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxu
bG9jYWwubWF0Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhp
cy5pc1hNTERvY3VtZW50KSA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJD
YXNlKCk7XG5cdFx0aWYgKHRhZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSBy
ZXR1cm4gZmFsc2U7IC8vIEZpeCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdH1cblxuXHRpZiAoaWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJl
dHVybiBmYWxzZTtcblxuXHR2YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChp
ID0gY2xhc3Nlcy5sZW5ndGg7IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsICdjbGFzcycpO1xuXHRcdGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNs
cykpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJp
YnV0ZXMubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAo
cGFydC5vcGVyYXRvciA/ICFwYXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5r
ZXkpKSA6ICF0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtc
blx0fVxuXHRpZiAocHNldWRvcykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRc
dHBhcnQgPSBwc2V1ZG9zW2ldO1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0
LmtleSwgcGFydC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07
XG5cbnZhciBjb21iaW5hdG9ycyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBu
b2RlcywgYW55IGxldmVsXG5cblx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAo
dGhpcy5pc0hUTUxEb2N1bWVudCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRp
dGVtID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0
ZW0gJiYgbm9kZS5hbGwpIHx8ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0
dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lk
XSByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5v
ZGVcblx0XHRcdFx0XHQvLyBpZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVs
ZW1lbnQsIGVsc2UgaXQgd2lsbCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9
IG5vZGUuYWxsW2lkXTtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRc
dFx0aWYgKCFjaGlsZHJlblswXSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZv
ciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2Rl
ID0gaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAm
JiBpZE5vZGUubm9kZVZhbHVlID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0s
IHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5c
dFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4
dCBpcyBpbiB0aGUgZG9tIHdlIHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtp
bmcgdGhlIGdldEJ5SWQgbGFiZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJv
b3QsIG5vZGUpKSByZXR1cm47XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0
XHR9IGVsc2UgaWYgKHRoaXMuZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9k
ZSwgaXRlbSkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0
XHRcdGdldEJ5Q2xhc3M6IGlmIChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKGNsYXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGls
ZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBu
dWxsLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRnZXRCeVRhZzoge1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKHRhZyk7XG5cdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBi
cmVhayBnZXRCeVRhZztcblx0XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51
bGw7XG5cdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChp
dGVtLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0Jz4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gZGlyZWN0IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENo
aWxkKSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChu
b2RlID0gbm9kZS5uZXh0U2libGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9
PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBj
aGlsZFxuXHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0J34nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNp
YmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0
dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1
aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHR9XG5cdH0sXG5cblx0JysrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJs
aW5ncyBhbmQgcHJldmlvdXMgc2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21i
aW5hdG9yOiF+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyEnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKXsgLy8gYWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50
KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyE+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5c
blx0JyErJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZp
b3VzU2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7
XG5cdFx0fVxuXHR9LFxuXG5cdCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFz
dENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2li
bGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5n
ZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRc
dFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xu
XG5mb3IgKHZhciBjIGluIGNvbWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBj
b21iaW5hdG9yc1tjXTtcblxudmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qL1xuXG5cdCdlbXB0eSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUu
Zmlyc3RDaGlsZDtcblx0XHRyZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAm
JiAhKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0
fSxcblxuXHQnbm90JzogZnVuY3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0
aGlzLm1hdGNoTm9kZShub2RlLCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBm
dW5jdGlvbihub2RlLCB0ZXh0KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUu
dGV4dENvbnRlbnQgfHwgJycpLmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3Qt
Y2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3Vz
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBm
dW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0g
cHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFs
c2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNp
YmxpbmcpKSBpZiAobmV4dC5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywg
J3Bvc05USCcpLFxuXG5cdCdudGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygn
bGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1v
Zi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5n
JywgJ3Bvc05USFR5cGUnLCB0cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNy
ZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBl
TGFzdCcsIHRydWUpLFxuXG5cdCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRy
ZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xu
XHR9LFxuXG5cdCdldmVuJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVk
bzpudGgtY2hpbGQnXShub2RlLCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xu
XHR9LFxuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
LnByZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4g
ZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlw
ZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2Rl
Lm5vZGVOYW1lO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYg
KHByZXYubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9
IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5v
ZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0s
XG5cblx0Lyo8L29mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1
ZG9zXG5cblx0J2VuYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlz
YWJsZWQ7XG5cdH0sXG5cblx0J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
IG5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHRyZXR1cm4gbm9kZS5jaGVja2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3Vz
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhp
cy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50
eXBlIHx8IHRoaXMuaGFzQXR0cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQn
cm9vdCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtc
blx0fSxcblxuXHQnc2VsZWN0ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5z
ZWxlY3RlZDtcblx0fVxuXG5cdC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZh
ciBwIGluIHBzZXVkb3MpIGxvY2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8g
YXR0cmlidXRlcyBtZXRob2RzXG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmli
dXRlR2V0dGVycyA9IHtcblxuXHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1s
Rm9yJyBpbiB0aGlzKSA/IHRoaXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtc
blx0fSxcblxuXHQnaHJlZic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhp
cykgPyB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hy
ZWYnKTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5z
dHlsZSkgPyB0aGlzLnN0eWxlLmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtc
blx0fSxcblxuXHQndGFiaW5kZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2Rl
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH0sXG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldEF0dHJpYnV0ZSgndHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlv
bigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhM
ZW5ndGgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVj
aWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0
dHJpYnV0ZUdldHRlcnMuTUFYTEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9j
YWwuU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcn
O1xuXG4vLyBTbGljayBmaW5kZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwg
ZXhwcmVzc2lvbiwgYXBwZW5kKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQpO1xufTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4
cHJlc3Npb24pe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51
bGwsIHRydWUpO1xufTtcblxuLy8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5j
b250YWlucyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KGNvbnRhaW5lcik7XG5cdHJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xu
fTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBm
dW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVy
biBsb2NhbC5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1
dGUgPSBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5c
dHJldHVybiBsb2NhbC5oYXNBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBt
YXRjaGVyXG5cblNsaWNrLm1hdGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAo
IShub2RlICYmIHNlbGVjdG9yKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNl
bGVjdG9yID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7
XG5cdHJldHVybiBsb2NhbC5tYXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xp
Y2sgYXR0cmlidXRlIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1
bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xu
XHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0
aW9uKG5hbWUpe1xuXHRyZXR1cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5c
bi8vIFNsaWNrIHBzZXVkbyBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlv
bihuYW1lLCBmbil7XG5cdGxvY2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwg
YXJndW1lbnQpe1xuXHRcdHJldHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0
cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtc
blx0dmFyIHBzZXVkbyA9IGxvY2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSBy
ZXR1cm4gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBh
cmd1bWVudCk7XG5cdH07XG5cdHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVz
IGFjY2Vzc29yXG5cblNsaWNrLm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxv
Y2FsLm92ZXJyaWRlKHJlZ2V4cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlz
WE1MID0gbG9jYWwuaXNYTUw7XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJl
dHVybiBsb2NhbC5nZXRVSURIVE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlz
LlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRz
ICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBFbGVtZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1w
b3J0YW50IGl0ZW1zIGluIE1vb1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0
aGUgZG9sbGFycyBmdW5jdGlvbiwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGlt
ZS1zYXZlciBtZXRob2RzIHRvIGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRz
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERv
Y3VtZW50LCBBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBh
cnNlciwgU2xpY2suRmluZGVyXVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAk
JCwgSUZyYW1lLCBTZWxlY3RvcnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVs
ZW1lbnQgPSBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVu
dC5Db25zdHJ1Y3RvcnNbdGFnXTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0
b3IocHJvcHMpO1xuXHRpZiAodHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50
LmlkKHRhZykuc2V0KHByb3BzKTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlm
ICghKC9eW1xcdy1dKyQvKS50ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJz
ZSh0YWcpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykg
PyAnZGl2JyA6IHBhcnNlZC50YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBu
dWxsKSBwcm9wcy5pZCA9IHBhcnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2Vk
LmF0dHJpYnV0ZXM7XG5cdFx0aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBs
ID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0
ZXNbaV07XG5cdFx0XHRpZiAocHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5c
dFx0XHRpZiAoYXR0ci52YWx1ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9w
c1thdHRyLmtleV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYg
IWF0dHIub3BlcmF0b3IpIHByb3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYg
KHBhcnNlZC5jbGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNz
J10gPSBwYXJzZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVu
dC5uZXdFbGVtZW50KHRhZywgcHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtc
blx0RWxlbWVudC5wcm90b3R5cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJ
RTggYW5kIElFOSByZXF1aXJlIHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2Zp
cmVFdmVudCA9IChmdW5jdGlvbihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBl
LCBldmVudCl7XG5cdFx0XHRyZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQp
O1xuXHRcdH07XG5cdH0pKEVsZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBU
eXBlKCdFbGVtZW50JywgRWxlbWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJy
YXkucHJvdG90eXBlW25hbWVdKSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFt
ZV0gPSBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMs
IGVsZW1lbnRzID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0
c1tpXSA9IGVsZW1lbnRbbmFtZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50
cyA9IChlbGVtZW50cyAmJiB0eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5c
dH07XG5cblx0RWxlbWVudHMuaW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVs
ZW1lbnQpe1xuXHRFbGVtZW50LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlw
ZSA9IHtcblx0XHQnJGNvbnN0cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0
aW9uLmNvbnZlcnQoJ2VsZW1lbnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihm
dW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0
aG9kO1xuXHR9KTtcbn1cblxuRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJ
RnJhbWUgPSBuZXcgVHlwZSgnSUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFy
cmF5LmxpbmsoYXJndW1lbnRzLCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0
XHRpZnJhbWU6IGZ1bmN0aW9uKG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0
XHR9XG5cdH0pO1xuXG5cdHZhciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJh
bWU7XG5cdGlmIChwYXJhbXMuaWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZy
YW1lKTtcblx0dmFyIG9ubG9hZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRl
bGV0ZSBwcm9wcy5vbmxvYWQ7XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwg
cHJvcHMubmFtZSwgaWZyYW1lID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1l
XycgKyBTdHJpbmcudW5pcXVlSUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChp
ZnJhbWUgfHwgJ2lmcmFtZScsIHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtc
blx0XHRvbmxvYWQuY2FsbChpZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdp
bmRvdy5mcmFtZXNbcHJvcHMuaWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVu
ZXIoJ2xvYWQnLCBvbkxvYWQpO1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50
cyA9IHRoaXMuRWxlbWVudHMgPSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rl
cy5sZW5ndGgpe1xuXHRcdHZhciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9k
ZSk7XG5cdFx0XHRpZiAoIXVuaXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHRcdHRoaXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5c
bkVsZW1lbnRzLnByb3RvdHlwZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJy
YXk7XG5cbm5ldyBUeXBlKCdFbGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZp
bHRlcjogZnVuY3Rpb24oZmlsdGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRo
aXM7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihm
aWx0ZXIpID09ICdzdHJpbmcnKSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0u
bWF0Y2goZmlsdGVyKTtcblx0XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdHB1c2g6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkg
dGhpc1tsZW5ndGgrK10gPSBpdGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0g
bGVuZ3RoKTtcblx0fS5wcm90ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgaXRlbXMgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0p
O1xuXHRcdFx0aWYgKGl0ZW0pIGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBB
cnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdGNvbmNhdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxl
bWVudHModGhpcyk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRl
bHNlIG5ld0VsZW1lbnRzLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50
cztcblx0fS5wcm90ZWN0KCksXG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlz
LnB1c2goY29sbGVjdGlvbltpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRo
aXNbLS10aGlzLmxlbmd0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0p
O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnBy
b3RvdHlwZS5zcGxpY2UsIG9iamVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxu
c3BsaWNlLmNhbGwob2JqZWN0LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMu
aW1wbGVtZW50KCdzcGxpY2UnLCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5n
dGg7XG5cdHZhciByZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hp
bGUgKGxlbmd0aCA+PSB0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1
cm4gcmVzdWx0O1xufS5wcm90ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9u
KG1ldGhvZCwgbmFtZSl7XG5cdEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7
XG5cbkFycmF5Lm1pcnJvcihFbGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxl
bWVudEFjY2VwdHNIVE1MO1xudHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBj
YXRjaCAoZSl7fVxuXG52YXIgZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVy
biAoJycgKyBodG1sKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVv
dDsnKTtcbn07XG4vKjwvbHRJRTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENh
bm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0g
KGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScp
LFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0
VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0g
Y2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3Vt
ZW50LmltcGxlbWVudCh7XG5cblx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5c
dFx0aWYgKHByb3BzKXtcblx0XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRl
ZmF1bHRDaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAn
Y2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVs
bCkgcHJvcHMudmFsdWUgPSAnb24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhl
IHR5cGUgdG8gYmUgc2V0IGJlZm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRc
blx0XHRcdGlmICghY2FuQ2hhbmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRc
dFx0dmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5c
dFx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0
XHRcdFx0aWYgKHByb3BzLnR5cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4g
dGhpcy5pZChzdHlsZUVsZW1lbnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTk+Ki9cblx0XHRcdC8qPGx0SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBl
IHByb3BlcnRpZXMgaW4gSUUgPCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1M
KXtcblx0XHRcdFx0dGFnID0gJzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFn
ICs9ICcgbmFtZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0
XHRpZiAocHJvcHMudHlwZSkgdGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMu
dHlwZSkgKyAnXCInO1xuXHRcdFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
bmFtZTtcblx0XHRcdFx0ZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykp
LnNldChwcm9wcyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGlj
ay51aWRPZih3aW5kb3cpO1xuU2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBs
ZW1lbnQoe1xuXG5cdG5ld1RleHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhp
cy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMud2luZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRc
dHZhciB0eXBlcyA9IHtcblxuXHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mp
e1xuXHRcdFx0XHRpZCA9IFNsaWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9n
LCAnXFxcXCQxJykpO1xuXHRcdFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5v
Y2FzaCkgOiBudWxsO1xuXHRcdFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5v
Y2FzaCl7XG5cdFx0XHRcdFNsaWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYg
IWVsLiRmYW1pbHkgJiYgISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkp
e1xuXHRcdFx0XHRcdHZhciBmaXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8g
d3JhcHBpbmcgbmVlZGVkIGluIElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJl
RXZlbnQgPSBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2
ZW50KHR5cGUsIGV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQo
ZWwsIEVsZW1lbnQuUHJvdG90eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5c
dFx0XHR9LFxuXG5cdFx0XHRvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRc
dFx0XHRpZiAob2JqLnRvRWxlbWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVu
dChkb2MpLCBub2Nhc2gpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07
XG5cblx0XHR0eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cg
PSB0eXBlcy5kb2N1bWVudCA9IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5c
dFx0fTtcblxuXHRcdHJldHVybiBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYg
KGVsICYmIGVsLiRmYW1pbHkgJiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2
YXIgdHlwZSA9IHR5cGVPZihlbCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVz
W3R5cGVdKGVsLCBub2Nhc2gsIGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0
fSkoKVxuXG59KTtcblxuaWYgKHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQn
LCBmdW5jdGlvbihlbCwgbmMpe1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRv
Y3VtZW50KTtcbn0pO1xuXG5XaW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwg
RWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwg
bmV3IEVsZW1lbnRzKTtcblx0fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7
XG5cdH1cblxufSk7XG5cbnZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVu
dCl7XG5cdHJldHVybiBTbGljay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAo
IWRvY3VtZW50LmNvbnRhaW5zKSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQo
Y29udGFpbnMpO1xuXG5cblxuLy8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9y
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikg
cmV0dXJuIGNvbWJpbmF0b3I7XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5w
YXJzZShleHByZXNzaW9uKSk7XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHBy
ZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRl
eHByZXNzaW9uc1tpXVswXS5jb21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhw
cmVzc2lvbjtcbn07XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQ
cmV2aW91czogJyF+Jyxcblx0Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3Is
IG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lv
bil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Np
b24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRB
bGxOZXh0OiAnficsXG5cdGdldEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+
Jyxcblx0Z2V0Q2hpbGRyZW46ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0
b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxl
bWVudCh7XG5cblx0Z2V0Rmlyc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBk
b2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9u
LCAnPicpKVswXSk7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5c
dFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9y
KGV4cHJlc3Npb24sICc+JykpLmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5c
dGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7
XG5cdH0sXG5cblx0Z2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykv
ZywgJ1xcXFwkMScpKSk7XG5cdH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xu
XHRcdHJldHVybiAhZXhwcmVzc2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtc
blx0fVxuXG59KTtcblxuXG5cbmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVu
dCgnJCQnLCBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp
e1xuXHRcdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFy
Y2godGhpcy5kb2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAo
VHlwZS5pc0VudW1lcmFibGUoc2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9y
KTtcblx0fVxuXHRyZXR1cm4gbmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5z
ZXJ0ZXJzXG5cbnZhciBpbnNlcnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0
LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlm
IChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5c
blx0YWZ0ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShj
b250ZXh0LCBlbGVtZW50Lm5leHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5c
dH0sXG5cblx0dG9wOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmlu
c2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmlu
c2VydGVycy5pbnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkg
LyBzZXRQcm9wZXJ0eVxuXG52YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVy
cyA9IHt9O1xuXG4vLyBwcm9wZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5m
b3JFYWNoKFtcblx0J3R5cGUnLCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScs
ICdjZWxsUGFkZGluZycsICdjZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVy
JywgJ3Jvd1NwYW4nLCAndGFiSW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkp
e1xuXHRwcm9wZXJ0aWVzW3Byb3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtc
blxucHJvcGVydGllcy5odG1sID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJU
ZXh0JzogJ3RleHRDb250ZW50JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rp
b24ocmVhbCwga2V5KXtcblx0cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2
YWx1ZSl7XG5cdFx0bm9kZVtyZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNb
a2V5XSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7
XG5cbi8qPGx0SUU5PiovXG5wcm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRy
ZXR1cm4gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0g
J3N0eWxlJykgbm9kZS5zZXQoJ2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRp
ZXMudGV4dF0gPSB2YWx1ZTtcblx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJv
cGVydHlHZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5p
bm5lckhUTUwgOiBnZXR0ZXIobm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7
XG4vKjwvbHRJRTk+Ki9cblxuLy8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFj
dCcsICdub3dyYXAnLCAnaXNtYXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxu
XHQnZGlzYWJsZWQnLCAncmVhZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNp
emUnLFxuXHQnZGVmZXInLCAnZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xz
JywgJ2F1dG9wbGF5Jyxcblx0J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5
LmZvckVhY2goYm9vbHMsIGZ1bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93
ZXJDYXNlKCk7XG5cdGJvb2xlYW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1ts
b3dlcl0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7
XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRy
ZXR1cm4gISFub2RlW2Jvb2xdO1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2Jq
ZWN0LmFwcGVuZChwcm9wZXJ0eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2Rl
LCB2YWx1ZSl7XG5cdFx0KCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAo
dmFsdWUgfHwgJycpIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxu
XG5cdCdmb3InOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2Rl
KSA/IG5vZGUuaHRtbEZvciA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVl
KTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUu
c3R5bGUpID8gbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgn
c3R5bGUnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUp
e1xuXHRcdG5vZGUudmFsdWUgPSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5c
bn0pO1xuXG5wcm9wZXJ0eUdldHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0
dXJuICgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2Rl
LmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFk
b25seSBhbmQgdGhyb3dzXG50cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31c
bmlmIChlbC50eXBlICE9ICdidXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9u
KG5vZGUsIHZhbHVlKXtcblx0bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xu
ZWwgPSBudWxsO1xuLyogPC93ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4v
LyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNo
YW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2Lmlu
bmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYu
aW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9s
dElFOT4qL1xuXG52YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2
b2xhdGlsZUlucHV0VmFsdWUsIGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQu
dmFsdWUgPSAndCc7XG5pbnB1dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUg
PSBpbnB1dC52YWx1ZSAhPSAndCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBB
cmd1bWVudFwiIHdoZW4gdHJ5aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0
aW5wdXQudmFsdWUgPSAnJztcblx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRT
dXBwb3J0ID0gaW5wdXQudHlwZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9
IG51bGw7XG5cbmlmICh2b2xhdGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBw
cm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRc
dHZhciB2YWx1ZSA9IG5vZGUudmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2Rl
LnZhbHVlID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0
UHJvcGVydHksIHNldFByb3BlcnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dl
dEF0dHJpYnV0ZSA9IChmdW5jdGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7
XG5cdHJldHVybiAoZGl2LmdldEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xu
fSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAo
ZnVuY3Rpb24odGVzdCl7XG5cdHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9
XCJzaG91bGRfZml4XCIgdmFsdWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0
dXJuIHRlc3QuY2xvbmVOb2RlKHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0g
MTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5c
bnZhciBoYXNDbGFzc0xpc3QgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNz
TGlzdDtcblxudmFyIGNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NO
YW1lcyA9IChjbGFzc05hbWUgfHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9
O1xuXHRyZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRp
ZiAoY2xhc3NOYW1lICE9PSAnJyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVl
c1tjbGFzc05hbWVdID0gY2xhc3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlz
dCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52
YXIgcmVtb3ZlRnJvbUNsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlz
dC5yZW1vdmUobmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0
ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIo
dGhpcywgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2
YXIgYXR0cmlidXRlV2hpdGVMaXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBh
dHRyaWJ1dGVXaGl0ZUxpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywg
e30pO1xuXHRcdFx0LyogPC9sdElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xu
XHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVXaGl0
ZUxpc3RbbmFtZV07XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRc
dFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0
SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRl
TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0
dHJpYnV0ZXMpe1xuXHRcdGZvciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNl
dFByb3BlcnR5KGF0dHJpYnV0ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdl
dHRlciA9IHByb3BlcnR5R2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0
ZXIpIHJldHVybiBnZXR0ZXIodGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xs
dXRlc0dldEF0dHJpYnV0ZSl7XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9k
ZShuYW1lKSwgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdo
aXRlTGlzdCcsIHt9KTtcblx0XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAo
YXR0ci5leHBhbmRvICYmICFhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIg
b3V0ZXIgPSB0aGlzLm91dGVySFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3Blbmlu
ZyB0YWcgYW5kIGZpbmQgbWVudGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0
ZXIuc3Vic3RyKDAsIG91dGVyLnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSku
aW5kZXhPZihuYW1lKSA8IDApIHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVXaGl0ZUxp
c3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dHZhciByZXN1bHQgPSBTbGljay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJu
ICghcmVzdWx0ICYmICFTbGljay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJl
c3VsdDtcblx0fSxcblxuXHRnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdz
ID0gQXJyYXkuY29udmVydChhcmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdl
dFByb3BlcnR5LCB0aGlzKS5hc3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51
bGwpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXku
ZWFjaChhcmd1bWVudHMsIHRoaXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9w
ZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVy
dHkuc2V0KSA/IHByb3BlcnR5LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVy
dHkocHJvcCwgdmFsdWUpO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlv
bihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0cmV0dXJuIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5
KHRoaXMpIDogdGhpcy5nZXRQcm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxu
XG5cdGVyYXNlOiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlBy
b3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3Bl
cnR5LmVyYXNlLmFwcGx5KHRoaXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24o
Y2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5j
bGFzc05hbWUpLmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0Ns
YXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZv
ckVhY2goYWRkVG9DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1l
ICsgJyAnICsgdGhpcy5jbGFzc05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRyZW1vdmVDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFy
IGNsYXNzTmFtZXMgPSBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNz
TmFtZSkuZm9yRWFjaChjbGFzc05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNs
YXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9y
Y2UgPT0gbnVsbCkgZm9yY2UgPSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVy
biAoZm9yY2UpID8gdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhj
bGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQg
PSB0aGlzLCBmcmFnbWVudCwgZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJh
Z21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
aWQoZWxlbWVudHNbaV0sIHRydWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRD
aGlsZChlbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hp
bGQoZnJhZ21lbnQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDog
ZnVuY3Rpb24odGV4dCwgd2hlcmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1
bWVudCgpLm5ld1RleHROb2RlKHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rp
b24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50
LmlkKGVsLCB0cnVlKSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0
OiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10o
dGhpcywgZG9jdW1lbnQuaWQoZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZXBsYWNlczogZnVuY3Rpb24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUp
O1xuXHRcdGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHR3cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRv
Y3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihl
bCwgd2hlcmUpO1xuXHR9LFxuXG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
c2VsZWN0ZWRJbmRleDsgLy8gU2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhB
cnJheS5jb252ZXJ0KHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0
XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3Ry
aW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0
RWxlbWVudHMoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5c
dFx0XHR2YXIgdHlwZSA9IGVsLnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJs
ZWQgfHwgdHlwZSA9PSAnc3VibWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmls
ZScgfHwgdHlwZSA9PSAnaW1hZ2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5n
ZXQoJ3RhZycpID09ICdzZWxlY3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9w
dCl7XG5cdFx0XHRcdC8vIElFXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgn
dmFsdWUnKTtcblx0XHRcdH0pIDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2ti
b3gnKSAmJiAhZWwuY2hlY2tlZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRB
cnJheS5jb252ZXJ0KHZhbHVlKS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBl
b2YgdmFsICE9ICd1bmRlZmluZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVu
dChlbC5uYW1lKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xu
XHRcdH0pO1xuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5c
blxuLy8gYXBwZW5kSFRNTFxuXG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdi
ZWZvcmVCZWdpbicsXG5cdGFmdGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQn
LFxuXHR0b3A6ICdhZnRlckJlZ2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoJ2FwcGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0
aGlzLmluc2VydEFkamFjZW50SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSdd
LCBodG1sKTtcblx0cmV0dXJuIHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2
YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVu
ID0gdGVtcC5jaGlsZE5vZGVzLFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5c
dGlmICghZnJhZ21lbnQpIHJldHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7
XG5cdFx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2Vy
dGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztc
bn0pO1xuXG52YXIgY29sbGVjdGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1
bmN0aW9uKHVpZCl7XG5cdHJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7
fSkpO1xufTtcblxudmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVt
LnVuaXF1ZU51bWJlcjtcblx0aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50
cygpO1xuXHRpZiAoaXRlbS5jbGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7
XG5cdGlmICh1aWQgIT0gbnVsbCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3VpZF07XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVBy
b3BzID0ge2lucHV0OiAnY2hlY2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2
YWx1ZSd9O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtc
blx0XHR2YXIgY2hpbGRyZW4gPSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicp
O1xuXHRcdEFycmF5LmVhY2goY2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2Uo
dGhpcyk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5c
dFx0QXJyYXkuY29udmVydCh0aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiAodGhpcy5wYXJlbnROb2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlz
KSA6IHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xu
XHRcdGNvbnRlbnRzID0gY29udGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMu
Y2xvbmVOb2RlKGNvbnRlbnRzKSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRc
dGlmIChjb250ZW50cyl7XG5cdFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0
aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBj
ZS5sZW5ndGg7IGktLTspe1xuXHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ld
O1xuXHRcdFx0aWYgKCFrZWVwaWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0
Lyo8bHRJRTk+Ki9cblx0XHRcdGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5v
ZGUuY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1l
bnQpO1xuXHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0
XHRcdGlmIChub2RlLm9wdGlvbnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywg
ZW8gPSBlbGVtZW50Lm9wdGlvbnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsg
ai0tOykgbm9bal0uc2VsZWN0ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0
fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50
LnRhZ05hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3Bd
KSBub2RlW3Byb3BdID0gZWxlbWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xu
XHRcdGlmIChoYXNDbG9uZUJ1Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnb2JqZWN0JyksIHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0
Jyk7XG5cdFx0XHRmb3IgKGkgPSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRv
W2ldLm91dGVySFRNTDtcblx0XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3Vt
ZW50LmlkKGNsb25lKTtcblx0fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRd
Lmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBm
bil7XG5cdFx0aWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpe1xuXHRcdFx0Y29sbGVjdGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxu
XHRcdGlmICh0aGlzLmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBl
LCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsg
dHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBm
dW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxz
ZSB0aGlzLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmV0cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3Rv
cmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtc
blx0XHRpZiAoZGZsdCAhPSBudWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJv
cGVydHldID0gZGZsdDtcblx0XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5c
dH0sXG5cblx0c3RvcmU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3Jh
Z2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFs
dWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9w
ZXJ0eSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
Lyo8bHRJRTk+Ki9cbmlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKXtcblx0dmFyIGdjID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0
ZWQsIGNsZWFuKTtcblx0XHRpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFn
ZSgpO1xuXHRcdHdpbmRvdy5yZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3
aW5kb3cuYWRkTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMgPSB7fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtc
blxuXHRzZXQ6IGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHls
ZTtcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3Nz
VGV4dDtcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1Rl
eHQgPSAnJztcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5c
dH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bihodG1sKXtcblx0XHRpZiAoaHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAo
dHlwZU9mKGh0bWwpID09ICdhcnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAodGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwp
IHRoaXMuc3R5bGVTaGVldC5jc3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3Ro
aXMuaW5uZXJIVE1MID0gaHRtbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhp
cy5zZXQoJ2h0bWwnLCAnJyk7XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IHRydWUsIHN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJI
VE1MID0gdHJ1ZTtcblxuLyo8bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBo
dHRwOi8vamRiYXJ0bGV0dC5jb20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpO1xudmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2Pjwv
bmF2Pic7XG5zdXBwb3J0c0hUTUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09
IDEpO1xuaWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFy
dGljbGUgYXNpZGUgYXVkaW8gY2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1
cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNl
Y3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAo
bC0tKSBmcmFnbWVudC5jcmVhdGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8q
PC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9u
LmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgndGFibGUnKTtcblx0dGFibGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5c
dHJldHVybiB0cnVlO1xufSk7XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0cicpLCBodG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1s
O1xuc3VwcG9ydHNUUklubmVySFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51
bGw7XG4vKjwvbHRGRjQ+Ki9cblxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBw
b3J0c1RSSW5uZXJIVE1MIHx8ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQu
UHJvcGVydGllcy5odG1sLnNldCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0
aW9ucyA9IHtcblx0XHRcdHRhYmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRc
dHNlbGVjdDogWzEsICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwg
Jzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0
YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0
XHR0cmFuc2xhdGlvbnMudGhlYWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMu
dGJvZHk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5Piov
XG5cdFx0XHRpZiAodGhpcy5zdHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7
XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMu
Z2V0KCd0YWcnKV07XG5cdFx0XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykg
d3JhcCA9IFswLCAnJywgJyddO1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhp
cywgaHRtbCk7XG5cblx0XHRcdHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3Vw
cG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRc
dHdyYXBwZXIuaW5uZXJIVE1MID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5q
b2luKCcnKTtcblx0XHRcdHdoaWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGls
ZDtcblx0XHRcdHRoaXMuZW1wdHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRp
ZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7
XG5cdFx0XHR3cmFwcGVyID0gbnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGll
cy5odG1sLnNldCk7XG59XG4vKjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8
c2VsZWN0PjxvcHRpb24+czwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJz
dENoaWxkLnZhbHVlICE9ICdzJykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0
aWYgKHRhZyAhPSAnc2VsZWN0JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFs
dWUpO1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0
dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0
ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1
ZSA9IChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQo
J3RleHQnKTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24u
c2VsZWN0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIG9wdGlvbiA9IHRoaXMsIHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRh
ZyAhPSAnc2VsZWN0JyAmJiB0YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5
KCd2YWx1ZScpO1xuXG5cdFx0aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlv
bi5nZXRTZWxlY3RlZCgpWzBdKSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24u
Z2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVj
aWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50
ZXN0Rm9ybSA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3Bl
cnRpZXMuaWQgPSB7XG5cdHNldDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdl
dEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztc
blx0fVxufTtcbi8qPC9JRT4qL1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQg
b2JqZWN0IGNyb3NzLWJyb3dzZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmpl
Y3RdXG5cbnByb3ZpZGVzOiBFdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
X2tleXMgPSB7fTtcbnZhciBub3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xu
XHR2YXIgbm9ybWFsaXplZDtcblx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6
ZWQgPSBldmVudC53aGVlbERlbHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIw
IDogZXZlbnQud2hlZWxEZWx0YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQg
PSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0o
cmF3QW1vdW50ICUgMyA9PSAwID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0
fVxuXHRyZXR1cm4gbm9ybWFsaXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZl
bnQgPSBuZXcgVHlwZSgnRE9NRXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3
aW4pIHdpbiA9IHdpbmRvdztcblx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChl
dmVudC4kZXh0ZW5kZWQpIHJldHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0
aGlzLiRleHRlbmRlZCA9IHRydWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0
dGhpcy5jb250cm9sID0gZXZlbnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7
XG5cdHRoaXMubWV0YSA9IGV2ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0g
ZXZlbnQudHlwZTtcblx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVt
ZW50O1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0
YXJnZXQucGFyZW50Tm9kZTtcblx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xu
XG5cdGlmICh0eXBlLmluZGV4T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5j
b2RlID0gKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlm
dCB8fCB0eXBlICE9ICdrZXlwcmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYg
KHR5cGUgPT0gJ2tleWRvd24nIHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+
IDExMSAmJiBjb2RlIDwgMTI0KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRc
dGVsc2UgaWYgKGNvZGUgPiA5NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtc
blx0XHR9XG5cdFx0aWYgKHRoaXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlKS50b0xvd2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNr
JyB8fCB0eXBlID09ICdkYmxjbGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUg
PT0gJ3doZWVsJyB8fCB0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdt
b3VzZScpID09IDApe1xuXHRcdHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFk
b2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0
bWwgOiBkb2MuYm9keTtcblx0XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVgg
IT0gbnVsbCkgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxc
blx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xp
ZW50WSArIGRvYy5zY3JvbGxUb3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0
eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQg
OiBldmVudC5jbGllbnRYLFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQu
cGFnZVkgLSB3aW4ucGFnZVlPZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAo
dHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdt
b3VzZXdoZWVsJykgdGhpcy53aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRc
dHRoaXMucmlnaHRDbGljayA9IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAy
KTtcblx0XHRpZiAodHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwg
dHlwZSA9PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFy
IG92ZXJUYXJnZXQgPSB0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXIn
O1xuXHRcdFx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVy
VGFyZ2V0ID8gJ2Zyb20nIDogJ3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0
ZWQgJiYgcmVsYXRlZC5ub2RlVHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2Rl
O1xuXHRcdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0
fVxuXHR9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhP
ZignZ2VzdHVyZScpID09IDApe1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtc
blx0XHR0aGlzLnNjYWxlID0gZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0g
ZXZlbnQudGFyZ2V0VG91Y2hlcztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hh
bmdlZFRvdWNoZXM7XG5cdFx0dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3Vj
aGVzO1xuXHRcdGlmICh0b3VjaGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0g
dG91Y2hlc1swXTtcblx0XHRcdHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gu
cGFnZVl9O1xuXHRcdFx0dGhpcy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2gu
Y2xpZW50WX07XG5cdFx0fVxuXHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQg
PSB7fTtcblx0aWYgKCF0aGlzLnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50
LmltcGxlbWVudCh7XG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2
ZW50RGVmYXVsdCgpLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlv
bjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMu
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJs
ZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1
bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQu
cHJldmVudERlZmF1bHQoKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxz
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0g
ZnVuY3Rpb24oY29kZSwga2V5KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlz
O1xufTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9h
ZFNldHRlcih0cnVlKTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0
MCc6ICdkb3duJywgJzM3JzogJ2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywg
JzMyJzogJ3NwYWNlJywgJzgnOiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2Rl
bGV0ZScsICcxMyc6ICdlbnRlcidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxu
bmFtZTogRWxlbWVudC5FdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRo
b2RzIGZvciBkZWFsaW5nIHdpdGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3Vz
ZWVudGVyIGFuZCBtb3VzZWxlYXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBF
dmVudF1cblxucHJvdmlkZXM6IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdHRoaXMuYWRkRXZlbnRzKGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9j
dW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0
XHRpZiAoIWV2ZW50c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtd
fTtcblx0XHRpZiAoZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztc
blx0XHRldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBl
LFxuXHRcdFx0Y3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24g
PSBmbixcblx0XHRcdHNlbGYgPSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1
c3RvbS5vbkFkZCkgY3VzdG9tLm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYg
KGN1c3RvbS5jb25kaXRpb24pe1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkp
IHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0
XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5j
dGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2
YXIgZGVmbiA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9
O1xuXHRcdHZhciBuYXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtc
blx0XHRpZiAobmF0aXZlRXZlbnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRc
dFx0XHRkZWZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2
ZW50KGV2ZW50LCBzZWxmLmdldFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNh
bGwoc2VsZiwgZXZlbnQpID09PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRc
dFx0fVxuXHRcdFx0dGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJd
KTtcblx0XHR9XG5cdFx0ZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0
dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8
ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVd
O1xuXHRcdHZhciBpbmRleCA9IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXgg
PT0gLTEpIHJldHVybiB0aGlzO1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtc
blx0XHRkZWxldGUgbGlzdC5rZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5k
ZXhdO1xuXHRcdHZhciBjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3Vz
dG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRo
aXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNv
bnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAo
RWxlbWVudC5OYXRpdmVFdmVudHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2
YWx1ZSwgYXJndW1lbnRzWzJdKSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlv
bihldmVudHMpe1xuXHRcdGZvciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChl
dmVudCwgZXZlbnRzW2V2ZW50XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3Zl
RXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2Yo
ZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJl
bW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9
XG5cdFx0dmFyIGF0dGFjaGVkID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFh
dHRhY2hlZCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBl
IGluIGF0dGFjaGVkKSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWlu
YXRlKCdldmVudHMnKTtcblx0XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0
YXR0YWNoZWRbZXZlbnRzXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJl
bW92ZUV2ZW50KGV2ZW50cywgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0
YWNoZWRbZXZlbnRzXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2
ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMu
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJl
dHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRz
W3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5
KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5c
dFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1
bmN0aW9uKGZyb20sIHR5cGUpe1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2
YXIgZXZlbnRzID0gZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJl
dHVybiB0aGlzO1xuXHRcdGlmICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4g
ZXZlbnRzKSB0aGlzLmNsb25lRXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlm
IChldmVudHNbdHlwZV0pe1xuXHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihm
bil7XG5cdFx0XHRcdHRoaXMuYWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50
cyA9IHtcblx0Y2xpY2s6IDIsIGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIs
IGNvbnRleHRtZW51OiAyLCAvL21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6
IDIsIERPTU1vdXNlU2Nyb2xsOiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91
c2VvdXQ6IDIsIG1vdXNlbW92ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9t
b3VzZSBtb3ZlbWVudFxuXHRrZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5
Ym9hcmRcblx0b3JpZW50YXRpb25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAy
LCB0b3VjaG1vdmU6IDIsIHRvdWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0
Z2VzdHVyZXN0YXJ0OiAyLCBnZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0
dXJlXG5cdGZvY3VzOiAyLCBibHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIs
IHN1Ym1pdDogMiwgcGFzdGU6IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDog
MiwgdW5sb2FkOiAxLCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29u
dGVudExvYWRlZDogMSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5n
ZTogMSwgcG9wc3RhdGU6IDIsIHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxu
XHRlcnJvcjogMSwgYWJvcnQ6IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5c
bkVsZW1lbnQuRXZlbnRzID0ge1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwn
IGluIGRvY3VtZW50ID8gJ3doZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21v
dXNld2hlZWwnIDogJ0RPTU1vdXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5j
dGlvbihldmVudCl7XG5cdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYg
KHJlbGF0ZWQgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZh
bHNlO1xuXHRyZXR1cm4gKHJlbGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVs
JyAmJiB0eXBlT2YodGhpcykgIT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVk
KSk7XG59O1xuXG5pZiAoJ29ubW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZl
bnRzLm1vdXNlbGVhdmUgPSAyO1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xu
fSBlbHNlIHtcblx0RWxlbWVudC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91
c2VvdmVyJyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMu
bW91c2VsZWF2ZSA9IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcbn1cblxuLyo8bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIp
e1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQu
RXZlbnRzLmNoYW5nZSA9IHtcblx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUg
PSB0aGlzLnR5cGU7XG5cdFx0XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYm
ICh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFu
Z2UnIDogJ2NoYW5nZSc7XG5cdFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtc
blx0XHRcdHJldHVybiBldmVudC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZl
bnQucHJvcGVydHlOYW1lID09ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+
Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5c
bmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVk
ZSB0aGUgZGVsZWdhdGUgbWV0aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2
ZW50XVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVu
Y3Rpb24oKXtcblxudmFyIGV2ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcjtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZl
RXZlbnRzLmZvY3Vzb3V0ID0gMjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2Vs
Zil7XG5cdFx0aWYgKG1hdGNoKHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQs
IGV2ZW50LCB0YXJnZXQpO1xuXHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnRO
b2RlKTtcblx0fVxufTtcblxudmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6
ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0
fSxcblx0bW91c2VsZWF2ZToge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdm
b2N1cycgKyAoZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6
IHRydWVcblx0fSxcblx0Ymx1cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8g
J2JsdXInIDogJ2ZvY3Vzb3V0Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0
SUU5PiovXG52YXIgX2tleSA9ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1
bmN0aW9uKHR5cGUpe1xuXG5cdHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0
XHRyZW1vdmU6IGZ1bmN0aW9uKHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0
cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlz
dCAmJiBsaXN0LmZvcm1zKSBmb3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xu
XHRcdFx0XHQvLyB0aGUgZm9ybSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3Qg
aGF2ZSB0aGVcblx0XHRcdFx0Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQg
Y2FzZSB0aGUgZXZlbnQgd2FzXG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0
aWYgKGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQo
dHlwZSwgbGlzdC5mbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3Jt
ID0gKHRhcmdldC5nZXQoJ3RhZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQu
Z2V0UGFyZW50KCdmb3JtJyk7XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFy
IGxpc3RlbmVycyA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30p
LFxuXHRcdFx0XHRsaXN0ZW5lciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczog
W119LFxuXHRcdFx0XHRmb3JtcyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7
XG5cblx0XHRcdGlmIChmb3Jtcy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRm
b3Jtcy5wdXNoKGZvcm0pO1xuXG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRc
dFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtc
blx0XHRcdGZvcm0uYWRkRXZlbnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5c
blx0XHRcdGxpc3RlbmVyc1t1aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkg
KyB0eXBlICsgJ2xpc3RlbmVycycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFy
IGlucHV0T2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAn
Zm9jdXNpbicsXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0
YXJnZXQpe1xuXHRcdFx0dmFyIGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0
aGlzLnJlbW92ZUV2ZW50cyhldmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0g
PSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZl
bnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVu
dHMpO1xuXHRcdH1cblx0fTtcbn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVj
dC5hcHBlbmQobWFwLCB7XG5cdHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVz
ZXQ6IGZvcm1PYnNlcnZlcigncmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFu
Z2UnKSxcblx0c2VsZWN0OiBpbnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+
Ki9cblxudmFyIHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8u
YWRkRXZlbnQsXG5cdHJlbW92ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxh
eSA9IGZ1bmN0aW9uKG9sZCwgbWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1
c2VDYXB0dXJlKXtcblx0XHRpZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJu
IG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1
ZG9zWzBdLmtleSAhPSAncmVsYXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNl
dWRvcy5zbGljZSgxKS5lYWNoKGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6
JyArIHBzZXVkby5rZXkgKyAocHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJykn
IDogJycpO1xuXHRcdH0pO1xuXHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1
cm4gbWV0aG9kLmNhbGwodGhpcywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZu
KTtcblx0fTtcbn07XG5cbnZhciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlv
bih0eXBlLCBtYXRjaCwgZm4pe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRl
bGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBm
b3IgKHZhciBfdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZu
ICYmIHN0b3JlZFtfdWlkXS5tYXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5c
dFx0dmFyIF90eXBlID0gdHlwZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFw
W3R5cGVdIHx8IHt9O1xuXHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRj
aCA9IGZ1bmN0aW9uKHRhcmdldCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBf
bWF0Y2gpO1xuXHRcdH07XG5cblx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNb
X3R5cGVdO1xuXHRcdGlmIChfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVu
dEV2ZW50LmNvbmRpdGlvbil7XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24g
PSBfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2gg
PSBmdW5jdGlvbih0YXJnZXQsIGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0
LCBldmVudCkgJiYgY29uZGl0aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9
O1xuXHRcdH1cblxuXHRcdHZhciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7
XG5cdFx0dmFyIGRlbGVnYXRvciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNo
LCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7
fTtcblx0XHRzdG9yZWRbdWlkXSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjog
X2ZuLFxuXHRcdFx0ZGVsZWdhdG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5
cGVdID0gc3RvcmVkO1xuXHRcdHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVn
YXRvciwgX21hcC5jYXB0dXJlKTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlw
ZSwgbWF0Y2gsIGZuLCBfdWlkKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRk
ZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQp
IHJldHVybiB0aGlzO1xuXG5cdFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwg
ZGVsZWdhdG9yID0gc3RvcmVkW191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7
fTtcblx0XHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1v
dmUpIF9tYXAucmVtb3ZlKHRoaXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtc
blx0XHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50
LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRc
dHZhciBfX3VpZCwgcztcblx0XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRc
dHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9
PSBmbikgcmV0dXJuIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRj
aCwgZm4sIF9fdWlkKTtcblx0XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0
cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlv
bi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3Vt
ZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBk
ZWxlZ2F0aW9uLmFkZEV2ZW50KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBk
ZWxlZ2F0aW9uLnJlbW92ZUV2ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTog
RWxlbWVudC5TdHlsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJh
Y3Rpbmcgd2l0aCB0aGUgc3R5bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJv
dmlkZXM6IEVsZW1lbnQuU3R5bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0
bWwgPSBkb2N1bWVudC5odG1sLCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUs
IHdoaWNoIGRvZXMgbm90IHJlbW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5l
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVk
JztcbmVsLnN0eWxlLmNvbG9yID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwu
c3R5bGUuY29sb3IgPT0gJ3JlZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJu
cyBib3JkZXIqIHNob3J0aGFuZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0
aC1zdHlsZSBpbnN0ZWFkIG9mIHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHgg
c29saWQgIzEyM2FiYyc7XG5lbC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0Jv
cmRlcnNJbldyb25nT3JkZXIgPSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxs
O1xuLy88L2x0SUU5PlxuXG52YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENv
bXB1dGVkU3R5bGUsXG5cdHN1cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5zdHlsZS5ib3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0
aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0
eWxlcyk7XG59fTtcblxudmFyIGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51
bGwpLFxuXHRoYXNGaWx0ZXIgPSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxw
aGEgPSAvYWxwaGFcXChvcGFjaXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0
eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0
eScsIG9wYWNpdHkpO1xuXHRlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8
fCBvcGFjaXR5ID09IG51bGwgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5
PlxudmFyIHNldEZpbHRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2
YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBl
bGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIg
PSAocmVnZXhwLnRlc3QoZmlsdGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDog
ZmlsdGVyICsgJyAnICsgdmFsdWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxl
LnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3Bh
Y2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1l
bnQuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wYWNpdHkpe1xuXHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50
LmN1cnJlbnRTdHlsZS5oYXNMYXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChv
cGFjaXR5ID09IG51bGwgfHwgb3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwg
cmVBbHBoYSwgJycpO1xuXHRcdGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50
KSAhPSAxKSBzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScp
O1xuXHR9IGVsc2Uge1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3Bh
Y2l0eT0nICsgKG9wYWNpdHkgKiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5c
dH1cbn0gOiBzZXRWaXNpYmlsaXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkg
PyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNp
dHkgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSAnJykgPyAxIDogb3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1
bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8
IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlm
IChmaWx0ZXIpIG9wYWNpdHkgPSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSBudWxsIHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7
XG59IDogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2
ZSgnJG9wYWNpdHknKTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50
LnN0eWxlLnZpc2liaWxpdHkgPT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5
O1xufSkpO1xuXG52YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkg
PyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAn
MCUnLCB0b3A6ICcwJScsIGNlbnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEw
MCUnfSxcblx0aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5k
UG9zaXRpb25YICE9IG51bGwpLFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIg
Y2FtZWxDYXNlID0gZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFj
ZShwcmVmaXhQYXR0ZXJuLCAnJDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZh
ciByZW1vdmVTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0
eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHBy
b3BlcnR5ICsgJ1gnKTtcblx0XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3Zl
QXR0cmlidXRlKHByb3BlcnR5KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFo
YXNHZXRDb21wdXRlZFN0eWxlICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJy
ZW50U3R5bGVbY2FtZWxDYXNlKHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxl
bWVudC5nZXREb2N1bWVudCh0aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVm
YXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVs
bDtcblx0XHRyZXR1cm4gKGNvbXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHBy
b3BlcnR5ID09IGZsb2F0TmFtZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDog
Jyc7XG5cdH0sXG5cblx0c2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0
aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFs
dWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xu
XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3Bl
cnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2
YWx1ZSkgIT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9w
ZXJ0eV0gfHwgJ0AnKS5zcGxpdCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZh
bHVlKS5tYXAoZnVuY3Rpb24odmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAn
Jztcblx0XHRcdFx0cmV0dXJuICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVw
bGFjZSgnQCcsIE1hdGgucm91bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5c
dFx0fSBlbHNlIGlmICh2YWx1ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFs
dWUgPSBNYXRoLnJvdW5kKHZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0g
PSB2YWx1ZTtcblx0XHQvLzxsdElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09
IG51bGwpICYmIGRvZXNOb3RSZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1
dGUpe1xuXHRcdFx0cmVtb3ZlU3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0
aW9uKHByb3BlcnR5KXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0
T3BhY2l0eSh0aGlzKTtcblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxv
YXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVz
ICYmIHByb3BlcnR5LmluZGV4T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVy
biBbJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlv
bihjb3JuZXIpe1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xu
XHRcdFx0fSwgdGhpcykuam9pbignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5z
dHlsZVtwcm9wZXJ0eV07XG5cdFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcp
e1xuXHRcdFx0aWYgKEVsZW1lbnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkp
KXtcblx0XHRcdFx0cmVzdWx0ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5T
aG9ydFN0eWxlc1twcm9wZXJ0eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRc
dFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRo
aXMuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSAmJiAvXmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0
eSkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0
KS9nLCBmdW5jdGlvbihwb3NpdGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1tw
b3NpdGlvbl07XG5cdFx0XHR9KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYg
cHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0
aWYgKHJlc3VsdCl7XG5cdFx0XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBj
b2xvciA9IHJlc3VsdC5tYXRjaCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAo
Y29sb3IpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hl
eCgpKTtcblx0XHR9XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxl
W3Byb3BlcnR5XSl7XG5cdFx0XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0
eSkgJiYgISgvcHgkLy50ZXN0KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9w
ZXJ0eSA9PSAnd2lkdGgnKSA/IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10s
IHNpemUgPSAwO1xuXHRcdFx0XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dFx0c2l6ZSArPSB0aGlzLmdldFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRv
SW50KCkgKyB0aGlzLmdldFN0eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRc
dFx0fSwgdGhpcyk7XG5cdFx0XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2Fw
aXRhbGl6ZSgpXSAtIHNpemUgKyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlcigu
KylXaWR0aHxtYXJnaW58cGFkZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxv
YXQocmVzdWx0KSkpe1xuXHRcdFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dC8vPGx0SUU5PlxuXHRcdGlmIChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRl
cihUb3B8UmlnaHR8Qm90dG9tfExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChy
ZXN1bHQpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4r
KSQvLCAnJDIgJDMgJDEnKTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJl
c3VsdDtcblx0fSxcblxuXHRzZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2
YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0
aW9uKGtleSl7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9
LCB0aGlzKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxl
cyA9IHtcblx0bGVmdDogJ0BweCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAn
QHB4Jyxcblx0d2lkdGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1h
eEhlaWdodDogJ0BweCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFj
a2dyb3VuZENvbG9yOiAncmdiKEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNr
Z3JvdW5kUG9zaXRpb246ICdAcHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250
U2l6ZTogJ0BweCcsIGxldHRlclNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xp
cDogJ3JlY3QoQHB4IEBweCBAcHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcs
IHBhZGRpbmc6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkg
QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAn
QHB4IEBweCBAcHggQHB4JywgYm9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdy
Z2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6
SW5kZXg6ICdAJywgJ3pvb20nOiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0Bw
eCcsIG9wYWNpdHk6ICdAJywgYm9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxu
XG5cblxuXG5FbGVtZW50LlNob3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBi
b3JkZXI6IHt9LCBib3JkZXJXaWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6
IHt9fTtcblxuWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9u
KGRpcmVjdGlvbil7XG5cdHZhciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBB
bGwgPSBFbGVtZW50LlN0eWxlcztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rp
b24oc3R5bGUpe1xuXHRcdHZhciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0
eWxlXVtzZF0gPSBBbGxbc2RdID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyAr
IGRpcmVjdGlvbjtcblx0U2hvcnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAs
IEAsIEApJztcblx0dmFyIGJkdyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBi
ZGMgPSBiZCArICdDb2xvcic7XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0
aFtiZHddID0gU2hvcnRbYmRdW2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3Jk
ZXJTdHlsZVtiZHNdID0gU2hvcnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQu
Ym9yZGVyQ29sb3JbYmRjXSA9IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAs
IEApJztcbn0pO1xuXG5pZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRT
dHlsZXMuYmFja2dyb3VuZFBvc2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFj
a2dyb3VuZFBvc2l0aW9uWTogJ0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVu
dC5EaW1lbnNpb25zXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0
aCBzaXplLCBzY3JvbGwsIG9yIHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93
IG9iamVjdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0g
RWxlbWVudCBwb3NpdGlvbmluZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9v
Lm9yZy8pIGNvZGUgYW5kIHNtYXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6
Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lv
bnMgYmFzZWQgb24gW1lVSV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwg
W0JTRCBMaWNlbnNlXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1s
KS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0Vs
ZW1lbnQuRGltZW5zaW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVu
dC5hcHBlbmRDaGlsZChjaGlsZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9m
ZnNldFBhcmVudCA9PT0gZWxlbWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIg
aGVpZ2h0Q29tcG9uZW50cyA9IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRv
bScsICdib3JkZXJUb3BXaWR0aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBv
bmVudHMgPSBbJ3dpZHRoJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJM
ZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9
IGZ1bmN0aW9uKGVsKXtcblxuXHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwp
LFxuXHRcdGJvdW5kcyA9IHt4OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHdpZHRoQ29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLngg
Kz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxu
dmFyIGlzT2Zmc2V0ID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdw
b3NpdGlvbicpICE9ICdzdGF0aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRT
dGF0aWMgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFi
bGV8dGR8dGgpJC9pKS50ZXN0KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQo
e1xuXG5cdHNjcm9sbFRvOiBmdW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtc
blx0XHRcdHRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdHRoaXMuc2Nyb2xsTGVmdCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5c
dFx0Ly88bHRJRTk+XG5cdFx0Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5v
dCBjYWxjdWxhdGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJp
bGl0eSBoaWRkZW4uXG5cdFx0aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4
OiB0aGlzLm9mZnNldFdpZHRoLCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5
PlxuXG5cdFx0Ly8gVGhpcyBzdmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRl
U2l6ZSgpYCwgY2FuIGJlIHJlbW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxu
XHRcdC8vIEJ1ZyBpbmZvOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzA5ODVcblx0XHRpZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3Zn
Q2FsY3VsYXRlU2l6ZSh0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhp
cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRo
LCB5OiBib3VuZHMuaGVpZ2h0fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDog
MCwgeTogMH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6
ZSgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWln
aHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRo
aXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6
IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9s
bHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0
aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVu
dCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3Np
dGlvbi55ICs9IGVsZW1lbnQuc2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNl
dFBhcmVudDogYnJva2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVu
dCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50
LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNl
dENoZWNrID0gKHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/
IGlzT2Zmc2V0U3RhdGljIDogaXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVu
dC5wYXJlbnROb2RlKSl7XG5cdFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJu
IGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0
cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRc
dHRyeSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0O1xuXG5cdFx0aWYgKGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIg
Ym91bmQgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9j
dW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0
bWxTY3JvbGwgPSBodG1sLmdldFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMu
Z2V0U2Nyb2xscygpLFxuXHRcdFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3Np
dGlvbicpID09ICdmaXhlZCcpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5s
ZWZ0LnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3Jv
bGwueCkgLSBodG1sLmNsaWVudExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkg
KyBlbGVtU2Nyb2xscy55ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5j
bGllbnRUb3Bcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3Np
dGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRp
b247XG5cblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBv
c2l0aW9uLnggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVt
ZW50Lm9mZnNldFRvcDtcblxuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xu
XHRcdH1cblxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVu
Y3Rpb24ocmVsYXRpdmUpe1xuXHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0
XHRcdHNjcm9sbCA9IHRoaXMuZ2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0
XHRcdHg6IG9mZnNldC54IC0gc2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55
XG5cdFx0fTtcblxuXHRcdGlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChy
ZWxhdGl2ZSkpKXtcblx0XHRcdHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9z
aXRpb24oKTtcblx0XHRcdHJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24u
eCAtIGxlZnRCb3JkZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlv
bi55IC0gdG9wQm9yZGVyKHJlbGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtc
blx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlz
Qm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0
XHR2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9
IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54
LFxuXHRcdFx0dG9wOiBwb3NpdGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhl
aWdodDogc2l6ZS55XG5cdFx0fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0
aDtcblx0XHRvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9i
ajtcblx0fSxcblxuXHRjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJu
IHtcblx0XHRcdGxlZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0Jyks
XG5cdFx0XHR0b3A6IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRc
dH07XG5cdH0sXG5cblx0c2V0UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRo
aXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5c
bltEb2N1bWVudCwgV2luZG93XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJl
dHVybiB7eDogZG9jLmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxu
XHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCks
IGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhP
ZmZzZXQgfHwgZG9jLnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xs
VG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2Mg
PSBnZXRDb21wYXRFbGVtZW50KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5c
dFx0XHRib2R5ID0gdGhpcy5nZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1h
dGgubWF4KGRvYy5zY3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRo
Lm1heChkb2Muc2Nyb2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxc
blxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xu
XHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhp
cy5nZXRTaXplKCk7XG5cdFx0cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55
LCByaWdodDogc2l6ZS54LCBoZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxu
fSk7XG5cbi8vIHByaXZhdGUgbWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50Lmdl
dENvbXB1dGVkU3R5bGU7XG5cbmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtc
blx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5c
blxuXG5mdW5jdGlvbiB0b3BCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihl
bGVtZW50LCAnYm9yZGVyLXRvcC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVs
ZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRo
Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8
aHRtbCkkL2kpLnRlc3QoZWxlbWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0
RWxlbWVudChlbGVtZW50KXtcblx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0
cmV0dXJuICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVu
dC5hbGlhcyh7cG9zaXRpb246ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltX
aW5kb3csIERvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRI
ZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5c
blx0Z2V0V2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbCgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTY3JvbGwoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRT
Y3JvbGxXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCku
eDtcblx0fSxcblxuXHRnZXRUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9z
aXRpb24oKS55O1xuXHR9LFxuXG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0UG9zaXRpb24oKS54O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4
dGVuZGVkIGJ5IGFsbCBvdGhlciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJs
ZV1cblxucHJvdmlkZXM6IEZ4XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9
IHRoaXMuRnggPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBP
cHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25T
dGFydDogbmlsLFxuXHRcdG9uQ2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRc
dCovXG5cdFx0ZnBzOiA2MCxcblx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxu
XHRcdGZyYW1lczogbnVsbCxcblx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9y
ZSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1
YmplY3QgPSB0aGlzLnN1YmplY3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdH0sXG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24ocCl7XG5cdFx0XHRyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7
XG5cdFx0fTtcblx0fSxcblxuXHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZnJhbWVTa2lwKXtcblx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/
IChub3cgLSB0aGlzLnRpbWUpIDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZh
bDtcblx0XHRcdHRoaXMudGltZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMu
ZnJhbWUgPCB0aGlzLmZyYW1lcyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24o
dGhpcy5mcmFtZSAvIHRoaXMuZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0
aGlzLmZyb20sIHRoaXMudG8sIGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20s
IHRoaXMudG8sIDEpKTtcblx0XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6
IGZ1bmN0aW9uKG5vdyl7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5j
dGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBk
ZWx0YSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVu
bmluZygpKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0
XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2Fz
ZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7
IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0
OiBmdW5jdGlvbihmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0
dGhpcy5mcmFtZSA9ICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigp
O1xuXHRcdHZhciBmcmFtZXMgPSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlv
bnMuZnBzLCBkdXJhdGlvbiA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0
aW9uID0gRnguRHVyYXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRo
aXMuZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMg
fHwgTWF0aC5yb3VuZCh0aGlzLmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRp
ZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJl
c2V0VGhlbmFibGUodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0
YXJ0JywgdGhpcy5zdWJqZWN0KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVz
ID09IHRoaXMuZnJhbWUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50
KCdjaGFpbkNvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRc
dHRoaXMuZmlyZUV2ZW50KCdzdG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRo
aXMucmVzb2x2ZSh0aGlzLnN1YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtc
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMu
ZnJhbWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlz
LnN1YmplY3QpLmNsZWFyQ2hhaW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmlzUGF1c2VkKCkpIHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGlzdCA9IGluc3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAm
JiBsaXN0LmNvbnRhaW5zKHRoaXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmco
KTtcblx0fVxuXG59KTtcblxuRnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7
XG5cdHJldHVybiAodG8gLSBmcm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9u
cyA9IHsnc2hvcnQnOiAyNTAsICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGds
b2JhbCB0aW1lcnNcblxudmFyIGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxv
b3AgPSBmdW5jdGlvbigpe1xuXHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9
IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlm
IChpbnN0YW5jZSkgaW5zdGFuY2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3Rh
bmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5z
dGFuY2VzW2Zwc10gPSBbXSk7XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBz
XSkgdGltZXJzW2Zwc10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwg
bGlzdCk7XG59O1xuXG52YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxp
c3QgPSBpbnN0YW5jZXNbZnBzXTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7
XG5cdFx0aWYgKCFsaXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5z
dGFuY2VzW2Zwc107XG5cdFx0XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zw
c10pO1xuXHRcdH1cblx0fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1Nc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5
IEZ4LlR3ZWVuLCBGeC5Nb3JwaCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRngu
Q1NTXG5cbi4uLlxuKi9cblxuRnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxc
blxuXHQvL3ByZXBhcmVzIHRoZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVu
Y3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29u
dmVydCh2YWx1ZXMpO1xuXHRcdHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtc
blx0XHRpZiAodG8gPT0gbnVsbCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxl
bWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51
bml0O1xuXHRcdFx0Ly8gYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIv
ZngvYmxvYi9tYXN0ZXIvZnguanMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBl
b2YgZnJvbSA9PSAnc3RyaW5nJyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAm
JiBwYXJzZUZsb2F0KGZyb20pICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3Bl
cnR5LCB0byArIHVuaXQpO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExl
ZnQgb3IgcGl4ZWxXaWR0aFxuXHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRc
dFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxD
YXNlKCldO1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFk
YXB0ZWQgZnJvbSBEZWFuIEVkd2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAw
Ny8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0g
ZWxlbWVudC5zdHlsZS5sZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8g
KyB1bml0O1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0
XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0
XHR9XG5cdFx0XHRcdGZyb20gPSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkg
KiAocGFyc2VGbG9hdChmcm9tKSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9w
ZXJ0eSwgZnJvbSArIHVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRo
aXMucGFyc2UoZnJvbSksIHRvOiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMg
YSB2YWx1ZSBpbnRvIGFuIGFycmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2
YWx1ZSA9IEZ1bmN0aW9uLmNvbnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZh
bHVlID09ICdzdHJpbmcnKSA/IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVl
KTtcblx0XHRyZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJp
bmcodmFsKTtcblx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRngu
Q1NTLlBhcnNlcnMsIGZ1bmN0aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJu
O1xuXHRcdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChw
YXJzZWQgfHwgcGFyc2VkID09PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBh
cnNlcn07XG5cdFx0XHR9KTtcblx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBh
cnNlcjogRnguQ1NTLlBhcnNlcnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9
KTtcblx0fSxcblxuXHQvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0
cywgdXNpbmcgdGhlaXIgcGFyc2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywg
ZGVsdGEpe1xuXHRcdHZhciBjb21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0
aCwgdG8ubGVuZ3RoKSkudGltZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2
YWx1ZTogZnJvbVtpXS5wYXJzZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwg
ZGVsdGEpLCBwYXJzZXI6IGZyb21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQu
JGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBj
b21wdXRlZDtcblx0fSxcblxuXHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRz
ZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdm
eDpjc3M6dmFsdWUnKSB2YWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5l
ZCA9IFtdO1xuXHRcdHZhbHVlLmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0g
cmV0dXJuZWQuY29uY2F0KGJpdC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0
fSk7XG5cdFx0cmV0dXJuIHJldHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdl
IHRvIGFuIGVsZW1lbnRcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2
YWx1ZSwgdW5pdCl7XG5cdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2
YWx1ZSwgdW5pdCkpO1xuXHR9LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0
byBmaW5kIHRoZSB2YWx1ZXMgZm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNl
bGVjdG9yKXtcblx0XHRpZiAoRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5D
YWNoZVtzZWxlY3Rvcl07XG5cdFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdF
eHAoJ14nICsgc2VsZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJj
aFN0eWxlcyA9IGZ1bmN0aW9uKHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0
aW9uKHJ1bGUpe1xuXHRcdFx0XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5
bGVzKHJ1bGUucnVsZXMgfHwgcnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdGlmICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2Vs
ZWN0b3JUZXh0ID0gKHJ1bGUuc2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxh
Y2UoL15cXHcrLywgZnVuY3Rpb24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2Uo
KTtcblx0XHRcdFx0fSkgOiBudWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2Vs
ZWN0b3JUZXN0LnRlc3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFj
aChFbGVtZW50LlN0eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAo
IXJ1bGUuc3R5bGVbc3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47
XG5cdFx0XHRcdFx0dmFsdWUgPSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRc
dHRvW3N0eWxlXSA9ICgoL15yZ2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDog
dmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2go
ZG9jdW1lbnQuc3R5bGVTaGVldHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0g
c2hlZXQuaHJlZjtcblx0XHRcdGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAm
JiBocmVmLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFy
IHJ1bGVzID0gc2hlZXQucnVsZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHls
ZXMocnVsZXMpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0g
dG87XG5cdH1cblxufSk7XG5cbkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9
IHtcblxuXHRDb2xvcjoge1xuXHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAo
dmFsdWUubWF0Y2goL14jWzAtOWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0
cnVlKTtcblx0XHRcdHJldHVybiAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxc
ZCspLFxccyooXFxkKykvKSkpID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFs
c2U7XG5cdFx0fSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRc
dFx0cmV0dXJuIGZyb20ubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1h
dGgucm91bmQoRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xu
XHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5t
YXAoTnVtYmVyKTtcblx0XHR9XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNl
RmxvYXQsXG5cdFx0Y29tcHV0ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUsIHVuaXQpe1xuXHRcdFx0cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xu
XHRcdH1cblx0fSxcblxuXHRTdHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChm
YWxzZSksXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBv
bmU7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVy
bztcblx0XHR9XG5cdH1cblxufTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxu
ZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55
IG51bWJlciBvZiBDU1MgcHJvcGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qg
b2YgcnVsZXMsIG9yIENTUyBiYXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5c
bi4uLlxuKi9cblxuRnguTW9ycGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxc
blxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVs
ZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBh
cmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5
cGVvZiBub3cgPT0gJ3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2
YXIgcCBpbiBub3cpIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9w
dGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rp
b24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBp
biBmcm9tKSBub3dbcF0gPSB0aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRc
dHJldHVybiBub3c7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRc
dGlmICghdGhpcy5jaGVjayhwcm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVv
ZiBwcm9wZXJ0aWVzID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVy
dGllcyk7XG5cdFx0dmFyIGZyb20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHBy
b3BlcnRpZXMpe1xuXHRcdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQs
IHAsIHByb3BlcnRpZXNbcF0pO1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0
dG9bcF0gPSBwYXJzZWQudG87XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0
byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6
IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9w
dGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFt
b3JwaCl7XG5cdFx0XHRtb3JwaCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9
KTtcblx0XHRcdHRoaXMuc3RvcmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4g
bW9ycGg7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5j
dGlvbihwcm9wcyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25z
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0
byBiZSB1c2VkIHdpdGggYW55IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQ
ZW5uZXIsIDxodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFu
ZCBvcHRpbWl6ZWQgdG8gYmUgdXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxu
cHJvdmlkZXM6IEZ4LlRyYW5zaXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxu
XHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9u
cy50cmFuc2l0aW9uIHx8IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0
eXBlb2YgdHJhbnMgPT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgn
OicpO1xuXHRcdFx0dHJhbnMgPSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNb
ZGF0YVswXV0gfHwgdHJhbnNbZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFb
MV0pIHRyYW5zID0gdHJhbnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsy
XSA/IGRhdGFbMl0uY2FwaXRhbGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5z
O1xuXHR9XG5cbn0pO1xuXG5GeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFy
YW1zKXtcblx0cGFyYW1zID0gQXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0g
ZnVuY3Rpb24ocG9zKXtcblx0XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07
XG5cdHJldHVybiBPYmplY3QuYXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxu
XHRcdGVhc2VPdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24o
MSAtIHBvcywgcGFyYW1zKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAocG9zIDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6
ICgyIC0gdHJhbnNpdGlvbigyICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0
fSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8p
e1xuXHRcdHJldHVybiB6ZXJvO1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRl
bmQgPSBmdW5jdGlvbih0cmFuc2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJh
bnNpdGlvbnMpIEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24o
dHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtc
blxuXHRQb3c6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhb
MF0gfHwgNik7XG5cdH0sXG5cblx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgu
cG93KDIsIDggKiAocCAtIDEpKTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRy
ZXR1cm4gMSAtIE1hdGguc2luKE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rp
b24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxu
XG5cdEJhY2s6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0
Qm91bmNlOiBmdW5jdGlvbihwKXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAs
IGIgPSAxOyAxOyBhICs9IGIsIGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAv
IDExKXtcblx0XHRcdFx0dmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEg
KiBwKSAvIDQsIDIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHZhbHVlO1xuXHR9LFxuXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBN
YXRoLnBvdygyLCAxMCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYg
eFswXSB8fCAxKSAvIDMpO1xuXHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQn
LCAnUXVpbnQnXS5lYWNoKGZ1bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9u
c1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVy
biBNYXRoLnBvdyhwLCBpICsgMik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRngu
VHdlZW5cblxuZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNp
dGlvbiBhbnkgQ1NTIHByb3BlcnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBF
bGVtZW50LmZhZGUsIEVsZW1lbnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rp
b24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0g
ZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5c
blx0c2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0
aCA9PSAxKXtcblx0XHRcdG5vdyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnBy
b3BlcnR5IHx8IHRoaXMub3B0aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIo
dGhpcy5lbGVtZW50LCBwcm9wZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7
XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xu
XHRcdHZhciBhcmdzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVy
dHkgPSB0aGlzLm9wdGlvbnMucHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJz
ZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0
XHRyZXR1cm4gdGhpcy5wYXJlbnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7
XG5cbkVsZW1lbnQuUHJvcGVydGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0
d2VlbiA9IHRoaXMucmV0cmlldmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0
d2VlbiA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMu
c3RvcmUoJ3R3ZWVuJywgdHdlZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxu
fTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0
byk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2
YXIgZmFkZSA9IHRoaXMuZ2V0KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5h
cHBlbmQoYXJndW1lbnRzKSwgdG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3Nb
MV0gPSAndG9nZ2xlJztcblx0XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93Jzog
bWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBt
ZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpc
blx0XHRcdFx0dmFyIGZsYWcgPSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0
eWxlKCdvcGFjaXR5JykgPT0gMSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRc
dGFyZ3NbMV0gPSBmbGFnID8gMCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycs
ICFmbGFnKTtcblx0XHRcdFx0dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRk
ZWZhdWx0OiBtZXRob2QgPSAnc3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5l
bGltaW5hdGUoJ2ZhZGU6ZmxhZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdz
KTtcblx0XHR2YXIgdG8gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9k
ID09ICdzZXQnKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8g
J2hpZGRlbicgOiAndmlzaWJsZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRp
ZiAoZmFkZS4kY2hhaW4ubGVuZ3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xu
XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7
XG5cdFx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRc
dH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRp
ZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhp
cy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlz
LmNhbGxDaGFpbigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0aGlnaGxpZ2h0OiBmdW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5c
dFx0XHRlbmQgPSB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJl
bnQnKSA/ICcjZmZmJyA6IGVuZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3
ZWVuJyk7XG5cdFx0dHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2Zm
ZmY4OCcsIGVuZCkuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tn
cm91bmQtY29sb3InLCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0
XHR0d2Vlbi5jYWxsQ2hhaW4oKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246
IFBvd2VyZnVsIGFsbCBwdXJwb3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3Qu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxl
bWVudCwgQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5c
bnByb3ZpZGVzOiBSZXF1ZXN0XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0
eSA9IGZ1bmN0aW9uKCl7fSxcblx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBu
ZXcgQnJvd3Nlci5SZXF1ZXN0KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcg
Q2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5U
aGVuYWJsZV0sXG5cblx0b3B0aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30s
XG5cdFx0b25Mb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVz
czogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30s
XG5cdFx0b25DYW5jZWw6IGZ1bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJl
c3BvbnNlVGV4dCwgcmVzcG9uc2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIp
e30sXG5cdFx0b25FeGNlcHRpb246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRc
dG9uVGltZW91dDogZnVuY3Rpb24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAn
Jyxcblx0XHR3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRh
OiAnJyxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRw
UmVxdWVzdCcsXG5cdFx0XHQnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBh
cHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxc
blx0XHRmb3JtYXQ6IGZhbHNlLFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25v
cmUnLFxuXHRcdGlzU3VjY2VzczogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJs
RW5jb2RlZDogdHJ1ZSxcblx0XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czog
ZmFsc2UsXG5cdFx0ZXZhbFJlc3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5v
Q2FjaGU6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHRoaXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9
LFxuXG5cdG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhy
O1xuXHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtc
blx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVu
Y3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7
XG5cdFx0XHR0aGlzLnN0YXR1cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5c
dFx0fS5iaW5kKHRoaXMpKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5c
dFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQg
PSBlbXB0eTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50
aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3Bv
bnNlID0ge3RleHQ6IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5y
ZXNwb25zZVhNTH07XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0
aGlzLnN0YXR1cykpXG5cdFx0XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlz
LnJlc3BvbnNlLnhtbCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5c
blx0aXNTdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztc
blx0XHRyZXR1cm4gKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRp
c1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxu
XG5cdHByb2Nlc3NTY3JpcHRzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25z
LmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRl
cignQ29udGVudC10eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVy
biB0ZXh0LnN0cmlwU2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5c
dHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5w
cm9jZXNzU2NyaXB0cyh0ZXh0KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQs
IHhtbDogeG1sfSk7XG5cdH0sXG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJn
dW1lbnRzKS5jYWxsQ2hhaW4oKTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMub25GYWlsdXJlKCk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4
aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtc
blx0fSxcblxuXHRsb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVu
dCgnbG9hZHN0YXJ0JywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBm
dW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0
aGlzLnhocl0pO1xuXHR9LFxuXG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJl
RXZlbnQoJ3RpbWVvdXQnLCB0aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3Rp
bWVvdXQnLCB4aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihu
YW1lLCB2YWx1ZSl7XG5cdFx0dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4g
RnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJl
c3BvbnNlSGVhZGVyKG5hbWUpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6
IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYg
KCF0aGlzLmNoZWNrKG9wdGlvbnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5p
c1N1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRc
dHRoaXMucnVubmluZyA9IHRydWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtc
blx0XHRpZiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9
IHtkYXRhOiBvcHRpb25zfTtcblxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0
aW9ucyA9IE9iamVjdC5hcHBlbmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhv
ZDogb2xkLm1ldGhvZH0sIG9wdGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1
cmwgPSBTdHJpbmcob3B0aW9ucy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2Vy
Q2FzZSgpO1xuXG5cdFx0c3dpdGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVu
dCc6IGRhdGEgPSBkb2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmlu
ZyhkYXRhKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2
YXIgZm9ybWF0ID0gJ2Zvcm1hdD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEg
PSAoZGF0YSkgPyBmb3JtYXQgKyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZW11bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0
aG9kKSl7XG5cdFx0XHR2YXIgX21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRk
YXRhID0gKGRhdGEpID8gX21ldGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0
aG9kID0gJ3Bvc3QnO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAm
JiBbJ3Bvc3QnLCAncHV0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2Rpbmcg
PSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5l
bmNvZGluZyA6ICcnO1xuXHRcdFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0
aWYgKCF1cmwpIHVybCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRy
aW1Qb3NpdGlvbiA9IHVybC5sYXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24g
PiAtMSAmJiAodHJpbVBvc2l0aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJs
LnN1YnN0cigwLCB0cmltUG9zaXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hl
KVxuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3Ry
aW5nLnVuaXF1ZUlEKCk7XG5cblx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1l
dGhvZCA9PSAnZGVsZXRlJykpe1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEg
PyAnJicgOiAnPycpICsgZGF0YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZh
ciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5v
bmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9n
cmVzcyA9IHRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3Blbiht
ZXRob2QudG9VcHBlckNhc2UoKSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9u
cy51c2VyLCB0aGlzLm9wdGlvbnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndp
dGhDcmVkZW50aWFscykgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRl
bnRpYWxzID0gdHJ1ZTtcblxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3Rh
dGVDaGFuZ2UuYmluZCh0aGlzKTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVu
Y3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhl
YWRlcihrZXksIHZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVF
dmVudCgnZXhjZXB0aW9uJywgW2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3Jl
YXNvbjogJ2V4Y2VwdGlvbicsIHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0
XHR9LCB0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRp
bmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9
XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0
XHRpZiAoIXRoaXMub3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxz
ZSBpZiAodGhpcy5vcHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVs
YXkodGhpcy5vcHRpb25zLnRpbWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRo
aXM7XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xu
XHRcdHhoci5hYm9ydCgpO1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91
dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIu
b25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhy
Lm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5l
dyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0
dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1
dCcsICdkZWxldGUnLCAncGF0Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVM
RVRFJywgJ1BBVENIJywgJ0hFQUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNb
bWV0aG9kXSA9IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRo
b2Q6IG1ldGhvZFxuXHRcdH07XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBk
YXRhO1xuXHRcdHJldHVybiB0aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0
LmltcGxlbWVudChtZXRob2RzKTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0
c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJyku
Y2FuY2VsKCk7XG5cdFx0c2VuZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmll
dmUoJ3NlbmQnKTtcblx0XHRpZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtc
blx0XHRcdFx0ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21l
dGhvZCcpIHx8ICdwb3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRc
dFx0dGhpcy5zdG9yZSgnc2VuZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0
fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtc
blx0XHR2YXIgc2VuZGVyID0gdGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0
YTogdGhpcywgdXJsOiB1cmwgfHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1M
XG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRk
aXRpb25hbCBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0
XVxuXG5wcm92aWRlczogUmVxdWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1
cGRhdGU6IGZhbHNlLFxuXHRcdGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUs
XG5cdFx0ZmlsdGVyOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0
L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0
c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMs
IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0
cmlwU2NyaXB0cyhmdW5jdGlvbihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9
IHNjcmlwdDtcblx0XHR9KTtcblxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2go
Lzxib2R5W14+XSo+KFtcXHNcXFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVz
cG9uc2UuaHRtbCA9IG1hdGNoWzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdicp
LnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAu
Y2hpbGROb2Rlcztcblx0XHRyZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0
aW9ucy5maWx0ZXIgfHwgJyonKTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2Uu
dHJlZSA9IHJlc3BvbnNlLmVsZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0
XHR2YXIgdXBkYXRlID0gZG9jdW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0
XHRpZiAob3B0aW9ucy5maWx0ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5c
dFx0XHRlbHNlIHVwZGF0ZS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2Ug
aWYgKG9wdGlvbnMuYXBwZW5kKXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRp
b25zLmFwcGVuZCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRz
LnJldmVyc2UoKS5pbmplY3QoYXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAu
Z2V0Q2hpbGRyZW4oKSk7XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93
c2VyLmV4ZWMocmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNw
b25zZS50cmVlLCByZXNwb25zZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2
YXNjcmlwdCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50
czogcmVzcG9uc2UuZWxlbWVudHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJl
c3BvbnNlLmphdmFzY3JpcHR9KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxv
YWQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMu
Z2V0KCdsb2FkJykuY2FuY2VsKCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9
IHRoaXMucmV0cmlldmUoJ2xvYWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5l
dyBSZXF1ZXN0LkhUTUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMs
IG1ldGhvZDogJ2dldCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9
XG5cdFx0cmV0dXJuIGxvYWQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dGxvYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5Lmxpbmso
YXJndW1lbnRzLCB7ZGF0YTogVHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxu
ZGVzY3JpcHRpb246IEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cblNlZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWly
ZXM6IFtBcnJheSwgU3RyaW5nLCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxu
XG4uLi5cbiovXG5cbmlmICh0eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0g
e307XG5cblxuXG4oZnVuY3Rpb24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYics
ICdcXHQnOiAnXFxcXHQnLCAnXFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAn
XFxcXHInLCAnXCInIDogJ1xcXFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2Nh
cGUgPSBmdW5jdGlvbihjaHIpe1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAo
JzAwMDAnICsgY2hyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xu
XG5KU09OLnZhbGlkYXRlID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJl
cGxhY2UoL1xcXFwoPzpbXCJcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5c
blx0XHRcdFx0XHRyZXBsYWNlKC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8
LT9cXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0
XHRyZXBsYWNlKC8oPzpefDp8LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15b
XFxdLDp7fVxcc10qJC8pLnRlc3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5z
dHJpbmdpZnkgPyBmdW5jdGlvbihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtc
bn0gOiBmdW5jdGlvbihvYmope1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50
b0pTT04oKTtcblxuXHRzd2l0Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxu
XHRcdFx0cmV0dXJuICdcIicgKyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBl
c2NhcGUpICsgJ1wiJztcblx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2Jq
Lm1hcChKU09OLmVuY29kZSkuY2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNl
ICdoYXNoJzpcblx0XHRcdHZhciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFs
dWUpO1xuXHRcdFx0XHRpZiAoanNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6
JyArIGpzb24pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xu
XHRcdGNhc2UgJ251bWJlcic6IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0
Y2FzZSAnbnVsbCc6IHJldHVybiAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5c
bkpTT04uc2VjdXJlID0gdHJ1ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywg
c2VjdXJlKXtcblx0aWYgKCFzdHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJl
dHVybiBudWxsO1xuXG5cdGlmIChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7
XG5cdGlmIChzZWN1cmUpe1xuXHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShz
dHJpbmcpO1xuXHRcdGlmICghSlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3Io
J0pTT04gY291bGQgbm90IGRlY29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5k
IHRoZSB2YWx1ZSBpcyBub3Qgc2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsg
c3RyaW5nICsgJyknKTtcbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5K
U09OXG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGgg
YWRkaXRpb25hbCBtZXRob2RzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09O
XVxuXG5wcm92aWRlczogUmVxdWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
Km9uRXJyb3I6IGZ1bmN0aW9uKHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5c
dH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQo
b3B0aW9ucyk7XG5cdFx0T2JqZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2Nl
cHQnOiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0
fSk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5c
dFx0dHJ5IHtcblx0XHRcdGpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0
ZXh0LCB0aGlzLm9wdGlvbnMuc2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0
aGlzLmZpcmVFdmVudCgnZXJyb3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0
XHR9XG5cdFx0aWYgKGpzb24gPT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0dGhpcy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJl
c29sdmUoe2pzb246IGpzb24sIHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogQ29va2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcs
IHJlYWRpbmcsIGFuZCBkZWxldGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkg
UGV0ZXItUGF1bCBLb2NoIChodHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09w
dGlvbnMsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29v
a2llID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6
IHtcblx0XHRwYXRoOiAnLycsXG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFs
c2UsXG5cdFx0c2VjdXJlOiBmYWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5j
b2RlOiB0cnVlLFxuXHRcdGh0dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRP
cHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5lbmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVl
KTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0
aGlzLm9wdGlvbnMuZG9tYWluO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0g
JzsgcGF0aD0nICsgdGhpcy5vcHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJh
dGlvbil7XG5cdFx0XHR2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUo
ZGF0ZS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAx
MDAwKTtcblx0XHRcdHZhbHVlICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtc
blx0XHR9XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xu
XHRcdHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVl
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IHZhbHVlID0gdGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxz
KicgKyB0aGlzLmtleS5lc2NhcGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAo
dmFsdWUpID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0
ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVy
Z2Uoe30sIHRoaXMub3B0aW9ucywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUsIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZh
bHVlKTtcbn07XG5cbkNvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBD
b29raWUoa2V5KS5yZWFkKCk7XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwg
b3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xu
fTtcblxuLypcbi0tLVxuXG5uYW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
dGhlIGN1c3RvbSBldmVudCBkb21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbQnJvd3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlk
ZXM6IFtET01SZWFkeSwgRG9tUmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywg
ZG9jdW1lbnQpe1xuXG52YXIgcmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNo
b3VsZFBvbGwsXG5cdHRpbWVyLFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpO1xuXG52YXIgZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQo
dGltZXIpO1xuXHRpZiAoIXJlYWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1
ZTtcblx0XHRkb2N1bWVudC5yZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJl
YWR5KS5yZW1vdmVMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1
bWVudC5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVh
ZHknKTtcblx0fVxuXHQvLyBjbGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cg
PSB0ZXN0RWxlbWVudCA9IG51bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRm
b3IgKHZhciBpID0gY2hlY2tzLmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRk
b21yZWFkeSgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5c
bnZhciBwb2xsID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFj
aGVjaygpKSB0aW1lciA9IHNldFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRk
TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4v
LyBkb1Njcm9sbCB0ZWNobmlxdWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53
Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93
cyB3aGVuIHRoZSBET00gaXMgbm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIg
ZG9TY3JvbGxXb3JrcyA9IGZ1bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9T
Y3JvbGwoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuLy8gSWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0
byBkZXRlcm1pbmUgZG9tcmVhZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxl
bWVudC5kb1Njcm9sbCAmJiAhZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3Jv
bGxXb3Jrcyk7XG5cdHNob3VsZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChk
b2N1bWVudC5yZWFkeVN0YXRlKSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUg
PSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0
YXRlID09ICdjb21wbGV0ZScpO1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBk
b2N1bWVudCkgZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5lbHNlIHNob3VsZFBvbGwgPSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5F
bGVtZW50LkV2ZW50cy5kb21yZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRp
ZiAocmVhZHkpIGZuLmNhbGwodGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRv
bXJlYWR5IGZpcmVzIGJlZm9yZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNl
OiAnbG9hZCcsXG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlz
ID09IHdpbmRvdykgZm4uY2FsbCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdGlmICh0aGlzID09IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVs
ZXRlIEVsZW1lbnQuRXZlbnRzLmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59
O1xuXG4vLyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFk
ZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3
aW5kb3csIGRvY3VtZW50KTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8qIE1vb1Rvb2xzOiB0aGUg
amF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmln
aHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL21v
b3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIgQnVpbGQ6IGh0dHBzOi8vbW9vdG9vbHMubmV0L2Nv
cmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgwN2IxNzNkNWRlZmY2NzNmY1xuKi9cbi8qXG4tLS1c
blxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlvbjogVGhlIGhlYXJ0IG9mIE1vb1Rvb2xzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIw
MDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLyku
XG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0dHA6Ly9tb290b29s
cy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3BpcmF0aW9uOlxuICAtIENsYXNzIGltcGxlbWVudGF0
aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9n
LzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2FyZHMsIFtHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl
cy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBpbnNwaXJlZCBieSBb
UHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmlnaHQgKGMpIDIwMDUt
MjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuXG5wcm92aWRlczogW0NvcmUsIE1vb1Rvb2xzLCBU
eXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV1cblxuLi4uXG4qL1xuLyohIE1vb1Rvb2xz
OiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBj
b3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXShodHRw
czovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4qL1xuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuTW9vVG9v
bHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcsXG5cdGJ1aWxkOiAnNTI5NDIyODcyYWRmZmY0MDFi
OTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07XG5cbi8vIHR5cGVPZiwgaW5zdGFuY2VPZlxuXG52
YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0g
bnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYgKGl0ZW0uJGZhbWlseSAhPSBudWxsKSByZXR1cm4g
aXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0ZW0ubm9kZU5hbWUpe1xuXHRcdGlmIChpdGVtLm5v
ZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVudCc7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MykgcmV0dXJuICgvXFxTLykudGVzdChpdGVtLm5vZGVWYWx1ZSkgPyAndGV4dG5vZGUnIDogJ3do
aXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyl7
XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0pIHJldHVybiAnYXJndW1lbnRzJztcblx0XHRpZiAo
J2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29sbGVjdGlvbic7XG5cdH1cblxuXHRyZXR1cm4gdHlw
ZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFuY2VPZiA9IGZ1bmN0
aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBmYWxzZTtcblx0
dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5jb25zdHJ1Y3Rvcjtc
blx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0XHRpZiAoY29uc3RydWN0b3IgPT09IG9iamVjdCkg
cmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5wYXJlbnQ7XG5cdH1c
blx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVtLmhhc093blByb3BlcnR5KSByZXR1cm4gZmFsc2U7
XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVjdDtcbn07XG5c
bnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5c
bi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJsZXMgPSB0cnVlO1xuZm9yICh2YXIgaSBpbiB7dG9T
dHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7XG5pZiAoZW51bWVyYWJsZXMpIGVudW1lcmFi
bGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAncHJv
cGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAnY29uc3Ry
dWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmplY3QsIGZu
LCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51bWVyYWJsZXMubGVu
Z3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVudW1lcmFibGVzW2ldO1xuXHRcdC8vIHNpZ25hdHVy
ZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9hZFNldHRlciBjYW4gZGlyZWN0bHkgcGFzcyB0aGVc
blx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdpdGhvdXQgc3dhcHBpbmcgYXJndW1lbnRzLlxuXHRc
dGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwoYmluZCwgaywgb2Jq
ZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4PiovXG5cbi8vIEZ1bmN0aW9uIG92ZXJsb2FkaW5n
XG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5v
dmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztc
blx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmIChhID09IG51bGwpIHJldHVybiB0aGlz
O1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlwZW9mIGEgIT0gJ3N0cmluZycpe1xuXHRcdFx0Zm9y
ICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhpcywgaywgYVtrXSk7XG5cdFx0XHQvKjxsdElFOD4q
L1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KGEsIHNlbGYsIHRoaXMpO1xuXHRc
dFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuY2FsbCh0aGlzLCBhLCBi
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5
cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRo
aXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtcblx0XHR2YXIgYXJncywgcmVzdWx0O1xuXHRcdGlm
ICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJncyA9IGE7XG5cdFx0ZWxzZSBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0ZWxzZSBpZiAodXNlUGx1cmFsKSBh
cmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtcblx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJnc1tpXV0gPSBzZWxm
LmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IHNlbGYu
Y2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn07XG5cbkZ1
bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpc1tr
ZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5p
bXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpcy5wcm90b3R5cGVba2V5XSA9
IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG4vLyBGcm9tXG5cbnZhciBzbGljZSA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xu
XHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107XG5cdHJldHVybiAoVHlwZS5pc0VudW1lcmFi
bGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVPZihpdGVtKSA9PSAn
YXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dO1xufTtcblxuRnVuY3Rp
b24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSAn
ZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBpdGVtO1xuXHR9O1xu
fTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgbnVtYmVyID0g
cGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJuIGlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiBu
dWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIGl0
ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlvbi5mcm9tID0gRnVuY3Rpb24uY29udmVydDtcbk51
bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7XG5TdHJpbmcuZnJvbSA9IFN0cmluZy5jb252ZXJ0
O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0aGlkZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRkZW4gPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kcHJvdGVjdGVkID0gdHJ1
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLy8gVHlwZVxuXG52YXIgVHlwZSA9
IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCl7XG5cdGlmIChuYW1lKXtcblx0XHR2
YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHR5cGVDaGVjayA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gbG93ZXIpO1xuXHRcdH07
XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVDaGVjaztcblx0XHRpZiAob2JqZWN0ICE9
IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0gKGZ1bmN0aW9uKCl7XG5c
dFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRcdH0pLmhpZGUoKTtcblx0XHRcdFxuXHRcdH1cblx0
fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0b2JqZWN0LmV4dGVu
ZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1Y3RvciA9IFR5cGU7XG5cdG9iamVjdC5wcm90b3R5
cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xuXG5cdHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIg
dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5UeXBlLmlzRW51bWVyYWJs
ZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKGl0ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRl
bS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9TdHJpbmcuY2FsbChpdGVtKSAhPSAnW29iamVjdCBG
dW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9va3MgPSB7fTtcblxudmFyIGhvb2tzT2YgPSBmdW5j
dGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90eXBlKTtcblx0
cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29rc1t0eXBlXSA9IFtdKTtcbn07XG5cbnZhciBpbXBs
ZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4k
aGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTtcblxuXHRmb3Ig
KHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgaG9vayA9IGhvb2tz
W2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykgPT0gJ3R5cGUnKSBpbXBsZW1lbnQuY2FsbChob29r
LCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2UgaG9vay5jYWxsKHRoaXMsIG5hbWUsIG1ldGhvZCk7
XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTtcblx0aWYgKHBy
ZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXMucHJvdG90eXBlW25h
bWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlzW25hbWVdID09IG51bGwgJiYgdHlwZU9mKG1ldGhv
ZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNhbGwodGhpcywgbmFtZSwgZnVuY3Rpb24oaXRlbSl7
XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShpdGVtLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkp
O1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRp
ZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cdHZhciBwcmV2aW91cyA9IHRo
aXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtcblxuVHlwZS5pbXBsZW1lbnQoe1xuXG5cdGltcGxl
bWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0ZXh0ZW5kOiBleHRlbmQub3Zl
cmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczogZnVuY3Rpb24obmFtZSwgZXhpc3Rpbmcpe1xuXHRc
dGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUsIHRoaXMucHJvdG90eXBlW2V4aXN0aW5nXSk7XG5c
dH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRtaXJyb3I6IGZ1bmN0aW9uKGhvb2spe1xuXHRcdGhv
b2tzT2YodGhpcykucHVzaChob29rKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
bmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxuLy8gRGVmYXVsdCBUeXBlc1xuXG52YXIgZm9yY2Ug
PSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1ldGhvZHMpe1xuXHR2YXIgaXNUeXBlID0gKG9iamVj
dCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlwZSA9IG9iamVjdC5wcm90b3R5cGU7XG5cblx0aWYg
KGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTtcblxuXHRmb3IgKHZhciBp
ID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHR2YXIga2V5ID0gbWV0
aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBvYmplY3Rba2V5XSxcblx0XHRcdHByb3RvID0gcHJv
dG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2VuZXJpYykgZ2VuZXJpYy5wcm90ZWN0KCk7XG5cdFx0
aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0LmltcGxlbWVudChrZXksIHByb3RvLnByb3RlY3Qo
KSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtcblx0XHR2YXIgbWV0aG9kc0VudW1lcmFibGUgPSBw
cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUobWV0aG9kc1swXSk7XG5cdFx0b2JqZWN0LmZv
ckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoIW1ldGhvZHNFbnVtZXJhYmxl
KSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVttZXRob2RzW2ldXSwgbWV0aG9kc1tpXSk7
XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gcHJvdG90eXBlKSBmbi5jYWxsKHByb3Rv
dHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBmb3Jj
ZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBTdHJpbmcsIFtcblx0J2NoYXJBdCcsICdjaGFyQ29k
ZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycsICdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ21h
dGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNoJyxcblx0J3NsaWNlJywgJ3NwbGl0Jywg
J3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJpbScsICd0b0xvd2VyQ2FzZScsICd0b1VwcGVyQ2Fz
ZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5cdCdwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdmaWx0ZXInLCAnZm9yRWFjaCcsICdl
dmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAnY29udGFpbnMn
XG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5cdCd0b0V4cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAn
dG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nXG5dKSgnRnVuY3Rpb24nLCBGdW5jdGlvbiwg
W1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5kJ1xuXSkoJ1JlZ0V4cCcsIFJlZ0V4cCwgW1xuXHQn
ZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcsIE9iamVjdCwgW1xuXHQnY3JlYXRlJywgJ2RlZmlu
ZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAna2V5cycsXG5cdCdnZXRQcm90b3R5cGVP
ZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsXG5c
dCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4dGVuc2libGUnLCAnc2VhbCcsICdpc1NlYWxlZCcs
ICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgnRGF0ZScsIERhdGUsIFsnbm93J10pO1xuXG5PYmpl
Y3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCk7XG5cbkRhdGUuZXh0ZW5kKCdub3cn
LCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhuZXcgRGF0ZSk7XG59KTtcblxubmV3IFR5cGUoJ0Jv
b2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4ZXMgTmFOIHJldHVybmluZyBhcyBOdW1iZXJcblxu
TnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXtcblx0cmV0dXJuIGlzRmluaXRl
KHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7XG59LmhpZGUoKTtcblxuLy8gTnVtYmVyLnJhbmRv
bVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1heCl7XG5cdHJldHVy
biBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xufSk7
XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNcblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwh
RVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIGZu
LmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxuXHQvKjwvIUVTNT4q
L1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRBcnJheS5mb3JFYWNoKHRoaXMs
IGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuT2JqZWN0LmV4dGVu
ZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIga2V5cyA9IFtdO1xuXHRc
dGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
amVjdCwgaykpIGtleXMucHVzaChrKTtcblx0XHR9XG5cdFx0Lyo8bHRJRTg+Ki9cblx0XHRmb3JF
YWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmdW5jdGlvbihrKXtcblx0XHRcdGtleXMu
cHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwvbHRJRTg+Ki9cblx0XHRyZXR1cm4ga2V5cztcblx0
fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHRPYmplY3Qu
a2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdGZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9KTtcblx0fVxuXG59KTtcblxuT2JqZWN0
LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxuXG4vLyBBcnJheSAmIE9iamVjdCBjbG9uaW5nLCBP
YmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nXG5cbnZhciBjbG9uZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0pKXtcblx0XHRjYXNlICdhcnJheSc6IHJldHVybiBp
dGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2JqZWN0JzogcmV0dXJuIE9iamVjdC5jbG9uZShpdGVt
KTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRlbTtcblx0fVxufTtcblxuQXJyYXkuaW1wbGVtZW50
KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBpID0gdGhpcy5sZW5ndGgsIGNsb25lID0gbmV3
IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2YodGhpc1tpXSk7XG5c
dHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIgbWVyZ2VPbmUgPSBmdW5jdGlvbihzb3VyY2UsIGtl
eSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXtcblx0XHRjYXNlICdvYmpl
Y3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3VyY2Vba2V5XSkgPT0gJ29iamVjdCcpIE9iamVjdC5t
ZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7XG5cdFx0XHRlbHNlIHNvdXJjZVtrZXldID0gT2Jq
ZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXknOiBzb3Vy
Y2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogc291cmNlW2tl
eV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVybiBzb3VyY2U7XG59O1xuXG5PYmplY3QuZXh0ZW5k
KHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXtcblx0XHRpZiAodHlwZU9mKGsp
ID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VPbmUoc291cmNlLCBrLCB2KTtcblx0XHRmb3IgKHZh
ciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIG9i
amVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1lcmdl
T25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5XSk7XG5cdFx0fVxuXHRcdHJldHVybiBzb3VyY2U7
XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGNsb25lID0ge307
XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgY2xvbmVba2V5XSA9IGNsb25lT2Yob2JqZWN0
W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKG9y
aWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBs
OyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVkID0gYXJndW1lbnRzW2ldIHx8IHt9O1xuXHRcdFx0
Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBvcmlnaW5hbFtrZXldID0gZXh0ZW5kZWRba2V5XTtc
blx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsO1xuXHR9XG5cbn0pO1xuXG4vLyBPYmplY3QtbGVz
cyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0ZVNwYWNlJywgJ1RleHROb2RlJywgJ0NvbGxlY3Rp
b24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0bmV3IFR5cGUobmFtZSk7
XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZhciBVSUQgPSBEYXRlLm5vdygpO1xuXG5TdHJpbmcu
ZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiAoVUlEKyspLnRvU3RyaW5n
KDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBBcnJheVxuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gsIGNvbnRhaW5zLCBh
bmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1R5
cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4uLi5cbiovXG5cbkFycmF5LmltcGxlbWVudCh7XG5c
blx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChp
IGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0gW107XG5cdFx0Zm9yICh2YXIgdmFsdWUsIGkg
PSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspIGlmIChpIGluIHRoaXMpe1xu
XHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGks
IHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztc
blx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHR2YXIgbGVuZ3Ro
ID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0Zm9yICh2YXIgaSA9IChmcm9tIDwgMCkgPyBNYXRo
Lm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0
XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0dXJuIC0x
O1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciBsZW5ndGggPSB0
aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSByZXN1bHRzW2ld
ID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJl
c3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChp
IGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiB0cnVl
O1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0Y2xl
YW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe1xu
XHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtcblx0XHR9KTtcblx0fSxcblxuXHRpbnZva2U6IGZ1
bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRz
LCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4g
aXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdzKTtcblx0XHR9KTtcblx0fSxcblxuXHRh
c3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xuXHRcdHZhciBvYmogPSB7fSwgbGVuZ3RoID0gTWF0
aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0gPSB0aGlzW2ldO1xuXHRcdHJldHVybiBvYmo7XG5c
dH0sXG5cblx0bGluazogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRm
b3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHRcdFx0aWYgKG9iamVjdFtrZXldKHRoaXNbaV0p
KXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHRoaXNbaV07XG5cdFx0XHRcdFx0ZGVsZXRlIG9i
amVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKGl0ZW0sIGZy
b20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4T2YoaXRlbSwgZnJvbSkgIT0gLTE7XG5cdH0sXG5c
blx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFy
cmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIDogbnVsbDtc
blx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0
aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0gOiBudWxsO1xuXHR9
LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICghdGhpcy5jb250YWlucyhp
dGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbWJp
bmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0
aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5W2ldKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0Zm9yICh2YXIgaSA9IHRoaXMu
bGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSB0aGlzLnNwbGljZShp
LCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZs
YXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVP
Zih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBlID09ICdudWxsJykgY29udGludWU7XG5cdFx0XHRh
cnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ2NvbGxlY3Rp
b24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlzW2ldLCBBcnJheSkp
ID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNbaV0pO1xuXHRcdH1cblx0XHRyZXR1cm4g
YXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldICE9IG51bGwp
IHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRoZXhU
b1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCAhPSAzKSByZXR1cm4g
bnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYg
KHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybiBwYXJzZUlu
dCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoYXJyYXkpID8gcmdiIDogJ3JnYign
ICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRoaXMubGVuZ3RoID09
IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3BhcmVudCc7XG5cdFx0
dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKXtcblx0XHRcdHZh
ciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2KTtcblx0XHRcdGhleC5wdXNoKChiaXQu
bGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhcnJh
eSkgPyBoZXggOiAnIycgKyBoZXguam9pbignJyk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBGdW5jdGlvbiBQcm90
b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogRnVuY3Rpb25c
blxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRlbmQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtc
blx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhcmd1bWVudHNbaV0oKTtcblx0XHRcdH0gY2F0
Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxufSk7XG5cbkZ1bmN0aW9u
LmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oYXJncywgYmluZCl7XG5cdFx0dHJ5
IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZlcnQoYXJncykpO1xu
XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdC8qPCFFUzUt
YmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0aGF0KXtcblx0XHR2YXIgc2VsZiA9IHRoaXMsXG5c
dFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGljZShhcmd1bWVudHMs
IDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5jdGlvbigpe307XG5cblx0XHR2YXIgYm91bmQgPSBm
dW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRleHQgPSB0aGF0LCBsZW5ndGggPSBhcmd1bWVudHMu
bGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCl7XG5cdFx0XHRcdEYucHJv
dG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5cdFx0XHRcdGNvbnRleHQgPSBuZXcgRjtcblx0XHRc
dH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFyZ3MgJiYgIWxlbmd0aClcblx0XHRcdFx0PyBzZWxm
LmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBzZWxmLmFwcGx5KGNvbnRleHQsIGFyZ3MgJiYgbGVu
Z3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBhcmdzIHx8IGFyZ3Vt
ZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0IDogY29udGV4dDtc
blx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtcblx0fSxcblx0Lyo8LyFFUzUtYmluZD4qL1xuXG5c
dHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRp
ZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRyZXR1cm4g
ZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBzZWxmLmFwcGx5KGJpbmQsIGFyZ3MgfHwgYXJndW1l
bnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRlbGF5OiBmdW5jdGlvbihkZWxheSwgYmluZCwgYXJn
cyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6
IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9LFxuXG5cdHBlcmlvZGljYWw6IGZ1bmN0aW9uKHBl
cmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRJbnRlcnZhbCh0aGlzLnBhc3Mo
KGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBwZXJpb2RpY2FsKTtcblx0fVxuXG59
KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogTnVtYmVyXG5cbmRlc2NyaXB0aW9uOiBDb250YWlu
cyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMsIGFuZCBjZWlsLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlk
ZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51bWJlci5pbXBsZW1lbnQoe1xuXG5cdGxpbWl0OiBm
dW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWlu
LCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uKHByZWNpc2lvbil7XG5cdFx0cHJl
Y2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVkKHByZWNpc2lvbiA8
IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQodGhpcyAqIHByZWNp
c2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5cblx0dGltZXM6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChiaW5kLCBpLCB0aGlz
KTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0
KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFy
c2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH1cblxufSk7XG5cbk51bWJlci5hbGlhcygnZWFj
aCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24obWF0aCl7XG5cbnZhciBtZXRob2RzID0ge307XG5c
bm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtcblx0aWYgKCFOdW1iZXJbbmFtZV0pIG1ldGhvZHNb
bmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBNYXRoW25hbWVdLmFwcGx5KG51bGwsIFt0
aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChhcmd1bWVudHMpKSk7XG5cdH07XG59KTtcblxuTnVt
YmVyLmltcGxlbWVudChtZXRob2RzKTtcblxufSkoWydhYnMnLCAnYWNvcycsICdhc2luJywgJ2F0
YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3MnLCAnZXhwJywgJ2Zsb29yJywgJ2xvZycsICdtYXgn
LCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3FydCcsICd0YW4nXSk7XG5cbi8qXG4tLS1cblxubmFt
ZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJvdG90eXBlcyBsaWtl
IGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlLCBBcnJheV1cblxucHJvdmlkZXM6IFN0
cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5pbXBsZW1lbnQoe1xuXG5cdC8vPCFFUzY+XG5cdGNv
bnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGluZGV4KXtcblx0XHRyZXR1cm4gKGluZGV4ID8gU3Ry
aW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhPZihzdHJpbmcpID4g
LTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5cdHRlc3Q6IGZ1bmN0aW9uKHJlZ2V4LCBwYXJhbXMp
e1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8gcmVnZXggOiBuZXcg
UmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7XG5cdH0sXG5cblx0dHJpbTog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15cXHMrfFxccysk
L2csICcnKTtcblx0fSxcblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5n
KHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5cdH0sXG5cblx0Y2FtZWxDYXNl
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvLVxcRC9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNl
KCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlwaGVuYXRlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0
cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiBtYXRj
aC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGVzY2FwZVJlZ0V4cDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xc
XVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Up
e1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0fSxcblxuXHR0b0Zs
b2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5c
dGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIGhleCA9IFN0cmluZyh0aGlzKS5t
YXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwyfSkoXFx3ezEsMn0pJC8pO1xuXHRcdHJldHVybiAo
aGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHJn
YlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIHJnYiA9IFN0cmluZyh0aGlzKS5tYXRj
aCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSGV4KGFycmF5KSA6
IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdleHApe1xu
XHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShyZWdleHAgfHwgKC9cXFxcP1xceyhbXnt9
XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7XG5cdFx0XHRpZiAobWF0Y2guY2hhckF0
KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNoLnNsaWNlKDEpO1xuXHRcdFx0cmV0dXJuIChvYmpl
Y3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0gOiAnJztcblx0XHR9KTtcblx0fVxuXG59
KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogQnJvd3NlclxuXG5kZXNjcmlwdGlvbjogVGhlIEJy
b3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93c2VyIGluaXRpYWxpemF0aW9uLCBXaW5kb3cgYW5k
IERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIgSGFzaC5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIEZ1bmN0aW9uLCBOdW1iZXIsIFN0cmluZ11cblxu
cHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3csIERvY3VtZW50XVxuXG4uLi5cbiovXG5cbihmdW5j
dGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xudmFyIHdpbmRvdyA9IGRv
Y3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKHVhLCBwbGF0Zm9y
bSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcblx0cGxhdGZvcm0gPSAocGxhdGZvcm0gPyBw
bGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycpO1xuXG5cdC8vIGNocm9tZSBpcyBpbmNsdWRlZCBp
biB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBjaGVjayBmb3IgZWRnZSBmaXJzdCxcblx0Ly8gYmVm
b3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLlxuXHR2YXIgVUEgPSB1YS5tYXRjaCgvKGVkZ2Up
W1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtcblx0aWYgKCFVQSl7XG5cdFx0VUEgPSB1YS5tYXRj
aCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVyc2lvbilbXFxzXFwv
Ol0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJpfCg/OnJ2W1xcc1xcLzpdfHZlcnNpb25bXFxzXFwv
Ol0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXTtcblx0fVxuXG5c
dGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xuXHRcdFVBWzFdID0gJ2llJztcblx0XHRpZiAoVUFb
NF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxzZSBpZiAoVUFbMV0gPT0gJ2NyaW9zJyl7XG5cdFx0
VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5cdHBsYXRmb3JtID0gdWEubWF0Y2goL2lwKD86YWR8
b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRyb2lkKS8pIHx8IHVh
Lm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhlciddKVswXTtcblx0aWYgKHBsYXRmb3Jt
ID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJztcblxuXHRyZXR1cm4ge1xuXHRcdGV4dGVu
ZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxcblx0XHRuYW1lOiAoVUFbMV0gPT0gJ3ZlcnNp
b24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0dmVyc2lvbjogcGFyc2VGbG9hdCgoVUFbMV0gPT0g
J29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6IFVBWzJdKSxcblx0XHRwbGF0Zm9ybTogcGxhdGZv
cm1cblx0fTtcbn07XG5cbnZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0gcGFyc2UobmF2aWdh
dG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuaWYgKEJyb3dzZXIubmFtZSA9
PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSl7XG5cdEJyb3dzZXIudmVyc2lvbiA9IGRv
Y3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuQnJvd3Nlci5leHRlbmQoe1xuXHRGZWF0dXJlczog
e1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5ldmFsdWF0ZSksXG5cdFx0YWlyOiAhISh3aW5kb3cu
cnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpLFxuXHRcdGpz
b246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxuXHRwYXJzZVVBOiBwYXJzZVxufSk7XG5cblxuXG4v
LyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVzdCA9IChmdW5jdGlvbigpe1xuXG5cdHZhciBYTUxI
VFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdH07
XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2Jq
ZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHZhciBNU1hNTCA9IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuXHR9
O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0WE1MSFRUUCgp
O1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MMigpO1xu
XHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwoKTtcblx0XHRy
ZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgpO1xuXG5Ccm93c2VyLkZlYXR1cmVzLnhociA9ICEh
KEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4vLyBTdHJpbmcgc2NyaXB0c1xuXG5Ccm93c2VyLmV4
ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcblx0aWYgKHdp
bmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTtcblx0fSBlbHNl
IHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5c
dFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRz
Y3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQp
O1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0fVxuXHRyZXR1cm4g
dGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1lbnQoJ3N0cmlwU2NyaXB0cycsIGZ1bmN0aW9uKGV4
ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xuXHR2YXIgdGV4dCA9IHRoaXMucmVwbGFjZSgvPHNj
cmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUp
e1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdcXG4nO1xuXHRcdHJldHVybiAnJztcblx0fSk7XG5c
dGlmIChleGVjID09PSB0cnVlKSBCcm93c2VyLmV4ZWMoc2NyaXB0cyk7XG5cdGVsc2UgaWYgKHR5
cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBleGVjKHNjcmlwdHMsIHRleHQpO1xuXHRyZXR1cm4g
dGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERvY3VtZW50XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0
RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5cdFdpbmRvdzogdGhpcy5XaW5kb3csXG5cdEVsZW1l
bnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6IHRoaXMuRXZlbnRcbn0pO1xuXG50aGlzLldpbmRv
dyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ1dpbmRvdycsIGZ1bmN0aW9uKCl7fSk7
XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ3dpbmRvdycpLmhpZGUoKTtcblxu
V2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHR3aW5kb3dbbmFtZV0gPSBt
ZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVudCA9IGRvY3VtZW50LiRjb25zdHJ1Y3RvciA9IG5l
dyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9uKCl7fSk7XG5cbmRvY3VtZW50LiRmYW1pbHkgPSBG
dW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcpLmhpZGUoKTtcblxuRG9jdW1lbnQubWlycm9yKGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRvY3VtZW50W25hbWVdID0gbWV0aG9kO1xufSk7XG5c
bmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5pZiAoIWRvY3VtZW50
LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVh
ZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7XG5cdGRvY3VtZW50LmV4
ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VDYWNoZScsIGZhbHNlLCB0cnVlKTtcbn0gY2F0Y2gg
KGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0aGlzLmF0dGFjaEV2ZW50ICYmICF0aGlzLmFkZEV2
ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2FkRXZlbnQgPSBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xuXHRcdGRvY3VtZW50LmhlYWQg
PSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDtcblx0XHR3aW5kb3cgPSB0
aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVsbDtcblx0fTtcblx0dGhpcy5hdHRhY2hFdmVudCgn
b251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59XG5cbi8vIElFIGZhaWxzIG9uIGNvbGxlY3Rpb25z
IGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZlcnMgdG8gPHNlbGVjdD4pXG52YXIgYXJyYXlGcm9t
ID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5cdGFycmF5RnJvbShkb2N1bWVudC5odG1sLmNoaWxk
Tm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtc
blx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycgJiYgVHlwZS5pc0VudW1lcmFibGUoaXRl
bSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJheScpe1xuXHRcdFx0dmFyIGkgPSBpdGVtLmxlbmd0
aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5cdFx0XHR3aGlsZSAoaS0tKSBhcnJheVtpXSA9IGl0
ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheUZyb20o
aXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSxcblx0XHRz
bGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0Wydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSBwcm90b3R5cGVbbmFt
ZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBtZXRo
b2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtc
blx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9u
IGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGluZyByZXVzYWJs
ZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtB
cnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXVxuXG5wcm92aWRlczogQ2xhc3NcblxuLi4u
XG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIENsYXNzID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBl
KCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7XG5cdGlmIChpbnN0YW5jZU9mKHBhcmFtcywgRnVu
Y3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6ZTogcGFyYW1zfTtcblxuXHR2YXIgbmV3Q2xhc3Mg
PSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdGlmIChuZXdDbGFzcy4kcHJvdG90
eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IG51bGw7XG5cdFx0dGhpcy4k
ZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXplKSA/IHRoaXMu
aW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcztcblx0XHR0aGlzLiRjYWxs
ZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LmV4dGVuZCh0
aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxuXHRuZXdDbGFzcy4kY29uc3RydWN0b3IgPSBDbGFz
cztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG5ld0NsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFyZW50O1xuXG5cdHJldHVybiBuZXdDbGFzcztcbn0p
O1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24oKXtcblx0aWYgKCF0aGlzLiRjYWxsZXIpIHRocm93
IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBhcmVudFwiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5c
dHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRuYW1lLFxuXHRcdHBhcmVudCA9IHRoaXMuJGNhbGxl
ci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZpb3VzID0gKHBhcmVudCkgPyBwYXJlbnQucHJvdG90
eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVycm9yKCdUaGUg
bWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFzIG5vIHBhcmVudC4nKTtcblx0cmV0dXJuIHByZXZp
b3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgcmVzZXQgPSBmdW5jdGlvbihv
YmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHR2YXIgdmFsdWUgPSBvYmpl
Y3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0Y2FzZSAnb2JqZWN0
Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlvbigpe307XG5cdFx0XHRcdEYucHJvdG90eXBlID0g
dmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXldID0gcmVzZXQobmV3IEYpO1xuXHRcdFx0XHRicmVh
aztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5jbG9uZSgpOyBicmVh
aztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB3cmFwID0gZnVuY3Rp
b24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kLiRvcmlnaW4pIG1ldGhvZCA9IG1l
dGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKG1ldGhv
ZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1Ro
ZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdFx0dmFyIGNh
bGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyO1xuXHRcdHRoaXMuY2Fs
bGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3JhcHBlcjtcblx0XHR2YXIgcmVzdWx0ID0g
bWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0dGhpcy4kY2FsbGVyID0gY3VycmVu
dDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fS5leHRlbmQo
eyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7XG5cdHJldHVybiB3
cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIHJldGFp
bil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcblx0XHR2YWx1
ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKHZhbHVl
ID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKHR5cGVPZih2YWx1ZSkgPT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRoaWRkZW4pIHJldHVybiB0aGlzO1xuXHRcdHRoaXMu
cHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlzLCBrZXksIHZhbHVl
KTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5cGUsIGtleSwgdmFs
dWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG52YXIgZ2V0SW5zdGFuY2UgPSBmdW5j
dGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7XG5cdHZhciBwcm90byA9
IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZztcblx0cmV0dXJuIHByb3Rv
O1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1lbnQub3ZlcmxvYWRT
ZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3JzID0ge1xuXG5cdEV4dGVuZHM6IGZ1bmN0aW9uKHBh
cmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5wcm90b3R5cGUgPSBn
ZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxuXG5cdEltcGxlbWVudHM6IGZ1bmN0aW9uKGl0ZW1z
KXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0
dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gaW5zdGFuY2Up
IGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1ZSk7XG5cdFx0fSwg
dGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuRXh0cmFz
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhhdCBjYW4gYmUgaW1w
bGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4ZWN1dGlvbiBvZiBt
YW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4sIEV2ZW50cywgT3B0
aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudGhpcy5DaGFpbiA9IG5ldyBDbGFz
cyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRjaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRj
aGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLiRjaGFp
bi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDog
ZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFp
bi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgcmVtb3ZlT24g
PSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15vbihbQS1aXSkv
LCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5cdFx0cmV0dXJuIGZpcnN0LnRvTG93ZXJDYXNlKCk7
XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMgPSBuZXcgQ2xhc3Moe1xuXG5cdCRldmVudHM6IHt9
LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwpe1xuXHRcdHR5cGUg
PSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxuXG5cdFx0dGhpcy4kZXZlbnRzW3R5cGVdID0gKHRo
aXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5jbHVkZShmbik7XG5cdFx0aWYgKGludGVybmFsKSBm
bi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRz
OiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAodmFyIHR5cGUgaW4gZXZlbnRzKSB0aGlzLmFk
ZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dHlwZSA9IHJlbW92
ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0aWYg
KCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xu
XHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXko
ZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0
XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZl
bnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmIChldmVudHMgJiYgIWZuLmludGVybmFs
KXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTtcblx0XHRcdGlmIChpbmRl
eCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtc
blx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGlu
IGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0
dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChldmVudHMpIGV2ZW50cyA9IHJlbW92ZU9uKGV2ZW50
cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMuJGV2ZW50cyl7XG5cdFx0XHRpZiAoZXZlbnRzICYm
IGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtcblx0XHRcdHZhciBmbnMgPSB0aGlzLiRldmVudHNb
dHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0gZm5zLmxlbmd0aDsgaS0tOykgaWYgKGkgaW4gZm5z
KXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudCh0eXBlLCBmbnNbaV0pO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudGhpcy5PcHRpb25zID0gbmV3IENs
YXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb25zID0gdGhp
cy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFwcGx5KG51bGwsIFt7fSwgdGhpcy5vcHRpb25zXS5h
cHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnQpIGZvciAodmFyIG9wdGlv
biBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAhPSAnZnVu
Y3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTtcblx0XHRcdHRo
aXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pO1xuXHRcdFx0ZGVsZXRlIG9wdGlv
bnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuVGhlbmFibGVcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3du
IENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhlbmFibGVcIi5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLlRoZW5hYmxl
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgU1RBVEVfUEVORElORyA9IDAsXG5c
dFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNUQVRFX1JFSkVDVEVEID0gMjtcblxudmFyIFRoZW5h
YmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3Moe1xuXG5cdCR0aGVuYWJsZVN0YXRlOiBT
VEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVSZXN1bHQ6IG51bGwsXG5cdCR0aGVuYWJsZVJlYWN0
aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHJlc29sdmUodGhp
cywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlamVjdDogZnVuY3Rpb24o
cmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHN3aXRjaCAodGhpcy4k
dGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNlIFNUQVRFX1BFTkRJTkc6XG5cdFx0XHRcdHJldHVy
biAncGVuZGluZyc7XG5cblx0XHRcdGNhc2UgU1RBVEVfRlVMRklMTEVEOlxuXHRcdFx0XHRyZXR1
cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNhc2UgU1RBVEVfUkVKRUNURUQ6XG5cdFx0XHRcdHJl
dHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0fSxcblxuXHRyZXNldFRoZW5hYmxlOiBmdW5jdGlv
bihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJlc2V0KHRoaXMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBv
blJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAnZnVuY3Rpb24nKSBv
bkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5cdFx0aWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAn
ZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Rocm93ZXInO1xuXG5cdFx0dmFyIHRoZW5hYmxlID0g
bmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlzLiR0aGVuYWJsZVJlYWN0aW9ucy5wdXNoKHtcblx0
XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0XHRcdGZ1bGZpbGxIYW5kbGVyOiBvbkZ1bGZpbGxl
ZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9uUmVqZWN0ZWRcblx0XHR9KTtcblxuXHRcdGlmICh0
aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHRcdHJlYWN0KHRoaXMp
O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblxuXHQnY2F0Y2gnOiBmdW5j
dGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQp
O1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5leHRlbmQoe1xuXHRyZXNvbHZlOiBmdW5jdGlvbih2
YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRoZW5h
YmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoZW5h
YmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblx0cmVqZWN0OiBmdW5jdGlvbihyZWFz
b24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdHJlamVjdCh0aGVu
YWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH1cbn0pO1xuXG4vLyBQcml2
YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlm
ICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0aWYgKHRo
ZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRyZWplY3QodGhlbmFibGUsIG5ldyBUeXBlRXJyb3Io
J1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJsZSB3aXRoIGl0c2VsZi4nKSk7XG5cdFx0fSBlbHNl
IGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUg
PT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZhciB0aGVuO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRy
ZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIHRo
ZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHR2YXIgcmVzb2x2ZWQgPSBmYWxzZTtcblx0XHRc
dFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhlbi5j
YWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24obmV4dFZh
bHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRc
dHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodGhlbmFibGUsIG5l
eHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRc
dFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRcdFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xu
XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVq
ZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0
fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0
XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0XHRcdFx0fVxu
XHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxs
KHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZ1bGZpbGwo
dGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZnVsZmlsbCh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVlO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfRlVMRklMTEVEO1xuXG5cdFx0cmVhY3QodGhlbmFi
bGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUg
PSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5j
dGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSAhPT0g
U1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gbnVsbDtcblx0
XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG5cdH1cbn1cblxuZnVu
Y3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2YXIgc3RhdGUgPSB0aGVuYWJsZS4kdGhlbmFibGVT
dGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQsXG5cdFx0cmVhY3Rp
b25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zLFxuXHRcdHR5cGU7XG5cblx0aWYgKHN0
YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9u
cyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmlsbEhhbmRsZXInO1xuXHR9IGVsc2UgaWYgKHN0YXRl
ID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBb
XTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRsZXInO1xuXHR9XG5cblx0aWYgKHR5cGUpe1xuXHRc
dGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQsIHJlYWN0aW9ucywgdHlwZV0pKTtcblx0fVxufVxu
XG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCByZWFjdGlvbnMsIHR5cGUpe1xuXHRmb3IgKHZhciBp
ID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpe1xuXHRcdHZhciByZWFjdGlv
biA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhhbmRsZXIgPSByZWFjdGlvblt0eXBlXTtcblxuXHRc
dGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHknKXtcblx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhl
bmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGlmIChoYW5kbGVyID09PSAnVGhyb3dlcicpe1xu
XHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCBoYW5kbGVyKHJl
c3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHJlYWN0
aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG52YXIg
ZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9j
ZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKXtcblx0ZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNr
O1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyl7XG5cdGRl
ZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIHtcblx0ZGVmZXIgPSBmdW5jdGlvbihmbil7XG5c
dFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07XG59XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBPYmplY3QgZ2VuZXJpYyBtZXRob2RzXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogW09i
amVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuT2JqZWN0LmV4dGVuZCh7
XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmplY3QsIGtleXMpe1xuXHRcdHZhciByZXN1bHRzID0g
e307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHRpZiAoayBpbiBvYmplY3QpIHJlc3VsdHNba10g
PSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdG1hcDog
ZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2
YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBr
ZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0cmVzdWx0
c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xuXHRcdH1c
blx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKG9iamVjdCwg
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qu
a2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7
XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRcdGlm
IChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNba2V5XSA9IHZhbHVl
O1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRldmVyeTogZnVuY3Rpb24o
b2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xu
XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5
ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkg
cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRzb21lOiBm
dW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9i
amVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRc
dHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0s
IGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0
dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHR2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
Lmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRcdHZhbHVlcy5wdXNo
KG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0Z2V0TGVu
Z3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxl
bmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0dmFy
IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5
cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChvYmpl
Y3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBrZXk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xu
XHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHRyZXR1cm4g
T2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7XG5cdH0sXG5cblx0dG9RdWVyeVN0
cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNlKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtc
blxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRp
ZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJztcblx0XHRcdHZhciByZXN1bHQ7
XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0XHRjYXNlICdvYmplY3QnOiBy
ZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1ZSwga2V5KTsgYnJlYWs7XG5cdFx0XHRc
dGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2YXIgcXMgPSB7fTtcblx0XHRcdFx0XHR2YWx1ZS5l
YWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdFx0XHRxc1tpXSA9IHZhbDtcblx0XHRcdFx0
XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyhxcywga2V5KTtc
blx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogcmVzdWx0ID0ga2V5ICsgJz0nICsg
ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZSAhPSBu
dWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcXVl
cnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG5cblxuLypcbi0tLVxu
bmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBDU1MzIFNlbGVjdG9y
IHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7
XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRvckluZGV4LFxuXHRjb21iaW5hdG9ySW5kZXgsXG5c
dHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxuXHRyZXZlcnNlQ2FjaGUgPSB7fSxcblx0cmVVbmVz
Y2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGlzUmV2
ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0aWYgKGV4
cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJldHVybiBleHByZXNzaW9uO1xuXHRleHByZXNzaW9u
ID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHRyZXZl
cnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFyIGN1cnJlbnRDYWNoZSA9IChyZXZlcnNlZCkgPyBy
ZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYgKGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXSkgcmV0
dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXTtcblx0cGFyc2VkID0ge1xuXHRcdFNsaWNrOiB0
cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxcblx0XHRyYXc6IGV4cHJlc3Npb24sXG5cdFx0cmV2
ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBwYXJzZSh0aGlzLnJhdywgdHJ1ZSk7XG5c
dFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRleCA9IC0xO1xuXHR3aGlsZSAoZXhwcmVzc2lvbiAh
PSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNlcikpKTtcblx0
cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGg7XG5cdHJldHVybiBjdXJy
ZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2ZXJzZWQpID8gcmV2ZXJzZShwYXJzZWQpIDogcGFy
c2VkO1xufTtcblxudmFyIHJldmVyc2VDb21iaW5hdG9yID0gZnVuY3Rpb24oY29tYmluYXRvcil7
XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7XG5cdGVsc2UgaWYgKGNvbWJp
bmF0b3IgPT09ICcgJykgcmV0dXJuICchJztcblx0ZWxzZSBpZiAoKC9eIS8pLnRlc3QoY29tYmlu
YXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJlcGxhY2UoL14hLywgJycpO1xuXHRlbHNlIHJldHVy
biAnIScgKyBjb21iaW5hdG9yO1xufTtcblxudmFyIHJldmVyc2UgPSBmdW5jdGlvbihleHByZXNz
aW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGV4cCA9
IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAnKicsIGNv
bWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07XG5cblx0XHRm
b3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5ndGg7IGorKyl7XG5cdFx0XHR2YXIgY2V4cCA9IGV4
cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZlcnNlQ29tYmluYXRvcikgY2V4cC5yZXZlcnNlQ29t
YmluYXRvciA9ICcgJztcblx0XHRcdGNleHAuY29tYmluYXRvciA9IGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHR9XG5cblx0
XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Npb247XG59
O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKXsvLyBDcmVkaXQ6IFhSZWdF
eHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2ZW4gTGV2aXRoYW4gPGh0dHA6Ly9zdGV2ZW5sZXZp
dGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1JVCBMaWNlbnNlXG5cdHJldHVybiBzdHJpbmcucmVw
bGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8LCNcXHNdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0
XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5cdH0pO1xufTtcblxudmFyIHJlZ2V4cCA9IG5ldyBS
ZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYgcnVieVxucHV0cyBcIlxcdFxcdFwiICsgREFUQS5y
ZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMuKiR8XFxzK3xcXFxcJHxcXFxcbi8sJycpXG5fX0VO
RF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxcXFxzKiAoICwgKSBcXFxccyogICAgICAgICAgICAg
ICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5cXFxuXHR8IFxcXFxzKiAoIDxjb21iaW5hdG9yPisg
KSBcXFxccyogICAjIENvbWJpbmF0b3IgICAgICAgICBcXG5cXFxuXHR8ICAgICAgKCBcXFxccysg
KSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXFxuXFxcblx0fCAgICAgICgg
PHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMgVGFnICAgICAgICAgICAgICAgIFxcblxcXG5cdHwg
XFxcXCMgICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIElEICAgICAgICAgICAgICAgICBcXG5c
XFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05hbWUgICAgICAg
ICAgXFxuXFxcblx0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSAg
ICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxcblx0XHRcXFxccyogKDx1bmljb2RlMT4rKSAgKD86
ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58XT89KSAgKD86ICBcXFxuXHRcdFx0XHRcXFxccyog
KD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8pKC4qPylcXFxcOSBcXFxuXHRcdFx0XHQpXFxcblx0
XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAgXFxcblx0XFxcXF0oPyFcXFxcXSkgXFxuXFxcblx0
fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxcblx0XFxcXCggKD86XFxcblx0XHQoPzooW1xcXCIn
XSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspXFxcblx0
KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4qL1xuXHRcIl4oPzpcXFxccyooLClcXFxccyp8XFxc
XHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChcXFxccyspfCg8dW5pY29kZT4rfFxcXFwqKXxcXFxc
Iyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29kZT4rKXxcXFxcW1xcXFxzKig8dW5pY29kZTE+Kyko
PzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxccyooPzooW1xcXCInXT8pKC4qPylcXFxcOSkpKT9c
XFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1bmljb2RlPispKD86XFxcXCgoPzooPzooW1xcXCIn
XSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspKVxcXFwp
KT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5hdG9yPi8sICdbJyArIGVzY2FwZVJlZ0V4cCgnPit+
YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylcblx0LnJlcGxhY2UoLzx1bmljb2RlPi9nLCAnKD86
W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcblx0
LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18
XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuKTtcblxuZnVuY3Rpb24gcGFyc2VyKFxuXHRyYXdN
YXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNvbWJpbmF0b3IsXG5cdGNvbWJpbmF0b3JDaGlsZHJl
bixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0Y2xhc3NOYW1lLFxuXG5cdGF0dHJpYnV0ZUtleSxc
blx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0dHJpYnV0ZVF1b3RlLFxuXHRhdHRyaWJ1dGVWYWx1
ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBzZXVkb0NsYXNzLFxuXHRwc2V1ZG9RdW90ZSxcblx0
cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0cHNldWRvQ2xhc3NWYWx1ZVxuKXtcblx0aWYgKHNl
cGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdHBhcnNlZC5leHByZXNzaW9u
c1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xuXHRcdGNvbWJpbmF0b3JJbmRleCA9IC0xO1xuXHRc
dGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztcblx0fVxuXG5cdGlmIChjb21iaW5hdG9yIHx8IGNv
bWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5hdG9ySW5kZXggPT09IC0xKXtcblx0XHRjb21iaW5h
dG9yID0gY29tYmluYXRvciB8fCAnICc7XG5cdFx0dmFyIGN1cnJlbnRTZXBhcmF0b3IgPSBwYXJz
ZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdO1xuXHRcdGlmIChyZXZlcnNlZCAmJiBjdXJy
ZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0pXG5cdFx0XHRjdXJyZW50U2VwYXJhdG9yW2Nv
bWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJpbmF0b3IgPSByZXZlcnNlQ29tYmluYXRvcihjb21i
aW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4XSA9IHtjb21i
aW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307XG5cdH1cblxuXHR2YXIgY3VycmVudFBhcnNl
ZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRleF1bY29tYmluYXRvckluZGV4XTtc
blxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3VycmVudFBhcnNlZC50YWcgPSB0YWdOYW1lLnJlcGxh
Y2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoaWQpe1xuXHRcdGN1cnJlbnRQYXJz
ZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGNsYXNz
TmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycp
O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCkgY3VycmVudFBhcnNlZC5jbGFz
c0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3VycmVudFBhcnNl
ZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFzc0xpc3QucHVzaChjbGFzc05h
bWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3Nlcy5wdXNoKHtcblx0XHRcdHZhbHVlOiBjbGFz
c05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBlc2NhcGVSZWdF
eHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCknKVxuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAocHNl
dWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlIHx8IHBz
ZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNz
VmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpIDogbnVsbDtc
blxuXHRcdGlmICghY3VycmVudFBhcnNlZC5wc2V1ZG9zKSBjdXJyZW50UGFyc2VkLnBzZXVkb3Mg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBzZXVkb3MucHVzaCh7XG5cdFx0XHRrZXk6IHBzZXVk
b0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpLFxuXHRcdFx0dmFsdWU6IHBzZXVkb0NsYXNz
VmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9NYXJrZXIubGVuZ3RoID09IDEgPyAnY2xhc3MnIDog
J2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChhdHRyaWJ1dGVLZXkpe1xuXHRcdGF0
dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblx0XHRh
dHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8fCAnJykucmVwbGFjZShyZVVuZXNjYXBl
LCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVnZXhwO1xuXG5cdFx0c3dpdGNoIChhdHRyaWJ1dGVP
cGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAn
XicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBicmVhaztcblx0
XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAgZXNjYXBlUmVn
RXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfj0n
IDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxcXFxzKScrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1
dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfD0nIDogcmVnZXhw
ID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsn
KC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICAnPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgPT0gdmFsdWU7XG5cdFx0XHR9OyBi
cmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0xO1xuXHRc
dFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgIT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztc
blx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVy
biAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRlVmFsdWUgPT0g
JycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rp
b24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0aWYgKCF0ZXN0KSB0ZXN0
ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlICYmIHJlZ2V4cC50ZXN0KHZh
bHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMpIGN1cnJl
bnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcy5w
dXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRlS2V5LFxuXHRcdFx0b3BlcmF0b3I6IGF0dHJpYnV0
ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0dHJpYnV0ZVZhbHVlLFxuXHRcdFx0dGVzdDogdGVz
dFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1cm4gJyc7XG59O1xuXG4vLyBTbGljayBOU1xuXG52
YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnBhcnNlID0gZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJzZShleHByZXNzaW9uKTtcbn07XG5cblNsaWNrLmVz
Y2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNr
ID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1
bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxu
bmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlwdGlvbjogVGhlIG5ldywgc3VwZXJmYXN0IGNzcyBz
ZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczogU2xpY2suRmluZGVyXG5yZXF1aXJlczogU2xpY2su
UGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIGxvY2FsID0ge30sXG5cdGZl
YXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
O1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVjdGlvblxuXG5sb2NhbC5pc05hdGl2ZUNvZGUgPSBm
dW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xce1xccypcXFtuYXRpdmUgY29kZVxcXVxccypcXH0v
KS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9jYWwuaXNYTUwgPSBmdW5jdGlvbihkb2N1bWVudCl7
XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1bWVudC54bWwpIHx8
ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1bWVudF0nKSB8fFxu
XHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9k
ZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxvY2FsLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9j
dW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJndW1lbnRzIHRvIGRv
Y3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0aGUgZnVuY3Rpb24g
cmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7XG5cdGlmIChub2Rl
VHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0ZWxzZSBpZiAobm9kZVR5cGUpIGRvY3VtZW50ID0g
ZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZVxuXHRlbHNlIGlmIChkb2N1bWVudC5uYXZp
Z2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRvd1xuXHRlbHNlIHJl
dHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnRcblxuXHRpZiAodGhp
cy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjtcblx0dGhpcy5kb2N1bWVudCA9IGRvY3Vt
ZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRldGVjdGlvbiBvbiB0
aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdldFVJRFhNTChyb290KSxcblx0XHRmZWF0dXJlcyA9
IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5cdFx0ZmVhdHVyZTtcblxuXHRpZiAoZmVhdHVyZXMp
e1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0XHR0aGlzW2ZlYXR1cmVdID0g
ZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdGZlYXR1cmVz
ID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9O1xuXG5cdGZlYXR1cmVzLnJvb3QgPSByb290
O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1bWVudCk7XG5cblx0
ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5cdD0gZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRR
U0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1lXG5cdD0gZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNl
UVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VCQ05cblx0PSBmZWF0dXJlcy5icm9rZW5DaGVja2Vk
UVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Fcblx0PSBmZWF0dXJlcy5p
c0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvclxuXHQ9IGZh
bHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Nsb3NlZCwgc3RhclNlbGVjdHNDb21tZW50cyxcblx0
XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyO1xuXG5cdHZhciBzZWxlY3RlZCwgaWQg
PSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIgdGVzdE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDtcblx0dGVzdFJvb3QuYXBw
ZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8vIG9uIG5vbi1IVE1MIGRvY3VtZW50cyBpbm5lckhU
TUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2VzbnQgd29yayBwcm9wZXJseVxuXHR0cnkge1xuXHRc
dHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBpZD1cIicraWQrJ1wiPjwvYT4nO1xuXHRcdGZlYXR1
cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdH0g
Y2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQpe1xuXG5cdFx0dGVz
dE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuXHRcdC8vIElFIHJldHVybnMgY29tbWVu
dCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNc
blx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCcnKSk7XG5c
dFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwi
PC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50
c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0
XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRc
dHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNl
bGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdH0gY2F0Y2ggKGUpe307
XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4gPSBzdGFyU2VsZWN0c0NvbW1lbnRzIHx8
IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBlbGVtZW50cyB3aXRoIHRo
ZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBmb3IgZ2V0RWxlbWVudHNCeUlkIGZvciBzb21lIGRv
Y3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgbmFtZT1c
IicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysgaWQgKydcIj48L2I+Jztcblx0XHRcdGZlYXR1cmVz
LmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgPT09IHRlc3ROb2RlLmZp
cnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0aWYgKHRlc3ROb2RlLmdldEVsZW1l
bnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIGdldEVsZW1lbnRzQnlDbGFz
c05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+PGEgY2xhc3M9XCJiXCI+PC9hPic7XG5cdFx0XHRc
dHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGg7XG5cdFx0XHRcdHRl
c3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InO1xuXHRcdFx0XHRjYWNoZWRHZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5s
ZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBPcGVyYSA5LjYg
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2VzbnQgZGV0ZWN0cyB0aGUgY2xhc3MgaWYgaXRzIG5v
dCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNsYXNzPVwiZiBiIGFcIj48L2E+Jztcblx0XHRcdFx0
YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04gPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0ZmVh
dHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IGJyb2tl
blNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRcdH1cblxuXHRcdGlmICh0ZXN0Tm9kZS5xdWVyeVNl
bGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9m
b28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxsKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0
XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRc
dFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XG5cdFx0XHRcdGZl
YXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVu
Z3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIHF1ZXJ5U2VsZWN0b3JBbGwgZG9lc250
IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVpcmtzbW9kZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiTWlYXCI+PC9hPic7XG5cdFx0XHRcdGZl
YXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcu
TWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBXZWJraXQgYW5k
IE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlTZWxlY3RvckFsbFxu
XHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlv
biBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cdFx0XHRcdGZl
YXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnOmNo
ZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBJ
RSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09XCJcIiBzZWxlY3RvcnMg
b24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJI
VE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkVtcHR5
QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9XCJcIl0n
KS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHR9XG5cblx0XHQvLyBJ
RTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdldEF0dHJpYnV0ZSh4
KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dFxuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0
Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0aW9uPVwic1wiPjxpbnB1dCBpZD1cImFjdGlvblwi
Lz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIgPSAodGVzdE5vZGUu
Zmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlvblxuXG5cdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8IC8qcm9vdC5tc01h
dGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0
TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ip
IHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVzU2VsZWN0b3IgdHJvd3MgZXJyb3JzIG9uIGluY29y
cmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVz
U2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNrJyk7XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHR9XG5cblx0dHJ5IHtc
blx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAxO1xuXHRcdGRlbGV0ZSByb290LnNsaWNrX2V4cGFu
ZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MO1xuXHR9IGNhdGNoIChl
KXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDtcblx0fVxuXG5cdHRlc3RS
b290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtcblx0dGVzdE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RS
b290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5nZXRBdHRyaWJ1
dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgJiYgYnJva2VuRm9ybUF0dHJpYnV0ZUdldHRl
cikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1
dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmIChtZXRob2QpIHJldHVybiBtZXRob2QuY2FsbChub2Rl
KTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtc
blx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBu
dWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMu
YXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRyZXR1cm4gKG1ldGhvZCkgPyBtZXRob2QuY2Fs
bChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9O1xuXG5cdC8vIGhhc0F0dHJp
YnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMuaXNOYXRpdmVD
b2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRc
dHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHR9IDogZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0
ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUuc3BlY2lmaWVkIHx8IG5vZGUubm9kZVZh
bHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFpbnNcblx0Ly8gRklYTUU6IEFkZCBzcGVjczogbG9j
YWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgeG1sIGFuZCBodG1sIGRvY3VtZW50
cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlucyA9IHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUo
cm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZlRG9jdW1lbnRDb250YWlucyA9IGRvY3VtZW50ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50LmNvbnRhaW5zKTtcblxuXHRmZWF0dXJlcy5jb250
YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMgJiYgbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBm
dW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dC5jb250YWlucyhub2Rl
KTtcblx0fSA6IChuYXRpdmVSb290Q29udGFpbnMgJiYgIW5hdGl2ZURvY3VtZW50Q29udGFpbnMp
ID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0Ly8gSUU4IGRvZXMgbm90IGhhdmUgLmNv
bnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICgoY29u
dGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogY29udGV4dCku
Y29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9vdCAmJiByb290LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0ID09PSBu
b2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiAxNik7XG5c
dH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRpZiAobm9kZSkgZG8ge1xuXHRcdFx0
aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlO1xuXHRcdH0gd2hpbGUgKChub2RlID0g
bm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdC8vIGRvY3Vt
ZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3JlZGl0cyB0byBTaXp6bGUgKGh0dHA6Ly9zaXp6bGVq
cy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3VtZW50U29ydGVyID0gKHJvb3QuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSByZXR1cm4gMDtcblx0XHRy
ZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEgPT09IGIgPyAw
IDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgnIGluIHJvb3QpID8gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4gMDtcblx0XHRy
ZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cdH0gOiAoZG9jdW1lbnQuY3Jl
YXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLm93bmVyRG9jdW1lbnQgfHwg
IWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7XG5cdFx0dmFyIGFSYW5nZSA9IGEub3duZXJEb2N1
bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2UgPSBiLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7XG5cdFx0YVJhbmdlLnNldEVuZChhLCAwKTtc
blx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7XG5cdFx0YlJhbmdlLnNldEVuZChiLCAwKTtcblx0
XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19FTkQs
IGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5cdHJvb3QgPSBudWxsO1xuXG5cdGZvciAoZmVhdHVy
ZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xu
XHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxuXG52YXIgcmVTaW1wbGVTZWxlY3RvciA9IC9eKFsj
Ll0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5cdHJlRW1wdHlBdHRyaWJ1dGUgPSAvXFxbLitbKiRe
XT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FGYWlsRXhwQ2FjaGUgPSB7fTtcblxubG9jYWwuc2Vh
cmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBmaXJzdCl7XG5cblx0
dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChmaXJzdCkgPyBudWxsIDogKGFwcGVuZCB8fCBbXSk7
XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7XG5cdGVsc2UgaWYgKGNvbnRleHQubmF2
aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVydCB0aGUgbm9kZSBm
cm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRcblx0ZWxzZSBpZiAoIWNvbnRleHQubm9kZVR5cGUp
IHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1cFxuXG5cdHZhciBwYXJzZWQsIGksIG5vZGUsIG5v
ZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSxcblx0XHRoYXNPdGhlcnMgPSAh
IShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCksXG5cdFx0Y29udGV4dElzRG9jdW1lbnQgPSAoY29u
dGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRpZiAodGhpcy5kb2N1bWVudCAhPT0gKGNvbnRleHRJ
c0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRleHQub3duZXJEb2N1bWVudCkpIHRoaXMuc2V0RG9j
dW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMgYWxyZWFkeSBp
biB0aGUgYXBwZW5kIGFycmF5XG5cdGlmIChoYXNPdGhlcnMpIGZvciAoaSA9IGZvdW5kLmxlbmd0
aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJRChmb3VuZFtpXSldID0gdHJ1ZTtcblxuXHQvLyBl
eHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7
IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdcblxuXHRcdC8qPHNpbXBsZS1zZWxlY3RvcnMtb3Zl
cnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2VsZWN0b3IgPSBleHByZXNzaW9uLm1hdGNoKHJlU2lt
cGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNlbGVjdG9yKXtc
blxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLFxuXHRcdFx0XHRuYW1lID0g
c2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRcdGlmICghc3ltYm9sKXtcblxuXHRcdFx0XHRpZiAo
bmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5TdGFyR0VCVE4pIGJyZWFrIHNpbXBsZVNlbGVjdG9y
cztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdGlmICghKGhhc090aGVycyAm
JiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRc
dH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJyMnKXtcblxuXHRcdFx0XHRpZiAoIXRo
aXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVhayBzaW1wbGVTZWxl
Y3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG5hbWUpO1xuXHRc
dFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3VuZDtcblx0XHRcdFx0aWYgKHRoaXMuaWRHZXRzTmFt
ZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IG5hbWUpIGJyZWFr
IHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZSB8fCBudWxs
O1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0p
KSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnLicpe1xu
XG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250ZXh0LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4dC5xdWVyeVNlbGVj
dG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAoY29udGV4dC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0XHRub2Rl
cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTtcblx0XHRcdFx0XHRpZiAo
Zmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVl
c1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0
XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2hDbGFzcyA9IG5ldyBSZWdFeHAoJyhe
fFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4cChuYW1lKSArJyhcXFxcc3wkKScpO1xuXHRcdFx0
XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0XHRc
dGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUg
PSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRcdGlmICghKGNsYXNzTmFtZSAmJiBtYXRjaENs
YXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aWYgKGZpcnN0KSBy
ZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMu
Z2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9
XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0
XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9zaW1w
bGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cblx0XHQvKjxxdWVyeS1zZWxlY3Rvci1vdmVycmlk
ZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpe1xu
XG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnRcblx0XHRcdFx0fHwgcXNhRmFpbEV4cENh
Y2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8vVE9ETzogb25seSBza2lwIHdoZW4gZXhwcmVzc2lv
biBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5cdFx0XHRcdHx8IHRoaXMuYnJva2VuTWl4ZWRDYXNl
UVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhwcmVzc2lvbi5pbmRl
eE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkVtcHR5QXR0cmli
dXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSlcblx0XHRcdFx0fHwg
KCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0IHdoZW4gIWNvbnRleHRJc0RvY3VtZW50IGFuZC4u
LlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNl
bGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5IGZpeCBub24tZG9j
dW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0b3JzXG5cdFx0XHRc
dFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcsJykgPiAtMVxuXHRcdFx0XHQpXG5cdFx0XHRcdHx8
IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkgYnJlYWsgcXVlcnlTZWxlY3RvcjtcblxuXHRcdFx0
dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250ZXh0LCBjdXJyZW50
SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0Ly8gbm9uLWRvY3Vt
ZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8gY3JlZGl0cyB0byBBbmRyZXcgRHVwb250XG5cdFx0
XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2xpY2tpZCA9ICdz
bGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2xpY2tpZCk7
XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMnICsgc2xpY2tpZCArICcgJyArIF9leHByZXNzaW9u
O1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRc
dFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9y
KF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRcdFx0XHRlbHNlIG5vZGVzID0gY29udGV4dC5xdWVy
eVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHRx
c2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxO1xuXHRcdFx0XHRicmVhayBxdWVyeVNlbGVj
dG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkgX2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIGN1
cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBfY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7
XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0
XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAwOyBub2RlID0gbm9k
ZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA+ICdAJyAmJiAhKGhhc090aGVy
cyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0
XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0
XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvcXVlcnktc2VsZWN0b3Itb3ZlcnJp
ZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVzc2lvbik7XG5cdFx0
aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lv
biA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVzc2lvblxuXHRcdHJldHVybiBmb3VuZDtc
blx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHBhcnNl
ZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQgPSBleHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKHRo
aXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4dCwgZXhwcmVzc2lv
bikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZVxuXHRcdChmb3VuZCkgPyBmb3VuZC5wdXNoKGV4
cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNzaW9uO1xuXHRcdHJldHVybiBmb3VuZDtcblx0fSBl
bHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdC8qPHBzZXVk
by1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGNhY2hlIGVs
ZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9yc1xuXG5cdHRoaXMucG9zTlRIID0ge307XG5cdHRo
aXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGUgPSB7fTtcblx0dGhpcy5wb3NO
VEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1
ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYgYXBwZW5kIGlzIG51bGwgYW5kIHRoZXJlIGlzIG9u
bHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2UgcHVzaEFycmF5LCBl
bHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVzaCA9ICghaGFzT3RoZXJzICYmIChmaXJzdCB8fCAo
cGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNlZC5leHByZXNzaW9uc1swXS5sZW5ndGggPT0gMSkp
KSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5wdXNoVUlEO1xuXG5cdGlmIChmb3VuZCA9PSBudWxs
KSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1bHQgZW5naW5lXG5cblx0dmFyIGosIG0sIG47XG5c
dHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNzaW9uLCBjdXJyZW50
Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucztcblxuXHRzZWFy
Y2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9IGN1cnJlbnRFeHByZXNzaW9uW2pdKTsgaisrKXtc
blxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJpdC5jb21iaW5hdG9y
O1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNoO1xuXG5cdFx0dGFn
ICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gY3VycmVudEJpdC50YWcgOiBjdXJyZW50
Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRcdGlkICAgICAgICAgPSBjdXJyZW50Qml0LmlkO1xu
XHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNzTGlzdDtcblx0XHRjbGFzc2VzICAgID0g
Y3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0dHJpYnV0ZXMgPSBjdXJyZW50Qml0LmF0dHJpYnV0
ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJlbnRCaXQucHNldWRvcztcblx0XHRsYXN0Qml0ICAg
ID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggLSAxKSk7XG5cblx0XHR0aGlzLmJp
dFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChsYXN0Qml0KXtcblx0XHRcdHRoaXMudW5pcXVlcyA9
IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5kID0gZm91bmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRc
dHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0dGhpcy5mb3VuZCA9IFtdO1xuXHRcdH1cblxuXHRc
dGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNbY29tYmluYXRvcl0oY29udGV4dCwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdGlmIChmaXJz
dCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCkgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVt
cy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRcdFx0XHR0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJ
dGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0
KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdFx0fSBlbHNl
IGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKSB0aGlzW2Nv
bWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9XG5cblx0XHRjdXJyZW50SXRlbXMgPSB0aGlzLmZv
dW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5vZGVzIGluIGFwcGVu
ZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuXG5cdGlmIChoYXNPdGhlcnMg
fHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGggPiAxKSkgdGhpcy5zb3J0KGZvdW5kKTtcblxu
XHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5kO1xufTtcblxuLy8g
VXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5sb2NhbC51aWRrID0gJ3NsaWNrLXVuaXF1ZWlkJztc
blxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHZhciB1aWQgPSBub2RlLmdl
dEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRpZiAoIXVpZCl7XG5cdFx0dWlkID0gdGhpcy51aWR4
Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpO1xuXHR9XG5cdHJldHVy
biB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURIVE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVy
biBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0aGlzLnVpZHgrKyk7
XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1bWVudFNvcnRlciBt
ZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXtcblx0aWYgKCF0aGlzLmRv
Y3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0cztcblx0cmVzdWx0cy5zb3J0KHRoaXMuZG9jdW1l
bnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qPHBzZXVkby1zZWxlY3RvcnM+
Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5jYWNoZU5USCA9IHt9O1xuXG5s
b2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxkKik/KFthLXpdKyk/KFsrLV1cXGQrKT8kLztcblxu
bG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0dmFyIHBhcnNl
ZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJu
IGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBhcnNlZFsyXSB8fCBmYWxzZTtcblx0dmFyIGEgPSBw
YXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0gJy0nKSBhID0gLTE7XG5cdHZhciBiID0gK3BhcnNl
ZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRcdChzcGVjaWFsID09ICduJylcdD8ge2E6IGEsIGI6
IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2RkJylcdD8ge2E6IDIsIGI6IDF9IDpcblx0XHQoc3Bl
Y2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBhfTtcblxuXHRyZXR1
cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFyc2VkKTtcbn07XG5cbmxvY2FsLmNyZWF0
ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlvbnMsIG9mVHlwZSl7
XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0dmFyIHVpZCA9IHRoaXMu
Z2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0pe1xuXHRcdFx0dmFy
IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1cm4gZmFs
c2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7XG5cdFx0XHRpZiAo
b2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHRcdFx0
ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkgY29udGludWU7XG5c
dFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRc
dFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRc
dFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRc
dFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRc
dH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFyZ3Vt
ZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLmNhY2hlTlRIW2Fy
Z3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpO1xuXHRcdGlmICghcGFy
c2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIGEgPSBwYXJzZWQuYSwgYiA9IHBhcnNlZC5iLCBw
b3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtcblx0XHRpZiAoYSA9PSAwKSByZXR1cm4gYiA9PSBw
b3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRcdGlmIChwb3MgPCBiKSByZXR1cm4gZmFsc2U7XG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwgcG9zKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRc
dHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDtcblx0fTtcbn07XG5cbi8qPC9udGgtcHNldWRv
LXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLnB1c2hBcnJheSA9
IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xu
XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG59O1xuXG5sb2NhbC5wdXNoVUlE
ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0aWYgKCF0aGlzLnVuaXF1ZXNbdWlk
XSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHR0aGlzLmZv
dW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5cbmxvY2FsLm1hdGNoTm9kZSA9IGZ1bmN0aW9uKG5v
ZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5uYXRpdmVN
YXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cXFsoW149XSspPVxccyoo
W14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQxPVwiJDJcIl0nKSk7XG5cdFx0fSBjYXRjaCAobWF0
Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2Uoc2VsZWN0
b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7XG5cblx0Ly8gc2ltcGxlIChzaW5nbGUp
IHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnMsIHNpbXBs
ZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50RXhwcmVzc2lvbjtcblx0Zm9yIChpID0gMDsgKGN1
cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspe1xuXHRcdGlmIChjdXJyZW50
RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5cdFx0XHR2YXIgZXhwID0gY3VycmVudEV4cHJlc3Np
b25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsICh0aGlzLmlzWE1MRG9j
dW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcudG9VcHBlckNhc2UoKSwgZXhwLmlkLCBleHAuY2xh
c3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5wc2V1ZG9zKSkgcmV0dXJuIHRydWU7XG5cdFx0XHRz
aW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNpbXBsZUV4cENvdW50ZXIg
PT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBub2RlcyA9IHRoaXMuc2Vh
cmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07XG5cdGZvciAoaSA9IDA7IGl0ZW0gPSBu
b2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHR9XG5c
dHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2FsLm1hdGNoUHNldWRvID0gZnVuY3Rpb24obm9kZSwg
bmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86JyArIG5hbWU7XG5c
dGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1cm4gdGhpc1twc2V1ZG9OYW1lXShub2RlLCBhcmd1
bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtc
blx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUgOiAhIWF0dHJpYnV0
ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRhZyl7XG5cdFx0dmFyIG5vZGVO
YW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDogbm9kZS5ub2RlTmFt
ZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0YWcgPT0gJyonKXtcblx0XHRcdGlmIChub2RlTmFt
ZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9kZXMgYW5kIGNsb3Nl
ZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAobm9kZU5hbWUgIT0gdGFnKSByZXR1cm4g
ZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlkICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcp
ICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIGksIHBhcnQsIGNscztcblx0aWYgKGNsYXNz
ZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3RoOyBpLS07KXtcblx0XHRjbHMgPSB0aGlzLmdldEF0
dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0XHRpZiAoIShjbHMgJiYgY2xhc3Nlc1tpXS5yZWdl
eHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzKSBmb3Ig
KGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IGF0dHJpYnV0ZXNbaV07
XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSByZXR1
cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVkb3MpIGZvciAoaSA9IHBzZXVkb3MubGVuZ3RoOyBp
LS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tpXTtcblx0XHRpZiAoIXRoaXMubWF0Y2hQc2V1ZG8o
bm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJu
IHRydWU7XG59O1xuXG52YXIgY29tYmluYXRvcnMgPSB7XG5cblx0JyAnOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpeyAvLyBh
bGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxuXG5cdFx0dmFyIGksIGl0ZW0sIGNoaWxkcmVuO1xu
XG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpe1xuXHRcdFx0Z2V0QnlJZDogaWYgKGlkKXtc
blx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0
XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1lICYmIGl0ZW0gJiYg
aXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkpe1xuXHRcdFx0XHRc
dC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIHdpdGggdGhhdCBuYW1lIG9yIGlk
IGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmVzIGp1c3Qgb25lIGl0IHdpbGwgcmV0
dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0
Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlbikgcmV0dXJu
O1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcblx0
XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspe1xuXHRcdFx0XHRcdFx0
dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTtcblx0XHRcdFx0XHRcdGlm
IChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBpZCl7XG5cdFx0XHRcdFx0XHRcdHRoaXMu
cHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXRlbSl7XG5cdFx0XHRcdFx0Ly8gaWYg
dGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ugd2lsbCB0cnkgR0VC
VE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsXG5cdFx0XHRcdFx0aWYgKHRoaXMuY29udGFp
bnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuO1xuXHRcdFx0XHRcdGVsc2UgYnJlYWsgZ2V0QnlJ
ZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2RlICYmICF0aGlzLmNv
bnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47XG5cdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcs
IG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5c
dFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBpZiAoY2xhc3NlcyAmJiBub2RlLmdldEVsZW1lbnRz
QnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRjaGlsZHJlbiA9IG5v
ZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcpKTtcblx0XHRcdFx0
aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlDbGFzcztcblx0
XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwg
dGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0
XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6IHtcblx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4u
bGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5cdFx0XHRpZiAoIXRoaXMuYnJva2VuU3RhckdFQlRO
KSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0
aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBjaGlsZHJlblxuXHRcdGlmICgobm9kZSA9IG5v
ZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9
IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKTtcblx0fSxcblxuXHQnKyc6IGZ1bmN0
aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0
IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0J14n
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdGlmIChub2Rl
KXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29tYmlu
YXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51
ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlzLmJp
dFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7
XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcrKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcgYW5kIHByZXZpb3Vz
IHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0J35+Jzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0dGhpc1snY29tYmluYXRv
cjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMgdXAgdG8gZG9jdW1l
bnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAobm9kZSAhPT0gdGhp
cy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgcGFyZW50IChvbmUgbGV2ZWwpXG5c
dFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVu
dCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0g
bm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnIV4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbGFzdCBjaGlsZFxuXHRcdG5vZGUg
PSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlw
ZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0JyF+JzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHBy
ZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcp
KXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBi
cmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVz
aChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5c
dH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxbJ2NvbWJpbmF0b3I6
JyArIGNdID0gY29tYmluYXRvcnNbY107XG5cbnZhciBwc2V1ZG9zID0ge1xuXG5cdC8qPHBzZXVk
by1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHknOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgY2hp
bGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0cmV0dXJuICEoY2hpbGQgJiYgY2hpbGQubm9kZVR5
cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5s
ZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1bmN0aW9uKG5vZGUsIGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7XG5cdH0sXG5cblx0J2Nv
bnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7XG5cdFx0cmV0dXJuIChub2RlLmlubmVyVGV4
dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5pbmRleE9mKHRleHQpID4gLTE7XG5cdH0sXG5c
blx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9k
ZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2Rl
KXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5
LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlO1xuXHRcdHdoaWxl
ICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZVR5cGUgPT0gMSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5c
blx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0
U2libGluZycsICdwb3NOVEgnKSxcblxuXHQnbnRoLWxhc3QtY2hpbGQnOiBsb2NhbC5jcmVhdGVO
VEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRITGFzdCcpLFxu
XG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICdu
ZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSksXG5cblx0J250aC1sYXN0LW9mLXR5cGUn
OiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAn
cG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxuXHQnaW5kZXgnOiBmdW5jdGlvbihub2RlLCBpbmRl
eCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnJyArIChpbmRl
eCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0
aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuJyk7XG5cdH0sXG5cblx0J29kZCc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwg
JzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvKjxv
Zi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZmlyc3Qtb2YtdHlwZSc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFt
ZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LW9mLXR5
cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9
PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdv
bmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGUsIG5vZGVO
YW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2li
bGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0
dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBp
ZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0
cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBj
dXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
ICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdjaGVja2VkJzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVjdGVkO1xuXHR9LFxu
XG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSAmJiAobm9kZS5ocmVm
IHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCAndGFiaW5kZXgnKSk7XG5c
dH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUgPT09IHRo
aXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVjdGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0
dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xufTtc
blxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBwXSA9IHBzZXVkb3Nb
cF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9kc1xuXG52YXIgYXR0cmlidXRlR2V0dGVycyA9IGxv
Y2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5cblx0J2Zvcic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlzLmdldEF0dHJpYnV0
ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2hy
ZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6IHRoaXMuZ2V0QXR0
cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHlsZS5jc3NUZXh0IDogdGhpcy5nZXRBdHRyaWJ1dGUo
J3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmluZGV4JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0
cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTtcblx0XHRyZXR1
cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRl
Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9LFxuXG5cdCd0eXBlJzogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcblx0fSxcblxuXHQnbWF4bGVuZ3Ro
JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRl
Tm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0
ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fVxu
XG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4
TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5ndGg7XG5cbi8vIFNsaWNrXG5cbnZhciBT
bGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGljay52ZXJzaW9u
ID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmluZGVyXG5cblNsaWNrLnNlYXJjaCA9IGZ1bmN0aW9u
KGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29u
dGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtcbn07XG5cblNsaWNrLmZpbmQgPSBmdW5jdGlvbihj
b250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5cbi8vIFNsaWNrIGNvbnRhaW5tZW50IGNoZWNrZXJc
blxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlvbihjb250YWluZXIsIG5vZGUpe1xuXHRsb2NhbC5z
ZXREb2N1bWVudChjb250YWluZXIpO1xuXHRyZXR1cm4gbG9jYWwuY29udGFpbnMoY29udGFpbmVy
LCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBnZXR0ZXJcblxuU2xpY2suZ2V0QXR0
cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUp
O1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxuU2xpY2su
aGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFzQXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxu
Ly8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9y
KXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTtcblx0aWYgKCFzZWxl
Y3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdGxvY2FsLnNldERvY3Vt
ZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNlbGVjdG9yKTtcbn07
XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVBdHRyaWJ1dGVH
ZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBBdHRyaWJ1dGVHZXR0
ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0dXJuIGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8gYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lUHNldWRv
ID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbFsncHNldWRvOicgKyBuYW1lXSA9IGZ1bmN0
aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gZm4uY2FsbChub2RlLCBhcmd1bWVudCk7
XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9va3VwUHNldWRvID0gZnVuY3Rp
b24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBuYW1lXTtcblx0aWYg
KHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gcHNldWRvLmNh
bGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8vIFNsaWNr
IG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGljay5vdmVycmlkZSA9IGZ1bmN0aW9uKHJlZ2V4cCwg
Zm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdleHAsIGZuKTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1MO1xuXG5TbGljay51aWRPZiA9IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChub2RlKTtcbn07XG5cbmlmICghdGhpcy5T
bGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBl
b2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhp
cyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudFxuXG5kZXNjcmlwdGlvbjogT25lIG9mIHRo
ZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBNb29Ub29scy4gQ29udGFpbnMgdGhlIGRvbGxhciBm
dW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rpb24sIGFuZCBhbiBoYW5kZnVsIG9mIGNyb3NzLWJy
b3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0byBsZXQgeW91IGVhc2lseSB3b3JrIHdpdGggSFRN
TCBFbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
V2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE9iamVjdCwgTnVtYmVy
LCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl1cblxucHJvdmlkZXM6IFtFbGVtZW50LCBFbGVt
ZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0b3JzXVxuXG4uLi5cbiovXG5cbnZhciBFbGVtZW50
ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdHZhciBrb25zdHJ1Y3Rv
ciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107XG5cdGlmIChrb25zdHJ1Y3RvcikgcmV0dXJu
IGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYgKHR5cGVvZiB0YWcgIT0gJ3N0cmluZycpIHJldHVy
biBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7XG5cblx0aWYgKCFwcm9wcykgcHJvcHMgPSB7
fTtcblxuXHRpZiAoISgvXltcXHctXSskLykudGVzdCh0YWcpKXtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9uc1swXVswXTtcblx0XHR0YWcgPSAocGFyc2VkLnRh
ZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnO1xuXHRcdGlmIChwYXJzZWQuaWQgJiYgcHJv
cHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQuaWQ7XG5cblx0XHR2YXIgYXR0cmlidXRl
cyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRcdGlmIChhdHRyaWJ1dGVzKSBmb3IgKHZhciBhdHRy
LCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGF0dHIg
PSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYgKHByb3BzW2F0dHIua2V5XSAhPSBudWxsKSBjb250
aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJhdG9yID09
ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTtcblx0XHRcdGVsc2UgaWYgKCFhdHRy
LnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVlO1xuXHRcdH1c
blxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0ICYmIHByb3BzWydjbGFzcyddID09IG51bGwpIHBy
b3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNzTGlzdC5qb2luKCcgJyk7XG5cdH1cblxuXHRyZXR1
cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTtcbn07XG5cblxuaWYgKEJyb3dzZXIu
RWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVtZW50LnByb3RvdHlw
ZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWlyZSB0aGUgd3JhcHBpbmcuXG5cdEVsZW1lbnQucHJv
dG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGZpcmVFdmVudC5jYWxsKHRoaXMsIHR5
cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShFbGVtZW50LnByb3RvdHlwZS5maXJlRXZlbnQpO1xu
fVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVsZW1lbnQpLm1pcnJvcihmdW5jdGlvbihuYW1lKXtc
blx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuO1xuXG5cdHZhciBvYmogPSB7fTtc
blx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdLCBhcmdzID0g
YXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXNbaV0sIHJlc3Vs
dCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3MpO1xuXHRc
dFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTtc
blx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50cykgPyBuZXcgRWxlbWVudHMocmVzdWx0cykgOiBy
ZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRzLmltcGxlbWVudChvYmopO1xufSk7XG5cbmlmICgh
QnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wYXJlbnQgPSBPYmplY3Q7XG5cblx0RWxlbWVu
dC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25zdHJ1Y3Rvcic6IEVsZW1lbnQsXG5cdFx0JyRmYW1p
bHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50JykuaGlkZSgpXG5cdH07XG5cblx0RWxlbWVu
dC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0XHRFbGVtZW50LlByb3RvdHlwZVtu
YW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5cbkVsZW1lbnQuQ29uc3RydWN0b3JzID0ge307XG5c
blxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBw
YXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge1xuXHRcdHByb3BlcnRpZXM6IFR5cGUuaXNP
YmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlvbihvYmope1xuXHRcdFx0cmV0dXJuIChvYmogIT0g
bnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgcHJvcHMgPSBwYXJhbXMucHJvcGVydGllcyB8
fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0gZG9jdW1lbnQuaWQo
cGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxvYWQgPSBwcm9wcy5vbmxvYWQgfHwgZnVuY3Rpb24o
KXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2FkO1xuXHRwcm9wcy5pZCA9IHByb3BzLm5hbWUgPSBb
cHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwgaWZyYW1lLm5hbWUp
IDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTtcblx0aWZyYW1lID0gbmV3
IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUnLCBwcm9wcyk7XG5cblx0dmFyIG9uTG9hZCA9IGZ1
bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwoaWZyYW1lLmNvbnRlbnRXaW5kb3cpO1xuXHR9O1xu
XG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7XG5cdGVsc2UgaWZyYW1l
LmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcblx0cmV0dXJuIGlmcmFtZTtcbn0pO1xuXG52
YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMpe1xuXHRpZiAobm9k
ZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2YXIgdW5pcXVlcyA9IHt9LCBub2RlO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0dmFyIHVpZCA9IFNsaWNr
LnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1bmlxdWVzW3VpZF0pe1xuXHRcdFx0XHR1bmlxdWVz
W3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxu
XHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTtcbkVsZW1lbnRzLnBh
cmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50cykuaW1wbGVtZW50
KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlciwgYmluZCl7XG5cdFx0aWYgKCFmaWx0ZXIp
IHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVyKHRoaXMs
ICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJl
dHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5cdFx0fSA6IGZpbHRlciwgYmluZCkpO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0
aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0gaXRlbTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlz
Lmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHVuc2hpZnQ6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0
XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywgaXRlbXMpO1xuXHR9
LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG5ld0VsZW1lbnRz
ID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTtcblx0
XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMuYXBwZW5kKGl0ZW0p
O1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4g
bmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oY29sbGVj
dGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7
IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR3aGlsZSAodGhpcy5sZW5ndGgp
IGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3Rl
Y3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG4vLyBGRiwgSUVcbnZhciBzcGxpY2Ug
PSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBvYmplY3QgPSB7JzAnOiAwLCAnMSc6IDEsIGxlbmd0
aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVjdCwgMSwgMSk7XG5pZiAob2JqZWN0WzFdID09IDEp
IEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNlJywgZnVuY3Rpb24oKXtcblx0dmFyIGxlbmd0aCA9
IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzW2xlbmd0aC0t
XTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJvdGVjdCgpKTtcblxuQXJyYXkuZm9yRWFjaE1ldGhv
ZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xuXHRFbGVtZW50cy5pbXBsZW1lbnQobmFtZSwgbWV0
aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3IoRWxlbWVudHMpO1xuXG4vKjxsdElFOD4qL1xudmFy
IGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtcbnRyeSB7XG5cdGNyZWF0ZUVsZW1lbnRBY2NlcHRz
SFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aW5wdXQgbmFtZT14PicpLm5hbWUgPT0g
J3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFyIGVzY2FwZVF1b3RlcyA9IGZ1bmN0aW9uKGh0bWwp
e1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC9c
Ii9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0SUU4PiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3
OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0
eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRN
TCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJI
VE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4q
L1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywg
cHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5cdFx0XHRpZiAocHJvcHMuY2hlY2tlZCAhPSBudWxs
KSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cdFx0XHRpZiAoKHByb3Bz
LnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09ICdyYWRpbycpICYmIHByb3BzLnZh
bHVlID09IG51bGwpIHByb3BzLnZhbHVlID0gJ29uJztcblx0XHRcdC8qPGx0SUU5PiovIC8vIElF
IG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBiZWZvcmUgY2hhbmdpbmcgY29udGVudCBvZiBzdHls
ZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNoYW5nZVN0eWxlSFRNTCAmJiB0YWcgPT0gJ3N0eWxl
Jyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
dHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQv
Y3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSBkZWxldGUgcHJvcHMudHlwZTtcblx0XHRc
dFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpO1xuXHRcdFx0fVxuXHRc
dFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxsdElFOD4qLy8vIEZpeCBmb3IgcmVhZG9ubHkgbmFt
ZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOFxuXHRcdFx0aWYgKGNyZWF0ZUVsZW1lbnRB
Y2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9ICc8JyArIHRhZztcblx0XHRcdFx0aWYgKHByb3Bz
Lm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLm5hbWUpICsgJ1wi
Jztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIHRhZyArPSAnIHR5cGU9XCInICsgZXNjYXBlUXVv
dGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0XHRcdFx0dGFnICs9ICc+Jztcblx0XHRcdFx0ZGVs
ZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0fVxuXHRc
dFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlkKHRoaXMuY3JlYXRlRWxl
bWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4oZnVuY3Rpb24o
KXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtcblNsaWNrLnVpZE9mKGRvY3VtZW50KTtcblxuRG9j
dW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdUZXh0Tm9kZTogZnVuY3Rpb24odGV4dCl7XG5cdFx0
cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndpbmRvdztcblx0fSxcblxuXHRpZDogKGZ1bmN0aW9u
KCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5cblx0XHRcdHN0cmluZzogZnVuY3Rpb24oaWQsIG5v
Y2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBTbGljay5maW5kKGRvYywgJyMnICsgaWQucmVwbGFj
ZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0XHRcdFx0cmV0dXJuIChpZCkgPyB0eXBlcy5lbGVt
ZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0XHRcdH0sXG5cblx0XHRcdGVsZW1lbnQ6IGZ1bmN0
aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRTbGljay51aWRPZihlbCk7XG5cdFx0XHRcdGlmICgh
bm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQpJC9pKS50ZXN0KGVs
LnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIgZmlyZUV2ZW50ID0gZWwuZmlyZUV2ZW50O1xuXHRc
dFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBpbiBJRTcsIG9yIGVsc2UgY3Jhc2hcblx0XHRcdFx0
XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0XHRcdFx0cmV0
dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRPYmpl
Y3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3RvdHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0
dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0b2JqZWN0OiBmdW5jdGlvbihvYmosIG5vY2FzaCwg
ZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0VsZW1lbnQpIHJldHVybiB0eXBlcy5lbGVtZW50KG9i
ai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9
XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4dG5vZGUgPSB0eXBlcy53aGl0ZXNwYWNlID0gdHlw
ZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQgPSBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVy
biB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWwsIG5vY2FzaCwgZG9jKXtc
blx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5ICYmIGVsLnVuaXF1ZU51bWJlcikgcmV0dXJuIGVs
O1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YoZWwpO1xuXHRcdFx0cmV0dXJuICh0eXBlc1t0eXBl
XSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNoLCBkb2MgfHwgZG9jdW1lbnQpIDogbnVsbDtcblx0
XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlmICh3aW5kb3cuJCA9PSBudWxsKSBXaW5kb3cuaW1w
bGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5jKXtcblx0cmV0dXJuIGRvY3VtZW50LmlkKGVsLCBu
YywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxuV2luZG93LmltcGxlbWVudCh7XG5cblx0Z2V0RG9j
dW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQ7XG5cdH0sXG5cblx0
Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5b
RG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEVsZW1lbnRz
OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMsIGV4
cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudDogZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgZXhw
cmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52YXIgY29udGFpbnMgPSB7Y29udGFpbnM6IGZ1bmN0
aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xpY2suY29udGFpbnModGhpcywgZWxlbWVudCk7XG59
fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlucykgRG9jdW1lbnQuaW1wbGVtZW50KGNvbnRhaW5z
KTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY29udGFpbnMpIEVsZW1lbnQu
aW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5cbi8vIHRyZWUgd2Fsa2luZ1xuXG52YXIgaW5qZWN0
Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNvbWJpbmF0b3Ipe1xuXHRpZiAoIWV4
cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yO1xuXG5cdGV4cHJlc3Npb24gPSBPYmplY3QuY2xv
bmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpO1xuXG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJl
c3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGkt
LTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0uY29tYmluYXRvciA9IGNvbWJpbmF0b3I7XG5cblx0
cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldE5leHQ6ICd+
Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5cdGdldFBhcmVudDogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5qZWN0Q29tYmluYXRv
cihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbk9iamVjdC5mb3JFYWNo
KHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRnZXRBbGxQcmV2aW91czogJyF+Jyxcblx0Z2V0U2li
bGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVuOiAnPicsXG5cdGdldFBhcmVudHM6ICchJ1xufSwg
ZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9k
LCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50cyhpbmpl
Y3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZpcnN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0
XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3Io
ZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKGV4cHJl
c3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0
Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKS5nZXRMYXN0KCkpO1xuXHR9LFxuXG5cdGdldFdp
bmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LndpbmRvdztc
blx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25l
ckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbihpZCl7XG5cdFx0
cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcnICsgaWQpLnJlcGxh
Y2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xuXHR9LFxuXG5cdG1hdGNoOiBmdW5jdGlvbihleHBy
ZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0Y2godGhpcywgZXhw
cmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxuXG5pZiAod2luZG93LiQkID09IG51bGwpIFdpbmRv
dy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRpZiAoYXJndW1lbnRzLmxl
bmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9mIHNlbGVjdG9yID09ICdzdHJpbmcnKSByZXR1cm4g
U2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHNlbGVjdG9yLCBuZXcgRWxlbWVudHMpO1xuXHRc
dGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50
cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJuIG5ldyBFbGVtZW50cyhhcmd1bWVudHMpO1xufSk7
XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5zZXJ0ZXJzID0ge1xuXG5cdGJlZm9yZTogZnVuY3Rp
b24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9k
ZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQp
O1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2YXIg
cGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5pbnNl
cnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2libGluZyk7XG5cdH0sXG5cblx0Ym90dG9t
OiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNv
bnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0
ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENoaWxkKTtcblx0fVxu
XG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTtcblxuXG5cbi8vIGdl
dFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxudmFyIHByb3BlcnR5R2V0dGVycyA9IHt9LCBwcm9w
ZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJvcGVydGllc1xuXG52YXIgcHJvcGVydGllcyA9IHt9
O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBlJywgJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZScsICdh
Y2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAnY2VsbFNwYWNpbmcnLCAnY29sU3BhbicsXG5cdCdm
cmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCdcbl0sIGZ1bmN0aW9u
KHByb3BlcnR5KXtcblx0cHJvcGVydGllc1twcm9wZXJ0eS50b0xvd2VyQ2FzZSgpXSA9IHByb3Bl
cnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRtbCA9ICdpbm5lckhUTUwnO1xucHJvcGVydGllcy50
ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnRleHRDb250ZW50ID09IG51bGwp
ID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVudCc7XG5cbk9iamVjdC5mb3JFYWNoKHByb3BlcnRp
ZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5cdHByb3BlcnR5U2V0dGVyc1trZXldID0gZnVuY3Rp
b24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbcmVhbF0gPSB2YWx1ZTtcblx0fTtcblx0cHJvcGVy
dHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZVtyZWFsXTtc
blx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xucHJvcGVydHlTZXR0ZXJzLnRleHQgPSAoZnVuY3Rp
b24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRpZiAobm9kZS5nZXQo
J3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpO1xuXHRcdGVsc2Ugbm9k
ZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7XG5cdH07XG59KShwcm9wZXJ0eVNldHRlcnMudGV4
dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRlcil7XG5cdHJldHVy
biBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUn
KSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUpO1xuXHR9O1xufSkocHJvcGVydHlHZXR0
ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5cbi8vIEJvb2xlYW5zXG5cbnZhciBib29scyA9IFtc
blx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lzbWFwJywgJ2RlY2xhcmUnLCAnbm9zaGFkZScsICdj
aGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxlJywgJ3NlbGVjdGVk
JywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywgJ2F1dG9mb2N1cycs
ICdjb250cm9scycsICdhdXRvcGxheScsXG5cdCdsb29wJ1xuXTtcblxudmFyIGJvb2xlYW5zID0g
e307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBmdW5jdGlvbihib29sKXtcblx0dmFyIGxvd2VyID0g
Ym9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29sZWFuc1tsb3dlcl0gPSBib29sO1xuXHRwcm9wZXJ0
eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbYm9vbF0g
PSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29sXTtcblx0fTtcbn0pO1xuXG4vLyBTcGVjaWFsIGNh
c2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7XG5cblx0J2NsYXNzJzogZnVu
Y3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xh
c3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVl
KTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnaHRtbEZv
cicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3IgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdm
b3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xu
XHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5bGUuY3NzVGV4dCA9IHZhbHVlIDogbm9kZS5zZXRB
dHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xuXHR9LFxuXG5cdCd2YWx1ZSc6IGZ1bmN0aW9uKG5v
ZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwpID8gdmFsdWUgOiAn
Jztcblx0fVxuXG59KTtcblxucHJvcGVydHlHZXR0ZXJzWydjbGFzcyddID0gZnVuY3Rpb24obm9k
ZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSB8fCBu
dWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG59O1xuXG4vKiA8d2Via2l0PiAqL1xu
dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyBJRSBzZXRzIHR5
cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xudHJ5IHsgZWwudHlwZSA9ICdidXR0b24nOyB9IGNh
dGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAnYnV0dG9uJykgcHJvcGVydHlTZXR0ZXJzLnR5cGUg
PSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdG5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgdmFs
dWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwvd2Via2l0PiAqL1xuXG4vKjxJRT4qL1xuXG4vKjxs
dElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRc
bnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xu
XHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0Zmxh
ZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0p
KCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVlLCBodG1sNUlucHV0U3VwcG9ydDtcblxuLy8gIzIx
NzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5wdXQudHlwZSA9ICdzdWJtaXQnO1xudm9sYXRpbGVJ
bnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0gJ3QnO1xuXG4vLyAjMjQ0MyAtIElFIHRocm93cyBc
IkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUgaW5wdXQgdHlwZXNc
bnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7XG5cdGlucHV0LnR5cGUgPSAnZW1haWwnO1xuXHRo
dG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJztcbn0gY2F0Y2ggKGUpe31c
blxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8ICFodG1sNUlucHV0
U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKXtcblx0
dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuXHRcdG5vZGUudHlwZSA9IHR5cGU7
XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKXt9XG59O1xuLyo8L0lFPiov
XG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSAqL1xuXG4vKiA8bHRJRTk+ICovXG52YXIg
cG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oZGl2KXtcblx0ZGl2LnJhbmRvbSA9ICdh
dHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5nZXRBdHRyaWJ1dGUoJ3JhbmRvbScpID09ICdhdHRy
aWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxudmFyIGhhc0Ns
b25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xuXHR0ZXN0LmlubmVySFRNTCA9ICc8b2JqZWN0Pjxw
YXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZhbHVlPVwidGhlIHVua25vd25cIiAvPjwvb2JqZWN0
Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9kZSh0cnVlKS5maXJzdENoaWxkLmNoaWxkTm9kZXMu
bGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4vKiA8L2x0
SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0ID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0
dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1lIHx8ICcnKS5jbGVhbigpLnNwbGl0KCcgJyksIHVu
aXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFt
ZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0gJycgJiYgIXVuaXF1ZXNbY2xhc3NOYW1lXSkgcmV0
dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNsYXNzTmFtZTtcblx0fSk7XG59O1xuXG52YXIgYWRk
VG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKG5hbWUp
O1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhp
cy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIHNldHRlciA9IHBy
b3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChzZXR0ZXIpe1xuXHRc
dFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0dmFyIGF0dHJpYnV0ZUFsbG93TGlzdDtcblx0XHRcdGlmIChwb2xsdXRlc0dldEF0
dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFs
bG93TGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJRTk+ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9
PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8q
IDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0
cmlidXRlQWxsb3dMaXN0W25hbWVdO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fSBl
bHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2YWx1ZSk7XG5cdFx0
XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRy
aWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXRQcm9wZXJ0aWVzOiBm
dW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRmb3IgKHZhciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRl
cykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlXSk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xu
XHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMpO1xuXHRcdC8qIDxsdElFOT4gKi9cblx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpe1xuXHRcdFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0ZUFsbG93TGlzdCA9IHRoaXMucmV0cmlldmUoJyRh
dHRyaWJ1dGVBbGxvd0xpc3QnLCB7fSk7XG5cdFx0XHRpZiAoIWF0dHIpIHJldHVybiBudWxsO1xu
XHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAhYXR0cmlidXRlQWxsb3dMaXN0W25hbWVdKXtcblx0
XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRlckhUTUw7XG5cdFx0XHRcdC8vIHNlZ21lbnQgYnkg
dGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRlIG5hbWVcblx0XHRc
dFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRlci5zZWFyY2goL1xcLz9bJ1wiXT8+KD8hW148XSo8
WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0YXR0cmli
dXRlQWxsb3dMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyogPC9sdElF
OT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xpY2suZ2V0QXR0cmlidXRlKHRoaXMsIG5hbWUpO1xu
XHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xpY2suaGFzQXR0cmlidXRlKHRoaXMsIG5hbWUpKSA/
IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0Z2V0UHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gYXJncy5t
YXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcykuYXNzb2NpYXRlKGFyZ3MpO1xuXHR9LFxuXG5cdHJl
bW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0
eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xu
XHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5LCB0aGlzKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKXtcblx0
XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5
ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB0aGlz
LnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdGdl
dDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVz
W3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5
LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7XG5cdH0ub3ZlcmxvYWRH
ZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0g
RWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lcmFz
ZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3ZlUHJvcGVydHkocHJv
cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGhhc0NsYXNzTGlzdCA/
IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5z
KGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiBjbGFz
c2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkZENs
YXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xh
c3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc2Vz
KGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xhc3NOYW1lKS5qb2luKCcgJyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNs
YXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2gocmVtb3ZlRnJvbUNsYXNz
TGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUp
e1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSk7XG5cdFx0Y2xh
c3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xhc3NOYW1lcyk7XG5c
dFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVzLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3JjZSl7XG5c
dFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNlID0gIXRoaXMuaGFzQ2xhc3MoY2xhc3NOYW1lKTtc
blx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1lKSA6IHRoaXMucmVt
b3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZG9wdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQsIGVsZW1lbnRzID0gQXJyYXkuZmxhdHRlbihhcmd1
bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCA+IDEpIHBh
cmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG5c
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9
IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTtcblx0XHRcdGlmIChlbGVtZW50KSBwYXJl
bnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyYWdtZW50KSB0aGlz
LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFw
cGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXtcblx0XHRyZXR1cm4gdGhpcy5ncmFiKHRo
aXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUpO1xuXHR9LFxuXG5cdGdy
YWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20n
XShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwg
J2JvdHRvbSddKHRoaXMsIGRvY3VtZW50LmlkKGVsLCB0cnVlKSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXtcblx0XHRlbCA9IGRvY3VtZW50Lmlk
KGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLCBlbCk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcHM6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5c
dFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZXMo
ZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxcblxuXHRnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8vIFNhZmFyaSAzLjIuMVxuXHRcdHJldHVybiBuZXcg
RWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5jdGlvbihvcHRp
b24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZDtcblx0XHR9KSk7XG5cdH0sXG5cblx0
dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblx0
XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rp
b24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBlbC50eXBlO1xuXHRcdFx0aWYgKCFlbC5uYW1lIHx8
IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAncmVzZXQnIHx8IHR5
cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG5cdFx0XHR2YXIgdmFs
dWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxlY3RlZCgpLm1hcChm
dW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJRVxuXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuaWQo
b3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9KSA6ICgodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUg
PT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNrZWQpID8gbnVsbCA6IGVsLmdldCgndmFsdWUnKTtc
blxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2YWwpe1xuXHRcdFx0
XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVzaChlbmNvZGVV
UklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsKSk7XG5c
dFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9
XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxcblxudmFyIGFwcGVuZEluc2VydGVycyA9IHtcblx0
YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRhZnRlcjogJ2FmdGVyRW5kJyxcblx0Ym90dG9tOiAn
YmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJCZWdpbicsXG5cdGluc2lkZTogJ2JlZm9yZUVuZCdc
bn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNlcnRBZGphY2VudEhU
TUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0aW9uKGh0bWwsIHdo
ZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2VudEhUTUwoYXBwZW5kSW5zZXJ0ZXJzW3doZXJlIHx8
ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVybiB0aGlzO1xufSA6IGZ1bmN0aW9uKGh0bWwsIHdo
ZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6IGh0bWx9KSxcblx0
XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rlcyxcblx0XHRmcmFnbWVudCA9IHRlbXAuZmlyc3RD
aGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSByZXR1cm4gdGhpcztcblx0aWYgKGNoaWxkcmVuLmxl
bmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcblx0XHR9XG5cdH1c
blxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGZyYWdtZW50LCB0aGlzKTtcblx0cmV0
dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0ge307XG5cbnZh
ciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRyZXR1cm4gKHN0b3JhZ2VbdWlkXSB8fCAoc3RvcmFn
ZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIg
dWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5cdGlmIChpdGVtLnJlbW92ZUV2ZW50cykgaXRlbS5y
ZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBpdGVtLmNsZWFyQXR0
cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51bGwpe1xuXHRcdGRlbGV0ZSBjb2xsZWN0ZWRbdWlk
XTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRdO1xuXHR9XG5cdHJldHVybiBpdGVtO1xufTtcblxu
dmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdzZWxlY3RlZCcsIHRl
eHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGRlc3Ryb3k6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVuID0gY2xlYW4odGhpcykuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNoKGNoaWxkcmVuLCBjbGVhbik7XG5cdFx0RWxlbWVu
dC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5j
dGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQu
ZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihjb250ZW50cywg
a2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTtcblx0XHR2YXIgY2xv
bmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwgdGUgPSBbdGhpc10s
IGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xuXHRcdFx0Y2UuYXBwZW5kKEFycmF5LmNvbnZlcnQo
Y2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdFx0dGUuYXBwZW5kKEFycmF5
LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0fVxuXG5cdFx0
Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtcblx0XHRcdHZhciBub2RlID0gY2VbaV0sIGVsZW1l
bnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnaWQn
KTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAobm9kZS5jbGVhckF0dHJpYnV0ZXMpe1xu
XHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRlcygpO1xuXHRcdFx0XHRub2RlLm1lcmdlQXR0cmli
dXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3VuaXF1ZU51bWJl
cicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRpb25zKXtcblx0XHRcdFx0XHR2YXIgbm8gPSBub2Rl
Lm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSBu
by5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0ZWQ7XG5cdFx0XHRc
dH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHByb3AgPSBmb3JtUHJv
cHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdFx0aWYgKHByb3AgJiYgZWxl
bWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07XG5cdFx0fVxuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVCdWcpe1xuXHRcdFx0dmFyIGNvID0gY2xvbmUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChpID0gY28ubGVuZ3RoOyBpLS07KSBjb1tpXS5vdXRl
ckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5cdFx0fVxuXHRcdC8qPC9sdElFOT4qL1xuXHRcdHJl
dHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5cdH1cblxufSk7XG5cbltFbGVtZW50LCBXaW5kb3cs
IERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRMaXN0ZW5lcjogZnVuY3Rp
b24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxlY3RlZFtTbGljay51aWRPZih0aGlzKV0gPSB0aGlz
O1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRFdmVudExpc3RlbmVyKSB0aGlzLmFkZEV2ZW50TGlz
dGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuYXR0YWNoRXZl
bnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVM
aXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh0aGlzLnJlbW92ZUV2ZW50TGlz
dGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0p
O1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0eSwgZGZsdCl7XG5c
dFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9wID0gc3RvcmFnZVtw
cm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0gbnVsbCAmJiBwcm9wID09IG51bGwpIHByb3AgPSBz
dG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5cdFx0cmV0dXJuIHByb3AgIT0gbnVsbCA/IHByb3Ag
OiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRc
dHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRzdG9yYWdlW3Byb3Bl
cnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVsaW1pbmF0ZTogZnVu
Y3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMp
KTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBnYyA9IGZ1bmN0aW9uKCl7XG5cdFx0T2JqZWN0LmVh
Y2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0aWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFnZSkgQ29s
bGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cucmVtb3ZlTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtc
blx0fTtcblx0d2luZG93LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG59XG4vKjwvbHRJRTk+
Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307XG5cblxuXG5FbGVtZW50LlByb3BlcnRpZXMu
c3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihzdHlsZSl7XG5cdFx0dGhpcy5zdHlsZS5jc3NU
ZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5z
dHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnRhZyA9
IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudGFnTmFtZS50b0xvd2Vy
Q2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy5odG1sID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYgKGh0bWwgPT0gbnVsbCkgaHRtbCA9ICcnO1xuXHRc
dGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRtbC5qb2luKCcnKTtc
blxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKHRoaXMuc3R5bGVTaGVldCAmJiAhY2FuQ2hhbmdl
U3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGh0bWw7XG5cdFx0ZWxzZSAvKjwv
bHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycpO1xuXHR9XG5cbn07XG5cbnZhciBzdXBwb3J0c0hU
TUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gdHJ1ZSwgc3VwcG9y
dHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8qPGx0SUU5PiovXG4vLyB0ZWNobmlxdWUgYnkgamRi
YXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQuY29tL2lubmVyc2hpdi9cbnZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBmcmFnbWVudDtcbmRpdi5pbm5lckhUTUwg
PSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gKGRpdi5jaGlsZE5vZGVz
Lmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblx0dmFyIHRhZ3Mg
PSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2Nh
cHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBw
cm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAnKTtcblx0ZnJhZ21l
bnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGwgPSB0YWdzLmxlbmd0aDtc
blx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3JlYXRlRWxlbWVudCh0YWdzW2xdKTtcbn1cbmRpdiA9
IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbnN1cHBvcnRzVGFibGVJbm5lckhUTUwg
PSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdHZhciB0YWJsZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRhYmxlLmlubmVySFRNTCA9ICc8dHI+PHRkPjwvdGQ+
PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0pO1xuXG4vKjxsdEZGND4qL1xudmFyIHRyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwgaHRtbCA9ICc8dGQ+PC90ZD4nO1xudHIuaW5uZXJI
VE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5lckhUTUwgPSAodHIuaW5uZXJIVE1MID09IGh0bWwp
O1xudHIgPSBudWxsO1xuLyo8L2x0RkY0PiovXG5cbmlmICghc3VwcG9ydHNUYWJsZUlubmVySFRN
TCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8fCAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblxu
XHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0KXtcblxuXHRcdHZh
ciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0YWJsZTogWzEsICc8dGFibGU+JywgJzwvdGFibGU+
J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNlbGVjdD4nLCAnPC9zZWxlY3Q+J10sXG5cdFx0XHR0
Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG5cdFx0XHR0
cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J11cblx0
XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25zLnRmb290ID0gdHJh
bnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGh0bWwpe1xuXG5cdFx0XHQv
KjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMuc3R5bGVTaGVldCkgcmV0dXJuIHNldC5jYWxsKHRo
aXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgd3JhcCA9IHRyYW5zbGF0
aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRcdFx0aWYgKCF3cmFwICYmICFzdXBwb3J0c0hUTUw1
RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcnXTtcblx0XHRcdGlmICghd3JhcCkgcmV0dXJuIHNl
dC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0XHR2YXIgbGV2ZWwgPSB3cmFwWzBdLCB3cmFwcGVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHRhcmdldCA9IHdyYXBwZXI7XG5cdFx0
XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcHBl
cik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRNTCA9IFt3cmFwWzFdLCBodG1sLCB3cmFwWzJdXS5m
bGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3aGlsZSAobGV2ZWwtLSkgdGFyZ2V0ID0gdGFyZ2V0
LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVtcHR5KCkuYWRvcHQodGFyZ2V0LmNoaWxkTm9kZXMp
O1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LnJlbW92ZUNoaWxk
KHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9IG51bGw7XG5cdFx0fTtcblxuXHR9KShFbGVtZW50
LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxuLyo8L0lFPiovXG5cbi8qPGx0SUU5PiovXG52YXIg
dGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG50ZXN0Rm9ybS5pbm5l
ckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4nO1xuXG5pZiAodGVz
dEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAncycpIEVsZW1lbnQuUHJvcGVydGllcy52YWx1ZSA9
IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGFnID0gdGhpcy5nZXQoJ3Rh
ZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcpIHJldHVybiB0aGlzLnNldFByb3BlcnR5KCd2
YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxlbWVudHMoJ29wdGlv
bicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIG9wdGlvbiA9IG9wdGlvbnNbaV0sXG5c
dFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKSxcblx0XHRcdFx0
b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBv
cHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IHZhbHVlKSByZXR1
cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0KCd0YWcnKTtcblxu
XHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYgdGFnICE9ICdvcHRpb24nKSByZXR1cm4gdGhpcy5n
ZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRcdGlmICh0YWcgPT0gJ3NlbGVjdCcgJiYgIShvcHRp
b24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVswXSkpIHJldHVybiAnJztcblxuXHRcdHZhciBhdHRy
ID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7XG5cdFx0cmV0dXJuIChhdHRyICYm
IGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0
fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5pZiAo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKSkgRWxl
bWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKGlkKXtcblx0XHR0aGlzLmlk
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7XG5cdH0sXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5pZCB8fCBudWxsO1xuXHR9LFxuXHRlcmFzZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZh
bHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+Ki9cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1l
OiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5cGUsIHRvIG1ha2Ug
dGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgRnVuY3Rpb24sIFN0
cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczogRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxudmFyIF9rZXlzID0ge307XG52YXIgbm9ybWFsaXplV2hlZWxTcGVlZCA9IGZ1bmN0aW9u
KGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7XG5cdGlmIChldmVudC53aGVlbERlbHRhKXtcblx0
XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxEZWx0YSAlIDEyMCA9PSAwID8gZXZlbnQud2hlZWxE
ZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVsdGEgLyAxMjtcblx0fSBlbHNlIHtcblx0XHR2YXIg
cmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8IGV2ZW50LmRldGFpbCB8fCAwO1xuXHRcdG5vcm1h
bGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMgOiByYXdBbW91bnQg
KiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZWQ7XG59O1xuXG52YXIgRE9NRXZlbnQgPSB0
aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RPTUV2ZW50JywgZnVuY3Rpb24oZXZlbnQsIHdpbil7
XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luLmV2ZW50
O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7XG5cdHRoaXMuZXZlbnQgPSBl
dmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0cnVlO1xuXHR0aGlzLnNoaWZ0ID0gZXZlbnQuc2hp
ZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2ZW50LmN0cmxLZXk7XG5cdHRoaXMuYWx0ID0gZXZl
bnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBldmVudC5tZXRhS2V5O1xuXHR2YXIgdHlwZSA9IHRo
aXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZl
bnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykg
dGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQo
dGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRleE9mKCdrZXknKSA9PSAwKXtcblx0XHR2YXIgY29k
ZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtcblx0XHRpZiAo
IXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5cHJlc3MnKSB0aGlzLmtleSA9IF9rZXlzW2NvZGVd
O1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3duJyB8fCB0eXBlID09ICdrZXl1cCcpe1xuXHRcdFx0
aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEyNCkgdGhpcy5rZXkgPSAnZicgKyAoY29kZSAtIDEx
MSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4gOTUgJiYgY29kZSA8IDEwNikgdGhpcy5rZXkgPSBj
b2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmtleSA9PSBudWxsKSB0aGlzLmtleSA9IFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKTtcblx0fSBlbHNlIGlmICh0eXBl
ID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0gJ2NvbnRleHRtZW51
JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUu
aW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0XHR2YXIgZG9jID0gd2luLmRvY3VtZW50O1xuXHRc
dGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5cdFx0dGhpcy5wYWdlID0ge1xuXHRcdFx0eDogKGV2
ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYICsgZG9jLnNj
cm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSA6
IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wXG5cdFx0fTtcblx0XHR0aGlzLmNsaWVudCA9
IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBh
Z2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxcblx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxs
KSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xpZW50WVxuXHRcdH07
XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlID09ICd3aGVlbCcgfHwg
dHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMud2hlZWwgPSBub3JtYWxpemVXaGVlbFNwZWVkKGV2
ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0gMyB8fCBldmVudC5i
dXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91
c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21vdXNlbGVhdmUnKXtc
blx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdt
b3VzZWVudGVyJztcblx0XHRcdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBl
dmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQnXTtcblx0XHRcdHdo
aWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQu
cGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3VtZW50LmlkKHJlbGF0
ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNoJykgPT0gMCB8fCB0
eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXtcblx0XHR0aGlzLnJvdGF0aW9uID0gZXZlbnQu
cm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9IGV2ZW50LnNjYWxlO1xuXHRcdHRoaXMudGFyZ2V0
VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7XG5cdFx0dGhpcy5jaGFuZ2VkVG91Y2hlcyA9
IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRcdHZhciB0b3VjaGVzID0gdGhpcy50b3VjaGVzID0g
ZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXtcblx0XHRcdHZh
ciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0XHR0aGlzLnBhZ2UgPSB7eDogdG91Y2gucGFnZVgs
IHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRoaXMuY2xpZW50ID0ge3g6IHRvdWNoLmNsaWVudFgs
IHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhpcy5jbGllbnQpIHRo
aXMuY2xpZW50ID0ge307XG5cdGlmICghdGhpcy5wYWdlKSB0aGlzLnBhZ2UgPSB7fTtcbn0pO1xu
XG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fSxcblxuXHRzdG9w
UHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5j
YW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByZXZlbnRE
ZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KSB0
aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LnJldHVyblZh
bHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkRPTUV2ZW50LmRl
ZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtleSl7XG5cdF9rZXlzW2NvZGVdID0ga2V5O1xuXHRy
ZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50LmRlZmluZUtleXMgPSBET01FdmVudC5kZWZpbmVL
ZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleXMoe1xuXHQnMzgn
OiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6ICdsZWZ0JywgJzM5JzogJ3JpZ2h0Jyxcblx0JzI3
JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4JzogJ2JhY2tzcGFjZScsICc5JzogJ3RhYicsXG5c
dCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInXG59KTtcblxufSkoKTtcblxuXG5cblxuXG4v
KlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEVs
ZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBmaWxlIGFsc28gaW5j
bHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVudCBFdmVudHMsIGlm
IG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVzOiBFbGVtZW50LkV2ZW50XG5cbi4uLlxuKi9cblxu
KGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5jdGlv
bihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50cyhldmVudHMpO1xufX07XG5cbltFbGVtZW50LCBX
aW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMn
LCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwg
dmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50c1t0eXBlXS5rZXlzLmNvbnRhaW5zKGZuKSkgcmV0
dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMucHVzaChmbik7XG5cdFx0dmFyIHJlYWxU
eXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdLFxuXHRcdFx0
Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxmID0gdGhpcztcblx0XHRpZiAoY3VzdG9tKXtcblx0
XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3RvbS5vbkFkZC5jYWxsKHRoaXMsIGZuLCB0eXBlKTtc
blx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uKXtcblx0XHRcdFx0Y29uZGl0aW9uID0gZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uLmNhbGwodGhpcywgZXZl
bnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdFx0cmV0dXJu
IHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHJlYWxU
eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0
XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZuLmNhbGwoc2Vs
Zik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZlRXZlbnQgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50c1ty
ZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2ZW50KXtcblx0XHRcdGlmIChuYXRpdmVFdmVudCA9
PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRldmVudCA9
IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5kb3coKSk7XG5cdFx0XHRcdFx0aWYgKGNv
bmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0b3AoKTtcblx0XHRc
dFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWRkTGlzdGVuZXIocmVhbFR5cGUsIGRlZm4sIGFy
Z3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2ZW50c1t0eXBlXS52YWx1ZXMucHVzaChkZWZuKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwg
Zm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAo
IWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHR2YXIgbGlzdCA9IGV2
ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXggPSBsaXN0LmtleXMuaW5kZXhPZihmbik7XG5cdFx0
aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpcztcblx0XHR2YXIgdmFsdWUgPSBsaXN0LnZhbHVl
c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qua2V5c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qu
dmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV07XG5c
dFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uUmVtb3ZlKSBjdXN0b20ub25SZW1v
dmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHR5cGUgPSBG
dW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZlbnRzW3R5cGVdKSA/IHRoaXMucmVtb3ZlTGlzdGVu
ZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1syXSkgOiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50
czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMu
YWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRp
ZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50
cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRo
aXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xu
XHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICghZXZlbnRzKXtcblx0XHRc
dGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhpcy5yZW1vdmVFdmVudHModHlwZSk7XG5cdFx0XHR0
aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5cdFx0fSBlbHNlIGlmIChhdHRhY2hlZFtldmVudHNd
KXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRc
dFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0
ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHZhciBldmVu
dHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRz
W3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblxu
XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5
KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMs
IGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25l
RXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXtcblx0XHRmcm9tID0gZG9jdW1lbnQuaWQoZnJv
bSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20ucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICgh
ZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIXR5cGUpe1xuXHRcdFx0Zm9yICh2YXIgZXZl
bnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9uZUV2ZW50cyhmcm9tLCBldmVudFR5cGUpO1xuXHRc
dH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtcblx0XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2go
ZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50KHR5cGUsIGZuKTtcblx0XHRcdH0s
IHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRWxlbWVudC5O
YXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAyLCBkYmxjbGljazogMiwgbW91c2V1cDogMiwgbW91
c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwgLy9tb3VzZSBidXR0b25zXG5cdHdoZWVsOiAyLCBt
b3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVlbFxuXHRtb3VzZW92
ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1vdmU6IDIsIHNlbGVjdHN0YXJ0OiAyLCBzZWxlY3Rl
bmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0a2V5ZG93bjogMiwga2V5cHJlc3M6IDIsIGtleXVw
OiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBtb2JpbGVcblx0dG91
Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0b3VjaGVuZDogMiwgdG91Y2hjYW5jZWw6IDIsIC8v
IHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwgZ2VzdHVyZWVuZDog
MiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAyLCByZXNldDogMiwg
c2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9mb3JtIGVsZW1lbnRz
XG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVmb3JldW5sb2FkOiAyLCByZXNpemU6IDEsIG1vdmU6
IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJlYWR5c3RhdGVjaGFuZ2U6IDEsIC8vd2luZG93XG5c
dGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAyLCBwYWdlc2hvdzogMiwgcGFnZWhpZGU6IDIsIC8v
IGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1lc3NhZ2U6IDIgLy9t
aXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9IHtcblx0bW91c2V3aGVlbDoge1xuXHRcdGJhc2U6
ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdoZWVsJyBpbiBkb2N1
bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNjcm9sbCdcblx0fVxufTtcblxudmFyIGNo
ZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJn
ZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwpIHJldHVybiB0cnVlO1xuXHRpZiAoIXJlbGF0ZWQp
IHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYgcmVsYXRlZC5wcmVm
aXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYgIXRoaXMuY29udGFp
bnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdvbm1vdXNlZW50ZXInIGluIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50ZXIgPSBFbGVtZW50
Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjtcblx0RWxlbWVudC5Nb3VzZWVudGVyQ2hlY2sg
PSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlZW50ZXIgPSB7XG5cdFx0
YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xuXG5cdEVsZW1l
bnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25k
aXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8qPGx0SUU5PiovXG5pZiAoIXdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMucHJvcGVydHljaGFuZ2UgPSAyO1xu
XHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7XG5cdFx0YmFzZTogZnVuY3Rpb24oKXtcblx0XHRc
dHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRcdFx0cmV0dXJuICh0aGlzLmdldCgndGFnJykgPT0g
J2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94JykpID8gJ3By
b3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xuXHRcdH0sXG5cdFx0Y29uZGl0aW9uOiBmdW5jdGlv
bihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVydHljaGFuZ2UnIHx8
IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7XG5cdFx0fVxuXHR9O1xufVxu
Lyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGVs
ZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0
IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZpY2llbnQgZXZlbnQg
bWFuYWdlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRpb25dXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBldmVudExpc3RlbmVyU3VwcG9ydCA9ICEhd2luZG93
LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3VzaW4gPSBFbGVt
ZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7XG5cbnZhciBidWJibGVVcCA9IGZ1bmN0aW9u
KHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFy
Z2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkgcmV0dXJuIGZuLmNh
bGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtcblx0XHR0YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJn
ZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5cbnZhciBtYXAgPSB7XG5cdG1vdXNlZW50ZXI6IHtc
blx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRl
ckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRc
dGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0Zm9jdXM6IHtcblx0
XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycgOiAnaW4nKSxcblx0
XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJsdXI6IHtcblx0XHRiYXNlOiBldmVudExpc3RlbmVy
U3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9XG59
O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkgPSAnJGRlbGVnYXRpb246JztcbnZhciBmb3JtT2Jz
ZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxuXHRyZXR1cm4ge1xuXG5cdFx0YmFzZTogJ2ZvY3Vz
aW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxmLCB1aWQpe1xuXHRcdFx0dmFyIGxpc3Qg
PSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KVt1aWRdO1xuXHRc
dFx0aWYgKGxpc3QgJiYgbGlzdC5mb3JtcykgZm9yICh2YXIgaSA9IGxpc3QuZm9ybXMubGVuZ3Ro
OyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNv
IGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRcdC8vIHJlbW92ZUV2ZW50IG1ldGhvZCBhbnltb3Jl
LiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdhc1xuXHRcdFx0XHQvLyByZW1vdmVkIGFzIHdlbGwu
XG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0LmZvcm1zW2ldLnJl
bW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bGlz
dGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCl7XG5cdFx0
XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8gdGFyZ2V0IDogZXZl
bnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpO1xuXHRcdFx0aWYgKCFmb3JtKSByZXR1cm47XG5c
blx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3Rl
bmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVuZXIgPSBsaXN0ZW5lcnNbdWlkXSB8fCB7Zm9ybXM6
IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9ybXMgPSBsaXN0ZW5lci5mb3JtcywgZm5zID0gbGlz
dGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAhPSAtMSkgcmV0dXJu
O1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtcblxuXHRcdFx0dmFyIF9mbiA9IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtc
blx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2ZW50KHR5cGUsIF9mbik7XG5cdFx0XHRmbnMucHVz
aChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNbdWlkXSA9IGxpc3RlbmVyO1xuXHRcdFx0c2VsZi5z
dG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCBsaXN0ZW5lcnMpO1xuXHRcdH1cblx0fTtc
bn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cdHJldHVybiB7XG5c
dFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZu
LCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZhciBldmVudHMgPSB7Ymx1cjogZnVuY3Rpb24oKXtc
blx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMoZXZlbnRzKTtcblx0XHRcdH19O1xuXHRcdFx0ZXZl
bnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxmLCBtYXRj
aCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGV2ZW50LnRhcmdldC5hZGRF
dmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07XG59O1xuXG5pZiAoIWV2ZW50TGlzdGVuZXJTdXBw
b3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xuXHRzdWJtaXQ6IGZvcm1PYnNlcnZlcignc3VibWl0
JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksXG5cdGNoYW5nZTogaW5wdXRPYnNl
cnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDogaW5wdXRPYnNlcnZlcignc2VsZWN0Jylcbn0pO1xu
Lyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLFxuXHRhZGRFdmVu
dCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1vdmVFdmVudCA9IHByb3RvLnJlbW92ZUV2ZW50O1xu
XG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQsIG1ldGhvZCl7XG5cdHJldHVybiBmdW5jdGlvbih0
eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0aWYgKHR5cGUuaW5kZXhPZignOnJlbGF5JykgPT0g
LTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFy
IHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdGlmIChw
YXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5
cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgbmV3VHlwZSA9IHBhcnNlZC50YWc7XG5cdFx0
cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFjaChmdW5jdGlvbihwc2V1ZG8pe1xuXHRcdFx0bmV3
VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsgKHBzZXVkby52YWx1ZSA/ICcoJyArIHBzZXVkby52
YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtcblx0XHRvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbik7
XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIG5ld1R5cGUsIHBhcnNlZC5wc2V1ZG9zWzBd
LnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52YXIgZGVsZWdhdGlvbiA9IHtcblxuXHRhZGRFdmVu
dDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0
cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYg
KHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0aWYgKHN0b3JlZFtfdWlk
XS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0ubWF0Y2ggPT0gbWF0Y2gpIHJldHVybiB0aGlzO1xu
XHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5cGUsIF9tYXRjaCA9IG1hdGNoLCBfZm4gPSBmbiwg
X21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xu
XG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpe1xuXHRcdFx0cmV0dXJuIFNsaWNrLm1hdGNo
KHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xuXG5cdFx0dmFyIGVsZW1lbnRFdmVudCA9IEVsZW1l
bnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAoX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50
ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24pe1xuXHRcdFx0dmFyIF9fbWF0Y2ggPSBtYXRjaCwg
Y29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNvbmRpdGlvbjtcblx0
XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVudCl7XG5cdFx0XHRcdHJldHVybiBfX21h
dGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRpdGlvbi5jYWxsKHRhcmdldCwgZXZlbnQsIHR5cGUp
O1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgc2VsZiA9IHRoaXMsIHVpZCA9IFN0cmluZy51
bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0b3IgPSBfbWFwLmxpc3RlbiA/IGZ1bmN0aW9uKGV2
ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0
KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBfbWFwLmxpc3Rlbihz
ZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCk7XG5cdFx0fSA6IGZ1bmN0aW9uKGV2
ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0
KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBidWJibGVVcChzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdH07XG5cblx0XHRpZiAoIXN0b3JlZCkg
c3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3VpZF0gPSB7XG5cdFx0XHRtYXRjaDogX21hdGNoLFxu
XHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVnYXRvcjogZGVsZWdhdG9yXG5cdFx0fTtcblx0XHRz
dG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRyZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0
eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1
bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3VpZCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJl
dHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlm
ICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxuXHRcdGlmIChfdWlkKXtcblx0XHRcdHZhciBfdHlw
ZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3JlZFtfdWlkXS5kZWxlZ2F0b3IsIF9tYXAgPSBtYXBb
dHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXHRcdFx0aWYg
KF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0aGlzLCBfdWlkKTtcblx0XHRcdGRlbGV0ZSBzdG9y
ZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRcdHJldHVybiBy
ZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJlKTtcblx0
XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5cdFx0aWYgKGZuKSBmb3IgKF9fdWlkIGluIHN0b3Jl
ZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNo
ICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywg
dHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5cdFx0fSBlbHNlIGZvciAoX191aWQgaW4gc3RvcmVk
KXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2gp
IGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgcy5mbiwgX191
aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59O1xuXG5bRWxlbWVudCwgV2lu
ZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cdGFkZEV2ZW50OiByZWxheShh
ZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVudCksXG5cdHJlbW92ZUV2ZW50OiByZWxheShyZW1v
dmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVFdmVudClcbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMg
Zm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBpbiBhIGZhc2hpb25h
YmxlIHdheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBFbGVt
ZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0eWxlXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRtbCwgZWw7XG5cbi8vPGx0SUU5PlxuLy8gQ2hlY2sg
Zm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCByZW1vdmUgc3R5bGVzIHdoZW4gdGhleSdyZSBzZXQg
dG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsLnN0eWxlLmNv
bG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xvciA9IG51bGw7XG52YXIgZG9lc05vdFJlbW92ZVN0
eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdyZWQnO1xuXG4vLyBjaGVjayBmb3Igb2xkSUUsIHdo
aWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhhbmQgc3R5bGVzIGluIHRoZSB3cm9uZyBvcmRlciAo
Y29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBvZiB3aWR0aC1zdHlsZS1jb2xvcilcbnZhciBib3Jk
ZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xuZWwuc3R5bGUuYm9yZGVyID0gYm9yZGVyO1xudmFy
IHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyID0gZWwuc3R5bGUuYm9yZGVyICE9IGJvcmRlcjtc
bmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxudmFyIGhhc0dldENvbXB1dGVkU3R5bGUgPSAhIXdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRzdXBwb3J0Qm9yZGVyUmFkaXVzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51bGw7XG5cbkVsZW1l
bnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMpe1xuXHR0aGlzLnNl
dFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZhciBoYXNPcGFjaXR5ID0gKGh0bWwuc3R5bGUub3Bh
Y2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVyID0gKGh0bWwuc3R5bGUuZmlsdGVyICE9IG51bGwp
LFxuXHRyZUFscGhhID0gL2FscGhhXFwob3BhY2l0eT0oW1xcZC5dKylcXCkvaTtcblxudmFyIHNl
dFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdG9y
ZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gb3Bh
Y2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxsID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59O1xu
XG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIgPSBmdW5jdGlvbihlbGVtZW50LCByZWdleHAsIHZh
bHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRmaWx0ZXIgPSBzdHlsZS5m
aWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8fCAnJztcblx0c3R5
bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVwbGFjZShyZWdleHAs
IHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50cmltKCk7XG5cdGlmICghc3R5bGUuZmls
dGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xufTtcbi8vPC9sdElFOT5cblxu
dmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkp
e1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xufSA6IChoYXNGaWx0ZXIgPyBm
dW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0aWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8
fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxlLnpvb20gPSAx
O1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8IG9wYWNpdHkgPT0gMSl7XG5cdFx0c2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0XHRpZiAob3BhY2l0eSA9PSAxICYmIGdldE9wYWNp
dHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFj
aXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwg
J2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5ICogMTAwKS5saW1pdCgwLCAxMDApLnJvdW5kKCkg
KyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJpbGl0eSkpO1xuXG52YXIgZ2V0T3BhY2l0eSA9ICho
YXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5z
dHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnb3BhY2l0eScpO1xuXHRy
ZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNpdHkudG9GbG9hdCgpO1xufSA6IChoYXNG
aWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIGZpbHRlciA9IChlbGVtZW50LnN0eWxl
LmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpKSxcblx0XHRvcGFj
aXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJlQWxwaGEpO1xuXHRy
ZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBmaWx0ZXIgPT0gbnVsbCkgPyAxIDogKG9wYWNpdHlb
MV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1l
bnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5cdGlmIChvcGFjaXR5ID09IG51bGwpIG9wYWNpdHkg
PSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6IDEpO1xuXHRyZXR1
cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZsb2F0TmFtZSA9IChodG1sLnN0eWxlLmNzc0Zsb2F0
ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyxcblx0bmFtZWRQb3NpdGlvbnMg
PSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBjZW50ZXI6ICc1MCUnLCByaWdodDogJzEwMCUnLCBi
b3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tncm91bmRQb3NpdGlvblhZID0gKGh0bWwuc3R5bGUu
YmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSxcblx0cHJlZml4UGF0dGVybiA9IC9eLShtcykt
LztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cmV0dXJuIHByb3Bl
cnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwgJyQxLScpLmNhbWVsQ2FzZSgpO1xufTtcblxuLy88
bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcHJvcGVydHkpe1xuXHRp
ZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpe1xuXHRcdHN0eWxlLnJlbW92ZUF0
dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5cdFx0cHJvcGVydHkgKz0gJ1knO1xuXHR9XG5cdHN0
eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG59O1xuLy88L2x0SUU5PlxuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0ZWRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xu
XHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJu
IHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldO1xuXHRcdHZhciBkZWZhdWx0
VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQodGhpcykuZGVmYXVsdFZpZXcsXG5cdFx0XHRjb21w
dXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLCBu
dWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRlZC5nZXRQcm9wZXJ0
eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHByb3BlcnR5Lmh5cGhl
bmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFs
dWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpe1xuXHRcdFx0aWYgKHZhbHVlICE9
IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cdFx0XHRzZXRPcGFjaXR5KHRoaXMs
IHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRwcm9wZXJ0eSA9IGNhbWVs
Q2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlm
ICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcnKXtcblx0XHRcdHZhciBtYXAgPSAoRWxlbWVudC5T
dHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3BsaXQoJyAnKTtcblx0XHRcdHZhbHVlID0gQXJyYXku
Y29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdGlmICghbWFwW2ld
KSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVybiAodHlwZU9mKHZhbCkgPT0gJ251bWJlcicpID8g
bWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsO1xuXHRcdFx0fSkuam9p
bignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJlcih2YWx1ZSkpKXtc
blx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3R5bGVb
cHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKCh2YWx1ZSA9PSAnJyB8
fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90UmVtb3ZlU3R5bGVzICYmIHRoaXMuc3R5bGUucmVt
b3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92ZVN0eWxlKHRoaXMuc3R5bGUsIHByb3BlcnR5KTtc
blx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFN0
eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jykg
cmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVy
dHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAoc3VwcG9ydEJv
cmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRleE9mKCdib3JkZXJSYWRpdXMnKSAhPSAtMSl7XG5c
dFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVz
JywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnXS5t
YXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVbY29ybmVyXSB8
fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpvaW4oJyAnKTtcblx0XHR9XG5cdFx0dmFyIHJlc3Vs
dCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xuXHRcdGlmICghcmVzdWx0IHx8IHByb3BlcnR5ID09
ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVtZW50LlNob3J0U3R5bGVzLmhhc093blByb3BlcnR5
KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3VsdCA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBzIGlu
IEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVydHldKSByZXN1bHQucHVzaCh0aGlzLmdldFN0eWxl
KHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRy
ZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRcdH1cblx0XHRpZiAo
aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRpb25bWFldPyQvLnRl
c3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvKHRvcHxyaWdodHxi
b3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24pe1xuXHRcdFx0XHRyZXR1cm4gbmFtZWRQ
b3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0fSkgfHwgJzBweCc7XG5cdFx0fVxuXHRcdGlmICgh
cmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKSByZXR1cm4gJzBweCAw
cHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRcdFx0cmVzdWx0ID0gU3RyaW5nKHJlc3VsdCk7XG5c
dFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3JnYmE/XFwoW1xcZFxccyxdK1xcKS8pO1xu
XHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xvclswXSwgY29sb3Jb
MF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiAh
dGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRcdFx0aWYgKCgvXihoZWlnaHR8d2lkdGgpJC8pLnRl
c3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1bHQpKSl7XG5cdFx0XHRcdHZhciB2YWx1
ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQnXSA6IFsndG9wJywg
J2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRcdFx0dmFsdWVzLmVhY2goZnVuY3Rpb24odmFsdWUp
e1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5nZXRTdHlsZSgnYm9yZGVyLScgKyB2YWx1ZSArICct
d2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRTdHlsZSgncGFkZGluZy0nICsgdmFsdWUpLnRvSW50
KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gdGhpc1snb2Zmc2V0JyArIHBy
b3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4Jztcblx0XHRcdH1cblx0XHRcdGlmICgo
L15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5KSAmJiBpc05h
TihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0XHRcdFx0cmV0dXJuICcwcHgnO1xuXHRcdFx0fVxu
XHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRpZiAocmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIg
JiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRvbXxMZWZ0KT8kLy50ZXN0KHByb3BlcnR5KSAmJiAv
XiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoL14oLispXFxz
KC4rKVxccyguKykkLywgJyQyICQzICQxJyk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblxuXHRc
dHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0c2V0U3R5bGVzOiBmdW5jdGlvbihzdHlsZXMpe1xu
XHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxlcykgdGhpcy5zZXRTdHlsZShzdHlsZSwgc3R5bGVz
W3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGVzOiBmdW5jdGlv
bigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyku
ZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtl
eSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59KTtcblxuRWxl
bWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgn
LCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4JywgbWF4V2lkdGg6
ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1pbkhlaWdodDogJ0Bw
eCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tncm91bmRTaXplOiAn
QHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAnQHB4IEBweCcsIGNvbG9yOiAncmdiKEAsIEAsIEAp
Jyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4JywgbGluZUhlaWdodDog
J0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBweCknLFxuXHRtYXJnaW46ICdAcHggQHB4
IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyOiAnQHB4IEAgcmdi
KEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCknLFxuXHRib3Jk
ZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlclN0eWxlOiAnQCBAIEAgQCcsIGJvcmRl
ckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAs
IEApJyxcblx0ekluZGV4OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0OiAnQCcsIHRleHRJ
bmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0BweCBAcHggQHB4IEBw
eCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJnaW46IHt9LCBwYWRk
aW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJTdHlsZToge30sIGJv
cmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J10uZWFj
aChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2YXIgU2hvcnQgPSBFbGVtZW50LlNob3J0U3R5bGVz
O1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7XG5cdFsnbWFyZ2luJywgJ3BhZGRpbmcnXS5l
YWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlvbjtcblx0
XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdAcHgnO1xuXHR9KTtcblx0dmFyIGJkID0g
J2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNob3J0LmJvcmRlcltiZF0gPSBBbGxbYmRdID0gJ0Bw
eCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBiZHcgPSBiZCArICdXaWR0aCcsIGJkcyA9IGJkICsg
J1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InO1xuXHRTaG9ydFtiZF0gPSB7fTtcblx0U2hvcnQu
Ym9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2JkXVtiZHddID0gQWxsW2Jkd10gPSAnQHB4Jztcblx0
U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7
XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFsbFtiZGNdID0g
J3JnYihALCBALCBAKSc7XG59KTtcblxuaWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZKSBFbGVt
ZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3JvdW5kUG9zaXRpb25Y
OiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyB0
byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVtZW50cyBhbmQg
dGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVk
aXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRw
Oi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNl
bnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS5cbiAgLSBWaWV3cG9y
dCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1
aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xp
Y2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHlsZV1cblxucHJv
dmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG5cdGNoaWxkID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcw
JztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xudmFyIGJyb2tlbk9mZnNldFBhcmVudCA9
IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQpO1xuZWxlbWVudCA9IGNoaWxkID0gbnVs
bDtcblxudmFyIGhlaWdodENvbXBvbmVudHMgPSBbJ2hlaWdodCcsICdwYWRkaW5nVG9wJywgJ3Bh
ZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lkdGgnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcblx0
d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQn
LCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnXTtcblxudmFyIHN2Z0NhbGN1
bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5cblx0dmFyIGdDUyA9IHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7eDogMCwgeTogMH07XG5cblx0aGVpZ2h0Q29tcG9u
ZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnkgKz0gcGFyc2VGbG9hdChnQ1Nb
Y3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRc
dGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0cmV0dXJuIGJvdW5k
cztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJuIHN0eWxlU3Ry
aW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpO1xufTtcblxudmFy
IGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gaXNPZmZzZXQoZWwpIHx8
ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChlbC50YWdOYW1lKTtcbn07XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSl7XG5cdFx0aWYgKGlzQm9k
eSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKHgsIHkpO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExlZnQgPSB4O1xuXHRcdFx0dGhpcy5zY3JvbGxUb3Ag
PSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTaXplOiBmdW5jdGlv
bigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNp
emUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRcdC8vIFRoaXMgaWYgY2xhdXNlIGlzIGJlY2F1c2Ug
SUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvZiBlbGVtZW50cyB3
aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRcdGlmICghd2luZG93LmdldENvbXB1dGVkU3R5bGUp
IHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRIZWlnaHR9O1xuXHRc
dC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIsIGNhbGxpbmcgYHN2
Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4ZWQgdGhlIHN2ZyBz
aXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0aWYgKHRoaXMuZ2V0KCd0YWcnKSA9PSAnc3ZnJykg
cmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhpcyk7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIGJv
dW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRyZXR1cm4ge3g6IGJv
dW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07XG5cdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRy
ZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1cblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5j
dGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdl
dFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsV2lkdGgsIHk6IHRoaXMu
c2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7XG5cdFx0
cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQsIHk6IHRoaXMuc2Nyb2xsVG9wfTtcblx0fSxcblxu
XHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5wYXJlbnRO
b2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNC
b2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5zY3JvbGxMZWZ0O1xu
XHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdGVsZW1lbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxu
XHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9mZnNldFBhcmVudCA/IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJp
bmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR2
YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAn
c3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6IGlzT2Zmc2V0O1xuXHRcdHdoaWxlICgoZWxlbWVu
dCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xuXHRcdFx0aWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVu
dCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSA6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkg
fHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51
bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRc
dH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRnZXRPZmZzZXRzOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlmIChoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3Qpe1xu
XHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcblx0XHRcdFx0
aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQpLFxu
XHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3JvbGwoKSxcblx0XHRcdFx0ZWxlbVNjcm9s
bHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0XHRcdFx0aXNGaXhlZCA9IChzdHlsZVN0cmluZyh0
aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKTtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0
eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy54ICsgKChpc0ZpeGVkKSA/IDAg
OiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGllbnRMZWZ0LFxuXHRcdFx0XHR5OiBib3VuZC50b3Au
dG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC55
KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBlbGVtZW50ID0g
dGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0
dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7
XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDtcblx0XHRcdHBvc2l0aW9u
LnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5cblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNl
dFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0UG9z
aXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtcblx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZz
ZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmdldFNjcm9sbHMoKTtcblx0XHR2YXIgcG9zaXRp
b24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAtIHNjcm9sbC54LFxuXHRcdFx0eTogb2Zmc2V0Lnkg
LSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRpZiAocmVsYXRpdmUgJiYgKHJlbGF0aXZlID0gZG9j
dW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0XHR2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IHJlbGF0
aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRyZXR1cm4ge3g6IHBvc2l0aW9uLnggLSByZWxhdGl2
ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJlbGF0aXZlKSwgeTogcG9zaXRpb24ueSAtIHJlbGF0
aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihyZWxhdGl2ZSl9O1xuXHRcdH1cblx0XHRyZXR1cm4g
cG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xu
XHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5h
dGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihlbGVtZW50KSxcblx0
XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHR2YXIgb2JqID0ge1xuXHRcdFx0bGVmdDog
cG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9zaXRpb24ueSxcblx0XHRcdHdpZHRoOiBzaXplLngs
XG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRcdH07XG5cdFx0b2JqLnJpZ2h0ID0gb2JqLmxlZnQg
KyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRvbSA9IG9iai50b3AgKyBvYmouaGVpZ2h0O1xuXHRc
dHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xu
XHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBvYmoueCAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJn
aW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmoueSAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4t
dG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRc
dHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihvYmopKTtcblx0fVxu
XG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRvd10uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0
Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGllbnRXaWR0aCwgeTogZG9jLmNsaWVudEhlaWdodH07
XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdHZhciB3aW4gPSB0aGlzLmdl
dFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDog
d2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3JvbGxMZWZ0LCB5OiB3aW4ucGFnZVlPZmZzZXQgfHwg
ZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKSxcblx0XHRcdG1pbiA9IHRoaXMuZ2V0
U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdFx0cmV0
dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xsV2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIG1pbi54
KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIG1pbi55
KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHt4OiAw
LCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oKXtcblx0XHR2YXIg
c2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0
b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwgaGVpZ2h0OiBzaXplLnksIHdpZHRoOiBzaXplLnh9
O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRlIG1ldGhvZHNcblxudmFyIHN0eWxlU3RyaW5nID0g
RWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xuXG5mdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50
LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHlsZSkudG9JbnQoKSB8
fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5
bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gbGVm
dEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXIt
bGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7XG5cdHJldHVybiAo
L14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7XG59XG5cbmZ1bmN0aW9u
IGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7XG5cdHZhciBkb2MgPSBlbGVtZW50LmdldERvY3Vt
ZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdD
U1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xufVxuXG59KSgpO1xuXG4vL2FsaWFz
ZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7IC8vY29tcGF0YWJp
bGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS55
O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNp
emUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxIZWln
aHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLnk7XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Ny
b2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxcblxuXHRnZXRMZWZ0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDtcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5u
YW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGJhc2ljIGFuaW1hdGlvbiBsb2dp
YyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3RoZXIgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xh
c3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBGeFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4s
IEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
KlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRvbkNhbmNlbDogbmlsLFxuXHRcdG9uQ29tcGxldGU6
IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAsXG5cdFx0dW5pdDogZmFsc2UsXG5cdFx0ZHVyYXRp
b246IDUwMCxcblx0XHRmcmFtZXM6IG51bGwsXG5cdFx0ZnJhbWVTa2lwOiB0cnVlLFxuXHRcdGxp
bms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7XG5cdFx0dGhpcy5zZXRPcHRp
b25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0cmV0dXJuIC0oTWF0aC5jb3MoTWF0aC5QSSAqIHAp
IC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5cblx0c3RlcDogZnVuY3Rpb24obm93KXtcblx0XHRp
ZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7XG5cdFx0XHR2YXIgZGlmZiA9ICh0aGlzLnRpbWUg
IT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRpZmYgLyB0aGlzLmZy
YW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRpbWUgPSBub3c7XG5cdFx0XHR0aGlzLmZyYW1lICs9
IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSsrO1xuXHRcdH1cblxuXHRc
dGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpe1xuXHRcdFx0dmFyIGRlbHRhID0gdGhpcy50
cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7XG5cdFx0XHR0aGlzLnNldCh0aGlz
LmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUo
dGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0XHR9XG5cdH0s
XG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdHJldHVybiBub3c7XG5cdH0sXG5cblx0Y29t
cHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRyZXR1cm4gRnguY29tcHV0ZShm
cm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICgh
dGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMu
bGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtc
blx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50
cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxc
blxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhmcm9t
LCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZnJvbSA9IGZyb207XG5cdFx0dGhpcy50byA9
IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCkgPyAwIDogLTE7
XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmdldFRy
YW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVzID0gdGhpcy5vcHRpb25zLmZyYW1lcywgZnBzID0g
dGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZHVyYXRpb247XG5cdFx0
dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9uc1tkdXJhdGlvbl0gfHwgZHVyYXRpb24udG9JbnQo
KTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXHRcdHRoaXMuZnJhbWVz
ID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbiAvIHRoaXMuZnJhbWVJbnRlcnZh
bCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRc
dFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHRoaXMuZmly
ZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0cHVzaEluc3RhbmNlLmNhbGwodGhp
cywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdGlmICh0
aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBs
ZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxDaGFpbigpKSB0aGlz
LmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9
XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5zdWJqZWN0ID09PSB0aGlzID8gbnVsbCA6IHRoaXMu
c3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
dWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5c
dFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnY2Fu
Y2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7XG5cdFx0XHR0aGlzLnJlamVjdCh0aGlz
LnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwYXVzZTogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
dWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlc3VtZTogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlv
bnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbdGhpcy5vcHRpb25zLmZwc107XG5cdFx0cmV0
dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTtcblx0fSxcblxuXHRpc1BhdXNlZDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1lcykgJiYgIXRoaXMu
aXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5cbkZ4LmNvbXB1dGUgPSBmdW5jdGlvbihmcm9tLCB0
bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207XG59O1xuXG5G
eC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9
O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZhciBpbnN0YW5jZXMgPSB7fSwgdGltZXJzID0ge307
XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtcblx0dmFyIG5vdyA9IERhdGUubm93KCk7XG5cdGZv
ciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGluc3RhbmNlID0gdGhpc1tp
XTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTtcblx0fVxufTtcblxudmFy
IHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zw
c10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10pO1xuXHRsaXN0LnB1c2godGhpcyk7XG5cdGlmICgh
dGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0gbG9vcC5wZXJpb2RpY2FsKE1hdGgucm91bmQoMTAw
MCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFyIHB1bGxJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7
XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc107XG5cdGlmIChsaXN0KXtcblx0XHRsaXN0LmVy
YXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5sZW5ndGggJiYgdGltZXJzW2Zwc10pe1xuXHRcdFx0
ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRcdFx0dGltZXJzW2Zwc10gPSBjbGVhckludGVydmFs
KHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ1NTIGFuaW1hdGlvbiBsb2dp
Yy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4LkVsZW1lbnRzLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtGeCwgRWxlbWVudC5TdHlsZV1cblxucHJv
dmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5cbkZ4LkNTUyA9IG5ldyBDbGFzcyh7XG5cblx0RXh0
ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVjdFxuXG5cdHBy
ZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpe1xuXHRcdHZhbHVlcyA9
IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0XHR2YXIgZnJvbSA9IHZhbHVlc1swXSwgdG8gPSB2
YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51bGwpe1xuXHRcdFx0dG8gPSBmcm9tO1xuXHRcdFx0
ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0dmFyIHVuaXQgPSB0aGlz
Lm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29t
L3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4LmpzI0wyOTlcblx0XHRcdGlmICh1bml0ICYmIGZy
b20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmluZycgJiYgZnJvbS5zbGljZSgtdW5pdC5sZW5ndGgp
ICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9tKSAhPSAwKXtcblx0XHRcdFx0ZWxlbWVudC5zZXRT
dHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxlbWVudC5n
ZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gSUUgYW5kIE9wZXJhIHN1cHBv
cnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhcblx0XHRcdFx0aWYgKCEoL3B4JC8udGVzdCh2YWx1
ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbKCdwaXhlbC0nICsgcHJvcGVy
dHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRc
dFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJpay5lYWUubmV0L2Fy
Y2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxXG5cdFx0XHRcdFx0XHR2
YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUu
bGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZS5waXhl
bExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0O1xuXHRcdFx0XHRc
dH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9tID0gKHRvIHx8IDEpIC8gKHBhcnNlRmxvYXQodmFs
dWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJvbSkgfHwgMCk7XG5cdFx0XHRcdGVsZW1lbnQuc2V0
U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9O1xuXHR9LFxuXG5c
dC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheVxuXG5cdHBhcnNlOiBmdW5jdGlvbih2YWx1
ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5jb252ZXJ0KHZhbHVlKSgpO1xuXHRcdHZhbHVlID0g
KHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDogQXJyYXkuY29u
dmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2YWwpe1xuXHRcdFx0
dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdE9iamVj
dC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpe1xuXHRcdFx0XHRpZiAoZm91
bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBhcnNlZCA9IHBhcnNlci5wYXJzZSh2YWwpO1xuXHRc
dFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBhcnNlZCwg
cGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7XG5cdFx0XHRmb3VuZCA9IGZvdW5kIHx8IHt2YWx1
ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307XG5cdFx0XHRyZXR1cm4gZm91
bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9jb21wdXRlcyBieSBhIGZyb20gYW5kIHRvIHByZXBh
cmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBhcnNlcnMuXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24o
ZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgY29tcHV0ZWQgPSBbXTtcblx0XHQoTWF0aC5taW4o
ZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpe1xuXHRcdFx0Y29tcHV0
ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9b
aV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pO1xuXHRcdH0pO1xuXHRc
dGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdmeDpjc3M6dmFsdWUnKTtcblx0
XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5cblx0Ly9zZXJ2ZXMgdGhlIHZhbHVlIGFzIHNldHRh
YmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRpZiAodHlwZU9mKHZh
bHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcblx0XHR2
YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7XG5cdFx0XHRy
ZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5p
dCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXR1cm5lZDtcblx0fSxcblxuXHQvL3JlbmRlcnMg
dGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5cblx0cmVuZGVyOiBmdW5jdGlvbihlbGVtZW50LCBw
cm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRo
aXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0fSxcblxuXHQvL3NlYXJjaGVzIGluc2lkZSB0aGUg
cGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVzIGZvciBhIHNlbGVjdG9yXG5cblx0c2VhcmNoOiBm
dW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYgKEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0pIHJldHVy
biBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xuXHRcdHZhciB0byA9IHt9LCBzZWxlY3RvclRlc3Qg
PSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9yLmVzY2FwZVJlZ0V4cCgpICsgJyQnKTtcblxuXHRc
dHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRBcnJheS5lYWNoKHJ1
bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRcdFx0aWYgKHJ1bGUubWVkaWEpe1xuXHRcdFx0XHRc
dHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpO1xuXHRcdFx0XHRcdHJl
dHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGUpIHJldHVybjtcblx0XHRc
dFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxlLnNlbGVjdG9yVGV4dCkgPyBydWxlLnNlbGVjdG9y
VGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0aW9uKG0pe1xuXHRcdFx0XHRcdHJldHVybiBtLnRv
TG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDogbnVsbDtcblx0XHRcdFx0aWYgKCFzZWxlY3RvclRl
eHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNlbGVjdG9yVGV4dCkpIHJldHVybjtcblx0XHRcdFx0
T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBzdHlsZSl7XG5cdFx0
XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0U3R5bGVzW3N0eWxl
XSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTtc
blx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9ecmdiLykudGVzdCh2YWx1ZSkpID8gdmFsdWUucmdi
VG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRB
cnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVldCl7XG5cdFx0XHR2
YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0XHRpZiAoaHJlZiAmJiBocmVmLmluZGV4T2YoJzov
LycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgPT0gLTEpIHJldHVybjtc
blx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuXHRcdFx0
c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gRnguQ1NTLkNhY2hlW3Nl
bGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xuXG5GeC5DU1MuQ2FjaGUgPSB7fTtcblxuRnguQ1NT
LlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtcblx0XHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUu
aGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXFxk
KyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykpKSA/IFt2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVl
WzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRl
bHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7XG5cdFx0XHRc
dHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0sIGRlbHRhKSk7XG5c
dFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1
cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0fVxuXHR9LFxuXG5cdE51bWJlcjoge1xuXHRcdHBh
cnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1dGU6IEZ4LmNvbXB1dGUsXG5cdFx0c2VydmU6IGZ1
bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRcdHJldHVybiAodW5pdCkgPyB2YWx1ZSArIHVuaXQg
OiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0U3RyaW5nOiB7XG5cdFx0cGFyc2U6IEZ1bmN0aW9u
LmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKHplcm8sIG9uZSl7XG5cdFx0
XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0
cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5cbn07XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4
Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0byB0cmFu
c2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcg
YW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBG
eC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1vcnBoID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRz
OiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7XG5c
dFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5c
dFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xu
XHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJpbmcnKSBub3cgPSB0aGlzLnNlYXJjaChub3cpO1xu
XHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHAsIG5vd1tw
XSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbXB1
dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIG5vdyA9IHt9O1xuXHRcdGZv
ciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0gdGhpcy5wYXJlbnQoZnJvbVtwXSwgdG9bcF0sIGRl
bHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0
aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydGllcykpIHJldHVybiB0aGlzO1xuXHRc
dGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAnc3RyaW5nJykgcHJvcGVydGllcyA9IHRoaXMuc2Vh
cmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBmcm9tID0ge30sIHRvID0ge307XG5cdFx0Zm9yICh2
YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUodGhp
cy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3BdKTtcblx0XHRcdGZyb21bcF0gPSBwYXJzZWQuZnJv
bTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRvO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJl
bnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubW9ycGggPSB7
XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5jYW5j
ZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9ycGggPSB0aGlzLnJldHJpZXZlKCdtb3JwaCcpO1xu
XHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9ycGggPSBuZXcgRnguTW9ycGgodGhpcywge2xpbms6
ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTtcblx0XHR9XG5c
dFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRt
b3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLnN0YXJ0KHByb3Bz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5U
cmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2YgYWR2YW5jZWQgdHJh
bnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nlcy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWFzaW5nIEVxdWF0aW9ucyBi
eSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2luZy8+LCBt
b2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29scy5cblxucmVxdWly
ZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFuc2l0aW9uc1xuXG4uLi5cbiovXG5cbkZ4LmltcGxl
bWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHJhbnMgPSB0
aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJbk91dDtc
blx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdzdHJpbmcnKXtcblx0XHRcdHZhciBkYXRhID0gdHJh
bnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5zID0gRnguVHJhbnNpdGlvbnM7XG5cdFx0XHR0cmFu
cyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5zW2RhdGFbMF0uY2FwaXRhbGl6ZSgpXTtcblx0XHRc
dGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5zWydlYXNlJyArIGRhdGFbMV0uY2FwaXRhbGl6ZSgp
ICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0YWxpemUoKSA6ICcnKV07XG5cdFx0fVxuXHRcdHJl
dHVybiB0cmFucztcblx0fVxuXG59KTtcblxuRnguVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5z
aXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9IEFycmF5LmNvbnZlcnQocGFyYW1zKTtcblx0dmFy
IGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHRyYW5zaXRpb24ocG9zLCBwYXJh
bXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHtcblx0XHRlYXNlSW46
IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIDEgLSB0
cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7XG5cdFx0fSxcblx0XHRlYXNlSW5PdXQ6IGZ1bmN0
aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0aW9uKDIgKiBwb3Ms
IHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFyYW1zKSkpIC8gMjtc
blx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMgPSB7XG5cblx0bGluZWFyOiBmdW5j
dGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVybztcblx0fVxuXG59O1xuXG5cblxuRnguVHJhbnNp
dGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpe1xuXHRmb3IgKHZhciB0cmFuc2l0
aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5U
cmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTtcbn07XG5cbkZ4LlRyYW5zaXRpb25z
LmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3co
cCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxuXG5cdEV4cG86IGZ1bmN0aW9uKHApe1xuXHRcdHJl
dHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAxKSk7XG5cdH0sXG5cblx0Q2lyYzogZnVuY3Rpb24o
cCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xuXHR9LFxuXG5cdFNp
bmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MocCAqIE1hdGguUEkgLyAy
KTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlvbihwLCB4KXtcblx0XHR4ID0geCAmJiB4WzBdIHx8
IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEpICogcCAtIHgpO1xu
XHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24ocCl7XG5cdFx0dmFyIHZhbHVlO1xuXHRcdGZvciAo
dmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89IDIpe1xuXHRcdFx0aWYgKHAgPj0gKDcg
LSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZhbHVlID0gYiAqIGIgLSBNYXRoLnBvdygoMTEgLSA2
ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxuXHRFbGFzdGljOiBmdW5jdGlvbihwLCB4KXtcblx0
XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAtLXApICogTWF0aC5jb3MoMjAgKiBwICogTWF0aC5Q
SSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtcblx0fVxuXG59KTtcblxuWydRdWFkJywgJ0N1Ymlj
JywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBpKXtcblx0Rngu
VHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihwKXtc
blx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpO1xuXHR9KTtcbn0pO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZSwgZWZmZWN0
IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVudC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IFtG
eC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVtZW50LmhpZ2hsaWdodF1cblxuLi4uXG4qL1xuXG5G
eC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxp
emU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMu
c3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMp
O1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7XG5cdFx0aWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRub3cgPSBwcm9wZXJ0eTtcblx0XHRcdHByb3BlcnR5
ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7XG5cdFx0fVxuXHRcdHRo
aXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRpb25zLnVuaXQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1
cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTtcblx0XHR0
aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Muc2hpZnQoKTtcblx0
XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhpcy5wcm9wZXJ0eSwg
YXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBwYXJzZWQudG8pO1xu
XHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7XG5cblx0c2V0OiBmdW5j
dGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwoKS5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpO1xuXHRcdGlmICghdHdlZW4p
e1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5c
dFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR3ZWVu
O1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHR0d2VlbjogZnVuY3Rpb24o
cHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5zdGFydChwcm9wZXJ0
eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZhZGU6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdldCgndHdlZW4nKSwgbWV0aG9kLCBhcmdzID0gWydv
cGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyksIHRvZ2dsZTtcblx0XHRpZiAoYXJnc1sxXSA9PSBu
dWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5cdFx0c3dpdGNoIChhcmdzWzFdKXtcblx0XHRcdGNh
c2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNl
ICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2Ug
J3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywg
dGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpO1xuXHRcdFx0XHRtZXRob2QgPSAnc3RhcnQn
O1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/IDAgOiAxO1xuXHRcdFx0XHR0aGlzLnN0b3JlKCdm
YWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRcdHRvZ2dsZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFr
O1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0gJ3N0YXJ0Jztcblx0XHR9XG5cdFx0aWYgKCF0b2dn
bGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTtcblx0XHRmYWRlW21ldGhvZF0uYXBwbHko
ZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG5cdFx0
aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5Jywg
dG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtcblx0XHR9IGVsc2UgaWYgKHRvICE9IDAp
e1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxlbmd0aCl7XG5cdFx0XHRcdGZhZGUuY2hhaW4oZnVu
Y3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAn
dmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHRcdH0pO1xuXHRc
dFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxl
Jyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtc
blx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpKSByZXR1cm47XG5c
dFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblx0
XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVuZCl7XG5cdFx0aWYg
KCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJywg
dGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpKTtcblx0XHRcdGVuZCA9IChlbmQgPT0g
J3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBlbmQ7XG5cdFx0fVxuXHRcdHZhciB0d2VlbiA9IHRo
aXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVuLnN0YXJ0KCdiYWNrZ3JvdW5kLWNvbG9yJywgc3Rh
cnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFs
JykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWluKCk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0XG5cbmRl
c2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhU
VFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtP
YmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlLCBC
cm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVzdFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sXG5cdHByb2dyZXNzU3VwcG9ydCA9ICgnb25wcm9n
cmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVzdCk7XG5cbnZhciBSZXF1ZXN0ID0gdGhpcy5SZXF1
ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9u
cywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHsvKlxuXHRcdG9uUmVxdWVzdDogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRc
dG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Db21wbGV0ZTogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sXG5cdFx0b25TdWNjZXNzOiBm
dW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKXt9LFxuXHRcdG9uRmFpbHVyZTogZnVu
Y3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0aW9uOiBmdW5jdGlvbihoZWFkZXJOYW1lLCB2YWx1
ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSxcblx0XHR1c2VyOiAnJyxcblx0XHRw
YXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqL1xuXHRcdHVybDogJycs
XG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0J1gtUmVxdWVzdGVkLVdpdGgn
OiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0J0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRl
eHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH0sXG5cdFx0YXN5
bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxzZSxcblx0XHRtZXRob2Q6ICdwb3N0Jyxcblx0XHRs
aW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nlc3M6IG51bGwsXG5cdFx0ZW11bGF0aW9uOiB0cnVl
LFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5cdFx0ZW5jb2Rpbmc6ICd1dGYtOCcsXG5cdFx0ZXZh
bFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxSZXNwb25zZTogZmFsc2UsXG5cdFx0dGltZW91dDog
MCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMu
c2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVh
ZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpe1xuXHRcdHZhciB4aHIg
PSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAhdGhpcy5ydW5uaW5n
KSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0dXMgPSAw
O1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBzdGF0dXMgPSB4
aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0dXMgPSAoc3RhdHVzID09IDEyMjMpID8gMjA0IDog
c3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9u
bG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1l
b3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXG5cdFx0
dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5yZXNwb25zZVRleHQgfHwgJycsIHhtbDog
dGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNh
bGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRcdFx0dGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2Uu
dGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuZmFpbHVyZSgp
O1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc3RhdHVzID0gdGhp
cy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCk7XG5c
dH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAhIXRoaXMucnVubmlu
Zztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0czogZnVuY3Rpb24odGV4dCl7XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwgKC8oZWNtYXxqYXZhKXNjcmlwdC8pLnRlc3QodGhp
cy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpKSkgcmV0dXJuIEJyb3dzZXIuZXhlYyh0ZXh0KTtc
blx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKTtc
blx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0LCB4bWwpe1xuXHRcdHRoaXMub25TdWNj
ZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4dCksIHhtbCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0
ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9LFxuXG5cdG9uU3VjY2VzczogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVFdmVudCgnc3Vj
Y2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7XG5cdH0sXG5cblx0ZmFpbHVyZTogZnVuY3Rp
b24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdm
YWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdG9uRmFpbHVyZTogZnVuY3Rpb24o
KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQoJ2ZhaWx1cmUnLCB0
aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCl7XG5cdFx0dGhp
cy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHRw
cm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdwcm9ncmVzcycs
IFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHR0aW1lb3V0OiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0JywgdGhpcy54aHIpO1xuXHRcdHRoaXMucmVqZWN0KHty
ZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdHNldEhlYWRlcjog
ZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHRoaXMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSl7XG5c
dFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlz
Lnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHR9LFxu
XG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdHJ1
ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6
IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNo
YWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHNlbmQ6IGZ1bmN0aW9uKG9wdGlvbnMp
e1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7XG5cblx0XHR0aGlz
Lm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5vcHRpb25zLmlzU3VjY2VzcyB8fCB0aGlzLmlzU3Vj
Y2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0dmFyIHR5cGUgPSB0eXBlT2Yo
b3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnZWxlbWVudCcp
IG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307XG5cblx0XHR2YXIgb2xkID0gdGhpcy5vcHRpb25z
O1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQu
dXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTtcblx0XHR2YXIgZGF0YSA9IG9wdGlv
bnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlvbnMudXJsKSwgbWV0aG9kID0gb3B0aW9ucy5tZXRo
b2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3aXRjaCAodHlwZU9mKGRhdGEpKXtcblx0XHRcdGNh
c2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVyeVN0cmluZygpOyBi
cmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRhID0gT2JqZWN0LnRv
UXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mb3JtYXQp
e1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3JtYXQ9JyArIHRoaXMub3B0aW9ucy5mb3JtYXQ7XG5c
dFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0ICsgJyYnICsgZGF0YSA6IGZvcm1hdDtcblx0XHR9
XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAncG9zdCddLmNv
bnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9k
O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21ldGhvZDtc
blx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLnVy
bEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFy
IGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5lbmNvZGluZykgPyAnOyBjaGFyc2V0PScgKyB0aGlz
Lm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0XHRcdHRoaXMuaGVhZGVyc1snQ29udGVudC10eXBl
J10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyArIGVuY29kaW5nO1xuXHRc
dH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTtcblxu
XHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwubGFzdEluZGV4T2YoJy8nKTtcblx0XHRpZiAodHJp
bVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9mKCcjJykpID4gLTEp
IHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9uKTtcblxuXHRcdGlmICh0aGlzLm9wdGlv
bnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDog
Jz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xuXG5cdFx0aWYgKGRhdGEgJiYgKG1ldGhvZCA9PSAn
Z2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScpKXtcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2Yo
Jz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRhdGE7XG5cdFx0XHRkYXRhID0gbnVsbDtcblx0XHR9
XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCl7XG5c
dFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlzLmxvYWRzdGFydC5iaW5kKHRoaXMpO1xuXHRcdFx0
eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7XG5cdFx0fVxuXG5cdFx0
eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCwgdGhpcy5vcHRpb25zLmFzeW5jLCB0
aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtcblx0XHRpZiAoKHRoaXMu
b3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYmICd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikgeGhy
LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG5cblx0XHRPYmplY3QuZWFjaCh0aGlzLmhl
YWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0eGhyLnNl
dFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0
dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7XG5cdFx0XHRcdHRoaXMu
cmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24nLCB4aHI6IHhociwgZXhjZXB0aW9uOiBlfSk7XG5c
dFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkg
IT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUoe3JlYXNvbjogJ3NlbmQn
fSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7XG5cdFx0eGhyLnNlbmQo
ZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25TdGF0ZUNoYW5nZSgp
O1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aW1lb3V0KSB0aGlzLnRpbWVyID0gdGhpcy50
aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50aW1lb3V0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcp
IHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHZhciB4aHIgPSB0
aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRj
bGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9
XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1
cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0dGhp
cy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNl
bCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6IHhocn0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuWydnZXQnLCAn
cG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VUJywgJ1BPU1QnLCAn
UFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlvbihtZXRob2Qpe1xu
XHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIgb2JqZWN0ID0ge1xu
XHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9O1xuXHRcdGlmIChkYXRhICE9IG51bGwpIG9iamVj
dC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7XG5cdH07XG59KTtc
blxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zZW5k
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLmdl
dCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNlbmQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNlbmQgPSB0
aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0aWYgKCFzZW5kKXtcblx0XHRcdHNlbmQgPSBuZXcg
UmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCBtZXRob2Q6IHRo
aXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2FjdGlvbicpXG5cdFx0
XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTtcblx0XHR9XG5cdFx0cmV0dXJu
IHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNlbmQ6IGZ1bmN0
aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7XG5cdFx0c2VuZGVy
LnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJsIHx8IHNlbmRlci5vcHRpb25zLnVybH0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJl
cXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFz
cyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIVE1MIHJlc3Bv
bnNlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVu
dCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJlcXVlc3QuSFRNTFxuXG4uLi5cbiovXG5cblJlcXVl
c3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25z
OiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0XHRhcHBlbmQ6IGZhbHNlLFxuXHRcdGV2YWxTY3Jp
cHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFsc2UsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0QWNj
ZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fVxu
XHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBvcHRpb25zID0gdGhp
cy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRyZXNwb25zZS5odG1s
ID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2NyaXB0KXtcblx0XHRcdHJlc3BvbnNlLmph
dmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7XG5cblx0XHR2YXIgbWF0Y2ggPSByZXNwb25zZS5o
dG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9pKTtcblx0XHRpZiAo
bWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTtcblx0XHR2YXIgdGVtcCA9IG5ldyBFbGVt
ZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblxuXHRcdHJlc3BvbnNlLnRy
ZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0cmVzcG9uc2UuZWxlbWVudHMgPSB0ZW1wLmdldEVs
ZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7XG5cblx0XHRpZiAob3B0aW9ucy5maWx0ZXIp
IHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50cztcblx0XHRpZiAob3B0aW9ucy51cGRh
dGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRvY3VtZW50LmlkKG9wdGlvbnMudXBkYXRlKS5lbXB0
eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB1cGRhdGUuYWRvcHQocmVzcG9uc2UuZWxl
bWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5c
dFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7XG5cdFx0XHR2YXIgYXBwZW5kID0gZG9jdW1l
bnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25z
ZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVuZCk7XG5cdFx0XHRlbHNlIGFwcGVuZC5h
ZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5ldmFsU2Ny
aXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXG5cdFx0dGhpcy5vblN1
Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0bWwsIHJl
c3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dHJlZTogcmVzcG9uc2UudHJl
ZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1lbnRzLCBodG1sOiByZXNwb25zZS5odG1sLCBqYXZh
c2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0fSk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJv
cGVydGllcy5sb2FkID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIGxv
YWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpO1xuXHRcdGxvYWQuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCdsb2FkJyk7XG5cdFx0aWYgKCFsb2FkKXtcblx0XHRc
dGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtkYXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgdXBk
YXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdsb2FkJywgbG9h
ZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2FkO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZ2V0KCdsb2FkJykuc2VuZChB
cnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDogVHlwZS5pc1N0
cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1l
OiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5TZWVBbHNvOiA8aHR0cDovL3d3dy5qc29uLm9yZy8+
XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl1cblxucHJvdmlk
ZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRo
aXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBzcGVjaWFsID0geydcXGIn
OiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0JywgJ1xcbic6ICdcXFxcbicsICdcXGYnOiAnXFxcXGYn
LCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdcXFxcXCInLCAnXFxcXCc6ICdcXFxcXFxcXCd9O1xu
XG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXtcblx0cmV0dXJuIHNwZWNpYWxbY2hyXSB8fCAn
XFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2Uo
LTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHN0cmluZyA9
IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0p
L2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXCJbXlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxm
YWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/L2csICddJyku
XG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csICcnKTtcblxuXHRy
ZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50ZXN0KHN0cmluZyk7XG59O1xuXG5KU09OLmVuY29k
ZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rpb24ob2JqKXtcblx0cmV0dXJuIEpTT04uc3RyaW5n
aWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2JqKXtcblx0aWYgKG9iaiAmJiBvYmoudG9KU09OKSBv
YmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dpdGNoICh0eXBlT2Yob2JqKSl7XG5cdFx0Y2FzZSAn
c3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCInICsgb2JqLnJlcGxhY2UoL1tcXHgwMC1cXHgxZlxc
XFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5cdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0cmV0dXJu
ICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7XG5cdFx0Y2FzZSAnb2Jq
ZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2YXIgc3RyaW5nID0gW107XG5cdFx0XHRPYmplY3Qu
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0XHR2YXIganNvbiA9IEpTT04u
ZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYgKGpzb24pIHN0cmluZy5wdXNoKEpTT04uZW5jb2Rl
KGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICd7JyArIHN0cmlu
ZyArICd9Jztcblx0XHRjYXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzogcmV0dXJuICcnICsg
b2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1cm4gJ251bGwnO1xuXHR9XG5cblx0cmV0dXJuIG51
bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRydWU7XG5cblxuSlNPTi5kZWNvZGUgPSBmdW5jdGlv
bihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJpbmcpICE9ICdz
dHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRpZiAoc2VjdXJlID09IG51bGwpIHNlY3VyZSA9IEpT
T04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtcblx0XHRpZiAoSlNPTi5wYXJzZSkgcmV0dXJuIEpT
T04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAoIUpTT04udmFsaWRhdGUoc3RyaW5nKSkgdGhyb3cg
bmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0eSBpcyBl
bmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4nKTtcblx0fVxuXG5cdHJldHVybiBl
dmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6
IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBD
bGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIEpT
T04gZGF0YS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbUmVx
dWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJlcXVlc3QuSlNPTlxuXG4uLi5cbiovXG5cblJlcXVl
c3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25z
OiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqL1xuXHRcdHNlY3Vy
ZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRo
aXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9iamVjdC5hcHBlbmQodGhpcy5oZWFkZXJzLCB7XG5c
dFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0J1gtUmVxdWVzdCc6ICdK
U09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZh
ciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRqc29uID0gdGhpcy5yZXNwb25zZS5qc29uID0gSlNP
Ti5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25zLnNlY3VyZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3Ip
e1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7XG5cdFx0XHRy
ZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29uID09IG51bGwpe1xuXHRcdFx0dGhpcy5mYWlsdXJl
KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub25TdWNjZXNzKGpzb24sIHRleHQpO1xuXHRc
dFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7XG5cdFx0fVxuXHR9XG5c
bn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENvb2tpZVxuXG5kZXNjcmlwdGlvbjogQ2xhc3MgZm9y
IGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29raWVzLlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBCYXNlZCBvbiB0aGUgZnVu
Y3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3JnKS5cblxucmVx
dWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxuXG5wcm92aWRlczogQ29va2llXG5cbi4uLlxuKi9c
blxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogT3B0aW9ucyxcblxu
XHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8nLFxuXHRcdGRvbWFpbjogZmFsc2UsXG5cdFx0ZHVy
YXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTogZmFsc2UsXG5cdFx0ZG9jdW1lbnQ6IGRvY3VtZW50
LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRodHRwT25seTogZmFsc2Vcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRcdHRoaXMua2V5ID0ga2V5O1xuXHRc
dHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHR3cml0ZTogZnVuY3Rpb24odmFs
dWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW5jb2RlKSB2YWx1ZSA9IGVuY29kZVVSSUNvbXBv
bmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kb21haW4pIHZhbHVlICs9ICc7IGRv
bWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFpbjtcblx0XHRpZiAodGhpcy5vcHRpb25zLnBhdGgp
IHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoO1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0ZGF0
ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogMjQgKiA2
MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1ZSArPSAnOyBleHBpcmVzPScgKyBkYXRlLnRvR01U
U3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAn
OyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaHR0cE9ubHkpIHZhbHVlICs9ICc7IEh0
dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0gdGhpcy5rZXkgKyAn
PScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFkOiBmdW5jdGlvbigp
e1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUubWF0Y2goJyg/
Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtdKiknKTtcblx0
XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVsxXSkgOiBudWxsO1xu
XHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0bmV3IENvb2tpZSh0aGlzLmtleSwg
T2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9KSkud3JpdGUoJycp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5Db29raWUud3JpdGUgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25z
KS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29raWUucmVhZCA9IGZ1bmN0aW9uKGtleSl7XG5cdHJl
dHVybiBuZXcgQ29va2llKGtleSkucmVhZCgpO1xufTtcblxuQ29va2llLmRpc3Bvc2UgPSBmdW5j
dGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLmRp
c3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxubmFtZTogRE9NUmVhZHlcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRd
XG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XVxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bih3aW5kb3csIGRvY3VtZW50KXtcblxudmFyIHJlYWR5LFxuXHRsb2FkZWQsXG5cdGNoZWNrcyA9
IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1lcixcblx0dGVzdEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIGRvbXJlYWR5ID0gZnVuY3Rpb24oKXtcblx0Y2xl
YXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFyZWFkeSl7XG5cdFx0QnJvd3Nlci5sb2FkZWQgPSBy
ZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2Fk
ZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHRcdHdpbmRvdy5maXJlRXZl
bnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8gY2xlYW51cCBzY29wZSB2YXJzXG5cdGRvY3VtZW50
ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsO1xufTtcblxudmFyIGNoZWNrID0gZnVuY3Rp
b24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlmIChjaGVja3NbaV0o
KSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7
XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEwKTtcbn07XG5cbmRv
Y3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpO1xuXG4vKjxs
dElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmluaSBodHRwOi8vamF2
YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkL1xuLy8gdGVzdEVsZW1lbnQuZG9TY3Jv
bGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBpbiB0aGUgdG9wIHdp
bmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlvbigpe1xuXHR0cnkge1xuXHRcdHRlc3RF
bGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpe31cblx0
cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRvU2Nyb2xsIHdvcmtzIGFscmVhZHksIGl0IGNhbid0
IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJlYWR5XG4vLyAgIGUuZy4gaW4gYW4gaWZyYW1lXG5p
ZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYgIWRvU2Nyb2xsV29ya3MoKSl7XG5cdGNoZWNrcy5w
dXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91bGRQb2xsID0gdHJ1ZTtcbn1cbi8qPC9sdElFOD4q
L1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24oKXtcblx0
dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcblx0cmV0dXJuIChzdGF0ZSA9PSAnbG9h
ZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUnKTtcbn0pO1xuXG5pZiAoJ29ucmVhZHlzdGF0ZWNo
YW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50LmFkZExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdl
JywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xsID0gdHJ1ZTtcblxuaWYgKHNob3VsZFBvbGwpIHBv
bGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9tcmVhZHkgPSB7XG5cdG9uQWRkOiBmdW5jdGlvbihm
bil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxsKHRoaXMpO1xuXHR9XG59O1xuXG4vLyBNYWtlIHN1
cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZFxuRWxlbWVudC5FdmVudHMubG9hZCA9
IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChsb2Fk
ZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNhbGwodGhpcyk7XG5cdH0sXG5cdGNvbmRpdGlvbjog
ZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9PSB3aW5kb3cpe1xuXHRcdFx0ZG9tcmVhZHkoKTtc
blx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2FkO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY3VzdG9tIGxvYWQgZXZlbnRc
bndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9uKCl7XG5cdGxvYWRlZCA9IHRydWU7XG59
KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7XG4iCiAKIC8qKiovIH0pLAogLyogNDA2ICovCkBA
IC0xMTM2NDEsMTMgKzExMzY0MSwxMyBAQCBtb2R1bGUuZXhwb3J0cyA9ICIvKmpzaGludCBxdW90
bWFyazogZmFsCiAvKiA0MTQgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsK
IAotbW9kdWxlLmV4cG9ydHMgPSAiLy8gbGlicy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9WSURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElN
UExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNo
ZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqICovXG5cbi8vIFR5cGluZyBmb3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9u
IDEuMTAueCAvIDIuMC54XG4vLyBQcm9qZWN0OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmlu
aXRpb25zIGJ5OiBCb3JpcyBZYW5rb3YgPGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+
LCBDaHJpc3RpYW4gSG9mZm1laXN0ZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+
LCBTdGV2ZSBGZW50b24sIERpdWxsZWkgR29tZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVp
PiwgVGFzcyBJbGlvcG91bG9zIDxodHRwczovL2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3
ZWFyaW5nZW4sIFNlYW4gSGlsbCA8aHR0cHM6Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdv
b3NzZW5zIDxodHRwczovL2dpdGh1Yi5jb20vR3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6
Ly9naXRodWIuY29tL2tzdW1tZXJsaW4+LCBCYXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1
Yi5jb20vYmFzYXJhdD4sIE5pY2hvbGFzIFdvbHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253
b2x2ZXJzb24+LCBEZXJlayBDaWNlcm9uZSA8aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJv
bmU+LCBBbmRyZXcgR2FzcGFyIDxodHRwczovL2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFt
ZXMgSGFycmlzb24gRmlzaGVyIDxodHRwczovL2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vp
a2ljaGkgS29uZG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2tt
YW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxo
dHRwczovL2dpdGh1Yi5jb20vczA5MzI5ND4sIEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5j
b20vSm9zaFN0cm9ibD4sIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVp
bGx5Lz5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVm
aW5pdGVseVR5cGVkXG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRo
YXQgd2lsbCBjb25maWd1cmUgdGhlIEFKQVggcmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlB
amF4U2V0dGluZ3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0
aGUgcmVxdWVzdCBoZWFkZXIgdGhhdCB0ZWxscyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNw
b25zZSBpdCB3aWxsIGFjY2VwdCBpbiByZXR1cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVl
ZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAk
LmFqYXhTZXR1cCgpIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8q
KlxuICAgICAqIEJ5IGRlZmF1bHQsIGFsbCByZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNs
eSAoaS5lLiB0aGlzIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5j
aHJvbm91cyByZXF1ZXN0cywgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4g
cmVxdWVzdHMgYW5kIGRhdGFUeXBlOiBcImpzb25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQg
c3luY2hyb25vdXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5
IHRlbXBvcmFyaWx5IGxvY2sgdGhlIGJyb3dzZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGls
ZSB0aGUgcmVxdWVzdCBpcyBhY3RpdmUuIEFzIG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5
bmM6IGZhbHNlIHdpdGgganFYSFIgKCQuRGVmZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0
IHVzZSB0aGUgc3VjY2Vzcy9lcnJvci9jb21wbGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQg
b2YgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMg
anFYSFIuZG9uZSgpIG9yIHRoZSBkZXByZWNhdGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9c
biAgICBhc3luYz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpR
dWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNl
IHRoaXMgdG8gc2V0IGN1c3RvbSBoZWFkZXJzLCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mg
b2JqZWN0cyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBS
ZXR1cm5pbmcgZmFsc2UgaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhl
IHJlcXVlc3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJl
IGNhbGxlZCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAg
YmVmb3JlU2VuZD8gKGpxWEhSOiBKUXVlcnlYSFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGlu
Z3MpOiBhbnk7XG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNl
IHJlcXVlc3RlZCBwYWdlcyBub3QgdG8gYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBT
ZXR0aW5nIGNhY2hlIHRvIGZhbHNlIHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQg
YW5kIEdFVCByZXF1ZXN0cy4gSXQgd29ya3MgYnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwi
IHRvIHRoZSBHRVQgcGFyYW1ldGVycy4gVGhlIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBv
dGhlciB0eXBlcyBvZiByZXF1ZXN0cywgZXhjZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRl
IHRvIGEgVVJMIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAg
ICovXG4gICAgY2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVy
cm9yIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQpLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdv
IGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBv
YmplY3QgYW5kIGEgc3RyaW5nIGNhdGVnb3JpemluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0
IChcInN1Y2Nlc3NcIiwgXCJub3Rtb2RpZmllZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBc
ImFib3J0XCIsIG9yIFwicGFyc2VyZXJyb3JcIikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21w
bGV0ZSBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0
aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAg
Ki9cbiAgICBjb21wbGV0ZT8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6
IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVz
c2lvbiBwYWlycyB0aGF0IGRldGVybWluZSBob3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3Bv
bnNlLCBnaXZlbiBpdHMgY29udGVudCB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAq
L1xuICAgIGNvbnRlbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRp
bmcgdG8galF1ZXJ5LmFqYXggc291cmNlIGNvZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxs
b3dzIGNvbnRlbnRUeXBlIHRvIHNldCB0byBcImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1
Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAg
ICAgKiBXaGVuIHNlbmRpbmcgZGF0YSB0byB0aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5
cGUuIERlZmF1bHQgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJz
ZXQ9VVRGLThcIiwgd2hpY2ggaXMgZmluZSBmb3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0
bHkgcGFzcyBpbiBhIGNvbnRlbnQtdHlwZSB0byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMg
c2VudCB0byB0aGUgc2VydmVyIChldmVuIGlmIG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1M
SHR0cFJlcXVlc3Qgc3BlY2lmaWNhdGlvbiBkaWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFs
d2F5cyBVVEYtODsgc3BlY2lmeWluZyBhbm90aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhl
IGJyb3dzZXIgdG8gY2hhbmdlIHRoZSBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlw
ZT86IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNv
bnRleHQgb2YgYWxsIEFqYXgtcmVsYXRlZCBjYWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250
ZXh0IGlzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBp
biB0aGUgY2FsbCAoJC5hamF4U2V0dGluZ3MgbWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3Nl
ZCB0byAkLmFqYXgpLlxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAg
ICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4g
RWFjaCBjb252ZXJ0ZXIncyB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJh
bnNmb3JtZWQgdmFsdWUgb2YgdGhlIHJlc3BvbnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAg
ICAqL1xuICAgIGNvbnZlcnRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipc
biAgICAgKiBJZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2gg
YXMgSlNPTlApIG9uIHRoZSBzYW1lIGRvbWFpbiwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFp
biB0byB0cnVlLiBUaGlzIGFsbG93cywgZm9yIGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0
aW9uIHRvIGFub3RoZXIgZG9tYWluLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAg
IGNyb3NzRG9tYWluPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQg
dG8gdGhlIHNlcnZlci4gSXQgaXMgY29udmVydGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3Qg
YWxyZWFkeSBhIHN0cmluZy4gSXQncyBhcHBlbmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVz
dHMuIFNlZSBwcm9jZXNzRGF0YSBvcHRpb24gdG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9j
ZXNzaW5nLiBPYmplY3QgbXVzdCBiZSBLZXkvVmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFy
cmF5LCBqUXVlcnkgc2VyaWFsaXplcyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNl
ZCBvbiB0aGUgdmFsdWUgb2YgdGhlIHRyYWRpdGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxv
dykuXG4gICAgICovXG4gICAgZGF0YT86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9u
IHRvIGJlIHVzZWQgdG8gaGFuZGxlIHRoZSByYXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVx
dWVzdC5UaGlzIGlzIGEgcHJlLWZpbHRlcmluZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVz
cG9uc2UuIFlvdSBzaG91bGQgcmV0dXJuIHRoZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9u
IGFjY2VwdHMgdHdvIGFyZ3VtZW50czogVGhlIHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNl
cnZlciBhbmQgdGhlICdkYXRhVHlwZScgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0
ZXI/IChkYXRhOiBhbnksIHR5OiBhbnkpOiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUg
b2YgZGF0YSB0aGF0IHlvdSdyZSBleHBlY3RpbmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5v
bmUgaXMgc3BlY2lmaWVkLCBqUXVlcnkgd2lsbCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhl
IE1JTUUgdHlwZSBvZiB0aGUgcmVzcG9uc2UgKGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBY
TUwsIGluIDEuNCBKU09OIHdpbGwgeWllbGQgYSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNj
cmlwdCB3aWxsIGV4ZWN1dGUgdGhlIHNjcmlwdCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSBy
ZXR1cm5lZCBhcyBhIHN0cmluZykuXG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4g
ICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFp
bHMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4g
alF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgb2NjdXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlv
biBvYmplY3QsIGlmIG9uZSBvY2N1cnJlZC4gUG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25k
IGFyZ3VtZW50IChiZXNpZGVzIG51bGwpIGFyZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFi
b3J0XCIsIGFuZCBcInBhcnNlcmVycm9yXCIuIFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVy
cm9yVGhyb3duIHJlY2VpdmVzIHRoZSB0ZXh0dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVz
LCBzdWNoIGFzIFwiTm90IEZvdW5kXCIgb3IgXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMg
b2YgalF1ZXJ5IDEuNSwgdGhlIGVycm9yIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBm
dW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhp
cyBoYW5kbGVyIGlzIG5vdCBjYWxsZWQgZm9yIGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3Nz
LWRvbWFpbiBKU09OUCByZXF1ZXN0cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xu
ICAgIGVycm9yPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRo
cm93OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGds
b2JhbCBBamF4IGV2ZW50IGhhbmRsZXJzIGZvciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlz
IHRydWUuIFNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBh
amF4U3RhcnQgb3IgYWpheFN0b3AgZnJvbSBiZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVz
ZWQgdG8gY29udHJvbCB2YXJpb3VzIEFqYXggRXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVy
IGtleS92YWx1ZSBwYWlycyB0byBzZW5kIGFsb25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhN
TEh0dHBSZXF1ZXN0IHRyYW5zcG9ydC4gVGhlIGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxI
dHRwUmVxdWVzdCBpcyBhbHdheXMgYWRkZWQsIGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVz
dCB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBoZXJlLiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGlu
ZyBjYW4gYWxzbyBiZSBvdmVyd3JpdHRlbiBmcm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5j
dGlvbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8g
YmUgc3VjY2Vzc2Z1bCBvbmx5IGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUg
bGFzdCByZXF1ZXN0LiBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQg
aGVhZGVyLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBq
UXVlcnkgMS40IHRoaXMgdGVjaG5pcXVlIGFsc28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVk
IGJ5IHRoZSBzZXJ2ZXIgdG8gY2F0Y2ggdW5tb2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlm
TW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVu
dmlyb25tZW50IHRvIGJlIHJlY29nbml6ZWQgYXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5
c3RlbSksIGV2ZW4gaWYgalF1ZXJ5IGRvZXMgbm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRl
ZmF1bHQuIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBh
cyBsb2NhbDogZmlsZSwgKi1leHRlbnNpb24sIGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNl
dHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNl
IGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAg
ICAqL1xuICAgIGlzTG9jYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGluIGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3
aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAnY2FsbGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFy
dCBvZiB0aGUgcXVlcnkgc3RyaW5nIGluIHRoZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQn
fSB3b3VsZCByZXN1bHQgaW4gJ29uSlNPTlBMb2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBB
cyBvZiBqUXVlcnkgMS41LCBzZXR0aW5nIHRoZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVu
dHMgalF1ZXJ5IGZyb20gYWRkaW5nIHRoZSBcIj9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJM
IG9yIGF0dGVtcHRpbmcgdG8gdXNlIFwiPT9cIiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMg
Y2FzZSwgeW91IHNob3VsZCBhbHNvIGV4cGxpY2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNl
dHRpbmcuIEZvciBleGFtcGxlLCB7IGpzb25wOiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxs
YmFja05hbWVcIiB9XG4gICAgICovXG4gICAganNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogU3BlY2lmeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0
LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBieSBqUXVlcnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpR
dWVyeSBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1h
bmFnZSB0aGUgcmVxdWVzdHMgYW5kIHByb3ZpZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGlu
Zy4gWW91IG1heSB3YW50IHRvIHNwZWNpZnkgdGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8g
ZW5hYmxlIGJldHRlciBicm93c2VyIGNhY2hpbmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVl
cnkgMS41LCB5b3UgY2FuIGFsc28gdXNlIGEgZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4g
d2hpY2ggY2FzZSB0aGUgdmFsdWUgb2YganNvbnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBh
bnk7XG4gICAgLyoqXG4gICAgICogQSBtaW1lIHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1l
IHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBBIHBhc3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRw
UmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0LlxuICAgICAqL1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5
IGRlZmF1bHQsIGRhdGEgcGFzc2VkIGluIHRvIHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3Qg
KHRlY2huaWNhbGx5LCBhbnl0aGluZyBvdGhlciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nl
c3NlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBhIHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUg
ZGVmYXVsdCBjb250ZW50LXR5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRc
Ii4gSWYgeW91IHdhbnQgdG8gc2VuZCBhIERPTURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vz
c2VkIGRhdGEsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNz
RGF0YT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwi
c2NyaXB0XCIgdHJhbnNwb3J0IGlzIHVzZWQgKGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3
aXRoIFwianNvbnBcIiBvciBcInNjcmlwdFwiIGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBT
ZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSBvbiB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSBy
ZXF1ZXN0LiBVc2VkIHdoZW4gdGhlIGNoYXJhY3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMg
bm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgb24gdGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4g
ICAgc2NyaXB0Q2hhcnNldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Yg
bnVtZXJpYyBIVFRQIGNvZGVzIGFuZCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJl
c3BvbnNlIGhhcyB0aGUgY29ycmVzcG9uZGluZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nl
c3NmdWwsIHRoZSBzdGF0dXMgY29kZSBmdW5jdGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJz
IGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrOyBpZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNs
dWRpbmcgM3h4IHJlZGlyZWN0KSwgdGhleSB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhl
IGVycm9yIGNhbGxiYWNrLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1
c0NvZGU/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdl
dHMgcGFzc2VkIHRocmVlIGFyZ3VtZW50czogVGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2Vy
dmVyLCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIHN0YXR1czsgYW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54
LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBz
ZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdp
bGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAg
ICBzdWNjZXNzPyAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpOiBhbnk7XG4gICAgLyoqXG4gICAgICogU2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRz
KSBmb3IgdGhlIHJlcXVlc3QuIFRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQg
c2V0IHdpdGggJC5hamF4U2V0dXAoKS4gVGhlIHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUg
cG9pbnQgdGhlICQuYWpheCBjYWxsIGlzIG1hZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMg
YXJlIGluIHByb2dyZXNzIGFuZCB0aGUgYnJvd3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxh
YmxlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSByZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBj
YW4gYmUgc2VudC4gSW4galF1ZXJ5IDEuNC54IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0
IG9iamVjdCB3aWxsIGJlIGluIGFuIGludmFsaWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMg
b3V0OyBhY2Nlc3NpbmcgYW55IG9iamVjdCBtZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24u
IEluIEZpcmVmb3ggMy4wKyBvbmx5LCBzY3JpcHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBi
ZSBjYW5jZWxsZWQgYnkgYSB0aW1lb3V0OyB0aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQg
YXJyaXZlcyBhZnRlciB0aGUgdGltZW91dCBwZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86
IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRv
IHVzZSB0aGUgdHJhZGl0aW9uYWwgc3R5bGUgb2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAg
Ki9cbiAgICB0cmFkaXRpb25hbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUg
b2YgcmVxdWVzdCB0byBtYWtlIChcIlBPU1RcIiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdF
VFwiLiBOb3RlOiBPdGhlciBIVFRQIHJlcXVlc3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERF
TEVURSwgY2FuIGFsc28gYmUgdXNlZCBoZXJlLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBi
eSBhbGwgYnJvd3NlcnMuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAg
ICAgKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKi9cbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2Vy
bmFtZSB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRU
UCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86
IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0
dHBSZXF1ZXN0IG9iamVjdC4gRGVmYXVsdHMgdG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFp
bGFibGUgKElFKSwgdGhlIFhNTEh0dHBSZXF1ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJv
dmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5j
ZW1lbnRzIHRvIHRoZSBmYWN0b3J5LlxuICAgICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipc
biAgICAgKiBBbiBvYmplY3Qgb2YgZmllbGROYW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9u
IHRoZSBuYXRpdmUgWEhSIG9iamVjdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNl
dCB3aXRoQ3JlZGVudGlhbHMgdG8gdHJ1ZSBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5l
ZWRlZC4gSW4galF1ZXJ5IDEuNSwgdGhlIHdpdGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90
IHByb3BhZ2F0ZWQgdG8gdGhlIG5hdGl2ZSBYSFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1
aXJpbmcgaXQgd291bGQgaWdub3JlIHRoaXMgZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNv
bW1lbmQgdXNpbmcgalF1ZXJ5IDEuNS4xKyBzaG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBp
dC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhS
IG9iamVjdFxuKi9cbmludGVyZmFjZSBKUXVlcnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwg
SlF1ZXJ5UHJvbWlzZTxhbnk+IHtcbiAgICBvdmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJp
bmcpOiBhbnk7XG4gICAgYWJvcnQoc3RhdHVzVGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpR
dWVyeUNhbGxiYWNrIHtcbiAgICBhZGQoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBk
aXNhYmxlKCk6IGFueTtcbiAgICBlbXB0eSgpOiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6
IGFueVtdKTogYW55O1xuICAgIGZpcmVkKCk6IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4
dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJv
b2xlYW47XG4gICAgbG9jaygpOiBhbnk7XG4gICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVt
b3ZlKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVy
eSBQcm9taXNlcyB0byBpbnRlcm9wIHdpdGggbm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVy
ZmFjZSBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2
YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9
PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4p
OiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVl
OiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkp
ID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59
XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2Fs
bGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMg
dmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBK
UXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeVByb21pc2U8VD47XG5cbiAgICAvLyBEZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xu
ICAgIHBpcGUoZG9uZUZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBh
bnkpID0+IGFueSwgcHJvZ3Jlc3NGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9t
aXNlPGFueT47XG5cbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJl
amVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVz
ZSBKUXVlcnkgUHJvbWlzZXMgU3Vja1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVz
OiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJv
Z3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+
O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblBy
b2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxV
PjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVq
ZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Q
cm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8
VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkg
PT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBKUXVlcnkgZGVmZXJyZWQsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eURlZmVycmVkPFQ+IGV4dGVuZHMgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2
ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlb
XSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1
ZXJ5RGVmZXJyZWQ8VD47XG4gICAgbm90aWZ5V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFu
eVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBK
UXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZWplY3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczog
YW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIHJlc29sdmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVl
cnlEZWZlcnJlZDxUPjtcbiAgICBzdGF0ZSgpOiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdl
dD86IGFueSk6IEpRdWVyeVByb21pc2U8VD47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRo
ZSBKUXVlcnkgZXh0ZW5zaW9uIG9mIHRoZSBXM0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZh
Y2UgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtc
biAgICBkZWxlZ2F0ZVRhcmdldDogRWxlbWVudDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTog
Ym9vbGVhbjtcbiAgICBpc0ltbWVkaWF0ZVByb3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xu
ICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJp
bmc7XG4gICAgcHJldmVudERlZmF1bHQoKTogYW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1l
bnQ7XG4gICAgcmVzdWx0OiBhbnk7XG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZv
aWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAg
ICBwYWdlWTogbnVtYmVyO1xuICAgIHdoaWNoOiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVh
bjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUlucHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1
ZXJ5RXZlbnRPYmplY3Qge1xuICAgIGFsdEtleTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29s
ZWFuO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5c
bmludGVyZmFjZSBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVu
dE9iamVjdCB7XG4gICAgYnV0dG9uOiBudW1iZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAg
IGNsaWVudFk6IG51bWJlcjtcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVt
YmVyO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5Y
OiBudW1iZXI7XG4gICAgc2NyZWVuWTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5
RXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBh
bnk7XG4gICAgY2hhckNvZGU6IG51bWJlcjtcbiAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBu
dW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMg
QmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50
O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZl
bnRPYmplY3QsIEpRdWVyeUlucHV0RXZlbnRPYmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qs
IEpRdWVyeUtleUV2ZW50T2JqZWN0LCBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxu
LypcbiAgICBDb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3Nlclxu
Ki9cblxuaW50ZXJmYWNlIEpRdWVyeVN1cHBvcnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAg
IGJveE1vZGVsPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBj
aGVja0Nsb25lPzogYm9vbGVhbjtcbiAgICBjaGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzog
Ym9vbGVhbjtcbiAgICBjc3NGbG9hdD86IGJvb2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBi
b29sZWFuO1xuICAgIGh0bWxTZXJpYWxpemU/OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNw
YWNlPzogYm9vbGVhbjtcbiAgICBub0Nsb25lQ2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9u
ZUV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGFjaXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxl
ZD86IGJvb2xlYW47XG4gICAgb3B0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/
ICgpOiBib29sZWFuO1xuICAgIHN0eWxlPzogYm9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzog
Ym9vbGVhbjtcbiAgICB0Ym9keT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJh
bSB7XG4gICAgKG9iajogYW55KTogc3RyaW5nO1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6
IGJvb2xlYW4pOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNv
bnN0cnVjdCBqUXVlcnkgZXZlbnRzICh3aXRoICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBz
ZXBhcmF0ZWx5IGluc3RlYWQgb2YgaW5saW5lIGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICog
b3ZlcnJpZGluZyB0aGUgY29uc3RydWN0aW9uIGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5n
c1xuICogcmV0dXJuaW5nIHNwZWNpZmljIGV2ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBK
UXVlcnlFdmVudENvbnN0cnVjdG9yIHtcbiAgICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRp
ZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZl
bnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhl
IGludGVyZmFjZSB1c2VkIHRvIHNwZWNpZnkgZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJm
YWNlIEpRdWVyeUVhc2luZyB7XG4gICAgbGluZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBz
d2luZyhwOiBudW1iZXIpOiBudW1iZXI7XG59XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2Yg
alF1ZXJ5ICh0aG9zZSBvbiAkIGFuZCBqUXVlcnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5U3RhdGljIHtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3Vz
IEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBz
ZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFs
bCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0
aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVl
cnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBh
c3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0
IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBB
IGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4g
ICAgICovXG4gICAgYWpheCh1cmw6IHN0cmluZywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGlu
Z3MpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0
aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNl
bnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZGF0YVR5cGVzIEFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBkYXRhVHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5c
biAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAo
b3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXgg
b3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlz
IHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZv
ciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRs
ZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjog
SlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4
U2V0dGluZ3M7XG5cbiAgICAgLyoqXG4gICAgICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0
dXJlIEFqYXggcmVxdWVzdHMuIEl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxu
ICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25m
aWd1cmUgdGhlIGRlZmF1bHQgQWpheCByZXF1ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwu
XG4gICAgICAqL1xuICAgIGFqYXhTZXR1cChvcHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2
b2lkO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0
YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4
bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRo
ZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxp
Z2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdl
dCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0
byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBj
YWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRz
LlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20g
dGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0
LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcs
IHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChk
YXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTog
SlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0
aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlz
IHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQg
aXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1
Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmpl
Y3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5j
b2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3Ry
aW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3Ry
aW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBhIEphdmFTY3JpcHQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LCB0aGVuIGV4ZWN1dGUgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBz
dHJpbmcsIHN1Y2Nlc3M/OiAoc2NyaXB0OiBzdHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFY
SFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBh
cmFtO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBj
b250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBA
cGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQg
Y2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlw
ZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQg
R3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0
KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBq
cVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xu
ICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBP
U1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRh
dGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdp
dGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlv
biB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBk
YXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAg
KiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2
ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwg
aHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBM
b2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlk
ZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBl
IFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRl
bGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xu
ICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/
OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2Ug
Y2FsbGJhY2tzIGxpc3Qgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFu
YWdlIGNhbGxiYWNrIGxpc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlv
bmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2Fs
bGJhY2sgbGlzdCBiZWhhdmVzLlxuICAgICAqL1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmlu
Zyk6IEpRdWVyeUNhbGxiYWNrO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMg
dGhlIGV4ZWN1dGlvbiBvZiBqUXVlcnkncyByZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBob2xkIEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVl
c3RlZCBvciByZWxlYXNlZFxuICAgICAqL1xuICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTog
dm9pZDtcblxuICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xu
ICAgIChlbGVtZW50OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5
O1xuICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBK
UXVlcnkpOiBKUXVlcnk7XG4gICAgKGZ1bmM6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJh
eTogYW55W10pOiBKUXVlcnk7XG4gICAgKCk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJl
bGlucXVpc2ggalF1ZXJ5J3MgY29udHJvbCBvZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSByZW1vdmVBbGwgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1v
dmUgYWxsIGpRdWVyeSB2YXJpYWJsZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcg
alF1ZXJ5IGl0c2VsZikuXG4gICAgICovXG4gICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29s
ZWFuKTogT2JqZWN0O1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0
ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxs
eSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVj
dHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4u
LmRlZmVycmVkczogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47
XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5j
dGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmpl
Y3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEph
dmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBl
eGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1
c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQg
b2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48
VD4oLi4uZGVmZXJyZWRzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29r
czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAv
KipcbiAgICAgKiBTdG9yZSBhcmJpdHJhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNp
ZmllZCBlbGVtZW50LiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhl
IGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRh
dGEgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAg
ICovXG4gICAgZGF0YTxUPihlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQp
OiBUO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBm
b3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1
ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBk
YXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRh
IHRvIHNldC5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5n
KTogYW55O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9y
ZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2
YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRo
ZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAg
IGRlcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4g
ICAgaGFzRGF0YShlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6
IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEoZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3Rh
cnQ/OiAoZGVmZXJyZWQ6IEpRdWVyeURlZmVycmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcblxuICAgIC8vIEVmZmVjdHNcbiAgICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRl
cnZhbDogbnVtYmVyOyBzdG9wOiAoKSA9PiB2b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBm
YXN0OiBudW1iZXI7IH07IG9mZjogYm9vbGVhbjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZl
bnRzXG4gICAgcHJveHkoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnks
IC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3Ry
aW5nLCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcblxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0
cnVjdG9yO1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1
ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55
OyAgLy9UT0RPOiBEZWNpZGUgaG93IHdlIHdhbnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTog
Ym9vbGVhbjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0
O1xuXG4gICAgLy8gVXRpbGl0aWVzXG4gICAgY29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBj
b250YWluZWQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnks
IGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBhbnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFu
eSk6IGFueTtcbiAgICBlYWNoKGNvbGxlY3Rpb246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleElu
QXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7
XG4gICAgZWFjaDxUPihjb2xsZWN0aW9uOiBUW10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBu
dW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBUKSA9PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFy
Z2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFu
LCB0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNv
ZGU6IHN0cmluZyk6IGFueTtcblxuICAgIGdyZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1l
bnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0Pzog
Ym9vbGVhbik6IFRbXTtcblxuICAgIGluQXJyYXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZy
b21JbmRleD86IG51bWJlcik6IG51bWJlcjtcblxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29s
ZWFuO1xuICAgIGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rp
b24ob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICBpc1BsYWluT2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNYTUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5c
biAgICBtYWtlQXJyYXkob2JqOiBhbnkpOiBhbnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTog
VFtdLCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikg
PT4gVSk6IFVbXTtcbiAgICBtYXAoYXJyYXk6IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJh
eTogYW55LCBpbmRleEluQXJyYXk6IGFueSkgPT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4o
Zmlyc3Q6IFRbXSwgc2Vjb25kOiBUW10pOiBUW107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtd
LCBzZWNvbmQ6IFVbXSk6IGFueVtdO1xuXG4gICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTog
bnVtYmVyO1xuXG4gICAgcGFyc2VKU09OKGpzb246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxu
ICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBkYXRhYSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAg
ICAqL1xuICAgIHBhcnNlWE1MKGRhdGE6IHN0cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVl
dWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6
IEpRdWVyeTtcblxuICAgIHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9i
ajogYW55KTogc3RyaW5nO1xuXG4gICAgdW5pcXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAg
IC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAg
ICAqIEBwYXJhbSBjb250ZXh0IERPTSBlbGVtZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGlu
IHdoaWNoIHRoZSBIVE1MIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBr
ZWVwU2NyaXB0cyBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0
cyBwYXNzZWQgaW4gdGhlIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6
IHN0cmluZywgY29udGV4dD86IEhUTUxFbGVtZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBh
bnlbXTtcblxuICAgIEFuaW1hdGlvbihlbGVtOiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9u
czogYW55KTogYW55O1xuXG4gICAgZWFzaW5nOiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAg
VGhlIGpRdWVyeSBpbnN0YW5jZSBtZW1iZXJzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAg
Ly8gQUpBWFxuICAgIGFqYXhDb21wbGV0ZShoYW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWph
eEVycm9yKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBl
eGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChl
dmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdGFydChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFN0b3AoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNj
ZXNzKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNl
cHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0
YT86IGFueSwgY29tcGxldGU/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3Ry
aW5nO1xuICAgIHNlcmlhbGl6ZUFycmF5KCk6IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xu
ICAgIGFkZENsYXNzKGNsYXNzTmFtZXM6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhm
dW5jOiAoaW5kZXg6IGFueSwgY3VycmVudENsYXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2Vs
ZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cblxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3Ry
aW5nKTogc3RyaW5nO1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55
KTogSlF1ZXJ5O1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6
IGFueSwgYXR0cjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpR
dWVyeTtcblxuICAgIGhhc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAg
IGh0bWwoKTogc3RyaW5nO1xuICAgIGh0bWwoaHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGh0bWwoaHRtbENvbnRlbnQ6IChpbmRleDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAg
cHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7
XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFBy
b3BlcnR5VmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcmVtb3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNs
czogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3
dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4p
OiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBz
d3RjaDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2
YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgdmFsKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDog
YW55LCB2YWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQg
dGhlIHZhbHVlIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRo
ZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0
eU5hbWUgQSBDU1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3Ry
aW5nKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9w
ZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0
aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVl
IEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3Bl
cnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVt
YmVyW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9w
ZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZh
bHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1
cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50
IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAg
IGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTog
c3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRo
aXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9m
IHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVt
YmVyLCB2YWx1ZTogbnVtYmVyKSA9PiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
U2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJv
cGVydHktdmFsdWUgcGFpcnMgdG8gc2V0LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBP
YmplY3QpOiBKUXVlcnk7XG5cbiAgICBoZWlnaHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIGhlaWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGhlaWdodChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIGlubmVySGVpZ2h0KCk6IG51bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJX
aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVt
YmVyOyB0b3A6IG51bWJlcjsgfTtcbiAgICBvZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVy
eTtcbiAgICBvZmZzZXQoZnVuYzogKGluZGV4OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJl
cjtcbiAgICBvdXRlckhlaWdodCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVh
bik6IEpRdWVyeTtcblxuICAgIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBu
dW1iZXI7XG4gICAgb3V0ZXJXaWR0aCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9v
bGVhbik6IEpRdWVyeTtcblxuICAgIHBvc2l0aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51
bWJlcjsgfTtcblxuICAgIHNjcm9sbExlZnQoKTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFs
dWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Ny
b2xsVG9wKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4g
ICAgd2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIHdpZHRoKGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGF0YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpR
dWVyeTtcbiAgICBkYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4g
ICAgZGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVy
eTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgcHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBh
bnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShw
cm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1
ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJv
cGVydGllczogYW55LCBvcHRpb25zOiB7IGR1cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7
IGNvbXBsZXRlPzogRnVuY3Rpb247IHN0ZXA/OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBz
cGVjaWFsRWFzaW5nPzogYW55OyB9KTogSlF1ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51
bWJlciwgcXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRl
T3V0KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0
KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJl
ciwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBmaW5pc2goKTogSlF1ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFu
eSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFz
aW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlk
ZURvd24oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRl
RG93bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcblxuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5n
LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnks
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVh
c2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFy
UXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3Ao
cXVldWU/OiBhbnksIGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTog
SlF1ZXJ5O1xuXG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVl
cnk7XG5cbiAgICAvLyBFdmVudHNcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERh
dGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnks
IHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0
cmluZywgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50
czogYW55W10pOiBKUXVlcnk7XG5cbiAgICBibHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFu
eSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQg
b24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICov
XG4gICAgY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGlj
ayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRi
bGNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRi
bGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGRibGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgZGJsY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2Vs
ZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwiZm9jdXNcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3Vz
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgZm9jdXMoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBmb2N1cyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgZm9jdXNvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBmb2N1c291dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QmluZCB0d28gaGFuZGxlcnMgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVk
IHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhh
bmRsZXJPdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVh
dmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhIHNpbmdsZSBoYW5kbGVyIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRl
ZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAg
ICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbk91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJr
ZXlkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5
ZG93blwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBrZXlkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIGtleWRvd25cIlwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXlkb3duKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwia2V5cHJlc3NcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGtleXByZXNzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQg
ZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXl1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBsb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRv
d25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
ZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2Vkb3duKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2VlbnRlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2VlbnRlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVu
IHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRl
cihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlbGVhdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNl
bGVhdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVh
dmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92
ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlbW92ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbW91c2Vtb3ZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwibW91c2VvdXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNlb3V0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVy
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJt
b3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJtb3VzZXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
bW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIG1vdXNldXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZXVwKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tc
IiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFt
IHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxs
eSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9y
IHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAg
b2ZmKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24u
bXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhh
bmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0
aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNl
bnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBu
YW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJl
dmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2Vk
IHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9m
ZihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9u
IGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQg
dHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5
ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNv
IGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyBy
ZXR1cm4gZmFsc2UuIFJlc3QgcGFyYW1ldGVyIGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRl
cnMgcGFzc2VkIHRvIGpRdWVyeS50cmlnZ2VyKCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFt
ZXRlcnMgb24gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0
aW9uYWwgKD8gc3ludGF4KS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFu
eSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5j
dGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBc
ImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRl
ZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxl
Y3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFs
bG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1
cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJp
bmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRv
d24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0
cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBl
bGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5k
bGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBv
bihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3Jl
IGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9t
aXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRv
IHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICov
XG4gICAgb24oZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnks
IGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVy
IHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0
IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2
ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZl
bnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0
IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVu
dCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2Ug
cGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywg
c3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxu
ICAgICAqIEBwYXJhbSBkYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBU
aGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50
IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEg
c2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVk
IGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxs
IG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hl
cyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2Ug
aXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5
IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2Vs
ZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4g
ZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBv
bmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFs
IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxu
ICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRl
c2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlz
IHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0
YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUg
ZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQg
c2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmlu
Zywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRh
Y2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlz
IGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5
cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBv
cHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxl
Y3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBz
ZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVj
dG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVu
IGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0
YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50
IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSwgc2VsZWN0b3I/OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxu
ICAgICAqIFNwZWNpZnkgYSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxs
eSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgYWZ0ZXIgdGhlIERPTSBpcyByZWFkeS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVy
OiBGdW5jdGlvbik6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVz
aXplXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHJlc2l6ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
cmVzaXplKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInNjcm9sbFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzY3JvbGwoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNjcm9sbChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJzZWxlY3RcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNl
bGVjdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzZWxlY3QoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic3VibWl0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzdWJtaXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmln
Z2VyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIHRyaWdnZXIoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAg
dHJpZ2dlckhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55
W10pOiBPYmplY3Q7XG5cbiAgICB1bmJpbmQoZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVu
YmluZChldmVudFR5cGU6IHN0cmluZywgZmxzOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmlu
ZChldnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVu
ZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxl
Z2F0ZShzZWxlY3RvcjogYW55LCBldmVudHM6IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRl
KG5hbWVzcGFjZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQo
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxl
bWVudDtcbiAgICBqcXVlcnk6IHN0cmluZztcblxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVu
dERhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtc
biAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFueVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55
KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWFuaXB1bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDog
YW55W10pOiBKUXVlcnk7XG4gICAgYWZ0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIGFwcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBl
bmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
YXBwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDog
YW55W10pOiBKUXVlcnk7XG4gICAgYmVmb3JlKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBjbG9uZSh3aXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRo
RGF0YUFuZEV2ZW50cz86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBlbXB0eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRl
cih0YXJnZXQ6IGFueSk6IEpRdWVyeTtcbiAgICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBwcmVwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHBy
ZXBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgcHJlcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9y
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtc
blxuICAgIHJlcGxhY2VXaXRoKGZ1bmM6IGFueSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3Ry
aW5nO1xuICAgIHRleHQodGV4dFN0cmluZzogYW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0
cmluZzogKGluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgdG9BcnJheSgpOiBhbnlbXTtcblxuICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3
cmFwKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwSW5uZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVl
cnk7XG4gICAgd3JhcElubmVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTog
RWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55
O1xuXG4gICAgaW5kZXgoKTogbnVtYmVyO1xuICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBu
dW1iZXI7XG4gICAgaW5kZXgoZWxlbWVudDogYW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVy
dGllc1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6
IHN0cmluZ106IGFueTtcbiAgICBbeDogbnVtYmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBU
cmF2ZXJzaW5nXG4gICAgYWRkKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVl
cnk7XG4gICAgYWRkKC4uLmVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNo
aWxkcmVuKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86
IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAg
ICBjbG9zZXN0KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczog
YW55LCBjb250ZXh0PzogRWxlbWVudCk6IGFueVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5
O1xuXG4gICAgZW5kKCk6IEpRdWVyeTtcblxuICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7
XG5cbiAgICBmaWx0ZXIoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVu
YzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55
KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQo
c2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVy
eTtcbiAgICBmaW5kKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5
O1xuXG4gICAgaGFzKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5l
ZDogRWxlbWVudCk6IEpRdWVyeTtcblxuICAgIGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFu
O1xuICAgIGlzKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVs
ZW1lbnQ6IGFueSk6IGJvb2xlYW47XG4gICAgaXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4g
ICAgbGFzdCgpOiBKUXVlcnk7XG5cbiAgICBtYXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21F
bGVtZW50OiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIG5leHRVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIG5leHRVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIG5vdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChm
dW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkp
OiBKUXVlcnk7XG4gICAgbm90KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFy
ZW50KCk6IEpRdWVyeTtcblxuICAgIHBhcmVudChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHBhcmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRz
VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBw
YXJlbnRzVW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtc
biAgICBwYXJlbnRzVW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICBwcmV2KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChz
ZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0
cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50Pzog
RWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBK
UXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVt
YmVyKTogSlF1ZXJ5O1xuXG4gICAgLy8gVXRpbGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/
OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVP
ckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG4gICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBh
bnkpOiBKUXVlcnk7XG59XG5kZWNsYXJlIG1vZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQg
PSAkO1xufVxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAk
OiBKUXVlcnlTdGF0aWM7XG4vLyBsaWJzL2FuZ3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRl
ZmluaXRpb25zIGZvciBBbmd1bGFyIEpTIDEuMFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJq
cy5vcmdcbi8vIERlZmluaXRpb25zIGJ5OiBEaWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20v
ZGllZ292aWxhcj5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5r
b3YvRGVmaW5pdGVseVR5cGVkXG5cblxuXG5kZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxh
clN0YXRpYztcblxuLy8gU3VwcG9ydCBmb3IgcGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25c
bmludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAgJGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuLy8gbmcgbW9kdWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuZGVjbGFyZSBtb2R1bGUgbmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJv
dmlkZXJzIGV4dGVuZCB0aGlzIGludGVyZmFjZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgJGdldDogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEFuZ3VsYXJTdGF0aWNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJT
dGF0aWMge1xuICAgICAgICBiaW5kKGNvbnRleHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdz
OiBhbnlbXSk6IEZ1bmN0aW9uO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBt
b2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJh
cChlbGVtZW50OiBKUXVlcnksIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6
IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3Vt
ZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNv
cHkoc291cmNlOiBhbnksIGRlc3RpbmF0aW9uPzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50
OiBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljO1xuICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZh
bHVlMjogYW55KTogYm9vbGVhbjtcbiAgICAgICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4u
LnNvdXJjZXM6IGFueVtdKTogYW55O1xuICAgICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRv
cjogKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIGZyb21Kc29uKGpzb246IHN0cmluZyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJn
PzogYW55KTogYW55O1xuICAgICAgICBpbmplY3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJ
bmplY3RvclNlcnZpY2U7XG4gICAgICAgIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzRGF0ZSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZh
bHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xl
YW47XG4gICAgICAgIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlz
TnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGlzVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uo
c3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFy
IGFwcGxpY2F0aW9uXG5cdFx0b2ZmaWNpYWwgZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmlu
ZyBhbmd1bGFyIG1vZHVsZXMuXG5cdFx0c2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9hbmd1bGFyLk1vZHVsZVxuXHRcdCovXG4gICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8q
KiBuYW1lIG9mIHlvdXIgbW9kdWxlIHlvdSB3YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAg
bmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBl
bmRzIG9uICovXG4gICAgICAgICAgICByZXF1aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAg
Y29uZmlnRnVuY3Rpb24/OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFu
eVtdKTogdm9pZDtcbiAgICAgICAgdG9Kc29uKG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTog
c3RyaW5nO1xuICAgICAgICB1cHBlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAg
IHZlcnNpb246IHtcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9y
OiBudW1iZXI7XG4gICAgICAgICAgICBtaW5vcjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBu
dW1iZXI7XG4gICAgICAgICAgICBjb2RlbmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJTW9kdWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6
IHN0cmluZywgYW5pbWF0aW9uRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBh
bmltYXRpb24obmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJ
TW9kdWxlO1xuICAgICAgICBhbmltYXRpb24ob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAg
ICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhv
ZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUg
bG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1v
ZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2Ug
dGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQg
b24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0
KTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAg
ICAgICAgY29udHJvbGxlcihvYmplY3QgOiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJl
Y3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9u
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElN
b2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0
aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBp
bmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5
KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywg
ZmlsdGVyRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRl
cihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIGZpbHRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTog
SU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRD
b25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0
cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBz
ZXJ2aWNlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3Ry
aW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3Qp
OiBJTW9kdWxlO1xuXG4gICAgICAgIC8vIFByb3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5n
O1xuICAgICAgICByZXF1aXJlczogc3RyaW5nW107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVj
ZXNzYXJ5IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBu
b3QgdmVyeSBlbGVnYW50XG5cdC8vIGJlY2F1c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28n
XSBpbnN0ZWFkIG9mIGF0dHJzLmZvbyBidXQgSSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxu
XHQvLyB0aGlzIHNob3VsZCByZWFsbHkgYmUgbGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBp
dCBjcmVhdGVzIHRoaXMgcHJvYmxlbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4
NTQvMTY1NjU2XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUg
Q1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRo
ZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4g
YW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkXG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRk
aXRpb24uXG4gICAgICAgICRhZGRDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAg
ICAgICAvLyBSZW1vdmVzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFz
c1ZhbCBwYXJhbWV0ZXIgZnJvbSB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9u
cyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAg
ICAgICAgLy8gdGhlIGNsYXNzIHJlbW92YWwuXG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1Zh
bDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRl
IHZhbHVlLlxuICAgICAgICAkc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxu
ICAgICAgICAvLyBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAv
LyBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBu
ZXh0ICRkaWdlc3RcbiAgICAgICAgLy8gZm9sbG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2
ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQg
dmFsdWUgY2hhbmdlcy5cbiAgICAgICAgJG9ic2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/
OmFueSk9PmFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50
IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxu
ICAgICAgICAvLyB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNr
IHRvIGFjdHVhbCBuYW1lLlxuICAgICAgICAkYXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZvcm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7
XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xu
ICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAg
ICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9k
ZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcu
SU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4g
ICAgICAgICRzZXRQcmlzdGluZSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIE5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7
XG4gICAgICAgICRyZW5kZXIoKTogdm9pZDtcbiAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRp
b25FcnJvcktleTogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8g
RG9jdW1lbnRhdGlvbiBzdGF0ZXMgdmlld1ZhbHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3Ry
aW5nIGJ1dCBvdGhlclxuICAgICAgICAvLyB0eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0
byB1c2UgdGhlbS5cbiAgICAgICAgJHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAg
ICAgICAgJHZpZXdWYWx1ZTogYW55O1xuXG4gICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAg
ICAgICAgJHBhcnNlcnM6IElNb2RlbFBhcnNlcltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1v
ZGVsRm9ybWF0dGVyW107XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6
IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29s
ZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SU1vZGVsUGFyc2VyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElNb2RlbEZvcm1hdHRlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5
KCk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBw
bHkoZXhwOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNh
c3QobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAg
ICRkZXN0cm95KCk6IHZvaWQ7XG4gICAgICAgICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVt
aXQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAg
ICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBs
ZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcs
IGFyZ3M/OiBPYmplY3QpOiBhbnk7XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTog
SVNjb3BlKSA9PiBhbnksIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1l
bnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNv
dW50cyBvbiBpdFxuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7
XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6
IHZvaWQ7XG5cbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0
aW9uIGNoZWNraW5nIHN0cmF0ZWd5XG4gICAgICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJ
U2NvcGU7XG5cbiAgICAgICAgJG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFu
Z3VsYXJFdmVudCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAg
ICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVj
dEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHBy
ZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnks
IHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rp
b247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBh
bnksIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlv
bjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFu
eSwgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29w
ZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAg
ICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5l
d1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0
aW9uO1xuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJ
U2NvcGUpID0+IGFueSwgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBz
Y29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2Nv
cGU7XG5cbiAgICAgICAgJGlkOiBudW1iZXI7XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNc
biAgICAgICAgJCRpc29sYXRlQmluZGluZ3M6IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5ndWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2Nv
cGU6IElTY29wZTtcbiAgICAgICAgY3VycmVudFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6
IHN0cmluZztcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZh
dWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50
cyB0aGF0IHdlcmUgJGVtaXQtdGVkXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9u
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRz
IFdpbmRvdyB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZp
Y2VcbiAgICAvLyBUT0RPIHVuZG9jdW1lbnRlZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0
aGUgc291cmNlIGNvZGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJy
b3dzZXJTZXJ2aWNlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGlt
ZW91dFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZp
Y2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBs
eT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVBy
b21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSW50ZXJ2YWxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRpbnRlcnZhbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJSW50ZXJ2YWxTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVt
YmVyLCBjb3VudD86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55
PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAg
ICAobmFtZTogc3RyaW5nKTogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0
ZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3Rlcihu
YW1lOiBzdHJpbmcsIGZpbHRlckZhY3Rvcnk6IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAg
ICBpZDogc3RyaW5nO1xuXG4gICAgICAgIC8vIFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAg
ICAgICAvLyBDaGVjayBhbmd1bGFyJ3MgaTE4biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAg
TlVNQkVSX0ZPUk1BVFM6IElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBE
QVRFVElNRV9GT1JNQVRTOiBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAg
ICBwbHVyYWxDYXQ6IChudW06IGFueSkgPT4gc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBz
dHJpbmc7XG4gICAgICAgIEdST1VQX1NFUDogc3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxv
Y2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yW107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3Ry
aW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0
b3Ige1xuICAgICAgICBtaW5JbnQ6IG51bWJlcjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xu
ICAgICAgICBtYXhGcmFjOiBudW1iZXI7XG4gICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAg
ICBwb3NTdWY6IHN0cmluZztcbiAgICAgICAgbmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1
Zjogc3RyaW5nO1xuICAgICAgICBnU2l6ZTogbnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJl
cjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRv
ciB7XG4gICAgICAgIE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5n
W107XG4gICAgICAgIERBWTogc3RyaW5nW107XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtc
biAgICAgICAgQU1QTVM6IHN0cmluZ1tdO1xuICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAg
ICAgc2hvcnQ6IHN0cmluZztcbiAgICAgICAgZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9u
Z0RhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9y
dERhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9y
dFRpbWU6IHN0cmluZztcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBM
b2dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRs
b2dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xu
ICAgICAgICBkZWJ1ZzogSUxvZ0NhbGw7XG4gICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAg
ICAgaW5mbzogSUxvZ0NhbGw7XG4gICAgICAgIGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46
IElMb2dDYWxsO1xuICAgIH1cblxuICAgIC8vIFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGlu
dGVyZmFjZSBzbyB3ZSBjYW4gcmVvcGVuIGl0IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sg
bW9kdWxlLlxuICAgIGludGVyZmFjZSBJTG9nQ2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlb
XSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJz
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtc
biAgICAgICAgKGV4cHJlc3Npb246IHN0cmluZyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4
dDogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90
IHByb3ZpZGVkLCB1bmRlZmluZWQgaXMgZ29ubmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50
YXRpb25cbiAgICAgICAgLy8gZG9lcyBub3QgY2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9y
Y2UgYSB2YWx1ZSBmb3IgY29uc2lzdGVuY3kuIElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50
cyB0byB1bmRlZmluZSBpdCwgcGFzcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4g
ICAgICAgIGFzc2lnbihjb250ZXh0OiBhbnksIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4k
bG9jYXRpb25cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9u
U2VydmljZSB7XG4gICAgICAgIGFic1VybCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3Ry
aW5nO1xuICAgICAgICBoYXNoKG5ld0hhc2g6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIGhvc3QoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAg
cGF0aChuZXdQYXRoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6
IG51bWJlcjtcbiAgICAgICAgcHJvdG9jb2woKTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6
IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJj
aChwYXJhbWV0ZXJzTWFwOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2go
cGFyYW1ldGVyOiBzdHJpbmcsIHBhcmFtZXRlclZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNl
O1xuICAgICAgICB1cmwoKTogc3RyaW5nO1xuICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBl
eHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztc
biAgICAgICAgaGFzaFByZWZpeChwcmVmaXg6IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xu
ICAgICAgICBodG1sNU1vZGUoKTogYm9vbGVhbjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9u
IHN0YXRlcyB0aGF0IHBhcmFtZXRlciBpcyBzdHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1l
bnRhdGlvbiB0ZXN0cyBpdCBhcyBib29sZWFuLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAg
ICAgIC8vIHNpbmNlIHRoaXMgaXMgYSB0b2dnbGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6
IGJvb2xlYW4pOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBEb2N1bWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGRvY3VtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElEb2N1bWVudFNlcnZpY2UgZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRXhjZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2
aWNlIHtcbiAgICAgICAgKGV4Y2VwdGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVt
ZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNl
cnZpY2UgZXh0ZW5kcyBKUXVlcnkge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IFFTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRx
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAg
ICAgIGFsbChwcm9taXNlczogSVByb21pc2U8YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAg
ICAgICBkZWZlcjxUPigpOiBJRGVmZXJyZWQ8VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBh
bnkpOiBJUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNl
PFQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21p
c2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5
Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAg
ICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJ
UHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBu
b3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0Pjtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQp
ID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5v
dGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xu
XG5cbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJ
SHR0cFByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8
VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6
IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAo
cmVhc29uOiBhbnkpID0+IFRSZXN1bHQpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBm
aW5hbGx5PFRSZXN1bHQ+KGZpbmFsbHlDYWxsYmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3Vs
dD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29s
dmUodmFsdWU/OiBUKTogdm9pZDtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7
XG4gICAgICAgIG5vdGlmeShzdGF0ZT86YW55KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVBy
b21pc2U8VD47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9y
U2Nyb2xsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kYW5jaG9yU2Nyb2xsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElB
bmNob3JTY3JvbGxTZXJ2aWNlIHtcbiAgICAgICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElBbmNob3JTY3JvbGxQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICBkaXNhYmxlQXV0b1Njcm9sbGluZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIENhY2hlRmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAg
IC8vIExldHMgbm90IGZvY2UgdGhlIG9wdGlvbnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVt
YmVyLiBFdmVuIHRob3VnaFxuICAgICAgICAvLyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRl
cmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBt
aWdodCBmaW5kIGl0IHVzZWZ1bCB0byBhc3NvY2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRo
ZSBjYWNoZSBvYmplY3QuXG4gICAgICAgIC8vKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86
IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IENhY2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDog
c3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0
O1xuXG4gICAgICAgIC8vIE1ldGhvZHMgYmVsbG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAg
ICBpbmZvKCk6IGFueTtcbiAgICAgICAgZ2V0IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmpl
Y3Q7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8o
KToge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtc
blxuICAgICAgICAgICAgLy8gTm90IGdhcmFudGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9u
LW1hbmRhdG9yeSBvcHRpb25cbiAgICAgICAgICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAg
ICAgfTtcbiAgICAgICAgcHV0KGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAg
ICAgIGdldCAoa2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6
IHZvaWQ7XG4gICAgICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZv
aWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92
aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZp
Y2Uge1xuICAgICAgICAoZWxlbWVudDogc3RyaW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlu
a2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5j
dGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVM
aW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1
bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogSlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRl
TGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdG
dW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRz
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJl
Y3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElDb21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8g
VW5kb2N1bWVudGVkLCBidXQgaXQgaXMgdGhlcmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVj
dGl2ZXNNYXA6IGFueSk6IElDb21waWxlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiB7XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5v
dCBmb3JjZSBjbG9uZUF0dGFjaEZuJ3Mgc2lnbmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3Bl
LCBjbG9uZUF0dGFjaEZuPzogKGNsb25lZEVsZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3Bl
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gQ29udHJvbGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbnRyb2xsZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJQ29udHJvbGxlclNlcnZpY2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUg
ZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHN0YXRlIHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAg
ICAgICAgKGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFu
eTtcbiAgICAgICAgKGNvbnRyb2xsZXJOYW1lOiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2
aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJp
bmcsIGRlcGVuZGVuY3lBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwU2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0
IG1vZXRob2QgYW5kIHVybCBtdXN0IGJlIHByb3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElS
ZXF1ZXN0Q29uZmlnKTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJp
bmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVs
ZXRlICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBoZWFkKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQ
cm9taXNlPGFueT47XG4gICAgICAgIGpzb25wKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6
IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBw
dXQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAg
Ly8gRm9yIGRlYnVnZ2luZywgQlVUIGl0IGlzIGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxu
ICAgICAgICBwZW5kaW5nUmVxdWVzdHM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMg
anVzdCBmb3IgaGludGluZy5cbiAgICAvLyBTb21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFp
bGFibGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cCNVc2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNc
biAgICBpbnRlcmZhY2UgSVJlcXVlc3RDb25maWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztc
biAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAv
LyBYWFggaXQgaGFzIGl0J3Mgb3duIHN0cnVjdHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVm
aW5lIGl0IGluIHRoZSBmdXR1cmVcbiAgICAgICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBj
YWNoZT86IGFueTtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAg
ICAvLyBUaGVzZSBhY2NlcHQgbXVsdGlwbGUgdHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFz
IGFueVxuICAgICAgICBkYXRhPzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55
O1xuICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFu
eTsgLy8gbnVtYmVyIHwgcHJvbWlzZVxuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21p
c2VDYWxsYmFjazxUPiB7XG4gICAgICAgIChkYXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVy
czogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmln
KTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8
VD4ge1xuICAgICAgICBkYXRhPzogVDtcbiAgICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAg
ICBoZWFkZXJzPzogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25m
aWc/OiBJUmVxdWVzdENvbmZpZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNl
PFQ+IGV4dGVuZHMgSVByb21pc2U8VD4ge1xuICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0
cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2Fs
bGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAg
ICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VD
YWxsYmFja0FyZzxUPikgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0
dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAg
ICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPikgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAo
cmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElT
ZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAg
ICAgIGludGVyY2VwdG9yczogYW55W107XG4gICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBh
bnlbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2Vu
ZFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0
dHBCYWNrZW5kXG4gICAgLy8gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZp
Y2UgZGlyZWN0bHkuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRw
QmFja2VuZFNlcnZpY2Uge1xuICAgICAgICAvLyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sg
c2lnbmF0dXJlIGluIHRoZSBmdXR1cmVcbiAgICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0
cmluZywgcG9zdD86IGFueSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGlt
ZW91dD86IG51bWJlciwgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92
aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVT
ZXJ2aWNlIHtcbiAgICAgICAgKHRleHQ6IHN0cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9v
bGVhbik6IElJbnRlcnBvbGF0aW9uRnVuY3Rpb247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJp
bmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZh
Y2UgSUludGVycG9sYXRpb25GdW5jdGlvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJp
bmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMg
SVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAg
ICAgc3RhcnRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAg
ICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmlu
Zyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFRlbXBsYXRlQ2FjaGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiR0ZW1wbGF0ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUNhY2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVj
dCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4
dGVuZHMgSVNjb3BlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cblx0aW50ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRU
cnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1
c3RlZENzcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkp
OiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEpzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3Rl
ZFJlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTog
YW55KTogYW55O1xuXHRcdHBhcnNlKHR5cGU6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTog
KGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJl
c3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0
cGFyc2VBc0h0bWwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBh
bnkpID0+IGFueTtcblx0XHRwYXJzZUFzSnMoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6
IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVz
c2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRw
YXJzZUFzVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55
KSA9PiBhbnk7XG5cdFx0dHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0dHJ1c3RBc0h0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFu
eSk6IGFueTtcblx0XHR0cnVzdEFzUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0
cnVzdEFzVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5c
dH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2
aWNlIHtcbiAgICAgICAgZ2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55
KTogYW55O1xuICAgICAgICB0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtc
biAgICAgICAgdmFsdWVPZih2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRl
bmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZXNvdXJjZVVybEJsYWNrbGlzdChibGFj
a2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICAgICAgcmVzb3VyY2VVcmxXaGl0ZWxpc3Qod2hpdGVs
aXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gRGlyZWN0aXZlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZlXG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvZ3VpZGUvZGlyZWN0aXZlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBp
bnRlcmZhY2UgSURpcmVjdGl2ZXtcbiAgICAgICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVt
cGxhdGVFbGVtZW50OiBhbnksXG4gICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRy
aWJ1dGVzLFxuICAgICAgICAgICAgdHJhbnNjbHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlu
a2luZ0ZuOiBGdW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAg
IGNvbnRyb2xsZXI/OiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAg
ICAgbGluaz86XG4gICAgICAgICAgICAoc2NvcGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3Rh
bmNlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmli
dXRlcyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lk
O1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAg
ICAgICAgcmVwbGFjZT86IGJvb2xlYW47XG4gICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAg
IHJlc3RyaWN0Pzogc3RyaW5nO1xuICAgICAgICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxh
dGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlVXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86
IGJvb2xlYW47XG4gICAgICAgIHRyYW5zY2x1ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gYW5ndWxhci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5n
IGFuZ3VsYXIuZWxlbWVudCwgYW5ndWxhciByZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAv
LyBhdWdtZW50ZWQgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAg
IC8vIHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0
aWMgZXh0ZW5kcyBKUXVlcnlTdGF0aWMge1xuICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29u
dGV4dD86IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1
ZXJ5O1xuICAgICAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5
O1xuICAgICAgICAob2JqZWN0OiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAo
ZnVuYzogRnVuY3Rpb24pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtd
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAg
ICAgICAvLyBUT0RPOiBldmVudHMsIGhvdyB0byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lc
blxuICAgICAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAg
ICAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQo
b2JqOiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFt
ZTogc3RyaW5nKTogYW55O1xuICAgICAgICBpbmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3Bl
KCk6IElTY29wZTtcblxuICAgICAgICBpbmhlcml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTog
YW55KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmdd
OiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTog
YW55O1xuXG5cbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8g
bW9kdWxlIChhbmd1bGFyLmpzKVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBt
b2R1bGUgYXV0byB7XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0
b3JTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9B
VVRPLiRpbmplY3RvclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2Ug
SUluamVjdG9yU2VydmljZSB7XG4gICAgICAgICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBz
dHJpbmdbXTtcbiAgICAgICAgICAgIGFubm90YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBh
bnlbXSk6IHN0cmluZ1tdO1xuICAgICAgICAgICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4g
ICAgICAgICAgICBpbnN0YW50aWF0ZSh0eXBlQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/
OiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246
IGFueVtdKTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0
PzogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgICAgICAvLyBQcm92aWRlU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgICAgICBpbnRlcmZhY2UgSVByb3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8v
IERvY3VtZW50YXRpb24gc2F5cyBpdCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBi
dXQgYWN0dWFsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4g
YW55dGhpbmcuXG4gICAgICAgICAgICAvLyBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiBhbnk7XG4gICAgICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiB2b2lkO1xuXG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6
IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRl
Y29yYXRvcklubGluZTogYW55W10pOiB2b2lkO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBz
dHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92
aWRlcjtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRG
dW5jdGlvbjogYW55W10pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlk
ZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjogbmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2
aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQ
cm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcu
SVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1v
ZGVscy9Ub2RvSXRlbS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0Jztcblxu
ICAgIGV4cG9ydCBjbGFzcyBUb2RvSXRlbSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAg
ICAgICAgcHVibGljIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVk
OiBib29sZWFuXG4gICAgICAgICAgICApIHsgfVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRv
ZG9TY29wZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2Nv
cGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xuXHRcdHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1Rv
ZG86IHN0cmluZztcblx0XHRlZGl0ZWRUb2RvOiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86
IFRvZG9JdGVtO1xuXHRcdHJlbWFpbmluZ0NvdW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBu
dW1iZXI7XG5cdFx0YWxsQ2hlY2tlZDogYm9vbGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtc
blx0XHRzdGF0dXNGaWx0ZXI6IHsgY29tcGxldGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9u
OiBuZy5JTG9jYXRpb25TZXJ2aWNlO1xuXHRcdHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50
ZXJmYWNlcy9JVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVy
ZmFjZSBJVG9kb1N0b3JhZ2Uge1xuXHRcdGdldCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9k
b3M6IFRvZG9JdGVtW10pO1xuXHR9XG59Ly8gZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9k
dWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhh
dCBwbGFjZXMgZm9jdXMgb24gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBl
eHByZXNzaW9uIGl0IGJpbmRzIHRvIGV2YWx1YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0
IGZ1bmN0aW9uIHRvZG9Gb2N1cygkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURp
cmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwg
ZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3
YXRjaChhdHRyaWJ1dGVzLnRvZG9Gb2N1cywgbmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3
dmFsKSB7XG5cdFx0XHRcdFx0XHQkdGltZW91dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAs
IGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1c
blxuXHR0b2RvRm9jdXMuJGluamVjdCA9IFsnJHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMv
VG9kb0JsdXIudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAv
KipcbiAgICAgKiBEaXJlY3RpdmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhl
IGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byBsb3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBv
cnQgZnVuY3Rpb24gdG9kb0JsdXIoKTogbmcuSURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7
XG4gICAgICAgICAgICBsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwg
YXR0cmlidXRlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVy
JywgKCkgPT4geyAkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAg
ICAgICAgICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQo
J2JsdXInKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGly
ZWN0aXZlcy9Ub2RvRXNjYXBlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0Jztc
blxuXHRjb25zdCBFU0NBUEVfS0VZID0gMjc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0
IGNhbmNlbHMgZWRpdGluZyBhIHRvZG8gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5c
blx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xu
XHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpR
dWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93
bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVf
S0VZKSB7XG5cdFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7
XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJv
eScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0
fTtcblx0fVxufVxuLy8gc2VydmljZXMvVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtc
biAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNp
c3RzIGFuZCByZXRyaWV2ZXMgVE9ET3MgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAg
ZXhwb3J0IGNsYXNzIFRvZG9TdG9yYWdlIGltcGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAg
ICAgICBTVE9SQUdFX0lEID0gJ3RvZG9zLWFuZ3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAg
ICBnZXQgKCk6IFRvZG9JdGVtW10ge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9j
YWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxu
XG4gICAgICAgIHB1dCh0b2RvczogVG9kb0l0ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9y
YWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAg
ICAgICB9XG4gICAgfVxufS8vIGNvbnRyb2xsZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2Rv
cyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBm
b3IgdGhlIGFwcC4gVGhlIGNvbnRyb2xsZXI6XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0
cyB0aGUgbW9kZWwgdmlhIHRoZSB0b2RvU3RvcmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0
aGUgbW9kZWwgdG8gdGhlIHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQg
Ki9cblx0ZXhwb3J0IGNsYXNzIFRvZG9DdHJsIHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9J
dGVtW107XG5cblx0XHQvLyAkaW5qZWN0IGFubm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMg
JGluamVjdG9yIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVj
dGVkIGludG8gY29uc3RydWN0b3Jcblx0XHQvLyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9z
ZSB0byB0aGUgY29uc3RydWN0b3IsIGJlY2F1c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBp
biBjb3VudCBhbmQgdHlwZS5cblx0XHQvLyBTZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9n
dWlkZS9kaVxuXHRcdHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxu
XHRcdFx0JyRsb2NhdGlvbicsXG5cdFx0XHQndG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZp
bHRlcidcblx0XHRdO1xuXG5cdFx0Ly8gZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5n
dWxhckpTICRpbmplY3RvclxuXHRcdC8vIGNvbnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQg
aW4gQXBwbGljYXRpb24udHMgYW5kIHNwZWNpZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmli
dXRlIGluIGluZGV4Lmh0bWxcblx0XHRjb25zdHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3Bl
OiBJVG9kb1Njb3BlLFxuXHRcdFx0cHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZp
Y2UsXG5cdFx0XHRwcml2YXRlIHRvZG9TdG9yYWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2
YXRlIGZpbHRlckZpbHRlclxuXHRcdCkge1xuXHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2Rv
cyA9IHRvZG9TdG9yYWdlLmdldCgpO1xuXG5cdFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRc
dFx0JHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3Ig
J3ZpZXcgbW9kZWwnLiBXZSdyZSBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIg
dG8gdGhlIHNjb3BlXG5cdFx0XHQvLyBmb3IgaXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBm
cm9tIHZpZXcgLyBIVE1MXG5cdFx0XHQkc2NvcGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRj
aGluZyBmb3IgZXZlbnRzL2NoYW5nZXMgaW4gc2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmll
dy91c2VyIGlucHV0XG5cdFx0XHQvLyBpZiB5b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50
IHdpdGggbGlmZXRpbWUgbG9uZ2VyIHRoYW4gdGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91
IHVuc3Vic2NyaWJlLlxuXHRcdFx0JHNjb3BlLiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9u
VG9kb3MoKSwgdHJ1ZSk7XG5cdFx0XHQkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBw
YXRoID0+IHRoaXMub25QYXRoKHBhdGgpKVxuXG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9
PT0gJycpICRsb2NhdGlvbi5wYXRoKCcvJyk7XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9j
YXRpb247XG5cdFx0fVxuXG5cdFx0b25QYXRoKHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4k
c2NvcGUuc3RhdHVzRmlsdGVyID0gKHBhdGggPT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNv
bXBsZXRlZDogZmFsc2UgfSA6IChwYXRoID09PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBj
b21wbGV0ZWQ6IHRydWUgfSA6IHt9O1xuXHRcdH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0
aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudCA9IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3Ms
IHsgY29tcGxldGVkOiBmYWxzZSB9KS5sZW5ndGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291
bnQgPSB0aGlzLnRvZG9zLmxlbmd0aCAtIHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRc
dFx0dGhpcy4kc2NvcGUuYWxsQ2hlY2tlZCA9ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxu
XHRcdFx0dGhpcy50b2RvU3RvcmFnZS5wdXQodGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRk
VG9kbygpIHtcblx0XHRcdHZhciBuZXdUb2RvIDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9k
by50cmltKCk7XG5cdFx0XHRpZiAoIW5ld1RvZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtc
blx0XHRcdH1cblxuXHRcdFx0dGhpcy50b2Rvcy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBm
YWxzZSkpO1xuXHRcdFx0dGhpcy4kc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVk
aXRUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9k
byA9IHRvZG9JdGVtO1xuXG5cdFx0XHQvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNl
IGVkaXRpbmcgaXMgY2FuY2VsbGVkLlxuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0g
YW5ndWxhci5leHRlbmQoe30sIHRvZG9JdGVtKTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9m
KHRvZG9JdGVtKV0gPSB0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29w
ZS5yZXZlcnRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRv
ZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRo
aXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2
ZXJ0ZWQpIHtcblx0XHRcdFx0Ly8gVG9kbyBlZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZl
LlxuXHRcdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtc
blx0XHRcdH1cblx0XHRcdHRvZG9JdGVtLnRpdGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xu
XHRcdFx0aWYgKCF0b2RvSXRlbS50aXRsZSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9k
b0l0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9J
dGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zLnNwbGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0
ZW0pLCAxKTtcblx0XHR9XG5cblx0XHRjbGVhckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNj
b3BlLnRvZG9zID0gdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0
b2RvSXRlbS5jb21wbGV0ZWQpO1xuXHRcdH1cblxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29s
ZWFuKSB7XG5cdFx0XHR0aGlzLnRvZG9zLmZvckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5j
b21wbGV0ZWQgPSBjb21wbGV0ZWQ7IH0pO1xuXHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlv
bi50c1xuXG4vKipcbiAqIFRoZSBtYWluIFRvZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlw
ZSB7YW5ndWxhci5Nb2R1bGV9XG4gKi9cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3Qn
O1xuXG4gICAgdmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAg
ICAgICAgICAgLmNvbnRyb2xsZXIoJ3RvZG9DdHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAu
ZGlyZWN0aXZlKCd0b2RvQmx1cicsIHRvZG9CbHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgn
dG9kb0ZvY3VzJywgdG9kb0ZvY3VzKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2Fw
ZScsIHRvZG9Fc2NhcGUpXG4gICAgICAgICAgICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2Rv
U3RvcmFnZSk7XG59XG4iCittb2R1bGUuZXhwb3J0cyA9ICIvLyBsaWJzL2pxdWVyeS9qcXVlcnku
ZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNl
XG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElTIFBST1ZJREVEICpBUyBJUyogQkFT
SVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1Q
TElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXG5c
blNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlwaW5nIGZvciB0aGUgalF1ZXJ5IGxp
YnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFByb2plY3Q6IGh0dHA6Ly9qcXVlcnku
Y29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtvdiA8aHR0cHM6Ly9naXRodWIuY29t
L2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3RlciA8aHR0cHM6Ly9naXRodWIuY29t
L2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxlaSBHb21lcyA8aHR0cHM6Ly9naXRo
dWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS90YXNv
aWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxodHRwczovL2dpdGh1Yi5jb20vc2Vh
bnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9HdXV6PiwgS2VsbHkgU3Vt
bWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxpbj4sIEJhc2FyYXQgQWxpIFN5ZWQg
PGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9sYXMgV29sdmVyc29uIDxodHRwczov
L2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vyb25lIDxodHRwczovL2dpdGh1Yi5j
b20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9BbmRy
ZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qYW1l
c2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9naXRodWIuY29tL3NlaWtpY2hpPiwg
QmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluamFja21hbj4sIFBv
dWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkzMjk0PiwgSm9zaCBTdHJvYmwgPGh0
dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBSZWlsbHkgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9i
b3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBB
SkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgQUpBWCByZXF1ZXN0XG4qL1xuaW50
ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQg
dHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0IHRlbGxzIHRoZSBzZXJ2ZXIgd2hh
dCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGluIHJldHVybi4gSWYgdGhlIGFjY2Vw
dHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNv
IG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxuICAgICAqL1xuICAgIGFjY2VwdHM/
OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgYWxsIHJlcXVlc3RzIGFyZSBzZW50
IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCkuIElm
IHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2Uu
IENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6IFwianNvbnBcIiByZXF1ZXN0cyBk
byBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE5vdGUgdGhhdCBzeW5jaHJvbm91
cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUgYnJvd3NlciwgZGlzYWJsaW5nIGFu
eSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQXMgb2YgalF1ZXJ5IDEuOCwg
dGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAoJC5EZWZlcnJlZCkgaXMgZGVwcmVj
YXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9yL2NvbXBsZXRlIGNhbGxiYWNrIG9w
dGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIG9mIHRoZSBqcVhIUiBv
YmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRlcHJlY2F0ZWQganFYSFIuc3VjY2Vz
cygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIHBy
ZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRo
ZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGJlZm9yZSBp
dCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhlYWRlcnMsIGV0Yy4gVGhlIGpxWEhS
IGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzLiBUaGlzIGlzIGFu
IEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbiB3
aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGJlZm9yZVNlbmQg
b3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgcmVxdWVzdC5c
biAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpRdWVyeVhIUiwgc2V0dGluZ3M6IEpR
dWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gZmFsc2Us
IGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0byBiZSBjYWNoZWQgYnkgdGhlIGJy
b3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ugd2lsbCBvbmx5IHdvcmsgY29ycmVj
dGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3b3JrcyBieSBhcHBlbmRpbmcgXCJf
PXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJzLiBUaGUgcGFyYW1ldGVyIGlzIG5v
dCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3RzLCBleGNlcHQgaW4gSUU4IHdoZW4g
YSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBi
eSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBmaW5pc2hlcyAoYWZ0ZXIg
c3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCkuIFRoZSBmdW5jdGlvbiBn
ZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1M
SFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0ZWdvcml6aW5nIHRoZSBzdGF0dXMg
b2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1vZGlmaWVkXCIsIFwiZXJyb3JcIiwg
XCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJlcnJvclwiKS4gQXMgb2YgalF1ZXJ5
IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlv
bnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4
IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0
YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBzdHJpbmcv
cmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJtaW5lIGhvdyBqUXVlcnkgd2lsbCBw
YXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50IHR5cGUuICh2ZXJzaW9uIGFkZGVk
OiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
biAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3VyY2UgY29kZSwgYWpheCdzIG9wdGlv
biBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0IHRvIFwiZmFsc2VcIlxuICAgIC8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzc0
MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRhIHRvIHRoZSBzZXJ2ZXIsIHVzZSB0
aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJs
ZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBmaW5lIGZvciBtb3N0IGNhc2VzLiBJ
ZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10eXBlIHRvICQuYWpheCgpLCB0aGVu
IGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2ZW4gaWYgbm8gZGF0YSBpcyBzZW50
KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0aW9uIGRpY3RhdGVzIHRoYXQgdGhl
IGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5nIGFub3RoZXIgY2hhcnNldCB3aWxs
IG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhlIGVuY29kaW5nLlxuICAgICAqL1xu
ICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRoaXMgb2JqZWN0IHdpbGwg
YmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxhdGVkIGNhbGxiYWNrcy4gQnkgZGVm
YXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgYWpheCBz
ZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0aW5ncyBtZXJnZWQgd2l0aCB0aGUg
c2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICovXG4gICAgY29udGV4dD86IGFueTtc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhVHlwZS10by1kYXRhVHlw
ZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUgcmVzcG9uc2UuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRvIGZvcmNlIGEgY3Jvc3NEb21haW4g
cmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUgZG9tYWluLCBzZXQgdGhlIHZhbHVl
IG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgc2VydmVy
LXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4uICh2ZXJzaW9uIGFkZGVkOiAxLjUp
XG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERh
dGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBjb252ZXJ0ZWQgdG8gYSBxdWVyeSBz
dHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdzIGFwcGVuZGVkIHRvIHRoZSB1cmwg
Zm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9wdGlvbiB0byBwcmV2ZW50IHRoaXMg
YXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJlIEtleS9WYWx1ZSBwYWlycy4gSWYg
dmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVzIG11bHRpcGxlIHZhbHVlcyB3aXRo
IHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdHJhZGl0aW9uYWwgc2V0dGluZyAo
ZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRhPzogYW55O1xuICAgIC8qKlxuICAg
ICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUgdGhlIHJhdyByZXNwb25zZSBkYXRh
IG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmlsdGVyaW5nIGZ1bmN0aW9uIHRvIHNh
bml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1cm4gdGhlIHNhbml0aXplZCBkYXRh
LiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzOiBUaGUgcmF3IGRhdGEgcmV0dXJu
ZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBlJyBwYXJhbWV0ZXIuXG4gICAgICov
XG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFueSk6IGFueTtcbiAgICAvKipcbiAg
ICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4cGVjdGluZyBiYWNrIGZyb20gdGhl
IHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVyeSB3aWxsIHRyeSB0byBpbmZlciBp
dCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNwb25zZSAoYW4gWE1MIE1JTUUgdHlw
ZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5aWVsZCBhIEphdmFTY3JpcHQgb2Jq
ZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0LCBhbmQgYW55dGhpbmcg
ZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5cbiAgICAgKi9cbiAgICBkYXRhVHlw
ZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0
aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRocmVlIGFyZ3VtZW50czog
VGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QsIGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1cnJlZCBhbmQgYW4gb3B0
aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3VycmVkLiBQb3NzaWJsZSB2YWx1ZXMg
Zm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVsbCkgYXJlIFwidGltZW91dFwiLCBc
ImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJyb3JcIi4gV2hlbiBhbiBIVFRQIGVy
cm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhlIHRleHR1YWwgcG9ydGlvbiBvZiB0
aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRcIiBvciBcIkludGVybmFsIFNlcnZl
ciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJyb3Igc2V0dGluZyBjYW4gYWNjZXB0
IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0
dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3IgY3Jvc3MtZG9tYWluIHNj
cmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3RzLiBUaGlzIGlzIGFuIEFqYXggRXZl
bnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBz
dHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVy
IHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxlcnMgZm9yIHRoaXMgcmVxdWVzdC4g
VGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRvIHByZXZlbnQgdGhlIGdsb2JhbCBo
YW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBmcm9tIGJlaW5nIHRyaWdnZXJlZC4g
VGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgQWpheCBFdmVudHMuXG4gICAgICov
XG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgYWRk
aXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNlbmQgYWxvbmcgd2l0aCByZXF1ZXN0
cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0LiBUaGUgaGVhZGVyIFgtUmVxdWVz
dGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBhZGRlZCwgYnV0IGl0cyBkZWZhdWx0
IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGhlcmUuIFZhbHVlcyBpbiB0aGUg
aGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0dGVuIGZyb20gd2l0aGluIHRoZSBi
ZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGhl
YWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0
aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFu
Z2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyB0aGUg
TGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UsIGlnbm9yaW5nIHRo
ZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlxdWUgYWxzbyBjaGVja3MgdGhlICdl
dGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRjaCB1bm1vZGlmaWVkIGRhdGEuXG4g
ICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxsb3cg
dGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2duaXplZCBhcyBcImxvY2FsLFwiIChl
LmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkgZG9lcyBub3QgcmVjb2duaXplIGl0
IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIGN1cnJlbnRs
eSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVuc2lvbiwgYW5kIHdpZGdldC4gSWYg
dGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVk
IHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLiAodmVyc2lvbiBhZGRl
ZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAg
ICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgaW4gYSBqc29ucCByZXF1ZXN0
LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICdjYWxsYmFjaycgaW4gdGhlICdj
YWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgaW4gdGhlIHVybC4gU28ge2pzb25w
OidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25KU09OUExvYWQ9PycgcGFzc2VkIHRv
IHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRpbmcgdGhlIGpzb25wIG9wdGlvbiB0
byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcgdGhlIFwiP2NhbGxiYWNrXCIgc3Ry
aW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2UgXCI9P1wiIGZvciB0cmFuc2Zvcm1h
dGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28gZXhwbGljaXRseSBzZXQgdGhlIGpz
b25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsganNvbnA6IGZhbHNlLCBqc29ucENh
bGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9cbiAgICBqc29ucD86IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGZvciBh
IEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHJh
bmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGpRdWVyeS4gSXQgaXMgcHJlZmVy
YWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgYXMgaXQnbGwgbWFrZSBp
dCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQgcHJvdmlkZSBjYWxsYmFja3MgYW5k
IGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3BlY2lmeSB0aGUgY2FsbGJhY2sgd2hl
biB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIgY2FjaGluZyBvZiBHRVQgcmVxdWVz
dHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1c2UgYSBmdW5jdGlvbiBmb3IgdGhp
cyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBvZiBqc29ucENhbGxiYWNrIGlzIHNl
dCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uXG4gICAgICovXG4gICAganNv
bnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIG1pbWUgdHlwZSB0byBvdmVycmlk
ZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAg
IG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgcGFzc3dvcmQgdG8gYmUgdXNl
ZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhl
bnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQgaW4gdG8gdGhlIGRhdGEgb3B0aW9u
IGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5nIG90aGVyIHRoYW4gYSBzdHJpbmcp
IHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIGEgcXVlcnkgc3RyaW5nLCBm
aXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBcImFwcGxpY2F0aW9uL3gtd3d3LWZv
cm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgRE9NRG9jdW1lbnQsIG9yIG90
aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLlxuICAgICAq
L1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGxp
ZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMgdXNlZCAoZS5nLiwgY3Jvc3MtZG9t
YWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2NyaXB0XCIgZGF0YVR5cGUgYW5kIFwi
R0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIG9uIHRoZSBzY3JpcHQgdGFn
IHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUgY2hhcmFjdGVyIHNldCBvbiB0aGUg
bG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBvbiB0aGUgcmVtb3RlIHNjcmlw
dC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5kIGZ1bmN0aW9ucyB0byBiZSBjYWxs
ZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUuIGYgdGhlIHJl
cXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2RlIGZ1bmN0aW9ucyB0YWtlIHRoZSBz
YW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2s7IGlmIGl0IHJlc3VsdHMgaW4g
YW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0aGV5IHRha2UgdGhlIHNhbWUgcGFy
YW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAg
ICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxu
ICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBU
aGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1lbnRzOiBUaGUgZGF0YSByZXR1cm5l
ZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGRhdGFUeXBlIHBh
cmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3RhdHVzOyBhbmQgdGhlIGpxWEhSIChp
biBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QuIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVh
Y2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50
LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAgICAgKiBTZXQgYSB0aW1lb3V0IChp
biBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhpcyB3aWxsIG92ZXJyaWRlIGFueSBn
bG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgpLiBUaGUgdGltZW91dCBwZXJpb2Qg
c3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwgaXMgbWFkZTsgaWYgc2V2ZXJhbCBv
dGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBicm93c2VyIGhhcyBubyBjb25u
ZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHJlcXVlc3QgdG8gdGltZSBv
dXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkgMS40LnggYW5kIGJlbG93LCB0aGUg
WE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiB0aGUg
cmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2JqZWN0IG1lbWJlcnMgbWF5IHRocm93
IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHksIHNjcmlwdCBhbmQgSlNPTlAgcmVx
dWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVvdXQ7IHRoZSBzY3JpcHQgd2lsbCBy
dW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAgICAgKi9c
biAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUg
aWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBzdHlsZSBvZiBwYXJhbSBzZXJpYWxp
emF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwiUE9TVFwiIG9yIFwiR0VUXCIpLCBk
ZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAgcmVxdWVzdCBtZXRob2RzLCBzdWNo
IGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2VkIGhlcmUsIGJ1dCB0aGV5IGFyZSBu
b3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAgKi9cbiAgICB0eXBlPzogc3RyaW5n
O1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVybD86IHN0cmluZztcbiAgICAvKipc
biAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNw
b25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xu
ICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZvciBjcmVh
dGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZhdWx0cyB0byB0aGUgQWN0aXZlWE9i
amVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0cFJlcXVlc3Qgb3RoZXJ3aXNlLiBP
dmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGZvciBYTUxIdHRwUmVx
dWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3RvcnkuXG4gICAgICovXG4gICAgeGhyPzog
YW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBmaWVsZE5hbWUtZmllbGRWYWx1ZSBw
YWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0LiBGb3IgZXhhbXBsZSwgeW91IGNh
biB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0cnVlIGZvciBjcm9zcy1kb21haW4g
cmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0aGUgd2l0aENyZWRlbnRpYWxzIHBy
b3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0aXZlIFhIUiBhbmQgdGh1cyBDT1JT
IHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUgdGhpcyBmbGFnLiBGb3IgdGhpcyBy
ZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41LjErIHNob3VsZCB5b3UgcmVxdWly
ZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgeGhy
RmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5cbi8qXG4gICAgSW50ZXJmYWNl
IGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVhIUiBleHRlbmRzIFhN
TEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xuICAgIG92ZXJyaWRlTWltZVR5cGUo
bWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChzdGF0dXNUZXh0Pzogc3RyaW5nKTog
dm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgY2FsbGJhY2tcbiov
XG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFkZCguLi5jYWxsYmFja3M6IGFueVtd
KTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVtcHR5KCk6IGFueTtcbiAgICBmaXJl
KC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmlyZWQoKTogYm9vbGVhbjtcbiAgICBm
aXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIGhhcyhjYWxs
YmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFueTtcbiAgICBsb2NrZWQoKTogYm9v
bGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbn1cblxuLypcbiAg
ICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Agd2l0aCBub24talF1ZXJ5IHByb21p
c2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+IHtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4g
VSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFs
dWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFu
eSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxs
OiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86
IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgcHJvbWlz
ZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4g
ICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlz
Q2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6
IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFj
a3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJh
Y2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tz
OiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBh
bnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIC8vIERlcHJlY2F0ZWQgLSBnaXZl
biBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBmYWls
RmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0ZpbHRlcj86ICh4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNz
PzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAg
ICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxV
Piwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4u
cHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFu
eVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG5c
biAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNrXG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlb
XSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpR
dWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtd
KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55
W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBK
UXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlb
XSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55
W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIElu
dGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQcm9taXNlPFQ+IHtcbiAg
ICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXND
YWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tz
OiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxi
YWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2Fs
bGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3ND
YWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBub3RpZnkoLi4uYXJn
czogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBub3RpZnlXaXRoKGNvbnRleHQ6IGFu
eSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlamVjdCguLi5h
cmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlamVjdFdpdGgoY29udGV4dDog
YW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVzb2x2ZSh2
YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlKC4uLmFyZ3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdz
OiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0YXRlKCk6IHN0cmluZztcblxuICAg
IHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbn1cblxuLypcbiAgICBJ
bnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2YgdGhlIFczQyBldmVudCBvYmplY3Rc
biovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBFdmVudCB7XG4g
ICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBFbGVtZW50O1xuICAgIGlzRGVmYXVs
dFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRpYXRlUHJvcG9nYXRpb25TdG9wcGVk
KCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBu
YW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVsdCgpOiBhbnk7XG4gICAgcmVsYXRl
ZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtcbiAgICBzdG9wSW1tZWRpYXRlUHJv
cGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBwYWdl
WDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgd2hpY2g6IG51bWJlcjtcbiAgICBt
ZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCBl
eHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgYWx0S2V5OiBib29sZWFuO1xuICAg
IGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbiAgICBzaGlmdEtleTog
Ym9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QgZXh0ZW5kcyBK
UXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246IG51bWJlcjtcbiAgICBjbGllbnRY
OiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAg
ICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVy
O1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5ZOiBudW1iZXI7XG59XG5cbmludGVy
ZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qg
e1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVtYmVyO1xuICAgIGtleTogYW55O1xu
ICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBvcFN0YXRlRXZlbnRP
YmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAgIG9yaWdpbmFsRXZlbnQ6
IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVlcnlFdmVudE9iamVjdCBleHRlbmRz
IEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCwgSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3QsIEpRdWVyeVBvcFN0YXRlRXZlbnRP
YmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2YgcHJvcGVydGllcyBvZiB0aGUgY3Vy
cmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5U3VwcG9ydCB7XG4gICAgYWpheD86
IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xuICAgIGNoYW5nZUJ1YmJsZXM/OiBi
b29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xuICAgIGNoZWNrT24/OiBib29sZWFu
O1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0PzogYm9vbGVhbjtcbiAgICBocmVm
Tm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlhbGl6ZT86IGJvb2xlYW47XG4gICAg
bGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVDaGVja2VkPzogYm9vbGVh
bjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAgIG9wYWNpdHk/OiBib29sZWFuO1xu
ICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRTZWxlY3RlZD86IGJvb2xlYW47XG4g
ICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5bGU/OiBib29sZWFuO1xuICAgIHN1
Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5PzogYm9vbGVhbjtcbn1cblxuaW50ZXJm
YWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBzdHJpbmc7XG4gICAgKG9iajogYW55
LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJm
YWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMgKHdpdGggJC5FdmVudCkuIEl0IGlz
XG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBpbmxpbmUgaW4gSlF1ZXJ5U3RhdGlj
IHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1Y3Rpb24gZnVuY3Rpb24gd2l0aCBz
cGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lmaWMgZXZlbnQgb2JqZWN0cy5cbiAq
L1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ige1xuICAgIChuYW1lOiBzdHJpbmcs
IGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xuICAgIG5ldyAobmFt
ZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbn1c
blxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3BlY2lmeSBlYXNpbmcgZnVuY3Rpb25z
LlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAgICBsaW5lYXIocDogbnVtYmVyKTog
bnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLypcbiAgICBTdGF0
aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5kIGpRdWVyeSB0aGVtc2VsdmVzKVxu
Ki9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBh
biBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFq
YXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBz
ZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgo
c2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAg
KiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3Zh
bHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBh
cmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5h
amF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDogc3RyaW5nLCBzZXR0aW5ncz86IEpR
dWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBj
dXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBlYWNo
IHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFqYXgo
KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMgQW4gb3B0aW9uYWwgc3RyaW5nIGNv
bnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGRhdGFUeXBlc1xuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBB
amF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoZGF0YVR5cGVzOiBzdHJp
bmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdz
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEhhbmRs
ZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBl
YWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFq
YXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVm
YXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQ
cmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0
dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG5cbiAgICBhamF4U2V0dGlu
Z3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipcbiAgICAgICogU2V0IGRlZmF1bHQg
dmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRzIHVzZSBpcyBub3QgcmVjb21tZW5k
ZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0IG9mIGtleS92YWx1ZSBw
YWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4IHJlcXVlc3QuIEFsbCBvcHRpb25z
IGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNldHVwKG9wdGlvbnM6IEpRdWVyeUFq
YXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4
ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBU
aGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxs
aWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBn
ZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
R0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3
aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERl
ZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4g
ICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcg
dGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFy
YW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJl
cXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEg
ZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1s
LCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywg
ZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBp
ZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29k
ZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2gg
dGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBv
ciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAg
ICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQg
aWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmlu
ZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAq
IExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBmaWxlIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0ZSBpdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3JpcHQ6IHN0cmluZywgdGV4dFN0YXR1
czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG5cbiAgICBw
YXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
dXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBz
ZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBl
eGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMg
cHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0
OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAg
ICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcp
OiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0
cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAg
ICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRv
IHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNh
bGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
IFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhh
dCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVk
IGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwg
c2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRh
PzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhI
UjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAg
IC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1Qg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRh
VHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBA
cGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIu
IERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRt
bCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vz
cz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEEg
bXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIHBvd2Vy
ZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgZmxhZ3MgdGhhdCBjaGFu
Z2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4gICAgICovXG4gICAgQ2FsbGJhY2tz
KGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5cbiAgICAvKipcbiAgICAgKiBIb2xk
cyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVyeSdzIHJlYWR5IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlYWR5IGhvbGQg
aXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAgICovXG4gICAgaG9sZFJlYWR5KGhv
bGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBh
bnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgKG9iamVj
dDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSlF1ZXJ5O1xu
ICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAoZnVuYzogRnVuY3Rpb24pOiBKUXVl
cnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAgICAoKTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250cm9sIG9mIHRoZSAkIHZhcmlhYmxl
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBBIEJvb2xlYW4gaW5kaWNhdGluZyB3
aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxlcyBmcm9tIHRoZSBnbG9iYWwgc2Nv
cGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAgKi9cbiAgICBub0NvbmZsaWN0KHJl
bW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBh
IHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBv
YmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9u
b3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUg
RGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xu
ICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPltdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRl
IGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5
IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0
cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4u
ZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3Zp
ZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBt
b3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3lu
Y2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3Ig
bW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAg
ICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
blxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICBjc3NOdW1iZXI6
IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0cmFyeSBkYXRhIGFzc29jaWF0ZWQg
d2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNl
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3Nv
Y2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0
aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgZGF0
YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3Ry
aW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBuYW1l
ZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1l
bnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2Np
YXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhl
IHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVu
dCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBu
YW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVs
ZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1l
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNz
b2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50
KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJp
bmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4g
ICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4g
ICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JD
YWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShlbGVtZW50OiBFbGVtZW50
LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBEZWZlcnJl
ZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5RGVmZXJyZWQ8VD4pID0+IGFueSk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGZ4OiB7IHRpY2s6ICgp
ID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgpID0+IHZvaWQ7IHNwZWVkczogeyBz
bG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBib29sZWFuOyBzdGVwOiBhbnk7IH07
XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnks
IGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgcHJveHkoY29udGV4dDog
YW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuXG4gICAgRXZlbnQ6IEpR
dWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAgICBlcnJvcihtZXNz
YWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZXhwcjogYW55
O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cgd2Ugd2FudCB0byB0eXBlIHRoaXNc
biAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAgIHN1cHBvcnQ6
IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBjb250YWlucyhjb250YWlu
ZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBlYWNoKGNv
bGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IGFueSwgdmFsdWVPZkVsZW1l
bnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29sbGVjdGlvbjogSlF1ZXJ5LCBjYWxs
YmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogSFRNTEVsZW1lbnQp
ID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rpb246IFRbXSwgY2FsbGJhY2s6IChp
bmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IFQpID0+IGFueSk6IGFueTtcblxu
ICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG4gICAgZXh0ZW5k
KGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcblxuICAg
IGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4gICAgZ3JlcDxUPihhcnJheTogVFtd
LCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBib29s
ZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAgaW5BcnJheTxUPih2YWx1ZTogVCwg
YXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xuXG4gICAgaXNBcnJheShv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47
XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNOdW1lcmljKHZhbHVl
OiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xu
ICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1hNTERvYyhub2RlOiBOb2Rl
KTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFueSk6IGFueVtdO1xuXG4gICAgbWFw
PFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5B
cnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChhcnJheTogYW55LCBjYWxsYmFjazog
KGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTogYW55KSA9PiBhbnkpOiBhbnk7XG5c
biAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRbXSk6IFRbXTtcbiAgICBtZXJnZTxU
LFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107XG5cbiAgICBub29wKCk6IGFueTtc
blxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpTT04oanNvbjogc3RyaW5nKTogYW55
O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gWE1MIGRvY3VtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgdG8g
YmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0YTogc3RyaW5nKTogWE1MRG9jdW1l
bnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3
UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZztc
blxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAgICB1bmlxdWUoYXJyOiBhbnlbXSk6
IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gYXJyYXkg
b2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgSFRNTCBzdHJpbmcgdG8g
YmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9NIGVsZW1lbnQgdG8gc2VydmUgYXMg
dGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkXG4g
ICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8g
aW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBzdHJpbmdcbiAgICAgKi9cbiAgICBw
YXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRNTEVsZW1lbnQsIGtlZXBTY3JpcHRz
PzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9uKGVsZW06IGFueSwgcHJvcGVydGll
czogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBlYXNpbmc6IEpRdWVyeUVhc2luZztc
bn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1lbWJlcnNcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBsZXRlKGhhbmRsZXI6IGFueSk6IEpR
dWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNl
dHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFNl
bmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2Vw
dGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0YXJ0KGhhbmRsZXI6ICgpID0+
IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRp
bmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBsb2FkKHVy
bDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFueSk6IEpRdWVyeTtcblxuICAgIHNl
cmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJyYXkoKTogYW55W107XG5cbiAgICAv
LyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lczogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJyZW50Q2xhc3M6IGFueSkgPT4gc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5qcXVlcnkuY29tL2FkZEJhY2svXG4g
ICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuXG4gICAgYXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJp
bmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcs
IGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhdHRy
KG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBi
b29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAgaHRtbChodG1sU3RyaW5nOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDogKGluZGV4OiBudW1iZXIsIG9sZGh0
bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55O1xuICAgIHByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChtYXA6
IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCBmdW5jOiAoaW5k
ZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUNs
YXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAgICByZW1vdmVDbGFzcyhmdW5jOiAo
aW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZVByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b2dnbGVDbGFzcyhjbGFzc05h
bWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKHN3
dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhmdW5jOiAoaW5kZXg6IGFu
eSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHZhbCgpOiBh
bnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB2YWwo
ZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0
IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICov
XG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNl
dCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmlu
ZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1v
cmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAg
KiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9c
biAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBz
ZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9y
IG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4g
dGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24g
b2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMu
XG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBu
dW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZh
bHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5k
ZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBh
cyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1
ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IG51bWJlcik6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQg
b2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFu
IG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBzZXQuXG4gICAgICovXG4gICAgY3Nz
KHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAgIGhlaWdodCgpOiBudW1iZXI7XG4g
ICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KHZhbHVlOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQoKTogbnVtYmVyO1xuICAgIGlubmVy
SGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBpbm5lcldpZHRoKCk6IG51bWJl
cjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXQo
KTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xuICAgIG9mZnNldChjb29yZGluYXRl
czogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAoaW5kZXg6IGFueSwgY29vcmRzOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW4/OiBi
b29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZhbHVlOiBudW1iZXIsIGluY2x1ZGVN
YXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lu
PzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoKHZhbHVlOiBudW1iZXIsIGluY2x1
ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgcG9zaXRpb24oKTogeyB0b3A6IG51
bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xsTGVmdCgpOiBudW1iZXI7XG4gICAg
c2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgc2Nyb2xsVG9wKCk6IG51
bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHdpZHRo
KCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHdpZHRo
KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgoZnVuYzogKGluZGV4OiBhbnksIGhl
aWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEYXRhXG4gICAgY2xlYXJRdWV1
ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBkYXRhKGtleTogc3RyaW5nLCB2
YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuICAgIGRlcXVldWUo
cXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShuYW1lT3JMaXN0
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBwcm9taXNlKHR5cGU/OiBh
bnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIC8vIEVmZmVjdHNc
biAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGNvbXBsZXRlPzog
RnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4g
ICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IHsgZHVyYXRpb24/OiBhbnk7IGVh
c2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsgc3RlcD86IEZ1bmN0aW9uOyBxdWV1
ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0pOiBKUXVlcnk7XG5cbiAgICBkZWxh
eShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBm
YWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVJ
bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVt
YmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwg
b3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgpOiBKUXVlcnk7XG5cbiAgICBoaWRl
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBoaWRlKGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2hv
dyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVVcChk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVVcChkdXJh
dGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxu
ICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0Vu
ZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzog
c3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoc2hvd09ySGlkZTog
Ym9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xuICAgIGJpbmQoZXZlbnRUeXBlOiBz
dHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBl
dmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5k
KGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIGJsdXIoaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJsdXIo
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjaGFu
Z2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNoYW5nZSgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hh
bmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwi
Y2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNsaWNrKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vz
aW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1
c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzaW4oZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywg
dG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgYW5kIGxlYXZlcyB0
aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlckluIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyB0aGUgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91
c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxl
ckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnksIGhhbmRsZXJPdXQ6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMs
IHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0
aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlckluT3V0IEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhl
IGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluT3V0OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwiXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVzc1wiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNz
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5dXBc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXVwKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
a2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChl
dmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91
c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWVudGVyXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50
ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVu
IHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2
ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vt
b3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91dFwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdmVy
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92
ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgb2Zm
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1
Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5c
biAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhl
IG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5k
bGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNs
eSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5c
biAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yPzogc3RyaW5nLCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5k
IG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNr
XCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUg
ZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihl
dmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVy
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qgd2hlcmUgdGhlIHN0cmlu
ZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBoYW5kbGVy
IGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICog
QHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3Jp
Z2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4g
ICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVl
IGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0
IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJhbWV0ZXIgYXJncyBpcyBmb3Igb3B0
aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRyaWdnZXIoKS4gTm90ZSB0aGF0IHRo
ZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBtdXN0IGJl
IG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czog
c3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0LCAuLi5hcmdz
OiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVu
dCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMg
XCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMg
bnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJl
YWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZh
bHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNp
bXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywg
c2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5k
bGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1l
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBl
bGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBv
ciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMg
dGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNz
ZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxu
ICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBh
bnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyBy
ZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9y
IGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0
IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0
byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9j
Y3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBz
ZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0
dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIg
aXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3Jl
IEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwi
IG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5k
bGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVk
IGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0
IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20g
ZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgZGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0
aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxl
bWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9y
IG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2Vz
LCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFy
YW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBv
ZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNl
bGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQg
d2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRo
ZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rp
b24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEg
aGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVj
dXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBl
cyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3du
Lm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRv
IGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJp
Z2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBl
dmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxl
bWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxl
ciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEg
ZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25l
KGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4g
VGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVu
dCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2gg
dGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZl
bnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2Vu
dCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAg
ICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2Vu
ZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVy
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdh
eXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBA
cGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRh
IHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHsgW2tleTog
c3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywgZGF0YT86IGFueSk6IEpRdWVyeTtc
blxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlzIHJlYWR5LlxuICAgICAqL1xuICAg
IHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHJl
c2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3QoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJtaXRcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczog
YW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpOiBK
UXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQ
YXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVuYmluZChldmVudFR5cGU/OiBzdHJp
bmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBmbHM6IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgdW5kZWxlZ2F0ZSgpOiBK
UXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50czogYW55KTogSlF1ZXJ5O1xu
ICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB1bmxvYWQo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAg
ICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3RyaW5nO1xuXG4gICAgZXJyb3IoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFu
eVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10sIG5hbWU6IGFueSwg
YXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNYW5pcHVsYXRpb25cbiAgICBhZnRl
ciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZnRlcihmdW5jOiAoaW5kZXg6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1
ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIGJlZm9y
ZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBiZWZvcmUoZnVuYzogKGluZGV4OiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdpdGhEYXRhQW5kRXZlbnRzPzogYm9v
bGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIGRl
dGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGVtcHR5KCk6IEpRdWVyeTtcblxu
ICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuICAgIGluc2VydEJlZm9yZSh0
YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQoLi4uY29udGVudDogYW55W10pOiBK
UXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlQWxsKHRhcmdldDog
YW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVuYzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiBhbnkpOiBKUXVlcnk7XG4g
ICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtdO1xuXG4gICAgdW53cmFwKCk6IEpR
dWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3Jh
cChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcEFsbCh3cmFw
cGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBJbm5lcih3cmFwcGluZ0VsZW1l
bnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBlYWNoKGZ1bmM6IChpbmRl
eDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBnZXQoaW5kZXg/
OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1iZXI7XG4gICAgaW5kZXgoc2VsZWN0
b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVtZW50OiBhbnkpOiBudW1iZXI7XG5c
biAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgc2VsZWN0b3I6IHN0
cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4OiBudW1iZXJdOiBIVE1MRWxlbWVu
dDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2VsZWN0b3I6IHN0cmluZywgY29udGV4
dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xu
ICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkKG9iajogSlF1ZXJ5KTogSlF1
ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9z
ZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3Ry
aW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KG9iajogSlF1ZXJ5
KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGNsb3Nl
c3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50KTogYW55W107XG5cbiAgICBjb250
ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5O1xuXG4gICAgZXEoaW5kZXg6IG51
bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRl
cihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKG9iajogSlF1ZXJ5KTogSlF1ZXJ5
O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbmQoZWxlbWVu
dDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBm
aXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xuXG4gICAgaXMoc2VsZWN0b3I6IHN0
cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IGJvb2xl
YW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtcbiAgICBpcyhvYmo6IEpRdWVyeSk6
IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxuICAgIG1hcChjYWxsYmFjazogKGlu
ZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG5l
eHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0QWxsKHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0
ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKG9iaj86IEpRdWVyeSwgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgbm90
KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5c
biAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50KHNlbGVjdG9yPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldlVudGls
KHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJldlVu
dGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJl
dlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2li
bGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzbGljZShzdGFydDogbnVt
YmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAvLyBVdGlsaXRpZXNcblxuICAgIHF1
ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKHF1ZXVlTmFtZTogc3Ry
aW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbiAgICBxdWV1ZShuZXdRdWV1
ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xhcmUgbW9kdWxlIFwianF1ZXJ5XCIg
e1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBqUXVlcnk6IEpRdWVyeVN0YXRpYztc
bmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxpYnMvYW5ndWxhci9hbmd1bGFyLmQu
dHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIgSlMgMS4wXG4vLyBQcm9qZWN0OiBo
dHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMgYnk6IERpZWdvIFZpbGFyIDxodHRw
Oi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHVi
LmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuXG5cbmRlY2xhcmUgdmFyIGFuZ3Vs
YXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0IGZvciBwYWlubGVzcyBkZXBlbmRl
bmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAkaW5qZWN0OnN0cmluZ1td
O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBuZyBtb2R1bGUgKGFuZ3VsYXIuanMp
XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1vZHVsZSBuZyB7XG5cbiAgICAvLyBB
bGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNlXG4gICAgaW50ZXJmYWNl
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBhbnk7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRpY1xuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQoY29udGV4dDogYW55LCBmbjogRnVu
Y3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4gICAgICAgIGJvb3RzdHJhcChlbGVt
ZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAg
ICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9kdWxlcz86IGFueVtdKTogYXV0by5J
SW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogRWxlbWVudCwgbW9k
dWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAo
ZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGluYXRpb24/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0aWM7XG4gICAgICAgIGVxdWFscyh2
YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBleHRlbmQoZGVzdGlu
YXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7XG4gICAgICAgIGZvckVhY2gob2Jq
OiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IGFueSwgY29udGV4dD86
IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjogc3RyaW5nKTogYW55O1xuICAgICAg
ICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKG1vZHVsZXM/OiBh
bnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgaXNBcnJheSh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRWxlbWVudCh2YWx1
ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzT2Jq
ZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1N0cmluZyh2YWx1ZTogYW55KTog
Ym9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgLyoqIGNvbnN0cnVj
dCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZpY2lhbCBkb2NzOiBJbnRlcmZhY2Ug
Zm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0XHRzZWU6IGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0Ki9cbiAgICAgICAgbW9kdWxlKFxu
ICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUgeW91IHdhbnQgdG8gY3JlYXRlICov
XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAvKiogbmFtZSBvZiBtb2R1
bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAgIHJlcXVpcmVzPzogc3RyaW5nW10s
XG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6IElNb2R1bGU7XG4gICAgICAgIG5v
b3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0b0pzb24ob2JqOiBhbnksIHByZXR0
eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVyY2FzZShzdHI6IHN0cmluZyk6IHN0
cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgZnVsbDogc3RyaW5nO1xuICAg
ICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbm9yOiBudW1iZXI7XG4gICAg
ICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNvZGVuYW1lOiBzdHJpbmc7XG4gICAg
ICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTW9kdWxlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElNb2R1bGUge1xuICAgICAgICBh
bmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0
aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihvYmplY3Q6IE9iamVjdCk6
IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0
VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9y
bWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhjb25maWdGbjog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZp
Y2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRv
IGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWco
aW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29uc3Rh
bnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgY29uc3RhbnQo
b2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmlu
ZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGNv
bnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10p
OiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVjdCA6IE9iamVjdCk6IElNb2R1bGU7
XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgaW5saW5lQW5u
b3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG9iamVj
dDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZp
Y2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4g
ICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIo
bmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFu
eVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtc
biAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIGlu
bGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGluaXRpYWxpemF0aW9u
RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgc2Vydmlj
ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1
bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICB2
YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAgLy8gUHJvcGVydGllc1xuICAgICAg
ICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBzdHJpbmdbXTtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVz
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdHRyaWJ1dGVzIHtcblx0
Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHNjb3BlZCBhdHRy
aWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8gYmVjYXVzZSB5b3UgaGF2ZSB0byB1
c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9vIGJ1dCBJIGRvbid0IGtub3cgb2Yg
YSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBsaW1pdGVkIHRvIHJldHVy
biBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVtOiBodHRwOi8vc3RhY2tvdmVyZmxv
dy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0cmluZ106IGFueTtcblxuICAgICAg
ICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBw
YXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVu
YWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gZm9y
IHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENsYXNzKGNsYXNzVmFsOiBzdHJpbmcp
OiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZp
ZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZVxuICAgICAgICAvLyBlbGVtZW50
LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJp
Z2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVtb3ZhbC5cbiAgICAgICAgJHJlbW92
ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFNldCBET00gZWxl
bWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFuIGludGVycG9sYXRlZCBhdHRyaWJ1
dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25j
ZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAvLyBmb2xsb3dpbmcgY29tcGlsYXRp
b24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIgdGhlXG4gICAgICAgIC8v
IGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAkb2JzZXJ2ZShuYW1lOiBzdHJp
bmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgLy8gQSBtYXAg
b2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3JtYWxpemVkIG5hbWUuIFRo
aXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVyc2UgbG9va3VwIGZyb20gbm9ybWFs
aXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAgICAgICRhdHRyOiBPYmplY3Q7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRm9ybUNvbnRyb2xsZXJcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOmZvcm0u
Rm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZv
cm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGly
dHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6
IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkYWRkQ29udHJvbChjb250
cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkcmVtb3ZlQ29udHJv
bChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkc2V0RGly
dHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOm5nTW9kZWwuTmdNb2Rl
bENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU5nTW9k
ZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2b2lkO1xuICAgICAgICAkc2V0VmFs
aWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lk
O1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2aWV3VmFsdWUgYW5kIG1vZGVsVmFs
dWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAgIC8vIHR5cGVzIGRvIHdvcmsgYW5k
IGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAkc2V0Vmlld1ZhbHVlKHZhbHVlOiBh
bnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7XG5cbiAgICAgICAgJG1vZGVsVmFs
dWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVsUGFyc2VyW107XG4gICAgICAgICRm
b3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAg
ICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAg
ICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0dGVyIHtcbiAgICAgICAgKHZhbHVl
OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2Nv
cGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29w
ZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU2NvcGUge1xu
ICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiBzdHJpbmcpOiBhbnk7
XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBhbnk7XG5cbiAg
ICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJF
dmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAgICAgICAgJGRpZ2VzdCgpOiB2b2lk
O1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJF
dmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBi
dXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsKGV4cHJl
c3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtcbiAgICAgICAgJGV2YWwoZXhwcmVz
c2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86IE9iamVjdCk6IGFueTtcblxuICAg
ICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGlt
cGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjog
c3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiAoc2NvcGU6IElT
Y29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZSBieSB0
aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lcbiAgICAgICAgJG5ldyhpc29sYXRl
PzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24obmFtZTogc3RyaW5nLCBsaXN0ZW5l
cjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogRnVuY3Rp
b247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86
IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3
YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwg
b2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJv
b2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3Bl
OiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9v
bGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6
IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55
LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0
aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcs
IGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkg
PT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNz
aW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9s
ZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAg
ICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51bWJlcjtcblxuICAgICAgICAvLyBI
aWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5kaW5nczogYW55O1xuICAgICAgICAk
JHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyRXZlbnQge1xuICAg
ICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBjdXJyZW50U2NvcGU6IElTY29wZTtc
biAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogRnVuY3Rpb247
XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gQXZhaWxh
YmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRcbiAgICAgICAgc3RvcFByb3BhZ2F0
aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
V2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElXaW5kb3dT
ZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1bWVudGVkLCBzbyB3ZSBuZWVkIHRv
IGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk/OiBudW1i
ZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNl
bChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rp
b24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4p
OiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6
IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmlsdGVy
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmls
dGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJQ
cm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRmlsdGVyU2Vy
dmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeTogRnVuY3Rpb24pOiBJU2Vy
dmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExv
Y2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYWxlU2Vy
dmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgICAgLy8gVGhlc2UgYXJlIG5vdCBk
b2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIncyBpMThuIGZpbGVzIGZvciBleGVt
cGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0
b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2Ny
aXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55KSA9PiBzdHJpbmc7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAg
REVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBfU0VQOiBzdHJpbmc7XG4gICAgICAg
IFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3JbXTtcbiAgICAgICAgQ1VS
UkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJQ
YXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDogbnVtYmVyO1xuICAgICAgICBtaW5G
cmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJlcjtcbiAgICAgICAgcG9zUHJlOiBz
dHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAgICAgICBuZWdQcmU6IHN0cmluZztc
biAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdTaXplOiBudW1iZXI7XG4gICAgICAg
IGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlRGF0ZVRpbWVG
b3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBTSE9S
VE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRE
QVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5nW107XG4gICAgICAgIG1lZGl1bTog
c3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAgICAgICBmdWxsRGF0ZTogc3RyaW5n
O1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1EYXRlOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1UaW1lOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
TG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2FsbDtcbiAgICAgICAgZXJyb3I6IElM
b2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAgICAgICAgbG9nOiBJTG9nQ2FsbDtc
biAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4gICAgLy8gV2UgZGVmaW5lIHRoaXMg
YXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9wZW4gaXQgbGF0ZXIgZm9yXG4gICAg
Ly8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNlIElMb2dDYWxsIHtcbiAgICAgICAg
KC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElQ
YXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjogc3RyaW5nKTogSUNvbXBpbGVkRXhw
cmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVkRXhwcmVzc2lvbiB7XG4g
ICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcblxuICAgICAgICAvLyBJ
ZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBpcyBnb25uYSBiZSB1c2VkIHNpbmNl
IHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCBjaGVjayB0aGUgcGFyYW1l
dGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0ZW5jeS4gSWYgY29uc3VtZXJcbiAg
ICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNzIHRoZSB1bmRlZmluZWQgdmFsdWUg
ZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6IGFueSwgdmFsdWU6IGFueSk6IGFu
eTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhdGlvblNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9u
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblBy
b3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGV2X2d1
aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJzVXJsKCk6IHN0cmluZztcbiAgICAg
ICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3SGFzaDogc3RyaW5nKTogSUxvY2F0
aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgoKTogc3Ry
aW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90b2NvbCgpOiBzdHJpbmc7XG4gICAg
ICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKCk6IGFueTtc
biAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFyYW1ldGVyVmFsdWU6IGFueSk6IElM
b2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJpbmc7XG4gICAgICAgIHVybCh1cmw6
IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2Nh
dGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGhhc2hQcmVm
aXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHByZWZpeDogc3RyaW5nKTogSUxvY2F0
aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBib29sZWFuO1xuXG4gICAgICAgIC8v
IERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVyIGlzIHN0cmluZywgYnV0XG4gICAg
ICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJvb2xlYW4sIHdoaWNoIG1ha2VzIG1v
cmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHRvZ2dsZXJcbiAgICAgICAgaHRt
bDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50U2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9jdW1lbnRcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2VydmljZSBleHRlbmRzIERvY3VtZW50
IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFeGNlcHRpb25IYW5kbGVyU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZXhjZXB0
aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRXhjZXB0
aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0aW9uOiBFcnJvciwgY2F1c2U/OiBz
dHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJv
b3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7fVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVFT
ZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJvbWlzZTxhbnk+W10pOiBJUHJvbWlz
ZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZlcnJlZDxUPjtcbiAgICAgICAgcmVq
ZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xuICAgICAgICB3aGVuPFQ+KHZhbHVl
OiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElQcm9taXNlPFQ+IHtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQp
ID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNl
VmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjog
YW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHBy
b21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21p
c2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVh
c29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xu
ICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElQcm9t
aXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+
KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCk6IElQcm9taXNlPFRSZXN1bHQ+
O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxseUNhbGxiYWNrOiAoKT0+YW55KTpJ
UHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSURlZmVycmVkPFQ+IHtc
biAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xuICAgICAgICByZWplY3QocmVhc29u
PzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRlPzphbnkpOiB2b2lkO1xuICAgICAg
ICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xuICAgICAgICAoKTogdm9pZDtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZp
Y2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Nyb2xsaW5nKCk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ2FjaGVGYWN0b3J5U2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY2FjaGVGYWN0b3J5
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDYWNoZUZhY3RvcnlTZXJ2
aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUgb3B0aW9uc01hcCB0byBoYXZlIHRo
ZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGl0J3MgdGhlIE9OTFkg
b3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvZGF5LCBhIGNvbnN1bWVy
XG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGFzc29jaWF0ZSBzb21lIG90aGVy
IG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgICAgLy8oY2FjaGVJZDogc3RyaW5n
LCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogQ2FjaGVPYmplY3Q7XG4gICAg
ICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0p
OiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9kcyBiZWxsb3cgYXJlIG5vdCBkb2N1
bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAgICBnZXQgKGNhY2hlSWQ6IHN0cmlu
Zyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNhY2hlT2JqZWN0IHtc
biAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAg
c2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3QgZ2FyYW50ZWVkIHRvIGhhdmUsIHNp
bmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAgICAgICAgICAgLy9jYXBhY2l0eTog
bnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5OiBzdHJpbmcsIHZhbHVlPzogYW55
KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6IGFueTtcbiAgICAgICAgcmVtb3Zl
KGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlQWxsKCk6IHZvaWQ7XG4gICAgICAg
IGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50OiBzdHJpbmcsIHRyYW5zY2x1ZGU/
OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBs
YXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCwgdHJhbnNjbHVk
ZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVt
cGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBKUXVlcnksIHRyYW5zY2x1
ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRl
bXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZVBy
b3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1l
OiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSUNvbXBpbGVQcm92aWRlcjtc
blxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBpcyB0aGVyZS4uLlxuICAgICAgICBk
aXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBpbGVQcm92aWRlcjtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uIHtcbiAgICAgICAgLy8gTGV0
J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4ncyBzaWduYXR1cmVcbiAgICAgICAg
KHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xvbmVkRWxlbWVudD86IEpRdWVyeSwg
c2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyU2VydmljZSB7XG4gICAgICAgIC8v
IEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc3RhdGUgdGhpcywgbG9jYWxzIGFy
ZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9j
YWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxlck5hbWU6IHN0cmluZywgbG9jYWxz
PzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29udHJvbGxlclByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmlu
ZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgIHJlZ2lz
dGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6
IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBTZXJ2aWNlIHtcbiAgICAg
ICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3QgYmUgcHJvdmlkZWQuLi5cbiAgICAg
ICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAg
Z2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0
dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/
OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAganNvbnAodXJsOiBzdHJpbmcsIFJl
cXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcG9zdCh1cmw6
IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZp
ZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQgaXQgaXMgZG9jdW1lbnRlZCBhcyBw
dWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0czogYW55W107XG4gICAgfVxuXG4g
ICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAgIC8vIFNvbWUgb3BldGlvbnMgbWln
aHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3QuXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwI1VzYWdlIGZvciBvcHRpb25z
IGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVzdENvbmZpZyB7XG4gICAgICAgIG1l
dGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgcGFyYW1zPzogYW55
O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24gc3RydWN0dXJlLi4uICBwZXJoYXBz
IHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxuICAgICAgICBoZWFkZXJzPzogYW55
O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29s
ZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0aXBsZSB0eXBlcywgc28gbGV0J3Mg
ZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9y
bVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNlPzogYW55O1xuICAgICAg
ICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNlXG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAgICAgKGRhdGE6IFQsIHN0YXR1czog
bnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmcsIGNvbmZpZzog
SVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBUO1xuICAgICAgICBzdGF0dXM/OiBu
dW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7
XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHN1Y2Nlc3Mo
Y2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAg
ICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21p
c2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6
IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzog
KHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8
VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9u
c2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJy
b3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFu
eSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb3Zp
ZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVz
dENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICAgICAgcmVzcG9uc2VJ
bnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8g
dXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAgICAgIC8vIFhYWCBQZXJoYXBzIGRl
ZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAobWV0aG9kOiBz
dHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uLCBoZWFk
ZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuKTog
dm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnBvbGF0
ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGlu
dGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRp
bnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4dDogc3RyaW5nLCBtdXN0SGF2ZUV4
cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25GdW5jdGlvbjtcbiAgICAgICAgZW5k
U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uIHtcbiAgICAgICAgKGNvbnRl
eHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgc3RhcnRTeW1ib2woKTog
c3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRl
UHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIGVuZFN5bWJv
bCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNoZVNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRlbXBsYXRlQ2FjaGVcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlIGV4dGVu
ZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290
U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RT
Y29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpbnRlcmZhY2UgSVNDRVNlcnZp
Y2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFu
eTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEh0
bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSnModmFsdWU6IGFueSk6IGFueTtc
blx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVz
dGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2UodHlwZTogc3RyaW5nLCBleHByZXNz
aW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBh
cnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkp
ID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDog
YW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNKcyhleHByZXNzaW9uOiBzdHJp
bmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNSZXNv
dXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkg
PT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6
IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0
QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNSZXNvdXJjZVVybCh2YWx1ZTogYW55
KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRpc0VuYWJsZWQo
KTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFUHJv
dmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VQcm92aWRl
ciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBlbmFibGVkKHZhbHVlOiBib29s
ZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VE
ZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElT
Q0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5
QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxu
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVByb3ZpZGVyXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0
ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlc291cmNlVXJs
QmxvY2tsaXN0KGJsb2NrbGlzdDogYW55W10pOiB2b2lkO1xuICAgICAgICByZXNvdXJjZVVybEFs
bG93bGlzdChhbGxvd2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmVcbiAgICAvLyBhbmQgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3RpdmVcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xuICAgICAgICBjb21waWxlPzpcbiAg
ICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIHRlbXBsYXRlQXR0
cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0cmFuc2NsdWRlOiAoc2NvcGU6IElT
Y29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2b2lkXG4gICAgICAgICAgICApID0+
IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAgICAgICAgY29udHJvbGxlckFzPzog
c3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAgIChzY29wZTogSVNjb3BlLFxuICAg
ICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAgICAgICAgICBpbnN0YW5jZUF0dHJp
YnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29udHJvbGxlcjogYW55XG4gICAgICAg
ICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHByaW9yaXR5
PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAgICAgICAgcmVxdWlyZT86
IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4gICAgICAgIHNjb3BlPzogYW55O1xu
ICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGVVcmw/OiBhbnk7XG4gICAg
ICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJhbnNjbHVkZT86IGFueTtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhbmd1bGFyLmVsZW1lbnRcbiAgICAv
LyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1bGFyIHJldHVybnMgYSBqUXVlcnkg
b2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBsaWtlIGUu
Zy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1
bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF1Z21l
bnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRpYyB7XG4gICAgICAgIChzZWxlY3Rv
cjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVs
ZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiB7fSk6
IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAg
IChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoKTogSUF1Z21lbnRl
ZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeSBleHRlbmRz
IEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywgaG93IHRvIGRlZmluZT9cbiAgICAg
ICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IElBdWdtZW50
ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7XG5cbiAgICAgICAg
Y29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKCk6IGFueTtc
biAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5OiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEob2JqOiB7
IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShr
ZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
ICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
ICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICAgICAgICAgIGFubm90YXRlKGZu
OiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAgYW5ub3RhdGUoaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAgICAgICAgICBnZXQgKG5hbWU6IHN0
cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRlKHR5cGVDb25zdHJ1Y3RvcjogRnVu
Y3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShpbmxpbmVBbm5v
dGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoZnVuYzogRnVu
Y3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgfVxuXG4g
ICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFByb3ZpZGVTZXJ2aWNlXG4gICAgICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRwcm92aWRlXG4gICAg
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJUHJvdmlkZVNlcnZpY2Uge1xu
ICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0IHJldHVybnMgdGhlIHJlZ2lzdGVy
ZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAgIC8vIGNvbnN0YW50KG5hbWU6IHN0
cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJp
bmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICAgICAgZGVjb3JhdG9yKG5h
bWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgICAgICBm
YWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBu
Zy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlu
bGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBuZy5JU2VydmljZVByb3Zp
ZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0
cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQ
cm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBjb25zdHJ1Y3Rvcjog
RnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgdmFsdWUobmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgfVxuXG4g
ICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3Vz
ZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9JdGVtIHtcbiAgICAgICAgY29uc3Ry
dWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgICAgIHB1
YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICkgeyB9XG4gICAgfVxufVxuLy8g
aW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRl
cmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7XG5cdFx0dG9kb3M6IFRvZG9JdGVt
W107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRlZFRvZG86IFRvZG9JdGVtO1xuXHRc
dG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWluaW5nQ291bnQ6IG51bWJlcjtcblx0
XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2VkOiBib29sZWFuO1xuXHRcdHJldmVy
dGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBjb21wbGV0ZWQ/OiBib29sZWFuIH07
XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7XG5cdFx0dm06IFRvZG9DdHJsO1xu
XHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xu
XHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5cdFx0Z2V0ICgpOiBUb2RvSXRlbVtd
O1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1cbn0vLyBkaXJlY3RpdmVzL1RvZG9G
b2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAq
IERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVk
IHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVhdGVzIHRvIHRydWUuXG5c
dCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0OiBuZy5JVGltZW91dFNl
cnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29w
ZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRc
dFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0ZvY3VzLCBuZXd2YWwgPT4ge1xuXHRc
dFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0aW1lb3V0KCgpID0+IGVsZW1lbnRb
MF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9
XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0ID0gWyckdGltZW91dCddO1xuXG59
Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3Ry
aWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0aGF0IGV4ZWN1dGVzIGFuIGV4cHJl
c3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxvc2VzIGZvY3VzLlxuICAg
ICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigpOiBuZy5JRGlyZWN0aXZlIHtcbiAg
ICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxl
bWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVt
ZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvQmx1
cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBl
bGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAg
ICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0
J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkgPSAyNztcblxuXHQvKipcblx0ICog
RGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9kbyBpZiB0aGUgdXNlciBwcmVzc2Vz
IHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Fc2NhcGUoKTogbmcu
SURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29w
ZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0ZWxlbWVu
dC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNv
ZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoYXR0cmlidXRl
cy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdCRzY29w
ZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgna2V5ZG93bicpOyB9KTtc
blx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNlcy9Ub2RvU3RvcmFnZS50c1xuXG5t
b2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIFNlcnZp
Y2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9tIGxvY2FsU3RvcmFnZS5c
biAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3JhZ2UgaW1wbGVtZW50cyBJVG9kb1N0
b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzLXR5cGVzY3Jp
cHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7XG4gICAgICAgICAgICByZXR1cm4g
SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQpIHx8ICdbXScp
O1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBUb2RvSXRlbVtdKSB7XG4gICAgICAg
ICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQsIEpTT04uc3RyaW5naWZ5
KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29udHJvbGxlcnMvVG9kb0N0cmwudHNc
blxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWFp
biBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjpcblx0ICogLSByZXRyaWV2
ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRvZG9TdG9yYWdlIHNlcnZpY2Vcblx0
ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxhdGUgYW5kIHByb3ZpZGVzIGV2ZW50
IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9kb0N0cmwge1xuXG5cdFx0cHJpdmF0
ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmplY3QgYW5ub3RhdGlvbi5cblx0XHQv
LyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNp
ZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3RvclxuXHRcdC8vIGl0IGlzIGJldHRlciB0
byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3RvciwgYmVjYXVzZSB0aGUgcGFyYW1ldGVy
cyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRcdC8vIFNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xuXHRc
dFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0XHRcdCd0b2RvU3RvcmFnZScsXG5c
dFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQvLyBkZXBlbmRlbmNpZXMgYXJlIGlu
amVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0Ly8gY29udHJvbGxlcidzIG5hbWUg
aXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQgc3BlY2lmaWVkIGZyb20gbmctY29u
dHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRcdGNvbnN0cnVjdG9yKFxuXHRcdFx0
cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRwcml2YXRlICRsb2NhdGlvbjogbmcu
SUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9kb1N0b3JhZ2U6IElUb2RvU3RvcmFn
ZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnRvZG9z
ID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7XG5cblx0XHRcdCRzY29wZS5uZXdU
b2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cblx0XHRcdC8vICd2
bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFkZGluZyBhIHJlZmVyZW5jZSB0byB0
aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8vIGZvciBpdHMgbWV0aG9kcyB0byBi
ZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRcdCRzY29wZS52bSA9IHRoaXM7XG5c
blx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdlcyBpbiBzY29wZSwgd2hpY2ggYXJl
IGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8vIGlmIHlvdSBzdWJzY3JpYmUgdG8g
c2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIgdGhhbiB0aGlzIGNvbnRyb2xsZXIs
IG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQkc2NvcGUuJHdhdGNoKCd0b2Rvcycs
ICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRcdCRzY29wZS4kd2F0Y2goJ2xvY2F0
aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0aCkpXG5cblx0XHRcdGlmICgkbG9j
YXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgoJy8nKTtcblx0XHRcdCRzY29wZS5s
b2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRvblBhdGgocGF0aDogc3RyaW5nKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0aCA9PT0gJy9hY3RpdmUnKSA/
XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09ICcvY29tcGxldGVkJykg
P1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307XG5cdFx0fVxuXG5cdFx0b25Ub2Rv
cygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50ID0gdGhpcy5maWx0ZXJGaWx0
ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0aDtcblx0XHRcdHRoaXMu
JHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3RoIC0gdGhpcy4kc2NvcGUucmVtYWlu
aW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVja2VkID0gIXRoaXMuJHNjb3BlLnJl
bWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdlLnB1dCh0aGlzLnRvZG9zKTtcblx0
XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5ld1RvZG8gOiBzdHJpbmcgPSB0aGlz
LiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICghbmV3VG9kby5sZW5ndGgpIHtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZG9zLnB1c2gobmV3IFRvZG9J
dGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRzY29wZS5uZXdUb2RvID0gJyc7XG5c
dFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRz
Y29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRcdC8vIENsb25lIHRoZSBvcmlnaW5h
bCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQuXG5cdFx0XHR0aGlzLiRzY29wZS5v
cmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kb0l0ZW0pO1xuXHRcdH1cblxuXHRc
dHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvc1t0aGlz
LnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbztcblx0
XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRkb25lRWRpdGlu
Zyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSBu
dWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gbnVsbDtcblx0XHRcdGlmICh0
aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBUb2RvIGVkaXRzIHdlcmUgcmV2ZXJ0
ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gbnVsbDtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0ZW0udGl0bGUgPSB0b2RvSXRlbS50
aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRpdGxlKSB7XG5cdFx0XHRcdHRoaXMu
cmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVtb3ZlVG9kbyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3Muc3BsaWNlKHRoaXMudG9kb3Mu
aW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRcdGNsZWFyRG9uZVRvZG9zKCkge1xu
XHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIo
dG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5cdFx0fVxuXG5cdFx0bWFya0FsbChj
b21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9kb3MuZm9yRWFjaCh0b2RvSXRlbSA9
PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsgfSk7XG5cdFx0fVxuXHR9XG5cbn1c
bi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1haW4gVG9kb01WQyBhcHAgbW9kdWxl
LlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAqL1xubW9kdWxlIHRvZG9zIHtcbiAg
ICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9IGFuZ3VsYXIubW9kdWxlKCd0b2Rv
bXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcigndG9kb0N0cmwnLCBUb2RvQ3RybClc
biAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgdG9kb0JsdXIpXG4gICAgICAgICAg
ICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMpXG4gICAgICAgICAgICAuZGlyZWN0
aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAgICAgICAgIC5zZXJ2aWNlKCd0b2Rv
U3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKIAogLyoqKi8gfSksCiAvKiA0MTUgKi8KIC8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSAiLy8g
ICAgIFVuZGVyc2NvcmUuanMgMS44LjNcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xu
Ly8gICAgIChjKSAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJ
bnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBi
ZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24o
KSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBF
c3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4
cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuXG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRo
ZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRl
cnNjb3JlID0gcm9vdC5fO1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQg
bm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBl
LCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3Rv
dHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQg
YWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9
IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGlj
ZSxcbiAgICB0b1N0cmluZyAgICAgICAgID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3du
UHJvcGVydHkgICA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFT
Y3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRv
IHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAg
ICAgID0gQXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5
cyxcbiAgICBuYXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVD
cmVhdGUgICAgICAgPSBPYmplY3QuY3JlYXRlO1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVy
ZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5j
dGlvbigpe307XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2Nv
cmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
aWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5j
ZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9
O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3
aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClg
IEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwg
b2JqZWN0LlxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYg
KHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAg
ICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBf
O1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNp
b24uXG4gIF8uVkVSU0lPTiA9ICcxLjguMyc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhh
dCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAv
LyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4g
b3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVu
Y3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9p
ZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJn
Q291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2Ug
MjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIHZhbHVlLCBvdGhlcik7XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1
cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBm
dW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4g
ICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBj
b2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0
b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1
cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVu
dHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8g
Z2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVt
ZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0
aGVyXG4gIC8vIGlkZW50aXR5LCBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0
Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUs
IGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlk
ZW50aXR5O1xuICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2
YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0
dXJuIF8ubWF0Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9
O1xuICBfLml0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4g
Y2IodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBm
dW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNz
aWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgdW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAg
ICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3Ig
KHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBz
b3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNv
dXJjZSksXG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAg
ICAgaWYgKCF1bmRlZmluZWRPbmx5IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0g
c291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcg
b2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1
bmN0aW9uKHByb3RvdHlwZSkge1xuICAgIGlmICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1
cm4ge307XG4gICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5
cGUpO1xuICAgIEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBu
ZXcgQ3RvcjtcbiAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICB2YXIgcHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5
XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRv
IGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQg
YXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUu
bW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8v
IEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZh
ciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3Ro
ID0gcHJvcGVydHkoJ2xlbmd0aCcpO1xuICB2YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xs
ZWN0aW9uKSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICBy
ZXR1cm4gdHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGgg
PD0gTUFYX0FSUkFZX0lOREVYO1xuICB9O1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4g
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFj
aGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVj
dHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFy
cmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1p
emVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAg
ICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAg
IGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAg
IH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBh
cHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVj
dCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNi
KGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYm
IF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAg
ICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8g
a2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2Jq
W2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0
cztcbiAgfTtcblxuICAvLyBDcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVm
dCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGlt
aXplZCBpdGVyYXRvciBmdW5jdGlvbiBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8g
aW4gdGhlIG1haW4gZnVuY3Rpb24gd2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAg
IGZ1bmN0aW9uIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5n
dGgpIHtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCAr
PSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBp
bmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3Vy
cmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAg
IHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtl
eXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGgg
PSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDog
bGVuZ3RoIC0gMTtcbiAgICAgIC8vIERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25l
IGlzIHByb3ZpZGVkLlxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAg
IG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCAr
PSBkaXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVt
bywga2V5cywgaW5kZXgsIGxlbmd0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiog
YnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5q
ZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3Qg
PSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24g
b2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZv
bGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdo
aWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9
IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIg
a2V5O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRl
eChvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8u
ZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09
IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0
dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNl
ZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJl
ZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3Qp
KSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9
O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3Qg
ZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4
dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBt
YXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBf
LmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRl
ID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShv
YmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0
aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4g
ICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAg
aWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4g
ZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBp
ZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9i
aiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBj
b250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmop
LFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBp
bmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtl
eSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpb
Y3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBy
ZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmpl
Y3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMg
YGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8u
aW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlm
ICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9m
IGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1
cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIElu
dm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0
aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlv
bihtZXRob2QpO1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAg
ICB2YXIgZnVuYyA9IGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1
cm4gZnVuYyA9PSBudWxsID8gZnVuYyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0p
O1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ug
b2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmos
IGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5c
biAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVy
YDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6
dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJl
dHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZl
bmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRo
ZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWly
cy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8u
ZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4
aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBm
dW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZp
bml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7
XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9
IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2
YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAg
cmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAg
aXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5j
dGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQg
fHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAg
ICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVk
O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtc
blxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21w
dXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAg
ICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0g
bnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9i
aik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0
aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCBy
ZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxu
ICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBj
b21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21w
dXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09
PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RD
b21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0
dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhl
IG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1
ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8g
b2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2
YXIgc2h1ZmZsZWQgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFu
ZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBp
bmRleCk7XG4gICAgICBpZiAocmFuZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZm
bGVkW3JhbmRdO1xuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAg
ICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH07XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1
ZXMgZnJvbSBhIGNvbGxlY3Rpb24uXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJl
dHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRg
IGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVu
Y3Rpb24ob2JqLCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAg
ICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJl
dHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8u
c2h1ZmZsZShvYmopLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0
IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0
ZWUuXG4gIF8uc29ydEJ5ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8u
bWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xu
ICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3Jp
dGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29y
dChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xu
ICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAg
ICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8
IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVm
dC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBB
biBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJh
dGlvbnMuXG4gIHZhciBncm91cCA9IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtc
biAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7
XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBH
cm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBz
dHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0
dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQs
IHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5w
dXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIElu
ZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3Jv
dXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVz
IHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZh
bHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3Vu
dHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJp
b24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3Ig
YSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5
ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJl
c3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xu
XG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRl
cmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1
cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xu
ICAgIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtc
biAgICByZXR1cm4gXy52YWx1ZXMob2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJl
ciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xu
ICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9i
aikgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0
IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0
aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFs
bCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9u
KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBr
ZXksIG9iaikgPyBwYXNzIDogZmFpbCkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJu
IFtwYXNzLCBmYWlsXTtcbiAgfTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0t
LS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNz
aW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJy
YXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAg
Ly8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0g
Xy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51
bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFy
cmF5WzBdO1xuICAgIHJldHVybiBfLmluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xu
ICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhl
IGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4g
UGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJy
YXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwg
biwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwg
YXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4g
IC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwg
cmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0g
ZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVy
biB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5
Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5
Lmxlbmd0aCAtIG4pKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBm
aXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4g
IC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFu
ICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5c
biAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7
XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBu
KTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXku
XG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFy
cmF5LCBfLmlkZW50aXR5KTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBv
ZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rp
b24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwgc3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQg
PSBbXSwgaWR4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGgg
PSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9
IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZh
bHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJl
bnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxs
b3cpIHZhbHVlID0gZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFy
IGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVu
O1xuICAgICAgICB3aGlsZSAoaiA8IGxlbikge1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2
YWx1ZVtqKytdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAg
ICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0
cHV0O1xuICB9O1xuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZl
bHkgKGJ5IGRlZmF1bHQpLCBvciBqdXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rp
b24oYXJyYXksIHNoYWxsb3cpIHtcbiAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywg
ZmFsc2UpO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQg
ZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBm
dW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVl
IHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVl
biBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGht
LlxuICAvLyBBbGlhc2VkIGFzIGB1bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0
aW9uKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNC
b29sZWFuKGlzU29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRl
cmF0ZWUgPSBpc1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlm
IChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2
YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRl
cmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4g
ICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xu
ICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4g
ICAgICAgIGlmICghXy5jb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVu
LnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAg
fVxuICAgICAgfSBlbHNlIGlmICghXy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAg
ICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7
XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjog
ZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJy
YXlzLlxuICBfLnVuaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVu
KGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkg
dGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFz
c2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAg
IHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7
XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRh
aW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBh
cmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwg
aXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3Vs
dC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRh
a2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVy
IGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJz
dCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICB2YXIgcmVzdCA9IGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICBy
ZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5j
b250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVy
IG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFy
ZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAg
ICByZXR1cm4gXy51bnppcChhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2Yg
Xy56aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8g
ZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0
TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxu
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAg
IHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNz
IGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3Ig
dHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFu
ZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1
bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZh
ciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtc
biAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0
b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVu
Y3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAg
IHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVk
aWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7
XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGly
KSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSBy
ZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4g
IC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMg
YSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4Rmlu
ZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigt
MSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBz
bWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVk
IHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVk
SW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0
ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJh
dGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAg
IHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsg
aGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cg
PSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07
XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFz
dEluZGV4T2YgZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJl
ZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0
ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xu
ICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDAp
IHtcbiAgICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0
aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/
IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9
XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAg
ICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlb
aWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0
ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBs
ZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0x
O1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlk
eCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlb
aWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJy
ZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBu
b3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5k
IGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQq
KiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIo
MSwgXy5maW5kSW5kZXgsIF8uc29ydGVkSW5kZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRl
SW5kZXhGaW5kZXIoLTEsIF8uZmluZExhc3RJbmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50
ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBv
ZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBb
dGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkv
ZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3As
IHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwg
MDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAg
IHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwg
MCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9
IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lk
eF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVu
Y3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBE
ZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3Jc
biAgLy8gb3IgYSBub3JtYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4g
IHZhciBleGVjdXRlQm91bmQgPSBmdW5jdGlvbihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRl
eHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5z
dGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdz
KTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAg
IHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlz
T2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5c
biAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmlu
ZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8g
KipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxh
YmxlLlxuICBfLmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2
ZUJpbmQgJiYgZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBs
eShmdW5jLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9u
KGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVu
Y3Rpb24nKTtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2
YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywg
Ym91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkp
O1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBs
eSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBp
dHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFt
aWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2lu
ZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFy
dGlhbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDEpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBv
c2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlv
bisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFy
Z3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAg
cmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAg
fTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBv
YmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8v
IGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRo
YXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQu
XG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoLCBrZXk7XG4gICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3Io
J2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAx
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9i
altrZXldID0gXy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xu
ICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRz
IHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZh
ciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNh
Y2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhp
cywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkg
Y2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1
cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAg
cmV0dXJuIG1lbW9pemU7XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBn
aXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRo
IHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0
KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJu
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFy
Z3MpO1xuICAgIH0sIHdhaXQpO1xuICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hl
ZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBj
bGVhcmVkLlxuICBfLmRlZmVyID0gXy5wYXJ0aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dl
cmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9y
bWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBp
dCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0
aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24g
dGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2Fi
bGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9
IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywg
cmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xu
ICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9u
KCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8u
bm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHko
Y29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVs
bDtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5v
dygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBw
cmV2aW91cyA9IG5vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZp
b3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAg
ICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlm
ICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAg
IHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAg
ICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRp
bWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQg
JiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRp
bWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFz
IGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQu
IFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQg
Zm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdn
ZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhl
IHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRl
KSB7XG4gICAgdmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xu
XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkg
LSB0aW1lc3RhbXA7XG5cbiAgICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAg
ICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkg
e1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAg
ICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAg
IH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRo
aXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtc
biAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0
aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2Fs
bE5vdykge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAg
ICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1
bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNz
ZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFk
anVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25k
aXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5j
dGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5j
KTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQt
aW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJl
dHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBp
cyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25z
dW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBf
LmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2
YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxs
KHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBh
ZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xu
ICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAg
ICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVk
IHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1
bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9
IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMg
YSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0
dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxp
emF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVj
dCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5
IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNz
ZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1l
cmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2Yn
LCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3By
b3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107
XG5cbiAgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIg
bm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVj
dG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29u
c3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAv
LyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1
Y3Rvcic7XG4gICAgaWYgKF8uaGFzKG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJv
cCkpIGtleXMucHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAg
IHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBp
biBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBw
cm9wKSkge1xuICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5c
biAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxu
ICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNg
XG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSBy
ZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4g
ICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2Jq
LCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhh
c0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5
cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9i
amVjdC5cbiAgXy5hbGxLZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0
KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBp
biBvYmopIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFz
RW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlz
O1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVy
dGllcy5cbiAgXy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7
XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0
ZWUgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBvYmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5t
YXAgaXQgcmV0dXJucyBhbiBvYmplY3RcbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7
XG4gICAgdmFyIGtleXMgPSAgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5s
ZW5ndGgsXG4gICAgICAgICAgcmVzdWx0cyA9IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4g
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAg
ICAgIGN1cnJlbnRLZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5
XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1c
biAgICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGlu
dG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5
cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpb
a2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0
IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2Vy
aWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQg
PSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2Jq
W2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJs
ZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9u
cyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAg
IGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0p
KSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07
XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGlu
IHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxL
ZXlzKTtcblxuICAvLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJv
cGVydGllcyBpbiB0aGUgcGFzc2VkLWluIG9iamVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVj
dHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2ln
bmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0
aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9
IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9
IGtleXNbaV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVy
biBrZXk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBv
bmx5IGNvbnRhaW5pbmcgdGhlIHdoaXRlbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1
bmN0aW9uKG9iamVjdCwgb2l0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9
LCBvYmogPSBvYmplY3QsIGl0ZXJhdGVlLCBrZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0
dXJuIHJlc3VsdDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtl
eXMgPSBfLmFsbEtleXMob2JqKTtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVu
dHMsIGZhbHNlLCBmYWxzZSwgMSk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBr
ZXksIG9iaikgeyByZXR1cm4ga2V5IGluIG9iajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmop
O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUg
PSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRb
a2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBS
ZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgYmxhY2tsaXN0ZWQgcHJvcGVy
dGllcy5cbiAgXy5vbWl0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRl
KGl0ZXJhdGVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVu
KGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0g
ZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywg
a2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCk7XG4gIH07XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1
bHQgcHJvcGVydGllcy5cbiAgXy5kZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywg
dHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBn
aXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJl
IHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9i
amVjdC5cbiAgXy5jcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFy
IHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5k
T3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3Jl
YXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25l
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7
XG4gICAgcmV0dXJuIF8uaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwg
b2JqKTtcbiAgfTtcblxuICAvLyBJbnZva2VzIGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5k
IHRoZW4gcmV0dXJucyBvYmouXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRo
b2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBw
ZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFp
bi5cbiAgXy50YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0
b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBh
biBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0
Y2ggPSBmdW5jdGlvbihvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0
cnMpLCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVy
biAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAg
IGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFs
c2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVj
dXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVu
Y3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBh
cmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8g
U2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQu
b3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBh
ICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVs
bCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBl
ZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAg
aWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0Ns
YXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAg
IGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBz
d2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBl
eHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4g
ICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNl
ZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylc
biAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5k
IHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVz
LCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIp
YC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVj
dCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJl
ZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAg
ICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVn
YWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAg
ICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAg
ICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6
XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRp
dmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlz
ZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxp
c2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2
YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFy
cmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5
cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmpl
Y3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29u
c3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xu
ICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEu
Y29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0g
YkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3Ig
JiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYm
IGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgn
Y29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1
cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3lj
bGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAv
LyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0
cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2
ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQg
dGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0
YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0g
YVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBz
ZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJl
ciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFj
a1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4g
ICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8g
UmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5
cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRl
ZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAg
ICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVw
IGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxu
ICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xl
bmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxz
ZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5r
ZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3Vy
ZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVz
IGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVu
Z3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xu
ICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1ts
ZW5ndGhdO1xuICAgICAgICBpZiAoIShfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXld
LCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8v
IFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRy
dWU7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0
d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAg
ICByZXR1cm4gZXEoYSwgYik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5n
LCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1l
cmFibGUgb3duLXByb3BlcnRpZXMuXG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikg
JiYgKF8uaXNBcnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9i
aikpKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVu
Z3RoID09PSAwO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9c
biAgXy5pc0VsZW1lbnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9i
ai5ub2RlVHlwZSA9PT0gMSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJh
eT9cbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5p
c0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9T
dHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEg
Z2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rp
b24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21l
IGlzVHlwZSBtZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVt
YmVyLCBpc0RhdGUsIGlzUmVnRXhwLCBpc0Vycm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAn
RnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvcidd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsg
J10nO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2Yg
dGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUg
aXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJn
dW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgICByZXR1cm4gXy5oYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8v
IE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0
eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkg
OCAoIzE5MjkpLlxuICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4
QXJyYXkgIT0gJ29iamVjdCcpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtc
biAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zp
bml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05h
TihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFO
YD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5c
biAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikg
JiYgb2JqICE9PSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFu
P1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRy
dWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJv
b2xlYW5dJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4g
IF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5l
ZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxu
ICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdp
dmVuIHByb3BlcnR5IGRpcmVjdGx5XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5v
dCBvbiBhIHByb3RvdHlwZSkuXG4gIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBy
ZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07
XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAv
LyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBg
X2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJl
bmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24o
KSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xu
ICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVs
dCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVy
biB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9m
dGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlv
bih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtc
biAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5
ID0gcHJvcGVydHk7XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2Jq
ZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5j
dGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5j
dGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8v
IFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBh
IGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5t
YXRjaGVzID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBh
dHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRj
aChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioq
IHRpbWVzLlxuICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAg
ICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47
IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVz
aXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0g
bnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0
dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4g
IH07XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRp
bWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkg
e1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBv
ZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAn
Jic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wi
JzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAg
fTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5j
dGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGlu
dGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAg
dmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07
XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRz
IHRvIGJlIGVzY2FwZWRcbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2lu
KCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2
YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsg
c3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJl
cGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAg
Xy5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVh
dGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVk
IGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBg
b2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBm
dW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBmYWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9i
amVjdCA9PSBudWxsID8gdm9pZCAwIDogb2JqZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUg
PT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJu
IF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtc
blxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBl
bnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRz
LlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkg
e1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHBy
ZWZpeCArIGlkIDogaWQ7XG4gIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2Vz
IEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2lu
ZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50
ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4v
ZyxcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAg
ICAgIDogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5n
IGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8v
IGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25l
IHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0g
LyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28g
dGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIg
ZXNjYXBlcyA9IHtcbiAgICBcIidcIjogICAgICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxc
XCcsXG4gICAgJ1xccic6ICAgICAncicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIw
MjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2Nh
cGVyID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVD
aGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRj
aF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRv
IEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5n
IGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAv
LyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5c
biAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRp
bmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRT
ZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBs
YXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3Vs
YXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAo
W1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0
dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2
YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtc
blxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxp
dGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNl
ID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gs
IGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSAr
PSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7
XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2Fw
ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9
PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBv
bGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRl
ICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUp
IHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdc
IjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVk
IHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAg
IH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlz
IG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlm
ICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3Vy
Y2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5w
cm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2Fs
bChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxu
JztcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAg
ICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0
ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlz
LCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNl
IGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9
IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5j
dGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJu
IHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQg
Y2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFp
biA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAt
LS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlv
biwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08t
c3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAg
Ly8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5c
blxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRl
IHJlc3VsdHMuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAg
cmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4g
IC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVj
dC5cbiAgXy5taXhpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhv
YmopLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFt
ZV07XG4gICAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIg
YXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVu
dHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xu
ICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3Jl
IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8g
QWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNo
KFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1
bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tu
YW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9i
aiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xu
ICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmou
bGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBv
YmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rp
b25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSdd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4g
ICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQo
dGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4g
IH0pO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWlu
ZWQgb2JqZWN0LlxuICBfLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVy
biB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBm
b3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBh
cml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVP
ZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90
eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBl
ZDtcbiAgfTtcblxuICAvLyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3Ig
Y29tcGF0aWJpbGl0eSB3aXRoIEFNRCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNl
IG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAv
LyBwcmFjdGljZSBmb3IgQU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVy
c2NvcmUgcmVnaXN0ZXJzXG4gIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1
ZXJ5LCBpdCBpcyBhIGJhc2UgbGlicmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRv
IGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAv
LyBhbiBBTUQgbG9hZCByZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJv
ciB3aGVuIGFuXG4gIC8vIGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBh
IGxvYWRlciByZXF1ZXN0LlxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBk
ZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xu
ICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iCittb2R1bGUu
ZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8gICAgIGh0dHA6Ly91bmRl
cnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3Vt
ZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVu
ZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2Uu
XG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBi
cm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xu
XG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZh
ciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUg
bWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBB
cnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgRnVuY1Byb3RvID0g
RnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFi
bGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICB2YXJcbiAgICBwdXNo
ICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlICAgICAgICAgICAgPSBB
cnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmlu
ZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAg
Ly8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0
aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBu
YXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAg
ICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5k
LFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQg
ZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2
YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0
byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAo
ISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBw
ZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3Ig
KipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBv
bGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBf
YCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5l
ZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4
cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAg
IGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8v
IEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztcblxuICAvLyBJbnRlcm5h
bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVz
KSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVk
bHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgdmFyIG9w
dGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChj
b250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0g
bnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFs
dWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9
O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAg
ICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAg
ICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24p
O1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2
YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250
ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4g
ICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNv
bnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBIG1vc3RseS1pbnRlcm5h
bCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAv
LyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQg
cmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0cmFyeSBjYWxsYmFjaywg
YSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICB2YXIgY2IgPSBm
dW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVs
bCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVy
biBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmpl
Y3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0
eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkg
e1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8v
IEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4g
IHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1bmRlZmluZWRPbmx5KSB7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50
cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9i
ajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtc
biAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlz
ID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5
c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2JqW2tleV0gPT09IHZvaWQg
MCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0
dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBj
cmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBi
YXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHBy
b3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZl
Q3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAg
dmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1bmN0aW9uKGtleSkge1xu
ICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZv
aWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVscGVyIGZvciBjb2xsZWN0
aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3Vs
ZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3RcbiAgLy8gUmVsYXRlZDog
aHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMt
dG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02
NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4g
IHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9
IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxl
Y3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+
PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlv
biBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVy
c3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFu
ZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxu
ICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2gg
PSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRl
cmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3Ro
O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGgg
PSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ld
LCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7
XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRo
ZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8u
bWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJy
YXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9i
aikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVu
dEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0g
PSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAg
IHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9u
IGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7
XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVzaW5nIGFyZ3VtZW50cy5s
ZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRlb3B0aW1pemUgdGhlLCBz
ZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5
cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBs
ZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBr
ZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1
cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87
XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRl
eHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCk7
XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAg
ICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0g
ZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbml0aWFs
IHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8
IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4g
ICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvcihvYmos
IGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAgICB9O1xuICB9XG5cbiAg
Ly8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZh
bHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBfLnJlZHVjZSA9IF8uZm9s
ZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2Np
YXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgXy5yZWR1
Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiB0aGUg
Zmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0
YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGtl
eSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xu
ICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9XG4g
ICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAg
fTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVu
Y3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xu
ICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgXy5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVl
LCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJu
IHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNo
IGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubmVnYXRlKGNiKHByZWRp
Y2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2Yg
dGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5c
biAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0g
IWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlz
IHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDog
aW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXks
IG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAg
Ly8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hl
cyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIF8uc29tZSA9IF8uYW55
ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBj
YihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikg
JiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xu
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAg
IHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAo
cHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7
XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhl
IGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbiAg
Ly8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBf
LmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1
YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xu
ICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXgg
PSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4g
IH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRl
bSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtc
biAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5j
ID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24o
dmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9k
XTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVuYy5hcHBseSh2YWx1ZSwg
YXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNv
bW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgXy5wbHVjayA9
IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgXy5wcm9wZXJ0eShr
ZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBj
YXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4gIC8vIGNvbnRhaW5pbmcg
c3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0
dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07
XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlu
ZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBr
ZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtc
biAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24p
LlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIg
cmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZh
bHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkg
e1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4g
ICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPiByZXN1bHQp
IHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0g
ZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8u
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRl
ZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA+
IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUlu
ZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1
dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVt
ZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJ
bmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBu
dWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2Jq
IDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVu
Z3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAg
IGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAg
ICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0
KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAg
ICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0
eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4g
ICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xu
ICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0
aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMg
c2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVm
ZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHNldCA9IGlzQXJy
YXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBzZXQu
bGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIg
aW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmFuZCA9
IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBpbmRleCkgc2h1ZmZsZWRb
aW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFtyYW5kXSA9IHNldFtpbmRl
eF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipu
KiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8gSWYgKipuKiogaXMgbm90
IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGlu
dGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAg
Xy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8
fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhv
YmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1c
biAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xuICB9
O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNl
ZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgcmV0
dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAg
ICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4
LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KVxuICAgICAg
fTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxl
ZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEg
IT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4g
ICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAg
ICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xu
ICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdy
b3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IpIHtc
biAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFy
IHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4g
ICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtl
eSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0
LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xu
ICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQ
YXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1
bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkp
IHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAg
fSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBz
aW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91
ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0
aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0p
O1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBj
ZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRv
IGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9u
LlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAg
ICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXld
ID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJv
bSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
aWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGlj
ZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmos
IF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJl
dHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4g
aXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07
XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVs
ZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hv
c2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0
aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTtc
biAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICAgIChwcmVk
aWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTtcbiAgICB9
KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8vIEFycmF5IEZ1bmN0aW9u
c1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2Yg
YW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFs
dWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3Vh
cmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8uZmly
c3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBp
ZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1
YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXku
bGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFz
dCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1
bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGlu
XG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4gIF8uaW5pdGlhbCA9IGZ1
bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAw
LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4p
KSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3Np
bmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5
LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkg
PT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1
cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0
aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0
aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAg
YW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmpl
Y3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMg
aW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJh
eSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8
IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMg
ZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1
cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGlt
cGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZs
YXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBzdGFydEluZGV4KSB7XG4g
ICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4
IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYm
IChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAv
L2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0XG4gICAg
ICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBzdHJpY3Qp
O1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgb3V0cHV0
Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7XG4gICAgICAgICAgb3V0
cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0
cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxu
ICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVp
dGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZs
YXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFy
cmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0
aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4g
IF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShh
cnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEg
ZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxy
ZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZh
c3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8u
dW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0
ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtc
biAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAg
IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0g
aXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAo
aXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQu
cHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAo
aXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xu
ICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFs
dWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFs
dWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAg
cmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFp
bnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhl
IHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4g
Xy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4gIH07XG5cbiAgLy8gUHJv
ZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxs
IHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9u
KGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJn
dW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFy
cmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAg
ICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICBmb3IgKHZh
ciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMo
YXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJn
c0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBu
dW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGlu
IGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRpZmZlcmVuY2UgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRy
dWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAg
ICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICAv
LyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVt
ZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuICBfLnppcCA9IGZ1
bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgLy8g
Q29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5k
IGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXNcbiAg
Xy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIF8u
bWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZhciByZXN1bHQgPSBBcnJh
eShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5k
ZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJyYXksIGluZGV4KTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRv
IG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4g
IC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBv
bmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4g
IF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9
O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0g
PSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0g
PSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpbmRJbmRleCBhbmQgZmlu
ZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5k
ZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQp
IHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAw
IDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGlu
ZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlr
ZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEluZGV4ID0gY3JlYXRlUHJl
ZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0
ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZp
Z3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91
bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJj
aC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFy
IHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0
aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRo
LmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0p
IDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0
dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBp
bmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhG
aW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5j
dGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAg
ICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5t
YXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbmd0
aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCAr
IDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxl
bmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAg
IHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBp
ZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNh
bGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAg
PyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDog
bGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAg
ICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAg
cmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRo
ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlm
IHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJh
eSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBm
b3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBfLmluZGV4T2YgPSBjcmVh
dGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7XG4gIF8ubGFzdElu
ZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdEluZGV4KTtcblxuICAvLyBH
ZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVz
c2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlv
bi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhv
bi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlv
bihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0
b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gc3Rl
cCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0
YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAg
Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xu
ICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAg
fTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMg
YSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRl
ZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJv
dW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxs
aW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5
KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnBy
b3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7
XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4g
c2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9i
amVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSku
IERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBp
ZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHtc
biAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBu
YXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYg
KCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBj
YWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4ZWN1
dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2Fs
bChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8g
UGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFz
IGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFu
Z2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vo
b2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZp
bGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAgIHZhciBib3VuZEFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAg
ICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBfID8gYXJn
dW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUg
KHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlv
bisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlz
LCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBCaW5kIGEg
bnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBh
cmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBm
b3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0
IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGks
IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAobGVuZ3RoIDw9IDEpIHRo
cm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xu
ICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gYXJndW1lbnRz
W2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAg
IHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24g
Ynkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFz
aGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNo
ZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhh
c2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghXy5oYXMoY2Fj
aGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2Fj
aGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5j
dGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxz
XG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0
aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAy
KTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEg
ZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3Rh
Y2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywg
MSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwg
b25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRv
dyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAv
LyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBl
ciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhl
IGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFs
c2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxu
ICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBj
b250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBw
cmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgdmFyIGxh
dGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0g
ZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0
ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4
dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
dmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGlu
ZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQg
LSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0g
YXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQp
IHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91
dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlv
dXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4g
ICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNl
IGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0
aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJl
dHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRo
YXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8v
IGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3Bz
IGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlz
IHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwg
aW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3
YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0
YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBs
YXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxh
c3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxh
c3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlm
ICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBh
cmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAg
ICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB0aW1lc3Rh
bXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7
XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtc
biAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH1cblxuICAg
ICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0
IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxv
d2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwg
YW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4g
IF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1cm4gXy5wYXJ0aWFs
KHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24g
b2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGlj
YXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBl
YWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0
IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJn
dW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nb
c3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQg
PSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhl
Y3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRp
bWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMg
PCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAg
ICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9u
bHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuXG4g
IF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVt
byA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1l
cyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5c
biAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9u
ZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9y
IGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7
XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8g
S2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5g
IGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5w
cm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9w
cyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAg
ICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9M
b2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5
cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAg
ICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKF8u
aXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQ
cm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBw
cm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBwcm9wKSAmJiAhXy5jb250
YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1J
ZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAg
ICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFfLmNv
bnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1c
biAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3du
IHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZl
IGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlz
T2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2
ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmop
IGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwg
OS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xu
ICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVydHkg
bmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBp
ZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAg
Zm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5
LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4g
ICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBv
YmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAg
IHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTtcbiAgICB9XG4gICAg
cmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5
aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9iamVjdFxuICAvLyBJbiBj
b250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBfLm1hcE9iamVjdCA9IGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJh
dGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2JqKSxcbiAgICAgICAgICBs
ZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0ge30sXG4gICAgICAgICAg
Y3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgICByZXN1
bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBv
YmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVy
dCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIF8ucGFp
cnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZh
ciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhaXJzW2ldID0g
W2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfTtc
blxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1
ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJl
c3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24g
bmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNg
XG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5h
bWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5j
dGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVz
LnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhl
IHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVB
c3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBh
bGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpXG4gIC8vICho
dHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5j
ZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVuZE93biA9IF8uYXNzaWdu
ID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkg
b24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kS2V5ID0g
ZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaiksIGtleTtcbiAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtl
eSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBv
ZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dsaXN0ZWQgcHJvcGVydGllcy5c
biAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2
YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtleXM7XG4gICAgaWYgKG9i
aiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24ob2l0ZXJhdGVl
KSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBm
bGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVu
Y3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2JqOyB9O1xuICAgICAgb2Jq
ID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAg
ICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXks
IG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibG9j
a2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJh
dGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9
IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpLCBTdHJpbmcpO1xuICAg
ICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhXy5j
b250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucGljayhv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2Jq
ZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWdu
ZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVy
aXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwg
cHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4g
IC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJv
cHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChw
cm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAg
fTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmpl
Y3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2Jq
KSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6
IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0
aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9z
ZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4g
IC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3
aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtc
biAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0
dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFp
cnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5
cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3Qg
PT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBr
ZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9i
aikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAv
LyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxu
ICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50
aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50
aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dp
a2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9
PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0
IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAg
ICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53
cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5f
d3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8v
IENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5n
LmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJu
IGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1i
ZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJl
ZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdF
eHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2Ev
aSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8g
UHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVx
dWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3
IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAg
ICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxl
bnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFs
ZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAg
ICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVy
aWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDog
K2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2Jq
ZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBu
dW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAg
ICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRh
dGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5g
IGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICB9XG5c
biAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAg
IGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlw
ZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRo
IGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBz
IG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAg
dmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAg
aWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5z
dGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5j
dGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7
XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVx
dWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5n
IGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9u
IDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5n
IHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNl
IHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAg
ICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAg
IHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAg
ICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25h
bCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4g
ICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0g
YjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2go
Yik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAg
ICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0
ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9
IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtc
biAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmlj
IHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShh
W2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAg
ICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAg
dmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xu
ICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVy
IG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYg
KF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgd2hpbGUg
KGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgICAg
ICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFzKGIsIGtleSkgJiYgZXEo
YVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1c
biAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtc
biAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29u
IHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rp
b24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVj
dCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5pc0VtcHR5ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopIHx8IF8u
aXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBf
LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBh
IERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVy
biAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXku
aXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xu
ICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07
XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBm
dW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5
cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH07XG5c
biAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBp
c1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJyb3IuXG4gIF8uZWFjaChb
J0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVn
RXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmpl
Y3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJh
Y2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVy
ZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxu
ICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9
O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3Jr
IGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8gSUUgMTEgKCMxNjIxKSwg
YW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicg
JiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBm
YWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVt
YmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzRmluaXRl
KG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5cbiAgLy8gSXMgdGhlIGdp
dmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3aGljaCBkb2VzIG5vdCBl
cXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIF8u
aXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2
YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9
PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1
YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2Jq
ID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xu
ICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9p
ZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBv
YmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBv
dGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmos
IGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
aiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCBy
ZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJl
dHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm5vQ29uZmxp
Y3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7XG4gICAg
cmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJv
dW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVl
KSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5n
IGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgXy5jb25z
dGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0gZnVuY3Rpb24oKXt9O1xu
XG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBm
b3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG4gIF8ucHJv
cGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IGZ1bmN0
aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH07
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBh
biBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBf
Lm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xuICAgIGF0dHJzID0gXy5l
eHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBy
ZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUnVuIGEg
ZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBh
Y2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBh
bmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4g
ICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xu
ICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAt
IG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQg
dGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID0gRGF0ZS5ub3cg
fHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xu
XG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBl
TWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcm
Z3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2An
OiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmludmVydChlc2NhcGVNYXAp
O1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0
by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVzY2FwZXIgPSBmdW5jdGlv
bihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1
cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEg
a2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3VyY2UgPSAnKD86JyArIF8u
a2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChz
b3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVs
bCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmlu
ZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAg
ICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcbiAgXy51
bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIElmIHRoZSB2YWx1
ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdp
dGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lzZSwgcmV0dXJuIGl0Llxu
ICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZhbGxiYWNrKSB7XG4gICAg
dmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3RbcHJvcGVydHldO1xu
ICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9IGZhbGxiYWNrO1xuICAg
IH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6
IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1
ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVt
cG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVu
Y3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1
cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBV
bmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVc
biAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxp
bWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGUgICAgOiAvPCUo
W1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShbXFxzXFxTXSs/KSU+L2cs
XG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdo
ZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBk
ZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdl
eCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAg
dmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8g
YmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxp
dGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAgIFwiJ1wiLFxuICAgICdc
XFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAgICAnXFxuJzogICAgICdu
JyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07
XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5c
biAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcg
KyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRp
bmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNj
b3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdo
aXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVy
cG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBzZXR0
aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBz
ZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0
dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMg
aW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0
Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJj
ZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAg
ICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8Jykg
KyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2Nh
cGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xu
ICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBm
dW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xu
ICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVy
LCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4g
ICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsg
ZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVs
c2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwi
ICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNl
IGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUg
KyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUg
bWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZlc3QuXG4gICAgICByZXR1
cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElm
IGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwg
c2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7
fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9
JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24o
KXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAn
cmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZW5kZXIgPSBuZXcgRnVu
Y3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNh
dGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAg
fVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJl
bmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBj
b21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAg
dmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7XG4gICAgdGVtcGxhdGUu
c291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7
XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRkIGEgXCJjaGFpblwiIGZ1
bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8u
Y2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfKG9iaik7XG4gICAg
aW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAg
Ly8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdFxuICAvLyBj
YW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMg
b2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1h
eSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmlu
ZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNl
LCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBv
Ymo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVu
ZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNo
KF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tu
YW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5
KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQodGhpcywgZnVuYy5hcHBs
eShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEFkZCBhbGwgb2Yg
dGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgXy5taXhp
bihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFw
cGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQn
LCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2Qg
PSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmos
IGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3Nw
bGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07XG4gICAgICByZXR1cm4g
cmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3Nv
ciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ2NvbmNhdCcsICdq
b2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQ
cm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRz
KSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3Jh
cHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24o
KSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndy
YXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xu
ICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnBy
b3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7
XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJycg
KyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBh
dCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBt
YXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3Vn
aCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFu
b255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVj
YXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9w
dWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBi
ZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdl
bmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxl
ZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAn
ZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwg
ZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxufS5jYWxsKHRoaXMp
KTtcbiIKIAogLyoqKi8gfSksCiAvKiA0MTYgKi8KQEAgLTE0ODc3NSw3ICsxNDg3NzUsNyBAQCB2
YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIGNvbWJpbmUoZGVzdCwgc3Jj
KSB7CiAgICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAg
IGlmIChfLmhhcyhKU0hJTlQuYmxhY2tsaXN0LCBuYW1lKSkgcmV0dXJuOworICAgICAgaWYgKF8u
aGFzKEpTSElOVC5ibG9ja2xpc3QsIG5hbWUpKSByZXR1cm47CiAgICAgICBkZXN0W25hbWVdID0g
c3JjW25hbWVdOwogICAgIH0pOwogICB9CkBAIC0xNDkwNjAsNyArMTQ5MDYwLDcgQEAgdmFyIEpT
SElOVCA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoMSk7CiAgICAg
ICAgICAgdmFsID0gZmFsc2U7CiAKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W2tleV0gPSBr
ZXk7CisgICAgICAgICAgSlNISU5ULmJsb2NrbGlzdFtrZXldID0ga2V5OwogICAgICAgICAgIGRl
bGV0ZSBwcmVkZWZpbmVkW2tleV07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgcHJlZGVm
W2tleV0gPSAodmFsID09PSAidHJ1ZSIpOwpAQCAtMTUzODY3LDcgKzE1Mzg2Nyw3IEBAIHZhciBK
U0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBKU0hJTlQuZXJyb3JzID0gW107CiAgICAgICBK
U0hJTlQudW5kZWZzID0gW107CiAgICAgICBKU0hJTlQuaW50ZXJuYWxzID0gW107Ci0gICAgICBK
U0hJTlQuYmxhY2tsaXN0ID0ge307CisgICAgICBKU0hJTlQuYmxvY2tsaXN0ID0ge307CiAgICAg
ICBKU0hJTlQuc2NvcGUgPSAiKG1haW4pIjsKICAgICB9CiAKQEAgLTE1Mzg5Niw3ICsxNTM4OTYs
NyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogCiAgICAgICAgIGlmIChpdGVtWzBdID09
PSAiLSIpIHsKICAgICAgICAgICBzbGljZSA9IGl0ZW0uc2xpY2UoMSk7Ci0gICAgICAgICAgSlNI
SU5ULmJsYWNrbGlzdFtzbGljZV0gPSBzbGljZTsKKyAgICAgICAgICBKU0hJTlQuYmxvY2tsaXN0
W3NsaWNlXSA9IHNsaWNlOwogICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHByZWRlZmluZWQgaWYg
dGhlcmUKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtzbGljZV07CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xOTU1NzYsNyArMTk1NTc2LDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3Bl
Y2lmaWVyKG5vZGUpIAogCXZhciByZWdleFNpbmdsZUVzY2FwZSA9IC9bIidcXFxiXGZcblxyXHRd
LzsKIAogCXZhciByZWdleERpZ2l0ID0gL1swLTldLzsKLQl2YXIgcmVnZXhXaGl0ZWxpc3QgPSAv
WyAhIy0mXCgtXFtcXS1+XS87CisJdmFyIHJlZ2V4QWxsb3dsaXN0ID0gL1sgISMtJlwoLVxbXF0t
fl0vOwogCiAJdmFyIGpzZXNjID0gZnVuY3Rpb24oYXJndW1lbnQsIG9wdGlvbnMpIHsKIAkJLy8g
SGFuZGxlIG9wdGlvbnMKQEAgLTE5NTc1MSw3ICsxOTU3NTEsNyBAQCBmdW5jdGlvbiBJbXBvcnRO
YW1lc3BhY2VTcGVjaWZpZXIobm9kZSkgCiAJCQkJfQogCQkJfQogCQkJaWYgKCFvcHRpb25zLmVz
Y2FwZUV2ZXJ5dGhpbmcpIHsKLQkJCQlpZiAocmVnZXhXaGl0ZWxpc3QudGVzdChjaGFyYWN0ZXIp
KSB7CisJCQkJaWYgKHJlZ2V4QWxsb3dsaXN0LnRlc3QoY2hhcmFjdGVyKSkgewogCQkJCQkvLyBJ
dOKAmXMgYSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGAiYCwgYCdgIG9y
IGBcYCwKIAkJCQkJLy8gc28gZG9u4oCZdCBlc2NhcGUgaXQuCiAJCQkJCXJlc3VsdCArPSBjaGFy
YWN0ZXI7CkBAIC0yMDkwODEsNyArMjA5MDgxLDcgQEAgdmFyIF9nZXRJdGVyYXRvcjMgPSBfaW50
ZXJvcFJlcXVpcmVEZWZhdQogCiBleHBvcnRzLmNhbGwgPSBjYWxsOwogZXhwb3J0cy5fY2FsbCA9
IF9jYWxsOwotZXhwb3J0cy5pc0JsYWNrbGlzdGVkID0gaXNCbGFja2xpc3RlZDsKK2V4cG9ydHMu
aXNCbG9ja2xpc3RlZCA9IGlzQmxvY2tsaXN0ZWQ7CiBleHBvcnRzLnZpc2l0ID0gdmlzaXQ7CiBl
eHBvcnRzLnNraXAgPSBza2lwOwogZXhwb3J0cy5za2lwS2V5ID0gc2tpcEtleTsKQEAgLTIwOTE1
Nyw5ICsyMDkxNTcsOSBAQCBmdW5jdGlvbiBfY2FsbChmbnMpIHsKICAgcmV0dXJuIGZhbHNlOwog
fQogCi1mdW5jdGlvbiBpc0JsYWNrbGlzdGVkKCkgewotICB2YXIgYmxhY2tsaXN0ID0gdGhpcy5v
cHRzLmJsYWNrbGlzdDsKLSAgcmV0dXJuIGJsYWNrbGlzdCAmJiBibGFja2xpc3QuaW5kZXhPZih0
aGlzLm5vZGUudHlwZSkgPiAtMTsKK2Z1bmN0aW9uIGlzQmxvY2tsaXN0ZWQoKSB7CisgIHZhciBi
bG9ja2xpc3QgPSB0aGlzLm9wdHMuYmxvY2tsaXN0OworICByZXR1cm4gYmxvY2tsaXN0ICYmIGJs
b2NrbGlzdC5pbmRleE9mKHRoaXMubm9kZS50eXBlKSA+IC0xOwogfQogCiBmdW5jdGlvbiB2aXNp
dCgpIHsKQEAgLTIwOTE2Nyw3ICsyMDkxNjcsNyBAQCBmdW5jdGlvbiB2aXNpdCgpIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiAgIH0KIAotICBpZiAodGhpcy5pc0JsYWNrbGlzdGVkKCkpIHsKKyAgaWYg
KHRoaXMuaXNCbG9ja2xpc3RlZCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKQEAgLTIx
MDgyNSw3ICsyMTA4MjUsNyBAQCBmdW5jdGlvbiBzaG91bGRJZ25vcmVLZXkoa2V5KSB7CiAKICAg
aWYgKGtleSA9PT0gImVudGVyIiB8fCBrZXkgPT09ICJleGl0IiB8fCBrZXkgPT09ICJzaG91bGRT
a2lwIikgcmV0dXJuIHRydWU7CiAKLSAgaWYgKGtleSA9PT0gImJsYWNrbGlzdCIgfHwga2V5ID09
PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtleXMiKSByZXR1cm4gdHJ1ZTsKKyAgaWYgKGtl
eSA9PT0gImJsb2NrbGlzdCIgfHwga2V5ID09PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtl
eXMiKSByZXR1cm4gdHJ1ZTsKIAogICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjI1MTUsNyArMjIy
NTE1LDcgQEAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IAogCiBjb25z
dCBsaWZlY3ljbGVNZXRob2RzID0gbmV3IFNldChbImNvbXBvbmVudFdpbGxVbm1vdW50IiwgImNv
bXBvbmVudERpZE1vdW50IiwgImNvbXBvbmVudFdpbGxNb3VudCIsICJjb21wb25lbnREaWRVcGRh
dGUiLCAiY29tcG9uZW50V2lsbFVwZGF0ZSIsICJjb21wb25lbnREaWRDYXRjaCIsICJjb21wb25l
bnRXaWxsUmVjZWl2ZVByb3BzIl0pOwogCi1jb25zdCB3aGl0ZWxpc3RlZFByb3BlcnRpZXMgPSBu
ZXcgU2V0KFsicHJvcHMiLCAiY29udGV4dCIsICJyZWZzIl0pOworY29uc3QgYWxsb3dsaXN0ZWRQ
cm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKIAogZnVu
Y3Rpb24gZ2V0SW5pdGlhbFByb3BzKHJlYWxtLCBjb21wb25lbnRUeXBlKSB7CiAgIGxldCBwcm9w
c05hbWUgPSBudWxsOwpAQCAtMjIyNjg1LDcgKzIyMjY4NSw3IEBAIGZ1bmN0aW9uIGV2YWx1YXRl
Q2xhc3NDb25zdHJ1Y3RvcihyZWFsbSwKICAgICBsZXQgaW5zdGFuY2UgPSAoMCwgX2luZGV4Mi5D
b25zdHJ1Y3QpKHJlYWxtLCBjb25zdHJ1Y3RvckZ1bmMsIFtwcm9wcywgY29udGV4dF0pOwogICAg
ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShpbnN0YW5jZSBpbnN0YW5jZW9mIF9pbmRleC5PYmpl
Y3RWYWx1ZSk7CiAgICAgZm9yIChsZXQgW3Byb3BlcnR5TmFtZV0gb2YgaW5zdGFuY2UucHJvcGVy
dGllcykgewotICAgICAgaWYgKCF3aGl0ZWxpc3RlZFByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgIGlmICghYWxsb3dsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUp
KSB7CiAgICAgICAgIGluc3RhbmNlUHJvcGVydGllcy5hZGQocHJvcGVydHlOYW1lKTsKICAgICAg
IH0KICAgICB9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmct
YmVuY2htYXJrL2NsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bTIvd2ViLXRvb2xpbmctYmVuY2htYXJrL2NsaS5qcwkocmV2aXNpb24gMjcxMTIyKQpAQCAtMTA0
MDUsMTUgKzEwNDA1LDE1IEBAIHRyYXZlcnNlLnJlbW92ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAo
dHIKICAgcmV0dXJuIHRyZWU7CiB9OwogCi1mdW5jdGlvbiBoYXNCbGFja2xpc3RlZFR5cGUocGF0
aCwgc3RhdGUpIHsKK2Z1bmN0aW9uIGhhc0Jsb2NrbGlzdGVkVHlwZShwYXRoLCBzdGF0ZSkgewog
ICBpZiAocGF0aC5ub2RlLnR5cGUgPT09IHN0YXRlLnR5cGUpIHsKICAgICBzdGF0ZS5oYXMgPSB0
cnVlOwogICAgIHBhdGguc3RvcCgpOwogICB9CiB9CiAKLXRyYXZlcnNlLmhhc1R5cGUgPSBmdW5j
dGlvbiAodHJlZSwgc2NvcGUsIHR5cGUsIGJsYWNrbGlzdFR5cGVzKSB7Ci0gIGlmICgoMCwgX2lu
Y2x1ZGVzMi5kZWZhdWx0KShibGFja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNl
OwordHJhdmVyc2UuaGFzVHlwZSA9IGZ1bmN0aW9uICh0cmVlLCBzY29wZSwgdHlwZSwgYmxvY2ts
aXN0VHlwZXMpIHsKKyAgaWYgKCgwLCBfaW5jbHVkZXMyLmRlZmF1bHQpKGJsb2NrbGlzdFR5cGVz
LCB0cmVlLnR5cGUpKSByZXR1cm4gZmFsc2U7CiAKICAgaWYgKHRyZWUudHlwZSA9PT0gdHlwZSkg
cmV0dXJuIHRydWU7CiAKQEAgLTEwNDIzLDggKzEwNDIzLDggQEAgdHJhdmVyc2UuaGFzVHlwZSA9
IGZ1bmN0aW9uICh0cmVlLCBzY29wZQogICB9OwogCiAgIHRyYXZlcnNlKHRyZWUsIHsKLSAgICBi
bGFja2xpc3Q6IGJsYWNrbGlzdFR5cGVzLAotICAgIGVudGVyOiBoYXNCbGFja2xpc3RlZFR5cGUK
KyAgICBibG9ja2xpc3Q6IGJsb2NrbGlzdFR5cGVzLAorICAgIGVudGVyOiBoYXNCbG9ja2xpc3Rl
ZFR5cGUKICAgfSwgc2NvcGUsIHN0YXRlKTsKIAogICByZXR1cm4gc3RhdGUuaGFzOwpAQCAtMzcw
MTIsNyArMzcwMTIsNyBAQCBmdW5jdGlvbiBUeXBlZEFycmF5U3BlY2llc0NyZWF0ZShyZWFsbSwg
CiB2YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nOwogCiAv
KiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqLwotdmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBz
ZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUg
aWQtYmxhY2tsaXN0Cit2YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3Qn
ID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibG9ja2xpc3QKIAog
dmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnOwogdmFyIG1h
cEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnOwpAQCAtMTEzODQwLDcgKzExMzg0
MCw3IEBAIG1vZHVsZS5leHBvcnRzID0gIntcInZlcnNpb25cIjozLFwic291cmMKIC8qIDQxMSAq
LwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9
ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBbVmFsZXJpbyBQ
cm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1aWxkOiBodHRw
czovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdiMTczZDVkZWZm
NjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3JpcHRpb246IFRoZSBoZWFy
dCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNvcHlyaWdo
dDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0
aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9vbHMgcHJvZHVjdGlvbiB0
ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJhdGlvbjpcbiAg
LSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0cDovL2RlYW4u
ZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMpIDIwMDYgRGVh
biBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwOi8vb3Bl
bnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAgLSBTb21lIGZ1bmN0aW9u
YWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3Byb3RvdHlwZWpzLm9yZykg
Q29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtNSVQgTGljZW5zZV0oaHR0
cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxucHJvdmlkZXM6
IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRpdmVdXG5cbi4u
LlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFs
ZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuKi9cbihmdW5jdGlv
bigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxuXHRidWlsZDog
JzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmInXG59O1xuXG4vLyB0eXBl
T2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cdGlmIChpdGVtLiRmYW1p
bHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlmIChpdGVtLm5vZGVOYW1l
KXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnO1xuXHRcdGlm
IChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3QoaXRlbS5ub2RlVmFsdWUp
ID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlmICh0eXBlb2YgaXRlbS5s
ZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4gJ2Fy
Z3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24nO1xu
XHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGluc3RhbmNlT2YgPSB0aGlz
Lmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRlbSA9PSBudWxs
KSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9yIHx8
IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0aWYgKGNvbnN0
cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0cnVjdG9yID0gY29uc3Ry
dWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICghaXRlbS5oYXNPd25Qcm9w
ZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0ZW0gaW5zdGFu
Y2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1lcmFibGVzID0gdHJ1ZTtc
bmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMgPSBudWxsO1xuaWYgKGVu
dW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHknLCAndmFsdWVPZicsICdp
c1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywg
J3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJhYmxlcykgZm9yICh2YXIg
aSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVtZXJhYmxlc1tp
XTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIgY2Fu
IGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRob3V0IHN3YXBw
aW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBm
bi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9sdElFOD4qL1xuXG4vLyBG
dW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0aW9uO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xu
XHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoYSA9
PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdz
dHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFba10p
O1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShh
LCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRz
ZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufTtc
blxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFs
KXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5cdFx0dmFyIGFy
Z3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhO1xuXHRc
dGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJndW1lbnRzO1xuXHRcdGVs
c2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJncyl7XG5cdFx0XHRyZXN1
bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgcmVz
dWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1
bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24oa2V5
LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG5G
dW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRo
aXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuLy8gRnJv
bVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbkFycmF5LmNvbnZlcnQg
PSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHRyZXR1
cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnKSA/
ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2UuY2FsbChpdGVtKSA6IFtp
dGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJu
ICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVt
KXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJldHVybiBpc0Zpbml0ZShu
dW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252ZXJ0ID0gZnVuY3Rpb24o
aXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVuY3Rpb24uZnJvbSA9IEZ1
bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0O1xuU3RyaW5nLmZy
b20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxuXG5GdW5jdGlvbi5pbXBs
ZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVuID0gdHJ1ZTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8v
IFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3Qpe1xu
XHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHZh
ciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiAodHlwZU9mKGl0ZW0p
ID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hlY2s7
XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5wcm90b3R5cGUuJGZhbWls
eSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9KS5oaWRlKCk7
XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBudWxs
O1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBl
O1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVjdDtcblxuXHRyZXR1cm4g
b2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztc
blxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIChpdGVtICE9
IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwo
aXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFyIGhvb2tzID0ge307XG5c
bnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0eXBlT2Yob2Jq
ZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAoaG9va3NbdHlwZV0gPSBb
XSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYg
KG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZhciBob29rcyA9IGhvb2tz
T2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKyl7XG5c
dFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykg
aW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhvb2suY2FsbCh0
aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3VzID0gdGhpcy5wcm90b3R5
cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAodGhpc1tuYW1lXSA9PSBu
dWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5h
bWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBwbHkoaXRlbSwgc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xu
XHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAh
cHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtcbn07XG5cblR5cGUuaW1w
bGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpLFxuXG5c
dGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1bmN0aW9uKG5h
bWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0aGlzLnByb3Rv
dHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0bWlycm9yOiBmdW5j
dGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7XG5cbi8vIERlZmF1bHQg
VHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXtcblx0
dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90b3R5cGUgPSBvYmplY3Qu
cHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5hbWUsIG9iamVj
dCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmljID0gb2JqZWN0W2tleV0s
XG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVyaWMpIGdlbmVy
aWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9iamVjdC5pbXBsZW1lbnQo
a2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlwZSl7XG5cdFx0dmFyIG1l
dGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhvZHNb
MF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYg
KCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsg
aSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0aG9k
c1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIHByb3Rv
dHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpO1xuXHRcdH07XG5c
dH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBbXG5c
dCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFpbnMnLCAnaW5kZXhPZics
ICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNlJywgJ3NlYXJjaCcsXG5c
dCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9Mb3dl
ckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwgW1xuXHQncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnZmls
dGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3JlZHVj
ZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwgW1xuXHQndG9FeHBvbmVu
dGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1
bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdcbl0pKCdSZWdF
eHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmplY3QnLCBPYmplY3QsIFtc
blx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tleXMn
LFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dldE93
blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxlJywg
J3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0RhdGUnLCBEYXRl
LCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigpO1xu
XG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJuICsobmV3IERhdGUpO1xu
fSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8vIGZpeGVzIE5hTiByZXR1
cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9uKCl7
XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251bGwnO1xufS5oaWRlKCk7
XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFuZG9tJywgZnVuY3Rpb24o
bWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1p
biArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5cbkFycmF5Lmlt
cGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1c
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0
QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7XG5cdFx0XHRpZiAoaGFz
T3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7XG5cdFx0fVxuXHRcdC8q
PGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVuY3Rp
b24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0SUU4PiovXG5c
dFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBmbiwg
YmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5c
dFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fSk7XG5c
dH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7XG5cblxuLy8gQXJyYXkg
JiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xuXG52YXIgY2xv
bmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7XG5cdFx0Y2Fz
ZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2UgJ29iamVjdCc6IHJldHVy
biBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07XG5cdH1cbn07
XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xuXHR2YXIgaSA9IHRoaXMu
bGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGktLSkgY2xvbmVbaV0gPSBj
bG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxudmFyIG1lcmdlT25lID0g
ZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVPZihjdXJyZW50
KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yoc291cmNlW2tleV0pID09
ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpO1xuXHRcdFx0ZWxz
ZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0XHRcdGJyZWFrO1xuXHRc
dGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25lKCk7IGJyZWFrO1xuXHRc
dGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRyZXR1cm4gc291cmNlO1xu
fTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgaywgdil7
XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwg
aywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0W2tleV0pO1xuXHRcdH1c
blx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihvYmplY3Qpe1xu
XHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tl
eV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0
YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRlbmRlZCA9IGFyZ3VtZW50
c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5
XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbDtcblx0fVxuXG59
KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAnV2hpdGVTcGFjZScsICdU
ZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2goZnVuY3Rpb24obmFtZSl7
XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIgVUlEID0gRGF0
ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpe1xuXHRyZXR1
cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxu
bmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMgbGlr
ZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlcblxuLi4uXG4qL1xuXG5B
cnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBp
LCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXHRc
dGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsr
KSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtcblx0XHRcdGlmIChmbi5j
YWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcblx0XHR9XG5c
dFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVuY3Rpb24oaXRlbSwgZnJv
bSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXHRcdGZvciAodmFyIGkg
PSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9tIHx8IDA7IGkg
PCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG5c
dFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShsZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKGkg
aW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHQv
KjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmZpbHRl
cihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51bGw7XG5cdFx0fSk7XG5c
dH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0XHR2YXIgYXJncyA9IEFy
cmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7XG5c
dFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlzKXtcblx0XHR2YXIgb2Jq
ID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tpXTtc
blx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0XHRcdGlmIChv
YmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzW2ldO1xu
XHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0
fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdGNvbnRhaW5z
OiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0sIGZy
b20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHRoaXMu
cHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhpcy5s
ZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9tKDAsIHRoaXMubGVuZ3Ro
IC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRp
ZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtpXSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRc
dGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0g
aXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcnJheSA9IFtd
O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9PSAnbnVsbCcp
IGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5JyB8
fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3RhbmNl
T2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0aW9uKCl7XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRp
ZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0aW9u
KHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7XG5c
dFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGFy
cmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxuXHRyZ2JUb0hleDogZnVu
Y3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsO1xuXHRc
dGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAn
dHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmluZygxNik7XG5c
dFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJpdCk7XG5cdFx0
fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycpO1xuXHR9XG5c
bn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFzcywgYW5kIGRl
bGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxu
cHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5kKHtcblxuXHRh
dHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXJndW1lbnRz
W2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9
XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKGFy
Z3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBBcnJh
eS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1cm4gbnVsbDtc
blx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rpb24odGhhdCl7XG5cdFx0
dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gQXJy
YXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rpb24oKXt9O1xu
XG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBjb250ZXh0ID0gdGhhdCwg
bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlzIGluc3RhbmNlb2YgYm91
bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBlO1xuXHRcdFx0XHRjb250
ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdzICYmICFsZW5n
dGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRcdDogc2VsZi5hcHBseShj
b250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNlKGFyZ3VtZW50
cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNvbnRleHQgPT0gdGhhdCA/
IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5cdH0sXG5cdC8q
PC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR2YXIg
c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZlcnQo
YXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2VsZi5hcHBseShi
aW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxuXHRkZWxheTogZnVuY3Rp
b24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHRoaXMucGFzcygo
YXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtcblx0fSxcblxuXHRwZXJp
b2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0
SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVy
aW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IE51bWJlclxuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91bmQs
IHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xuXG5OdW1iZXIuaW1wbGVt
ZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRcdHJldHVybiBNYXRoLm1p
bihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbihw
cmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCku
dG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xuXHRcdHJldHVybiBNYXRo
LnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdHRpbWVzOiBm
dW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzOyBpKyspIGZu
LmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFz
ZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9XG5cbn0pO1xu
XG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0aW9uKG1hdGgpe1xuXG52
YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdGlmICghTnVt
YmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gTWF0aFtu
YW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKSkp
O1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbn0pKFsnYWJzJywg
J2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdm
bG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10p
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgU3Ry
aW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0b0lu
dC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZSwgQXJy
YXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJpbmcuaW1wbGVtZW50KHtc
blxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5nLCBpbmRleCl7XG5cdFx0
cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkgOiBTdHJpbmcodGhpcykp
LmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0ZXN0OiBmdW5j
dGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdyZWdl
eHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRoaXMp
O1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5y
ZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xu
XHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLmNo
YXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhlbmF0ZTogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0
aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hhckF0KDApLnRvTG93ZXJD
YXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBmdW5jdGlvbihtYXRjaCl7
XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRl
c2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNl
KC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9LFxuXG5cdHRv
SW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAx
MCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9h
dCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciBo
ZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sxLDJ9
KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpIDog
bnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdHZhciByZ2Ig
PSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJldHVybiAocmdiKSA/IHJn
Yi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6IGZ1bmN0aW9u
KG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVnZXhw
IHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5hbWUpe1xuXHRc
dFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTtc
blx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDogJyc7
XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEJyb3dzZXJcblxu
ZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFs
aXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBGdW5jdGlvbiwg
TnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVudF1c
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVu
dDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xuXG52YXIgcGFyc2UgPSBm
dW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG5cdHBsYXRm
b3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6ICcnKTtcblxuXHQvLyBj
aHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIGVk
Z2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNocm9tZS5cblx0dmFyIFVB
ID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSspLyk7XG5cdGlmICghVUEp
e1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx0cmlkZW50fGNy
aW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwoPzpydltcXHNc
XC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykgfHwgW251bGwsICd1bmtu
b3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0XHRVQVsxXSA9
ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9IGVsc2UgaWYgKFVBWzFd
ID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRwbGF0Zm9ybSA9
IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86d2Vi
b3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXInXSlb
MF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAnd2luZG93cyc7XG5cblx0
cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQsXG5cdFx0bmFt
ZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxuXHRcdHZlcnNpb246IHBh
cnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFbNF0gOiBVQVsyXSksXG5c
dFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJvd3NlciA9IHRoaXMuQnJv
d3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5c
bmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpe1xuXHRC
cm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbkJyb3dzZXIuZXh0
ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLFxu
XHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0fSxcblx0cGFyc2VVQTog
cGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJlcXVlc3QgPSAoZnVuY3Rp
b24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBYTUxI
dHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9z
b2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlv
bigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwgZnVuY3Rpb24o
KXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5jdGlvbigpe1xu
XHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxufSkoKTtcblxuQnJvd3Nl
ci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8gU3RyaW5nIHNj
cmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5cdGlmICghdGV4dCkgcmV0
dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93LmV4ZWNTY3Jp
cHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3VtZW50LmhlYWQu
YXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlw
dCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50KCdzdHJpcFNj
cmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAnJztcblx0dmFyIHRleHQg
PSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8XFwvc2NyaXB0Pi9naSwg
ZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxuJztcblx0XHRy
ZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5leGVjKHNjcmlw
dHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRz
LCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93LCBEb2N1bWVudFxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50LFxuXHRXaW5kb3c6IHRo
aXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0aGlzLkV2ZW50
XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdXaW5k
b3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCd3
aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtc
blx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9jdW1lbnQgPSBkb2N1bWVu
dC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pO1xuXG5k
b2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7XG5c
bkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1bWVudFtuYW1l
XSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKSB0
cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZEltYWdlQ2FjaGUnLCBmYWxz
ZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5pZiAodGhpcy5hdHRhY2hF
dmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVubG9hZEV2ZW50ID0gZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtc
blx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LndpbmRvdyA9IG51
bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7XG5cdH07XG5c
dHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xufVxuXG4vLyBJRSBm
YWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxzZWxl
Y3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkge1xuXHRhcnJheUZyb20o
ZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJheS5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYmIFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXtcblx0XHRc
dHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpO1xuXHRcdFx0d2hpbGUg
KGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFycmF5O1xuXHRcdH1cblx0
XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBwcm90b3R5cGUgPSBBcnJh
eS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7XG5cdFsncG9wJywgJ3B1
c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2Nv
bmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgbWV0
aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQoaXRlbSksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRpbmcsIGFuZCBp
bXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE51bWJlcl1cblxucHJv
dmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBDbGFzcyA9IHRo
aXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJhbXMpe1xuXHRpZiAoaW5z
dGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRpYWxpemU6IHBhcmFtc307
XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRp
ZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLiRjYWxsZXIg
PSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFyIHZhbHVlID0gKHRoaXMu
aW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRo
aXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsO1xuXHRcdHJldHVybiB2
YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7XG5cblx0bmV3Q2xhc3Mu
JGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS4kY29uc3RydWN0b3Ig
PSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDtcblxuXHRy
ZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7XG5cdGlmICgh
dGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJlbnRcIiBjYW5u
b3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxlci4kbmFtZSxcblx0XHRw
YXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRwcmV2aW91cyA9IChwYXJl
bnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlmICghcHJldmlvdXMpIHRo
cm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBubyBwYXJlbnQu
Jyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFy
IHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtc
blx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVuY3Rpb24oKXt9O1xuXHRc
dFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9IHJlc2V0KG5l
dyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IG9iamVjdFtrZXldID0g
dmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmplY3Q7XG59O1xu
XG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZC4k
b3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdyYXBwZXIgPSBmdW5jdGlv
bigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVsbCkg
dGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdcIiBjYW5ub3QgYmUgY2Fs
bGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3VycmVudCA9IHRoaXMuJGNh
bGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBwZXI7
XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHRo
aXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuXHRcdHJldHVybiBy
ZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46IG1ldGhvZCwgJG5hbWU6
IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJvcGVy
dHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywgdmFs
dWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0fVxuXG5cdGlmICh0
eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1ZS4kaGlkZGVuKSByZXR1
cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFpbikgPyB2YWx1ZSA6IHdy
YXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1lcmdlKHRoaXMu
cHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxudmFy
IGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90eXBpbmcgPSB0
cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4kcHJvdG90eXBp
bmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVudCgnaW1wbGVtZW50Jywg
aW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9IHtcblxuXHRF
eHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xuXHRc
dHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0fSxcblxuXHRJbXBsZW1l
bnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChpdGVtcykuZWFjaChmdW5j
dGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRcdFx0Zm9yICh2
YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBrZXksIGluc3RhbmNlW2tl
eV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBDbGFz
c2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBlYXNl
IHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5FeHRyYXMs
IENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnRo
aXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5cblx0Y2hhaW46IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0KCkuYXBwbHko
dGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0cmV0dXJuIHN0cmluZy5y
ZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRcdHJldHVybiBm
aXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZlbnRzID0gbmV3IENsYXNz
KHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGlu
dGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0XHRcblxuXHRcdHRoaXMu
JGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4pO1xu
XHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciB0eXBl
IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkp
e1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZl
bnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJy
YXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRp
ZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBw
bHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0eXBlID0gcmVtb3ZlT24o
dHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoZXZl
bnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBldmVudHMuaW5kZXhPZihm
bik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNbaW5kZXhdO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50
cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtc
blx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRz
W3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZlbnRzKSBldmVu
dHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0aGlzLiRldmVudHMpe1xu
XHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGludWU7XG5cdFx0XHR2YXIg
Zm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZucy5sZW5ndGg7
IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5z
W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnRo
aXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBseShudWxsLCBb
e30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRcdGlmICh0aGlzLmFkZEV2
ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRpZiAodHlwZU9mKG9wdGlv
bnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qob3B0aW9uKSkg
Y29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tvcHRpb25dKTtc
blx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLlRoZW5hYmxlXG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1wbGVt
ZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBcInRoZW5hYmxlXCIuXG5c
bmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlk
ZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIFNU
QVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFURV9SRUpFQ1RF
RCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0gbmV3IENsYXNzKHtcblxu
XHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5hYmxlUmVzdWx0OiBudWxs
LFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVl
KXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0ZTogZnVuY3Rpb24oKXtc
blx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBTVEFURV9QRU5E
SU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX0ZVTEZJ
TExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNlIFNUQVRFX1JF
SkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9XG5cdH0sXG5cblx0cmVz
ZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtc
blx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0aGVuOiBmdW5j
dGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBvbkZ1bGZpbGxl
ZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknO1xuXHRcdGlmICh0eXBl
b2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9ICdUaHJvd2VyJztcblxu
XHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4kdGhlbmFibGVS
ZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0XHRmdWxmaWxs
SGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVyOiBvblJlamVjdGVkXG5c
dFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7
XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0s
XG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0cmV0dXJuIHRoaXMudGhl
bihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFibGUuZXh0ZW5kKHtcblx0
cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJsZTtcblx0XHRpZiAodmFs
dWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVlO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0cmVzb2x2ZSh0
aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cdHJl
amVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUo
KTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gcmVzb2x2ZSh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVqZWN0KHRoZW5h
YmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBpdHNl
bGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVj
dCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIgdGhlbjtcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBjYXRjaCAoZXhj
ZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxu
XHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0dmFyIHJlc29s
dmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dHJ5IHtc
blx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0
XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7
XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRy
ZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0
XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRcdFx0XHRcdFx0
XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRcdFx0XHRcdFx0
XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAo
ZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRy
ZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9u
KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNl
IHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxz
ZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1
bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJs
ZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQg
PSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExFRDtc
blxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWplY3QodGhlbmFi
bGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVO
RElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJs
ZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9QRU5E
SU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtcblx0dmFyIHN0YXRlID0g
dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhlbmFibGUuJHRoZW5hYmxl
UmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyxcblx0
XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxIYW5kbGVyJztc
blx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhlbmFibGUuJHRo
ZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RIYW5kbGVyJztcblx0fVxu
XG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVzdWx0LCByZWFjdGlvbnMs
IHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25zLCB0
eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgKytp
KXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5kbGVyID0gcmVh
Y3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7XG5cdFx0XHRy
ZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBpZiAoaGFuZGxl
ciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0
KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50
aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5c
dFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0
XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZp
bmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7XG5cdGRlZmVy
ID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0g
J3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7XG5cdGRlZmVy
ID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xuXHR9O1xufVxuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlvbjogT2JqZWN0IGdlbmVy
aWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5
cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGsgaW4g
b2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0
cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBy
ZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5
c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtl
eSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZmlsdGVy
OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRc
dHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV0sIHZhbHVlID0gb2Jq
ZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3QpKSBy
ZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5c
blx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAoIWZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtl
eXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChmbi5jYWxs
KGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJu
IGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgdmFs
dWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07
XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVz
O1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRyZXR1cm4gT2Jq
ZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0aW9uKG9iamVj
dCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNb
aV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1cm4ga2V5O1xuXHRcdH1c
blx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24ob2JqZWN0LCB2
YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZhbHVlKSAhPSBudWxsO1xu
XHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7XG5cdFx0dmFy
IHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1bmN0aW9uKHZh
bHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAnWycgKyBrZXkgKyAnXSc7
XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRc
dFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWUsIGtl
eSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRcdFx0dmFyIHFzID0ge307
XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRcdFx0cXNb
aV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2JqZWN0LnRvUXVl
cnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IHJl
c3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0XHR9XG5c
dFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQpO1xuXHRcdH0p
O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxufSko
KTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRpb246IFN0YW5k
YWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGljay5QYXJzZXJcbi4uLlxu
Ki9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJbmRleCxcblx0
Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0cmV2ZXJzZUNh
Y2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlv
bihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0
dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVlKSByZXR1cm4gZXhwcmVz
c2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15cXHMrfFxc
cyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBjdXJyZW50Q2Fj
aGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5cdGlmIChjdXJyZW50Q2Fj
aGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07XG5cdHBhcnNl
ZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczogW10sXG5cdFx0cmF3OiBl
eHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gcGFyc2Uo
dGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9ySW5kZXggPSAtMTtcblx0
d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UocmVn
ZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVzc2lvbnMubGVu
Z3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJl
dmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1
bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0gJyEnKSByZXR1cm4gJyAn
O1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAnISc7XG5cdGVsc2UgaWYg
KCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8s
ICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07XG5cbnZhciByZXZlcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24u
ZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBp
Kyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFzdCA9IHtwYXJ0
czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmluYXRvcihleHBbMF0uY29t
YmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspe1xu
XHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0
b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNvbWJpbmF0b3Ig
PSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxhc3QpO1xuXHR9XG5cdHJl
dHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmlu
Zyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFu
IDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZVxu
XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxcXF4kfCwjXFxzXS9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9KTtcbn07XG5c
bnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1YnlcbnB1dHMg
XCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxccysjLiokfFxccyt8XFxc
XCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0ICBcXFxccyogKCAsICkg
XFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAgXFxuXFxcblx0fCBcXFxc
cyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9yICAgICAgICAgXFxuXFxc
blx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29tYmluYXRvckNoaWxkcmVu
IFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAgICAjIFRhZyAgICAgICAg
ICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBJRCAg
ICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29kZT4rICAgICAgICkgICAg
ICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsgIFxcXG5cdFx0XFxcXHMq
ICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWypeJCF+fF0/PSkgICg/OiAg
XFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwiJ10/KSguKj8pXFxcXDkg
XFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxccyogIFxcXG5cdFxcXFxd
KD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/OlxcXG5cdFxcXFwoICg/
OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClcIlxuKi9cblx0XCJeKD86
XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxcXHMrKXwoPHVu
aWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+Kyl8XFxcXFtc
XFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86XFxcXHMqKD86KFtcXFwi
J10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDorKSg8dW5pY29kZT4rKSg/
OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwoKD86XFxcXChbXildK1xc
XFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycg
KyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAnXScpXG5cdC5yZXBsYWNl
KC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2csICcoPzpbOlxcXFx3XFxc
XHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcbik7XG5cbmZ1bmN0
aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxuXHRjb21iaW5hdG9yLFxu
XHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQsXG5cdGNsYXNzTmFtZSxc
blxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRyaWJ1dGVRdW90
ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxuXHRwc2V1ZG9DbGFzcyxc
blx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBzZXVkb0NsYXNz
VmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXtcblx0
XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0XHRjb21iaW5h
dG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7XG5cdH1cblxuXHRp
ZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29tYmluYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRcdHZhciBjdXJy
ZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTtcblx0XHRp
ZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdKVxuXHRcdFx0
Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VDb21iaW5hdG9yID0gcmV2
ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNlcGFyYXRvclsrK2NvbWJp
bmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFnOiAnKid9O1xuXHR9XG5c
blx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhd
W2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJlbnRQYXJzZWQu
dGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGlk
KXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5c
blx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBs
YWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc0xpc3Qp
IGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNs
YXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xh
c3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzZXMucHVzaCh7
XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVnRXhwKCcoXnxc
XFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxzfCQpJylcblx0XHR9KTtc
blxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNl
dWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBzZXVkb0NsYXNz
VmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBsYWNlKHJlVW5l
c2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3Vy
cmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1ZG9zLnB1c2go
e1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSxcblx0XHRc
dHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNldWRvTWFya2VyLmxlbmd0
aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAoYXR0
cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycp
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4cDtcblxuXHRc
dHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDogcmVnZXhwID0g
bmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICAgICAg
ICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAg
ICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAgICApOyBicmVh
aztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICcoXnxcXFxccyknKyBl
c2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyApOyBicmVhaztcblx0XHRc
dGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhw
KGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAgJz0nIDog
dGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09
IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rp
b24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZihhdHRyaWJ1
dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0nIDogdGVzdCA9
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9IHZhbHVl
O1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYg
KGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJpYnV0ZU9wZXJh
dG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxu
XHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1
ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlmICghY3VycmVudFBhcnNl
ZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtleSxcblx0XHRc
dG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVlOiBhdHRyaWJ1dGVWYWx1
ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0cmV0dXJuICcnO1xufTtc
blxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGlj
ay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gcGFyc2UoZXhwcmVzc2lv
bik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5cbmlmICghdGhp
cy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0
eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiov
dGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRpb246IFRoZSBu
ZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlkZXM6IFNsaWNrLkZpbmRl
clxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZh
ciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRvU3RyaW5nID0gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb25cblxubG9j
YWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4gKC9cXHtcXHMqXFxbbmF0
aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5cbmxvY2FsLmlzWE1MID0g
ZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVyc2lvbikgfHwg
KCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVudCkgPT0gJ1tvYmplY3Qg
WE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xuXG5sb2NhbC5zZXREb2N1
bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1lbnRzIC8gd2lu
ZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJhcG9s
YXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlwZSA9IGRvY3VtZW50Lm5v
ZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50XG5cdGVsc2UgaWYgKG5v
ZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGVcblx0ZWxz
ZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3VtZW50LmRvY3VtZW50OyAv
LyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0aGUgb2xkIGRv
Y3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50KSByZXR1cm47XG5cdHRo
aXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUgZmVh
dHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxuXHR2YXIgcm9vdCA9IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhpcy5nZXRVSURYTUwocm9v
dCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRcdGZlYXR1cmU7
XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRc
dFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0XHRyZXR1cm47
XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7fTtcblxuXHRm
ZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMuaXNY
TUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9IGZlYXR1cmVz
LnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxuXHQ9IGZlYXR1
cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNOXG5cdD0gZmVh
dHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRl
UVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0YXJT
ZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04sIGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjtcblxu
XHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0dmFyIHRlc3ROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290ID0gZG9jdW1l
bnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHJv
b3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxuXHQvLyBvbiBub24tSFRN
TCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsgcHJv
cGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9XCInK2lkKydc
Ij48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZlYXR1cmVzLmlzSFRNTERv
Y3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykg
Zm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMgPSAodGVzdE5vZGUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRcdC8vIElFIHJldHVybnMg
Y2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1M
ID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChzZWxlY3RlZCAmJiAhIXNl
bGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtc
blx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3Rh
clNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8vIElFIHJldHVy
bnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9yIGdldEVsZW1l
bnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5u
ZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1cIicrIGlkICsnXCI+PC9i
Pic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdGlm
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8gU2FmYXJpIDMu
MiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0cnkge1xuXHRc
dFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxhIGNsYXNzPVwi
YlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJyku
bGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9ICdiJztcblx0
XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxu
XHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVjdHMg
dGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48YSBjbGFzcz1cImYgYiBh
XCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3ROb2Rl
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVudHNC
eUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtcblx0XHR9XG5cblx0XHRp
ZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJldHVybnMgY2xv
c2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZvciBz
b21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
J2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUucXVlcnlTZWxlY3RvckFs
bCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxlY3Rl
ZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkg
PT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBxdWVy
eVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGVcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIk1pWFwi
PjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5vZGUu
cXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxu
XHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25zIG9u
IHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRN
TCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29wdGlvbj48L3Nl
bGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBID0gKHRlc3ROb2RlLnF1
ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xuXHRcdFx0fSBjYXRjaCAo
ZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0clsq
XiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0
XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xuXHRcdFx0XHRm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9y
QWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQgeCwg
Zm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXRcblx0
XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj1cInNcIj48
aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9rZW5Gb3JtQXR0cmlidXRl
R2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAhPSAn
cycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVzU2VsZWN0b3Ig
ZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3QubWF0
Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290Lm1vek1hdGNoZXNTZWxl
Y3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVhdHVyZXMubmF0
aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRy
b3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxuXHRcdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpO1xuXHRcdFx0
ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRvID0gMTtcblx0XHRkZWxl
dGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlE
SFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURY
TUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5cdHRlc3ROb2Rl
ID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tl
bkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1l
dGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0aG9kKSByZXR1
cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/IGF0dHJpYnV0
ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRc
dHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0cmV0dXJuICht
ZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblx0
fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1dGUgPSAocm9v
dCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkpID8gZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTtc
blx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5vZGUuZ2V0QXR0
cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNp
ZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5zXG5cdC8vIEZJ
WE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHht
bCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5hdGl2ZURvY3VtZW50Q29u
dGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1bWVudC5jb250YWlucyk7
XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2ZURv
Y3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNv
bnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFuYXRp
dmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdC8vIElF
OCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0XHRyZXR1cm4gY29udGV4
dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKHJvb3QgJiYgcm9vdC5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRy
ZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0aWYg
KG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtcblx0
XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRcdHJldHVybiBmYWxzZTtc
blx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8vIGNyZWRpdHMgdG8gU2l6
emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9
IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlm
ICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0
ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBpbiByb290KSA/
IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJbmRl
eCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xu
XHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICgh
YS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwO1xuXHRcdHZhciBh
UmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0gYi5vd25lckRv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0KGEsIDApO1xuXHRcdGFS
YW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xuXHRcdGJSYW5n
ZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtcblxuXHRyb290ID0gbnVs
bDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVhdHVyZV0gPSBm
ZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRob2RcblxudmFyIHJlU2lt
cGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQvLFxuXHRyZUVtcHR5QXR0
cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0cXNhRmFpbEV4cENhY2hl
ID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFw
cGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8gbnVs
bCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kO1xuXHRl
bHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRleHQuZG9jdW1lbnQ7IC8v
IENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3VtZW50XG5cdGVsc2UgaWYg
KCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBcblxuXHR2YXIg
cGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhpcy51bmlxdWVzID0ge30s
XG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxuXHRcdGNvbnRl
eHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5cblx0aWYgKHRoaXMuZG9j
dW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9j
dW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lkIGR1cGxpY2F0
aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRpZiAoaGFzT3RoZXJzKSBm
b3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQoZm91bmRbaV0p
XSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRpZiAodHlwZW9mIGV4cHJl
c3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3RyaW5nXG5cblx0XHQvKjxz
aW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBsZVNlbGVjdG9yID0gZXhw
cmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1wbGVTZWxlY3RvcnM6IGlm
IChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3Rvclsx
XSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRpZiAoIXN5bWJv
bCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlROKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwg
bnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5w
dXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcjJyl7
XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1bWVu
dCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0gY29udGV4dC5nZXRFbGVt
ZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7XG5cdFx0XHRc
dGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVW
YWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChmaXJzdCkg
cmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxuXHRcdFx0fSBlbHNlIGlm
IChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwg
KCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04pICYm
IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRc
dFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5HRUJD
Til7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobmFt
ZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRc
dFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoQ2xh
c3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkgKyco
XFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRc
dFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0XHRpZiAoIShj
bGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTtcblx0XHRc
dFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhl
cnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRc
dFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDtcblxu
XHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXG5cdFx0Lyo8cXVl
cnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9yOiBpZiAoY29udGV4dC5x
dWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50XG5cdFx0
XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0XHQvL1RPRE86IG9ubHkg
c2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRcdFx0XHR8fCB0
aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5DaGVja2VkUVNB
ICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0XHR8fCAodGhp
cy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmlidXRlLnRlc3QoZXhwcmVz
c2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFjb250
ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11bHRpcGxlIGV4
cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBzaW5jZSB3ZSBjdXJyZW50
bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNzaW9u
IHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTFcblx0
XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJyZWFrIHF1ZXJ5
U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24sIF9jb250ZXh0
ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5c
dFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRcdC8vIGNyZWRpdHMgdG8g
QW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1dGUo
J2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2NvbnRleHQuc2V0QXR0cmli
dXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNraWQg
KyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0LnBhcmVudE5v
ZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIGNv
bnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtcblx0XHRcdFx0ZWxzZSBu
b2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7XG5cdFx0XHR9IGNh
dGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dID0gMTtcblx0XHRc
dFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmICgh
Y29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50SWQpIF9jb250ZXh0LnNl
dEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2NvbnRleHQucmVt
b3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBfY29udGV4dDtcblx0XHRc
dFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSkgZm9y
IChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUg
PiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3Vu
ZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytd
Oyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUp
XSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNPdGhlcnMpIHRo
aXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3F1
ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNl
KGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kO1xuXHR9
IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Npb25c
blx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8vIGV4
cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFyc2VkID0gZXhwcmVzc2lv
bjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50IHx8
IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGVcblx0XHQoZm91
bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjtcblx0XHRy
ZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1cm4gZm91bmQ7
XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+
Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNcblxuXHR0aGlz
LnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBl
ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRoLXBzZXVkby1z
ZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFwcGVuZCBpcyBu
dWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGV4cHJlc3Np
b24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2ggPSAoIWhhc090
aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVzc2lv
bnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDtcblxu
XHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0IGVuZ2luZVxu
XG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0LCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1zLCBjdXJyZW50
RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhw
cmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBl
eHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50RXhw
cmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0b3I6JyArIGN1
cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRpbnVl
IHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1cnJl
bnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtcblx0XHRpZCAgICAgICAg
ID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xpc3Q7
XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0XHRhdHRyaWJ1dGVzID0g
Y3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBzZXVk
b3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoIC0g
MSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRpZiAobGFzdEJpdCl7XG5c
dFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9IGZvdW5kO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRoaXMuZm91bmQg
PSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0aGlzW2NvbWJpbmF0b3Jd
KGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlz
dCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAobSA9
IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtcblx0XHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5sZW5ndGgpIGJyZWFrIHNl
YXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxuXG5cdFx0Y3Vy
cmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3VsZCBzb3J0IGlmIHRoZXJl
IGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4cHJlc3Npb25z
LlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkpIHRo
aXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVsbCkg
OiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAxO1xubG9jYWwudWlkayA9
ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUpe1xu
XHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtcblx0aWYgKCF1aWQpe1xu
XHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlkaywg
dWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0VUlESFRNTCA9IGZ1bmN0
aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVlTnVt
YmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9jdW1l
bnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVzdWx0
cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7XG5cdHJlc3Vs
dHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4v
Kjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwu
Y2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xcZCopPyhbYS16XSsp
PyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihhcmd1
bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTtcblx0
aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwg
ZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChhID09ICctJykgYSA9IC0x
O1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1cblx0XHQoc3BlY2lhbCA9
PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcpXHQ/IHthOiAy
LCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjogMH0gOiB7YTog
MCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9IHBhcnNlZCk7
XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwgc2libGluZywg
cG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xu
XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAoIXRoaXNbcG9zaXRpb25z
XVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAo
IXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFyZW50W2NoaWxkXSwgY291
bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGUu
bm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZU5hbWUgIT0gbm9k
ZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChl
bCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZVR5cGUgIT0g
MSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0g
PSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0
fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztcblx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5USEFyZ3VtZW50KGFyZ3Vt
ZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBhID0gcGFyc2Vk
LmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07XG5cdFx0aWYgKGEg
PT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5cdFx0XHRpZiAocG9zIDwg
YikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBvcykgcmV0dXJu
IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7XG5cdH07XG59
O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xu
fTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdGlm
ICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1ZXNbdWlkXSA9
IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59O1xuXG5sb2NhbC5tYXRj
aE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0
dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVwbGFj
ZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywgJ1skMT1cIiQyXCJdJykp
O1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZhciBwYXJzZWQgPSB0aGlz
LlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiB0cnVlO1xuXG5c
dC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJlc3Npb25zID0gcGFyc2Vk
LmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Npb247
XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpe1xuXHRcdFx0dmFyIGV4
cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihu
b2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJDYXNl
KCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykpIHJl
dHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRcdH1cblx0fVxuXG5cdGlm
IChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBpdGVtO1xuXHRm
b3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChpdGVtID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5tYXRjaFBzZXVk
byA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFyIHBzZXVkb05hbWUgPSAn
cHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNbcHNl
dWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRBdHRy
aWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8gYXJndW1lbnQgPT0gYXR0
cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9yID0gZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0
YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gbm9kZS5ub2Rl
TmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRpZiAodGFnID09ICcqJyl7
XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBjb21t
ZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG5vZGVO
YW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpZCAmJiBub2Rl
LmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBpLCBwYXJ0
LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0aWYgKCEoY2xz
ICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRp
ZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTspe1xuXHRcdHBh
cnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVzdCh0
aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9zKSBmb3IgKGkg
PSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07XG5cdFx0aWYg
KCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJuIGZh
bHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJpbmF0b3JzID0ge1xuXG5c
dCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxuXHRcdHZhciBp
LCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERvY3VtZW50KXtcblx0XHRc
dGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMuaWRH
ZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUg
IT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyB3
aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlmIHRoZXJlcyBq
dXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxsIGJlIGEgY29s
bGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRdO1xuXHRcdFx0XHRcdGlm
ICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBdKSBjaGlsZHJl
biA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2kr
K107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lk
Jyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQpe1xu
XHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWl0ZW0p
e1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBkb20gd2UgcmV0dXJuLCBl
bHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJZCBsYWJlbFxuXHRcdFx0
XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjtcblx0XHRcdFx0
XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCAh
PT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuO1xuXHRcdFx0XHR0
aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtc
blx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYgKGNsYXNzZXMg
JiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0
XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0Lmpv
aW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJy
ZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytd
OykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xu
XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7XG5cdFx0XHRj
aGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcblx0XHRcdGlmICghKGNo
aWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRcdFx0aWYgKCF0
aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZvciAoaSA9IDA7IGl0ZW0g
PSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRyZW5c
blx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRpZiAobm9kZS5u
b2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7XG5c
dH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5c
dFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUuZmlyc3RD
aGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlz
LnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzXG5c
dFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9k
ZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7
XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRV
bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnKysnOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29tYmluYXRvcjorJ10obm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBzaWJsaW5nc1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1bmN0aW9uKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBhbGwgcGFyZW50
IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2Rl
KSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IHBh
cmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0aWYgKG5v
ZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5jdGlvbihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0JyFeJzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGxh
c3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRc
dFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOiEr
J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxu
XHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5v
ZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250
aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlz
LmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMgaW4gY29tYmluYXRvcnMp
IGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52YXIgcHNldWRv
cyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2VtcHR5JzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHJldHVybiAhKGNo
aWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9kZS50
ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3QnOiBmdW5jdGlvbihub2Rl
LCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUsIGV4cHJlc3Np
b24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpe1xuXHRcdHJl
dHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhPZih0
ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LWNo
aWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGlu
ZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2
ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChw
cmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5c
dFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBlID09
IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjxudGgtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8o
J2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5cblx0J250aC1sYXN0LWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5n
JywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1
ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlwZScsIHRydWUpLFxuXG5c
dCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAn
cHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0J2luZGV4Jzog
ZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxk
J10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBmdW5jdGlvbihu
b2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybicpO1xu
XHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8L250aC1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2ZpcnN0
LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVO
YW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0
fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1l
ID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFy
IHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChwcmV2
ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFtZSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBm
YWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2YtdHlwZS1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQnZGlzYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQn
Y2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmNoZWNrZWQgfHwgbm9k
ZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1
cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09
IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUobm9k
ZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdzZWxlY3RlZCc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0Lyo8L3BzZXVk
by1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3BzZXVk
bzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNcblxudmFyIGF0
dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5cdCdmb3InOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1sRm9y
IDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdocmVmJzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVm
JywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4dCA6
IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRleCc6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ3Rh
YmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3Bl
Y2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQndHlw
ZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG5c
dH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUg
PSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVycy5NQVhMRU5HVEggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4bGVuZ3RoO1xu
XG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRlclxuXG5TbGlj
ay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7XG59O1xuXG5TbGlj
ay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5cdHJldHVybiBsb2NhbC5z
ZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4vLyBTbGljayBj
b250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVy
LCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtcblx0cmV0dXJuIGxvY2Fs
LmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgZ2V0
dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2Nh
bC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0ZShub2RlLCBu
YW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0ZShu
b2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xpY2subWF0Y2ggPSBmdW5j
dGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2VsZWN0b3IpKSByZXR1cm4g
ZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0cnVl
O1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLm1hdGNoTm9kZShu
b2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgYWNjZXNzb3JcblxuU2xp
Y2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2su
bG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5cdHJldHVybiBsb2NhbC5h
dHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNldWRvIGFjY2Vzc29yXG5c
blNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWxbJ3BzZXVk
bzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0dXJuIGZuLmNh
bGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxv
b2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRvID0gbG9jYWxbJ3BzZXVk
bzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7XG5c
dFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIG51
bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3JcblxuU2xpY2sub3ZlcnJpZGUg
PSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUocmVnZXhwLCBmbik7XG5c
dHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDtcblxuU2xpY2su
dWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9kZSk7
XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHko
Lyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6
IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnRcblxuZGVz
Y3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMuIENv
bnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4g
aGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBl
YXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1bmN0
aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJdXG5cbnByb3Zp
ZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc11cblxuLi4u
XG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJvcHMp
e1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9yc1t0YWddO1xuXHRpZiAo
a29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0eXBlb2YgdGFn
ICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMpO1xuXG5cdGlm
ICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0rJC8pLnRlc3QodGFnKSl7
XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07XG5c
dFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFyc2VkLnRhZztcblx0XHRp
ZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlkO1xu
XG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztcblx0XHRpZiAoYXR0cmli
dXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRcdGlmIChwcm9wc1thdHRy
LmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRyLnZhbHVlICE9IG51bGwg
JiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9IGF0dHIudmFsdWU7XG5c
dFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJvcHNbYXR0ci5r
ZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAmJiBwcm9wc1sn
Y2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xpc3Quam9pbign
ICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQodGFnLCBwcm9wcyk7XG59
O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnByb3RvdHlwZSA9IEJyb3dz
ZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdyYXBw
aW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9uKGZpcmVFdmVu
dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdHJldHVybiBmaXJl
RXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0fSkoRWxlbWVudC5wcm90
b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJy
b3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVbbmFtZV0pIHJldHVybjtc
blxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJl
c3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0cnVlO1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1l
bnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVudFtuYW1lXS5hcHBseShl
bGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5cGVPZihyZXN1
bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxlbWVudHMpID8gbmV3IEVs
ZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVtZW50cy5pbXBsZW1lbnQo
b2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucGFyZW50ID0g
T2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCckY29uc3RydWN0b3InOiBF
bGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgnZWxlbWVudCcpLmhpZGUo
KVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdFx0
RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xufVxuXG5FbGVtZW50LkNv
bnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUnLCBm
dW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtcblx0XHRw
cm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24ob2JqKXtcblx0
XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHByb3BzID0g
cGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBhcmFtcy5pZnJhbWUpIGlm
cmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIgb25sb2FkID0gcHJvcHMu
b25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9ubG9hZDtcblx0cHJvcHMu
aWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUgPyAoaWZyYW1l
LmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51bmlxdWVJRCgpXS5waWNr
KCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMpO1xu
XG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5jYWxsKGlmcmFtZS5jb250
ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1twcm9wcy5pZF0pIG9uTG9h
ZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG5cdHJldHVy
biBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0aW9u
KG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFyIHVuaXF1ZXMg
PSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0
XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlmICghdW5pcXVlc1t1aWRd
KXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5wdXNoKG5vZGUp
O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJvdG90eXBlID0ge2xlbmd0
aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5cGUoJ0VsZW1lbnRzJywg
RWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJpbmQp
e1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRz
KEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVuY3Rp
b24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRcdH0gOiBmaWx0
ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07XG5cdFx0
fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9LnByb3RlY3QoKSxcblxu
XHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRl
bSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgaXRlbXMucHVz
aChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5
KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5jdGlvbigpe1xu
XHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0g
PSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkpIG5ld0Vs
ZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVudHMucHVzaChpdGVtKTtc
blx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRhcHBl
bmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sbGVj
dGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0
d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVuY3Rpb24oKXtcblxuLy8g
RkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycw
JzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpO1xu
aWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9u
KCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9IHNwbGljZS5h
cHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3RoKSBk
ZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59LnByb3RlY3QoKSk7XG5c
bkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1lKXtcblx0RWxlbWVudHMu
aW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWlycm9yKEVsZW1lbnRzKTtc
blxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUw7XG50cnkge1xuXHRj
cmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlucHV0
IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5cbnZhciBlc2NhcGVRdW90
ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwpLnJlcGxhY2UoLyYvZywg
JyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8qPC9sdElFOD4qL1xuXG4v
KjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1l
bnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkg
e1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0
ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztc
bn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdFbGVt
ZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMpe1xuXHRcdFx0aWYgKHBy
b3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVja2Vk
O1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PSAn
cmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7XG5cdFx0
XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNoYW5n
aW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFjYW5DaGFuZ2VTdHlsZUhU
TUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVFbGVtZW50LnNldEF0dHJp
YnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkgZGVsZXRl
IHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxlRWxlbWVudCkuc2V0KHBy
b3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJRTg+Ki8vLyBG
aXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBpbiBJRSA8IDhcblx0XHRc
dGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAnPCcgKyB0YWc7
XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwiJyArIGVzY2FwZVF1b3Rl
cyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSB0YWcgKz0gJyB0
eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7XG5cdFx0XHRcdHRhZyAr
PSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
dHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtcblx0fVxuXG59KTtcblxu
fSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRvdyk7XG5TbGljay51aWRP
Zihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3VGV4dE5vZGU6IGZ1
bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHR9
LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy53aW5kb3c7XG5cdH0s
XG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0ge1xuXG5cdFx0XHRzdHJp
bmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlkID0gU2xpY2suZmluZChk
b2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7XG5cdFx0XHRcdHJldHVy
biAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0XHR9LFxuXG5c
dFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRcdFx0U2xpY2sudWlkT2Yo
ZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAmJiAhKC9eKD86b2JqZWN0
fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZpcmVFdmVudCA9
IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBvciBl
bHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50
KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZlbnQpO1xuXHRcdFx0XHRc
dH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0XHRcdG9iamVjdDogZnVu
Y3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmoudG9FbGVtZW50KSByZXR1
cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7XG5cdFx0XHRcdHJl
dHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVzLnRleHRub2RlID0gdHlw
ZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3VtZW50ID0gZnVuY3Rpb24o
emVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9u
KGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51bmlx
dWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKGVsKTtcblx0XHRc
dHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRv
Y3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xuXG5pZiAod2luZG93LiQg
PT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7XG5cdHJldHVy
biBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7XG5cbldpbmRvdy5pbXBs
ZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmRv
Y3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcs
IHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIFNs
aWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9LFxuXG5cdGdl
dEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChT
bGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtcblxudmFyIGNvbnRhaW5z
ID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJuIFNsaWNrLmNvbnRhaW5z
KHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50
LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5cblxuXG4vLyB0cmVlIHdh
bGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjb21i
aW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjtcblxuXHRleHBy
ZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Npb24pKTtcblxuXHR2YXIg
ZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gZXhw
cmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0b3Ig
PSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxuT2JqZWN0LmZvckVh
Y2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4nLFxuXHRnZXRQYXJlbnQ6
ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1l
bnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVt
ZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0p
O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0QWxsUHJldmlv
dXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGlsZHJlbjogJz4nLFxuXHRn
ZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7
XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRGaXJzdDogZnVuY3Rp
b24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlz
LCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtcblx0fSxcblxuXHRnZXRM
YXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2su
c2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFzdCgp
KTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3du
ZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRnZXRFbGVtZW50QnlJZDog
ZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsICcj
JyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpKTtcblx0fSxcblxuXHRt
YXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFleHByZXNzaW9uIHx8IFNs
aWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xuXG5cblxuaWYgKHdpbmRv
dy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0aW9uKHNlbGVjdG9yKXtc
blx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9
PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3Rvciwg
bmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVyYWJsZShzZWxlY3Rvcikp
IHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJldHVybiBuZXcgRWxlbWVu
dHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFyIGluc2VydGVycyA9IHtc
blxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9y
ZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oY29udGV4dCwg
ZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAo
cGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQubmV4dFNpYmxpbmcp
O1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxl
bWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0aW9uKGNvbnRl
eHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQu
Zmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lkZSA9IGluc2VydGVycy5i
b3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZhciBwcm9wZXJ0
eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8vIHByb3BlcnRpZXNcblxu
dmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQndHlwZScsICd2YWx1ZScs
ICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5n
JywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3BhbicsICd0YWJJbmRleCcsICd1
c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJvcGVydHkudG9M
b3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwgPSAnaW5uZXJI
VE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS50
ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENvbnRlbnQnO1xuXG5PYmpl
Y3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkpe1xuXHRwcm9wZXJ0eVNl
dHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW3JlYWxdID0gdmFs
dWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+Ki9cbnByb3BlcnR5U2V0
dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7
XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2RlLnNldCgnaHRtbCcsIHZh
bHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlO1xuXHR9O1xufSko
cHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9IChmdW5jdGlv
bihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlLmdl
dCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdldHRlcihub2RlKTtcblx0
fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4vLyBCb29sZWFu
c1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNs
YXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFkT25seScsICdt
dWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZlcicsICdkZWZhdWx0Q2hl
Y2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXknLFxuXHQnbG9vcCdcbl07
XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24oYm9v
bCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVhbnNbbG93ZXJd
ID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2xv
d2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVbYm9vbF07XG5cdH07XG59
KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHByb3BlcnR5U2V0dGVycywg
e1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2NsYXNzTmFtZScg
aW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykgOiBub2RlLnNldEF0dHJp
YnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9uKG5vZGUsIHZh
bHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1sRm9yID0gdmFsdWUgOiBu
b2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0
aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1RleHQg
PSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTtcblx0fSxcblxuXHQn
dmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9ICh2YWx1ZSAh
PSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3BlcnR5R2V0dGVyc1snY2xh
c3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUpID8g
bm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xufTtc
blxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRv
bicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRyeSB7IGVsLnR5
cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicpIHBy
b3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRub2RlLnNldEF0
dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4vKiA8L3dlYmtpdD4gKi9c
blxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRN
TCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7
XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcg
PSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdp
bjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31c
blx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZhciBpbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwgaHRtbDVJbnB1
dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0JztcbmlucHV0LnR5cGUgPSAn
c3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0JztcblxuLy8g
IzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlpbmcgdG8gdXNl
IGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xuXHRpbnB1dC50
eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1dC50eXBlID09ICdlbWFp
bCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0aWxlSW5wdXRW
YWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rp
b24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52YWx1ZTtcblx0
XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBjYXRjaCAo
ZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi9cblxu
LyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRpdil7
XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChkaXYuZ2V0QXR0cmlidXRl
KCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0dGVzdC5pbm5l
ckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhcIiB2YWx1ZT1cInRoZSB1
bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUodHJ1ZSkuZmly
c3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNzTGlzdCA9ICEhZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIgY2xhc3NlcyA9IGZ1bmN0
aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJykuY2xl
YW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBjbGFzc05hbWVzLmZpbHRl
cihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUgIT09ICcnICYmICF1bmlx
dWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7XG5c
dH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMu
Y2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NMaXN0ID0gZnVu
Y3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbn07XG5cbkVsZW1l
bnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xu
XHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtc
blx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dGVXaGl0ZUxpc3Q7XG5cdFx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRlTGlzdCA9IHRoaXMucmV0
cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHQvKiA8L2x0SUU5PiAqL1xu
XG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRl
KG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRlc0dldEF0
dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXTtcblx0XHRcdFx0LyogPC9s
dElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKG5hbWUs
ICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xsdXRl
c0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0
LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5cdFx0Zm9yICh2YXIgYXR0
cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1
dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5
OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0ZXJzW25hbWUu
dG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdldHRlcih0aGlzKTtcblx0
XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKXtcblx0XHRcdHZh
ciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVXaGl0ZUxpc3Qg
PSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywge30pO1xuXHRcdFx0aWYgKCFh
dHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0dHJpYnV0ZVdo
aXRlTGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MO1xuXHRc
dFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmluZCBtZW50aW9uIG9mIGF0
dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwgb3V0ZXIuc2VhcmNoKC9c
XC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJuIG51
bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHR9XG5c
dFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0dHJp
YnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNrLmhhc0F0dHJp
YnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxuXG5cdGdldFByb3BlcnRp
ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50cyk7
XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0ZShh
cmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0
dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1vdmVQ
cm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlv
bihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3By
b3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNhbGwo
dGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5cdH0ub3Zlcmxv
YWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9
IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHByb3BlcnR5ICYmIHByb3Bl
cnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5KHBy
b3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKHByb3Ape1xu
XHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVy
dHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0aGlz
LnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhhc0Ns
YXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiB0aGlz
LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1l
KXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlzdCwgdGhpcyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHRoaXMu
Y2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSkuam9p
bignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBoYXNDbGFz
c0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JF
YWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDog
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXModGhpcy5j
bGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNzTmFtZXMuZXJh
c2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2luKCcg
Jyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGNs
YXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhh
c0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFkZENsYXNzKGNs
YXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRvcHQ6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9
IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXHRc
dGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xu
XHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1ZSk7XG5cdFx0
XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblxuXHRc
dGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7XG5cdFx0
cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUodGV4dCksIHdo
ZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVy
c1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0
aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlvbihlbCl7XG5c
dFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9kZS5yZXBsYWNl
Q2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBzOiBmdW5j
dGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdHJl
dHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5cblx0Z2V0U2Vs
ZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkgMy4y
LjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQodGhpcy5vcHRpb25zKS5m
aWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQ7XG5c
dFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHF1
ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4
dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBlID0gZWwudHlwZTtcblx0
XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8IHR5
cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJldHVy
bjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8gZWwu
Z2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0Ly8gSUVcblx0XHRcdFx0
cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkgOiAoKHR5cGUg
PT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51bGwg
OiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQodmFsdWUpLmVhY2goZnVu
Y3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5
U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2RlVVJJ
Q29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHF1ZXJ5U3Ry
aW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5cbnZhciBhcHBl
bmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0ZXI6ICdhZnRl
ckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVnaW4nLFxuXHRp
bnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCgnYXBwZW5kSFRNTCcs
ICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkg
PyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRIVE1MKGFwcGVu
ZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4gdGhpcztcbn0g
OiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdics
IHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsXG5cdFx0ZnJh
Z21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0dXJuIHRoaXM7
XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVu
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChjaGlsZHJl
bltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShmcmFn
bWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0ZWQgPSB7fSwg
c3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0dXJuIChzdG9y
YWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52YXIgY2xlYW4gPSBmdW5j
dGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRpZiAoaXRlbS5y
ZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChpdGVtLmNsZWFyQXR0cmli
dXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxsKXtcblx0XHRk
ZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtcblx0fVxuXHRy
ZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywgb3B0
aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGlsZHJlbiA9IGNsZWFuKHRo
aXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXkuZWFjaChjaGlsZHJlbiwg
Y2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0
fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252ZXJ0KHRoaXMuY2hpbGRO
b2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBhcmVudE5vZGUpID8gdGhp
cy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0fSxcblxuXHRjbG9uZTog
ZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMgPSBjb250ZW50cyAhPT0g
ZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29udGVudHMpLCBjZSA9IFtj
bG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0XHRcdGNlLmFw
cGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0
XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHR2YXIg
bm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAoIWtlZXBpZCkgbm9kZS5y
ZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKG5vZGUu
Y2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0XHRc
dFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUucmVtb3ZlQXR0
cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUub3B0aW9ucyl7XG5cdFx0
XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9ucztcblx0XHRc
dFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVvW2pd
LnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRc
dHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVtZW50W3Byb3Bd
O1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVnKXtcblx0XHRc
dHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSwgdG8gPSB0aGlz
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZvciAoaSA9IGNvLmxlbmd0
aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRcdH1cblx0XHQv
KjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9XG5cbn0pO1xu
XG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0
YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAod2luZG93LmF0dGFjaEV2
ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0ZWRbU2xpY2su
dWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5l
cikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0
ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAo
dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwg
Zm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyArIHR5
cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRyaWV2ZTogZnVuY3Rpb24o
cHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMp
KSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0ICE9IG51bGwgJiYgcHJv
cCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRcdHJldHVybiBw
cm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9yZTogZnVuY3Rpb24ocHJv
cGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7
XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdl
dChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xuaWYgKHdpbmRvdy5hdHRh
Y2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2MgPSBmdW5jdGlv
bigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlmICh3aW5kb3cu
Q29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2luZG93LnJlbW92ZUxpc3Rl
bmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywg
Z2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGllcyA9IHt9O1xuXG5cblxu
RWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVuY3Rpb24oc3R5bGUpe1xu
XHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5j
dGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07XG5cbkVsZW1l
bnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRp
ZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRcdGlmIChodG1sID09IG51
bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkgPT0gJ2FycmF5JykgaHRt
bCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0aGlzLnN0eWxl
U2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQgPSBo
dG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHR9LFxu
XHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcsICcnKTtcblx0fVxuXG59
O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlubmVy
SFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xuXG4vKjxsdElFOT4qL1xu
Ly8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5lcnNo
aXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgZnJhZ21l
bnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1cHBvcnRzSFRNTDVFbGVt
ZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0
YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJr
IG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8nLnNw
bGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
LCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1lbnQo
dGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5zdXBw
b3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHR2YXIg
dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHR0YWJsZS5pbm5lckhU
TUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7XG59KTtcblxuLyo8bHRG
RjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAnPHRk
PjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJIVE1MID0gKHRy
LmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZGND4qL1xuXG5pZiAoIXN1
cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBvcnRz
SFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0ID0gKGZ1bmN0
aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRcdFx0dGFibGU6IFsxLCAn
PHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxlY3Q+JywgJzwv
c2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48
L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90
Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9ucy50aGVhZCA9IHRyYW5z
bGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRcdHJldHVybiBmdW5jdGlv
bihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQp
IHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0
dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtcblx0XHRcdGlmICghd3Jh
cCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107XG5cdFx0XHRp
ZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxuXHRcdFx0dmFyIGxldmVs
ID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0YXJn
ZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50
LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5lckhUTUwgPSBbd3JhcFsx
XSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRcdFx0d2hpbGUgKGxldmVs
LS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0eSgpLmFkb3B0
KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBm
cmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIgPSBudWxsO1xuXHRc
dH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8qPC9JRT4qL1xu
XG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9y
bScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+PC9z
ZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVtZW50
LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFy
IHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdzZWxlY3QnKSByZXR1cm4g
dGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlz
LmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBvcHRp
b24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUo
J3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQp
ID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKG9wdGlvblZh
bHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cdFx0fVxuXHR9
LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0gdGhpcywgdGFnID0gb3B0
aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAnb3B0
aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRpZiAodGFnID09
ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVkKClbMF0pKSByZXR1cm4g
Jyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpO1xu
XHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRp
b24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVsbDtcbi8qPC9sdElFOT4q
L1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmdldEF0dHJp
YnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtcblx0c2V0OiBmdW5jdGlv
bihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9
IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgbnVs
bDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0
cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8L0lFPiovXG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBF
dmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nlci5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwg
QXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlkZXM6IEV2ZW50XG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xudmFyIG5vcm1hbGl6ZVdo
ZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxpemVkO1xuXHRpZiAoZXZl
bnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50LndoZWVsRGVsdGEgJSAxMjAg
PT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVlbERlbHRhIC8gMTI7XG5c
dH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRh
aWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAzID09IDAgPyByYXdBbW91
bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVkO1xufTtc
blxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcsIGZ1
bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2luZG93O1xuXHRldmVudCA9
IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2ZW50
O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1ZTtcblx0dGhp
cy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVudC5jdHJsS2V5
O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRhID0gZXZlbnQubWV0YUtl
eTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xuXHR2YXIgdGFyZ2V0ID0g
ZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFy
Z2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHR0aGlzLnRh
cmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUuaW5kZXhPZigna2V5Jykg
PT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQud2hpY2ggfHwgZXZlbnQu
a2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykgdGhp
cy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5ZG93bicgfHwgdHlwZSA9
PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUgPCAxMjQpIHRoaXMua2V5
ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1ICYmIGNvZGUg
PCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRpZiAodGhpcy5rZXkgPT0g
bnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7
XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2RibGNsaWNrJyB8fCB0
eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ0RPTU1v
dXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0dmFyIGRvYyA9
IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRN
b2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRcdHRoaXMucGFn
ZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIDogZXZl
bnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51
bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNjcm9sbFRvcFxuXHRcdH07
XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBl
dmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVudFgsXG5cdFx0XHR5OiAo
ZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5wYWdlWU9mZnNldCA6IGV2
ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwg
dHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0gbm9y
bWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENsaWNrID0gKGV2ZW50Lndo
aWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0eXBlID09ICdtb3VzZW92
ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0eXBl
ID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUgPT0gJ21vdXNl
b3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIgcmVsYXRlZCA9IGV2ZW50
LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJvbScgOiAndG8nKSArICdF
bGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVkLm5vZGVUeXBlID09IDMp
IHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQg
PSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZS5pbmRleE9m
KCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykgPT0gMCl7XG5cdFx0dGhp
cy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBldmVudC5zY2Fs
ZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXHRcdHRo
aXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2YXIgdG91Y2hl
cyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYgdG91
Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0dGhpcy5wYWdl
ID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlzLmNsaWVudCA9
IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0XHR9XG5cdH1cblxuXHRp
ZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAoIXRoaXMucGFnZSkgdGhp
cy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtcblxuXHRzdG9wOiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0aW9u
KCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0
XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVu
dC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGVsc2Ug
dGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkpe1xuXHRfa2V5
c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01FdmVudC5kZWZpbmVLZXlz
ID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5ET01FdmVudC5k
ZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAnMzcnOiAnbGVmdCcsICcz
OSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNrc3Bh
Y2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzogJ2VudGVyJ1xufSk7XG5c
bn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50XG5cbmRlc2Ny
aXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBldmVudHMu
IFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgY3VzdG9t
IEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92aWRlczogRWxlbWVudC5F
dmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50LlByb3BlcnRpZXMuZXZl
bnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRFdmVudHMoZXZlbnRzKTtc
bn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhp
cy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRzW3R5cGVdKSBldmVudHNb
dHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChldmVudHNbdHlwZV0ua2V5
cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLnB1c2go
Zm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBFbGVtZW50LkV2
ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5c
dFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2Fs
bCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7XG5cdFx0XHRc
dGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRpZiAoY3VzdG9tLmNvbmRp
dGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQp
O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYg
KGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNh
bGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVuY3Rpb24oKXtcblx0XHRc
dHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2ZW50ID0gRWxl
bWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVudCl7XG5cdFx0
XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0V2luZG93KCkp
O1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNlKSBl
dmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkZExpc3RlbmVy
KHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0XHRldmVudHNbdHlwZV0u
dmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZl
bnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgn
ZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7
XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGluZGV4ID0gbGlzdC5rZXlz
LmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFy
IHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LmtleXNbaW5kZXhd
O1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFyIGN1c3RvbSA9IEVsZW1l
bnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vblJl
bW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1
c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlz
LCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkg
PyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpcztc
blx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgZXZl
bnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNbZXZlbnRdKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5c
dFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXtcblx0XHRc
dGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVd
KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0YWNoZWQgPSB0aGlzLnJl
dHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpcztcblx0XHRp
ZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMucmVtb3ZlRXZl
bnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpO1xuXHRcdH0gZWxzZSBp
ZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVudHNdLmtleXMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBmbik7XG5cdFx0
XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRl
bGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYg
KCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5
LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZu
KXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0
ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7XG5cdFx0ZnJv
bSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBmcm9tLnJldHJpZXZlKCdl
dmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCF0eXBlKXtc
blx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJv
bSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5cdFx0XHRldmVu
dHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5hZGRFdmVudCh0
eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGljazogMiwgZGJsY2xpY2s6
IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0
dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6IDIsIC8vbW91
c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxl
Y3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50XG5cdGtleWRvd246IDIs
IGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmllbnRhdGlvbmNoYW5nZTog
MiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6IDIs
IHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVjaGFu
Z2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJsdXI6IDIsIGNo
YW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBwYXN0ZTogMiwgaW5wdXQ6
IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9yZXVubG9hZDog
MiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFkeXN0YXRlY2hh
bmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNob3c6
IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBhYm9ydDogMSwgc2Nyb2xs
OiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVudHMgPSB7XG5cdG1vdXNl
d2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hlZWwnIDogJ29u
bW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAnRE9NTW91c2VTY3JvbGwn
XG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIHJlbGF0ZWQg
PSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBudWxsKSByZXR1cm4gdHJ1
ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAocmVsYXRlZCAhPSB0
aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9jdW1l
bnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlmICgnb25tb3VzZWVudGVy
JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5t
b3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2ZSA9IDI7XG5cdEVsZW1l
bnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRFbGVtZW50LkV2ZW50cy5t
b3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRcdGJhc2U6ICdt
b3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxuXG4vKjxsdElFOT4qL1xu
aWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLnBy
b3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdlID0ge1xuXHRcdGJhc2U6
IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0XHRcdHJldHVybiAo
dGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09
ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJztcblx0XHR9LFxuXHRc
dGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUgIT0g
J3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0gJ2NoZWNrZWQn
O1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVs
ZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgZm9yIG1v
cmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5E
ZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZXZlbnRMaXN0ZW5l
clN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5FbGVtZW50Lk5hdGl2ZUV2
ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNvdXQgPSAyO1xuXG52YXIg
YnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHR3
aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAobWF0Y2godGFyZ2V0LCBl
dmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7XG5cdFx0dGFyZ2V0
ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59O1xuXG52YXIgbWFwID0g
e1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7XG5cdFx0YmFz
ZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5c
dH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3VwcG9y
dCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVyOiB7XG5cdFx0
YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9jdXNvdXQnLFxuXHRcdGNh
cHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0gJyRkZWxlZ2F0
aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cblx0cmV0dXJuIHtc
blxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24oc2VsZiwgdWlk
KXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5l
cnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFyIGkg
PSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRoZSBmb3JtIG1heSBoYXZl
IGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQvLyByZW1vdmVF
dmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVudCB3YXNcblx0XHRcdFx0
Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVu
dCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7XG5cdFx0XHR9
XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwg
dGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0LmdldCgndGFnJykgPT0gJ2Zv
cm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtcblx0XHRcdGlm
ICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5yZXRyaWV2ZShf
a2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxpc3RlbmVyID0gbGlzdGVu
ZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1zID0gbGlzdGVu
ZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYgKGZvcm1zLmluZGV4T2Yo
Zm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5cblx0XHRcdHZh
ciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVudCh0eXBlLCBf
Zm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVuZXJzW3VpZF0gPSBsaXN0
ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywgbGlzdGVu
ZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9uKHR5
cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0XHR2YXIgZXZlbnRzID0g
e2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2ZW50cyk7XG5c
dFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0
YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0
XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xufTtcblxuaWYg
KCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHtcblx0c3VibWl0OiBm
b3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2VydmVyKCdyZXNldCcpLFxu
XHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlucHV0T2JzZXJ2
ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJvdG8gPSBFbGVtZW50LnBy
b3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0cmVtb3ZlRXZlbnQgPSBw
cm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2Qpe1xu
XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlmICh0eXBlLmlu
ZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0eXBlKS5leHByZXNzaW9u
c1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxheScpIHJldHVy
biBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIG5ld1R5cGUg
PSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24o
cHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtleSArIChwc2V1ZG8udmFs
dWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0fSk7XG5cdFx0b2xkLmNh
bGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBuZXdUeXBl
LCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtcblxudmFyIGRlbGVnYXRp
b24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7XG5cdFx0dmFy
IHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9y
YWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQgaW4gc3RvcmVkKXtcblx0
XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191aWRdLm1hdGNoID09IG1h
dGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBlLCBfbWF0Y2gg
PSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0dHlwZSA9IF9t
YXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0KXtcblx0XHRc
dHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxuXHRcdHZhciBl
bGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9tYXAuY29uZGl0
aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0aW9uKXtcblx0XHRcdHZh
ciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRF
dmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnQpe1xu
XHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRpb24uY2FsbCh0
YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGYgPSB0
aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVsZWdhdG9yID0gX21hcC5s
aXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2
ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRh
cmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpO1xu
XHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFyZ2V0ICYmIGV2
ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0aWYgKHRh
cmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHR9O1xu
XG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRdID0ge1xuXHRc
dFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0b3I6IGRlbGVn
YXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0cmV0dXJuIGFk
ZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHR9LFxu
XG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQpe1xuXHRcdHZh
ciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3Rv
cmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0XHRpZiAoX3Vp
ZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0uZGVs
ZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9tYXAuYmFzZSB8
fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3VpZCk7
XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9y
ZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3Is
IF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRcdGlmIChmbikg
Zm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRp
ZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5yZW1v
dmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpO1xuXHRcdH0gZWxzZSBm
b3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlm
IChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlw
ZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xu
XHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRkRXZlbnQpLFxuXHRyZW1v
dmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpXG59KTtc
blxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxlXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxl
bWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVudC5TdHlsZVxuXG4uLi5c
biovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsO1xuXG4v
LzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0eWxl
cyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUuY29sb3IgPSBudWxsO1xu
dmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJztcblxuLy8g
Y2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxlcyBp
biB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgtc3R5
bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJztcbmVsLnN0eWxlLmJv
cmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0eWxl
LmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZhciBoYXNHZXRD
b21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxcblx0c3VwcG9ydEJvcmRl
clJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJvcmRlclJhZGl1
cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0ge3NldDogZnVuY3Rpb24o
c3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xuXG52YXIgaGFzT3BhY2l0
eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9IChodG1sLnN0
eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNpdHk9KFtcXGQu
XSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0
eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVsZW1lbnQuc3R5
bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNpYmxl
JyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0RmlsdGVyID0gZnVuY3Rpb24o
ZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG5c
dFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmls
dGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVzdChmaWx0ZXIpID8gZmls
dGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1ZSkudHJpbSgp
O1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTtc
bn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlv
bihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTtc
bn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGlmICghZWxl
bWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkgZWxl
bWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBvcGFjaXR5ID09
IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7XG5cdFx0aWYgKG9wYWNp
dHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50LCBy
ZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCkubGlt
aXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZpc2liaWxpdHkpKTtcblxu
dmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIg
b3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5
bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5LnRv
RmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBmaWx0
ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdm
aWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3BhY2l0eSA9IGZpbHRlci5t
YXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwgfHwgZmlsdGVyID09IG51
bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlvbihlbGVtZW50KXtcblx0
dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpO1xuXHRpZiAob3BhY2l0
eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9PSAnaGlkZGVu
JyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZhciBmbG9hdE5hbWUgPSAo
aHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdjc3NGbG9hdCcs
XG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAnNTAl
JywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3JvdW5kUG9zaXRp
b25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0gbnVsbCksXG5cdHByZWZp
eFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbihwcm9wZXJ0
eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5jYW1l
bENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24oc3R5
bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKXtc
blx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpO1xuXHRcdHByb3BlcnR5
ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xufTtcbi8v
PC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENvbXB1dGVkU3R5bGU6IGZ1
bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgdGhpcy5j
dXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1lbENhc2UocHJvcGVydHkp
XTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRlZmF1
bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVybiAoY29tcHV0ZWQpID8g
Y29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxvYXROYW1lKSA/ICdmbG9h
dCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxuXHRzZXRTdHlsZTogZnVu
Y3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKXtc
blx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXHRc
dFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5c
dFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6
IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7XG5cdFx0XHR2
YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7XG5c
dFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkpe1xu
XHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4gKHR5cGVPZih2
YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0aC5yb3VuZCh2YWwpKSA6
IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09IFN0cmlu
ZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuXHRc
dH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0SUU5PlxuXHRc
dGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0eWxl
cyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVTdHlsZSh0aGlz
LnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmIChwcm9w
ZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMpO1xuXHRcdHByb3BlcnR5
ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7
XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHkuaW5kZXhPZignYm9yZGVy
UmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdi
b3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJC
b3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRcdHJldHVybiB0
aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlzKS5qb2luKCcgJyk7XG5c
dFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0XHRpZiAoIXJl
c3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVudC5TaG9ydFN0
eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQgPSBbXTtcblx0
XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5XSkgcmVzdWx0
LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuam9pbignICcp
O1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5
KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZICYmIC9eYmFja2dyb3Vu
ZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJl
cGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0aW9uKXtcblx0
XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0XHRcdH0pIHx8ICcwcHgn
O1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0
aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtcblx0XHRcdHJlc3VsdCA9
IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2JhP1xc
KFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxh
Y2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1cblx0XHRpZiAoIWhhc0dl
dENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtcblx0XHRcdGlmICgoL14o
aGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQvLnRlc3QocmVzdWx0KSkp
e1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0Jywg
J3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRcdHZhbHVlcy5l
YWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0U3R5bGUoJ2Jv
cmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3BhZGRp
bmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0cmV0dXJu
IHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0gc2l6ZSArICdweCc7XG5c
dFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykudGVz
dChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0XHRcdHJldHVy
biAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKHJldHVybnNC
b3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxCb3R0b218TGVmdCk/JC8u
dGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0dXJuIHJlc3Vs
dC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAkMScpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNldFN0eWxlczog
ZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHRoaXMuc2V0
U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0QXJyYXku
ZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJlc3VsdFtrZXld
ID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiByZXN1bHQ7
XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4JywgdG9wOiAn
QHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0BweCcsIGhlaWdo
dDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4JywgbWluV2lkdGg6ICdA
cHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCkn
LCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgnLCBj
b2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2luZzog
J0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgpJyxc
blx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0BweCBAcHggQHB4IEBweCcs
IGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdi
KEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHls
ZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdi
KEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9u
dFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBib3JkZXJSYWRp
dXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hvcnRTdHlsZXMg
PSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJvcmRlcldpZHRoOiB7fSwg
Ym9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1RvcCcsICdSaWdodCcsICdC
b3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtcblx0dmFyIFNob3J0ID0g
RWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzO1xuXHRbJ21h
cmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5cdFx0dmFyIHNkID0gc3R5
bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4Jztc
blx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xuXHRTaG9ydC5ib3JkZXJb
YmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3ID0gYmQgKyAn
V2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJztcblx0U2hvcnRb
YmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9IEFs
bFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1bYmRz
XSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvcltiZGNdID0gU2hvcnRbYmRd
W2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5cbmlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24gPSB7
YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAnQCd9O1xufSko
KTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9sbCwgb3IgcG9zaXRpb25p
bmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0aW9uaW5nIGJhc2VkIG9u
IHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBhbmQgc21hcnQgYnJvd3Nl
ciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwu
aHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBbWVVJXShodHRwOi8vZGV2
ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6Ly9kZXZlbG9w
ZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEVs
ZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNpb25zXVxuXG4uLi5cbiov
XG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbnZhciBi
cm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09PSBlbGVtZW50KTtcbmVs
ZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25lbnRzID0gWydoZWlnaHQn
LCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRvcFdpZHRoJywgJ2JvcmRl
ckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGluZ0xl
ZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRo
J107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpe1xuXG5cdHZhciBnQ1Mg
PSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRzID0ge3g6IDAsIHk6IDB9
O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy55
ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7
XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycgfHwgaXNC
b2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0
dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QoZWwudGFnTmFt
ZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1bmN0aW9uKHgs
IHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5nZXRXaW5kb3coKS5zY3Jv
bGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0geDtcblx0
XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhp
cy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5cblx0XHQvLyBUaGlzIGlm
IGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBnZXRCb3VuZGluZ0NsaWVu
dFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRpZiAoIXdpbmRv
dy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRoaXMu
b2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2ZyBzZWN0aW9u
IHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4gYmUgcmVtb3ZlZCB3aGVu
IEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0dHBzOi8vYnVn
emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlmICh0aGlzLmdl
dCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXplKHRoaXMpO1xuXG5cdFx0
dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xu
XHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9O1xuXHRcdH0g
Y2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0XHR9XG5cdH0sXG5cblx0
Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4g
dGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNj
cm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBm
dW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygp
LmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5OiB0aGlzLnNj
cm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxl
bWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0d2hp
bGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVs
ZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5zY3JvbGxUb3A7
XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdH1cblx0XHRyZXR1cm4g
cG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZzZXRQYXJlbnQg
PyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVs
ZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJl
dHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJpbmcoZWxlbWVu
dCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0aWMgOiBpc09mZnNldDtc
blx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKXtcblx0XHRcdGlmIChp
c09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRp
ZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09
ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlbGVtZW50
Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0s
XG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFzR2V0Qm91bmRpbmdDbGll
bnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0XHRpZiAoaGFzR2V0Qm91
bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50KCku
ZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xsKCks
XG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0XHRcdGlzRml4
ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7XG5cblx0XHRc
dHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMu
eCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCxcblx0
XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnkgKyAoKGlzRml4ZWQp
ID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRcdFx0fTtcblx0XHR9XG5c
blx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdGlm
IChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdoaWxlIChlbGVtZW50ICYm
ICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExl
ZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5cdFx0XHRlbGVt
ZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBvc2l0aW9u
O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5cdFx0dmFyIG9m
ZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5nZXRTY3JvbGxz
KCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0LnggLSBzY3JvbGwueCxc
blx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5cdFx0aWYgKHJlbGF0aXZl
ICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0dmFyIHJlbGF0
aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHt4OiBw
b3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRlcihyZWxhdGl2ZSksIHk6
IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3JkZXIocmVsYXRpdmUpfTtc
blx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBm
dW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRX
aW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9z
aXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0dmFyIG9i
aiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0aW9uLnksXG5c
dFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9O1xuXHRcdG9i
ai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5ib3R0b20gPSBvYmoudG9w
ICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1dGVQb3NpdGlv
bjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogb2JqLnggLSBzdHls
ZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDogb2JqLnkgLSBzdHlsZU51
bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxuXHRzZXRQb3NpdGlvbjog
ZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9z
aXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgn
aW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdl
dENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50V2lkdGgsIHk6
IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCwgeTog
d2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbFNp
emU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksXG5c
dFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0aGlzLmdldERvY3VtZW50
KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdpZHRoLCBib2R5
LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3JvbGxIZWlnaHQsIGJvZHku
c2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHRyZXR1cm4ge3Rv
cDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6
ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBtZXRob2RzXG5c
bnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxuZnVuY3Rpb24g
c3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWxlbWVu
dCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJvcmRlcihlbGVt
ZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRoJyk7
XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJl
cihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gaXNCb2R5KGVs
ZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRhZ05h
bWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpe1xuXHR2YXIgZG9j
ID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBk
b2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcbn1c
blxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBvc2l0
aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRdLmlu
dm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxUb3A6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0fSxcblxuXHRnZXRTY3Jv
bGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFRvcDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5cblx0Z2V0TGVm
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7XG5cdH1cblxu
fSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBi
YXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNz
ZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0NoYWluLCBF
dmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRlczogRnhcblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7XG5cblx0
SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxu
XHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25DYW5jZWw6IG5p
bCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxuXHRcdHVuaXQ6
IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxuXHRcdGZyYW1l
U2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlz
O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHRnZXRUcmFuc2l0aW9u
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0XHRcdHJldHVybiAtKE1h
dGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9LFxuXG5cdHN0ZXA6IGZ1
bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApe1xuXHRcdFx0dmFy
IGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBmcmFt
ZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhpcy50aW1lID0gbm93O1xu
XHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKXtcblx0XHRc
dHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8gdGhpcy5mcmFtZXMpO1xu
XHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgZGVsdGEpKTtc
blx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0dGhp
cy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpO1xuXHRcdFx0dGhpcy5z
dG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRyZXR1cm4g
bm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0
cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxcblxuXHRjaGVjazogZnVu
Y3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRvKXtcblx0XHRp
ZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmZyb20gPSBm
cm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5m
cmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0dGhpcy50cmFu
c2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9IHRoaXMub3B0
aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRp
b25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNbZHVyYXRpb25d
IHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVydmFsID0gMTAwMCAvIGZw
cztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24g
LyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAh
PT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1YmplY3QpO1xu
XHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpO1xuXHRcdHB1
c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25z
LmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5cdFx0XHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHRcdGlmICghdGhp
cy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1Ympl
Y3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0b3AnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRoaXMuc3ViamVjdCA9PT0g
dGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xuXHRcdFx0
dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xlYXJDaGFpbigpO1xuXHRc
dFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xu
XHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRo
aXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXN1
bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkgcHVzaEluc3RhbmNlLmNh
bGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5zdGFuY2VzW3RoaXMub3B0
aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFpbnModGhpcyk7XG5cdH0s
XG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmZyYW1lIDwgdGhp
cy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0pO1xuXG5GeC5jb21wdXRl
ID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0byAtIGZyb20pICogZGVs
dGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6IDI1MCwgJ25vcm1hbCc6
IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xuXG52YXIgaW5zdGFuY2Vz
ID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdHZhciBub3cg
PSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdHZh
ciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBpbnN0YW5jZS5zdGVwKG5v
dyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIg
bGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtcblx0bGlzdC5w
dXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxvb3AucGVyaW9k
aWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5cbnZhciBwdWxsSW5zdGFu
Y2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdO1xuXHRpZiAo
bGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxpc3QubGVuZ3RoICYmIHRp
bWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRcdHRpbWVyc1tm
cHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59O1xuXG59KSgp
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhl
IENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5FbGVt
ZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRngsIEVs
ZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4qL1xuXG5GeC5DU1MgPSBu
ZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhlIGJhc2UgZnJv
bS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFs
dWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0dmFyIGZyb20g
PSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9PSBudWxsKXtcblx0XHRc
dHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxlKHByb3BlcnR5KTtcblx0
XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFwdGVkIGZyb206
IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rlci9meC5qcyNMMjk5XG5c
dFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdzdHJpbmcnICYmIGZyb20u
c2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkgIT0gMCl7XG5c
dFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7XG5cdFx0XHRcdHZh
ciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHRcdC8v
IElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdpZHRoXG5cdFx0XHRcdGlm
ICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxl
WygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0XHRcdFx0aWYgKHZhbHVl
ID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3YXJkcycgaHR0
cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEw
MjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7XG5cdFx0XHRc
dFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9
IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0
ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9ICh0byB8fCAx
KSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0KGZyb20pIHx8IDApO1xu
XHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7XG5cdFx0XHR9
XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9tKSwgdG86IHRoaXMucGFy
c2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXlcblxuXHRw
YXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2YWx1
ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpID8gdmFsdWUuc3Bs
aXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoZnVu
Y3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFyIGZvdW5kID0g
ZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFyc2Vy
KXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZhciBwYXJzZWQgPSBwYXJz
ZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09IDApIGZvdW5k
ID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRcdH0pO1xuXHRcdFx0Zm91
bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vycy5TdHJpbmd9
O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8vY29tcHV0ZXMgYnkg
YSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJzZXJzLlxuXG5c
dGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNvbXB1dGVkID0g
W107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgpKS50aW1lcyhmdW5jdGlv
bihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNlci5jb21wdXRl
KGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJvbVtpXS5wYXJz
ZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgn
Zng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5cdC8vc2VydmVz
IHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7
XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5w
YXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0dmFsdWUuZWFjaChmdW5j
dGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25jYXQoYml0LnBhcnNlci5z
ZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmV0dXJuZWQ7XG5c
dH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5cdHJlbmRlcjog
ZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtcblx0XHRlbGVtZW50LnNl
dFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7XG5cdH0sXG5cblx0Ly9z
ZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxl
Y3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRcdGlmIChGeC5DU1MuQ2Fj
aGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0XHR2YXIgdG8g
PSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5lc2NhcGVSZWdF
eHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVuY3Rpb24ocnVsZXMpe1xu
XHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRcdGlmIChydWxl
Lm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxlcyB8fCBydWxlLmNzc1J1
bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFydWxlLnN0
eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRl
eHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBmdW5jdGlvbihtKXtcblx0
XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51bGw7XG5cdFx0
XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVzdChzZWxlY3RvclRleHQp
KSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2
YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtzdHlsZV0gfHwgRWxlbWVu
dC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9IFN0cmluZyhy
dWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3Qo
dmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9
KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cywgZnVuY3Rp
b24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0aWYgKGhyZWYg
JiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1bWVudC5kb21h
aW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVl
dC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7XG5cdFx0cmV0
dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59KTtcblxuRnguQ1NTLkNh
Y2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9yOiB7XG5cdFx0cGFyc2U6
IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05YS1mXXszLDZ9
JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0cmV0dXJuICgodmFsdWUg
PSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8pKSkgPyBbdmFsdWVb
MV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxuXHRcdGNvbXB1dGU6IGZ1
bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAoZnVuY3Rpb24o
dmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRlKGZyb21baV0s
IHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xuXHRcdH1cblx0fSxcblxu
XHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRjb21wdXRlOiBGeC5jb21w
dXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRyZXR1cm4gKHVu
aXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0cmluZzoge1xu
XHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRlOiBmdW5jdGlv
bih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5j
dGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0fVxuXG59O1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5
bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIGZv
ciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3IgQ1NTIGJhc2VkIHNlbGVj
dG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4
LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5GeC5Nb3JwaCA9IG5ldyBD
bGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3Vt
ZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNl
dDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5nJykgbm93ID0g
dGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykgdGhpcy5yZW5kZXIodGhp
cy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZh
ciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50
KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRzdGFy
dDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMp
KSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0cmluZycpIHBy
b3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJvbSA9IHt9LCB0
byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5cdFx0XHR2YXIgcGFyc2Vk
ID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7XG5cdFx0XHRm
cm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNlZC50bztcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Q
cm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhp
cy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBoID0gdGhpcy5y
ZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBoID0gbmV3IEZ4
Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbW9ycGgn
LCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxuXG59O1xuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0aGlzLmdldCgn
bW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEg
c2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIEZ4
IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAt
IEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0cGVu
bmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdpdGgg
TW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRnguVHJhbnNpdGlvbnNcblxu
Li4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNpdGlv
bnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7XG5c
dFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9IEZ4LlRyYW5z
aXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBdLmNh
cGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScgKyBk
YXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkgOiAn
JyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4LlRyYW5zaXRp
b24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBBcnJheS5jb252
ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVybiB0
cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hcHBlbmQoZWFz
ZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpO1xuXHRcdH0sXG5c
dFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIChwb3MgPD0gMC41ID8g
dHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAtIHBv
cyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zID0g
e1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJuIHplcm87XG5cdH1cblxu
fTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25zKXtc
blx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRnguVHJhbnNpdGlvbnNbdHJh
bnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0aW9uXSk7XG59
O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVuY3Rpb24ocCwgeCl7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0fSxcblxuXHRFeHBvOiBm
dW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkpO1xuXHR9LFxu
XG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29z
KHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGgu
Y29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVuY3Rpb24ocCwgeCl7XG5c
dFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgMikgKiAo
KHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0aW9uKHApe1xuXHRcdHZh
ciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwgYiAvPSAyKXtc
blx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1ZSA9IGIgKiBi
IC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7XG5cdFx0XHRcdGJyZWFr
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0RWxhc3RpYzog
ZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1hdGgu
Y29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5cdH1cblxufSk7
XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24odHJh
bnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5z
aXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTtcblx0fSk7
XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlvbjogRm9ybWVy
bHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFu
IGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRngu
Q1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdobGln
aHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4
LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0
aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0
aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBu
b3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdFx0bm93ID0gcHJvcGVy
dHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnByb3Bl
cnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHByb3BlcnR5LCBub3cs
IHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdGFydDog
ZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVy
dHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5mbGF0dGVu
KGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0eSB8
fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1l
bnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVudChwYXJzZWQu
ZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnR3ZWVu
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJyku
Y2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2ZSgndHdlZW4n
KTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMsIHts
aW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7XG5cdFx0
fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5c
blx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0dGhpcy5nZXQoJ3R3
ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyks
IG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVudHMpLCB0b2dnbGU7XG5c
dFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRcdHN3aXRjaCAo
YXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAx
OyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAw
OyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDE7
IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMDsg
YnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9IHRoaXMucmV0
cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHknKSA9PSAxKTtcblx0XHRc
dFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAwIDogMTtcblx0
XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0b2dnbGUgPSB0
cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7XG5c
dFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7XG5cdFx0
ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0byA9IGFyZ3NbYXJncy5s
ZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0dGhpcy5zZXRT
dHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG5cdFx0
fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5ndGgpe1xuXHRc
dFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0
eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLmNhbGxDaGFpbigp
O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zp
c2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmYWRl
LmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ29w
YWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxp
dHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHR9KTtcblx0
XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9uKHN0
YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRoaXMucmV0cmlldmUoJ2hp
Z2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InKSk7XG5c
dFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYnIDogZW5kO1xuXHRcdH1c
blx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0d2Vlbi5zdGFydCgnYmFj
a2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5jaGFpbihmdW5jdGlvbigp
e1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMucmV0cmlldmUo
J2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxDaGFpbigpO1xuXHRcdH0u
YmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxu
bmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVxdWVz
dCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRpb25z
LCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJlcXVlc3RcblxuLi4uXG4q
L1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxuXHRwcm9ncmVz
c1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJlcXVlc3QpO1xuXG52YXIg
UmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0No
YWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7Lypc
blx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRzdGFydDogZnVuY3Rpb24o
ZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxu
XHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNlbDogZnVuY3Rpb24oKXt9
LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCByZXNwb25zZVhNTCl7fSxc
blx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4Y2VwdGlvbjogZnVuY3Rp
b24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBmdW5jdGlvbigpe30sXG5c
dFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50aWFsczogZmFs
c2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRc
dCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdBY2NlcHQnOiAn
dGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICov
Kidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDogZmFsc2UsXG5cdFx0bWV0
aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNTdWNjZXNzOiBudWxsLFxu
XHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRcdGVuY29kaW5n
OiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRldmFsUmVzcG9uc2U6IGZh
bHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJl
cXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpcy5oZWFkZXJz
ID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5nZTogZnVuY3Rp
b24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9
IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xu
XHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5c
dFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMuc3RhdHVzID0gKHN0YXR1
cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHhoci5v
bnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIu
b25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdGlmICh0aGlzLnRpbWVy
KXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRp
bWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDogdGhpcy54aHIucmVzcG9u
c2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlcblx0XHRcdHRoaXMuc3Vj
Y2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1sKTtcblx0XHRlbHNlXG5c
dFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAoc3RhdHVzID49IDIwMCAm
JiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9u
KHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgvKGVjbWF8amF2
YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSkpIHJldHVybiBC
cm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRzKHRoaXMub3B0
aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1s
KXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQpLCB4bWwpO1xu
XHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtcblx0fSxcblxuXHRvblN1
Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJndW1l
bnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxDaGFpbigpO1xuXHR9LFxu
XG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtcblx0XHR0aGlz
LnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRv
bkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmly
ZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFydDogZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRoaXMu
eGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZp
cmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0dGltZW91
dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTtc
blx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjogdGhpcy54aHJ9KTtcblx0
fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0aGlzLmhlYWRl
cnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRIZWFkZXI6
IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7
XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG5cdFx0fS5i
aW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMu
cnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5c
dFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNh
c2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykp
OyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzZW5k
OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9ucykpIHJldHVy
biB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1
Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHRc
dHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBlID09ICdzdHJpbmcnIHx8
IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9O1xuXG5cdFx0dmFy
IG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7ZGF0YTog
b2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0aW9ucyk7XG5c
dFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1l
dGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0Y2ggKHR5cGVP
ZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRhdGEp
LnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNo
JzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxuXHRcdGlmICh0
aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlz
Lm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRh
dGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbXVsYXRpb24gJiYg
IVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBfbWV0aG9kID0g
J19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0aG9kICsgJyYn
ICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0fVxuXG5cdFx0
aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdwdXQnXS5jb250YWlucyht
ZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5jb2RpbmcpID8g
JzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7XG5cdFx0XHR0aGlzLmhl
YWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2Rl
ZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9j
YXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRleE9m
KCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmltUG9zaXRpb24gPSB1cmwu
aW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3NpdGlvbik7XG5c
blx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9m
KCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTtcblxuXHRcdGlmIChk
YXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxldGUnKSl7XG5cdFx0XHR1
cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBkYXRhO1xuXHRcdFx0
ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmIChw
cm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5sb2Fkc3RhcnQu
YmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy5iaW5kKHRo
aXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRo
aXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29y
ZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAmJiAnd2l0aENyZWRl
bnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG5cdFx0eGhyLm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO1xuXG5cdFx0
T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdHRy
eSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBba2V5LCB2YWx1
ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4aHIs
IGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMu
Z2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5h
YmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgncmVxdWVz
dCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmFzeW5jKSB0
aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudGltZW91dCkg
dGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwgdGhp
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRc
dGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxz
ZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5cdFx0aWYgKHRo
aXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRl
IHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtc
blx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFy
dCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnY2FuY2Vs
JywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIG1ldGhv
ZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdoZWFk
JywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVBRCddLmVhY2go
ZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7XG5c
dFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fTtcblx0XHRpZiAo
ZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRoaXMuc2VuZChv
YmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRc
dHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0XHRzZW5kLnNldE9wdGlv
bnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlmICghc2VuZCl7
XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlzLCBsaW5rOiAn
Y2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1cmw6IHRoaXMu
Z2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5kJywgc2VuZCk7
XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0aGlzLmdldCgn
c2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIu
b3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRpb246IEV4dGVuZHMgdGhl
IGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVyYWN0
aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkhUTUxc
blxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJl
cXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0YXBwZW5kOiBm
YWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHRcdGhl
YWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0
L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0
XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xu
XG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKHNjcmlwdCl7
XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xuXG5cdFx0dmFy
IG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xcU10qPyk8XFwv
Ym9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0gbWF0Y2hbMV07XG5cdFx0
dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7
XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJlc3BvbnNlLmVs
ZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8fCAnKicpO1xuXG5cdFx0
aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7XG5c
dFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUgPSBkb2N1bWVudC5pZChv
cHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgdXBkYXRl
LmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBkYXRlLnNldCgnaHRtbCcs
IHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQpe1xuXHRcdFx0
dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtcblx0XHRcdGlmIChvcHRp
b25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChhcHBlbmQpO1xu
XHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigpKTtcblx0XHR9XG5cdFx0
aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNwb25zZS5qYXZhc2NyaXB0
KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNlLmVsZW1lbnRz
LCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlzLnJlc29sdmUo
e3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRtbDog
cmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0pO1xuXHR9XG5c
bn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwoKTtcblx0XHRs
b2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpO1xuXHRc
dGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0YTogdGhpcywg
bGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0J30pO1xuXHRcdFx0dGhp
cy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbG9hZDtcblx0fVxuXG59
O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rpb24oKXtcblx0XHR0aGlz
LmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtkYXRhOiBUeXBlLmlzT2Jq
ZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7
XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjogSlNPTiBlbmNvZGVyIGFu
ZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuU2VlQWxzbzogPGh0
dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIE51bWJlciwg
RnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxuaWYgKHR5cGVvZiBKU09O
ID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG52
YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxcdCcsICdcXG4nOiAnXFxc
XG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicgOiAnXFxcXFwiJywgJ1xc
XFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7XG5cdHJldHVy
biBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIuY2hhckNvZGVBdCgwKS50
b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRhdGUgPSBmdW5jdGlvbihz
dHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/OltcIlxcXFxcXC9iZm5y
dF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1wiW15cIlxc
XFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytc
XC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/Ol58OnwsKSg/Olxccypc
XFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSokLykudGVzdChzdHJpbmcp
O1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7XG5c
dHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9uKG9iail7XG5cdGlmIChv
YmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5cdHN3aXRjaCAodHlwZU9m
KG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyArIG9iai5yZXBs
YWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInO1xuXHRcdGNhc2UgJ2Fy
cmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5jb2RlKS5jbGVhbigpICsg
J10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFyIHN0cmluZyA9
IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRc
dFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChqc29uKSBzdHJp
bmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5cdFx0XHR9KTtcblx0XHRc
dHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzogY2FzZSAnYm9v
bGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzogcmV0dXJuICdudWxsJztc
blx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUgPSB0cnVlO1xuXG5cbkpT
T04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0cmluZyB8fCB0
eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cblx0aWYgKHNlY3VyZSA9
PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3VyZSl7XG5cdFx0aWYgKEpT
T04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0aWYgKCFKU09OLnZhbGlk
YXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRoZSBp
bnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUuJyk7
XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpO1xufTtcblxufSkoKTtc
blxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3JpcHRpb246IEV4dGVuZHMg
dGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRp
bmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1ZXN0LkpTT05c
blxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IFJl
cXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVuY3Rpb24odGV4dCwgZXJy
b3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlv
bihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0XHRPYmplY3QuYXBwZW5k
KHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0
XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5j
dGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRcdFx0anNvbiA9IHRoaXMu
cmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0aW9ucy5zZWN1cmUpO1xu
XHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIFt0ZXh0
LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoanNvbiA9PSBudWxsKXtc
blx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9uU3VjY2Vz
cyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjoganNvbiwgdGV4dDogdGV4
dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBDb29raWVcblxuZGVz
Y3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIGJyb3dz
ZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4g
IC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtvY2ggKGh0dHA6Ly9xdWly
a3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nlcl1cblxucHJvdmlkZXM6
IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxl
bWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6ICcvJyxcblx0XHRkb21h
aW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1cmU6IGZhbHNlLFxuXHRc
dGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0cE9ubHk6IGZh
bHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0XHR0
aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0
d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFs
dWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZG9t
YWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5kb21haW47XG5cdFx0aWYg
KHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9wdGlvbnMucGF0
aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRcdHZhciBkYXRlID0gbmV3
IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9u
cy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUgKz0gJzsgZXhw
aXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vcHRpb25z
LnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhpcy5vcHRpb25zLmh0dHBP
bmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRpb25zLmRvY3VtZW50LmNv
b2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZG9jdW1l
bnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4cCgp
ICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25lbnQo
dmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdG5l
dyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVyYXRp
b246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuQ29v
a2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJldHVybiBuZXcg
Q29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxuQ29va2llLnJlYWQgPSBm
dW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTtcbn07XG5cbkNv
b2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29r
aWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0tXG5cbm5hbWU6IERPTVJl
YWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRvbXJlYWR5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtCcm93c2VyLCBFbGVt
ZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5LCBEb21SZWFkeV1cblxu
Li4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5cbnZhciByZWFkeSxcblx0
bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0dGltZXIsXG5cdHRlc3RF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbnZhciBkb21yZWFkeSA9
IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghcmVhZHkpe1xuXHRc
dEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3VtZW50LnJlbW92ZUxpc3Rl
bmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0
YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVudCgnZG9tcmVhZHknKTtc
blx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5cdC8vIGNsZWFudXAgc2Nv
cGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50ID0gbnVsbDtcbn07XG5c
bnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBjaGVja3MubGVuZ3RoOyBp
LS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBmdW5jdGlvbigpe1xuXHRj
bGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91dChw
b2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcs
IGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBEaWVn
byBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC9cbi8v
IHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVhZHks
IG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24oKXtc
blx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRcdHJldHVybiB0cnVlO1xu
XHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJZiBkb1Njcm9sbCB3b3Jr
cyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBkb21yZWFkeVxuLy8gICBl
LmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xsICYmICFkb1Njcm9sbFdv
cmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0c2hvdWxkUG9sbCA9IHRy
dWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUpIGNoZWNrcy5w
dXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG5cdHJl
dHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7XG59KTtcblxu
aWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5l
cigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9IHRydWU7XG5c
bmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0ge1xu
XHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTtcblx0
fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMgYmVmb3JlIGxvYWRcbkVs
ZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6IGZ1bmN0aW9u
KGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBmbi5jYWxsKHRoaXMpO1xu
XHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0gd2luZG93KXtc
blx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDtcblx0
XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMgaXMgYmFzZWQgb24gdGhl
IGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5jdGlvbigpe1xu
XHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIgorbW9kdWxl
LmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4gbGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTcg
W1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0LykuKi8gXG4vKiFcbldlYiBC
dWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVyL2U0MjZhOWFlNzE2N2M1ODA3
YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBDb3JlXG5cbmRlc2NyaXB0aW9u
OiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxu
XG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXSho
dHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9yczogVGhlIE1vb1Rvb2xzIHBy
b2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZlbG9wZXJzLylcblxuaW5zcGly
YXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgW0Jhc2UuanNdKGh0
dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9iYXNlLykgQ29weXJpZ2h0IChj
KSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZV0o
aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGljZW5zZS5waHApXG4gIC0gU29t
ZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5
cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29uLCBbTUlUIExp
Y2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXG5c
bnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVPZiwgaW5zdGFuY2VPZiwgTmF0
aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4g
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2
LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLiov
XG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0dmVyc2lvbjogJzEuNi4wJyxc
blx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2YzdjYTUxMTRlZTk1ZTJiJ1xufTtc
blxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2YgPSB0aGlzLnR5cGVPZiA9IGZ1
bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gJ251bGwnO1xuXHRpZiAo
aXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1pbHkoKTtcblxuXHRpZiAoaXRl
bS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0gMSkgcmV0dXJuICdlbGVtZW50
Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4gKC9cXFMvKS50ZXN0KGl0ZW0u
bm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7XG5cdH0gZWxzZSBpZiAodHlw
ZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAoJ2NhbGxlZScgaW4gaXRlbSkg
cmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4gaXRlbSkgcmV0dXJuICdjb2xs
ZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtcbn07XG5cbnZhciBpbnN0YW5j
ZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwgb2JqZWN0KXtcblx0aWYgKGl0
ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3RydWN0b3IgPSBpdGVtLiRjb25z
dHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAoY29uc3RydWN0b3Ipe1xuXHRc
dGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1ZTtcblx0XHRjb25zdHJ1Y3Rv
ciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElFOD4qL1xuXHRpZiAoIWl0ZW0u
aGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0SUU4PiovXG5cdHJldHVybiBp
dGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+Ki9cbnZhciBlbnVtZXJhYmxl
cyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0pIGVudW1lcmFibGVzID0gbnVs
bDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hhc093blByb3BlcnR5JywgJ3Zh
bHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICd0b0xvY2Fs
ZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xuZnVuY3Rpb24gZm9yRWFjaE9i
amVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xuXHRpZiAoZW51bWVyYWJsZXMp
IGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTspe1xuXHRcdHZhciBrID0gZW51
bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXktdmFsdWUsIHNvIG92ZXJsb2Fk
U2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1ldGhvZCBmdW5jdGlvbiwgd2l0
aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2Jq
ZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xuXHR9XG59XG4vKjwvbHRJRTg+
Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1bmN0aW9uID0gdGhpcy5GdW5j
dGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0dGVyID0gZnVuY3Rpb24odXNl
UGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHVzZVBsdXJhbCB8fCB0eXBl
b2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGluIGEpIHNlbGYuY2FsbCh0aGlz
LCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRmb3JFYWNoT2JqZWN0RW51bWJl
cmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0XHR9IGVsc2Ug
e1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztc
blx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9hZEdldHRlciA9IGZ1bmN0aW9u
KHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEpe1xu
XHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBhICE9ICdzdHJpbmcnKSBhcmdz
ID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgYXJncyA9IGFyZ3VtZW50
cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07XG5cdFx0aWYgKGFyZ3Mpe1xu
XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3Ro
OyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMsIGEpO1xuXHRcdH1cblx0XHRy
ZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0
ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7
XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5BcnJh
eS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBb
XTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlb2YgaXRlbSAhPSAn
c3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8gaXRlbSA6IHNsaWNlLmNhbGwo
aXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7
XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicpID8gaXRlbSA6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51bWJlci5jb252ZXJ0ID0gZnVu
Y3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KGl0ZW0pO1xuXHRyZXR1cm4g
aXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xuXG5TdHJpbmcuY29udmVydCA9
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xufTtcblxuXG5cbkZ1bmN0aW9u
LmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20gPSBOdW1iZXIuY29udmVydDtc
blN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhpZGUsIHByb3RlY3RcblxuRnVu
Y3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGhpZGRl
biA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJvdGVjdDogZnVuY3Rpb24o
KXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBlID0gZnVuY3Rpb24obmFtZSwg
b2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9IG5hbWUudG9Mb3dlckNhc2Uo
KTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gKHR5
cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5cGVbJ2lzJyArIG5hbWVdID0g
dHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5cdFx0XHRvYmplY3QucHJvdG90
eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0dXJuIGxvd2VyO1xuXHRcdFx0
fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9iamVjdCA9PSBudWxsKSBy
ZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xuXHRvYmplY3QuJGNvbnN0cnVj
dG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3RydWN0b3IgPSBvYmplY3Q7XG5c
blx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVy
biAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyAmJiB0b1N0
cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScgKTtcbn07XG5cbnZhciBob29r
cyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdHZhciB0eXBlID0g
dHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9va3NbdHlwZV0gfHwgKGhvb2tz
W3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhv
ZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblxuXHR2YXIgaG9v
a3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3Ro
OyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0aWYgKHR5cGVPZihob29rKSA9
PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1ldGhvZCk7XG5cdFx0ZWxzZSBo
b29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5cdHZhciBwcmV2aW91cyA9IHRo
aXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMu
JHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cblx0aWYgKHRoaXNb
bmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVuY3Rpb24nKSBleHRlbmQuY2Fs
bCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KGl0
ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xufTtcblxudmFyIGV4dGVuZCA9
IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4p
IHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtcblx0aWYgKHByZXZpb3VzID09
IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFtZV0gPSBtZXRob2Q7XG59O1xu
XG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBsZW1lbnQub3ZlcmxvYWRTZXR0
ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRlcigpLFxuXG5cdGFsaWFzOiBm
dW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50LmNhbGwodGhpcywgbmFtZSwg
dGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdG1p
cnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlzKS5wdXNoKGhvb2spO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgnVHlwZScsIFR5cGUpO1xuXG4v
LyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCwgbWV0
aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVjdCksXG5cdFx0cHJvdG90eXBl
ID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBvYmplY3QgPSBuZXcgVHlwZShu
YW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxuXHRcdFx0Z2VuZXJpYyA9IG9i
amVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5XTtcblxuXHRcdGlmIChnZW5l
cmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBlICYmIHByb3RvKSBvYmplY3Qu
aW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxuXG5cdGlmIChpc1R5cGUpe1xu
XHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs
ZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhvZCA9IGZ1bmN0aW9uKGZuKXtc
blx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9k
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxsKHByb3RvdHlwZSwgcHJvdG90
eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1cblx0XHRcdGZvciAodmFyIGtl
eSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVba2V5XSwga2V5KTtc
blx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxuZm9yY2UoJ1N0cmluZycsIFN0
cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29uY2F0JywgJ2NvbnRhaW5zJywg
J2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVvdGUnLCAncmVwbGFjZScsICdz
ZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywgJ3N1YnN0cmluZycsICd0cmlt
JywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0FycmF5JywgQXJyYXksIFtcblx0
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdpbmRleE9mJywgJ2xhc3RJbmRl
eE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21hcCcsICdzb21lJywgJ3JlZHVj
ZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1iZXInLCBOdW1iZXIsIFtcblx0
J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0cmluZycsICd0b1ByZWNpc2lv
bidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBseScsICdjYWxsJywgJ2JpbmQn
XG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rlc3QnXG5dKSgnT2JqZWN0Jywg
T2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHknLCAnZGVmaW5lUHJvcGVydGll
cycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRv
cicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRFeHRlbnNpb25zJywgJ2lzRXh0
ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScsICdpc0Zyb3plbidcbl0pKCdE
YXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQgPSBleHRlbmQub3ZlcmxvYWRT
ZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiArKG5l
dyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJvb2xlYW4pO1xuXG4vLyBmaXhl
cyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJvdG90eXBlLiRmYW1pbHkgPSBm
dW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAnbnVtYmVyJyA6ICdudWxsJztc
bn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJlci5leHRlbmQoJ3JhbmRvbScs
IGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAq
IChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9yRWFjaCwgZWFjaCwga2V5c1xu
XG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0Zm9yRWFjaDogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlz
KTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFjaDogZnVuY3Rpb24oZm4sIGJp
bmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRrZXlzOiBmdW5jdGlvbihvYmpl
Y3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIgayBpbiBvYmplY3Qpe1xuXHRc
dFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkga2V5cy5wdXNoKGspO1xuXHRc
dH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmpl
Y3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xuXHRcdH0pO1xuXHRcdC8qPC9s
dElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZvckVhY2g6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlv
bihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xu
XHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9iamVjdC5mb3JFYWNoO1xuXG5c
bi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJnaW5nIGFuZCBhcHBlbmRpbmdc
blxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dpdGNoICh0eXBlT2YoaXRlbSkp
e1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUoKTtcblx0XHRjYXNlICdvYmpl
Y3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRlZmF1bHQ6IHJldHVybiBpdGVt
O1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywgZnVuY3Rpb24oKXtcblx0dmFy
IGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7XG5cdHdoaWxlIChpLS0pIGNs
b25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNsb25lO1xufSk7XG5cbnZhciBt
ZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50KXtcblx0c3dpdGNoICh0eXBl
T2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRpZiAodHlwZU9mKHNvdXJj
ZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJjZVtrZXldLCBjdXJyZW50KTtc
blx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUoY3VycmVudCk7XG5cdFx0XHRi
cmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0gY3VycmVudC5jbG9uZSgpOyBi
cmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQ7XG5cdH1cblx0cmV0dXJu
IHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1lcmdlOiBmdW5jdGlvbihzb3Vy
Y2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmluZycpIHJldHVybiBtZXJnZU9u
ZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0
Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNlLCBrZXksIG9iamVjdFtrZXld
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24o
b2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0
KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5cdFx0cmV0dXJuIGNsb25lO1xu
XHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xuXHRcdGZvciAodmFyIGkgPSAx
LCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZXh0ZW5kZWQg
PSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gZXh0ZW5kZWQpIG9y
aWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWw7
XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5cblsnT2JqZWN0JywgJ1doaXRl
U3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1bWVudHMnXS5lYWNoKGZ1bmN0
aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4vLyBVbmlxdWUgSURcblxudmFy
IFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3VuaXF1ZUlEJywgZnVuY3Rpb24o
KXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7XG5cblxuXG59KSgpO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBBcnJheSBQcm90
b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJvdmlkZXM6IEFycmF5XG5cbi4u
LlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1PiovXG5cdGV2ZXJ5OiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4g
MDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgIWZuLmNhbGwoYmluZCwg
dGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7
XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4gMDsg
aSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1ZSA9IHRoaXNbaV07XG5cdFx0
XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJlc3VsdHMucHVzaCh2YWx1ZSk7
XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGluZGV4T2Y6IGZ1bmN0aW9u
KGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMDtcblx0XHRm
b3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxlbmd0aCArIGZyb20pIDogZnJv
bSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJl
dHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihm
biwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwLCByZXN1bHRzID0g
QXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0
XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGks
IHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRzb21lOiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4g
MDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgZm4uY2FsbChiaW5kLCB0
aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtc
blx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbSAhPSBudWxsO1xu
XHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0aG9kTmFtZSl7XG5cdFx0dmFy
IGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRcdHJldHVybiB0aGlzLm1hcChm
dW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhvZE5hbWVdLmFwcGx5KGl0ZW0s
IGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTogZnVuY3Rpb24oa2V5cyl7XG5c
dFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlzLmxlbmd0aCwga2V5cy5sZW5n
dGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG9ialtrZXlzW2ldXSA9
IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRsaW5rOiBmdW5jdGlvbihvYmpl
Y3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
bGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRc
dFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0XHRcdHJlc3VsdFtrZXldID0g
dGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdFx0XHRcdFx0YnJlYWs7
XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxu
XHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXhP
ZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0
aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5cdGdldFJhbmRvbTogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbTnVtYmVyLnJhbmRvbSgwLCB0
aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5jbHVkZTogZnVuY3Rpb24oaXRl
bSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlzLnB1c2goaXRlbSk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGZv
ciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLmluY2x1ZGUo
YXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVyYXNlOiBmdW5jdGlvbihp
dGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmxlbmd0aCA9IDA7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVuY3Rpb24oKXtcblx0XHR2YXIg
YXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0pO1xuXHRcdFx0aWYgKHR5cGUg
PT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJyYXkuY29uY2F0KCh0eXBlID09
ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlwZSA9PSAnYXJndW1lbnRzJyB8
fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5mbGF0dGVuKHRoaXNbaV0pIDog
dGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fSxcblxuXHRwaWNrOiBmdW5j
dGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysp
e1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRoaXNbaV07XG5cdFx0fVxuXHRc
dHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRcdHZhciByZ2IgPSB0aGlzLm1h
cChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVuZ3RoID09IDEpIHZhbHVlICs9
IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxNik7XG5cdFx0fSk7XG5cdFx0
cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAnKSc7XG5cdH0sXG5cblx0cmdi
VG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5sZW5ndGggPCAzKSByZXR1cm4g
bnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlzWzNdID09IDAgJiYgIWFycmF5
KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0gW107XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0aGlzW2ldIC0gMCkudG9TdHJp
bmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0gMSkgPyAnMCcgKyBiaXQgOiBi
aXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6ICcjJyArIGhleC5qb2luKCcn
KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnVuY3Rpb25cblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlrZSBjcmVhdGUsIGJpbmQsIHBh
c3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiovXG5cbkZ1bmN0aW9uLmV4dGVu
ZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFy
Z3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJu
IGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXHRcdH1cblx0XHRyZXR1cm4g
bnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRhdHRlbXB0OiBm
dW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXBwbHko
YmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0cmV0
dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5cdGJpbmQ6IGZ1bmN0aW9uKHRo
YXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3MgPSBhcmd1bWVudHMubGVuZ3Ro
ID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxsLFxuXHRcdFx0RiA9IGZ1bmN0
aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgY29udGV4
dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAodGhpcyBpbnN0
YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBzZWxmLnByb3RvdHlwZTtcblx0
XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHJlc3VsdCA9ICghYXJn
cyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250ZXh0KVxuXHRcdFx0XHQ6IHNl
bGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdzLmNvbmNhdChBcnJheS5zbGlj
ZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBjb250ZXh0
ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5cdFx0cmV0dXJuIGJvdW5kO1xu
XHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVuY3Rpb24oYXJncywgYmluZCl7
XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9IG51bGwpIGFyZ3MgPSBBcnJh
eS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHNl
bGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH0sXG5cblx0ZGVs
YXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0VGltZW91dCh0
aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBkZWxheSk7XG5cdH0s
XG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwgYmluZCwgYXJncyl7XG5cdFx0
cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwg
YmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBO
dW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQcm90b3R5cGVzIGxpa2UgbGlt
aXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVyXG5cbi4uLlxuKi9cblxuTnVt
YmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0XHRyZXR1
cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtcblx0fSxcblxuXHRyb3VuZDog
ZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBNYXRoLnBvdygxMCwgcHJlY2lz
aW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVjaXNpb24gOiAwKTtcblx0XHRy
ZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcblx0fSxcblxu
XHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
czsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1
bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0
fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVzJyk7XG5cbihmdW5jdGlvbiht
YXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xu
XHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChBcnJheS5jb252ZXJ0KGFy
Z3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVtZW50KG1ldGhvZHMpO1xuXG59
KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFuMicsICdjZWlsJywgJ2Nvcycs
ICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAncG93JywgJ3NpbicsICdzcXJ0
JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNlLCBjYXBpdGFsaXplLCB0ZXN0
LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
W1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4uLlxuKi9cblxuU3RyaW5nLmlt
cGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKHN0cmluZywgaW5k
ZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcykuc2xpY2UoaW5kZXgpIDogU3Ry
aW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxcblx0Ly88LyFFUzY+XG5cblx0
dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0dXJuICgodHlwZU9mKHJlZ2V4
KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycgKyByZWdleCwgcGFyYW1zKSku
dGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJp
bmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHR9LFxuXG5cdGNsZWFuOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxzKy9nLCAnICcp
LnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0
cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVy
biBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxcblxuXHRoeXBo
ZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9bQS1a
XS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCctJyArIG1hdGNoLmNoYXJBdCgw
KS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRjYXBpdGFsaXplOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxiW2Etel0vZywgZnVuY3Rp
b24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhp
cykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcblx0
fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMs
IGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtc
blx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8oXFx3ezEsMn0pKFxcd3sxLDJ9
KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4LnNsaWNlKDEpLmhleFRvUmdi
KGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0
XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwzfS9nKTtcblx0XHRyZXR1cm4g
KHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRzdWJzdGl0dXRl
OiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBs
YWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyksIGZ1bmN0aW9uKG1hdGNoLCBu
YW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xcXFwnKSByZXR1cm4gbWF0Y2gu
c2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAhPSBudWxsKSA/IG9iamVjdFtu
YW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBC
cm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmplY3QuIENvbnRhaW5zIEJyb3dz
ZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQsIGFuZCB0aGUgQnJvd3NlciBI
YXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtBcnJheSwg
RnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczogW0Jyb3dzZXIsIFdpbmRvdywg
RG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBkb2N1bWVudCA9IHRo
aXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2luZG93ID0gdGhpcztcblxudmFy
IHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEgPSB1YS50b0xvd2VyQ2FzZSgp
O1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRvTG93ZXJDYXNlKCkgOiAnJyk7
XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdlIFVBLCBzbyBuZWVkIHRvIGNo
ZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tpbmcgaWYgaXQncyBjaHJvbWUu
XG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0oW1xcd1xcZFxcLl0rKS8pO1xu
XHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8aWV8ZmlyZWZveHxjaHJvbWV8
dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxkXFwuXSspPy4qPyhzYWZhcml8
KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xcZFxcLl0rKXwkKS8pIHx8IFtu
dWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFdID09ICd0cmlkZW50Jyl7XG5c
dFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0gPSBVQVs0XTtcblx0fSBlbHNl
IGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdjaHJvbWUnO1xuXHR9XG5cblx0
cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8pID8gJ2lvcycgOiAodWEubWF0
Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21hY3x3aW58bGludXgvKSB8fCBb
J290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicpIHBsYXRmb3JtID0gJ3dpbmRv
d3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5k
LFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFbM10gOiBVQVsxXSxcblx0XHR2
ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYmIFVBWzRdKSA/IFVBWzRdIDog
VUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xufTtcblxudmFyIEJyb3dzZXIg
PSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFnZW50LCBuYXZpZ2F0b3IucGxh
dGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYgZG9jdW1lbnQuZG9jdW1lbnRN
b2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufVxuXG5C
cm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBhdGg6ICEhKGRvY3VtZW50LmV2
YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxcblx0XHRxdWVyeTogISEoZG9j
dW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2luZG93LkpTT04pXG5cdH0sXG5c
dHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3RcblxuQnJvd3Nlci5SZXF1ZXN0
ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIgTVNYTUwyID0gZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1MMi5YTUxIVFRQJyk7XG5cdH07
XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmpl
Y3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVt
cHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0dXJuIFhNTEhUVFA7XG5cdH0s
IGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJuIE1TWE1MMjtcblx0fSwgZnVu
Y3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hNTDtcblx0fSk7XG5cbn0pKCk7
XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5SZXF1ZXN0KTtcblxuXG5cbi8v
IFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0aW9uKHRleHQpe1xuXHRpZiAo
IXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNTY3JpcHQpe1xuXHRcdHdpbmRv
dy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBl
JywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0ID0gdGV4dDtcblx0XHRkb2N1
bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9jdW1lbnQuaGVhZC5yZW1vdmVD
aGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtcblxuU3RyaW5nLmltcGxlbWVu
dCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZhciBzY3JpcHRzID0gJyc7XG5c
dHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+KFtcXHNcXFNdKj8pPFxcL3Nj
cmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2NyaXB0cyArPSBjb2RlICsgJ1xc
bic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMgPT09IHRydWUpIEJyb3dzZXIu
ZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMpID09ICdmdW5jdGlvbicpIGV4
ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7XG5cbi8vIFdpbmRvdywgRG9j
dW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDogdGhpcy5Eb2N1bWVudCxcblx0
V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5FbGVtZW50LFxuXHRFdmVudDog
dGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4kY29uc3RydWN0b3IgPSBuZXcg
VHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4kZmFtaWx5ID0gRnVuY3Rpb24u
Y29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWlycm9yKGZ1bmN0aW9uKG5hbWUs
IG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG50aGlzLkRvY3VtZW50
ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0RvY3VtZW50JywgZnVuY3Rpb24o
KXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2RvY3VtZW50Jyku
aGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0ZG9j
dW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9jdW1lbnQuaGVhZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5cbmlmIChkb2N1bWVudC5leGVj
Q29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0JhY2tncm91bmRJbWFnZUNh
Y2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4vKjxsdElFOT4qL1xuaWYgKHRo
aXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciB1bmxvYWRF
dmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxv
YWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC53
aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93ID0gZG9jdW1lbnQgPSBudWxs
O1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTtcbn1c
blxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxlY3Q+Lm9wdGlvbnMgKHJlZmVy
cyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5jb252ZXJ0O1xudHJ5IHtcblx0
YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59IGNhdGNoIChlKXtcblx0QXJy
YXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0eXBlb2YgaXRlbSAhPSAnc3Ry
aW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlT2YoaXRlbSkgIT0gJ2FycmF5
Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9IG5ldyBBcnJheShpKTtcblx0
XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0XHRcdHJldHVybiBhcnJheTtc
blx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0fTtcblxuXHR2YXIgcHJvdG90
eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJvdG90eXBlLnNsaWNlO1xuXHRb
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2goZnVuY3Rpb24obmFtZSl7XG5c
dFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRBcnJheVtuYW1lXSA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShBcnJheS5jb252ZXJ0KGl0ZW0p
LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5cdH0pO1xufVxuLyo8L2x0SUU5
PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzXG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2lseSBjcmVhdGluZywgZXh0ZW5k
aW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBOdW1i
ZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
Q2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywgZnVuY3Rpb24ocGFyYW1zKXtc
blx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBhcmFtcyA9IHtpbml0aWFsaXpl
OiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9uKCl7XG5cdFx0cmVzZXQodGhp
cyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhp
cy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBudWxsO1xuXHRcdHZhciB2YWx1
ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMuY2FsbGVyID0gbnVsbDtcblx0
XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxlbWVudChwYXJhbXMpO1xuXG5c
dG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdDbGFzcy5wcm90b3R5cGUuJGNv
bnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS5wYXJlbnQgPSBwYXJl
bnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBwYXJlbnQgPSBmdW5jdGlvbigp
e1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwicGFy
ZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUgPSB0aGlzLiRjYWxsZXIuJG5h
bWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5wYXJlbnQsXG5cdFx0cHJldmlv
dXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0gOiBudWxsO1xuXHRpZiAoIXBy
ZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsgbmFtZSArICdcIiBoYXMg
bm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtc
bn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdGZvciAodmFyIGtleSBpbiBv
YmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdHN3aXRjaCAodHlwZU9m
KHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0XHR2YXIgRiA9IGZ1bmN0aW9u
KCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0XHRcdFx0b2JqZWN0W2tleV0g
PSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYXJyYXknOiBvYmpl
Y3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb2Jq
ZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBrZXksIG1ldGhvZCl7XG5cdGlm
IChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmlnaW47XG5cdHZhciB3cmFwcGVy
ID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0ZWQgJiYgdGhpcy4kY2FsbGVy
ID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBrZXkgKyAnXCIgY2Fu
bm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhpcy5jYWxsZXIsIGN1cnJlbnQg
PSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJyZW50OyB0aGlzLiRjYWxsZXIg
PSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNhbGxlciA9IGNhbGxlcjtcblx0
XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBzZWxmLCAkb3JpZ2luOiBtZXRo
b2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59O1xuXG52YXIgaW1wbGVtZW50
ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYgKENsYXNzLk11dGF0b3JzLmhh
c093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3MuTXV0YXRvcnNba2V5XS5jYWxs
KHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdH1c
blxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtcblx0XHRpZiAodmFsdWUuJGhp
ZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVba2V5XSA9IChyZXRhaW4pID8g
dmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5t
ZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztc
bn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNzKXtcblx0a2xhc3MuJHByb3Rv
dHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNzO1xuXHRkZWxldGUga2xhc3Mu
JHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5DbGFzcy5pbXBsZW1lbnQoJ2lt
cGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtcblxuQ2xhc3MuTXV0YXRvcnMg
PSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0XHR0aGlzLnBhcmVudCA9IHBh
cmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNlKHBhcmVudCk7XG5cdH0sXG5c
blx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFycmF5LmNvbnZlcnQoaXRlbXMp
LmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFuY2UgPSBuZXcgaXRlbTtcblx0
XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50LmNhbGwodGhpcywga2V5LCBp
bnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIFV0
aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3duIENsYXNz
ZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9uIHRhc2tzLlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xh
c3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQkY2hhaW46IFtdLFxuXG5cdGNo
YWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVuZChBcnJheS5mbGF0dGVuKGFy
Z3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbGxDaGFpbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkgPyB0aGlzLiRjaGFpbi5zaGlm
dCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0fSxcblxuXHRjbGVhckNoYWlu
OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHJldHVy
biBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9uKGZ1bGwsIGZpcnN0KXtcblx0
XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59O1xuXG50aGlzLkV2ZW50cyA9
IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5
cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXG5cdFx0XG5c
blx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRzW3R5cGVdIHx8IFtdKS5pbmNs
dWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFsID0gdHJ1ZTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9y
ICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFy
Z3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9
IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0
YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRzLmVhY2goZnVuY3Rpb24oZm4p
e1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRl
bHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dHlwZSA9
IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5c
dFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0dmFyIGluZGV4ID0gZXZlbnRz
LmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBkZWxldGUgZXZlbnRzW2luZGV4
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5j
dGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAn
b2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5
cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKGV2
ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRmb3IgKHR5cGUgaW4gdGhpcy4k
ZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9IHR5cGUpIGNvbnRpbnVlO1xu
XHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRcdGZvciAodmFyIGkgPSBm
bnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50
KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5cdHNldE9wdGlvbnM6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBPYmplY3QubWVyZ2UuYXBw
bHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1bWVudHMpKTtcblx0XHRpZiAo
dGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpe1xuXHRcdFx0aWYgKHR5
cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwgISgvXm9uW0EtWl0vKS50ZXN0
KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVudChvcHRpb24sIG9wdGlvbnNb
b3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25dO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5U
aGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGlsaXR5IENsYXNzIHRoYXQgY2Fu
IGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBtYWtlIHRoZW0gXCJ0aGVu
YWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVMRklMTEVEID0gMSxcblx0U1RB
VEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFzcy5UaGVuYWJsZSA9IG5ldyBD
bGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJTkcsXG5cdCR0aGVuYWJsZVJl
c3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxcblxuXHRyZXNvbHZlOiBmdW5j
dGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCBy
ZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFRoZW5hYmxlU3RhdGU6IGZ1
bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0YXRlKXtcblx0XHRcdGNhc2Ug
U1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5nJztcblxuXHRcdFx0Y2FzZSBT
VEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmlsbGVkJztcblxuXHRcdFx0Y2Fz
ZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWplY3RlZCc7XG5cdFx0fVxuXHR9
LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMs
IHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuXHRcdGlmICh0eXBlb2Yg
b25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVkID0gJ0lkZW50aXR5Jztcblx0
XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicpIG9uUmVqZWN0ZWQgPSAnVGhy
b3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblxuXHRcdHRoaXMu
JHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFibGU6IHRoZW5hYmxlLFxuXHRc
dFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0cmVqZWN0SGFuZGxlcjogb25S
ZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRF
X1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoZW5h
YmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpe1xuXHRcdHJldHVy
biB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxufSk7XG5cblRoZW5hYmxlLmV4
dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGhlbmFibGU7XG5c
dFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRcdFx0dGhlbmFibGUgPSB2YWx1
ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblx0XHRc
dHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xu
XHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0dmFyIHRoZW5hYmxlID0gbmV3
IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdHJldHVybiB0
aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIHJl
c29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09
PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09IHZhbHVlKXtcblx0XHRcdHJl
amVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gcmVzb2x2ZSBhIHRoZW5hYmxl
IHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUg
PT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpe1xuXHRcdFx0dmFy
IHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFsdWUudGhlbjtcblx0XHRcdH0g
Y2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhjZXB0aW9uKTtc
blx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJyl7XG5cdFx0XHRc
dHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihmdW5jdGlvbigpe1xuXHRcdFx0
XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdHZhbHVlLFxu
XHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRcdFx0XHRcdFx0XHRcdGlmICgh
cmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRc
dFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR9
XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9
IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0
XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRc
dH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRc
dFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUs
IGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0
XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHRcdH1c
blx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0
fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlmICh0aGVuYWJs
ZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9G
VUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVq
ZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09
IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHJlYXNvbjtc
blx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JFSkVDVEVEO1xuXG5cdFx0cmVh
Y3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0KHRoZW5hYmxlKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0g
U1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFjdCh0aGVuYWJsZSl7XG5cdHZh
ciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRcdHJlc3VsdCA9IHRoZW5hYmxl
LiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVuYWJsZS4kdGhlbmFibGVSZWFj
dGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNUQVRFX0ZVTEZJTExFRCl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdmdWxmaWxs
SGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfUkVKRUNURUQpe1xuXHRcdHRo
ZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAncmVqZWN0SGFuZGxl
cic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFuZGxlLnBhc3MoW3Jlc3VsdCwg
cmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZShyZXN1bHQsIHJl
YWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0gcmVhY3Rpb25zLmxlbmd0aDsg
aSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rpb25zW2ldLFxuXHRcdFx0aGFu
ZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRsZXIgPT09ICdJZGVudGl0eScp
e1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Ug
aWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc29sdmUo
cmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5cdFx0XHR9IGNhdGNoIChleGNl
cHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFibGUsIGV4Y2VwdGlvbik7XG5c
dFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlmICh0eXBlb2YgcHJvY2VzcyAh
PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbicp
e1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2UgaWYgKHR5cGVvZiBzZXRJbW1l
ZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJbW1lZGlhdGU7XG59IGVsc2Ug
e1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1lb3V0KGZuLCAwKTtcblx0fTtc
bn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3RcblxuZGVzY3JpcHRpb246IE9i
amVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNoXVxuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJzZXQ6IGZ1bmN0aW9uKG9iamVj
dCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9
IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRc
dGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtrXTtcblx0XHR9XG5cdFx0cmV0
dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtc
blx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0
KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFy
IGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBmbi5jYWxsKGJpbmQsIG9iamVj
dFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxu
XG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMg
PSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldLCB2
YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGtleSwg
b2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRz
O1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
Lmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKCFmbi5j
YWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJl
dHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsg
aSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRp
ZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGsg
PSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2tdKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0
cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9LFxuXG5cdGtleU9mOiBmdW5j
dGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7
XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBr
ZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09PSB2YWx1ZSkgcmV0dXJuIGtl
eTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9u
KG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5T2Yob2JqZWN0LCB2YWx1ZSkg
IT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIGJhc2Up
e1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2JqZWN0LmVhY2gob2JqZWN0LCBm
dW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBrZXkgPSBiYXNlICsgJ1snICsg
a2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVl
KSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5n
KHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0XHRcdHZh
ciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rpb24odmFsLCBpKXtcblx0XHRc
dFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRk
ZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xu
XHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5U3RyaW5nLnB1c2gocmVzdWx0
KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxu
fSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5QYXJzZXJcbmRlc2NyaXB0
aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5wcm92aWRlczogU2xpY2suUGFy
c2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBhcnNlZCxcblx0c2VwYXJhdG9y
SW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQsXG5cdGNhY2hlID0ge30sXG5c
dHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xcXFwvZztcblxudmFyIHBhcnNl
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5cdGlmIChleHByZXNzaW9uID09
IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5TbGljayA9PT0gdHJ1ZSkgcmV0
dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBleHByZXNzaW9uKS5yZXBsYWNl
KC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFpc1JldmVyc2VkO1xuXHR2YXIg
Y3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNoZSA6IGNhY2hlO1xuXHRpZiAo
Y3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVudENhY2hlW2V4cHJlc3Npb25d
O1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0ZXhwcmVzc2lvbnM6IFtdLFxu
XHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5jdGlvbigpe1xuXHRcdFx0cmV0
dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07XG5cdHNlcGFyYXRvckluZGV4
ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNzaW9uID0gZXhwcmVzc2lvbi5y
ZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVuZ3RoID0gcGFyc2VkLmV4cHJl
c3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtwYXJzZWQucmF3XSA9IChyZXZl
cnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xuXG52YXIgcmV2ZXJzZUNvbWJp
bmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNvbWJpbmF0b3IgPT09ICchJykg
cmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0gJyAnKSByZXR1cm4gJyEnO1xu
XHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0dXJuIGNvbWJpbmF0b3IucmVw
bGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNvbWJpbmF0b3I7XG59O1xuXG52
YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBl
eHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb25z
Lmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lvbnNbaV07XG5cdFx0dmFyIGxh
c3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjogcmV2ZXJzZUNvbWJpbmF0b3Io
ZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgZXhwLmxlbmd0
aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRcdFx0aWYgKCFjZXhwLnJldmVy
c2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0gJyAnO1xuXHRcdFx0Y2V4cC5j
b21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHRcdGRlbGV0ZSBjZXhwLnJl
dmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZlcnNlKCkucHVzaChsYXN0KTtc
blx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBlc2NhcGVSZWdFeHAgPSBmdW5j
dGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAoYykgMjAwNy0yMDA4IFN0ZXZl
biBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9yZWdleC94cmVnZXhwLz4gTUlU
IExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LlxcXFxeJHws
I1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAnXFxcXCcgKyBtYXRjaDtcblx0
fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8qXG4jIS91c3IvYmluL2VudiBy
dWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1YigvXFwoXFw/eFxcKXxcXHMrIy4q
JHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIoP3gpXig/OlxcXG5cdCAgXFxc
XHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJhdG9yICAgICAgICAgIFxcblxc
XG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAgICMgQ29tYmluYXRvciAgICAg
ICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAgICAgICAgICAjIENvbWJpbmF0
b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4rIHwgXFxcXCogKSAgICAgIyBU
YWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8dW5pY29kZT4rICAgICAgICkg
ICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxcXC4gICggPHVuaWNvZGU+KyAg
ICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxuXHR8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxcblxcXG5cdFxcXFxbICBcXFxu
XHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0XHRcXFxccyogKFsqXiQhfnxd
Pz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRcdFx0XHRcdChbXFxcIiddPyko
Lio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxcblx0XHQpPyAgXFxcXHMqICBc
XFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8dW5pY29kZT4rICkoPzpcXFxu
XHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwxMl0qKVxcXFwxMil8KCg/Olxc
XFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxcblx0KT9cXFxuXHQpXCJcbiov
XG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJpbmF0b3I+KylcXFxccyp8KFxc
XFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2RlPispfFxcXFwuKDx1bmljb2Rl
PispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihbKl4kIX58XT89KSg/OlxcXFxz
Kig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxdKD8hXFxcXF0pfCg6KykoPHVu
aWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwxM10qKVxcXFwxMyl8KCg/Olxc
XFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQucmVwbGFjZSgvPGNvbWJpbmF0
b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9XFxcXDs8LycpICsgJ10nKVxu
XHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18
XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgvPHVuaWNvZGUxPi9nLCAnKD86
WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG4p
O1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5cdHNlcGFyYXRvcixcblx0Y29t
YmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRhZ05hbWUsXG5cdGlkLFxuXHRj
bGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1dGVPcGVyYXRvcixcblx0YXR0
cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBzZXVkb01hcmtlcixcblx0cHNl
dWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlLFxuXHRw
c2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8IHNlcGFyYXRvckluZGV4ID09
PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJhdG9ySW5kZXhdID0gW107XG5c
dFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFyYXRvcikgcmV0dXJuICcnO1xu
XHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNoaWxkcmVuIHx8IGNvbWJpbmF0
b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yIHx8ICcgJztcblx0
XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRl
eF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4
XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XS5yZXZlcnNlQ29tYmlu
YXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xuXHRcdGN1cnJlbnRTZXBhcmF0
b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNvbWJpbmF0b3IsIHRhZzogJyon
fTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFy
YXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0YWdOYW1lKXtcblx0XHRjdXJy
ZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0fSBl
bHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlkLnJlcGxhY2UocmVVbmVzY2Fw
ZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0XHRjbGFzc05hbWUgPSBjbGFz
c05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQu
Y2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtdO1xuXHRcdGlmICghY3VycmVu
dFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMgPSBbXTtcblx0XHRjdXJyZW50
UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFz
c2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0XHRcdHJlZ2V4cDogbmV3IFJl
Z0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgJyhcXFxcc3wkKScp
XG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7XG5cdFx0cHNldWRvQ2xhc3NW
YWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NRdW90ZWRWYWx1ZTtcblx0XHRw
c2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBzZXVkb0NsYXNzVmFsdWUucmVw
bGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLnBz
ZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQucHNl
dWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVwbGFjZShyZVVuZXNjYXBlLCAn
JyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0XHRcdHR5cGU6IHBzZXVkb01h
cmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdcblx0XHR9KTtcblxuXHR9IGVs
c2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5ID0gYXR0cmlidXRlS2V5LnJl
cGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZhbHVlID0gKGF0dHJpYnV0ZVZh
bHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdHZhciB0ZXN0LCByZWdl
eHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtcblx0XHRcdGNhc2UgJ149JyA6
IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZh
bHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnJD0nIDogcmVnZXhwID0gbmV3
IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnJCcgICAg
ICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAnKF58
XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyhcXFxcc3wkKScgKTsgYnJl
YWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVz
Y2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICApOyBicmVhaztcblx0XHRcdGNh
c2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1
dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnKj0nIDogdGVz
dCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZhbHVlICYmIHZhbHVlLmluZGV4
T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyE9
JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1
ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdCAgIDogdGVzdCA9IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7XG5cdFx0XHR9O1xuXHRcdH1c
blxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15bKiReXT0kLykudGVzdChhdHRy
aWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xu
XHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRy
ZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRcdH07XG5cblx0XHRpZiAoIWN1
cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzID0gW107XG5c
dFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0a2V5OiBhdHRyaWJ1dGVL
ZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3IsXG5cdFx0XHR2YWx1ZTogYXR0
cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7XG5cblx0fVxuXG5cdHJldHVy
biAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9ICh0aGlzLlNsaWNrIHx8IHt9
KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0cmV0dXJuIHBhcnNl
KGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhwID0gZXNjYXBlUmVnRXhwO1xu
XG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBwbHkoLyo8Q29t
bW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8qPC9D
b21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5GaW5kZXJcbmRlc2NyaXB0
aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVuZ2luZS5cbnByb3ZpZGVzOiBT
bGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlv
bigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNoZSA9IHt9LFxuXHR0b1N0cmlu
ZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZlYXR1cmUgLyBCdWcgZGV0ZWN0
aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZuKXtcblx0cmV0dXJuICgvXFx7
XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycgKyBmbik7XG59O1xuXG5sb2Nh
bC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJuICghIWRvY3VtZW50LnhtbFZl
cnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5nLmNhbGwoZG9jdW1lbnQpID09
ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVudC5ub2RlVHlwZSA9PSA5ICYm
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAnSFRNTCcpO1xufTtcblxubG9j
YWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5cblx0Ly8gY29udmVydCBlbGVt
ZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlmIGRvY3VtZW50IGNhbm5vdCBi
ZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuXHR2YXIgbm9kZVR5cGUgPSBk
b2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkpOyAvLyBkb2N1bWVudFxuXHRl
bHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5vd25lckRvY3VtZW50OyAvLyBu
b2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9jdW1lbnQgPSBkb2N1bWVudC5k
b2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5cdC8vIGNoZWNrIGlmIGl0J3Mg
dGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50ID09PSBkb2N1bWVudCkgcmV0
dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0Ly8gY2hlY2sgaWYgd2UgaGF2
ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1lbnQgYmVmb3JlXG5cblx0dmFy
IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0cm9vdFVpZCA9IHRoaXMuZ2V0
VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSxcblx0
XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0XHR9XG5c
dFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdID0g
e307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1cmVzLmlzWE1MRG9jdW1lbnQg
PSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE5cblx0
PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZlYXR1cmVzLmlkR2V0c05hbWVc
blx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBmZWF0dXJlcy5icm9rZW5HRUJD
TlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBmZWF0dXJlcy5icm9rZW5FbXB0
eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3VtZW50XG5cdD0gZmVhdHVyZXMu
bmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0dmFyIHN0YXJTZWxlY3RzQ2xv
c2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNO
LCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVH
ZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191bmlxdWVpZCc7XG5cdHZhciB0
ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG5cdHZhciB0ZXN0Um9v
dCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHkn
KVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0ZXN0Tm9kZSk7XG5cblx0Ly8g
b24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0RWxlbWVudHNCeUlkIGRvZXNu
dCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGlk
PVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgPSAhIWRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7fVxuXG5cdGlmIChmZWF0dXJl
cy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
O1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZvciBnZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3ROb2RlLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2VsZWN0c0NvbW1lbnRzID0gKHRl
c3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoID4gMSk7XG5cblx0XHQvLyBJ
RSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIGdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2Rl
LmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVjdHNDbG9zZWQgPSAoc2VsZWN0
ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDAp
ID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZlYXR1cmVzLmJyb2tlblN0YXJH
RUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVjdHNDbG9zZWQ7XG5cblx0XHQv
LyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5zdGVhZCBvZiBqdXN0IGlkIGZv
ciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRcdHRl
c3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydcIj48L2E+PGIgaWQ9XCInKyBp
ZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFtZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7XG5cblx0XHRcdC8v
IFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNoZXMgcmVzdWx0c1xuXHRcdFx0
dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiZlwiPjwvYT48
YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmlyc3RDaGlsZC5jbGFzc05hbWUg
PSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAodGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2gg
KGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGRvZXNu
dCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJzdCBvbmVcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImFcIj48L2E+PGEgY2xh
c3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiA9
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJykubGVuZ3RoICE9IDIpO1xuXHRc
dFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9rZW5HRUJDTiA9IGNhY2hlZEdl
dEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ047XG5cdFx0
fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwpe1xuXHRcdFx0Ly8gSUUgOCBy
ZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIHF1ZXJ5U2VsZWN0b3JBbGwo
JyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlu
bmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLnF1ZXJ5
U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRRU0Eg
PSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUu
Y2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFNhZmFy
aSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRoIG1peGVkY2FzZSBvbiBxdWly
a3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xh
c3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNlUVNBID0g
IXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5ndGg7XG5cdFx0XHR9IGNhdGNo
IChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9udCByZXR1cm4gc2VsZWN0ZWQg
b3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9k
ZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPVwic2VsZWN0ZWRcIj5hPC9v
cHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQSA9ICh0
ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxlbmd0aCA9PSAwKTtcblx0XHRc
dH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMg
Zm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0
cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJcIj48L2E+Jztc
blx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgPSAodGVzdE5vZGUucXVl
cnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAhPSAwKTtcblx0XHRcdH0gY2F0
Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBhIGZvcm0gaGFzIGFuIGlucHV0
IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8Zm9ybSBhY3Rp
b249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4nO1xuXHRcdFx0YnJva2VuRm9y
bUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgnYWN0
aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHQvLyBuYXRpdmUgbWF0Y2hl
c1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ig
PSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVjdG9yIHx8Ki8gcm9vdC5tb3pN
YXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cdFx0aWYgKGZl
YXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0XHRcdC8vIGlmIG1hdGNoZXNT
ZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRheGVzIHdlIGNhbiB1c2UgaXRc
blx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKHJvb3QsICc6c2xpY2sn
KTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IG51bGw7XG5cdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Quc2xpY2tfZXhwYW5kbyA9IDE7
XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0
aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRo
aXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3ZlQ2hpbGQodGVzdE5vZGUpO1xu
XHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxsO1xuXG5cdC8vIGdldEF0dHJp
YnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0dXJlcy5pc0hUTUxEb2N1bWVu
dCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0aW9uKG5vZGUsIG5hbWUpe1xu
XHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0aWYgKG1l
dGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0g
bm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSkg
PyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBu
YW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRc
dHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDogbm9kZS5nZXRBdHRyaWJ1dGUo
bmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuaGFzQXR0cmli
dXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5oYXNBdHRyaWJ1dGUpKSA/IGZ1
bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKGF0
dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRcdG5vZGUgPSBu
b2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRyZXR1cm4gISEobm9kZSAmJiAo
bm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0fTtcblxuXHQvLyBjb250YWlu
c1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlucyBzaG91bGQgYmUgZGlmZmVy
ZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIgbmF0aXZlUm9vdENvbnRhaW5z
ID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRhaW5zKSxcblx0XHRuYXRpdmVE
b2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05hdGl2ZUNvZGUoZG9jdW1lbnQu
Y29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5hdGl2ZVJvb3RDb250YWlucyAm
JiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRc
dHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKG5hdGl2ZVJvb3RDb250YWlu
cyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtc
blx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24gZG9jdW1lbnQuXG5cdFx0cmV0
dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBkb2N1bWVudCkgPyBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhub2RlKTtcblx0fSA6IChyb290
ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oY29udGV4dCwgbm9k
ZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEoY29udGV4dC5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUp
e1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9PT0gY29udGV4dCkgcmV0dXJu
IHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKTtcblx0XHRyZXR1
cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHQvLyBjcmVk
aXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5cblx0ZmVhdHVyZXMuZG9jdW1l
bnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihhLCBi
KXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9IDogKCdzb3VyY2VJbmRleCcg
aW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuc291cmNlSW5kZXggfHwgIWIu
c291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3Vy
Y2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkgPyBmdW5jdGlvbihhLCBiKXtc
blx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRvY3VtZW50KSByZXR1cm4gMDtc
blx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksIGJSYW5nZSA9
IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFSYW5nZS5zZXRTdGFydChhLCAw
KTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5nZS5zZXRTdGFydChiLCAwKTtc
blx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBhUmFuZ2UuY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtcblx0fSA6IG51bGw7XG5cblx0
cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHR0aGlzW2Zl
YXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5cbi8vIE1haW4gTWV0aG9kXG5c
bnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/OltcXHctXSt8XFwqKSkkLyxcblx0
cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8JycpP1xcXS8sXG5cdHFzYUZh
aWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQgPSB0aGlzLmZvdW5kID0gKGZp
cnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAoIWNvbnRleHQpIHJldHVybiBm
b3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNvbnRleHQgPSBjb250ZXh0LmRv
Y3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5kb3cgdG8gYSBkb2N1bWVudFxu
XHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZvdW5kO1xuXG5cdC8vIHNldHVw
XG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0dW5pcXVlcyA9IHRoaXMudW5p
cXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAmJiBhcHBlbmQubGVuZ3RoKSxc
blx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVUeXBlID09IDkpO1xuXG5cdGlm
ICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQgPyBjb250ZXh0IDogY29udGV4
dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250ZXh0KTtcblxuXHQvLyBhdm9p
ZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBlbmQgYXJyYXlcblx0aWYgKGhh
c090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1bmlxdWVzW3RoaXMuZ2V0VUlE
KGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24gY2hlY2tzXG5cblx0aWYgKHR5
cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHN0cmluZ1xu
XG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXHRcdHZhciBzaW1wbGVTZWxl
Y3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rvcik7XG5cdFx0c2ltcGxlU2Vs
ZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2YXIgc3ltYm9sID0gc2ltcGxl
U2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxlY3RvclsyXTtcblxuXHRcdFx0
aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcqJyAmJiB0aGlzLmJyb2tlblN0
YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlcyA9IGNvbnRleHQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5v
ZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSld
KSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJv
bCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAhY29udGV4
dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9kZSA9IGNvbnRl
eHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICghbm9kZSkgcmV0dXJuIGZvdW5k
O1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUuZ2V0QXR0cmlidXRlTm9kZSgn
aWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRp
ZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAm
JiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cblx0XHRc
dH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERv
Y3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCB0aGlzLmJyb2tl
bkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBicmVhayBzaW1wbGVTZWxlY3Rv
cnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMu
YnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51
bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0
XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5k
LnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZh
ciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysgU2xpY2suZXNjYXBlUmVnRXhw
KG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2kr
K107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lO1xuXHRcdFx0XHRc
dFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChjbGFzc05hbWUpKSkgY29udGlu
dWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0aWYg
KCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChu
b2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFz
T3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIChmaXJzdCkgPyBudWxsIDog
Zm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3RvcnMtb3ZlcnJpZGU+Ki9cblxu
XHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0cXVlcnlTZWxlY3RvcjogaWYg
KGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1
bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl1cblx0XHRcdFx0Ly9U
T0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVhbGx5IG1peGVkIGNhc2Vcblx0
XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRcdFx0fHwgKHRoaXMuYnJva2Vu
Q2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVja2VkJykgPiAtMSlcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYgcmVFbXB0eUF0dHJpYnV0ZS50
ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJc0RvY3VtZW50IC8vQWJvcnQg
d2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRcdFx0Ly8gIHRoZXJlIGFyZSBt
dWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0XHRcdFx0XHQvLyAgc2luY2Ug
d2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290ZWQgUVNBIGZvciBzaW5nbGUg
ZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHByZXNzaW9uLmluZGV4T2YoJywn
KSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlzYWJsZVFTQVxuXHRcdFx0KSBi
cmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJlc3Npb24gPSBleHByZXNzaW9u
LCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRcdGlmICghY29udGV4dElzRG9j
dW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVkIFFTQVxuXHRcdFx0XHQvLyBj
cmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVudElkID0gX2NvbnRleHQuZ2V0
QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7XG5cdFx0XHRcdF9jb250ZXh0
LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0X2V4cHJlc3Npb24gPSAnIycg
KyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRcdGNvbnRleHQgPSBfY29udGV4
dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoZmlyc3Qp
IHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Npb24pIHx8IG51bGw7XG5cdFx0
XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoX2V4cHJlc3Npb24pO1xu
XHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXSA9
IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRc
dFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0XHRpZiAoY3VycmVudElkKSBf
Y29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtcblx0XHRcdFx0XHRlbHNlIF9j
b250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0XHRjb250ZXh0ID0gX2NvbnRl
eHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc3RhclNlbGVjdHNDbG9z
ZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmIChub2Rl
Lm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBmb3IgKGkgPSAwOyBub2RlID0g
bm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdl
dFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGFz
T3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXG5cdFx0fVxu
XHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5cdFx0cGFyc2VkID0gdGhpcy5T
bGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNlZC5sZW5ndGgpIHJldHVybiBm
b3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwpeyAvLyB0aGVyZSBpcyBubyBl
eHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24uU2xp
Y2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9iamVjdFxuXHRcdHBhcnNlZCA9
IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlucyhjb250ZXh0LmRvY3VtZW50
RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4cHJlc3Npb24gaXMgYSBub2Rl
XG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikgOiBmb3VuZCA9IGV4cHJlc3Np
b247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBvdGhlciBqdW5rXG5cdFx0cmV0
dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8t
c2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9yIHRoZSBudGggc2VsZWN0b3Jz
XG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhMYXN0ID0ge307XG5cdHRoaXMu
cG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0ID0ge307XG5cblx0Lyo8L250
aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBpZiBh
cHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBzZWxlY3RvciB3aXRoIG9u
ZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1c2hVSURcblx0dGhpcy5wdXNo
ID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVuZ3RoID09IDEgJiYgcGFyc2Vk
LmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5wdXNoQXJyYXkgOiB0aGlzLnB1
c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0gW107XG5cblx0Ly8gZGVmYXVs
dCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJpbmF0b3IsIHRhZywgaWQsIGNs
YXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztcblx0dmFyIGN1cnJlbnRJdGVt
cywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RCaXQsIGV4cHJlc3Npb25zID0g
cGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChpID0gMDsgKGN1cnJlbnRFeHBy
ZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9IDA7IChjdXJyZW50Qml0ID0g
Y3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29tYmluYXRvciA9ICdjb21iaW5h
dG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYgKCF0aGlzW2NvbWJpbmF0b3Jd
KSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0gKHRoaXMuaXNYTUxEb2N1bWVu
dCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRvVXBwZXJDYXNlKCk7XG5cdFx0
aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NMaXN0ICA9IGN1cnJlbnRCaXQu
Y2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0LmNsYXNzZXM7XG5cdFx0YXR0
cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRwc2V1ZG9zICAgID0gY3VycmVu
dEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0gKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9IHt9O1xuXG5cdFx0aWYgKGxh
c3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztcblx0XHRcdHRoaXMuZm91bmQg
PSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlxdWVzID0ge307XG5cdFx0XHR0
aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09IDApe1xuXHRcdFx0dGhpc1tj
b21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
LCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQgJiYgZm91bmQubGVuZ3Ro
KSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChmaXJzdCAmJiBsYXN0Qml0
KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKyl7XG5cdFx0
XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0XHRpZiAoZm91bmQubGVuZ3Ro
KSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVt
cy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdH1c
blxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1cblxuXHQvLyBzaG91bGQgc29y
dCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5b3UgcGFzcyBtdWx0aXBsZSBl
eHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0
aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAoZmlyc3QpID8gKGZvdW5kWzBd
IHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5sb2NhbC51aWR4ID0gMTtcbmxv
Y2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5nZXRVSURYTUwgPSBmdW5jdGlv
bihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRlKHRoaXMudWlkayk7XG5cdGlm
ICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRub2RlLnNldEF0dHJpYnV0ZSh0
aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07XG5cbmxvY2FsLmdldFVJREhU
TUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5pcXVlTnVtYmVyIHx8IChub2Rl
LnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8vIHNvcnQgYmFzZWQgb24gdGhl
IHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxubG9jYWwuc29ydCA9IGZ1bmN0
aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0ZXIpIHJldHVybiByZXN1bHRz
O1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7XG5cdHJldHVybiByZXN1bHRz
O1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiov
XG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNoTlRIID0gL14oWystXT9cXGQq
KT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJzZU5USEFyZ3VtZW50ID0gZnVu
Y3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1lbnQubWF0Y2godGhpcy5tYXRj
aE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdHZhciBzcGVjaWFsID0gcGFy
c2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8fCAxO1xuXHRpZiAoYSA9PSAn
LScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7XG5cdHBhcnNlZCA9XG5cdFx0
KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRcdChzcGVjaWFsID09ICdvZGQn
KVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdldmVuJylcdD8ge2E6IDIsIGI6
IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5jYWNoZU5USFthcmd1bWVudF0g
PSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRvID0gZnVuY3Rpb24oY2hpbGQs
IHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIGFy
Z3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0aWYgKCF0aGlz
W3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xu
XHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRcdHZhciBlbCA9IHBhcmVudFtj
aGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xuXHRcdFx0XHR2YXIgbm9kZU5h
bWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKGVsLm5vZGVO
YW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhp
cy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxp
bmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKGVsLm5v
ZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlzLmdl
dFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10p
KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1bWVudCB8fCAnbic7XG5cdFx0
dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8IHRoaXMucGFyc2VOVEhBcmd1
bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0XHR2YXIg
YSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNbcG9zaXRpb25zXVt1aWRdO1xu
XHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRpZiAoYSA+IDApe1xuXHRcdFx0
aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGIgPCBw
b3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgocG9zIC0gYikgJSBhKSA9PSAw
O1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxl
Y3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpIHRoaXMuZm91bmQucHVz
aChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5v
ZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMubWF0Y2hTZWxlY3Rvcihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSl7XG5cdFx0dGhpcy51bmlx
dWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChub2RlKTtcblx0fVxufTtcblxu
bG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAodGhpcy5p
c0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvcil7XG5cdFx0dHJ5IHtc
blx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKG5vZGUsIHNlbGVj
dG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0rPylcXHMqXFxdL2csICdbJDE9
XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9XG5cdH1cblxuXHR2YXIgcGFy
c2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlmICghcGFyc2VkKSByZXR1cm4g
dHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3JzXG5cdHZhciBleHByZXNzaW9u
cyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRlciA9IDAsIGksIGN1cnJlbnRF
eHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9u
c1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCA9PSAxKXtcblx0
XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0XHRcdGlmICh0aGlzLm1hdGNo
U2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBleHAudGFnIDogZXhwLnRhZy50
b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAuYXR0cmlidXRlcywgZXhwLnBz
ZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENvdW50ZXIrKztcblx0XHR9XG5c
dH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQubGVuZ3RoKSByZXR1cm4gZmFs
c2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5kb2N1bWVudCwgcGFyc2VkKSwg
aXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107KXtcblx0XHRpZiAoaXRlbSA9
PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxubG9jYWwu
bWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1bWVudCl7XG5cdHZhciBwc2V1
ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNbcHNldWRvTmFtZV0pIHJldHVy
biB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0dmFyIGF0dHJpYnV0ZSA9IHRo
aXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4gKGFyZ3VtZW50KSA/IGFyZ3Vt
ZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxubG9jYWwubWF0Y2hTZWxlY3Rv
ciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
e1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/
IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG5cdFx0aWYgKHRh
ZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSByZXR1cm4gZmFsc2U7IC8vIEZp
eCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5cdFx0fSBlbHNlIHtcblx0XHRc
dGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAo
aWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJldHVybiBmYWxzZTtcblxuXHR2
YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChpID0gY2xhc3Nlcy5sZW5ndGg7
IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsICdjbGFzcycpO1xuXHRc
dGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNscykpKSByZXR1cm4gZmFsc2U7
XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpLS07
KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAocGFydC5vcGVyYXRvciA/ICFw
YXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSA6ICF0aGlzLmhhc0F0
dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAocHNldWRv
cykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRcdHBhcnQgPSBwc2V1ZG9zW2ld
O1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0LmtleSwgcGFydC52YWx1ZSkp
IHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBjb21iaW5hdG9y
cyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBub2RlcywgYW55IGxldmVsXG5c
blx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAodGhpcy5pc0hUTUxEb2N1bWVu
dCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRpdGVtID0gdGhpcy5kb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0ZW0gJiYgbm9kZS5hbGwpIHx8
ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyku
bm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lkXSByZXR1cm5zIGFsbCB0aGUg
ZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5vZGVcblx0XHRcdFx0XHQvLyBp
ZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVsZW1lbnQsIGVsc2UgaXQgd2ls
bCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuYWxsW2lkXTtcblx0
XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlblsw
XSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBj
aGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2RlID0gaXRlbS5nZXRBdHRyaWJ1
dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAmJiBpZE5vZGUubm9kZVZhbHVl
ID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRc
dFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0
aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyBpbiB0aGUgZG9tIHdl
IHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtpbmcgdGhlIGdldEJ5SWQgbGFi
ZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJvb3QsIG5vZGUpKSByZXR1cm47
XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMu
ZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9kZSwgaXRlbSkpIHJldHVybjtc
blx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGdldEJ5Q2xhc3M6IGlm
IChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5H
RUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNs
YXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5s
ZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hp
bGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBudWxsLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRnZXRCeVRhZzog
e1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG5cdFx0
XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeVRhZztcblx0
XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51bGw7XG5cdFx0XHRmb3IgKGkg
PSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jz4nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0
IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENoaWxkKSkgZG8ge1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2li
bGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9
IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRc
dGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBjaGlsZFxuXHRcdG5vZGUgPSBu
b2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUg
PT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0J34nOiBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBz
aWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKXtcblx0XHRcdGlm
IChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVpZCA9IHRoaXMuZ2V0
VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVhaztcblx0XHRc
dHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jysr
JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xuXHRcdHRoaXNbJ2NvbWJpbmF0
b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5ncyBhbmQgcHJldmlvdXMg
c2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiF+J10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyEnOiBm
dW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8g
YWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
cGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyE+Jzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xu
XHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyErJzogZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3Vz
IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChu
b2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5c
dCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFzdENoaWxkO1xuXHRcdGlmIChu
b2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29t
YmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ3Ncblx0XHR3aGlsZSAo
KG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUg
IT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0
XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5iaXRVbmlxdWVz
W3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xuXG5mb3IgKHZhciBjIGluIGNv
bWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBjb21iaW5hdG9yc1tjXTtcblxu
dmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdlbXB0eSc6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRy
ZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAmJiAhKG5vZGUuaW5uZXJUZXh0
IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0fSxcblxuXHQnbm90JzogZnVu
Y3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0aGlzLm1hdGNoTm9kZShub2Rl
LCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBmdW5jdGlvbihub2RlLCB0ZXh0
KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycp
LmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3QtY2hpbGQnOiBmdW5jdGlvbihu
b2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChub2Rl
Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxu
XHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUu
bmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0
cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxp
bmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIG5leHQg
PSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBpZiAobmV4dC5u
b2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0
Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNoaWxkJzogbG9jYWwuY3JlYXRl
TlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USCcpLFxuXG5cdCdu
dGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZp
b3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1vZi10eXBlJzogbG9jYWwuY3Jl
YXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USFR5cGUnLCB0
cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFz
dENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBlTGFzdCcsIHRydWUpLFxuXG5c
dCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRv
Om50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xuXHR9LFxuXG5cdCdldmVuJzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2Rl
LCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRo
aXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xuXHR9LFxuXG5cdC8qPC9udGgt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5vZGVOYW1lID0g
bm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykp
IGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZh
ciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0
U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5c
dFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUp
e1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdo
aWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZU5hbWUgPT0g
bm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUg
KChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Lyo8L29mLXR5cGUt
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1ZG9zXG5cblx0J2VuYWJsZWQn
OiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0
J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuZGlzYWJsZWQ7XG5c
dH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5jaGVj
a2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3VzJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5kb2N1bWVudC5hY3RpdmVF
bGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50eXBlIHx8IHRoaXMuaGFzQXR0
cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQncm9vdCc6IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtcblx0fSxcblxuXHQnc2VsZWN0
ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5zZWxlY3RlZDtcblx0fVxuXG5c
dC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZhciBwIGluIHBzZXVkb3MpIGxv
Y2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8gYXR0cmlidXRlcyBtZXRob2Rz
XG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmlidXRlR2V0dGVycyA9IHtcblxu
XHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1sRm9yJyBpbiB0aGlzKSA/IHRo
aXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtcblx0fSxcblxuXHQnaHJlZic6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhpcykgPyB0aGlzLmdldEF0dHJp
YnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblx0fSxcblxuXHQn
c3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5zdHlsZSkgPyB0aGlzLnN0eWxl
LmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblx0fSxcblxuXHQndGFiaW5k
ZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1
dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1
dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0s
XG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgn
dHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRy
aWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhMZW5ndGgnKTtcblx0XHRyZXR1
cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRl
Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0dHJpYnV0ZUdldHRlcnMuTUFY
TEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1h
eGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9jYWwuU2xpY2sgPSAodGhpcy5T
bGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcnO1xuXG4vLyBTbGljayBmaW5k
ZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5k
KXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpO1xu
fTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24pe1xuXHRyZXR1
cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51bGwsIHRydWUpO1xufTtcblxu
Ly8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5jb250YWlucyA9IGZ1bmN0aW9u
KGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KGNvbnRhaW5lcik7XG5cdHJl
dHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xufTtcblxuLy8gU2xpY2sgYXR0
cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlLCBuYW1l
KXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5nZXRBdHRyaWJ1
dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2Rl
LCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5oYXNB
dHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBtYXRjaGVyXG5cblNsaWNrLm1h
dGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAoIShub2RlICYmIHNlbGVjdG9y
KSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBub2RlKSBy
ZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5t
YXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGFjY2Vz
c29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtc
blx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xuXHRyZXR1cm4gdGhpcztcbn07
XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpe1xuXHRyZXR1
cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5cbi8vIFNsaWNrIHBzZXVkbyBh
Y2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxv
Y2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpe1xuXHRcdHJl
dHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtcblx0dmFyIHBzZXVkbyA9IGxv
Y2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSByZXR1cm4gZnVuY3Rpb24oYXJn
dW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBhcmd1bWVudCk7XG5cdH07XG5c
dHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVzIGFjY2Vzc29yXG5cblNsaWNr
Lm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxvY2FsLm92ZXJyaWRlKHJlZ2V4
cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlzWE1MID0gbG9jYWwuaXNYTUw7
XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiBsb2NhbC5nZXRVSURI
VE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7XG5c
bn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/
IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVt
ZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGl0ZW1zIGluIE1v
b1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0aGUgZG9sbGFycyBmdW5jdGlv
biwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGltZS1zYXZlciBtZXRob2RzIHRv
IGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRzLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgU3Ry
aW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBhcnNlciwgU2xpY2suRmluZGVy
XVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAkJCwgSUZyYW1lLCBTZWxlY3Rv
cnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVsZW1lbnQgPSBmdW5jdGlvbih0
YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVudC5Db25zdHJ1Y3RvcnNbdGFn
XTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0b3IocHJvcHMpO1xuXHRpZiAo
dHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50LmlkKHRhZykuc2V0KHByb3Bz
KTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlmICghKC9eW1xcdy1dKyQvKS50
ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0YWcpLmV4cHJlc3Npb25z
WzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykgPyAnZGl2JyA6IHBhcnNlZC50
YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBudWxsKSBwcm9wcy5pZCA9IHBh
cnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2VkLmF0dHJpYnV0ZXM7XG5cdFx0
aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBsID0gYXR0cmlidXRlcy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0ZXNbaV07XG5cdFx0XHRpZiAo
cHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoYXR0ci52YWx1
ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9wc1thdHRyLmtleV0gPSBhdHRy
LnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYgIWF0dHIub3BlcmF0b3IpIHBy
b3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnNlZC5jbGFzc0xpc3Qg
JiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNzJ10gPSBwYXJzZWQuY2xhc3NM
aXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KHRhZywg
cHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wcm90b3R5
cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJRTggYW5kIElFOSByZXF1aXJl
IHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IChmdW5jdGlv
bihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRy
ZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQpO1xuXHRcdH07XG5cdH0pKEVs
ZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBUeXBlKCdFbGVtZW50JywgRWxl
bWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJyYXkucHJvdG90eXBlW25hbWVd
KSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFtZV0gPSBmdW5jdGlvbigpe1xu
XHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMsIGVsZW1lbnRzID0gdHJ1ZTtc
blx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0c1tpXSA9IGVsZW1lbnRbbmFt
ZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50cyA9IChlbGVtZW50cyAmJiB0
eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGVsZW1lbnRz
KSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5cdH07XG5cblx0RWxlbWVudHMu
aW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50
LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlwZSA9IHtcblx0XHQnJGNvbnN0
cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0aW9uLmNvbnZlcnQoJ2VsZW1l
bnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xuXHR9KTtcbn1cblxu
RWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJRnJhbWUgPSBuZXcgVHlwZSgn
SUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRz
LCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0XHRpZnJhbWU6IGZ1bmN0aW9u
KG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0XHR9XG5cdH0pO1xuXG5cdHZh
ciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJhbWU7XG5cdGlmIChwYXJhbXMu
aWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZyYW1lKTtcblx0dmFyIG9ubG9h
ZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRlbGV0ZSBwcm9wcy5vbmxvYWQ7
XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwgcHJvcHMubmFtZSwgaWZyYW1l
ID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1lXycgKyBTdHJpbmcudW5pcXVl
SUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChpZnJhbWUgfHwgJ2lmcmFtZScs
IHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtcblx0XHRvbmxvYWQuY2FsbChp
ZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdpbmRvdy5mcmFtZXNbcHJvcHMu
aWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQp
O1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50cyA9IHRoaXMuRWxlbWVudHMg
PSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGgpe1xuXHRcdHZh
ciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IG5vZGUgPSBub2Rlc1tp
KytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9kZSk7XG5cdFx0XHRpZiAoIXVu
aXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHRcdHRoaXMu
cHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkVsZW1lbnRzLnByb3RvdHlw
ZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJyYXk7XG5cbm5ldyBUeXBlKCdF
bGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZpbHRlcjogZnVuY3Rpb24oZmls
dGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRoaXM7XG5cdFx0cmV0dXJuIG5l
dyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihmaWx0ZXIpID09ICdzdHJpbmcn
KSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0ubWF0Y2goZmlsdGVyKTtcblx0
XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHB1c2g6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3Vt
ZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgdGhpc1tsZW5ndGgrK10gPSBp
dGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0gbGVuZ3RoKTtcblx0fS5wcm90
ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgaXRlbXMgPSBbXTtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRc
dFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0aWYgKGl0ZW0p
IGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUudW5z
aGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGNvbmNhdDogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxlbWVudHModGhpcyk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5cGUuaXNFbnVtZXJhYmxlKGl0
ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRlbHNlIG5ld0VsZW1lbnRzLnB1
c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50cztcblx0fS5wcm90ZWN0KCks
XG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLnB1c2goY29sbGVjdGlvbltp
XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGVtcHR5OiBmdW5jdGlv
bigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbLS10aGlzLmxlbmd0aF07
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0pO1xuXG5cblxuKGZ1bmN0aW9u
KCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UsIG9i
amVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxuc3BsaWNlLmNhbGwob2JqZWN0
LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMuaW1wbGVtZW50KCdzcGxpY2Un
LCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdHZhciByZXN1bHQg
PSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hpbGUgKGxlbmd0aCA+PSB0aGlz
Lmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1cm4gcmVzdWx0O1xufS5wcm90
ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9uKG1ldGhvZCwgbmFtZSl7XG5c
dEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7XG5cbkFycmF5Lm1pcnJvcihF
bGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MO1xu
dHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBjYXRjaCAoZSl7fVxuXG52YXIg
ZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVybiAoJycgKyBodG1sKS5yZXBs
YWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbn07XG4vKjwvbHRJ
RTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBvZiBz
dHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZh
ciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZsYWcgPSBmYWxz
ZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdpbjogMHB4
O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0
dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5c
blx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdFx0aWYgKHByb3BzKXtcblx0
XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRlZmF1bHRDaGVja2VkID0gcHJv
cHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAnY2hlY2tib3gnIHx8IHByb3Bz
LnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkgcHJvcHMudmFsdWUgPSAn
b24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhlIHR5cGUgdG8gYmUgc2V0IGJl
Zm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRcblx0XHRcdGlmICghY2FuQ2hh
bmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRcdFx0dmFyIHN0eWxlRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cdFx0XHRcdHN0eWxlRWxlbWVu
dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0XHRcdFx0aWYgKHByb3BzLnR5
cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZChzdHlsZUVsZW1l
bnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdC8qPGx0
SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBlIHByb3BlcnRpZXMgaW4gSUUg
PCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MKXtcblx0XHRcdFx0dGFnID0g
JzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFnICs9ICcgbmFtZT1cIicgKyBl
c2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0XHRpZiAocHJvcHMudHlwZSkg
dGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMudHlwZSkgKyAnXCInO1xuXHRc
dFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMubmFtZTtcblx0XHRcdFx0ZGVs
ZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykpLnNldChwcm9wcyk7XG5cdH1c
blxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGljay51aWRPZih3aW5kb3cpO1xu
U2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld1Rl
eHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVUZXh0Tm9kZSh0
ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMud2lu
ZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRcdHZhciB0eXBlcyA9IHtcblxu
XHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZCA9IFNs
aWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpO1xuXHRc
dFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5vY2FzaCkgOiBudWxsO1xuXHRc
dFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5vY2FzaCl7XG5cdFx0XHRcdFNs
aWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYgIWVsLiRmYW1pbHkgJiYgISgv
Xig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkpe1xuXHRcdFx0XHRcdHZhciBm
aXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8gd3JhcHBpbmcgbmVlZGVkIGlu
IElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJlRXZlbnQgPSBmdW5jdGlvbih0
eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2ZW50KHR5cGUsIGV2ZW50KTtc
blx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQoZWwsIEVsZW1lbnQuUHJvdG90
eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9LFxuXG5cdFx0XHRv
YmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZiAob2JqLnRvRWxl
bWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVudChkb2MpLCBub2Nhc2gpO1xu
XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0eXBlcy50ZXh0
bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cgPSB0eXBlcy5kb2N1bWVudCA9
IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fTtcblxuXHRcdHJldHVy
biBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYgKGVsICYmIGVsLiRmYW1pbHkg
JiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVPZihl
bCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVzW3R5cGVdKGVsLCBub2Nhc2gs
IGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0fSkoKVxuXG59KTtcblxuaWYg
KHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQnLCBmdW5jdGlvbihlbCwgbmMp
e1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRvY3VtZW50KTtcbn0pO1xuXG5X
aW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdp
bXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwgbmV3IEVsZW1lbnRzKTtcblx0
fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7XG5cdH1cblxufSk7XG5cbnZh
ciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHJldHVybiBTbGlj
ay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAoIWRvY3VtZW50LmNvbnRhaW5z
KSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuXG5cblxu
Ly8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9yID0gZnVuY3Rpb24oZXhwcmVz
c2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikgcmV0dXJuIGNvbWJpbmF0b3I7
XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5wYXJzZShleHByZXNzaW9uKSk7
XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9yICh2
YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRleHByZXNzaW9uc1tpXVswXS5j
b21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbk9i
amVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQcmV2aW91czogJyF+Jyxcblx0
Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7XG5cdEVsZW1l
bnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtc
blx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRBbGxOZXh0OiAnficsXG5cdGdl
dEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+Jyxcblx0Z2V0Q2hpbGRyZW46
ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2Qp
e1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29t
YmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Rmly
c3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5z
ZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKVswXSk7XG5cdH0s
XG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50
LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+Jykp
LmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7XG5cdH0sXG5cblx0Z2V0RWxl
bWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmlu
ZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKSk7XG5c
dH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiAhZXhwcmVz
c2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtcblx0fVxuXG59KTtcblxuXG5c
bmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCQnLCBmdW5jdGlvbihz
ZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdGlmICh0eXBlb2Yg
c2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFyY2godGhpcy5kb2N1bWVudCwg
c2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAoVHlwZS5pc0VudW1lcmFibGUo
c2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9yKTtcblx0fVxuXHRyZXR1cm4g
bmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5zZXJ0ZXJzXG5cbnZhciBpbnNl
cnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2
YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5p
bnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7
XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50Lm5l
eHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQp
e1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5cdH0sXG5cblx0dG9wOiBmdW5j
dGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmluc2VydEJlZm9yZShjb250ZXh0
LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmluc2VydGVycy5pbnNpZGUgPSBp
bnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkgLyBzZXRQcm9wZXJ0eVxuXG52
YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVycyA9IHt9O1xuXG4vLyBwcm9w
ZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5mb3JFYWNoKFtcblx0J3R5cGUn
LCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScsICdjZWxsUGFkZGluZycsICdj
ZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVyJywgJ3Jvd1NwYW4nLCAndGFi
SW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRwcm9wZXJ0aWVzW3By
b3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtcblxucHJvcGVydGllcy5odG1s
ID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJUZXh0JzogJ3RleHRDb250ZW50
JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocmVhbCwga2V5KXtcblx0
cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVty
ZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7XG5cbi8qPGx0SUU5PiovXG5w
cm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9k
ZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgbm9kZS5zZXQo
J2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRpZXMudGV4dF0gPSB2YWx1ZTtc
blx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJvcGVydHlHZXR0ZXJzLnRleHQg
PSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVy
biAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5pbm5lckhUTUwgOiBnZXR0ZXIo
bm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7XG4vKjwvbHRJRTk+Ki9cblxu
Ly8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFjdCcsICdub3dyYXAnLCAnaXNt
YXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxuXHQnZGlzYWJsZWQnLCAncmVh
ZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNpemUnLFxuXHQnZGVmZXInLCAn
ZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xzJywgJ2F1dG9wbGF5Jyxcblx0
J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5LmZvckVhY2goYm9vbHMsIGZ1
bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93ZXJDYXNlKCk7XG5cdGJvb2xl
YW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihu
b2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5
R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gISFub2RlW2Jvb2xd
O1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2JqZWN0LmFwcGVuZChwcm9wZXJ0
eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdj
bGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAodmFsdWUgfHwgJycpIDogbm9k
ZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdmb3InOiBmdW5jdGlv
bihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2RlKSA/IG5vZGUuaHRtbEZvciA9
IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVlKTtcblx0fSxcblxuXHQnc3R5
bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUuc3R5bGUpID8gbm9kZS5zdHls
ZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB2YWx1ZSk7XG5c
dH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGUudmFsdWUg
PSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5cbn0pO1xuXG5wcm9wZXJ0eUdl
dHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuICgnY2xhc3NOYW1lJyBp
biBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2RlLmdldEF0dHJpYnV0ZSgnY2xh
c3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFkb25seSBhbmQgdGhyb3dzXG50
cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31cbmlmIChlbC50eXBlICE9ICdi
dXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0
bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xuZWwgPSBudWxsO1xuLyogPC93
ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3OSAtIElFOCBDYW5u
b3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0eWxlSFRNTCA9IChm
dW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxc
blx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRNTCA9ICcjanVzdFRl
c2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJIVE1MO1xuXHR9IGNh
dGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4qL1xuXG52YXIgaW5w
dXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2b2xhdGlsZUlucHV0VmFsdWUs
IGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQudmFsdWUgPSAndCc7XG5pbnB1
dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZSAhPSAn
dCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBBcmd1bWVudFwiIHdoZW4gdHJ5
aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0aW5wdXQudmFsdWUgPSAnJztc
blx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRTdXBwb3J0ID0gaW5wdXQudHlw
ZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9IG51bGw7XG5cbmlmICh2b2xh
dGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBwcm9wZXJ0eVNldHRlcnMudHlw
ZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRcdHZhciB2YWx1ZSA9IG5vZGUu
dmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2RlLnZhbHVlID0gdmFsdWU7XG5c
dH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0UHJvcGVydHksIHNldFByb3Bl
cnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dldEF0dHJpYnV0ZSA9IChmdW5j
dGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7XG5cdHJldHVybiAoZGl2Lmdl
dEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xufSkoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAoZnVuY3Rpb24odGVzdCl7XG5c
dHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9XCJzaG91bGRfZml4XCIgdmFs
dWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0dXJuIHRlc3QuY2xvbmVOb2Rl
KHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0gMTtcbn0pKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5cbnZhciBoYXNDbGFzc0xpc3Qg
PSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblxudmFyIGNsYXNz
ZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NOYW1lcyA9IChjbGFzc05hbWUg
fHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9O1xuXHRyZXR1cm4gY2xhc3NO
YW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRpZiAoY2xhc3NOYW1lICE9PSAn
JyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVlc1tjbGFzc05hbWVdID0gY2xh
c3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUp
e1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52YXIgcmVtb3ZlRnJvbUNsYXNz
TGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUobmFtZSk7XG59
O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUs
IHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0ZXJzW25hbWUudG9Mb3dlckNh
c2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIodGhpcywgdmFsdWUpO1xuXHRc
dH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2YXIgYXR0cmlidXRBbGxvd0xp
c3Q7XG5cdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0QWxsb3dMaXN0ID0g
dGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFsbG93TGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJ
RTk+ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVB
dHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1
dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0cmlidXRBbGxvd0xpc3RbbmFtZV07XG5cdFx0XHRc
dC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0
ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0XHRpZiAo
cG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9IHRydWU7XG5c
dFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpe1xuXHRcdGZvciAo
dmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwg
YXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRQ
cm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdldHRlciA9IHByb3BlcnR5R2V0dGVy
c1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0ZXIpIHJldHVybiBnZXR0ZXIodGhp
cyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSl7XG5c
dFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSwgYXR0cmlidXRlQWxs
b3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFsbG93TGlzdCcsIHt9KTtcblx0XHRc
dGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAoYXR0ci5leHBhbmRvICYmICFhdHRy
aWJ1dGVBbGxvd0xpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIgb3V0ZXIgPSB0aGlzLm91dGVySFRN
TDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3BlbmluZyB0YWcgYW5kIGZpbmQgbWVudGlv
biBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0ZXIuc3Vic3RyKDAsIG91dGVyLnNl
YXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSkuaW5kZXhPZihuYW1lKSA8IDApIHJl
dHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0cnVlO1xuXHRc
dFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdHZhciByZXN1bHQgPSBTbGljay5n
ZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJuICghcmVzdWx0ICYmICFTbGljay5o
YXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJlc3VsdDtcblx0fSxcblxuXHRnZXRQ
cm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuY29udmVydChhcmd1
bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdldFByb3BlcnR5LCB0aGlzKS5hc3Nv
Y2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xu
XHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51bGwpO1xuXHR9LFxuXG5cdHJlbW92
ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuZWFjaChhcmd1bWVudHMsIHRoaXMu
cmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNldDog
ZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVy
dGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuc2V0KSA/IHByb3BlcnR5LnNl
dC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVydHkocHJvcCwgdmFsdWUpO1xuXHR9
Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIgcHJv
cGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0cmV0dXJuIChwcm9wZXJ0eSAm
JiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5KHRoaXMpIDogdGhpcy5nZXRQcm9w
ZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxuXG5cdGVyYXNlOiBmdW5jdGlvbihw
cm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0
KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3BlcnR5LmVyYXNlLmFwcGx5KHRoaXMp
IDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRyZXR1
cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSA6IGZ1bmN0aW9uKGNs
YXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5jbGFzc05hbWUpLmNvbnRhaW5zKGNs
YXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNs
YXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goYWRkVG9DbGFzc0xpc3Qs
IHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0
XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1lICsgJyAnICsgdGhpcy5jbGFzc05h
bWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczog
aGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNzTmFt
ZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFyIGNsYXNzTmFtZXMgPSBjbGFzc2Vz
KHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChjbGFzc05h
bWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZXMu
am9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5j
dGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9yY2UgPT0gbnVsbCkgZm9yY2UgPSAh
dGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVybiAoZm9yY2UpID8gdGhpcy5hZGRD
bGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xuXHR9LFxuXG5c
dGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQgPSB0aGlzLCBmcmFnbWVudCwgZWxl
bWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0
aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVh
dGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudHNbaV0sIHRydWUp
O1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblx0XHR9
XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDogZnVuY3Rpb24odGV4dCwgd2hlcmUp
e1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1bWVudCgpLm5ld1RleHROb2RlKHRl
eHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRp
bnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50LmlkKGVsLCB0cnVlKSwgdGhpcyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0OiBmdW5jdGlvbihlbCwgd2hlcmUp
e1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10odGhpcywgZG9jdW1lbnQuaWQoZWws
IHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXBsYWNlczogZnVuY3Rpb24o
ZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdGVsLnBhcmVudE5vZGUu
cmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFw
czogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVlKTtc
blx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihlbCwgd2hlcmUpO1xuXHR9LFxuXG5c
dGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2VsZWN0ZWRJbmRleDsgLy8gU2Fm
YXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5jb252ZXJ0KHRoaXMub3B0
aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0XHRyZXR1cm4gb3B0aW9uLnNlbGVj
dGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbigpe1xuXHRc
dHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0RWxlbWVudHMoJ2lucHV0LCBzZWxl
Y3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5cdFx0XHR2YXIgdHlwZSA9IGVsLnR5
cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJsZWQgfHwgdHlwZSA9PSAnc3VibWl0
JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmlsZScgfHwgdHlwZSA9PSAnaW1hZ2Un
KSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5nZXQoJ3RhZycpID09ICdzZWxlY3Qn
KSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9wdCl7XG5cdFx0XHRcdC8vIElFXG5c
dFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgndmFsdWUnKTtcblx0XHRcdH0pIDog
KCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSAmJiAhZWwuY2hlY2tlZCkg
PyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRBcnJheS5jb252ZXJ0KHZhbHVlKS5l
YWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsICE9ICd1bmRlZmluZWQn
KSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChlbC5uYW1lKSArICc9JyArIGVu
Y29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBx
dWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5cblxuLy8gYXBwZW5kSFRNTFxuXG52
YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdiZWZvcmVCZWdpbicsXG5cdGFmdGVy
OiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQnLFxuXHR0b3A6ICdhZnRlckJlZ2lu
Jyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoJ2FwcGVu
ZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0aGlzLmluc2VydEFkamFjZW50SFRN
TChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddLCBodG1sKTtcblx0cmV0dXJuIHRo
aXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2YXIgdGVtcCA9IG5ldyBFbGVtZW50
KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVuID0gdGVtcC5jaGlsZE5vZGVzLFxu
XHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5cdGlmICghZnJhZ21lbnQpIHJldHVy
biB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7XG5cdFx0ZnJhZ21lbnQgPSBkb2N1
bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBj
aGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hpbGQo
Y2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9t
J10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn0pO1xuXG52YXIgY29sbGVjdGVk
ID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1bmN0aW9uKHVpZCl7XG5cdHJldHVy
biAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7fSkpO1xufTtcblxudmFyIGNsZWFu
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVtLnVuaXF1ZU51bWJlcjtcblx0aWYg
KGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50cygpO1xuXHRpZiAoaXRlbS5jbGVh
ckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdGlmICh1aWQgIT0gbnVsbCl7
XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRlbGV0ZSBzdG9yYWdlW3VpZF07XG5c
dH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVByb3BzID0ge2lucHV0OiAnY2hlY2tl
ZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2YWx1ZSd9O1xuXG5FbGVtZW50Lmlt
cGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtcblx0XHR2YXIgY2hpbGRyZW4gPSBj
bGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdEFycmF5LmVhY2goY2hp
bGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2UodGhpcyk7XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuY29udmVydCh0aGlz
LmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5wYXJlbnROb2Rl
KSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKSA6IHRoaXM7XG5cdH0sXG5cblx0
Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xuXHRcdGNvbnRlbnRzID0gY29udGVu
dHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGNvbnRlbnRzKSwg
Y2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRcdGlmIChjb250ZW50cyl7XG5cdFx0
XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicp
KSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0aGlzLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBjZS5sZW5ndGg7IGktLTspe1xuXHRc
dFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ldO1xuXHRcdFx0aWYgKCFrZWVwaWQp
IG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlm
IChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5vZGUuY2xlYXJBdHRyaWJ1dGVzKCk7
XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1lbnQpO1xuXHRcdFx0XHRub2RlLnJl
bW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0XHRcdGlmIChub2RlLm9wdGlvbnMp
e1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywgZW8gPSBlbGVtZW50Lm9wdGlvbnM7
XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsgai0tOykgbm9bal0uc2VsZWN0ZWQg
PSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU5Piov
XG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2Uo
KV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3BdKSBub2RlW3Byb3BdID0gZWxlbWVu
dFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmIChoYXNDbG9uZUJ1Zyl7
XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JyksIHRv
ID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyk7XG5cdFx0XHRmb3IgKGkgPSBj
by5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRvW2ldLm91dGVySFRNTDtcblx0XHR9
XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKGNsb25lKTtcblx0fVxu
XG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywg
e1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHdpbmRvdy5h
dHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0Y29sbGVjdGVk
W1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmFkZEV2ZW50
TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0p
O1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7XG5c
dFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVy
KHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmRldGFjaEV2ZW50KCdv
bicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmV0cmlldmU6IGZ1
bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRP
Zih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRpZiAoZGZsdCAhPSBudWxs
ICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldID0gZGZsdDtcblx0XHRy
ZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5cdH0sXG5cblx0c3RvcmU6IGZ1bmN0
aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2Yo
dGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0dmFyIHN0b3Jh
Z2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRlbGV0ZSBzdG9yYWdlW3Byb3BlcnR5
XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLyo8bHRJRTk+Ki9cbmlmICh3aW5k
b3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIGdjID0g
ZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0ZWQsIGNsZWFuKTtcblx0XHRpZiAo
d2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFnZSgpO1xuXHRcdHdpbmRvdy5yZW1v
dmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3aW5kb3cuYWRkTGlzdGVuZXIoJ3Vu
bG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVtZW50LlByb3BlcnRpZXMgPSB7fTtc
blxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHN0
eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHlsZTtcblx0fSxcblxuXHRnZXQ6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3NzVGV4dDtcblx0fSxcblxuXHRlcmFz
ZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSAnJztcblx0fVxuXG59O1xu
XG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxufTtcblxuRWxlbWVudC5Q
cm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihodG1sKXtcblx0XHRpZiAoaHRt
bCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAodHlwZU9mKGh0bWwpID09ICdhcnJh
eScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAodGhp
cy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwpIHRoaXMuc3R5bGVTaGVldC5jc3NU
ZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3RoaXMuaW5uZXJIVE1MID0gaHRtbDtc
blx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZXQoJ2h0bWwnLCAnJyk7XG5c
dH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50cyA9IHRydWUsIHN1cHBvcnRzVGFi
bGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJIVE1MID0gdHJ1ZTtcblxuLyo8bHRJ
RTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBodHRwOi8vamRiYXJ0bGV0dC5jb20v
aW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xudmFy
IGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2PjwvbmF2Pic7XG5zdXBwb3J0c0hUTUw1
RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09IDEpO1xuaWYgKCFzdXBwb3J0c0hU
TUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8gY2Fu
dmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3Jv
dXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc3VtbWFyeSB0aW1lIHZp
ZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAobC0tKSBmcmFnbWVudC5jcmVhdGVF
bGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJRT4q
L1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtc
blx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcblx0dGFibGUu
aW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5cdHJldHVybiB0cnVlO1xufSk7XG5c
bi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpLCBodG1s
ID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1sO1xuc3VwcG9ydHNUUklubmVySFRN
TCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51bGw7XG4vKjwvbHRGRjQ+Ki9cblxu
aWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBwb3J0c1RSSW5uZXJIVE1MIHx8ICFz
dXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNldCA9
IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0aW9ucyA9IHtcblx0XHRcdHRhYmxl
OiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRcdHNlbGVjdDogWzEsICc8c2VsZWN0
PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwgJzx0YWJsZT48dGJvZHk+JywgJzwv
dGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0YWJsZT48dGJvZHk+PHRyPicsICc8
L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0XHR0cmFuc2xhdGlvbnMudGhlYWQg
PSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMudGJvZHk7XG5cblx0XHRyZXR1cm4g
ZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAodGhpcy5zdHls
ZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cdFx0XHQvKjwvbHRJRTk+Ki9c
blx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMuZ2V0KCd0YWcnKV07XG5cdFx0XHRp
ZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgd3JhcCA9IFswLCAnJywgJyddO1xu
XHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cblx0XHRcdHZh
ciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBm
cmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIuaW5uZXJIVE1MID0g
W3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5qb2luKCcnKTtcblx0XHRcdHdoaWxl
IChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGlsZDtcblx0XHRcdHRoaXMuZW1wdHko
KS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVt
ZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyID0gbnVs
bDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNldCk7XG59XG4vKjwv
SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24+czwvb3B0
aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJzdENoaWxkLnZhbHVlICE9ICdzJykg
RWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNldDogZnVuY3Rpb24odmFsdWUpe1xu
XHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0Jykg
cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFsdWUpO1xuXHRcdHZhciBvcHRpb25z
ID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUp
O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2
YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1
dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IChhdHRyICYmIGF0dHIuc3Bl
Y2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0XHRcdGlmIChv
cHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuXHRc
dH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbiA9IHRoaXMsIHRh
ZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0JyAmJiB0YWcg
IT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5KCd2YWx1ZScpO1xuXG5cdFx0aWYg
KHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlvbi5nZXRTZWxlY3RlZCgpWzBdKSkg
cmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFs
dWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZhbHVl
IDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50ZXN0Rm9ybSA9IG51bGw7XG4vKjwv
bHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5n
ZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3BlcnRpZXMuaWQgPSB7XG5cdHNldDog
ZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyku
dmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmlk
IHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuaWQgPSB0aGlz
LmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztcblx0fVxufTtcbi8qPC9JRT4qL1xu
XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250YWlu
cyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQgb2JqZWN0IGNyb3NzLWJyb3dzZXIu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9j
dW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmplY3RdXG5cbnByb3ZpZGVzOiBFdmVu
dFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgX2tleXMgPSB7fTtcbnZhciBub3Jt
YWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgbm9ybWFsaXplZDtcblx0
aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6ZWQgPSBldmVudC53aGVlbERlbHRh
ICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIwIDogZXZlbnQud2hlZWxEZWx0YSAv
IDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQgPSBldmVudC5kZWx0YVkgfHwgZXZl
bnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0ocmF3QW1vdW50ICUgMyA9PSAwID8g
cmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0fVxuXHRyZXR1cm4gbm9ybWFsaXpl
ZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZlbnQgPSBuZXcgVHlwZSgnRE9NRXZl
bnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3aW4pIHdpbiA9IHdpbmRvdztcblx0
ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChldmVudC4kZXh0ZW5kZWQpIHJldHVy
biBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0aGlzLiRleHRlbmRlZCA9IHRydWU7
XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0dGhpcy5jb250cm9sID0gZXZlbnQu
Y3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7XG5cdHRoaXMubWV0YSA9IGV2ZW50
Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0gZXZlbnQudHlwZTtcblx0dmFyIHRh
cmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHR3aGlsZSAodGFyZ2V0
ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcblx0
dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xuXG5cdGlmICh0eXBlLmluZGV4T2Yo
J2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5jb2RlID0gKGV2ZW50LndoaWNoIHx8
IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlmdCB8fCB0eXBlICE9ICdrZXlwcmVz
cycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYgKHR5cGUgPT0gJ2tleWRvd24nIHx8
IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+IDExMSAmJiBjb2RlIDwgMTI0KSB0
aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRcdGVsc2UgaWYgKGNvZGUgPiA5NSAm
JiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtcblx0XHR9XG5cdFx0aWYgKHRoaXMu
a2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKS50b0xvd2Vy
Q2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNrJyB8fCB0eXBlID09ICdkYmxjbGlj
aycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09
ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdtb3VzZScpID09IDApe1xuXHRcdHZh
ciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFkb2MuY29tcGF0TW9kZSB8fCBkb2Mu
Y29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTtcblx0XHR0
aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBldmVudC5wYWdl
WCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxcblx0XHRcdHk6IChldmVudC5wYWdl
WSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSArIGRvYy5zY3JvbGxUb3Bc
blx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0eDogKGV2ZW50LnBhZ2VYICE9IG51
bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQgOiBldmVudC5jbGllbnRYLFxuXHRc
dFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgLSB3aW4ucGFnZVlPZmZz
ZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAodHlwZSA9PSAnRE9NTW91c2VTY3Jv
bGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdtb3VzZXdoZWVsJykgdGhpcy53aGVl
bCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRcdHRoaXMucmlnaHRDbGljayA9IChl
dmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAyKTtcblx0XHRpZiAodHlwZSA9PSAn
bW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwgdHlwZSA9PSAnbW91c2VlbnRlcicg
fHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFyIG92ZXJUYXJnZXQgPSB0eXBlID09
ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInO1xuXHRcdFx0dmFyIHJlbGF0ZWQg
PSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVyVGFyZ2V0ID8gJ2Zyb20nIDogJ3Rv
JykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0ZWQgJiYgcmVsYXRlZC5ub2RlVHlw
ZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2RlO1xuXHRcdFx0dGhpcy5yZWxhdGVk
VGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGUu
aW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhPZignZ2VzdHVyZScpID09IDApe1xu
XHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtcblx0XHR0aGlzLnNjYWxlID0gZXZl
bnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0gZXZlbnQudGFyZ2V0VG91Y2hlcztc
blx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG5cdFx0dmFy
IHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3VjaGVzO1xuXHRcdGlmICh0b3VjaGVz
ICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0gdG91Y2hlc1swXTtcblx0XHRcdHRo
aXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gucGFnZVl9O1xuXHRcdFx0dGhpcy5j
bGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2guY2xpZW50WX07XG5cdFx0fVxuXHR9
XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQgPSB7fTtcblx0aWYgKCF0aGlzLnBh
Z2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50LmltcGxlbWVudCh7XG5cblx0c3Rv
cDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2ZW50RGVmYXVsdCgpLnN0b3BQcm9w
YWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKXtcblx0XHRp
ZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9u
KCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0
XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0gZnVuY3Rpb24oY29kZSwga2V5KXtc
blx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRE9NRXZlbnQuZGVm
aW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9hZFNldHRlcih0cnVlKTtcblxuRE9N
RXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0MCc6ICdkb3duJywgJzM3JzogJ2xl
ZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywgJzMyJzogJ3NwYWNlJywgJzgnOiAn
YmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2RlbGV0ZScsICcxMyc6ICdlbnRlcidc
bn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5FdmVudFxu
XG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRob2RzIGZvciBkZWFsaW5nIHdpdGgg
ZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZl
IGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFdmVudF1cblxucHJvdmlkZXM6IEVs
ZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuRWxlbWVudC5Qcm9wZXJ0
aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdHRoaXMuYWRkRXZlbnRzKGV2
ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVt
ZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2ZW50
cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0XHRpZiAoIWV2ZW50c1t0eXBlXSkg
ZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtdfTtcblx0XHRpZiAoZXZlbnRzW3R5
cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztcblx0XHRldmVudHNbdHlwZV0ua2V5
cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBlLFxuXHRcdFx0Y3VzdG9tID0gRWxl
bWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24gPSBmbixcblx0XHRcdHNlbGYgPSB0
aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vbkFkZCkgY3VzdG9tLm9u
QWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24pe1xu
XHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0aWYgKGN1c3Rv
bS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkpIHJldHVybiBmbi5jYWxsKHRoaXMs
IGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0
XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5i
YXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2YXIgZGVmbiA9IGZ1bmN0aW9uKCl7
XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9O1xuXHRcdHZhciBuYXRpdmVFdmVu
dCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtcblx0XHRpZiAobmF0aXZlRXZlbnQp
e1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRcdFx0XHRkZWZuID0gZnVuY3Rpb24o
ZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2ZW50KGV2ZW50LCBzZWxmLmdldFdp
bmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNhbGwoc2VsZiwgZXZlbnQpID09PSBm
YWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5hZGRM
aXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJdKTtcblx0XHR9XG5cdFx0ZXZlbnRz
W3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJl
bW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0
cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJldHVy
biB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuXHRcdHZhciBpbmRleCA9IGxp
c3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXggPT0gLTEpIHJldHVybiB0aGlzO1xu
XHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC5rZXlz
W2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdHZhciBjdXN0b20g
PSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3VzdG9tKXtcblx0XHRcdGlmIChjdXN0
b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRoaXMsIGZuLCB0eXBlKTtcblx0XHRc
dGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNh
bGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAoRWxlbWVudC5OYXRpdmVFdmVudHNb
dHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2YWx1ZSwgYXJndW1lbnRzWzJdKSA6
IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAo
dmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChldmVudCwgZXZlbnRzW2V2ZW50XSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVu
dHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7
XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50
c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0dmFyIGF0dGFjaGVkID0g
dGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFhdHRhY2hlZCkgcmV0dXJuIHRoaXM7
XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGF0dGFjaGVkKSB0aGlzLnJl
bW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWluYXRlKCdldmVudHMnKTtcblx0XHR9
IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0YXR0YWNoZWRbZXZlbnRzXS5rZXlz
LmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50KGV2ZW50cywgZm4p
O1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0YWNoZWRbZXZlbnRzXTtcblx0XHR9
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBh
cmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xu
XHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdGFyZ3Mg
PSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5j
dGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtc
blx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1bmN0aW9uKGZyb20sIHR5cGUpe1xu
XHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2YXIgZXZlbnRzID0gZnJvbS5yZXRy
aWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGlmICgh
dHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4gZXZlbnRzKSB0aGlzLmNsb25lRXZl
bnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlmIChldmVudHNbdHlwZV0pe1xuXHRc
dFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMuYWRk
RXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50cyA9IHtcblx0Y2xpY2s6IDIsIGRi
bGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIsIGNvbnRleHRtZW51OiAyLCAvL21v
dXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6IDIsIERPTU1vdXNlU2Nyb2xsOiAy
LCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91c2VvdXQ6IDIsIG1vdXNlbW92ZTog
Miwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9tb3VzZSBtb3ZlbWVudFxuXHRrZXlk
b3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5Ym9hcmRcblx0b3JpZW50YXRpb25j
aGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAyLCB0b3VjaG1vdmU6IDIsIHRvdWNo
ZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0Z2VzdHVyZXN0YXJ0OiAyLCBnZXN0
dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0dXJlXG5cdGZvY3VzOiAyLCBibHVy
OiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIsIHN1Ym1pdDogMiwgcGFzdGU6IDIs
IGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDogMiwgdW5sb2FkOiAxLCBiZWZvcmV1
bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29udGVudExvYWRlZDogMSwgcmVhZHlz
dGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5nZTogMSwgcG9wc3RhdGU6IDIsIHBh
Z2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxuXHRlcnJvcjogMSwgYWJvcnQ6IDEs
IHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5cbkVsZW1lbnQuRXZlbnRzID0ge1xu
XHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwnIGluIGRvY3VtZW50ID8gJ3doZWVs
JyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21vdXNld2hlZWwnIDogJ0RPTU1vdXNl
U2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBy
ZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYgKHJlbGF0ZWQgPT0gbnVsbCkgcmV0
dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKHJlbGF0
ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVsJyAmJiB0eXBlT2YodGhpcykgIT0g
J2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVkKSk7XG59O1xuXG5pZiAoJ29ubW91
c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtcblx0RWxlbWVudC5OYXRpdmVF
dmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlbGVhdmUgPSAyO1xu
XHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xufSBlbHNlIHtcblx0RWxlbWVudC5F
dmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25kaXRp
b246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMubW91c2VsZWF2ZSA9IHtcblx0XHRi
YXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcbn1cblxuLyo8bHRJ
RTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRFbGVtZW50Lk5hdGl2ZUV2
ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQuRXZlbnRzLmNoYW5nZSA9IHtcblx0
XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0XHRy
ZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYmICh0eXBlID09ICdyYWRpbycgfHwg
dHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFuZ2UnIDogJ2NoYW5nZSc7XG5cdFx0
fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdHJldHVybiBldmVudC50
eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZlbnQucHJvcGVydHlOYW1lID09ICdj
aGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5cbi8q
XG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRz
IHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSB0aGUgZGVsZWdhdGUgbWV0aG9k
IGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0Vs
ZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGV2ZW50
TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcjtcblxuRWxlbWVudC5O
YXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3Vzb3V0ID0gMjtc
blxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0
KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2VsZil7XG5cdFx0aWYgKG1hdGNoKHRh
cmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQsIGV2ZW50LCB0YXJnZXQpO1xuXHRc
dHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnROb2RlKTtcblx0fVxufTtcblxudmFy
IG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNv
bmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0bW91c2VsZWF2ZToge1xu
XHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJD
aGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdmb2N1cycgKyAoZXZlbnRMaXN0ZW5l
clN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fSxcblx0Ymx1cjog
e1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJ2JsdXInIDogJ2ZvY3Vzb3V0Jyxc
blx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0SUU5PiovXG52YXIgX2tleSA9ICck
ZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUpe1xuXG5cdHJl
dHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0XHRyZW1vdmU6IGZ1bmN0aW9uKHNl
bGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAn
bGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlzdCAmJiBsaXN0LmZvcm1zKSBmb3Ig
KHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0XHQvLyB0aGUgZm9ybSBt
YXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3QgaGF2ZSB0aGVcblx0XHRcdFx0Ly8g
cmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQgY2FzZSB0aGUgZXZlbnQgd2FzXG5c
dFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0aWYgKGxpc3QuZm9ybXNbaV0ucmVt
b3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQodHlwZSwgbGlzdC5mbnNbaV0pO1xu
XHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwg
ZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3JtID0gKHRhcmdldC5nZXQoJ3RhZycp
ID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQuZ2V0UGFyZW50KCdmb3JtJyk7XG5c
dFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFyIGxpc3RlbmVycyA9IHNlbGYucmV0
cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pLFxuXHRcdFx0XHRsaXN0ZW5lciA9
IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczogW119LFxuXHRcdFx0XHRmb3JtcyA9
IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7XG5cblx0XHRcdGlmIChmb3Jtcy5p
bmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRmb3Jtcy5wdXNoKGZvcm0pO1xuXG5c
dFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxmLCBt
YXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGZvcm0uYWRkRXZlbnQo
dHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5cblx0XHRcdGxpc3RlbmVyc1t1aWRd
ID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycs
IGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFyIGlucHV0T2JzZXJ2ZXIgPSBmdW5j
dGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cdFx0bGlzdGVu
OiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0dmFyIGV2
ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50cyhldmVu
dHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0gPSBmdW5jdGlvbihldmVudCl7XG5c
dFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9
O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVudHMpO1xuXHRcdH1cblx0fTtcbn07
XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVjdC5hcHBlbmQobWFwLCB7XG5cdHN1
Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVzZXQ6IGZvcm1PYnNlcnZlcigncmVz
ZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFuZ2UnKSxcblx0c2VsZWN0OiBpbnB1
dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIHByb3RvID0gRWxl
bWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8uYWRkRXZlbnQsXG5cdHJlbW92ZUV2
ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxheSA9IGZ1bmN0aW9uKG9sZCwgbWV0
aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1c2VDYXB0dXJlKXtcblx0XHRpZiAo
dHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5cGUs
IGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodHlwZSkuZXhw
cmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1ZG9zWzBdLmtleSAhPSAncmVsYXkn
KSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZhciBu
ZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNldWRvcy5zbGljZSgxKS5lYWNoKGZ1
bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6JyArIHBzZXVkby5rZXkgKyAocHNl
dWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJyknIDogJycpO1xuXHRcdH0pO1xuXHRc
dG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gbWV0aG9kLmNhbGwodGhpcywg
bmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZuKTtcblx0fTtcbn07XG5cbnZhciBk
ZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4pe1xu
XHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3RvcmVk
ID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBmb3IgKHZhciBfdWlkIGluIHN0b3Jl
ZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZuICYmIHN0b3JlZFtfdWlkXS5tYXRj
aCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dmFyIF90eXBlID0gdHlwZSwg
X21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdHR5
cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCl7
XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBfbWF0Y2gpO1xuXHRcdH07XG5cblx0
XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNbX3R5cGVdO1xuXHRcdGlmIChfbWFw
LmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVudEV2ZW50LmNvbmRpdGlvbil7XG5c
dFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24gPSBfbWFwLmNvbmRpdGlvbiB8fCBl
bGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQsIGV2
ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0LCBldmVudCkgJiYgY29uZGl0aW9u
LmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBz
ZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7XG5cdFx0dmFyIGRlbGVnYXRvciA9
IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRpZiAoIXRhcmdl
dCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRc
dGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwg
dWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRpZiAoIXRhcmdl
dCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRc
dGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5c
dFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7fTtcblx0XHRzdG9yZWRbdWlkXSA9
IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjogX2ZuLFxuXHRcdFx0ZGVsZWdhdG9y
OiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRcdHJl
dHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJlKTtc
blx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuLCBfdWlkKXtc
blx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3Jl
ZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQpIHJldHVybiB0aGlzO1xuXG5cdFx0
aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwgZGVsZWdhdG9yID0gc3RvcmVkW191
aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHRcdHR5cGUgPSBfbWFw
LmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1vdmUpIF9tYXAucmVtb3ZlKHRoaXMs
IF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtcblx0XHRcdHN0b3JhZ2VbX3R5cGVd
ID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVs
ZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRcdHZhciBfX3VpZCwgcztcblx0XHRp
ZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xu
XHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9PSBmbikgcmV0dXJuIGRlbGVnYXRp
b24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgZm4sIF9fdWlkKTtcblx0XHR9
IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07XG5c
dFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxsKHRo
aXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVu
dCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBkZWxlZ2F0aW9uLmFkZEV2ZW50KSxc
blx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50
KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5TdHlsZVxuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3R5bGVz
IG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJvdmlkZXM6IEVsZW1lbnQuU3R5bGVc
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0bWwgPSBkb2N1bWVudC5odG1sLCBl
bDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUsIHdoaWNoIGRvZXMgbm90IHJlbW92
ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5lbCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVkJztcbmVsLnN0eWxlLmNvbG9yID0g
bnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwuc3R5bGUuY29sb3IgPT0gJ3JlZCc7
XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJucyBib3JkZXIqIHNob3J0aGFuZCBz
dHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0aC1zdHlsZSBpbnN0ZWFkIG9mIHdp
ZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHggc29saWQgIzEyM2FiYyc7XG5lbC5z
dHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIgPSBl
bC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxsO1xuLy88L2x0SUU5PlxuXG52YXIg
aGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENvbXB1dGVkU3R5bGUsXG5cdHN1cHBv
cnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZS5ib3Jk
ZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1
bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0eWxlcyk7XG59fTtcblxudmFyIGhh
c09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51bGwpLFxuXHRoYXNGaWx0ZXIgPSAo
aHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxwaGEgPSAvYWxwaGFcXChvcGFjaXR5
PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0eSA9IGZ1bmN0aW9uKGVsZW1lbnQs
IG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0eScsIG9wYWNpdHkpO1xuXHRlbGVt
ZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8fCBvcGFjaXR5ID09IG51bGwgPyAn
dmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5PlxudmFyIHNldEZpbHRlciA9IGZ1
bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2YXIgc3R5bGUgPSBlbGVtZW50LnN0
eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5
bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIgPSAocmVnZXhwLnRlc3QoZmlsdGVy
KSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDogZmlsdGVyICsgJyAnICsgdmFsdWUp
LnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmls
dGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5ID8g
ZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IG9w
YWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRp
ZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50LmN1cnJlbnRTdHlsZS5oYXNMYXlv
dXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChvcGFjaXR5ID09IG51bGwgfHwgb3Bh
Y2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJycpO1xuXHRcdGlm
IChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50KSAhPSAxKSBzZXRGaWx0ZXIoZWxl
bWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScpO1xuXHR9IGVsc2Uge1xuXHRcdHNl
dEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0nICsgKG9wYWNpdHkgKiAx
MDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5cdH1cbn0gOiBzZXRWaXNpYmlsaXR5
KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlvbihlbGVtZW50KXtc
blx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNpdHkgfHwgZWxlbWVudC5nZXRDb21w
dXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3BhY2l0eSA9PSAnJykgPyAxIDogb3Bh
Y2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2
YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRT
dHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlmIChmaWx0ZXIpIG9wYWNpdHkgPSBm
aWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3BhY2l0eSA9PSBudWxsIHx8IGZpbHRl
ciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7XG59IDogZnVuY3Rpb24oZWxlbWVu
dCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2ZSgnJG9wYWNpdHknKTtcblx0aWYg
KG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPT0g
J2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5O1xufSkpO1xuXG52YXIgZmxvYXRO
YW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkgPyAnc3R5bGVGbG9hdCcgOiAnY3Nz
RmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAnMCUnLCB0b3A6ICcwJScsIGNlbnRl
cjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEwMCUnfSxcblx0aGFzQmFja2dyb3Vu
ZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb25YICE9IG51bGwpLFxu
XHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIgY2FtZWxDYXNlID0gZnVuY3Rpb24o
cHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFjZShwcmVmaXhQYXR0ZXJuLCAnJDEt
JykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZhciByZW1vdmVTdHlsZSA9IGZ1bmN0
aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0
aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5ICsgJ1gnKTtcblx0XHRw
cm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5KTtc
bn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRDb21wdXRlZFN0
eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYm
IHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJyZW50U3R5bGVbY2FtZWxDYXNlKHBy
b3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxlbWVudC5nZXREb2N1bWVudCh0aGlz
KS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmll
dy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVsbDtcblx0XHRyZXR1cm4gKGNvbXB1
dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHByb3BlcnR5ID09IGZsb2F0TmFtZSkg
PyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDogJyc7XG5cdH0sXG5cblx0c2V0U3R5
bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdvcGFj
aXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVl
KTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5c
dFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9h
dE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ3N0cmluZycpe1xu
XHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9wZXJ0eV0gfHwgJ0AnKS5zcGxpdCgn
ICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZhbHVlKS5tYXAoZnVuY3Rpb24odmFs
LCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAnJztcblx0XHRcdFx0cmV0dXJuICh0
eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVwbGFjZSgnQCcsIE1hdGgucm91bmQo
dmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSA9
PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVl
KTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHQvLzxsdElF
OT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09IG51bGwpICYmIGRvZXNOb3RSZW1v
dmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUpe1xuXHRcdFx0cmVtb3ZlU3R5
bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHRp
ZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0T3BhY2l0eSh0aGlzKTtcblx0XHRw
cm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJv
cGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVzICYmIHByb3BlcnR5LmluZGV4T2Yo
J2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVybiBbJ2JvcmRlclRvcExlZnRSYWRp
dXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMnLCAn
Ym9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlvbihjb3JuZXIpe1xuXHRcdFx0XHRy
ZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xuXHRcdFx0fSwgdGhpcykuam9pbign
ICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5zdHlsZVtwcm9wZXJ0eV07XG5cdFx0
aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcpe1xuXHRcdFx0aWYgKEVsZW1lbnQu
U2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKXtcblx0XHRcdFx0cmVzdWx0ID0g
W107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1twcm9wZXJ0eV0p
IHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0Lmpv
aW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZShw
cm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSAmJiAvXmJh
Y2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0eSkpe1xuXHRcdFx0cmV0dXJuIHJl
c3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KS9nLCBmdW5jdGlvbihwb3NpdGlv
bil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1twb3NpdGlvbl07XG5cdFx0XHR9KSB8
fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYgcHJvcGVydHkgPT0gJ2JhY2tncm91
bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0aWYgKHJlc3VsdCl7XG5cdFx0XHRy
ZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBjb2xvciA9IHJlc3VsdC5tYXRjaCgv
cmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAoY29sb3IpIHJlc3VsdCA9IHJlc3Vs
dC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hleCgpKTtcblx0XHR9XG5cdFx0aWYg
KCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxlW3Byb3BlcnR5XSl7XG5cdFx0XHRp
ZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0eSkgJiYgISgvcHgkLy50ZXN0KHJl
c3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9wZXJ0eSA9PSAnd2lkdGgnKSA/IFsn
bGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10sIHNpemUgPSAwO1xuXHRcdFx0XHR2
YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdFx0c2l6ZSArPSB0aGlzLmdldFN0
eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRvSW50KCkgKyB0aGlzLmdldFN0eWxl
KCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRc
dHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2FwaXRhbGl6ZSgpXSAtIHNpemUgKyAn
cHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlciguKylXaWR0aHxtYXJnaW58cGFkZGlu
Zy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxvYXQocmVzdWx0KSkpe1xuXHRcdFx0
XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vPGx0SUU5PlxuXHRcdGlmIChy
ZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRlcihUb3B8UmlnaHR8Qm90dG9tfExl
ZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChyZXN1bHQpKXtcblx0XHRcdHJldHVy
biByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4rKSQvLCAnJDIgJDMgJDEnKTtcblx0
XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHRzZXRT
dHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2YXIgc3R5bGUgaW4gc3R5bGVzKSB0
aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRc
dEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRyZXN1
bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4g
cmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxlcyA9IHtcblx0bGVmdDogJ0BweCcs
IHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAnQHB4Jyxcblx0d2lkdGg6ICdAcHgn
LCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1heEhlaWdodDogJ0BweCcsIG1pbldp
ZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFja2dyb3VuZENvbG9yOiAncmdiKEAs
IEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNrZ3JvdW5kUG9zaXRpb246ICdAcHgg
QHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250U2l6ZTogJ0BweCcsIGxldHRlclNw
YWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xpcDogJ3JlY3QoQHB4IEBweCBAcHgg
QHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcsIHBhZGRpbmc6ICdAcHggQHB4IEBw
eCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApIEBw
eCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAnQHB4IEBweCBAcHggQHB4JywgYm9y
ZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdyZ2IoQCwgQCwgQCkgcmdiKEAsIEAs
IEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6SW5kZXg6ICdAJywgJ3pvb20nOiAn
QCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0BweCcsIG9wYWNpdHk6ICdAJywgYm9y
ZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxuXG5cblxuXG5FbGVtZW50LlNob3J0
U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBib3JkZXI6IHt9LCBib3JkZXJXaWR0
aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6IHt9fTtcblxuWydUb3AnLCAnUmln
aHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9uKGRpcmVjdGlvbil7XG5cdHZhciBT
aG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBBbGwgPSBFbGVtZW50LlN0eWxlcztc
blx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rpb24oc3R5bGUpe1xuXHRcdHZhciBz
ZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0eWxlXVtzZF0gPSBBbGxbc2RdID0g
J0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyArIGRpcmVjdGlvbjtcblx0U2hvcnQu
Ym9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAsIEAsIEApJztcblx0dmFyIGJkdyA9
IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBiZGMgPSBiZCArICdDb2xvcic7XG5c
dFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0aFtiZHddID0gU2hvcnRbYmRdW2Jk
d10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3JkZXJTdHlsZVtiZHNdID0gU2hvcnRb
YmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQuYm9yZGVyQ29sb3JbYmRjXSA9IFNo
b3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAsIEApJztcbn0pO1xuXG5pZiAoaGFz
QmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRTdHlsZXMuYmFja2dyb3VuZFBvc2l0
aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFja2dyb3VuZFBvc2l0aW9uWTogJ0An
fTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EaW1lbnNpb25zXG5cbmRlc2Ny
aXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0aCBzaXplLCBzY3JvbGwsIG9yIHBv
c2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93IG9iamVjdC5cblxubGljZW5zZTog
TUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWxlbWVudCBwb3NpdGlvbmluZyBi
YXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9vLm9yZy8pIGNvZGUgYW5kIHNtYXJ0
IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl
cy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lvbnMgYmFzZWQgb24gW1lVSV0oaHR0
cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwgW0JTRCBMaWNlbnNlXShodHRwOi8v
ZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1sKS5cblxucmVxdWlyZXM6IFtFbGVt
ZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGltZW5zaW9uc11cblxu
Li4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtc
bmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7
XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9mZnNldFBhcmVudCA9PT0gZWxlbWVu
dCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIgaGVpZ2h0Q29tcG9uZW50cyA9IFsn
aGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbScsICdib3JkZXJUb3BXaWR0aCcs
ICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBvbmVudHMgPSBbJ3dpZHRoJywgJ3Bh
ZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmln
aHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9IGZ1bmN0aW9uKGVsKXtcblxuXHR2
YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLFxuXHRcdGJvdW5kcyA9IHt4OiAw
LCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0XHRi
b3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHdpZHRoQ29tcG9uZW50
cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnggKz0gcGFyc2VGbG9hdChnQ1NbY3Nz
XSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxudmFyIGlzT2Zmc2V0ID0gZnVuY3Rp
b24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdwb3NpdGlvbicpICE9ICdzdGF0aWMn
IHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRTdGF0aWMgPSBmdW5jdGlvbihlbCl7
XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFibGV8dGR8dGgpJC9pKS50ZXN0KGVs
LnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNjcm9sbFRvOiBmdW5j
dGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtcblx0XHRcdHRoaXMuZ2V0V2luZG93
KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2Nyb2xsTGVmdCA9
IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0
dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5cdFx0Ly88bHRJRTk+XG5cdFx0Ly8g
VGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5vdCBjYWxjdWxhdGUgZ2V0Qm91bmRp
bmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJpbGl0eSBoaWRkZW4uXG5cdFx0aWYg
KCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4OiB0aGlzLm9mZnNldFdpZHRoLCB5
OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0Ly8gVGhpcyBzdmcg
c2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRlU2l6ZSgpYCwgY2FuIGJlIHJlbW92
ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxuXHRcdC8vIEJ1ZyBpbmZvOiBodHRw
czovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MzA5ODVcblx0XHRpZiAo
dGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3ZnQ2FsY3VsYXRlU2l6ZSh0aGlzKTtc
blxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRoLCB5OiBib3VuZHMuaGVpZ2h0fTtc
blx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdFx0fVxuXHR9
LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkg
cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6ZSgpO1xuXHRcdHJldHVybiB7eDog
dGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNj
cm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRX
aW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsTGVmdCwgeTog
dGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbHM6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xu
XHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24u
eCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQuc2Ny
b2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHR9XG5cdFx0
cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNldFBhcmVudDogYnJva2VuT2Zmc2V0
UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYgKGlz
Qm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnZml4
ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNldENoZWNrID0gKHN0eWxlU3RyaW5n
KGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/IGlzT2Zmc2V0U3RhdGljIDogaXNP
ZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSl7XG5cdFx0
XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHRc
dHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXM7
XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRp
b24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4g
ZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXHRcdHJldHVybiBudWxs
O1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGhhc0dldEJvdW5k
aW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0O1xuXG5cdFx0aWYgKGhh
c0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIgYm91bmQgPSB0aGlzLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9jdW1lbnQuaWQodGhpcy5nZXREb2N1
bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0bWxTY3JvbGwgPSBodG1sLmdldFNj
cm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMuZ2V0U2Nyb2xscygpLFxuXHRcdFx0
XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3NpdGlvbicpID09ICdmaXhlZCcpO1xu
XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5sZWZ0LnRvRmxvYXQoKSArIGVsZW1T
Y3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueCkgLSBodG1sLmNsaWVudExl
ZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy55ICsgKChp
c0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5jbGllbnRUb3Bcblx0XHRcdH07XG5c
dFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtc
blx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRpb247XG5cblx0XHR3aGlsZSAoZWxl
bWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5v
ZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50Lm9mZnNldFRvcDtcblxuXHRc
dFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRcdH1cblxuXHRcdHJldHVybiBw
b3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24ocmVsYXRpdmUpe1xuXHRc
dHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0XHRcdHNjcm9sbCA9IHRoaXMuZ2V0
U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0XHRcdHg6IG9mZnNldC54IC0gc2Ny
b2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55XG5cdFx0fTtcblxuXHRcdGlmIChy
ZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChyZWxhdGl2ZSkpKXtcblx0XHRcdHZh
ciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9zaXRpb24oKTtcblx0XHRcdHJldHVy
biB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24ueCAtIGxlZnRCb3JkZXIocmVsYXRp
dmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlvbi55IC0gdG9wQm9yZGVyKHJlbGF0
aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRDb29yZGlu
YXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRo
aXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0XHR2YXIgcG9zaXRpb24gPSB0aGlz
LmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRc
dHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54LFxuXHRcdFx0dG9wOiBwb3NpdGlv
bi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhlaWdodDogc2l6ZS55XG5cdFx0fTtc
blx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0aDtcblx0XHRvYmouYm90dG9tID0g
b2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRjb21wdXRl
UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxlZnQ6IG9iai54
IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0JyksXG5cdFx0XHR0b3A6IG9iai55IC0g
c3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRcdH07XG5cdH0sXG5cblx0c2V0UG9z
aXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMuY29t
cHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5cbltEb2N1bWVudCwgV2luZG93XS5p
bnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBk
b2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDogZG9jLmNsaWVudFdp
ZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCksIGRvYyA9IGdldENvbXBhdEVsZW1l
bnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhPZmZzZXQgfHwgZG9jLnNjcm9sbExl
ZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wfTtcblx0fSxcblxuXHRnZXRT
Y3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRo
aXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5cdFx0XHRib2R5ID0gdGhpcy5nZXRE
b2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1hdGgubWF4KGRvYy5zY3JvbGxXaWR0
aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRoLm1heChkb2Muc2Nyb2xsSGVpZ2h0
LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHR9LFxuXG5cdGdldENvb3JkaW5h
dGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhpcy5nZXRTaXplKCk7XG5cdFx0cmV0
dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55LCByaWdodDogc2l6ZS54LCBoZWln
aHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxufSk7XG5cbi8vIHByaXZhdGUgbWV0
aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50LmdldENvbXB1dGVkU3R5bGU7XG5cbmZ1
bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtcblx0cmV0dXJuIHN0eWxlU3RyaW5n
KGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5cblxuXG5mdW5jdGlvbiB0b3BCb3Jk
ZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLXRvcC13
aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5
bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9uIGlz
Qm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8aHRtbCkkL2kpLnRlc3QoZWxlbWVu
dC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0RWxlbWVudChlbGVtZW50KXtcblx0
dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0cmV0dXJuICghZG9jLmNvbXBhdE1v
ZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKSA/IGRvYy5odG1sIDogZG9jLmJv
ZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVudC5hbGlhcyh7cG9zaXRpb246ICdz
ZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltXaW5kb3csIERvY3VtZW50LCBFbGVt
ZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRIZWlnaHQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5cblx0Z2V0V2lkdGg6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsVG9w
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLnk7XG5cdH0sXG5cblx0
Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS54
O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRTY3JvbGxXaWR0aDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueDtcblx0fSxcblxuXHRnZXRUb3A6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS55O1xuXHR9LFxuXG5c
dGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS54O1xu
XHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5cbmRlc2NyaXB0aW9uOiBDb250YWlu
cyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4dGVuZGVkIGJ5IGFsbCBvdGhlciBG
eCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtD
aGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV1cblxucHJvdmlkZXM6IEZ4XG5c
bi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9IHRoaXMuRnggPSBuZXcgQ2xhc3Mo
e1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJs
ZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25TdGFydDogbmlsLFxuXHRcdG9uQ2Fu
Y2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRcdCovXG5cdFx0ZnBzOiA2MCxcblx0
XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxuXHRcdGZyYW1lczogbnVsbCxcblx0
XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9yZSdcblx0fSxcblxuXHRpbml0aWFs
aXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1YmplY3QgPSB0aGlzLnN1YmplY3Qg
fHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5cblx0Z2V0VHJh
bnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVuY3Rpb24ocCl7XG5cdFx0XHRyZXR1
cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7XG5cdFx0fTtcblx0fSxcblxuXHRz
dGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKXtcblx0
XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/IChub3cgLSB0aGlzLnRpbWUpIDog
MCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZhbDtcblx0XHRcdHRoaXMudGltZSA9
IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0
aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1lcyl7
XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24odGhpcy5mcmFtZSAvIHRoaXMuZnJh
bWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8sIGRl
bHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZyYW1lcztcblx0
XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8sIDEpKTtcblx0XHRc
dHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0
cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEp
e1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBkZWx0YSk7XG5cdH0sXG5cblx0Y2hl
Y2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVubmluZygpKSByZXR1cm4gdHJ1ZTtc
blx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6IHRo
aXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNoYWlu
KHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0XHR9
XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihmcm9tLCB0byl7
XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5m
cm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0dGhpcy5mcmFtZSA9ICh0aGlzLm9w
dGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdHRo
aXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigpO1xuXHRcdHZhciBmcmFtZXMgPSB0
aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlvbnMuZnBzLCBkdXJhdGlvbiA9IHRo
aXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0aW9uID0gRnguRHVyYXRpb25zW2R1
cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRoaXMuZnJhbWVJbnRlcnZhbCA9IDEw
MDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMgfHwgTWF0aC5yb3VuZCh0aGlzLmR1
cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0
YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUodGhpcy5zdWJq
ZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0YXJ0JywgdGhpcy5zdWJqZWN0KTtc
blx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5nKCkpe1xuXHRc
dFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMu
b3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVzID09IHRoaXMuZnJhbWUpe1xuXHRc
dFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0XHRp
ZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50KCdjaGFpbkNvbXBsZXRlJywgdGhp
cy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdzdG9w
JywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRoaXMucmVzb2x2ZSh0aGlzLnN1Ympl
Y3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVubmlu
ZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0
aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZyYW1lcztc
blx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlzLnN1YmplY3QpLmNsZWFyQ2hhaW4o
KTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVubmlu
ZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0
aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUGF1c2VkKCkpIHB1c2hJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgbGlzdCA9IGluc3RhbmNlc1t0
aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAmJiBsaXN0LmNvbnRhaW5zKHRoaXMp
O1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5mcmFt
ZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmcoKTtcblx0fVxuXG59KTtcblxuRngu
Y29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdHJldHVybiAodG8gLSBmcm9t
KSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9ucyA9IHsnc2hvcnQnOiAyNTAsICdu
b3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGdsb2JhbCB0aW1lcnNcblxudmFyIGlu
c3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxvb3AgPSBmdW5jdGlvbigpe1xuXHR2
YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS07KXtc
blx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlmIChpbnN0YW5jZSkgaW5zdGFuY2Uu
c3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtc
blx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5zdGFuY2VzW2Zwc10gPSBbXSk7XG5c
dGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBzXSkgdGltZXJzW2Zwc10gPSBsb29w
LnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwgbGlzdCk7XG59O1xuXG52YXIgcHVs
bEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXTtc
blx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7XG5cdFx0aWYgKCFsaXN0Lmxlbmd0
aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5zdGFuY2VzW2Zwc107XG5cdFx0XHR0
aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zwc10pO1xuXHRcdH1cblx0fVxufTtc
blxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1NcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5IEZ4LlR3ZWVuLCBGeC5Nb3JwaCwg
RnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
W0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRnguQ1NTXG5cbi4uLlxuKi9cblxuRngu
Q1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxcblxuXHQvL3ByZXBhcmVzIHRoZSBi
YXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVy
dHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29udmVydCh2YWx1ZXMpO1xuXHRcdHZh
ciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtcblx0XHRpZiAodG8gPT0gbnVsbCl7
XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxlbWVudC5nZXRTdHlsZShwcm9wZXJ0
eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51bml0O1xuXHRcdFx0Ly8gYWRhcHRl
ZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIvZngvYmxvYi9tYXN0ZXIvZnguanMj
TDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBlb2YgZnJvbSA9PSAnc3RyaW5nJyAm
JiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAmJiBwYXJzZUZsb2F0KGZyb20pICE9
IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0byArIHVuaXQpO1xuXHRc
dFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRc
dFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExlZnQgb3IgcGl4ZWxXaWR0aFxuXHRc
dFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRcdFx0XHRcdHZhbHVlID0gZWxlbWVu
dC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxDYXNlKCldO1xuXHRcdFx0XHRcdGlm
ICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFkYXB0ZWQgZnJvbSBEZWFuIEVkd2Fy
ZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41NC4xNS8jY29t
bWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0gZWxlbWVudC5zdHlsZS5sZWZ0O1xu
XHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8gKyB1bml0O1xuXHRcdFx0XHRcdFx0
dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5
bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZyb20gPSAo
dG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkgKiAocGFyc2VGbG9hdChmcm9tKSB8
fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgZnJvbSArIHVuaXQpO1xu
XHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRoaXMucGFyc2UoZnJvbSksIHRvOiB0
aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMgYSB2YWx1ZSBpbnRvIGFuIGFycmF5
XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YWx1ZSA9IEZ1bmN0aW9uLmNvbnZl
cnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSA/IHZh
bHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVlKTtcblx0XHRyZXR1cm4gdmFsdWUu
bWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJpbmcodmFsKTtcblx0XHRcdHZhciBm
b3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRnguQ1NTLlBhcnNlcnMsIGZ1bmN0aW9u
KHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgcGFyc2Vk
ID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChwYXJzZWQgfHwgcGFyc2VkID09PSAw
KSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBhcnNlcn07XG5cdFx0XHR9KTtcblx0
XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBhcnNlcjogRnguQ1NTLlBhcnNlcnMu
U3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9KTtcblx0fSxcblxuXHQvL2NvbXB1
dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0cywgdXNpbmcgdGhlaXIgcGFyc2Vy
cy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHZhciBjb21w
dXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0aCwgdG8ubGVuZ3RoKSkudGltZXMo
ZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2YWx1ZTogZnJvbVtpXS5wYXJzZXIu
Y29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwgZGVsdGEpLCBwYXJzZXI6IGZyb21b
aV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQuJGZhbWlseSA9IEZ1bmN0aW9uLmNv
bnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBjb21wdXRlZDtcblx0fSxcblxuXHQv
L3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUs
IHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdmeDpjc3M6dmFsdWUnKSB2YWx1ZSA9
IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5lZCA9IFtdO1xuXHRcdHZhbHVlLmVh
Y2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0gcmV0dXJuZWQuY29uY2F0KGJpdC5w
YXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJldHVy
bmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdlIHRvIGFuIGVsZW1lbnRcblxuXHRy
ZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCl7XG5cdFx0ZWxl
bWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2YWx1ZSwgdW5pdCkpO1xuXHR9LFxu
XG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0byBmaW5kIHRoZSB2YWx1ZXMgZm9y
IGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0XHRpZiAoRngu
Q1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl07XG5cdFx0
dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdFeHAoJ14nICsgc2VsZWN0b3IuZXNj
YXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJjaFN0eWxlcyA9IGZ1bmN0aW9uKHJ1
bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0aW9uKHJ1bGUpe1xuXHRcdFx0XHRp
ZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGUucnVsZXMgfHwgcnVs
ZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgh
cnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2VsZWN0b3JUZXh0ID0gKHJ1bGUuc2Vs
ZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxhY2UoL15cXHcrLywgZnVuY3Rpb24o
bSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSkgOiBudWxs
O1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2VsZWN0b3JUZXN0LnRlc3Qoc2VsZWN0
b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFjaChFbGVtZW50LlN0eWxlcywgZnVu
Y3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGVbc3R5bGVdIHx8
IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47XG5cdFx0XHRcdFx0dmFsdWUgPSBT
dHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRcdHRvW3N0eWxlXSA9ICgoL15yZ2Iv
KS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDogdmFsdWU7XG5cdFx0XHRcdH0pO1xu
XHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2goZG9jdW1lbnQuc3R5bGVTaGVldHMs
IGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0gc2hlZXQuaHJlZjtcblx0XHRcdGlm
IChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAmJiBocmVmLmluZGV4T2YoZG9jdW1l
bnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFyIHJ1bGVzID0gc2hlZXQucnVsZXMg
fHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHlsZXMocnVsZXMpO1xuXHRcdH0pO1xu
XHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0gdG87XG5cdH1cblxufSk7XG5cbkZ4
LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9IHtcblxuXHRDb2xvcjoge1xuXHRc
dHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubWF0Y2goL14jWzAtOWEt
Zl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0cnVlKTtcblx0XHRcdHJldHVybiAo
KHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKykvKSkpID8g
W3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFsc2U7XG5cdFx0fSxcblx0XHRjb21w
dXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdFx0cmV0dXJuIGZyb20ubWFwKGZ1
bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoRnguY29tcHV0ZShm
cm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1
bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5tYXAoTnVtYmVyKTtcblx0XHR9XG5c
dH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNlRmxvYXQsXG5cdFx0Y29tcHV0ZTog
RnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdFx0cmV0
dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xuXHRcdH1cblx0fSxcblxuXHRTdHJp
bmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChmYWxzZSksXG5cdFx0Y29tcHV0ZTog
ZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBvbmU7XG5cdFx0fSxcblx0XHRzZXJ2
ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9XG5cdH1cblxufTtc
blxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxuZGVzY3JpcHRpb246IEZvcm1lcmx5
IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IG51bWJlciBvZiBDU1MgcHJvcGVy
dGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qgb2YgcnVsZXMsIG9yIENTUyBiYXNl
ZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5cbi4uLlxuKi9cblxuRnguTW9ycGgg
PSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5j
dGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3Qg
PSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxc
blxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5cGVvZiBub3cgPT0gJ3N0cmluZycp
IG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2YXIgcCBpbiBub3cpIHRoaXMucmVu
ZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtc
blx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBpbiBmcm9tKSBub3dbcF0gPSB0aGlz
LnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRcdHJldHVybiBub3c7XG5cdH0sXG5c
blx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhwcm9w
ZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09ICdzdHJp
bmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVydGllcyk7XG5cdFx0dmFyIGZyb20g
PSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHByb3BlcnRpZXMpe1xuXHRcdFx0dmFy
IHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsIHAsIHByb3BlcnRpZXNbcF0pO1xu
XHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0dG9bcF0gPSBwYXJzZWQudG87XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0byk7XG5cdH1cblxufSk7XG5cbkVs
ZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xu
XHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBtb3JwaCA9
IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFtb3JwaCl7XG5cdFx0XHRtb3JwaCA9
IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3RvcmUo
J21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9ycGg7XG5cdH1cblxufTtcblxu
RWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5jdGlvbihwcm9wcyl7XG5cdFx0dGhp
cy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0p
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25zXG5cbmRlc2NyaXB0aW9uOiBDb250
YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0byBiZSB1c2VkIHdpdGggYW55IG9m
IHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0
czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQZW5uZXIsIDxodHRwOi8vd3d3LnJv
YmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFuZCBvcHRpbWl6ZWQgdG8gYmUgdXNl
ZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxucHJvdmlkZXM6IEZ4LlRyYW5zaXRp
b25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxuXHRnZXRUcmFuc2l0aW9uOiBmdW5j
dGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9ucy50cmFuc2l0aW9uIHx8IEZ4LlRy
YW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0eXBlb2YgdHJhbnMgPT0gJ3N0cmlu
Zycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgnOicpO1xuXHRcdFx0dHJhbnMgPSBG
eC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNbZGF0YVswXV0gfHwgdHJhbnNbZGF0
YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFbMV0pIHRyYW5zID0gdHJhbnNbJ2Vh
c2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsyXSA/IGRhdGFbMl0uY2FwaXRhbGl6
ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5zO1xuXHR9XG5cbn0pO1xuXG5GeC5U
cmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFyYW1zKXtcblx0cGFyYW1zID0gQXJy
YXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0gZnVuY3Rpb24ocG9zKXtcblx0XHRy
ZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07XG5cdHJldHVybiBPYmplY3QuYXBw
ZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxuXHRcdGVhc2VPdXQ6IGZ1bmN0aW9u
KHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24oMSAtIHBvcywgcGFyYW1zKTtcblx0
XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAocG9zIDw9
IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6ICgyIC0gdHJhbnNpdGlvbigyICog
KDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0fSk7XG59O1xuXG5GeC5UcmFuc2l0
aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdHJldHVybiB6ZXJvO1xu
XHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQgPSBmdW5jdGlvbih0cmFuc2l0
aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJhbnNpdGlvbnMpIEZ4LlRyYW5zaXRp
b25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24odHJhbnNpdGlvbnNbdHJhbnNpdGlv
bl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtcblxuXHRQb3c6IGZ1bmN0aW9uKHAs
IHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhbMF0gfHwgNik7XG5cdH0sXG5cblx0
RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDggKiAocCAtIDEpKTtc
blx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1hdGguc2luKE1h
dGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIDEg
LSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxuXG5cdEJhY2s6IGZ1bmN0aW9uKHAs
IHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAs
IDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0Qm91bmNlOiBmdW5jdGlvbihwKXtc
blx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAsIGIgPSAxOyAxOyBhICs9IGIsIGIg
Lz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAvIDExKXtcblx0XHRcdFx0dmFsdWUg
PSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEgKiBwKSAvIDQsIDIpO1xuXHRcdFx0
XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXG5cdEVs
YXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCAxMCAqIC0tcCkg
KiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYgeFswXSB8fCAxKSAvIDMpO1xuXHR9
XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQnLCAnUXVpbnQnXS5lYWNoKGZ1bmN0
aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBG
eC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCBpICsgMik7
XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHdlZW5cblxuZGVzY3JpcHRpb246
IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgQ1NTIHByb3BlcnR5
IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWly
ZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBFbGVtZW50LmZhZGUsIEVsZW1lbnQu
aGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0gbmV3IENsYXNzKHtcblxuXHRFeHRl
bmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7
XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7
XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihwcm9w
ZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0XHRcdG5vdyA9
IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnByb3BlcnR5IHx8IHRoaXMub3B0aW9u
cy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwcm9wZXJ0
eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNr
KHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHZhciBhcmdzID0gQXJyYXku
ZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVydHkgPSB0aGlzLm9wdGlvbnMucHJv
cGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUodGhp
cy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQo
cGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGll
cy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCd0
d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0d2VlbiA9IHRoaXMucmV0cmlldmUo
J3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0d2VlbiA9IG5ldyBGeC5Ud2Vlbih0
aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3R3ZWVuJywgdHdlZW4p
O1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1l
bnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdHRoaXMu
Z2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0byk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZmFkZSA9IHRoaXMuZ2V0KCd0
d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5hcHBlbmQoYXJndW1lbnRzKSwgdG9n
Z2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3NbMV0gPSAndG9nZ2xlJztcblx0XHRz
d2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBtZXRob2QgPSAnc3RhcnQnOyBhcmdz
WzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBtZXRob2QgPSAnc3RhcnQnOyBhcmdz
WzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93JzogbWV0aG9kID0gJ3NldCc7IGFyZ3Nb
MV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sx
XSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpcblx0XHRcdFx0dmFyIGZsYWcgPSB0
aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0eWxlKCdvcGFjaXR5JykgPT0gMSk7
XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRcdGFyZ3NbMV0gPSBmbGFnID8gMCA6
IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycsICFmbGFnKTtcblx0XHRcdFx0dG9n
Z2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBtZXRob2QgPSAnc3Rh
cnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5lbGltaW5hdGUoJ2ZhZGU6ZmxhZycp
O1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdzKTtcblx0XHR2YXIgdG8gPSBhcmdz
W2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9kID09ICdzZXQnKXtcblx0XHRcdHRo
aXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8gJ2hpZGRlbicgOiAndmlzaWJsZScp
O1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRpZiAoZmFkZS4kY2hhaW4ubGVuZ3Ro
KXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHRoaXMuZWxlbWVu
dC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0dGhpcy5jYWxs
Q2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldFN0
eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRc
dFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRpZiAodGhpcy5lbGVtZW50LmdldFN0
eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhpcy5lbGVtZW50LnNldFN0eWxlKCd2
aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlzLmNhbGxDaGFpbigpO1xuXHRcdFx0
fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGlnaGxpZ2h0OiBmdW5j
dGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5cdFx0XHRlbmQgPSB0aGlzLnJldHJp
ZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9y
JykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJlbnQnKSA/ICcjZmZmJyA6IGVuZDtc
blx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3ZWVuJyk7XG5cdFx0dHdlZW4uc3Rh
cnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2ZmZmY4OCcsIGVuZCkuY2hhaW4oZnVu
Y3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCB0aGlzLnJl
dHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0XHR0d2Vlbi5jYWxsQ2hhaW4oKTtc
blx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxu
LS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246IFBvd2VyZnVsIGFsbCBwdXJwb3Nl
IFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxlbWVudCwgQ2hhaW4sIEV2ZW50cywg
T3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBSZXF1ZXN0XG5c
bi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0eSA9IGZ1bmN0aW9uKCl7fSxcblx0
cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBuZXcgQnJvd3Nlci5SZXF1ZXN0KTtc
blxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVu
dHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0aW9u
czogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30sXG5cdFx0b25Mb2Fkc3RhcnQ6IGZ1
bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVzczogZnVuY3Rpb24oZXZlbnQsIHho
cil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30sXG5cdFx0b25DYW5jZWw6IGZ1bmN0
aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9uc2VY
TUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIpe30sXG5cdFx0b25FeGNlcHRpb246
IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRcdG9uVGltZW91dDogZnVuY3Rpb24o
KXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAnJyxcblx0XHR3aXRoQ3JlZGVudGlh
bHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRhOiAnJyxcblx0XHRoZWFkZXJzOiB7
XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXG5cdFx0XHQnQWNj
ZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQv
eG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRmb3JtYXQ6IGZhbHNlLFxu
XHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25vcmUnLFxuXHRcdGlzU3VjY2Vzczog
bnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJsRW5jb2RlZDogdHJ1ZSxcblx0XHRl
bmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czogZmFsc2UsXG5cdFx0ZXZhbFJlc3Bv
bnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5vQ2FjaGU6IGZhbHNlXG5cdH0sXG5c
blx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy54aHIgPSBuZXcgQnJv
d3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHRoaXMu
aGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9LFxuXG5cdG9uU3RhdGVDaGFuZ2U6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmICh4aHIucmVhZHlT
dGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtcblx0XHR0aGlzLnJ1bm5pbmcgPSBm
YWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlv
bigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7XG5cdFx0XHR0aGlzLnN0YXR1cyA9
IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0
XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9y
dCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHRpZiAodGhp
cy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxldGUg
dGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3BvbnNlID0ge3RleHQ6IHRoaXMueGhy
LnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5yZXNwb25zZVhNTH07XG5cdFx0aWYg
KHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnN0YXR1cykpXG5cdFx0XHR0
aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlzLnJlc3BvbnNlLnhtbCk7XG5cdFx0
ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5cblx0aXNTdWNjZXNzOiBmdW5jdGlv
bigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztcblx0XHRyZXR1cm4gKHN0YXR1cyA+
PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxuXG5cdHByb2Nlc3NTY3JpcHRzOiBm
dW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZSB8fCAoLyhl
Y21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcignQ29udGVudC10eXBlJykpKSBy
ZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVybiB0ZXh0LnN0cmlwU2NyaXB0cyh0
aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRl
eHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyh0ZXh0KSwg
eG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQsIHhtbDogeG1sfSk7XG5cdH0sXG5c
blx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScs
IGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJndW1lbnRzKS5jYWxsQ2hhaW4oKTtc
blx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMub25GYWlsdXJlKCk7XG5c
dFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4aHI6IHRoaXMueGhyfSk7XG5cdH0s
XG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0
ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtcblx0fSxcblxuXHRsb2Fkc3RhcnQ6
IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnbG9hZHN0YXJ0JywgW2V2ZW50
LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBmdW5jdGlvbihldmVudCl7XG5cdFx0
dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5c
dHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3RpbWVvdXQnLCB0aGlz
Lnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3RpbWVvdXQnLCB4aHI6IHRoaXMueGhy
fSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dGhp
cy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0
SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5j
dGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKG5hbWUpO1xu
XHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25zLmxp
bmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7XG5c
dFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMs
IHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5c
blx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKG9wdGlvbnMp
KSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgPSB0aGlzLm9wdGlv
bnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRcdHRoaXMucnVubmluZyA9IHRydWU7
XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtcblx0XHRpZiAodHlwZSA9PSAnc3Ry
aW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9IHtkYXRhOiBvcHRpb25zfTtcblxu
XHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hcHBlbmQo
e2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhvZDogb2xkLm1ldGhvZH0sIG9wdGlv
bnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1cmwgPSBTdHJpbmcob3B0aW9ucy51
cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0c3dpdGNo
ICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVudCc6IGRhdGEgPSBkb2N1bWVudC5p
ZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnb2JqZWN0JzogY2Fz
ZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTtcblx0XHR9XG5cblx0
XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2YXIgZm9ybWF0ID0gJ2Zvcm1hdD0n
ICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBmb3JtYXQgKyAn
JicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW11bGF0
aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgX21l
dGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gX21ldGhv
ZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0aG9kID0gJ3Bvc3QnO1xuXHRcdH1c
blxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAmJiBbJ3Bvc3QnLCAncHV0J10uY29u
dGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2RpbmcgPSAodGhpcy5vcHRpb25zLmVuY29k
aW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcnO1xuXHRcdFx0
dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0aWYgKCF1cmwpIHVybCA9IGRvY3Vt
ZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRyaW1Qb3NpdGlvbiA9IHVybC5sYXN0
SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24gPiAtMSAmJiAodHJpbVBvc2l0aW9u
ID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJsLnN1YnN0cigwLCB0cmltUG9zaXRp
b24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hlKVxuXHRcdFx0dXJsICs9ICh1cmwu
aW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3RyaW5nLnVuaXF1ZUlEKCk7XG5cblx0
XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1ldGhvZCA9PSAnZGVsZXRlJykpe1xu
XHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgZGF0YTtc
blx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtcblx0
XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5vbmxvYWRzdGFydCA9IHRoaXMubG9h
ZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3Mu
YmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3BlbihtZXRob2QudG9VcHBlckNhc2UoKSwg
dXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9ucy51c2VyLCB0aGlzLm9wdGlvbnMu
cGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndpdGhDcmVkZW50aWFscykgJiYgJ3dp
dGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblxuXHRc
dHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKTtc
blxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVuY3Rpb24odmFsdWUsIGtleSl7XG5c
dFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbHVlKTtcblx0
XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnZXhjZXB0aW9uJywgW2tl
eSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2V4Y2VwdGlvbicsIHho
cjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRcdGlm
ICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVz
ZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQo
J3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0XHRpZiAoIXRoaXMub3B0aW9ucy5h
c3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5vcHRpb25zLnRp
bWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVsYXkodGhpcy5vcHRpb25zLnRpbWVv
dXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVuY3Rpb24o
KXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5ydW5uaW5n
ID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdHhoci5hYm9ydCgpO1xuXHRc
dGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRc
dGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
ZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25s
b2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVlc3QoKTtc
blx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjog
J2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnZh
ciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUnLCAncGF0Y2gn
LCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVMRVRFJywgJ1BBVENIJywgJ0hFQUQn
XS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNbbWV0aG9kXSA9IGZ1bmN0aW9uKGRh
dGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRob2Q6IG1ldGhvZFxuXHRcdH07XG5c
dFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBkYXRhO1xuXHRcdHJldHVybiB0aGlz
LnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0LmltcGxlbWVudChtZXRob2RzKTtc
blxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25z
KXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJykuY2FuY2VsKCk7XG5cdFx0c2VuZC5z
ZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmlldmUoJ3NlbmQnKTtcblx0XHRpZiAo
IXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtcblx0XHRcdFx0ZGF0YTogdGhpcywg
bGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0JywgdXJs
OiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zdG9yZSgnc2VuZCcs
IHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0fVxuXG59O1xuXG5FbGVtZW50Lmlt
cGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtcblx0XHR2YXIgc2VuZGVyID0gdGhp
cy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0YTogdGhpcywgdXJsOiB1cmwgfHwg
c2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbn0p
KCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1MXG5cbmRlc2NyaXB0aW9uOiBFeHRl
bmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBp
bnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0XVxuXG5wcm92aWRlczogUmVxdWVz
dC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0gbmV3IENsYXNzKHtcblxuXHRFeHRl
bmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1cGRhdGU6IGZhbHNlLFxuXHRcdGFw
cGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUsXG5cdFx0ZmlsdGVyOiBmYWxzZSxc
blx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3ht
bCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4
dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIHJlc3BvbnNlID0gdGhpcy5yZXNw
b25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0cmlwU2NyaXB0cyhmdW5jdGlvbihz
Y3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9IHNjcmlwdDtcblx0XHR9KTtcblxu
XHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2goLzxib2R5W14+XSo+KFtcXHNcXFNd
Kj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVzcG9uc2UuaHRtbCA9IG1hdGNoWzFd
O1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2RpdicpLnNldCgnaHRtbCcsIHJlc3BvbnNl
Lmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAuY2hpbGROb2Rlcztcblx0XHRyZXNw
b25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0aW9ucy5maWx0ZXIgfHwgJyonKTtc
blxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UudHJlZSA9IHJlc3BvbnNlLmVsZW1l
bnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0XHR2YXIgdXBkYXRlID0gZG9jdW1l
bnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIp
IHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5cdFx0XHRlbHNlIHVwZGF0ZS5zZXQo
J2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2UgaWYgKG9wdGlvbnMuYXBwZW5kKXtc
blx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRpb25zLmFwcGVuZCk7XG5cdFx0XHRp
ZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRzLnJldmVyc2UoKS5pbmplY3QoYXBw
ZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAuZ2V0Q2hpbGRyZW4oKSk7XG5cdFx0
fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93c2VyLmV4ZWMocmVzcG9uc2UuamF2
YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNwb25zZS50cmVlLCByZXNwb25zZS5l
bGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cdFx0dGhpcy5y
ZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50czogcmVzcG9uc2UuZWxlbWVudHMs
IGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJlc3BvbnNlLmphdmFzY3JpcHR9KTtc
blx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxvYWQgPSB7XG5cblx0c2V0OiBmdW5j
dGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMuZ2V0KCdsb2FkJykuY2FuY2VsKCk7
XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMucmV0cmlldmUoJ2xvYWQn
KTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5ldyBSZXF1ZXN0LkhUTUwoe2RhdGE6
IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMsIG1ldGhvZDogJ2dldCd9KTtcblx0
XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9XG5cdFx0cmV0dXJuIGxvYWQ7XG5c
dH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGxvYWQ6IGZ1bmN0aW9uKCl7XG5c
dFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5LmxpbmsoYXJndW1lbnRzLCB7ZGF0YTogVHlw
ZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxuZGVzY3JpcHRpb246IEpTT04gZW5j
b2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cblNlZUFs
c286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWlyZXM6IFtBcnJheSwgU3RyaW5nLCBO
dW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxuXG4uLi5cbiovXG5cbmlmICh0eXBl
b2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0ge307XG5cblxuXG4oZnVuY3Rpb24o
KXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYicsICdcXHQnOiAnXFxcXHQnLCAnXFxu
JzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAnXFxcXHInLCAnXCInIDogJ1xcXFxc
IicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2NhcGUgPSBmdW5jdGlvbihjaHIpe1xu
XHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAoJzAwMDAnICsgY2hyLmNoYXJDb2Rl
QXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xuXG5KU09OLnZhbGlkYXRlID0gZnVu
Y3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcXFwoPzpbXCJcXFxc
XFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5cblx0XHRcdFx0XHRyZXBsYWNlKC9c
IlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8LT9cXGQrKD86XFwuXFxkKik/KD86
W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0XHRyZXBsYWNlKC8oPzpefDp8LCko
PzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15bXFxdLDp7fVxcc10qJC8pLnRlc3Qo
c3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5zdHJpbmdpZnkgPyBmdW5jdGlvbihv
Ymope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcbn0gOiBmdW5jdGlvbihvYmope1xu
XHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50b0pTT04oKTtcblxuXHRzd2l0Y2gg
KHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJuICdcIicgKyBv
YmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBlc2NhcGUpICsgJ1wiJztcblx0XHRj
YXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2JqLm1hcChKU09OLmVuY29kZSkuY2xl
YW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzpcblx0XHRcdHZhciBz
dHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSl7
XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFsdWUpO1xuXHRcdFx0XHRpZiAoanNv
bikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6JyArIGpzb24pO1xuXHRcdFx0fSk7
XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xuXHRcdGNhc2UgJ251bWJlcic6IGNh
c2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0Y2FzZSAnbnVsbCc6IHJldHVybiAn
bnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkpTT04uc2VjdXJlID0gdHJ1ZTtc
blxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywgc2VjdXJlKXtcblx0aWYgKCFzdHJp
bmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuXG5cdGlmIChz
ZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7XG5cdGlmIChzZWN1cmUpe1xuXHRc
dGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpO1xuXHRcdGlmICghSlNP
Ti52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3IoJ0pTT04gY291bGQgbm90IGRlY29k
ZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5kIHRoZSB2YWx1ZSBpcyBub3Qgc2Vj
dXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsgc3RyaW5nICsgJyknKTtcbn07XG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5KU09OXG5cbmRlc2NyaXB0aW9uOiBF
eHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZv
ciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUg
bGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09OXVxuXG5wcm92aWRlczogUmVxdWVz
dC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0gbmV3IENsYXNzKHtcblxuXHRFeHRl
bmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQvKm9uRXJyb3I6IGZ1bmN0aW9uKHRl
eHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTog
ZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdFx0T2JqZWN0
LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNv
bicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0fSk7XG5cdH0sXG5cblx0c3VjY2Vz
czogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5cdFx0dHJ5IHtcblx0XHRcdGpzb24g
PSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0ZXh0LCB0aGlzLm9wdGlvbnMuc2Vj
dXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnZXJyb3In
LCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGpzb24gPT0g
bnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5v
blN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJlc29sdmUoe2pzb246IGpzb24sIHRl
eHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogQ29va2ll
XG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcsIHJlYWRpbmcsIGFuZCBkZWxldGlu
ZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVk
aXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkgUGV0ZXItUGF1bCBLb2NoIChodHRw
Oi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09wdGlvbnMsIEJyb3dzZXJdXG5cbnBy
b3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29va2llID0gbmV3IENsYXNzKHtcblxu
XHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6IHtcblx0XHRwYXRoOiAnLycsXG5c
dFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFsc2UsXG5cdFx0c2VjdXJlOiBmYWxz
ZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5jb2RlOiB0cnVlLFxuXHRcdGh0dHBP
bmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7
XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHR9
LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbmNv
ZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRpZiAodGhpcy5vcHRp
b25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0aGlzLm9wdGlvbnMuZG9tYWluO1xu
XHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0gJzsgcGF0aD0nICsgdGhpcy5vcHRp
b25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7XG5cdFx0XHR2YXIgZGF0
ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyB0aGlz
Lm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblx0XHRcdHZhbHVlICs9
ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMu
b3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7XG5cdFx0aWYgKHRoaXMub3B0aW9u
cy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xuXHRcdHRoaXMub3B0aW9ucy5kb2N1
bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHZhbHVlID0gdGhpcy5vcHRpb25z
LmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxzKicgKyB0aGlzLmtleS5lc2NhcGVS
ZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAodmFsdWUpID8gZGVjb2RlVVJJQ29t
cG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24oKXtc
blx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVyZ2Uoe30sIHRoaXMub3B0aW9ucywg
e2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7
XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIG9wdGlvbnMpe1xuXHRyZXR1
cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZhbHVlKTtcbn07XG5cbkNvb2tpZS5y
ZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5KS5yZWFkKCk7XG59
O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdHJldHVybiBu
ZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xufTtcblxuLypcbi0tLVxuXG5uYW1l
OiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGN1c3RvbSBldmVudCBkb21y
ZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQnJvd3Nl
ciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtET01SZWFkeSwgRG9tUmVh
ZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpe1xuXG52YXIgcmVh
ZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNob3VsZFBvbGwsXG5cdHRpbWVyLFxu
XHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG52YXIgZG9t
cmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIXJlYWR5
KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1ZTtcblx0XHRkb2N1bWVudC5yZW1v
dmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KS5yZW1vdmVMaXN0ZW5lcign
cmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1bWVudC5maXJlRXZlbnQoJ2RvbXJl
YWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVhZHknKTtcblx0fVxuXHQvLyBjbGVh
bnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cgPSB0ZXN0RWxlbWVudCA9IG51bGw7
XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRmb3IgKHZhciBpID0gY2hlY2tzLmxl
bmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRkb21yZWFkeSgpO1xuXHRcdHJldHVy
biB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBwb2xsID0gZnVuY3Rpb24o
KXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFjaGVjaygpKSB0aW1lciA9IHNldFRp
bWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ0RPTUNvbnRlbnRM
b2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4vLyBkb1Njcm9sbCB0ZWNobmlxdWUg
YnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2Fk
ZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93cyB3aGVuIHRoZSBET00gaXMgbm90
IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIgZG9TY3JvbGxXb3JrcyA9IGZ1bmN0
aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9TY3JvbGwoKTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuLy8gSWYgZG9TY3Jv
bGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgZG9tcmVhZHlc
bi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxlbWVudC5kb1Njcm9sbCAmJiAhZG9T
Y3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3JvbGxXb3Jrcyk7XG5cdHNob3VsZFBv
bGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChkb2N1bWVudC5yZWFkeVN0YXRlKSBj
aGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0YXRl
O1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0YXRlID09ICdjb21wbGV0ZScpO1xu
fSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBkb2N1bWVudCkgZG9jdW1lbnQuYWRk
TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7XG5lbHNlIHNob3VsZFBvbGwgPSB0
cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5FbGVtZW50LkV2ZW50cy5kb21yZWFk
eSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAocmVhZHkpIGZuLmNhbGwodGhp
cyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRvbXJlYWR5IGZpcmVzIGJlZm9yZSBs
b2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNlOiAnbG9hZCcsXG5cdG9uQWRkOiBm
dW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlzID09IHdpbmRvdykgZm4uY2FsbCh0
aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzID09IHdp
bmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVsZXRlIEVsZW1lbnQuRXZlbnRzLmxv
YWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG4vLyBUaGlzIGlzIGJhc2Vk
IG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFkZEV2ZW50KCdsb2FkJywgZnVuY3Rp
b24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3aW5kb3csIGRvY3VtZW50KTtcbiIK
IAogLyoqKi8gfSksCiAvKiA0MTIgKi8KQEAgLTExMzg5NCwxMyArMTEzODk0LDEzIEBAIG1vZHVs
ZS5leHBvcnRzID0gIi8qanNoaW50IHF1b3RtYXJrOiBmYWwKIC8qIDQyMCAqLwogLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyBsaWJzL2px
dWVyeS9qcXVlcnkuZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykg
TWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGljZW5zZWQgdW5k
ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91
IG1heSBub3QgdXNlXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElTIFBST1ZJREVE
ICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxu
S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRB
VElPTiBBTlkgSU1QTElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZS
SU5HRU1FTlQuXG5cblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlwaW5nIGZvciB0
aGUgalF1ZXJ5IGxpYnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFByb2plY3Q6IGh0
dHA6Ly9qcXVlcnkuY29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtvdiA8aHR0cHM6
Ly9naXRodWIuY29tL2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3RlciA8aHR0cHM6
Ly9naXRodWIuY29tL2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxlaSBHb21lcyA8
aHR0cHM6Ly9naXRodWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0dHBzOi8vZ2l0
aHViLmNvbS90YXNvaWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxodHRwczovL2dp
dGh1Yi5jb20vc2VhbnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9HdXV6
PiwgS2VsbHkgU3VtbWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxpbj4sIEJhc2Fy
YXQgQWxpIFN5ZWQgPGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9sYXMgV29sdmVy
c29uIDxodHRwczovL2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vyb25lIDxodHRw
czovL2dpdGh1Yi5jb20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0dHBzOi8vZ2l0
aHViLmNvbS9BbmRyZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0dHBzOi8vZ2l0
aHViLmNvbS9qYW1lc2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9naXRodWIuY29t
L3NlaWtpY2hpPiwgQmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWlu
amFja21hbj4sIFBvdWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkzMjk0PiwgSm9z
aCBTdHJvYmwgPGh0dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBSZWlsbHkgPGh0
dHBzOi8vZ2l0aHViLmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8v
Z2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAgICBJbnRlcmZh
Y2UgZm9yIHRoZSBBSkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgQUpBWCByZXF1
ZXN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICog
VGhlIGNvbnRlbnQgdHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0IHRlbGxzIHRo
ZSBzZXJ2ZXIgd2hhdCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGluIHJldHVybi4g
SWYgdGhlIGFjY2VwdHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVu
ZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxuICAgICAqL1xu
ICAgIGFjY2VwdHM/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgYWxsIHJlcXVl
c3RzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRvIHRydWUgYnkg
ZGVmYXVsdCkuIElmIHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQgdGhpcyBvcHRp
b24gdG8gZmFsc2UuIENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6IFwianNvbnBc
IiByZXF1ZXN0cyBkbyBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE5vdGUgdGhh
dCBzeW5jaHJvbm91cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUgYnJvd3Nlciwg
ZGlzYWJsaW5nIGFueSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQXMgb2Yg
alF1ZXJ5IDEuOCwgdGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAoJC5EZWZlcnJl
ZCkgaXMgZGVwcmVjYXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9yL2NvbXBsZXRl
IGNhbGxiYWNrIG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIG9m
IHRoZSBqcVhIUiBvYmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRlcHJlY2F0ZWQg
anFYSFIuc3VjY2VzcygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgICAvKipc
biAgICAgKiBBIHByZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQg
dG8gbW9kaWZ5IHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2Jq
ZWN0IGJlZm9yZSBpdCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhlYWRlcnMsIGV0
Yy4gVGhlIGpxWEhSIGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRz
LiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUgYmVmb3JlU2Vu
ZCBmdW5jdGlvbiB3aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhl
IGJlZm9yZVNlbmQgb3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUg
b2YgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpRdWVyeVhIUiwg
c2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBJZiBz
ZXQgdG8gZmFsc2UsIGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0byBiZSBjYWNo
ZWQgYnkgdGhlIGJyb3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ugd2lsbCBvbmx5
IHdvcmsgY29ycmVjdGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3b3JrcyBieSBh
cHBlbmRpbmcgXCJfPXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJzLiBUaGUgcGFy
YW1ldGVyIGlzIG5vdCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3RzLCBleGNlcHQg
aW4gSUU4IHdoZW4gYSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxyZWFkeSBiZWVu
IHJlcXVlc3RlZCBieSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xlYW47XG4gICAg
LyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBmaW5p
c2hlcyAoYWZ0ZXIgc3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCkuIFRo
ZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVy
eSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0ZWdvcml6aW5n
IHRoZSBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1vZGlmaWVkXCIs
IFwiZXJyb3JcIiwgXCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJlcnJvclwiKS4g
QXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJh
eSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhp
cyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFYSFI6IEpRdWVy
eVhIUiwgdGV4dFN0YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVj
dCBvZiBzdHJpbmcvcmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJtaW5lIGhvdyBq
UXVlcnkgd2lsbCBwYXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50IHR5cGUuICh2
ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtrZXk6IHN0cmlu
Z106IGFueTsgfTtcbiAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3VyY2UgY29kZSwg
YWpheCdzIG9wdGlvbiBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0IHRvIFwiZmFs
c2VcIlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlw
ZWQvaXNzdWVzLzc0MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRhIHRvIHRoZSBz
ZXJ2ZXIsIHVzZSB0aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxpY2F0aW9uL3gt
d3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBmaW5lIGZvciBt
b3N0IGNhc2VzLiBJZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10eXBlIHRvICQu
YWpheCgpLCB0aGVuIGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2ZW4gaWYgbm8g
ZGF0YSBpcyBzZW50KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0aW9uIGRpY3Rh
dGVzIHRoYXQgdGhlIGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5nIGFub3RoZXIg
Y2hhcnNldCB3aWxsIG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhlIGVuY29kaW5n
LlxuICAgICAqL1xuICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRoaXMg
b2JqZWN0IHdpbGwgYmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxhdGVkIGNhbGxi
YWNrcy4gQnkgZGVmYXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50
cyB0aGUgYWpheCBzZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0aW5ncyBtZXJn
ZWQgd2l0aCB0aGUgc2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICovXG4gICAgY29u
dGV4dD86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhVHlw
ZS10by1kYXRhVHlwZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVlIGlzIGEgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUgcmVzcG9uc2Uu
ICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86IHsgW2tleTog
c3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRvIGZvcmNlIGEg
Y3Jvc3NEb21haW4gcmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUgZG9tYWluLCBz
ZXQgdGhlIHZhbHVlIG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dzLCBmb3IgZXhh
bXBsZSwgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4uICh2ZXJzaW9u
IGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFuO1xuICAgIC8q
KlxuICAgICAqIERhdGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBjb252ZXJ0ZWQg
dG8gYSBxdWVyeSBzdHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdzIGFwcGVuZGVk
IHRvIHRoZSB1cmwgZm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9wdGlvbiB0byBw
cmV2ZW50IHRoaXMgYXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJlIEtleS9WYWx1
ZSBwYWlycy4gSWYgdmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVzIG11bHRpcGxl
IHZhbHVlcyB3aXRoIHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdHJhZGl0aW9u
YWwgc2V0dGluZyAoZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRhPzogYW55O1xu
ICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUgdGhlIHJhdyBy
ZXNwb25zZSBkYXRhIG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmlsdGVyaW5nIGZ1
bmN0aW9uIHRvIHNhbml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1cm4gdGhlIHNh
bml0aXplZCBkYXRhLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzOiBUaGUgcmF3
IGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBlJyBwYXJhbWV0
ZXIuXG4gICAgICovXG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFueSk6IGFueTtc
biAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4cGVjdGluZyBi
YWNrIGZyb20gdGhlIHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVyeSB3aWxsIHRy
eSB0byBpbmZlciBpdCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNwb25zZSAoYW4g
WE1MIE1JTUUgdHlwZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5aWVsZCBhIEph
dmFTY3JpcHQgb2JqZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0LCBh
bmQgYW55dGhpbmcgZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5cbiAgICAgKi9c
biAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJl
IGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRocmVl
IGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBv
YmplY3QsIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1cnJl
ZCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3VycmVkLiBQb3Nz
aWJsZSB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVsbCkgYXJlIFwi
dGltZW91dFwiLCBcImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJyb3JcIi4gV2hl
biBhbiBIVFRQIGVycm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhlIHRleHR1YWwg
cG9ydGlvbiBvZiB0aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRcIiBvciBcIklu
dGVybmFsIFNlcnZlciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJyb3Igc2V0dGlu
ZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJl
IGNhbGxlZCBpbiB0dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3IgY3Jv
c3MtZG9tYWluIHNjcmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3RzLiBUaGlzIGlz
IGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1ZXJ5WEhSLCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAg
ICAgKiBXaGV0aGVyIHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxlcnMgZm9yIHRo
aXMgcmVxdWVzdC4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRvIHByZXZlbnQg
dGhlIGdsb2JhbCBoYW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBmcm9tIGJlaW5n
IHRyaWdnZXJlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgQWpheCBFdmVu
dHMuXG4gICAgICovXG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbiBv
YmplY3Qgb2YgYWRkaXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNlbmQgYWxvbmcg
d2l0aCByZXF1ZXN0cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0LiBUaGUgaGVh
ZGVyIFgtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBhZGRlZCwgYnV0
IGl0cyBkZWZhdWx0IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGhlcmUuIFZh
bHVlcyBpbiB0aGUgaGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0dGVuIGZyb20g
d2l0aGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAg
ICAqL1xuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAg
ICAgKiBBbGxvdyB0aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIHJlc3Bv
bnNlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBieSBj
aGVja2luZyB0aGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUgaXMgZmFsc2Us
IGlnbm9yaW5nIHRoZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlxdWUgYWxzbyBj
aGVja3MgdGhlICdldGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRjaCB1bm1vZGlm
aWVkIGRhdGEuXG4gICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4gICAgLyoqXG4g
ICAgICogQWxsb3cgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2duaXplZCBhcyBc
ImxvY2FsLFwiIChlLmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkgZG9lcyBub3Qg
cmVjb2duaXplIGl0IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBwcm90b2NvbHMg
YXJlIGN1cnJlbnRseSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVuc2lvbiwgYW5k
IHdpZGdldC4gSWYgdGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlz
IHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLiAo
dmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJvb2xlYW47XG4g
ICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgaW4gYSBq
c29ucCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICdjYWxsYmFj
aycgaW4gdGhlICdjYWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgaW4gdGhlIHVy
bC4gU28ge2pzb25wOidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25KU09OUExvYWQ9
PycgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRpbmcgdGhlIGpz
b25wIG9wdGlvbiB0byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcgdGhlIFwiP2Nh
bGxiYWNrXCIgc3RyaW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2UgXCI9P1wiIGZv
ciB0cmFuc2Zvcm1hdGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28gZXhwbGljaXRs
eSBzZXQgdGhlIGpzb25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsganNvbnA6IGZh
bHNlLCBqc29ucENhbGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9cbiAgICBqc29u
cD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFjayBmdW5jdGlv
biBuYW1lIGZvciBhIEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3Rl
YWQgb2YgdGhlIHJhbmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGpRdWVyeS4g
SXQgaXMgcHJlZmVyYWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgYXMg
aXQnbGwgbWFrZSBpdCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQgcHJvdmlkZSBj
YWxsYmFja3MgYW5kIGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3BlY2lmeSB0aGUg
Y2FsbGJhY2sgd2hlbiB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIgY2FjaGluZyBv
ZiBHRVQgcmVxdWVzdHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1c2UgYSBmdW5j
dGlvbiBmb3IgdGhpcyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBvZiBqc29ucENh
bGxiYWNrIGlzIHNldCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uXG4gICAg
ICovXG4gICAganNvbnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIG1pbWUgdHlw
ZSB0byBvdmVycmlkZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxu
ICAgICAqL1xuICAgIG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgcGFzc3dv
cmQgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAg
YWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFzc3dvcmQ/OiBz
dHJpbmc7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQgaW4gdG8gdGhl
IGRhdGEgb3B0aW9uIGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5nIG90aGVyIHRo
YW4gYSBzdHJpbmcpIHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIGEgcXVl
cnkgc3RyaW5nLCBmaXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBcImFwcGxpY2F0
aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgRE9NRG9j
dW1lbnQsIG9yIG90aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0aW9uIHRvIGZh
bHNlLlxuICAgICAqL1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAg
KiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMgdXNlZCAoZS5n
LiwgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2NyaXB0XCIgZGF0
YVR5cGUgYW5kIFwiR0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIG9uIHRo
ZSBzY3JpcHQgdGFnIHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUgY2hhcmFjdGVy
IHNldCBvbiB0aGUgbG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBvbiB0aGUg
cmVtb3RlIHNjcmlwdC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3RyaW5nO1xuICAg
IC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5kIGZ1bmN0aW9u
cyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNwb25kaW5nIGNv
ZGUuIGYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2RlIGZ1bmN0aW9u
cyB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2s7IGlmIGl0
IHJlc3VsdHMgaW4gYW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0aGV5IHRha2Ug
dGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJzaW9uIGFkZGVk
OiAxLjUpXG4gICAgICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5nXTogYW55OyB9
O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1lbnRzOiBUaGUg
ZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhl
IGRhdGFUeXBlIHBhcmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3RhdHVzOyBhbmQg
dGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QuIEFzIG9m
IGpRdWVyeSAxLjUsIHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBm
dW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBh
biBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnksIHRleHRTdGF0
dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAgICAgKiBTZXQg
YSB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhpcyB3aWxsIG92
ZXJyaWRlIGFueSBnbG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgpLiBUaGUgdGlt
ZW91dCBwZXJpb2Qgc3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwgaXMgbWFkZTsg
aWYgc2V2ZXJhbCBvdGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBicm93c2Vy
IGhhcyBubyBjb25uZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHJlcXVl
c3QgdG8gdGltZSBvdXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkgMS40LnggYW5k
IGJlbG93LCB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4gaW52YWxpZCBz
dGF0ZSBpZiB0aGUgcmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2JqZWN0IG1lbWJl
cnMgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHksIHNjcmlwdCBh
bmQgSlNPTlAgcmVxdWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVvdXQ7IHRoZSBz
Y3JpcHQgd2lsbCBydW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1lb3V0IHBlcmlv
ZC5cbiAgICAgKi9cbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNldCB0
aGlzIHRvIHRydWUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBzdHlsZSBvZiBw
YXJhbSBzZXJpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzogYm9vbGVhbjtc
biAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwiUE9TVFwiIG9y
IFwiR0VUXCIpLCBkZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAgcmVxdWVzdCBt
ZXRob2RzLCBzdWNoIGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2VkIGhlcmUsIGJ1
dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAgKi9cbiAgICB0
eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVS
TCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVybD86IHN0cmlu
ZztcbiAgICAvKipcbiAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVx
dWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0
LlxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIENhbGxi
YWNrIGZvciBjcmVhdGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZhdWx0cyB0byB0
aGUgQWN0aXZlWE9iamVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0cFJlcXVlc3Qg
b3RoZXJ3aXNlLiBPdmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGZv
ciBYTUxIdHRwUmVxdWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3RvcnkuXG4gICAgICov
XG4gICAgeGhyPzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBmaWVsZE5hbWUt
ZmllbGRWYWx1ZSBwYWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0LiBGb3IgZXhh
bXBsZSwgeW91IGNhbiB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0cnVlIGZvciBj
cm9zcy1kb21haW4gcmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0aGUgd2l0aENy
ZWRlbnRpYWxzIHByb3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0aXZlIFhIUiBh
bmQgdGh1cyBDT1JTIHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUgdGhpcyBmbGFn
LiBGb3IgdGhpcyByZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41LjErIHNob3Vs
ZCB5b3UgcmVxdWlyZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAg
ICovXG4gICAgeGhyRmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5cbi8qXG4g
ICAgSW50ZXJmYWNlIGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVhI
UiBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xuICAgIG92ZXJy
aWRlTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChzdGF0dXNUZXh0
Pzogc3RyaW5nKTogdm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkg
Y2FsbGJhY2tcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFkZCguLi5jYWxs
YmFja3M6IGFueVtdKTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVtcHR5KCk6IGFu
eTtcbiAgICBmaXJlKC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmlyZWQoKTogYm9v
bGVhbjtcbiAgICBmaXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55O1xu
ICAgIGhhcyhjYWxsYmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFueTtcbiAgICBs
b2NrZWQoKTogYm9vbGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtc
bn1cblxuLypcbiAgICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Agd2l0aCBub24t
alF1ZXJ5IHByb21pc2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+IHtc
biAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFz
b246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86
IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9
PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAg
IHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+
LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBK
UXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBK
UXVlcnkgcHJvbWlzZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5UHJv
bWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdh
eXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUo
Li4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZh
aWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJv
Z3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBhbHdheXMoLi4u
YWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5k
b25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWls
Q2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJv
Z3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIC8vIERlcHJl
Y2F0ZWQgLSBnaXZlbiBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzogKHg6IGFueSkg
PT4gYW55LCBmYWlsRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0ZpbHRlcj86ICh4
OiBhbnkpID0+IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48VT4ob25GdWxm
aWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBV
LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJv
bWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJv
Z3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+
O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4u
LnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86
ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4s
IG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxV
Piwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVBy
b21pc2U8VT47XG5cbiAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNrXG4gICAgdGhl
bjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5y
ZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10p
ID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52
YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4u
cmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtd
KSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4u
dmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlb
XSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4u
LnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICgu
Li5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/
OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xufVxu
XG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFydCBvZiBjYWxs
YmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQcm9t
aXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5
cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUo
Li4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5m
YWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5w
cm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBhbHdheXMo
Li4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUo
Li4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4u
LmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3Mo
Li4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBu
b3RpZnkoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBub3RpZnlXaXRo
KGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAg
IHJlamVjdCguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlamVjdFdp
dGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4g
ICAgcmVzb2x2ZSh2YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlKC4uLmFy
Z3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgoY29udGV4dDog
YW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0YXRlKCk6IHN0
cmluZztcblxuICAgIHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbn1c
blxuLypcbiAgICBJbnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2YgdGhlIFczQyBl
dmVudCBvYmplY3RcbiovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5k
cyBFdmVudCB7XG4gICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBFbGVtZW50O1xu
ICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRpYXRlUHJvcG9n
YXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9v
bGVhbjtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVsdCgpOiBhbnk7
XG4gICAgcmVsYXRlZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtcbiAgICBzdG9w
SW1tZWRpYXRlUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb24oKTogdm9p
ZDtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgd2hpY2g6IG51
bWJlcjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5SW5wdXRF
dmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgYWx0S2V5OiBi
b29sZWFuO1xuICAgIGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbiAg
ICBzaGlmdEtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246IG51bWJlcjtc
biAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIG9mZnNldFg6
IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBw
YWdlWTogbnVtYmVyO1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5ZOiBudW1iZXI7
XG59XG5cbmludGVyZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0
RXZlbnRPYmplY3Qge1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVtYmVyO1xuICAg
IGtleTogYW55O1xuICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBv
cFN0YXRlRXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAgIG9y
aWdpbmFsRXZlbnQ6IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVlcnlFdmVudE9i
amVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRFdmVudE9iamVj
dCwgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3QsIEpRdWVyeVBv
cFN0YXRlRXZlbnRPYmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2YgcHJvcGVydGll
cyBvZiB0aGUgY3VycmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5U3VwcG9ydCB7
XG4gICAgYWpheD86IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xuICAgIGNoYW5n
ZUJ1YmJsZXM/OiBib29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xuICAgIGNoZWNr
T24/OiBib29sZWFuO1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0PzogYm9vbGVh
bjtcbiAgICBocmVmTm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlhbGl6ZT86IGJv
b2xlYW47XG4gICAgbGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVDaGVj
a2VkPzogYm9vbGVhbjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAgIG9wYWNpdHk/
OiBib29sZWFuO1xuICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRTZWxlY3RlZD86
IGJvb2xlYW47XG4gICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5bGU/OiBib29s
ZWFuO1xuICAgIHN1Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5PzogYm9vbGVhbjtc
bn1cblxuaW50ZXJmYWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBzdHJpbmc7XG4g
ICAgKG9iajogYW55LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1cblxuLyoqXG4g
KiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMgKHdpdGggJC5F
dmVudCkuIEl0IGlzXG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBpbmxpbmUgaW4g
SlF1ZXJ5U3RhdGljIHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1Y3Rpb24gZnVu
Y3Rpb24gd2l0aCBzcGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lmaWMgZXZlbnQg
b2JqZWN0cy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ige1xuICAgIChu
YW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xu
ICAgIG5ldyAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVu
dE9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3BlY2lmeSBlYXNp
bmcgZnVuY3Rpb25zLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAgICBsaW5lYXIo
cDogbnVtYmVyKTogbnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJlcjtcbn1cblxu
LypcbiAgICBTdGF0aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5kIGpRdWVyeSB0
aGVtc2VsdmVzKVxuKi9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAgLyoqXG4gICAg
ICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25m
aWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZh
dWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAq
L1xuICAgIGFqYXgoc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcbiAg
ICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwg
dG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBz
ZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFs
bCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0
aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDogc3RyaW5nLCBz
ZXR0aW5ncz86IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAg
ICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25z
IGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3Nl
ZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMgQW4gb3B0aW9u
YWwgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGRhdGFUeXBl
c1xuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMg
Zm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoZGF0
YVR5cGVzOiBzdHJpbmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5
QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuICAgIC8qKlxu
ICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRp
b25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nl
c3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxl
ciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAq
L1xuICAgIGFqYXhQcmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBK
UXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG5cbiAg
ICBhamF4U2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipcbiAgICAgICog
U2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRzIHVzZSBpcyBu
b3QgcmVjb21tZW5kZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0IG9m
IGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4IHJlcXVlc3Qu
IEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNldHVwKG9wdGlv
bnM6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRh
dGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSBy
ZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlv
biB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJh
bSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVm
YXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAg
ICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcp
OiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8g
dGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5c
biAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRo
ZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwg
b3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBz
dWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhS
KSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAq
IExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hp
Y2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVj
dCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5c
biAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0
ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0
eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2Vu
dCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1
cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0
dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6
IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20g
dGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBp
cyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBp
cyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09O
KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBq
cVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9h
ZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBs
YWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUg
cmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQg
aXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNP
Tih1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAg
IC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5n
IGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUg
c2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAg
ICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAo
ZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6
IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBmaWxlIGZyb20g
dGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0ZSBpdC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdo
aWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAg
ICAqL1xuICAgIGdldFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3JpcHQ6IHN0cmlu
ZywgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlY
SFI7XG5cbiAgICBwYXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRh
dGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUg
cmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYg
ZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAg
ICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2Vy
dmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQs
IGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTog
YW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5
cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20g
dGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3Qg
aXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhh
dCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJl
IG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBk
YXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3Mg
KHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDog
c3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1
ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcg
YSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUg
c2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1
aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2Fz
ZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9t
IHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlw
dCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IHN0
cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpR
dWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcblxuICAgIC8q
KlxuICAgICAqIEEgbXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3QgdGhhdCBwcm92
aWRlcyBhIHBvd2VyZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgZmxh
Z3MgdGhhdCBjaGFuZ2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4gICAgICovXG4g
ICAgQ2FsbGJhY2tzKGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5cbiAgICAvKipc
biAgICAgKiBIb2xkcyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVyeSdzIHJlYWR5
IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdoZXRoZXIgdGhl
IHJlYWR5IGhvbGQgaXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAgICovXG4gICAg
aG9sZFJlYWR5KGhvbGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9yOiBzdHJpbmcs
IGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBKUXVlcnk7
XG4gICAgKG9iamVjdDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtd
KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAoZnVuYzogRnVu
Y3Rpb24pOiBKUXVlcnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAgICAoKTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250cm9sIG9mIHRo
ZSAkIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBBIEJvb2xlYW4g
aW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxlcyBmcm9tIHRo
ZSBnbG9iYWwgc2NvcGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAgKi9cbiAgICBu
b0NvbmZsaWN0KHJlbW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAvKipcbiAgICAg
KiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBv
bmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNl
bnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMg
T25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3Rz
LlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5lcmljUHJvbWlz
ZTxUPltdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdh
eSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmpl
Y3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3Vz
IGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVm
ZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAg
IHdoZW48VD4oLi4uZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxu
ICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2Vk
IG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJl
cHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVy
cmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9i
amVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtdKTogSlF1ZXJ5
UHJvbWlzZTxUPjtcblxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAg
ICBjc3NOdW1iZXI6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0cmFyeSBkYXRh
IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMgdGhlIHZhbHVl
IHRoYXQgd2FzIHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxl
bWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3Ry
aW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBhcmFtIHZhbHVl
IFRoZSBuZXcgZGF0YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1lbnQ6IEVsZW1l
bnQsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2
YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVy
eS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3Ig
dGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1l
bnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmlu
ZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAgIGRhdGEoZWxl
bWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJu
cyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpR
dWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBm
b3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVs
ZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YShlbGVt
ZW50OiBFbGVtZW50KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1
ZU5hbWU/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBi
b29sZWFuO1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5n
KTogYW55W107XG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcs
IG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShlbGVt
ZW50OiBFbGVtZW50LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRc
biAgICBEZWZlcnJlZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5RGVmZXJyZWQ8
VD4pID0+IGFueSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGZ4
OiB7IHRpY2s6ICgpID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgpID0+IHZvaWQ7
IHNwZWVkczogeyBzbG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBib29sZWFuOyBz
dGVwOiBhbnk7IH07XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4uLmFyZ3M6IGFu
eVtdKSA9PiBhbnksIGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgcHJv
eHkoY29udGV4dDogYW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuXG4g
ICAgRXZlbnQ6IEpRdWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAg
ICBlcnJvcihtZXNzYWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3VzXG4g
ICAgZXhwcjogYW55O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cgd2Ugd2FudCB0
byB0eXBlIHRoaXNcbiAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGllc1xu
ICAgIHN1cHBvcnQ6IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBjb250
YWlucyhjb250YWluZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJvb2xlYW47XG5c
biAgICBlYWNoKGNvbGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IGFueSwg
dmFsdWVPZkVsZW1lbnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29sbGVjdGlvbjog
SlF1ZXJ5LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDog
SFRNTEVsZW1lbnQpID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rpb246IFRbXSwg
Y2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IFQpID0+IGFu
eSk6IGFueTtcblxuICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7
XG4gICAgZXh0ZW5kKGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6
IGFueTtcblxuICAgIGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4gICAgZ3JlcDxU
PihhcnJheTogVFtdLCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTogbnVt
YmVyKSA9PiBib29sZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAgaW5BcnJheTxU
Pih2YWx1ZTogVCwgYXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xuXG4g
ICAgaXNBcnJheShvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVjdChvYmo6IGFu
eSk6IGJvb2xlYW47XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNO
dW1lcmljKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qob2JqOiBhbnkp
OiBib29sZWFuO1xuICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1hNTERv
Yyhub2RlOiBOb2RlKTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFueSk6IGFueVtd
O1xuXG4gICAgbWFwPFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6
IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChhcnJheTogYW55
LCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTogYW55KSA9PiBh
bnkpOiBhbnk7XG5cbiAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRbXSk6IFRbXTtc
biAgICBtZXJnZTxULFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107XG5cbiAgICBu
b29wKCk6IGFueTtcblxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpTT04oanNvbjog
c3RyaW5nKTogYW55O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4g
WE1MIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwtZm9ybWVkIFhN
TCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0YTogc3RyaW5n
KTogWE1MRG9jdW1lbnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6
IHN0cmluZywgbmV3UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShzdHI6IHN0cmlu
Zyk6IHN0cmluZztcblxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAgICB1bmlxdWUo
YXJyOiBhbnlbXSk6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGlu
dG8gYW4gYXJyYXkgb2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgSFRN
TCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9NIGVsZW1lbnQg
dG8gc2VydmUgYXMgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21lbnQgd2lsbCBi
ZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBpbmRpY2F0aW5n
IHdoZXRoZXIgdG8gaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBzdHJpbmdcbiAg
ICAgKi9cbiAgICBwYXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRNTEVsZW1lbnQs
IGtlZXBTY3JpcHRzPzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9uKGVsZW06IGFu
eSwgcHJvcGVydGllczogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBlYXNpbmc6IEpR
dWVyeUVhc2luZztcbn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1lbWJlcnNcbiov
XG5pbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBsZXRlKGhhbmRs
ZXI6IGFueSk6IEpRdWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpx
WEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFNlbmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdz
OiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0YXJ0KGhh
bmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVyOiAoKSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhS
OiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICBsb2FkKHVybDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFueSk6IEpRdWVy
eTtcblxuICAgIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJyYXkoKTogYW55
W107XG5cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lczogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJyZW50Q2xhc3M6
IGFueSkgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5qcXVlcnkuY29t
L2FkZEJhY2svXG4gICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuXG4g
ICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0cihhdHRyaWJ1
dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihhdHRyaWJ1dGVO
YW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcbiAgICBhdHRyKG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3MoY2xhc3NOYW1l
OiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAgaHRtbChodG1s
U3RyaW5nOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDogKGluZGV4OiBu
dW1iZXIsIG9sZGh0bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwob2Jq
OiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55
O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4g
ICAgcHJvcChtYXA6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5n
LCBmdW5jOiAoaW5kZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICByZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxu
ICAgIHJlbW92ZUNsYXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAgICByZW1vdmVD
bGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IHJlbW92ZVByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b2dnbGVD
bGFzcyhjbGFzc05hbWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRv
Z2dsZUNsYXNzKHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhmdW5j
OiAoaW5kZXg6IGFueSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIHZhbCgpOiBhbnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAgICB2
YWwodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcbiAgICB2YWwoZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJvcGVydGllcyBm
b3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5cbiAgICAgKi9c
biAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICog
U2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5
IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVy
dHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGll
cyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFt
IHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBB
IHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0
eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBT
ZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVt
ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkg
bmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0
eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmdb
XSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRp
ZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUg
QSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVy
dHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZh
bHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5k
ZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBh
cyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1
ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQg
b2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUg
QSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1
cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNl
aXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhl
IG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTog
c3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IG51bWJlcik6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMg
Zm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBw
cm9wZXJ0aWVzIEFuIG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBzZXQuXG4gICAg
ICovXG4gICAgY3NzKHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAgIGhlaWdodCgp
OiBudW1iZXI7XG4gICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgaGVpZ2h0
KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRleDogYW55LCBo
ZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQoKTogbnVtYmVy
O1xuICAgIGlubmVySGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBpbm5lcldp
ZHRoKCk6IG51bWJlcjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5c
biAgICBvZmZzZXQoKTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xuICAgIG9mZnNl
dChjb29yZGluYXRlczogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAoaW5kZXg6IGFu
eSwgY29vcmRzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVpZ2h0KGluY2x1
ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZhbHVlOiBudW1i
ZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0aChp
bmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoKHZhbHVlOiBu
dW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgcG9zaXRpb24o
KTogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xsTGVmdCgpOiBu
dW1iZXI7XG4gICAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgc2Ny
b2xsVG9wKCk6IG51bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6IEpRdWVyeTtc
blxuICAgIHdpZHRoKCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5
O1xuICAgIHdpZHRoKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgoZnVuYzogKGlu
ZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEYXRhXG4g
ICAgY2xlYXJRdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBkYXRhKGtl
eTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7IFtrZXk6IHN0
cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxu
ICAgIGRlcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0
YShuYW1lT3JMaXN0PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBwcm9t
aXNlKHR5cGU/OiBhbnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAg
IC8vIEVmZmVjdHNcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnks
IGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBh
bnksIGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzogRnVuY3Rpb24p
OiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IHsgZHVyYXRp
b24/OiBhbnk7IGVhc2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsgc3RlcD86IEZ1
bmN0aW9uOyBxdWV1ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0pOiBKUXVlcnk7
XG5cbiAgICBkZWxheShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVl
cnk7XG5cbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86
IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzog
YW55KTogSlF1ZXJ5O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmlu
ZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwg
b3BhY2l0eTogbnVtYmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG8oZHVy
YXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzog
YW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzog
c3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgpOiBKUXVlcnk7
XG5cbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAg
ICBoaWRlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTog
SlF1ZXJ5O1xuXG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86
IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dnbGUoZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9nZ2xlKGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAg
c2xpZGVVcChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcblxuICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJv
b2xlYW4pOiBKUXVlcnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1ZT86IGJvb2xl
YW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUoZHVyYXRpb24/
OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFu
eSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUo
c2hvd09ySGlkZTogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xuICAgIGJpbmQo
ZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50VHlw
ZTogc3RyaW5nLCBldmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVy
eTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTog
SlF1ZXJ5O1xuICAgIGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIGJsdXIo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIGJsdXIoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dl
ciB0aGUgXCJjaGFuZ2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNoYW5n
ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgY2hhbmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwiY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNs
aWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1l
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVudERhdGE/OiBh
bnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywg
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86IGFueSwgaGFu
ZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c2lu
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIGZvY3VzaW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGZvY3VzaW4oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50RGF0YTogT2Jq
ZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0aGUgbWF0Y2hl
ZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMg
YW5kIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlcklu
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyB0aGUg
ZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgbW91c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAg
aG92ZXIoaGFuZGxlckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnks
IGhhbmRsZXJPdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8gdGhlIG1hdGNo
ZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJz
IG9yIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlcklu
T3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBv
ciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluT3V0OiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50Llxu
ICAgICAqL1xuICAgIGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwiXCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVzc1wiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFT
Y3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBr
ZXlwcmVzcyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtl
eXByZXNzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIg
dGhlIFwia2V5dXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXVwKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
a2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAga2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBrZXl1cChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWVudGVyXCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0
aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIG1vdXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZl
cyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZWxlYXZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBi
ZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbW91c2VsZWF2ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICov
XG4gICAgbW91c2Vtb3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRhOiBPYmplY3Qs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91dFwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
b3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0
KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhl
IFwibW91c2VvdmVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW92
ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlN
b3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEphdmFT
Y3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRhOiBPYmplY3Qs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICovXG4gICAgb2ZmKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQg
aGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Ut
c2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5h
bWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIu
bXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91
bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGlu
ZyBldmVudCBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rp
b24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2
YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yPzog
c3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZl
bnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3Vj
aCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFj
aGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAq
L1xuICAgIG9mZihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBl
dmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qgd2hl
cmUgdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJl
c2VudCBoYW5kbGVyIGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQo
cykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNo
IHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQg
aGFuZGxlcnMuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7
IH0sIHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNo
IGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUg
c2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBt
b3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywg
c3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBm
dW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJhbWV0ZXIgYXJn
cyBpcyBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRyaWdnZXIoKS4g
Tm90ZSB0aGF0IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFuZGxlciBmdW5j
dGlvbiBtdXN0IGJlIG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAgICAqL1xuICAg
IG9uKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0
dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8g
dGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUg
b3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFj
ZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBw
YXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRz
IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUg
c2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJl
ZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4g
VGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5j
dGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVu
dHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBh
biBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNl
bGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9y
ZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1
Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBz
ZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRo
ZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0
b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVu
IGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0
YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBh
bGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0
dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3Ry
aW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxl
ciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBz
dHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBo
YW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBw
YXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRz
IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYg
dGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNh
bGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFt
IGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVu
IGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tleTogc3RyaW5n
XTogYW55OyB9LCBzZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4g
VGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVu
dCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5n
IG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9y
IFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBB
dHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVy
IGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9y
ZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxc
IiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywg
ZGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFu
IGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qg
b25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25h
bCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5c
biAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBk
ZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVu
dC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5
cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQg
Zm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4g
ICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFu
ZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRl
ZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIg
b3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0
b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1l
bnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9t
aXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUg
c2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0
byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9y
dGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAg
ICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBhbnks
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRo
ZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVt
ZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmpl
Y3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1z
ZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFs
dWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZl
bnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRl
ciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxs
IHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFu
ZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVu
dC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBp
biBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uZShldmVu
dHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywgZGF0YT86IGFu
eSk6IEpRdWVyeTtcblxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlzIHJlYWR5Llxu
ICAgICAqL1xuICAgIHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAg
ICAqL1xuICAgIHJlc2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3Jp
cHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3QoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChldmVudERhdGE6
IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJtaXRcIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJt
aXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJt
aXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJh
UGFyYW1ldGVyczogYW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDogSlF1ZXJ5RXZl
bnRPYmplY3QpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5cGU6IHN0cmlu
ZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVuYmluZChldmVu
dFR5cGU/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBmbHM6IGJv
b2xlYW4pOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgdW5k
ZWxlZ2F0ZSgpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5
cGU6IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50czogYW55
KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICB1bmxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBJ
bnRlcm5hbHNcbiAgICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3RyaW5nO1xuXG4g
ICAgZXJyb3IoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwdXNoU3RhY2so
ZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10s
IG5hbWU6IGFueSwgYXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNYW5pcHVsYXRp
b25cbiAgICBhZnRlciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZnRlcihmdW5j
OiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4uLmNvbnRlbnQ6
IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtc
blxuICAgIGJlZm9yZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBiZWZvcmUoZnVu
YzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdpdGhEYXRhQW5k
RXZlbnRzPzogYm9vbGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbik6IEpRdWVy
eTtcblxuICAgIGRldGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGVtcHR5KCk6
IEpRdWVyeTtcblxuICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuICAgIGlu
c2VydEJlZm9yZSh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQoLi4uY29udGVu
dDogYW55W10pOiBKUXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICByZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNl
QWxsKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVuYzogYW55KTog
SlF1ZXJ5O1xuXG4gICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiBhbnkp
OiBKUXVlcnk7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwgdGV4dDogc3Ry
aW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtdO1xuXG4gICAg
dW53cmFwKCk6IEpRdWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVl
cnk7XG4gICAgd3JhcChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
d3JhcEFsbCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBJbm5lcih3
cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVuYzogKGluZGV4
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBlYWNo
KGZ1bmM6IChpbmRleDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBnZXQoaW5kZXg/OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1iZXI7XG4gICAg
aW5kZXgoc2VsZWN0b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVtZW50OiBhbnkp
OiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAg
c2VsZWN0b3I6IHN0cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4OiBudW1iZXJd
OiBIVE1MRWxlbWVudDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2VsZWN0b3I6IHN0
cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVudHM6IGFueVtd
KTogSlF1ZXJ5O1xuICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkKG9iajog
SlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChz
ZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAgICBjbG9zZXN0
KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55KTogSlF1ZXJ5
O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50KTogYW55W107
XG5cbiAgICBjb250ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5O1xuXG4gICAg
ZXEoaW5kZXg6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rvcjogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIGZpbHRlcihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKG9iajogSlF1
ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAg
IGZpbmQoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVlcnkpOiBKUXVl
cnk7XG5cbiAgICBmaXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6IHN0cmluZyk6
IEpRdWVyeTtcbiAgICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xuXG4gICAgaXMo
c2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4OiBhbnkpID0+
IGFueSk6IGJvb2xlYW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtcbiAgICBpcyhv
Ymo6IEpRdWVyeSk6IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxuICAgIG1hcChj
YWxsYmFjazogKGluZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIG5leHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0QWxs
KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNlbGVjdG9yPzog
c3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKGVsZW1lbnQ/
OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKG9iaj86
IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNlbGVjdG9yOiBz
dHJpbmcpOiBKUXVlcnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgbm90KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2JqOiBKUXVlcnkp
OiBKUXVlcnk7XG5cbiAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50KHNl
bGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rvcj86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVy
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50PzogRWxlbWVudCwg
ZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/OiBKUXVlcnks
IGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4g
ICAgcHJldlVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgcHJldlVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgcHJldlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5
O1xuXG4gICAgc2libGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzbGlj
ZShzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAvLyBVdGlsaXRp
ZXNcblxuICAgIHF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKHF1
ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbiAgICBx
dWV1ZShuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xhcmUgbW9kdWxl
IFwianF1ZXJ5XCIge1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBqUXVlcnk6IEpR
dWVyeVN0YXRpYztcbmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxpYnMvYW5ndWxh
ci9hbmd1bGFyLmQudHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIgSlMgMS4wXG4v
LyBQcm9qZWN0OiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMgYnk6IERpZWdv
IFZpbGFyIDxodHRwOi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5pdGlvbnM6IGh0
dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuXG5cbmRlY2xh
cmUgdmFyIGFuZ3VsYXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0IGZvciBwYWlu
bGVzcyBkZXBlbmRlbmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAkaW5q
ZWN0OnN0cmluZ1tdO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBuZyBtb2R1bGUg
KGFuZ3VsYXIuanMpXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1vZHVsZSBuZyB7
XG5cbiAgICAvLyBBbGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNlXG4g
ICAgaW50ZXJmYWNlIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBhbnk7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRpY1xuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQoY29udGV4dDog
YW55LCBmbjogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4gICAgICAgIGJv
b3RzdHJhcChlbGVtZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9y
U2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9kdWxlcz86IGFu
eVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDog
RWxlbWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAg
ICBib290c3RyYXAoZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUlu
amVjdG9yU2VydmljZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGluYXRpb24/OiBh
bnkpOiBhbnk7XG4gICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0aWM7XG4gICAg
ICAgIGVxdWFscyh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBl
eHRlbmQoZGVzdGluYXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7XG4gICAgICAg
IGZvckVhY2gob2JqOiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IGFu
eSwgY29udGV4dD86IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjogc3RyaW5nKTog
YW55O1xuICAgICAgICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAgIGluamVjdG9y
KG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgaXNBcnJh
eSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBhbnkpOiBib29s
ZWFuO1xuICAgICAgICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlz
RWxlbWVudCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlvbih2YWx1ZTog
YW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1N0cmluZyh2
YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6IGFueSk6IGJv
b2xlYW47XG4gICAgICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAg
LyoqIGNvbnN0cnVjdCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZpY2lhbCBkb2Nz
OiBJbnRlcmZhY2UgZm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0XHRzZWU6IGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0Ki9cbiAgICAg
ICAgbW9kdWxlKFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUgeW91IHdhbnQg
dG8gY3JlYXRlICovXG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAvKiog
bmFtZSBvZiBtb2R1bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAgIHJlcXVpcmVz
Pzogc3RyaW5nW10sXG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6IElNb2R1bGU7
XG4gICAgICAgIG5vb3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0b0pzb24ob2Jq
OiBhbnksIHByZXR0eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVyY2FzZShzdHI6
IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgZnVsbDog
c3RyaW5nO1xuICAgICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbm9yOiBu
dW1iZXI7XG4gICAgICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNvZGVuYW1lOiBz
dHJpbmc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gTW9kdWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3Vs
YXIuTW9kdWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElNb2R1bGUg
e1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0b3J5OiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGlubGluZUFu
bm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihvYmpl
Y3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2Vy
dmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMg
dG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZp
Zyhjb25maWdGbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4
aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdo
aWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAg
ICAgICBjb25maWcoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAg
ICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAg
ICAgY29uc3RhbnQob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVy
KG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1
Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVjdCA6IE9iamVj
dCk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZh
Y3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmlu
ZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZGly
ZWN0aXZlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1lOiBz
dHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAg
ICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6
IElNb2R1bGU7XG4gICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAg
ICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9u
KTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVk
RnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVjdDogT2JqZWN0
KTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlk
ZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1l
OiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4g
ICAgICAgIHByb3ZpZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGlu
aXRpYWxpemF0aW9uRnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGlu
bGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2Uo
bmFtZTogc3RyaW5nLCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAg
ICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBh
bnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxl
O1xuICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAg
ICAgICB2YWx1ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAgLy8gUHJvcGVy
dGllc1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBzdHJpbmdbXTtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlLmRpcmVjdGl2
ZS5BdHRyaWJ1dGVzXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdHRy
aWJ1dGVzIHtcblx0Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhl
IHNjb3BlZCBhdHRyaWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8gYmVjYXVzZSB5
b3UgaGF2ZSB0byB1c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9vIGJ1dCBJIGRv
bid0IGtub3cgb2YgYSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBsaW1p
dGVkIHRvIHJldHVybiBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVtOiBodHRwOi8v
c3RhY2tvdmVyZmxvdy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0cmluZ106IGFu
eTtcblxuICAgICAgICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRo
ZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1h
dGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWRcbiAg
ICAgICAgLy8gZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENsYXNzKGNsYXNz
VmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENTUyBjbGFzcyB2
YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZVxuICAgICAg
ICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9u
IHdpbGwgYmUgdHJpZ2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVtb3ZhbC5cbiAg
ICAgICAgJHJlbW92ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8v
IFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQoa2V5OiBzdHJp
bmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFuIGludGVycG9s
YXRlZCBhdHRyaWJ1dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxsIGJl
IGludm9rZWQgb25jZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAvLyBmb2xsb3dp
bmcgY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIgdGhl
XG4gICAgICAgIC8vIGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAkb2JzZXJ2
ZShuYW1lOiBzdHJpbmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247XG5cbiAgICAg
ICAgLy8gQSBtYXAgb2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3JtYWxp
emVkIG5hbWUuIFRoaXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVyc2UgbG9va3Vw
IGZyb20gbm9ybWFsaXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAgICAgICRhdHRy
OiBPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRm9ybUNv
bnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGly
ZWN0aXZlOmZvcm0uRm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUZvcm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xu
ICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAg
ICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkYWRk
Q29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAk
cmVtb3ZlQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAg
ICAgICAkc2V0RGlydHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6IHZvaWQ7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENvbnRyb2xsZXJc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOm5n
TW9kZWwuTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSU5nTW9kZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2b2lkO1xuICAg
ICAgICAkc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlzVmFsaWQ6IGJv
b2xlYW4pOiB2b2lkO1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2aWV3VmFsdWUg
YW5kIG1vZGVsVmFsdWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAgIC8vIHR5cGVz
IGRvIHdvcmsgYW5kIGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAkc2V0Vmlld1Zh
bHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7XG5cbiAgICAg
ICAgJG1vZGVsVmFsdWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVsUGFyc2VyW107
XG4gICAgICAgICRmb3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAgICAgJGVycm9y
OiBhbnk7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29s
ZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFu
O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAgICAodmFsdWU6
IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0dGVyIHtcbiAg
ICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gU2NvcGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJHJvb3RTY29wZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJU2NvcGUge1xuICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiBz
dHJpbmcpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3BlKSA9PiBhbnkp
OiBhbnk7XG5cbiAgICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtd
KTogSUFuZ3VsYXJFdmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAgICAgICAgJGRp
Z2VzdCgpOiB2b2lkO1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtd
KTogSUFuZ3VsYXJFdmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlz
IG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAg
ICRldmFsKGV4cHJlc3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtcbiAgICAgICAg
JGV2YWwoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86IE9iamVjdCk6
IGFueTtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBi
dXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsQXN5bmMo
ZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9u
OiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBEZWZhdWx0cyB0
byBmYWxzZSBieSB0aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lcbiAgICAgICAg
JG5ldyhpc29sYXRlPzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24obmFtZTogc3Ry
aW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBhbnlbXSkgPT4g
YW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5n
LCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247
XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiAobmV3
VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RF
cXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVz
c2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVx
dWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNz
aW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBv
bGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9v
bGVhbik6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNz
aW9uOiBzdHJpbmcsIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2Nv
cGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24o
d2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcjogKG5ld1Zh
bHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9u
O1xuXG4gICAgICAgICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51bWJlcjtcblxu
ICAgICAgICAvLyBIaWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5kaW5nczogYW55
O1xuICAgICAgICAkJHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmd1bGFy
RXZlbnQge1xuICAgICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBjdXJyZW50U2Nv
cGU6IElTY29wZTtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2ZW50RGVmYXVs
dDogRnVuY3Rpb247XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAg
ICAgLy8gQXZhaWxhYmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRcbiAgICAgICAg
c3RvcFByb3BhZ2F0aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gV2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElXaW5kb3dTZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1bWVudGVkLCBz
byB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwg
ZGVsYXk/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4g
ICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xuICAgICAgICAo
ZnVuYzogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBpbnZva2VBcHBs
eT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVBy
b21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gRmlsdGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kZmlsdGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRmaWx0ZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJRmlsdGVyU2VydmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbjtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92
aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeTogRnVu
Y3Rpb24pOiBJU2VydmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIExvY2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJTG9jYWxlU2VydmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgICAgLy8gVGhl
c2UgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIncyBpMThuIGZp
bGVzIGZvciBleGVtcGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2FsZU51bWJlckZv
cm1hdERlc2NyaXB0b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2NhbGVEYXRlVGlt
ZUZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55KSA9PiBzdHJp
bmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9y
IHtcbiAgICAgICAgREVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBfU0VQOiBzdHJp
bmc7XG4gICAgICAgIFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3JbXTtc
biAgICAgICAgQ1VSUkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElM
b2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDogbnVtYmVyO1xu
ICAgICAgICBtaW5GcmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJlcjtcbiAgICAg
ICAgcG9zUHJlOiBzdHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAgICAgICBuZWdQ
cmU6IHN0cmluZztcbiAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdTaXplOiBudW1i
ZXI7XG4gICAgICAgIGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9j
YWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0cmluZ1tdO1xu
ICAgICAgICBTSE9SVE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJpbmdbXTtcbiAg
ICAgICAgU0hPUlREQVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5nW107XG4gICAg
ICAgIG1lZGl1bTogc3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAgICAgICBmdWxs
RGF0ZTogc3RyaW5nO1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1E
YXRlOiBzdHJpbmc7XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1U
aW1lOiBzdHJpbmc7XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2FsbDtcbiAgICAg
ICAgZXJyb3I6IElMb2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAgICAgICAgbG9n
OiBJTG9nQ2FsbDtcbiAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4gICAgLy8gV2Ug
ZGVmaW5lIHRoaXMgYXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9wZW4gaXQgbGF0
ZXIgZm9yXG4gICAgLy8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNlIElMb2dDYWxs
IHtcbiAgICAgICAgKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElQYXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjogc3RyaW5nKTog
SUNvbXBpbGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVkRXhw
cmVzc2lvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcblxu
ICAgICAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBpcyBnb25uYSBi
ZSB1c2VkIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCBjaGVj
ayB0aGUgcGFyYW1ldGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0ZW5jeS4gSWYg
Y29uc3VtZXJcbiAgICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNzIHRoZSB1bmRl
ZmluZWQgdmFsdWUgZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6IGFueSwgdmFs
dWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBM
b2NhdGlvblNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJGxvY2F0aW9uXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRsb2NhdGlvblByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
Z3VpZGUvZGV2X2d1aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJzVXJsKCk6IHN0
cmluZztcbiAgICAgICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3SGFzaDogc3Ry
aW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7XG4gICAgICAg
IHBhdGgoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6IElMb2NhdGlv
blNlcnZpY2U7XG4gICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90b2NvbCgpOiBz
dHJpbmc7XG4gICAgICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2Vh
cmNoKCk6IGFueTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6IElMb2NhdGlv
blNlcnZpY2U7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFyYW1ldGVyVmFs
dWU6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJpbmc7XG4gICAg
ICAgIHVybCh1cmw6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElMb2NhdGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIGhhc2hQcmVmaXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHByZWZpeDogc3Ry
aW5nKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBib29sZWFuO1xu
XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVyIGlzIHN0cmlu
ZywgYnV0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJvb2xlYW4sIHdo
aWNoIG1ha2VzIG1vcmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHRvZ2dsZXJc
biAgICAgICAgaHRtbDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblByb3ZpZGVyO1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50U2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9jdW1lbnRcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2VydmljZSBleHRl
bmRzIERvY3VtZW50IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFeGNlcHRp
b25IYW5kbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kZXhjZXB0aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJRXhjZXB0aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0aW9uOiBFcnJv
ciwgY2F1c2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFJvb3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7fVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSVFTZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJvbWlzZTxhbnk+
W10pOiBJUHJvbWlzZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZlcnJlZDxUPjtc
biAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xuICAgICAgICB3
aGVuPFQ+KHZhbHVlOiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElQ
cm9taXNlPFQ+IHtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9t
aXNlVmFsdWU6IFQpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChy
ZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkp
OiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJh
Y2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNr
PzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+
IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3ND
YWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChy
ZWFzb246IGFueSkgPT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4g
YW55KTogSVByb21pc2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJl
amVjdGVkOiAocmVhc29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNl
PFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBh
bnkpID0+IElQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNh
dGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCk6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxseUNhbGxiYWNr
OiAoKT0+YW55KTpJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSURl
ZmVycmVkPFQ+IHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xuICAgICAgICBy
ZWplY3QocmVhc29uPzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRlPzphbnkpOiB2
b2lkO1xuICAgICAgICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xuICAgICAgICAo
KTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFByb3ZpZGVyIGV4
dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Nyb2xsaW5nKCk6
IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ2FjaGVGYWN0
b3J5U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
Y2FjaGVGYWN0b3J5XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDYWNo
ZUZhY3RvcnlTZXJ2aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUgb3B0aW9uc01h
cCB0byBoYXZlIHRoZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGl0
J3MgdGhlIE9OTFkgb3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvZGF5
LCBhIGNvbnN1bWVyXG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGFzc29jaWF0
ZSBzb21lIG90aGVyIG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgICAgLy8oY2Fj
aGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogQ2FjaGVP
YmplY3Q7XG4gICAgICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5
OiBudW1iZXI7IH0pOiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9kcyBiZWxsb3cg
YXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAgICBnZXQgKGNh
Y2hlSWQ6IHN0cmluZyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNh
Y2hlT2JqZWN0IHtcbiAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xu
ICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3QgZ2FyYW50ZWVk
IHRvIGhhdmUsIHNpbmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAgICAgICAgICAg
Ly9jYXBhY2l0eTogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5OiBzdHJpbmcs
IHZhbHVlPzogYW55KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6IGFueTtcbiAg
ICAgICAgcmVtb3ZlKGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlQWxsKCk6IHZv
aWQ7XG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50OiBzdHJpbmcs
IHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVt
YmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogRWxlbWVu
dCwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBu
dW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBKUXVl
cnksIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5Pzog
bnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJQ29tcGlsZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRp
cmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSUNvbXBp
bGVQcm92aWRlcjtcblxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBpcyB0aGVyZS4u
LlxuICAgICAgICBkaXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBpbGVQcm92aWRl
cjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uIHtcbiAg
ICAgICAgLy8gTGV0J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4ncyBzaWduYXR1
cmVcbiAgICAgICAgKHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xvbmVkRWxlbWVu
dD86IEpRdWVyeSwgc2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclByb3ZpZGVyXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyU2VydmljZSB7
XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc3RhdGUgdGhp
cywgbG9jYWxzIGFyZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0cnVjdG9yOiBG
dW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxlck5hbWU6IHN0
cmluZywgbG9jYWxzPzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29udHJv
bGxlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVy
KG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4g
ICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRlZENvbnN0cnVj
dG9yOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gSHR0cFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJGh0dHBcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBTZXJ2
aWNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3QgYmUgcHJvdmlk
ZWQuLi5cbiAgICAgICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFByb21pc2U8YW55
PjtcbiAgICAgICAgZ2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRw
UHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmln
PzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBzdHJpbmcsIFJl
cXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAganNvbnAodXJs
OiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAg
ICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0
dHBQcm9taXNlPGFueT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1
ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlZmF1bHRzOiBJ
UmVxdWVzdENvbmZpZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQgaXQgaXMgZG9j
dW1lbnRlZCBhcyBwdWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0czogYW55W107
XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAgIC8vIFNvbWUg
b3BldGlvbnMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3Qu
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwI1VzYWdl
IGZvciBvcHRpb25zIGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVzdENvbmZpZyB7
XG4gICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAg
cGFyYW1zPzogYW55O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24gc3RydWN0dXJl
Li4uICBwZXJoYXBzIHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxuICAgICAgICBo
ZWFkZXJzPzogYW55O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3aXRoQ3JlZGVu
dGlhbHM/OiBib29sZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0aXBsZSB0eXBl
cywgc28gbGV0J3MgZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBhbnk7XG4gICAg
ICAgIHRyYW5zZm9ybVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNlPzog
YW55O1xuICAgICAgICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNlXG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAgICAgKGRhdGE6
IFQsIHN0YXR1czogbnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJp
bmcsIGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBUO1xuICAgICAg
ICBzdGF0dXM/OiBudW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFtZTogc3RyaW5n
KSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxUPiB7XG4gICAg
ICAgIHN1Y2Nlc3MoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9t
aXNlPFQ+O1xuICAgICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4p
OiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNr
OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVzdWx0LCBlcnJv
ckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55
KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxi
YWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJUHJvbWlzZTxU
UmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tB
cmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJSHR0cFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRlZmF1
bHRzOiBJUmVxdWVzdENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICAg
ICAgcmVzcG9uc2VJbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ugc2hvdWxkIG5l
dmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAgICAgIC8vIFhY
WCBQZXJoYXBzIGRlZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVyZVxuICAgICAg
ICAobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxsYmFjaz86IEZ1
bmN0aW9uLCBoZWFkZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3JlZGVudGlhbHM/
OiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBJbnRlcnBvbGF0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGludGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4dDogc3RyaW5n
LCBtdXN0SGF2ZUV4cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25GdW5jdGlvbjtc
biAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2woKTogc3Ry
aW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uIHtcbiAg
ICAgICAgKGNvbnRleHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUlu
dGVycG9sYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgc3Rh
cnRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTogc3RyaW5nKTog
SUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAg
ICAgIGVuZFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNoZVNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRlbXBsYXRlQ2Fj
aGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlQ2FjaGVT
ZXJ2aWNlIGV4dGVuZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBSb290U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSVJvb3RTY29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpbnRlcmZh
Y2UgSVNDRVNlcnZpY2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0
ZWQ6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0
Z2V0VHJ1c3RlZEh0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSnModmFsdWU6
IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtc
blx0XHRnZXRUcnVzdGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2UodHlwZTogc3Ry
aW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4g
YW55O1xuXHRcdHBhcnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwg
bG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9uOiBzdHJpbmcp
OiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNKcyhleHBy
ZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRc
dHBhcnNlQXNSZXNvdXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBs
b2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjogc3RyaW5nKTog
KGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFzKHR5cGU6IHN0
cmluZywgdmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTogYW55KTogYW55
O1xuXHRcdHRydXN0QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNSZXNvdXJjZVVy
bCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6IGFueTtcblx0
XHRpc0VuYWJsZWQoKTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gU0NFUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHNjZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElTQ0VQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBlbmFibGVk
KHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBTQ0VEZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVzdGVkKHR5cGU6
IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0QXModHlwZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVlOiBhbnkpOiBh
bnk7XG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0
ZVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRz
Y2VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElTQ0VEZWxlZ2F0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IHJlc291cmNlVXJsQmxhY2tsaXN0KGJsYWNrbGlzdDogYW55W10pOiB2b2lkO1xuICAgICAgICBy
ZXNvdXJjZVVybFdoaXRlbGlzdCh3aGl0ZWxpc3Q6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmVcbiAg
ICAvLyBhbmQgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3RpdmVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xuICAgICAgICBj
b21waWxlPzpcbiAgICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAg
IHRlbXBsYXRlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0cmFuc2NsdWRl
OiAoc2NvcGU6IElTY29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2b2lkXG4gICAg
ICAgICAgICApID0+IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAgICAgICAgY29u
dHJvbGxlckFzPzogc3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAgIChzY29wZTog
SVNjb3BlLFxuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAgICAgICAgICBp
bnN0YW5jZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29udHJvbGxlcjog
YW55XG4gICAgICAgICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAg
ICAgIHByaW9yaXR5PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAgICAg
ICAgcmVxdWlyZT86IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4gICAgICAgIHNj
b3BlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGVVcmw/
OiBhbnk7XG4gICAgICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJhbnNjbHVkZT86
IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhbmd1bGFyLmVs
ZW1lbnRcbiAgICAvLyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1bGFyIHJldHVy
bnMgYSBqUXVlcnkgb2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0aW9uYWwgbWV0
aG9kcyBsaWtlIGUuZy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9hbmd1bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUF1Z21lbnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRpYyB7XG4gICAg
ICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAo
b2JqZWN0OiB7fSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50QXJyYXk6IEVs
ZW1lbnRbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpRdWVyeSk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgIChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAo
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpR
dWVyeSBleHRlbmRzIEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywgaG93IHRvIGRl
ZmluZT9cbiAgICAgICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0b3I6IHN0cmlu
Zyk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55KTogSUF1Z21l
bnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7
XG5cbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGluamVj
dG9yKCk6IGFueTtcbiAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAgIGluaGVyaXRl
ZERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRl
ZERhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICAgICAgaW5o
ZXJpdGVkRGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICAgICAgICAg
IGFubm90YXRlKGZuOiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAgYW5ub3RhdGUo
aW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAgICAgICAgICBn
ZXQgKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRlKHR5cGVDb25z
dHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgICAgIGludm9r
ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAgICAgICBpbnZv
a2UoZnVuYzogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcbiAg
ICAgICAgfVxuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFByb3ZpZGVTZXJ2
aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRw
cm92aWRlXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJUHJvdmlk
ZVNlcnZpY2Uge1xuICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0IHJldHVybnMg
dGhlIHJlZ2lzdGVyZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAgIC8vIGltcGxl
bWVudGF0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAgIC8vIGNvbnN0
YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAgIGNvbnN0YW50
KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAgIGRlY29yYXRv
cihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICAgICAg
ZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6IHZvaWQ7XG4g
ICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjog
RnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1l
OiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklTZXJ2aWNlUHJv
dmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBuZy5J
U2VydmljZVByb3ZpZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3Zp
ZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTog
bmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBj
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAg
dmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAg
ICAgICAgfVxuXG4gICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1vZHVsZSB0b2Rv
cyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9JdGVtIHtcbiAg
ICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxcbiAg
ICAgICAgICAgIHB1YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICkgeyB9XG4g
ICAgfVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5c
dGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7XG5cdFx0dG9k
b3M6IFRvZG9JdGVtW107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRlZFRvZG86IFRv
ZG9JdGVtO1xuXHRcdG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWluaW5nQ291bnQ6
IG51bWJlcjtcblx0XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2VkOiBib29sZWFu
O1xuXHRcdHJldmVydGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBjb21wbGV0ZWQ/
OiBib29sZWFuIH07XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7XG5cdFx0dm06
IFRvZG9DdHJsO1xuXHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50c1xuXG5tb2R1
bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5cdFx0Z2V0ICgp
OiBUb2RvSXRlbVtdO1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1cbn0vLyBkaXJl
Y3RpdmVzL1RvZG9Gb2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5c
blx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVudCBp
dCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVhdGVz
IHRvIHRydWUuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0OiBu
Zy5JVGltZW91dFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0
bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFu
eSkgPT4ge1xuXHRcdFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0ZvY3VzLCBuZXd2
YWwgPT4ge1xuXHRcdFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0aW1lb3V0KCgp
ID0+IGVsZW1lbnRbMF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0
fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0ID0gWyckdGlt
ZW91dCddO1xuXG59Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUgdG9kb3Mge1xu
ICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0aGF0IGV4ZWN1
dGVzIGFuIGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxvc2Vz
IGZvY3VzLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigpOiBuZy5JRGly
ZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgkc2NvcGU6IG5n
LklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcbiAgICAgICAg
ICAgICAgICBlbGVtZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBwbHkoYXR0cmli
dXRlcy50b2RvQmx1cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95
JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAgICAgIH1cbiAg
ICAgICAgfTtcbiAgICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNcblxubW9kdWxl
IHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkgPSAyNztcblxu
XHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9kbyBpZiB0aGUg
dXNlciBwcmVzc2VzIHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9F
c2NhcGUoKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2Nv
cGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0
XHRcdFx0ZWxlbWVudC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYg
KGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRzY29wZS4kYXBw
bHkoYXR0cmlidXRlcy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5c
dFx0XHRcdCRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgna2V5
ZG93bicpOyB9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNlcy9Ub2RvU3Rv
cmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxu
ICAgICAqIFNlcnZpY2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9tIGxv
Y2FsU3RvcmFnZS5cbiAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3JhZ2UgaW1wbGVt
ZW50cyBJVG9kb1N0b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5ndWxh
cmpzLXR5cGVzY3JpcHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7XG4gICAgICAg
ICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0Vf
SUQpIHx8ICdbXScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBUb2RvSXRlbVtd
KSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQsIEpT
T04uc3RyaW5naWZ5KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29udHJvbGxlcnMv
VG9kb0N0cmwudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxu
XHQgKiBUaGUgbWFpbiBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjpcblx0
ICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRvZG9TdG9yYWdl
IHNlcnZpY2Vcblx0ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxhdGUgYW5kIHBy
b3ZpZGVzIGV2ZW50IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9kb0N0cmwge1xu
XG5cdFx0cHJpdmF0ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmplY3QgYW5ub3Rh
dGlvbi5cblx0XHQvLyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1hdGlvbiBhYm91
dCBkZXBlbmRlbmNpZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3RvclxuXHRcdC8vIGl0
IGlzIGJldHRlciB0byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3RvciwgYmVjYXVzZSB0
aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRcdC8vIFNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0YXRpYyAkaW5q
ZWN0ID0gW1xuXHRcdFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0XHRcdCd0b2Rv
U3RvcmFnZScsXG5cdFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQvLyBkZXBlbmRl
bmNpZXMgYXJlIGluamVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0Ly8gY29udHJv
bGxlcidzIG5hbWUgaXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQgc3BlY2lmaWVk
IGZyb20gbmctY29udHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRcdGNvbnN0cnVj
dG9yKFxuXHRcdFx0cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRwcml2YXRlICRs
b2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9kb1N0b3JhZ2U6
IElUb2RvU3RvcmFnZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0KSB7XG5cdFx0
XHR0aGlzLnRvZG9zID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7XG5cblx0XHRc
dCRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5c
blx0XHRcdC8vICd2bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFkZGluZyBhIHJl
ZmVyZW5jZSB0byB0aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8vIGZvciBpdHMg
bWV0aG9kcyB0byBiZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRcdCRzY29wZS52
bSA9IHRoaXM7XG5cblx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdlcyBpbiBzY29w
ZSwgd2hpY2ggYXJlIGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8vIGlmIHlvdSBz
dWJzY3JpYmUgdG8gc2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIgdGhhbiB0aGlz
IGNvbnRyb2xsZXIsIG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQkc2NvcGUuJHdh
dGNoKCd0b2RvcycsICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRcdCRzY29wZS4k
d2F0Y2goJ2xvY2F0aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0aCkpXG5cblx0
XHRcdGlmICgkbG9jYXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgoJy8nKTtcblx0
XHRcdCRzY29wZS5sb2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRvblBhdGgocGF0
aDogc3RyaW5nKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0aCA9PT0g
Jy9hY3RpdmUnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09ICcv
Y29tcGxldGVkJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307XG5cdFx0fVxu
XG5cdFx0b25Ub2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50ID0gdGhp
cy5maWx0ZXJGaWx0ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0aDtc
blx0XHRcdHRoaXMuJHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3RoIC0gdGhpcy4k
c2NvcGUucmVtYWluaW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVja2VkID0gIXRo
aXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdlLnB1dCh0aGlz
LnRvZG9zKTtcblx0XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5ld1RvZG8gOiBz
dHJpbmcgPSB0aGlzLiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICghbmV3VG9kby5s
ZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZG9zLnB1
c2gobmV3IFRvZG9JdGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRzY29wZS5uZXdU
b2RvID0gJyc7XG5cdFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5c
dFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRcdC8vIENsb25l
IHRoZSBvcmlnaW5hbCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQuXG5cdFx0XHR0
aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kb0l0ZW0pO1xu
XHRcdH1cblxuXHRcdHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhp
cy50b2Rvc1t0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNjb3BlLm9yaWdp
bmFsVG9kbztcblx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0
XHRkb25lRWRpdGluZyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVk
aXRlZFRvZG8gPSBudWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gbnVsbDtc
blx0XHRcdGlmICh0aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBUb2RvIGVkaXRz
IHdlcmUgcmV2ZXJ0ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVk
ID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0ZW0udGl0bGUg
PSB0b2RvSXRlbS50aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRpdGxlKSB7XG5c
dFx0XHRcdHRoaXMucmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0
cmVtb3ZlVG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3Muc3BsaWNl
KHRoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRcdGNsZWFyRG9u
ZVRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9zID0gdGhpcy50
b2Rvcy5maWx0ZXIodG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5cdFx0fVxuXG5c
dFx0bWFya0FsbChjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9kb3MuZm9yRWFj
aCh0b2RvSXRlbSA9PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsgfSk7XG5cdFx0
fVxuXHR9XG5cbn1cbi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1haW4gVG9kb01W
QyBhcHAgbW9kdWxlLlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAqL1xubW9kdWxl
IHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9IGFuZ3VsYXIu
bW9kdWxlKCd0b2RvbXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcigndG9kb0N0cmwn
LCBUb2RvQ3RybClcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgdG9kb0JsdXIp
XG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMpXG4gICAgICAg
ICAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAgICAgICAgIC5z
ZXJ2aWNlKCd0b2RvU3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKK21vZHVsZS5leHBvcnRz
ID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxu
Q29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
XG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJM
aWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNlbnNl
IGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElTIENP
REUgSVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcg
V0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRBQkxJ
VFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGlj
ZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQgbGlt
aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4v
LyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAueFxu
Ly8gUHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9yaXMg
WWFua292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhvZmZt
ZWlzdGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9uLCBE
aXVsbGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3BvdWxv
cyA8aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFuIEhp
bGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6Ly9n
aXRodWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9rc3Vt
bWVybGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+LCBO
aWNob2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVyZWsg
Q2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdhc3Bh
ciA8aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZpc2hl
ciA8aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxodHRw
czovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dpdGh1
Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIuY29t
L3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+LCBK
b2huIFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZpbml0
aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG4v
KlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmlndXJl
IHRoZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtcbiAg
ICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVhZGVy
IHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBhY2Nl
cHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwg
aXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRo
b2QuXG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBkZWZh
dWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBpcyBz
ZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVzdHMs
IHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBkYXRh
VHlwZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9wZXJh
dGlvbi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBsb2Nr
IHRoZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3QgaXMg
YWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRoIGpx
WEhSICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nlc3Mv
ZXJyb3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNwb25k
aW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBvciB0
aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBib29s
ZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24gdGhh
dCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhU
VFBSZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBjdXN0
b20gaGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBhc3Nl
ZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNlIGlu
IHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBvZiBq
UXVlcnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJkbGVz
cyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChqcVhI
UjogSlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAgIC8q
KlxuICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFnZXMg
bm90IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0byBm
YWxzZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVzdHMu
IEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBhcmFt
ZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgcmVx
dWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0IGhh
cyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hlPzog
Ym9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRo
ZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3MgYXJl
IGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRoZSBq
cVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0cmlu
ZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIsIFwi
bm90bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBcInBh
cnNlcmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBjYW4g
YWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxl
ZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxldGU/
IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4g
ICAgICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhhdCBk
ZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRzIGNv
bnRlbnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50cz86
IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5hamF4
IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlwZSB0
byBzZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292
L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5kaW5n
IGRhdGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlzIFwi
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdoaWNo
IGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBjb250
ZW50LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNlcnZl
ciAoZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNwZWNp
ZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNwZWNp
ZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNoYW5n
ZSB0aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAgLyoq
XG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBBamF4
LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmplY3Qg
dGhhdCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQuYWph
eFNldHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5cbiAg
ICAgKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVyJ3Mg
dmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVlIG9m
IHRoZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252ZXJ0
ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdp
c2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0aGUg
c2FtZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhpcyBh
bGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVyIGRv
bWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86IGJv
b2xlYW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIEl0
IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcu
IEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vzc0Rh
dGEgb3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0IG11
c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNlcmlh
bGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVlIG9m
IHRoZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xuICAg
IGRhdGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRvIGhh
bmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBhIHBy
ZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hvdWxk
IHJldHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1
bWVudHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAnZGF0
YVR5cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55LCB0
eTogYW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5b3Un
cmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmllZCwg
alF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2YgdGhl
IHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNPTiB3
aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVjdXRl
IHRoZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJp
bmcpLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEg
ZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rpb24g
cmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1M
SHR0cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlcnJv
ciB0aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBvbmUg
b2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVzaWRl
cyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJwYXJz
ZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNlaXZl
cyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5vdCBG
b3VuZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUsIHRo
ZSBlcnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1
bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBub3Qg
Y2FsbGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAgcmVx
dWVzdHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpxWEhS
OiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTogYW55
O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVudCBo
YW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8gZmFs
c2UgdG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFqYXhT
dG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdmFy
aW91cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAgIC8q
KlxuICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMg
dG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0cmFu
c3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMgYWx3
YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJlIGNo
YW5nZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUgb3Zl
cndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9uIGFk
ZGVkOiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9
O1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwgb25s
eSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4gVGhp
cyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVsdCB2
YWx1ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlzIHRl
Y2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVyIHRv
IGNhdGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9vbGVh
bjtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBiZSBy
ZWNvZ25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlmIGpR
dWVyeSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9sbG93
aW5nIHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUsICot
ZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1vZGlm
aWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0
dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xvY2Fs
PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVuY3Rp
b24gbmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3Rl
YWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0
cmluZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0IGlu
ICdvbkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEuNSwg
c2V0dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9tIGFk
ZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5nIHRv
IHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQg
YWxzbyBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhhbXBs
ZSwgeyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxuICAg
ICAqL1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGNh
bGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxs
IGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUgYSB1
bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVlc3Rz
IGFuZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2FudCB0
byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIgYnJv
d3NlciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNhbiBh
bHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhlIHZh
bHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBm
dW5jdGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxuICAg
ICAqIEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lvbiBh
ZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4g
ICAgICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9u
c2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAg
ICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRhIHBh
c3NlZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwgYW55
dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5zZm9y
bWVkIGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVudC10
eXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50IHRv
IHNlbmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQgdGhp
cyBvcHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFuO1xu
ICAgIC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5zcG9y
dCBpcyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIgb3Ig
XCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNldCBh
dHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3aGVu
IHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBhcyB0
aGUgb25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJzZXQ/
OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBjb2Rl
cyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhlIGNv
cnJlc3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3RhdHVz
IGNvZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2VzcyBj
YWxsYmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRpcmVj
dCksIHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFjay4g
KHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5OiBz
dHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQg
aWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJlZSBh
cmd1bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVkIGFj
Y29yZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5nIHRo
ZSBzdGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3Qp
IG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNjZXB0
IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0
dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRhdGE6
IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAgIC8q
KlxuICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1ZXN0
LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWpheFNl
dHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFqYXgg
Y2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVzcyBh
bmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9zc2li
bGUgZm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIEluIGpR
dWVyeSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBiZSBp
biBhbiBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5nIGFu
eSBvYmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMuMCsg
b25seSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5IGEg
dGltZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIgdGhl
IHRpbWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgLyoq
XG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRpdGlv
bmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0aW9u
YWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8gbWFr
ZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3RoZXIg
SFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNvIGJl
IHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzLlxu
ICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgY29u
dGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICovXG4g
ICAgdXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNlZCB3
aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRp
Y2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgLyoq
XG4gICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qu
IERlZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRoZSBY
TUxIdHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24gaW1w
bGVtZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUgZmFj
dG9yeS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0
IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhIUiBv
YmplY3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRpYWxz
IHRvIHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVyeSAx
LjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRvIHRo
ZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxkIGln
bm9yZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpRdWVy
eSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFkZGVk
OiAxLjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fTtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5pbnRl
cmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8YW55
PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAgIGFi
b3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBm
b3IgdGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7XG4g
ICAgYWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7XG4g
ICAgZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtcbiAg
ICBmaXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczog
YW55W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxvY2so
KTogYW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFja3M6
IGFueVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8gaW50
ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9u
UmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8
VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAo
cmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIEludGVy
ZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVy
ZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxi
YWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8
VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xu
ICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBw
cm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxu
ICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
biAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAg
ICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBw
cm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xu
XG4gICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVGaWx0
ZXI/OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHByb2dy
ZXNzRmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29u
czogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBh
bnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQp
ID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlb
XSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpR
dWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwg
b25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+
LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJv
bWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdl
bmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4g
YW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21pc2Vz
IFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9u
UmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dy
ZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9u
RnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBv
blJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9n
cmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihv
bkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25z
OiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJv
Z3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4o
b25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4s
IG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxV
Piwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVBy
b21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVycmVk
LCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBleHRl
bmRzIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJh
Y2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
biAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAg
IHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
blxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8
VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+
O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtc
biAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47
XG4gICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAg
IHJlc29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZl
V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4g
ICAgc3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQ
cm9taXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVuc2lv
biBvZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlFdmVu
dE9iamVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVUYXJn
ZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAgaXNJ
bW1lZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0aW9u
U3RvcHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZlbnRE
ZWZhdWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3VsdDog
YW55O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQcm9w
YWdhdGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtc
biAgICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFj
ZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtc
biAgICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRhS2V5
OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGJ1
dHRvbjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1iZXI7
XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdlWDog
bnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAgIHNj
cmVlblk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4dGVu
ZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJDb2Rl
OiBudW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5pbnRl
cmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9i
amVjdCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJmYWNl
IEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVlcnlJ
bnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVudE9i
amVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVjdGlv
biBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFjZSBK
UXVlcnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJvb2xl
YW47XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJvb2xl
YW47XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAgY3Nz
RmxvYXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBodG1s
U2VyaWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47XG4g
ICAgbm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xlYW47
XG4gICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xuICAg
IG9wdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtcbiAg
ICBzdHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAgdGJv
ZHk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6IGFu
eSk6IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3RyaW5n
O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5IGV2
ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0ZWFk
IG9mIGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhlIGNv
bnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmluZyBz
cGVjaWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25zdHJ1
Y3RvciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5
RXZlbnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFu
eSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0
byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNpbmcg
e1xuICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVyKTog
bnVtYmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ugb24g
JCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7XG5c
biAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBw
YWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9w
dGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNl
dHVwKCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTog
SlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAg
KEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRh
aW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJh
bSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFq
YXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBz
ZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgo
dXJsOiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xu
XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4
aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhl
eSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFU
eXBlcyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBk
ZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWph
eFByZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2lu
YWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZv
aWQ7XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5
IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUg
dGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVx
dWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55LCBv
cmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55
KTogdm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4gICAg
IC8qKlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3Rz
LiBJdHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFtIG9w
dGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZhdWx0
IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAgICBh
amF4U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8qKlxu
ICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwg
dG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNh
bGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
XG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0
aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQs
IG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRh
OiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRh
VHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJv
bSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0
IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRo
YXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFt
IHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1
ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4
cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwg
anNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRh
dGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpx
WEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4g
ICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VU
IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcg
dGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRh
IEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRo
IHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24g
dGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0g
ZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1
bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAg
ICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6
IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFU
eXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNv
ZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNo
IHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBm
dW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAq
L1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAv
KipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNl
cnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sg
ZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAg
Ki9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBK
UXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRo
ZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFt
IHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBp
cyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0cmlu
Zywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZhU2Ny
aXB0IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhlbiBl
eGVjdXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNzPzog
KHNjcmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+
IGFueSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8qKlxu
ICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVz
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJM
IHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBj
YWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRz
LiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRo
YXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3Rl
ZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24s
IHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBM
b2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlk
ZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBl
IFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRl
bGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xu
ICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/
OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhl
IHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFt
IHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBp
cyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51
bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRh
IGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHht
bCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3Ry
aW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3Ry
aW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5
WEhSO1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0IG9i
amVjdCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBsaXN0
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNl
LXNlcGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZl
cy5cbiAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxsYmFj
aztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24gb2Yg
alF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRpY2F0
ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFzZWRc
biAgICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAoc2Vs
ZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDogRWxl
bWVudCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudEFy
cmF5OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5O1xu
ICAgIChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1ZXJ5
O1xuICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVyeSdz
IGNvbnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVtb3Zl
QWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkgdmFy
aWFibGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYpLlxu
ICAgICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtcblxu
ICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rp
b25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0
cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZh
U2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAq
IFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9u
ZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2Vu
dCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBP
bmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMu
XG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21pc2U8
VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBm
dW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBv
YmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWlu
IEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczog
YW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3RyaW5n
XTogYW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3RvcmUg
YXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4gUmV0
dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1l
bnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBw
YXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAg
KiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8VD4o
ZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipcbiAg
ICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBh
cyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBk
YXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50
IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFy
YW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICov
XG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAvKipc
biAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50
LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVs
bCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVt
ZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKi9c
biAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1lbnQ6
IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxlbWVu
dDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1
ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1
ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICAvLyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVkOiBK
UXVlcnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAvLyBF
ZmZlY3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsgc3Rv
cDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9OyBv
ZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5KGZu
OiAoLi4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6
IGFueTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55
W10pOiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAgIC8v
IEludGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1p
c2NlbGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVjaWRl
IGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAgICAv
LyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0aWxp
dGllc1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVtZW50
KTogYm9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGluZGV4
SW5BcnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFj
aChjb2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZh
bHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4oY29s
bGVjdGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxl
bWVudDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5vYmpz
OiBhbnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnksIC4u
Lm9ianM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBhbnk7
XG5cbiAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwgaW5k
ZXhJbkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107XG5c
biAgICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1iZXIp
OiBudW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0VtcHR5
T2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTogYm9v
bGVhbjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFpbk9i
amVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29sZWFu
O1xuICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5KG9i
ajogYW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6IChl
bGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4gICAg
bWFwKGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJbkFy
cmF5OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNlY29u
ZDogVFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10pOiBh
bnlbXTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAgIHBh
cnNlSlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBz
dHJpbmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YWEg
d2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJzZVhN
TChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1l
bnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAgICB0
cmltKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmluZztc
blxuICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQYXJz
ZXMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29udGV4
dCBET00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRNTCBm
cmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBCb29s
ZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBI
VE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRleHQ/
OiBIVE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBBbmlt
YXRpb24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtcblxu
ICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5zdGFu
Y2UgbWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBhamF4
Q29tcGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVyOiAo
ZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6
IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICBhamF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9wKGhh
bmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAoZXZl
bnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBsZXRl
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJpYWxp
emVBcnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhjbGFz
c05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBhbnks
IGN1cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRwOi8v
YXBpLmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5nKTog
SlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAg
ICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBh
dHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFueSkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBoYXND
bGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmluZztc
biAgICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxDb250
ZW50OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlOYW1l
OiBzdHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFu
eSk6IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJvcGVy
dHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5n
KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1ZXJ5
O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4pOiBK
UXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRv
Z2dsZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1tdKTog
SlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFueSkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBzdHls
ZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAg
ICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQg
b2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUg
QSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQg
Zm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcs
IHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3Jl
IENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICog
QHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4g
ICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBv
ZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBB
IENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBm
b3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywg
dmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9y
ZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAq
IEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xu
ICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJl
dHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJl
Y2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0
aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1l
OiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGll
cyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFt
IHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBB
IGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50
IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0
aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3Mo
cHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJl
cikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBD
U1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBhaXJz
IHRvIHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5O1xu
XG4gICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVy
eTtcbiAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVuYzog
KGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5lckhl
aWdodCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtc
blxuICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51bWJl
cik6IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7
IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0KGZ1
bmM6IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgb3V0
ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJIZWln
aHQodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAg
ICBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVy
V2lkdGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5c
biAgICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAgICBz
Y3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBKUXVl
cnk7XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTogbnVt
YmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVlOiBu
dW1iZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB3
aWR0aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0YShv
Ymo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzogc3Ry
aW5nKTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZl
cnJlZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlz
ZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBk
dXJhdGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRl
KHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29tcGxl
dGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgb3B0
aW9uczogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1bmN0
aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86IGFu
eTsgfSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFtZT86
IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJp
bmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFu
eSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwg
ZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUbyhk
dXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
ICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0cmlu
ZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzog
YW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzog
YW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmlu
aXNoKCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJp
bmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzog
YW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlk
ZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xp
ZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVhbiwg
anVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBjbGVh
clF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHRv
Z2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xl
KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8gRXZl
bnRzXG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5kbGVy
PzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxlOiBi
b29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRCdWJi
bGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1ZXJ5
O1xuXG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxj
bGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRi
bGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0
YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2
ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNr
KGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50
VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3VzXCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZv
Y3VzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZlbnRE
YXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpc
biAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vz
b3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRsZXJz
IHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBw
b2ludGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50
ZXIgZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVudC5c
biAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFuZGxl
ciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2Ug
cG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBv
aW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3Zlciho
YW5kbGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2NyaXB0
IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93
bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBrZXlk
b3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihl
dmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtl
eXByZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtl
eXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4g
ICAgICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICov
XG4gICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwgaGFu
ZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0
IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24o
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1v
dXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
Im1vdXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZW50
ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBi
ZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJz
IGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZlXCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0
aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
bW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShldmVu
dERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1v
dXNlb3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1v
dXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAg
ICogVHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAq
L1xuICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBl
eGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVw
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJt
b3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChldmVu
dERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQg
aGFuZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJl
bW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUg
b3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFj
ZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBs
dWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVj
dG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigp
IHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
aGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9y
IHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmlu
Zywgc2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50
IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNl
LXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBu
YW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwi
Lm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHBy
ZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUg
ZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IEFuIG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNw
YWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRo
ZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNoZWQg
Zm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGlj
aCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0
dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtrZXk6
IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvKipc
biAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUg
ZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25h
bCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hv
cnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBSZXN0
IHBhcmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBqUXVl
cnkudHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBldmVu
dCBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRheCku
XG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBt
b3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0
aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2lu
XCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0
aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUg
ZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBh
bHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRo
YW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAq
L1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2
ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwg
bmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4g
ICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVz
Y2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQu
IElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMg
dHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBA
cGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRh
IHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBm
YWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBz
aW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcs
IHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBh
biBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNl
bGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qg
aW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVz
IHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQo
cykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0
aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRo
ZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxl
ciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5c
biAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBl
dmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czog
eyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3Ig
dGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVs
ZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBh
cyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50
cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBl
dmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWlu
aW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wi
IG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gZGF0
YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2
ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2
ZW50czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBh
IGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhl
Y3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlw
ZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93
bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0
byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRy
aWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUg
ZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVs
ZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBh
cyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxz
ZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxl
bWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBw
ZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUg
c3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNo
IGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2Vs
ZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUg
c2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9y
IGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBp
dCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEg
dG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxs
b3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVy
biBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJp
bmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBh
biBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0
IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9t
aXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRv
IHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICov
XG4gICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3Ry
aW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBE
T00gaXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE6
IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3Jp
cHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Ny
b2xsKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Ny
b2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2VsZWN0
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Vs
ZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
InN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3Vi
bWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBzdWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6IHN0
cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2VyKGV2
ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVyKGV2
ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xuXG4g
ICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBlOiBz
dHJpbmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBKUXVl
cnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9y
OiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFu
eSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1ZXJ5
OiBzdHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNrKGVs
ZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxuICAg
IC8vIE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xu
ICAgIGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBl
bmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRleDog
YW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdldDog
YW55KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xu
ICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xv
bmUod2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/OiBi
b29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJl
cGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChpbmRl
eDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0YXJn
ZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtc
blxuICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlV2l0
aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0KHRl
eHRTdHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDogbnVt
YmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXkoKTog
YW55W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0VsZW1l
bnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgd3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJbm5l
cihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFu
ZW91c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4KCk6
IG51bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGluZGV4
KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5ndGg6
IG51bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG4g
ICAgW3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAgIGFk
ZChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCguLi5l
bGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVyeTtc
biAgICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rvcj86
IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtc
biAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1ZXJ5
O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVtZW50
OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86IEVs
ZW1lbnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgpOiBK
UXVlcnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVyKHNl
bGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBm
aWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChvYmo6
IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhzZWxl
Y3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBKUXVl
cnk7XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5jOiAo
aW5kZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBib29s
ZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1ZXJ5
O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVudCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0VW50
aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0
VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBu
ZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBu
b3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIG5v
dChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7XG5c
biAgICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzKHNl
bGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9yPzog
c3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVsZW1l
bnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGls
KG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihzZWxl
Y3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJpbmcp
OiBKUXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBz
dHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtcblxu
ICAgIC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55W107
XG4gICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTog
SlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xufVxu
ZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xhcmUg
dmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGljO1xu
Ly8gbGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgQW5n
dWxhciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZpbml0
aW9ucyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4vLyBE
ZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBl
ZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8vIFN1
cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVuY3Rp
b24ge1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
bi8vIG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRlY2xh
cmUgbW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQgdGhp
cyBpbnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgICRn
ZXQ6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1bGFy
U3RhdGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAgICAg
YmluZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5jdGlv
bjtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtdKTog
YXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1ZXJ5
LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3Rz
dHJhcChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNl
cnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86IGFu
eVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55LCBk
ZXN0aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpRdWVy
eVN0YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJvb2xl
YW47XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6
IGFueTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55LCBr
ZXk6IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNvbihq
c29uOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtcbiAg
ICAgICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xu
ICAgICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUodmFs
dWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0Z1
bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5lZCh2
YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTogc3Ry
aW5nO1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxuXHRc
dG9mZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1bGVz
LlxuXHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVc
blx0XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3VyIG1v
ZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcbiAg
ICAgICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAgICAg
ICAgICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9uPzog
YW55KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAg
ICAgIHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAgICAg
dXBwZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4gICAg
ICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAgICAg
ICAgICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAgICAg
ICAgY29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1hdGlv
bkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0
cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAg
YW5pbWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3Vy
ZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29y
ayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9c
biAgICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIC8q
KiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJl
Z2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5n
XG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10p
OiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJ
TW9kdWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAg
ICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGluZUFu
bm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIo
b2JqZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmlu
ZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3Rp
dmUobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxl
O1xuICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBm
YWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJ
TW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVu
Y3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVjdCk6
IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlGdW5j
dGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBp
bmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIo
b2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcs
IHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAg
IHByb3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtd
KTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xu
ICAgICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xu
ICAgICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAg
ICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rpb24p
OiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVk
Q29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6
IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxuICAg
ICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVxdWly
ZXM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEF0
dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNv
bXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxl
IHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2FudFxu
XHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBhdHRy
cy5mb28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91bGQg
cmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlzIHBy
b2JsZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRbbmFt
ZTogc3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1ZSBz
cGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8gZWxl
bWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJl
IHRyaWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAgICAk
YWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3ZlcyB0
aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIGZy
b20gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhl
biBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBjbGFz
cyByZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7
XG5cbiAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgICAg
JHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2JzZXJ2
ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVyIGZ1
bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4gICAg
ICAgIC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52b2tl
ZCB3aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMuXG4g
ICAgICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBGdW5j
dGlvbjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMg
dG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8gZG8g
cmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS5c
biAgICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJpc3Rp
bmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBi
b29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBhbnk7
XG4gICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZv
aWQ7XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxl
cik6IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJpc3Rp
bmUoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBOZ01v
ZGVsQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVuZGVy
KCk6IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0cmlu
ZywgaXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3Rh
dGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJcbiAg
ICAgICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4gICAg
ICAgICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFsdWU6
IGFueTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJzOiBJ
TW9kZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltdO1xu
ICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAg
ICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGlu
dmFsaWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7XG4g
ICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxG
b3JtYXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAgICAg
ICRhcHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3BlOiBJ
U2NvcGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmluZywg
Li4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2b2lk
O1xuICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmluZywg
Li4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRp
b24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMg
b24gaXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0KTog
YW55O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBh
cmdzPzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAg
aXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAg
ICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZhbEFz
eW5jKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgICAg
IC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBzdHJh
dGVneVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAgICAg
ICRvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4uLmFy
Z3M6IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hFeHBy
ZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xl
YW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBs
aXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9
PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0
Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IHN0
cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRj
aCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogKG5l
d1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0
RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVjdGlv
bih3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRW
YWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAgJHdh
dGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxp
c3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4g
YW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAgICRp
ZDogbnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNvbGF0
ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4gICAg
ICAgIGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAg
IHByZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9v
bGVhbjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRlbWl0
LXRlZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9ETyB1
bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2RlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7fVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAgKGZ1
bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVBy
b21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29s
ZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFsU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJ2
YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2Vydmlj
ZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBudW1i
ZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNl
bChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmluZyk6
IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0ZW5k
cyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBmaWx0
ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztcblxu
ICAgICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sgYW5n
dWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRTOiBJ
TG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFUUzog
SUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAobnVt
OiBhbnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlckZv
cm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAgICBH
Uk9VUF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0ZXJu
RGVzY3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAgbWlu
SW50OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJhYzog
bnVtYmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJpbmc7
XG4gICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAgICAg
ICAgZ1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBNT05U
SDogc3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBEQVk6
IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1TOiBz
dHJpbmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJpbmc7
XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7XG4g
ICAgICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7XG4g
ICAgICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6IElM
b2dDYWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dDYWxs
O1xuICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAgICB9
XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2UgY2Fu
IHJlb3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBpbnRl
cmZhY2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHByZXNz
aW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxzPzog
YW55KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5kZWZp
bmVkIGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8v
IGRvZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9yIGNv
bnNpc3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUgaXQs
IHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24oY29u
dGV4dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAgICAg
ICBhYnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAgaGFz
aChuZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6IHN0
cmluZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDogc3Ry
aW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAgICAg
IHByb3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2aWNl
O1xuICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01hcDog
YW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3RyaW5n
LCBwYXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJsKCk6
IHN0cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVBy
b3ZpZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQcmVm
aXgocHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVNb2Rl
KCk6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBwYXJh
bWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMgaXQg
YXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0aGlz
IGlzIGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxvY2F0
aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRG9j
dW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRkb2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9jdW1l
bnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAgIChl
eGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMgSlF1
ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlzZXM6
IElQcm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4oKTog
SURlZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8dm9p
ZD47XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAg
ICBpbnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3ND
YWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBlcnJv
ckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRl
OiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+
KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3VsdD4s
IGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAo
c3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJl
c3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBlcnJv
ckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86IChz
dGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNhdGNo
PFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRSZXN1
bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0
ZWQ6IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0
PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBU
UmVzdWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0Pihm
aW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6IHZv
aWQ7XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3RpZnko
c3RhdGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2VcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9sbFxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2Vydmlj
ZSB7XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9yU2Ny
b2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJsZUF1
dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBmb2Nl
IHRoZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91Z2hc
biAgICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1wbGVt
ZW50YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1c2Vm
dWwgdG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0Llxu
ICAgICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1i
ZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01h
cD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAvLyBN
ZXRob2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7XG4g
ICAgICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAgICAg
IGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAgIC8v
IE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0aW9u
XG4gICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAgIHB1
dChrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTogc3Ry
aW5nKTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICBy
ZW1vdmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAgKGVs
ZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4
UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChl
bGVtZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBt
YXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAg
KGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwg
bWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVy
IHtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVu
Y3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwgYnV0
IGl0IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkpOiBJ
Q29tcGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5raW5n
RnVuY3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVBdHRh
Y2hGbidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hGbj86
IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9s
bGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9s
bGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbnRy
b2xsZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9l
c24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9sbGVy
Q29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChjb250
cm9sbGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAg
ICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0
aW9uKTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5QW5u
b3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1cmwg
bXVzdCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IElI
dHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmln
PzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJpbmcs
IFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVhZCh1
cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAg
ICAgICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlz
ZTxhbnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25m
aWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5nLCBk
YXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAg
ICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcs
IEJVVCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGluZ1Jl
cXVlc3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRpbmcu
XG4gICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGluZyBv
biB0aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNlIElS
ZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3Ry
aW5nO1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBpdCdz
IG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUgZnV0
dXJlXG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4gICAg
ICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNjZXB0
IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAgZGF0
YT86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJhbnNm
b3JtUmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8IHBy
b21pc2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4ge1xu
ICAgICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1lOiBz
dHJpbmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAgZGF0
YT86IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86IChoZWFk
ZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RDb25m
aWc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQcm9t
aXNlPFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8
VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFByb21p
c2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0Pihz
dWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+
IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNr
QXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0
PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4p
ID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFBy
b21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtc
biAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRvcnM6
IGFueVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAgIC8v
IFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5LlxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNlIHtc
biAgICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0aGUg
ZnV0dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBhbnks
IGNhbGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIsIHdp
dGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAgICAg
ICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJwb2xh
dGlvbkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFy
dFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0aW9u
RnVuY3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIg
e1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKHZh
bHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9sKCk6
IHN0cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQ
cm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1wbGF0
ZUNhY2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kdGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
VGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7fVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBzdHJp
bmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6IGFu
eSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRy
dXN0ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1
ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRw
YXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxv
Y2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcpOiAo
Y29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4cHJl
c3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0
cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55
KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChj
b250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHByZXNz
aW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHRy
dXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1sKHZh
bHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1
c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1ZTog
YW55KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4g
ICAgICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAgIGdl
dFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAgICAg
dHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVlT2Yo
dmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbG9ja2xpc3QoYmxvY2tsaXN0OiBhbnlbXSk6IHZv
aWQ7XG4gICAgICAgIHJlc291cmNlVXJsQWxsb3dsaXN0KGFsbG93bGlzdDogYW55W10pOiB2b2lk
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVy
I2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rp
cmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJlY3Rp
dmV7XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDogYW55
LFxuICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAg
ICAgIHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rpb24p
ID0+IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzogYW55
O1xuICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAgICAg
ICAgICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFueSxc
biAgICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAg
ICBjb250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFtZT86
IHN0cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/OiBi
b29sZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0cmlu
ZztcbiAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAgICAg
ICB0ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAgICAg
ICB0cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1lbnQs
IGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdpdGgg
YWRkaXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1ZXJ5
U3RhdGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJQXVn
bWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVs
ZW1lbnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVj
dDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uKTog
SUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzogZXZl
bnRzLCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmluZChz
ZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVtZW50
OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTogSUF1
Z21lbnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFueTtc
biAgICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5cbiAg
ICAgICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAg
ICAgICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5
O1xuICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAgfVxu
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxhci5q
cylcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xuXG4g
ICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAgICAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3JcbiAg
ICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZpY2Ug
e1xuICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAgICAg
ICAgICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdbXTtc
biAgICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5zdGFu
dGlhdGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAg
ICAgICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtcbiAg
ICAgICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxzPzog
YW55KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAg
Ly8gUHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50
ZXJmYWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNh
eXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAgICAg
ICAgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAgICAg
ICAgICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAg
ICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAg
ICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZvaWQ7
XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6IGFu
eVtdKTogdm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFj
dG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAg
ICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTog
bmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywg
cHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAg
ICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2VydmljZShu
YW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7
XG4gICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2Vydmlj
ZVByb3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0udHNc
blxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xhc3Mg
VG9kb0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0aXRs
ZTogc3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAgICAg
ICAgICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxubW9k
dWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcuSVNj
b3BlIHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5cdFx0
ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0XHRy
ZW1haW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFsbENo
ZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmlsdGVy
OiB7IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2Vy
dmljZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TdG9y
YWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9yYWdl
IHtcblx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtdKTtc
blx0fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1
c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9u
IHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBiaW5k
cyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRm9j
dXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJl
dHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwg
YXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRlcy50
b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0XHRc
dFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0XHRc
dFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3VzLiRp
bmplY3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5cbm1v
ZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGlyZWN0
aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFw
cGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvZG9C
bHVyKCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGlu
azogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkg
PT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNjb3Bl
LiRhcHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNjb3Bl
LiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xuICAg
ICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0VzY2Fw
ZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVNDQVBF
X0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRpbmcg
YSB0b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBvcnQg
ZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRc
dFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6
IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtc
blx0XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0XHRc
dFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1cblx0
XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1l
bnQudW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8vIHNl
cnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3Qn
O1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmlldmVz
IFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBUb2Rv
U3RvcmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9JRCA9
ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2RvSXRl
bVtdIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVt
KHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQodG9k
b3M6IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMu
U1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn0v
LyBjb250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmlj
dCc7XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRoZSBj
b250cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZpYSB0
aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRoZSB0
ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBjbGFz
cyBUb2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0Ly8g
JGluamVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRoIGlu
Zm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0cnVj
dG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0cnVj
dG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5cGUu
XG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRwdWJs
aWMgc3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRpb24n
LFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtcblxu
XHRcdC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0b3Jc
blx0XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9uLnRz
IGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5odG1s
XG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxcblx0
XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJpdmF0
ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0ZXJc
blx0XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFnZS5n
ZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0ZWRU
b2RvID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4gV2Un
cmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxuXHRc
dFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRNTFxu
XHRcdFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50cy9j
aGFuZ2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxuXHRc
dFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1lIGxv
bmdlciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5cblx0
XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUpO1xu
XHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9uUGF0
aChwYXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRpb24u
cGF0aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1cblxu
XHRcdG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0ZpbHRl
ciA9IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNlIH0g
OiAocGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVlIH0g
OiB7fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVtYWlu
aW5nQ291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDogZmFs
c2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rvcy5s
ZW5ndGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3BlLmFs
bENoZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9kb1N0
b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0XHR2
YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRcdFx0
aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRc
dHRoaXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRcdHRo
aXMuJHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRlbTog
VG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtcblxu
XHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNhbmNl
bGxlZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5kKHt9
LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9JdGVt
KSB7XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0gdGhp
cy4kc2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0cnVl
O1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0
dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5h
bFRvZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0XHRc
dC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhpcy4k
c2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0
b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9kb0l0
ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRcdH1c
blx0XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhp
cy50b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0fVxu
XG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRoaXMu
dG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxldGVk
KTtcblx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0dGhp
cy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29tcGxl
dGVkOyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4gKiBU
aGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9kdWxl
fVxuICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0b2Rv
bXZjID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250cm9s
bGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0Js
dXInLCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRvZG9G
b2N1cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBlKVxu
ICAgICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxuIgog
CiAvKioqLyB9KSwKIC8qIDQyMSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykg
ewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8gICAg
IGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkgQXNo
a2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9y
c1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxuICAv
LyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5k
b3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFyIHJv
b3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFy
aWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBi
eXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFy
cmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwg
RnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZl
cmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICB2
YXJcbiAgICBwdXNoICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlICAg
ICAgICAgICAgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQ
cm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3duUHJv
cGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxl
bWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxu
ICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2
ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1
bmNQcm90by5iaW5kLFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7XG5c
biAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3
YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZl
IHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFy
IF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9i
ajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAg
IHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3Jl
IG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxp
dHkgZm9yIHRoZSBvbGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJv
d3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAh
PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcg
JiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87
XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0gXztc
biAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztcblxu
ICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3Vy
cmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRv
IGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9u
cy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkg
e1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAo
YXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4g
ZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1
ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVy
KSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtcbiAg
ICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxl
Y3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgs
IGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFj
Y3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1
bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtc
biAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBm
dW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBIG1v
c3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUg
YXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcg
dGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0cmFy
eSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxu
ICB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAo
dmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2
YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAg
aWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1
cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1
ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xu
ICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25lciBm
dW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1bmRl
ZmluZWRPbmx5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0
aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVs
bCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAg
ICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxl
bmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2
YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2JqW2tl
eV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAg
fVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1
bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3Ro
ZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFf
LmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSBy
ZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90
b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0g
bnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1bmN0
aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmog
PT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVscGVy
IGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9u
XG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3RcbiAg
Ly8gUmVsYXRlZDogaHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJh
ZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQg
YnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIs
IDUzKSAtIDE7XG4gIHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBp
c0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXIn
ICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAg
Ly8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAv
LyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNo
YC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4g
VHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNl
LlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0
KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2
YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkg
PSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRl
cmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIg
a2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtl
eXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAg
Ly8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVs
ZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29u
dGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBr
ZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9
IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtc
biAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAg
ICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVz
dWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7
XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVj
aW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVhdGVS
ZWR1Y2UoZGlyKSB7XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVzaW5n
IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRlb3B0
aW1pemUgdGhlLCBzZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVyYXRl
ZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49IDAg
JiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVudEtl
eSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0ZWUo
bWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAg
cmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwg
Y29udGV4dCwgNCk7XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5
cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAg
ICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJtaW5l
IHRoZSBpbml0aWFsIHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0g
OiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBp
dGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAgICB9
O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20g
YSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBfLnJl
ZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBUaGUg
cmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRy
YC5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8v
IFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNl
ZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHByZWRp
Y2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikp
IHtcbiAgICAgIGtleSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAg
ICB9IGVsc2Uge1xuICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0
KTtcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBv
Ympba2V5XTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3Mg
YSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9IF8u
c2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVz
dWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAg
Xy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJl
ZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7
XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVu
dHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlvbihv
YmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubmVn
YXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgd2hl
dGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNl
ZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUs
IGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAg
IHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxl
bmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtl
eXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0s
IGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7
XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBv
YmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIF8u
c29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBw
cmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJy
YXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9i
aikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4
KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7
XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkg
cmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBEZXRl
cm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5n
IGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4gIF8u
Y29udGFpbnMgPSBfLmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVtLCBm
cm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZh
bHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJk
KSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5k
ZXgpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykg
b24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24ob2Jq
LCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAg
ICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9i
aiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9kIDog
dmFsdWVbbWV0aG9kXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVuYy5h
cHBseSh2YWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVy
c2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5c
biAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwg
Xy5wcm9wZXJ0eShrZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEg
Y29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4gIC8v
IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBmdW5j
dGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVyKGF0
dHJzKSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2Ug
Y2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWluaW5n
IHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9i
aiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4g
IH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQg
Y29tcHV0YXRpb24pLlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQp
IHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHks
XG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBv
YmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFs
dWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFs
dWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAg
ICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0
KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAg
ICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlm
IChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJl
c3VsdCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAg
ICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1c
biAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVt
ZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0
Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChp
dGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlr
ZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5n
dGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpb
aV07XG4gICAgICAgIGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZh
bHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0g
Y2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUs
IGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4
LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVk
ID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0
ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1c
biAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNodWZm
bGUgYSBjb2xsZWN0aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtG
aXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLi
gJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFy
IHNldCA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZhciBs
ZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7XG4g
ICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xu
ICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBpbmRl
eCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFtyYW5k
XSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxuICAv
LyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8gSWYg
KipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5c
biAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0
aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYg
KG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmog
PSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0g
MSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5tYXgo
MCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRl
cmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmos
IGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4
dCk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgs
IGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAg
aW5kZXg6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBs
aXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAg
ICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xu
ICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkg
cmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtc
biAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAgfSks
ICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFn
Z3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rpb24o
YmVoYXZpb3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkg
e1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwg
Y29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAg
ICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVo
YXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3Vs
dDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEg
Y3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAg
YnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBC
eSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhy
ZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0g
W3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEg
Y3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBr
bm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhCeSA9
IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0g
dmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQg
Z3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcg
YXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAg
Ly8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVl
LCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNl
IHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxp
dmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikp
IHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVy
biBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9
O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAg
Xy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtc
biAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5s
ZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czog
b25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUs
IGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUu
XG4gIF8ucGFydGl0aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAg
ICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0gW10s
IGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtc
biAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZh
bHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8vIEFy
cmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZpcnN0
IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0
IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtl
YC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1h
cGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3Vh
cmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9
PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlhbChh
cnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5n
IGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4g
IC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0
aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4gIF8u
aW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5j
YWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1
YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4g
YXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMg
aW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAg
ICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8
IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVz
dChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNl
ZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFy
Z3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJl
c3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBm
dW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwg
biA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBm
YWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkp
IHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4gIC8v
IEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlv
bi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBzdGFy
dEluZGV4KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFyIGkg
PSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7
IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxp
a2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkg
e1xuICAgICAgICAvL2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMg
b2JqZWN0XG4gICAgICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBzaGFs
bG93LCBzdHJpY3QpO1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAg
ICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7XG4g
ICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0g
ZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAg
ICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQg
YW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxl
dmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVy
biBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEg
dmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQg
dmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8u
ZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAv
LyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBh
cnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBv
ZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4g
IF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250
ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0
ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0g
Y2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2Vl
biA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAg
IGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7
XG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1
dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAg
IH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNv
bXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVz
dWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5z
KHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1c
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5
IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwg
b2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigpIHtc
biAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4gIH07
XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVk
IGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlv
biA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdz
TGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
Z2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFy
cmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4g
ICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAo
IV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBp
ZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBh
cnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50
cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRpZmZl
cmVuY2UgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1bWVu
dHMsIHRydWUsIHRydWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24o
dmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtc
biAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBh
cnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxu
ICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7XG4g
IH07XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBv
ZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVk
IGluZGljZXNcbiAgXy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9
IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZhciBy
ZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJyYXks
IGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252ZXJ0
cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5
LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1l
IGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGlu
ZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAgdmFy
IHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlz
dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1
bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRb
bGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVz
dWx0O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpbmRJ
bmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJlZGlj
YXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNh
dGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7
XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRleCA9
IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGlu
ZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJh
eVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIHJl
dHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24g
YW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEluZGV4
ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9IGNy
ZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1
bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFu
IG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMg
YmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwg
MSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGln
aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZh
ciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJhdGVl
KGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAg
ICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8g
Y3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rpb24g
Y3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAg
IHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxl
bmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVy
Jykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAwID8g
aWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAg
ICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlk
eCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXgg
JiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRl
bSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAg
ICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVG
aW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICByZXR1
cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRp
ciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0g
ZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAg
ICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBv
c2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4g
IC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8v
IElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0
cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBfLmlu
ZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7
XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdEluZGV4
KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGht
ZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5n
ZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6
Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFu
Z2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51bGwp
IHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAg
ICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2Vp
bCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5n
dGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQg
Kz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVy
biByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEg
ZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3aXRo
IHRoZSBwcm92aWRlZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNv
dXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAg
ICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3Vy
Y2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShz
b3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHko
c2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtc
biAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0
byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8g
b3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5j
dGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMs
IGNvbnRleHQpIHtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJp
bmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAx
KSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jp
bmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25j
YXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4g
IH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJz
aW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwg
d2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8v
IGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMg
dG8gYmUgcHJlLWZpbGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAgIHZh
ciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5kID0g
ZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3Mu
bGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ld
ID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxu
ICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3Vt
ZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5k
LCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxu
ICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3Qu
IFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91
bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQg
b24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAobGVu
Z3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlv
biBuYW1lcycpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5
ID0gYXJndW1lbnRzW2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9iaik7
XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNp
dmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rp
b24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAg
ICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsg
KGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlm
ICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhp
cywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAg
IG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAvLyBE
ZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFu
ZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5k
ZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwo
YXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAg
cmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAg
Ly8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJy
ZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwo
Xy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGlu
dm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBh
IGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3
aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUg
dGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRv
IGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7
bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVk
Z2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykg
e1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxs
O1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307
XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMu
bGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xu
ICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGlt
ZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9w
dGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFp
bmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4g
ICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFp
bmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRp
bWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAg
ICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xu
ICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkg
e1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAg
IH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEg
ZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdp
bGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFm
dGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBp
bW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxl
YWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBmdW5j
dGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywgY29u
dGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtc
biAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxhc3Qg
PCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRl
ciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7
XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBs
eShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdz
ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rp
b24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4g
ICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUg
JiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxh
dGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMu
YXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAg
ICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVy
bnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25k
LFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3Jl
IGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwg
ZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1
cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBuZWdh
dGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0gZnVu
Y3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJu
ICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8v
IFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2Yg
ZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBm
dW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZh
ciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFyIHJl
c3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGlsZSAo
aS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVybiBy
ZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxs
IG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRlciA9
IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
aWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24g
dGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUg
TnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2YXIg
bWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtc
biAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAg
ICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAg
IH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRl
ZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0
LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlhbChf
LmJlZm9yZSwgMik7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0t
LS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9y
IGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3Ry
aW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVu
dW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxc
biAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJv
cGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVBy
b3BzKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3Bz
Lmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFy
IHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90
eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNl
LlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBwcm9w
KSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hp
bGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25F
bnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3By
b3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9w
KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4g
b2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQg
NSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykg
cmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFy
IGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIC8v
IEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhv
YmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFsbCB0
aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlvbihv
YmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlz
ID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8g
QWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9i
aiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZh
bHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9i
aikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMu
bGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTtc
biAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSByZXN1
bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9iamVj
dFxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBfLm1h
cE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2JqKSxc
biAgICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0ge30s
XG4gICAgICAgICAgY3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xu
ICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBj
dXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5c
biAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFp
cnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhv
YmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBBcnJh
eShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAg
IHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVybiBw
YWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmpl
Y3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9i
aik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3Ro
OyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9XG4g
ICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0
aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFzZWQg
YXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAg
aWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAg
cmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qg
d2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRl
bmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBv
YmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0
KHMpXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2Ny
aXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVuZE93
biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5zIHRo
ZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAg
Xy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVk
aWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9i
aiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUo
b2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0
dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQg
cHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNvbnRl
eHQpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtleXM7
XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rp
b24ob2l0ZXJhdGVlKSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAgaXRl
cmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAg
ICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAgIGl0
ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2JqOyB9
O1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0g
a2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVl
KHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRo
b3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmos
IGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtc
biAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4gICAg
ICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpLCBT
dHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAg
IHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0
dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxsIGlu
IGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0g
Y3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVj
dCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElm
IGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRk
ZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHBy
b3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUp
O1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJu
IHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0
ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8u
aXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBv
Ymouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50
ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHBy
aW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2Qg
Y2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlh
dGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50
ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07
XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtl
eTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtc
biAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAg
IGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVj
dChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAg
IHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8
ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4g
IH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3Ig
YGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xu
ICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkg
YXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3Nh
bF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5c
biAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAg
IC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5k
ZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7
XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2Vv
ZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFw
cGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFt
ZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2Fs
bChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBT
dHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5z
IGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4g
ICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5v
dGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpc
biAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3Jh
cHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZh
bGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAn
JyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMg
YXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFO
KSBpcyBlcXVpdmFsZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2Ig
IT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9y
IG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2Eg
PT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAg
ICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBi
b29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBi
eSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhh
dCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAg
IC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSAr
YjtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBB
cnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0gJ29i
amVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8g
T2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBi
dXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMg
YXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVj
dG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3Rvcikg
JiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0
b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAg
Ly8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBm
b3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVT
IDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8g
SW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3MgZG9u
ZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29t
cGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0YWNr
IHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5n
dGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5
IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0
cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tb
bGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0
aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAg
YlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5k
IGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxl
bmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAg
ICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJl
dHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5n
IG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAg
ICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4g
ZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmpl
Y3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IGtl
eXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhl
IHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5
LlxuICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xu
ICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1l
bWJlclxuICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFzKGIs
IGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxz
ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0
aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJT
dGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVl
cCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0Vx
dWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxuICAv
LyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4gXCJl
bXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5pc0Vt
cHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtc
biAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0cmlu
ZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAwO1xu
ICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMgYSBn
aXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxuICAv
LyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBu
YXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0
aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFy
cmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8u
aXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4g
ICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFv
Ymo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBp
c0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJyb3Iu
XG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVyJywg
J0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycg
KyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2Jq
KSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVm
aW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJ
RSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVu
dHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNB
cmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdjYWxs
ZWUnKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJv
cHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8gSUUg
MTEgKCMxNjIxKSwgYW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4vICE9
ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8uaXNG
dW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1
bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3Qg
YSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5cbiAg
Ly8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3aGlj
aCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgcmV0dXJuIF8uaXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAgLy8g
SXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5n
LmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2
ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAg
ICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUg
dW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJu
IG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVj
a2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24g
aXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBm
dW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9w
ZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAv
LyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0NvbmZs
aWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJldmlv
dXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0Llxu
ICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1VuZGVy
c2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkg
ZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9IGZ1
bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRpY2F0
ZS1nZW5lcmF0aW5nIGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJzY29y
ZS5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0gZnVu
Y3Rpb24oKXt9O1xuXG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0ZXMg
YSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVy
dHkuXG4gIF8ucHJvcGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0g
bnVsbCA/IGZ1bmN0aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9ialtr
ZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tp
bmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVg
IHBhaXJzLlxuICBfLm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xuICAg
IGF0dHJzID0gXy5leHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgICByZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07XG5c
biAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihu
LCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAs
IG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xu
ICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBi
ZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1p
biwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAg
ICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRv
bSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIp
IHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93
ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGlt
ZSgpO1xuICB9O1xuXG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxu
ICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7Jyxc
biAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3
OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmludmVy
dChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBp
bmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVzY2Fw
ZXIgPSBmdW5jdGlvbihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7
XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlk
ZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3VyY2Ug
PSAnKD86JyArIF8ua2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4
cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJj
ZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBz
dHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4
cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6
IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBl
TWFwKTtcbiAgXy51bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8v
IElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4g
aW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lzZSwg
cmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZhbGxi
YWNrKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3Rb
cHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9IGZh
bGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNh
bGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVn
ZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVz
ZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVu
aXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAn
JztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBC
eSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMs
IGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRl
cm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVh
dGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShbXFxz
XFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9
O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9u
J3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBl
c2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0
byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0
ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAg
Ly8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAgIFwi
J1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAgICAn
XFxuJzogICAgICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAn
dTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxc
XHUyMDI5L2c7XG5cbiAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJl
dHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0IG1p
Y3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxu
ICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywg
cHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMg
d2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4
aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5jdGlv
bih0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9s
ZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5kZWZh
dWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5l
IGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5c
biAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5v
TWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5z
b3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAg
XS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUg
c291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIg
aW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFj
ZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUs
IG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVw
bGFjZShlc2NhcGVyLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gu
bGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxu
KChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7
XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicr
XFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xu
ICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwi
ICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBW
TXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZlc3Qu
XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtc
blxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1
ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0g
J3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwi
dmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJp
bnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAg
ICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZW5k
ZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNl
KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRo
cm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICAg
ICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAvLyBQ
cm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGls
YXRpb24uXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7XG4g
ICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBz
b3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRkIGEg
XCJjaGFpblwiIGZ1bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBv
YmplY3QuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBf
KG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7
XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRlcnNj
b3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3Qg
dGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVy
ZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBl
ZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250
aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0
aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmop
LmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlv
bnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZh
ciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0g
ZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAg
ICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQodGhp
cywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8v
IEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVj
dC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25z
IHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAg
IHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0g
ZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1ldGhv
ZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwg
bmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07XG4g
ICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRk
IGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChb
J2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0
aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9u
KCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBl
ZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3Vs
dCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVl
ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8g
UHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUg
b3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0
aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90
b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAg
ICByZXR1cm4gJycgKyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRp
b24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNc
biAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVz
LiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9u
IGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1l
ZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQg
aXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxp
YiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNh
c2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmlu
ZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2Yg
ZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3VuZGVy
c2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxu
fS5jYWxsKHRoaXMpKTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3JlLmpz
IDEuOC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAwOS0y
MDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBv
cnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJhc2Vs
aW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290
IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUgc2Vy
dmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUg
b2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3QuXztc
blxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJz
aW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmpl
Y3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8gQ3Jl
YXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHBy
b3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gs
XG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJpbmcg
ICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQ
cm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUg
ZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRl
Y2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5LmlzQXJy
YXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQmlu
ZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0gT2Jq
ZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0
ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8v
IENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNl
IGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2Vv
ZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5l
dyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQg
dGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2Fy
ZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGlu
XG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYgKHR5
cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9
PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVs
ZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAg
ICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04g
PSAnMS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZp
Y2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1p
biBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVc
biAgLy8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRl
eHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7
XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAgICBj
YXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxs
KGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlv
bih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1
ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQs
IHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiByZXR1
cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAg
ICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgs
IGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xu
ICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9
O1xuXG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNr
cyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rp
b24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVudGl0
eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVy
dHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3Vu
dCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBpZiAo
Xy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFy
Z0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIodmFs
dWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRlZSA9
IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250ZXh0
LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0
aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rpb24o
a2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPCAy
IHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBp
bmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRz
W2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAg
ICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykg
e1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZpbmVk
T25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAg
ICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAgLy8g
QW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVy
aXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUp
IHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChu
YXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9yLnBy
b3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rv
ci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIHBy
b3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAg
ICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAgfTtc
blxuICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhl
ciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFz
IGFuIG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3Jl
bmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5h
c3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVY
ID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCdsZW5n
dGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHZh
ciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBsZW5n
dGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9JTkRF
WDtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9u
LCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRv
IGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0
aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRl
cmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNv
bnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtc
biAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNl
IHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5n
dGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9i
altrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9i
ajtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJh
dGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihvYmos
IGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4
dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAg
ICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBB
cnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5k
ZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3Vy
cmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8g
Q3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1
bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3IgZnVu
Y3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1bmN0
aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVyYXRv
cihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBmb3Ig
KDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAg
IHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAgIG1l
bW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4g
ICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6
ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtl
KG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5s
ZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAg
ICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAg
ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tleXMg
PyBrZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAgfVxu
ICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBs
ZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmds
ZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBm
b2xkbGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNlKDEp
O1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBr
bm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJlZHVj
ZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0
aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0
aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNhdGUs
IGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBwcmVk
aWNhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5ICE9
PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1l
bnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4g
IF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkg
e1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBj
b250ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtc
biAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZh
bHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1cm4g
YWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVj
dCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8uZmls
dGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4gIC8v
IERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihv
YmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwg
Y29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2Jq
KSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRL
ZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRlKG9i
altjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAg
ICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVs
ZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBh
cyBgYW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFy
IGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3Ro
ID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tp
bmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJy
ZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9
O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2
ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5kIGBp
bmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5jdGlv
bihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9i
aikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251
bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihvYmos
IGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdp
dGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZva2Ug
PSBmdW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1
bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAgICBy
ZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0Z1
bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/
IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBD
b252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGlu
ZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1
cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNl
IHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5
IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAg
Xy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2Jq
LCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9m
IGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0XG4g
IC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdoZXJl
ID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1hdGNo
ZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3Ig
ZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBpdGVy
YXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRl
ZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRl
ZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmop
ID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBv
YmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4g
ICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xu
ICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRl
cmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4
LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0
KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSAt
SW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2
YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAg
ICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRo
ZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1p
biA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0g
SW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0
ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9i
aiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2
YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAg
ICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAg
ICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAg
ICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBm
dW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRl
ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0
ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtcbiAg
ICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRl
ZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07
XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBv
ZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlhLm9y
Zy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlvbihv
YmopIHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9i
aik7XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0gQXJy
YXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAgaWYg
KHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAgICAg
IHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZmbGVk
O1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0
aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJh
bmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3Mg
aXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3Vh
cmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJyYXlM
aWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFuZG9t
KG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5zbGlj
ZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFs
dWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9
IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0
ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9u
KHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZh
bHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwg
cmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmln
aHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwg
YSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQg
MCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5p
bmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rp
b24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3Jv
dXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJh
dGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9
IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmop
O1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAg
ICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3Qn
cyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxu
ICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlv
bi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4g
ICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2Ug
cmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmplY3Qn
cyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9yXG4g
IC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5c
biAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAg
cmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBh
biBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVp
dGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9u
KHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3Vs
dFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkgY3Jl
YXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJy
YXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChf
LmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJheUxp
a2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8udmFs
dWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4g
YW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51
bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6
IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50
byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVuXG4g
IC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlzZnkg
dGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwg
Y29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAg
dmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBrZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFzcyA6
IGZhaWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07XG4g
IH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8v
IEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJl
dHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBo
ZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3
b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9u
KGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAw
O1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1
cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1
cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxs
eSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2ls
bCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhl
IGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAg
cmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChu
ID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3Qg
ZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBO
XG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBu
LCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlm
IChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAg
ICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhl
IGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5IHVz
ZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVy
blxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8udGFp
bCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGlj
ZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAgLy8g
VHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3QgPSBm
dW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7
XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZs
YXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93
LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7XG4g
ICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0
KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAg
IGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0FyZ3Vt
ZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5
IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZsYXR0
ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0gdmFs
dWUubGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hpbGUg
KGogPCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAg
ICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgrK10g
PSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICAv
LyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwg
b3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93
KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtcblxu
ICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4g
dGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkp
O1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBh
cnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2
ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBh
cyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0
ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkp
IHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7
XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVs
bCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtd
O1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlb
aV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBh
cnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkgfHwg
c2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9IGNv
bXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8uY29u
dGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtc
biAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBp
ZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFs
dWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFBy
b2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxl
bWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlvbiA9
IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRydWUs
IHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZl
cnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMuXG4g
IF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107
XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkg
PSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAg
IHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0ZW0p
KSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7
XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAg
ICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNl
IGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9u
bHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1h
aW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBm
bGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFy
cmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFs
dWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBp
bnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXgg
Z28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56aXAo
YXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBhY2Nl
cHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVt
ZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAg
ICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoIHx8
IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRl
eCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0g
Xy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUg
YXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJh
eXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRo
ZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1
ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9
IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7
XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4g
ICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxu
ICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNy
ZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5jdGlv
biBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
YXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGlj
YXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAg
ICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGlu
ZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAo
cHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAg
ICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBm
aXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3Rc
biAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5maW5k
TGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBh
IGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQg
d2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFp
biBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24o
YXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJh
dGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAgIHZh
ciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwgaGln
aCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAg
ICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBo
aWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRv
ciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0aW9u
c1xuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRl
ZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAg
IHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2Yg
aWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgICBp
ID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9
IGVsc2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAx
LCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlm
IChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZElu
ZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBp
ZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlk
eCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05hTik7
XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAg
IGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBs
ZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJl
dHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8v
IFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBp
biBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRo
ZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQg
b3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBz
ZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBf
LnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBf
LmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFp
bmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2
ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1l
bnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3Jh
bmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYg
KHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9
IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0
aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5n
ZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7
IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAg
fVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5j
dGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVy
IHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFs
IGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJvdW5k
ID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4
dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5j
KSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYg
PSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291
cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpKSBy
ZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1
bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJn
dW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1Kion
cyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0g
ZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMuYmlu
ZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2UuY2Fs
bChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3
IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgdmFy
IGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rp
b24oKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0
aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAgIHJl
dHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBj
cmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50
cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0
LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9u
IG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihm
dW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAg
ICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0
aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4g
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0g
PSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3Nb
aV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBh
cmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91
bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJv
dW5kO1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0
byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBu
YW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3Nc
biAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSBm
dW5jdGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwga2V5
O1xuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUg
cGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChv
Ympba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBNZW1v
aXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBfLm1l
bW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1bmN0
aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZhciBh
ZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBr
ZXkpO1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0g
ZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3Nd
O1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xu
ICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1p
bGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1
cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBhcmdz
ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0
KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4g
YWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZl
ciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24s
IHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2Vc
biAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0
bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2
ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlm
IHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2Us
IHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0
aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3
YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIg
dGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMp
IG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZp
b3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAgdGlt
ZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xu
ICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlmICgh
cHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4g
ICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250
ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5n
IDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtc
biAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVu
Yy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0g
YXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxp
bmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1h
aW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4g
IC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8g
YmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2ls
bCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxp
c2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBv
biB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5k
ZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1l
b3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9
IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuXG4g
ICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQgPSBz
ZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0
aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICByZXN1
bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91dCkg
Y29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAg
IHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9
IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2FsbE5v
dyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91dCA9
IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAg
cmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9IGFy
Z3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07
XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50
IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBy
dW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRl
IHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3JhcHBl
cikge1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAgLy8g
UmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAg
Xy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7
XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9u
IG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1cm4g
dmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVuY3Rp
b24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5s
ZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7
XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtc
biAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xu
ICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5j
dGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxs
LlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rp
b24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVy
bnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBp
bmNsdWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywgZnVu
Yykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgt
LXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMp
O1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0
dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0
ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5vbmNl
ID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8v
IC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0
ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFzRW51
bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycp
O1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2Yn
LCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJs
ZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9uIGNv
bGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBub25F
bnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1
Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25z
dHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3IgaXMg
YSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlmIChf
LmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJv
cCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVy
YWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9w
XSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAg
a2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZlIHRo
ZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRv
ICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5j
dGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlm
IChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107
XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNo
KGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0
Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8g
UmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5
cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107
XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2go
a2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3RO
b25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBS
ZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVz
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIg
bGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0g
b2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJl
dHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVu
dCBvZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMgYW4g
b2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkg
e1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0g
IF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAgICAg
IHJlc3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5ID0g
a2V5c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpb
Y3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVz
dWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tl
eSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBr
ZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZh
ciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9
XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFs
dWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5p
bnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtl
eXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlz
W2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNv
cnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5c
biAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4g
b2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkp
O1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVuZCBh
IGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0
KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8gQXNz
aWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBh
c3NlZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Rv
Y3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24p
XG4gIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xuXG4g
IC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBwcmVk
aWNhdGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtl
eXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAg
aWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAg
fTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRo
ZSBhbGxvd2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3QsIG9p
dGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0LCBp
dGVyYXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAg
aWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9i
aik7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICB9IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2Us
IDEpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0dXJu
IGtleSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAg
ICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBvZiB0
aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsb2NrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21pdCA9
IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9u
KGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4gICAg
fSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZhbHNl
LCBmYWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBr
ZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xu
ICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9O1xu
XG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4g
IF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENy
ZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9i
amVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRo
ZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3JlYXRl
ID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3Jl
YXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHByb3Bz
KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNs
b25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBfLmlz
QXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5cbiAg
Ly8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2Jq
LlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGlu
dG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25z
IG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0gZnVu
Y3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0
dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdp
dmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24ob2Jq
ZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0ga2V5
cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2
YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAh
PT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBy
ZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29u
IGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFj
aywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0g
LTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkg
YGVnYWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1o
YXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9
PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVz
ZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSBy
ZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBp
ZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNlb2Yg
XykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAg
ICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9
PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05hbWUp
IHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRhdGVz
LCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVj
dCBSZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3Ig
Y29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2Jq
ZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25k
aW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAg
ICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVy
biAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAg
ICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAg
IC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAhPT0g
K2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlz
IHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiArYSA9
PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0
IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBDb2Vy
Y2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMg
YXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0
aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRh
dGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgICBy
ZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUg
PT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlmICh0
eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNl
O1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90
IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20gZGlm
ZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3Rv
ciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5pc0Z1
bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9m
IGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBh
ICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAg
fVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBU
aGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBpcyBh
ZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBK
T2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4g
ICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMg
YW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgICBi
U3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4g
ICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5j
ZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVu
aXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkg
cmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgZmly
c3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2su
cHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBh
cmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8vIENv
bXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMg
bmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9
PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250
ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChsZW5n
dGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ssIGJT
dGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVl
cCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xuICAg
ICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVj
dHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5n
IGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSBy
ZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBj
b21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAgICAg
aWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2sp
KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0
IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2su
cG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8v
IFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVx
dWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIp
O1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5
P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0
aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwp
IHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2Jq
KSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5s
ZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtc
blxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEp
O1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRl
cyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlz
QXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9
PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFu
IG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0g
dHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAn
b2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczog
aXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1Jl
Z0V4cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmlu
ZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFtZSkg
e1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9T
dHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xuICB9
KTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJv
d3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0
YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMp
KSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8u
aGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5j
dGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4gb2xk
IHY4LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAgaWYg
KHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3Qn
KSB7XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdHlw
ZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJcyBh
IGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmop
KTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhlIG9u
bHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBmdW5j
dGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29iajtc
biAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xlYW4g
PSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFs
c2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07XG5c
biAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBn
aXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmop
IHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVu
Y3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJl
Y3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUp
LlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxs
ICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkg
RnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUu
anMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0
c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJz
Y29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9
IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBLZWVw
IHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBf
LmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5c
biAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0c2lk
ZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtcblxu
ICBfLm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuXG4g
IC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMg
YSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
cmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4gICAg
ICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGlj
YXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAg
Ly8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9u
KGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVy
biBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4g
ICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1l
cyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJy
YXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwg
Y29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0g
aXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJh
bmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9t
ID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1h
eCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZs
b29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBv
c3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50
ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3
IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGllcyBm
b3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAg
ICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAg
IFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVzY2Fw
ZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGlu
ZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2
YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0gZnVu
Y3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAgLy8g
UmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkXG4g
ICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAg
IHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAg
PSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAg
ICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJl
dHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdl
eHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRl
RXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2Fw
ZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlzIGEg
ZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29udGV4
dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBw
cm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHZv
aWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAg
ICAgIHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odmFs
dWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUg
YSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNz
aW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRl
ciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSAr
K2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xu
ICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxh
dGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGlu
Z3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9
IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xh
dGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xcc1xc
U10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5n
c2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBl
dmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1
YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBD
ZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUg
cHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAg
XCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHInOiAg
ICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAg
ICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxy
fFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKG1h
dGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4gIC8v
IEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1w
bGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFy
eSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBl
c2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0
dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50ZW1w
bGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICgh
c2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0
dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxu
ICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlh
IGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0aW5n
cy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRl
IHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNo
KS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxl
IHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0
ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4g
ICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9s
YXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRl
eCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBv
ZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291
cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBl
KF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAg
c291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6
X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJj
ZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAg
ICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBj
b3JyZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2Ug
Kz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBw
bGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZhcmlh
YmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuXG4g
ICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIg
K1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9
O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkge1xu
ICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2Jq
JywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291
cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlv
bihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAg
fTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNl
IGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJs
ZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50
ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtc
blxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBl
ZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJl
dHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG4g
IC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3
cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBw
ZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVu
Y3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2YXIg
cmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZS5f
Y2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBvd24g
Y3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBm
dW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFt
ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5wcm90
b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3Jh
cHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0
dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7
XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhl
IHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBB
cnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywg
J3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlv
bihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90
b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVk
O1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9
PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVs
ZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9
KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBl
ci5cbiAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkg
e1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25h
bWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5hcHBs
eSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBFeHRy
YWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAgXy5w
cm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtc
biAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9kcyB1
c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNP
TiBzdHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlwZS50
b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1
bmN0aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8g
QU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0
aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2VtYW50
aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9yIEFN
RCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVyc1xu
ICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNl
IGxpYnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGluIGEg
dGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQgcmVx
dWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAvLyBh
bm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC5c
biAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAg
IGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xu
ICAgIH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgogCiAvKioqLyB9KSwKIC8qIDQyMiAqLwpA
QCAtMTQ5MDI4LDcgKzE0OTAyOCw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAKICAg
ZnVuY3Rpb24gY29tYmluZShkZXN0LCBzcmMpIHsKICAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVh
Y2goZnVuY3Rpb24obmFtZSkgewotICAgICAgaWYgKF8uaGFzKEpTSElOVC5ibGFja2xpc3QsIG5h
bWUpKSByZXR1cm47CisgICAgICBpZiAoXy5oYXMoSlNISU5ULmJsb2NrbGlzdCwgbmFtZSkpIHJl
dHVybjsKICAgICAgIGRlc3RbbmFtZV0gPSBzcmNbbmFtZV07CiAgICAgfSk7CiAgIH0KQEAgLTE0
OTMxMyw3ICsxNDkzMTMsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAg
IGtleSA9IGtleS5zbGljZSgxKTsKICAgICAgICAgICB2YWwgPSBmYWxzZTsKIAotICAgICAgICAg
IEpTSElOVC5ibGFja2xpc3Rba2V5XSA9IGtleTsKKyAgICAgICAgICBKU0hJTlQuYmxvY2tsaXN0
W2tleV0gPSBrZXk7CiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRba2V5XTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICBwcmVkZWZba2V5XSA9ICh2YWwgPT09ICJ0cnVlIik7CkBAIC0x
NTQxMjAsNyArMTU0MTIwLDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsKICAgICAgIEpT
SElOVC5lcnJvcnMgPSBbXTsKICAgICAgIEpTSElOVC51bmRlZnMgPSBbXTsKICAgICAgIEpTSElO
VC5pbnRlcm5hbHMgPSBbXTsKLSAgICAgIEpTSElOVC5ibGFja2xpc3QgPSB7fTsKKyAgICAgIEpT
SElOVC5ibG9ja2xpc3QgPSB7fTsKICAgICAgIEpTSElOVC5zY29wZSA9ICIobWFpbikiOwogICAg
IH0KIApAQCAtMTU0MTQ5LDcgKzE1NDE0OSw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7
CiAKICAgICAgICAgaWYgKGl0ZW1bMF0gPT09ICItIikgewogICAgICAgICAgIHNsaWNlID0gaXRl
bS5zbGljZSgxKTsKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W3NsaWNlXSA9IHNsaWNlOwor
ICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rbc2xpY2VdID0gc2xpY2U7CiAgICAgICAgICAgLy8g
cmVtb3ZlIGZyb20gcHJlZGVmaW5lZCBpZiB0aGVyZQogICAgICAgICAgIGRlbGV0ZSBwcmVkZWZp
bmVkW3NsaWNlXTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE5NTgyOSw3ICsxOTU4MjksNyBAQCBm
dW5jdGlvbiBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobm9kZSkgCiAJdmFyIHJlZ2V4U2luZ2xl
RXNjYXBlID0gL1siJ1xcXGJcZlxuXHJcdF0vOwogCiAJdmFyIHJlZ2V4RGlnaXQgPSAvWzAtOV0v
OwotCXZhciByZWdleFdoaXRlbGlzdCA9IC9bICEjLSZcKC1cW1xdLX5dLzsKKwl2YXIgcmVnZXhB
bGxvd2xpc3QgPSAvWyAhIy0mXCgtXFtcXS1+XS87CiAKIAl2YXIganNlc2MgPSBmdW5jdGlvbihh
cmd1bWVudCwgb3B0aW9ucykgewogCQkvLyBIYW5kbGUgb3B0aW9ucwpAQCAtMTk2MDA0LDcgKzE5
NjAwNCw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSAKIAkJCQl9
CiAJCQl9CiAJCQlpZiAoIW9wdGlvbnMuZXNjYXBlRXZlcnl0aGluZykgewotCQkJCWlmIChyZWdl
eFdoaXRlbGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKKwkJCQlpZiAocmVnZXhBbGxvd2xpc3QudGVz
dChjaGFyYWN0ZXIpKSB7CiAJCQkJCS8vIEl04oCZcyBhIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0
ZXIgdGhhdCBpcyBub3QgYCJgLCBgJ2Agb3IgYFxgLAogCQkJCQkvLyBzbyBkb27igJl0IGVzY2Fw
ZSBpdC4KIAkJCQkJcmVzdWx0ICs9IGNoYXJhY3RlcjsKQEAgLTIwOTMzNCw3ICsyMDkzMzQsNyBA
QCB2YXIgX2dldEl0ZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1CiAKIGV4cG9ydHMuY2Fs
bCA9IGNhbGw7CiBleHBvcnRzLl9jYWxsID0gX2NhbGw7Ci1leHBvcnRzLmlzQmxhY2tsaXN0ZWQg
PSBpc0JsYWNrbGlzdGVkOworZXhwb3J0cy5pc0Jsb2NrbGlzdGVkID0gaXNCbG9ja2xpc3RlZDsK
IGV4cG9ydHMudmlzaXQgPSB2aXNpdDsKIGV4cG9ydHMuc2tpcCA9IHNraXA7CiBleHBvcnRzLnNr
aXBLZXkgPSBza2lwS2V5OwpAQCAtMjA5NDEwLDkgKzIwOTQxMCw5IEBAIGZ1bmN0aW9uIF9jYWxs
KGZucykgewogICByZXR1cm4gZmFsc2U7CiB9CiAKLWZ1bmN0aW9uIGlzQmxhY2tsaXN0ZWQoKSB7
Ci0gIHZhciBibGFja2xpc3QgPSB0aGlzLm9wdHMuYmxhY2tsaXN0OwotICByZXR1cm4gYmxhY2ts
aXN0ICYmIGJsYWNrbGlzdC5pbmRleE9mKHRoaXMubm9kZS50eXBlKSA+IC0xOworZnVuY3Rpb24g
aXNCbG9ja2xpc3RlZCgpIHsKKyAgdmFyIGJsb2NrbGlzdCA9IHRoaXMub3B0cy5ibG9ja2xpc3Q7
CisgIHJldHVybiBibG9ja2xpc3QgJiYgYmxvY2tsaXN0LmluZGV4T2YodGhpcy5ub2RlLnR5cGUp
ID4gLTE7CiB9CiAKIGZ1bmN0aW9uIHZpc2l0KCkgewpAQCAtMjA5NDIwLDcgKzIwOTQyMCw3IEBA
IGZ1bmN0aW9uIHZpc2l0KCkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGlmICh0aGlz
LmlzQmxhY2tsaXN0ZWQoKSkgeworICBpZiAodGhpcy5pc0Jsb2NrbGlzdGVkKCkpIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiAgIH0KIApAQCAtMjExMDc4LDcgKzIxMTA3OCw3IEBAIGZ1bmN0aW9uIHNo
b3VsZElnbm9yZUtleShrZXkpIHsKIAogICBpZiAoa2V5ID09PSAiZW50ZXIiIHx8IGtleSA9PT0g
ImV4aXQiIHx8IGtleSA9PT0gInNob3VsZFNraXAiKSByZXR1cm4gdHJ1ZTsKIAotICBpZiAoa2V5
ID09PSAiYmxhY2tsaXN0IiB8fCBrZXkgPT09ICJub1Njb3BlIiB8fCBrZXkgPT09ICJza2lwS2V5
cyIpIHJldHVybiB0cnVlOworICBpZiAoa2V5ID09PSAiYmxvY2tsaXN0IiB8fCBrZXkgPT09ICJu
b1Njb3BlIiB8fCBrZXkgPT09ICJza2lwS2V5cyIpIHJldHVybiB0cnVlOwogCiAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTIyMjc2OCw3ICsyMjI3NjgsNyBAQCBmdW5jdGlvbiBfaW50ZXJvcFJlcXVp
cmVXaWxkY2FyZChvYmopIHsgCiAKIGNvbnN0IGxpZmVjeWNsZU1ldGhvZHMgPSBuZXcgU2V0KFsi
Y29tcG9uZW50V2lsbFVubW91bnQiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiY29tcG9uZW50V2ls
bE1vdW50IiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJjb21wb25lbnRXaWxsVXBkYXRlIiwgImNv
bXBvbmVudERpZENhdGNoIiwgImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiXSk7CiAKLWNvbnN0
IHdoaXRlbGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250ZXh0IiwgInJl
ZnMiXSk7Citjb25zdCBhbGxvd2xpc3RlZFByb3BlcnRpZXMgPSBuZXcgU2V0KFsicHJvcHMiLCAi
Y29udGV4dCIsICJyZWZzIl0pOwogCiBmdW5jdGlvbiBnZXRJbml0aWFsUHJvcHMocmVhbG0sIGNv
bXBvbmVudFR5cGUpIHsKICAgbGV0IHByb3BzTmFtZSA9IG51bGw7CkBAIC0yMjI5MzgsNyArMjIy
OTM4LDcgQEAgZnVuY3Rpb24gZXZhbHVhdGVDbGFzc0NvbnN0cnVjdG9yKHJlYWxtLAogICAgIGxl
dCBpbnN0YW5jZSA9ICgwLCBfaW5kZXgyLkNvbnN0cnVjdCkocmVhbG0sIGNvbnN0cnVjdG9yRnVu
YywgW3Byb3BzLCBjb250ZXh0XSk7CiAgICAgKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGluc3Rh
bmNlIGluc3RhbmNlb2YgX2luZGV4Lk9iamVjdFZhbHVlKTsKICAgICBmb3IgKGxldCBbcHJvcGVy
dHlOYW1lXSBvZiBpbnN0YW5jZS5wcm9wZXJ0aWVzKSB7Ci0gICAgICBpZiAoIXdoaXRlbGlzdGVk
UHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkgeworICAgICAgaWYgKCFhbGxvd2xpc3RlZFBy
b3BlcnRpZXMuaGFzKHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaW5zdGFuY2VQcm9wZXJ0aWVz
LmFkZChwcm9wZXJ0eU5hbWUpOwogICAgICAgfQogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416903</attachid>
            <date>2021-01-02 15:10:07 -0800</date>
            <delta_ts>2021-01-02 15:11:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>test2.txt</filename>
            <type>text/plain</type>
            <size>1391702</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzExMjIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIxLTAxLTAyICBC
ZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbm9uLWluY2x1
c2l2ZSBsYW5ndWFnZSBmcm9tIEpldFN0cmVhbSAyLjAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3RyZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9y
LXBheWxvYWQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNwZWN0b3Iu
UmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2Zvcm1h
dFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuc3R5bGVGb3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRPTU5vZGUuV2ViSW5zcGVjdG9yLlJlc291cmNlLldlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLmlzQWxs
b3dsaXN0ZWRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUu
X2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuaXNXaGl0ZWxpc3RlZFByb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBKZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanM6
CisKIDIwMjAtMTItMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01vdGlvbk1hcmtdIEluY3JlYXNlIHRoZSB3YXJtLXVwIHRpbWUgZm9yIGVhY2ggc3Vi
LXRlc3QgZnJvbSAxMDBtcyB0byAxMDAwbXMKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9yLXBheWxvYWQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9hZC5qcwkocmV2
aXNpb24gMjcxMTIyKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9p
bnNwZWN0b3ItcGF5bG9hZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNTgwOSw5ICs1ODA5LDkgQEAg
ZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqLHRva2VuKQogZnVuY3Rpb24gaW50ZWdlckZvcm1h
dHRlcihvYmopCiB7bGV0IHZhbHVlPXR5cGVvZiBvYmoudmFsdWU9PT0ibnVtYmVyIj9vYmoudmFs
dWU6b2JqLmRlc2NyaXB0aW9uO3JldHVybiBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzLmQodmFs
dWUpO30KIHZhciBjdXJyZW50U3R5bGU9bnVsbDtmdW5jdGlvbiBzdHlsZUZvcm1hdHRlcihvYmop
Ci17Y3VycmVudFN0eWxlPXt9O3ZhciBidWZmZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpO2J1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIixvYmouZGVzY3JpcHRpb24pO2Zvcih2YXIg
aT0wO2k8YnVmZmVyLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBwcm9wZXJ0eT1idWZmZXIuc3R5bGVb
aV07aWYoaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KSkKK3tjdXJyZW50U3R5bGU9e307
dmFyIGJ1ZmZlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7YnVmZmVyLnNldEF0dHJp
YnV0ZSgic3R5bGUiLG9iai5kZXNjcmlwdGlvbik7Zm9yKHZhciBpPTA7aTxidWZmZXIuc3R5bGUu
bGVuZ3RoO2krKyl7dmFyIHByb3BlcnR5PWJ1ZmZlci5zdHlsZVtpXTtpZihpc0FsbG93bGlzdGVk
UHJvcGVydHkocHJvcGVydHkpKQogY3VycmVudFN0eWxlW3Byb3BlcnR5XT1idWZmZXIuc3R5bGVb
cHJvcGVydHldO319Ci1mdW5jdGlvbiBpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCitm
dW5jdGlvbiBpc0FsbG93bGlzdGVkUHJvcGVydHkocHJvcGVydHkpCiB7Zm9yKHZhciBwcmVmaXgg
b2ZbImJhY2tncm91bmQiLCJib3JkZXIiLCJjb2xvciIsImZvbnQiLCJsaW5lIiwibWFyZ2luIiwi
cGFkZGluZyIsInRleHQiXSl7aWYocHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXgpfHxwcm9wZXJ0
eS5zdGFydHNXaXRoKCItd2Via2l0LSIrcHJlZml4KSkKIHJldHVybiB0cnVlO30KIHJldHVybiBm
YWxzZTt9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVu
Y2htYXJrL2Jyb3dzZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2VyLmpzCShyZXZpc2lvbiAyNzExMjIpCisr
KyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVuY2htYXJrL2Jyb3dz
ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwMzg4LDE1ICsxMDM4OCwxNSBAQCB0cmF2ZXJzZS5y
ZW1vdmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHRyCiAgIHJldHVybiB0cmVlOwogfTsKIAotZnVu
Y3Rpb24gaGFzQmxhY2tsaXN0ZWRUeXBlKHBhdGgsIHN0YXRlKSB7CitmdW5jdGlvbiBoYXNCbG9j
a2xpc3RlZFR5cGUocGF0aCwgc3RhdGUpIHsKICAgaWYgKHBhdGgubm9kZS50eXBlID09PSBzdGF0
ZS50eXBlKSB7CiAgICAgc3RhdGUuaGFzID0gdHJ1ZTsKICAgICBwYXRoLnN0b3AoKTsKICAgfQog
fQogCi10cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlLCB0eXBlLCBibGFj
a2xpc3RUeXBlcykgewotICBpZiAoKDAsIF9pbmNsdWRlczIuZGVmYXVsdCkoYmxhY2tsaXN0VHlw
ZXMsIHRyZWUudHlwZSkpIHJldHVybiBmYWxzZTsKK3RyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlv
biAodHJlZSwgc2NvcGUsIHR5cGUsIGJsb2NrbGlzdFR5cGVzKSB7CisgIGlmICgoMCwgX2luY2x1
ZGVzMi5kZWZhdWx0KShibG9ja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwog
CiAgIGlmICh0cmVlLnR5cGUgPT09IHR5cGUpIHJldHVybiB0cnVlOwogCkBAIC0xMDQwNiw4ICsx
MDQwNiw4IEBAIHRyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2NvcGUKICAgfTsK
IAogICB0cmF2ZXJzZSh0cmVlLCB7Ci0gICAgYmxhY2tsaXN0OiBibGFja2xpc3RUeXBlcywKLSAg
ICBlbnRlcjogaGFzQmxhY2tsaXN0ZWRUeXBlCisgICAgYmxvY2tsaXN0OiBibG9ja2xpc3RUeXBl
cywKKyAgICBlbnRlcjogaGFzQmxvY2tsaXN0ZWRUeXBlCiAgIH0sIHNjb3BlLCBzdGF0ZSk7CiAK
ICAgcmV0dXJuIHN0YXRlLmhhczsKQEAgLTM2OTczLDcgKzM2OTczLDcgQEAgZnVuY3Rpb24gVHlw
ZWRBcnJheVNwZWNpZXNDcmVhdGUocmVhbG0sIAogdmFyIHByb21pc2VFeGlzdHMgPSB0eXBlb2Yg
UHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJzsKIAogLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi8K
LXZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDogZ2xv
YmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsYWNrbGlzdAordmFyIGdsb2JhbE9iamVj
dCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1k
aXNhYmxlLWxpbmUgaWQtYmxvY2tsaXN0CiAKIHZhciBzeW1ib2xFeGlzdHMgPSB0eXBlb2YgU3lt
Ym9sICE9PSAndW5kZWZpbmVkJzsKIHZhciBtYXBFeGlzdHMgPSB0eXBlb2YgTWFwICE9PSAndW5k
ZWZpbmVkJzsKQEAgLTExMzU4Nyw3ICsxMTM1ODcsNyBAQCBtb2R1bGUuZXhwb3J0cyA9ICJ7XCJ2
ZXJzaW9uXCI6MyxcInNvdXJjCiAvKiA0MDUgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0
IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJp
Z2h0IChjKSAyMDA2LTIwMTcgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0
LykuKi8gXG4vKiFcbldlYiBCdWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVy
L2U0MjZhOWFlNzE2N2M1ODA3YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBD
b3JlXG5cbmRlc2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtW
YWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9y
czogVGhlIE1vb1Rvb2xzIHByb2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZl
bG9wZXJzLylcblxuaW5zcGlyYXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGly
ZWQgYnkgW0Jhc2UuanNdKGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9i
YXNlLykgQ29weXJpZ2h0IChjKSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGlj
ZW5zZS5waHApXG4gIC0gU29tZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUu
anNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBT
dGVwaGVuc29uLCBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9t
aXQtbGljZW5zZS5waHApXG5cbnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVP
ZiwgaW5zdGFuY2VPZiwgTmF0aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZh
c2NyaXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDog
Q29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHVi
LmNvbS9rYW1pY2FuZS8pLiovXG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0
dmVyc2lvbjogJzEuNi4wJyxcblx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2Yzdj
YTUxMTRlZTk1ZTJiJ1xufTtcblxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2Yg
PSB0aGlzLnR5cGVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1
cm4gJ251bGwnO1xuXHRpZiAoaXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1p
bHkoKTtcblxuXHRpZiAoaXRlbS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MSkgcmV0dXJuICdlbGVtZW50Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4g
KC9cXFMvKS50ZXN0KGl0ZW0ubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7
XG5cdH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAo
J2NhbGxlZScgaW4gaXRlbSkgcmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4g
aXRlbSkgcmV0dXJuICdjb2xsZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtc
bn07XG5cbnZhciBpbnN0YW5jZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwg
b2JqZWN0KXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3Ry
dWN0b3IgPSBpdGVtLiRjb25zdHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAo
Y29uc3RydWN0b3Ipe1xuXHRcdGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1
ZTtcblx0XHRjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElF
OD4qL1xuXHRpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0
SUU4PiovXG5cdHJldHVybiBpdGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093
blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+
Ki9cbnZhciBlbnVtZXJhYmxlcyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0p
IGVudW1lcmFibGVzID0gbnVsbDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hh
c093blByb3BlcnR5JywgJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51
bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xu
ZnVuY3Rpb24gZm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRpZiAoZW51bWVyYWJsZXMpIGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTsp
e1xuXHRcdHZhciBrID0gZW51bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXkt
dmFsdWUsIHNvIG92ZXJsb2FkU2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1l
dGhvZCBmdW5jdGlvbiwgd2l0aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093
blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xu
XHR9XG59XG4vKjwvbHRJRTg+Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1
bmN0aW9uID0gdGhpcy5GdW5jdGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0
dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4g
ZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYg
KHVzZVBsdXJhbCB8fCB0eXBlb2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGlu
IGEpIHNlbGYuY2FsbCh0aGlzLCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRm
b3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9h
ZEdldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0
dXJuIGZ1bmN0aW9uKGEpe1xuXHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBh
ICE9ICdzdHJpbmcnKSBhcmdzID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MSkgYXJncyA9IGFyZ3VtZW50cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07
XG5cdFx0aWYgKGFyZ3Mpe1xuXHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlz
LCBhcmdzW2ldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMs
IGEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJv
dG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1
ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9
IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59
Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlO1xuXG5BcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVt
ID09IG51bGwpIHJldHVybiBbXTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAm
JiB0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8g
aXRlbSA6IHNsaWNlLmNhbGwoaXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicp
ID8gaXRlbSA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51
bWJlci5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0
KGl0ZW0pO1xuXHRyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xu
XG5TdHJpbmcuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xu
fTtcblxuXG5cbkZ1bmN0aW9uLmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20g
PSBOdW1iZXIuY29udmVydDtcblN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhp
ZGUsIHByb3RlY3RcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuJGhpZGRlbiA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cHJvdGVjdDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBl
ID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9
IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5
cGVbJ2lzJyArIG5hbWVdID0gdHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5c
dFx0XHRvYmplY3QucHJvdG90eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0
dXJuIGxvd2VyO1xuXHRcdFx0fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYg
KG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xu
XHRvYmplY3QuJGNvbnN0cnVjdG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3Ry
dWN0b3IgPSBvYmplY3Q7XG5cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9
IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rp
b24oaXRlbSl7XG5cdHJldHVybiAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9
PSAnbnVtYmVyJyAmJiB0b1N0cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScg
KTtcbn07XG5cbnZhciBob29rcyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdHZhciB0eXBlID0gdHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9v
a3NbdHlwZV0gfHwgKGhvb2tzW3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJl
dHVybjtcblxuXHR2YXIgaG9va3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAw
OyBpIDwgaG9va3MubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0
aWYgKHR5cGVPZihob29rKSA9PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1l
dGhvZCk7XG5cdFx0ZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5c
dHZhciBwcmV2aW91cyA9IHRoaXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0g
bnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRo
b2Q7XG5cblx0aWYgKHRoaXNbbmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVu
Y3Rpb24nKSBleHRlbmQuY2FsbCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1
cm4gbWV0aG9kLmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xu
fTtcblxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2Qg
JiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtc
blx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFt
ZV0gPSBtZXRob2Q7XG59O1xuXG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBs
ZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRl
cigpLFxuXG5cdGFsaWFzOiBmdW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50
LmNhbGwodGhpcywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9h
ZFNldHRlcigpLFxuXG5cdG1pcnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlz
KS5wdXNoKGhvb2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgn
VHlwZScsIFR5cGUpO1xuXG4vLyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9u
KG5hbWUsIG9iamVjdCwgbWV0aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVj
dCksXG5cdFx0cHJvdG90eXBlID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBv
YmplY3QgPSBuZXcgVHlwZShuYW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0g
bWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxu
XHRcdFx0Z2VuZXJpYyA9IG9iamVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5
XTtcblxuXHRcdGlmIChnZW5lcmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBl
ICYmIHByb3RvKSBvYmplY3QuaW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxu
XG5cdGlmIChpc1R5cGUpe1xuXHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5w
cm9wZXJ0eUlzRW51bWVyYWJsZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhv
ZCA9IGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFy
IGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxs
KHByb3RvdHlwZSwgcHJvdG90eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1c
blx0XHRcdGZvciAodmFyIGtleSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90
b3R5cGVba2V5XSwga2V5KTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxu
Zm9yY2UoJ1N0cmluZycsIFN0cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29u
Y2F0JywgJ2NvbnRhaW5zJywgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVv
dGUnLCAncmVwbGFjZScsICdzZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywg
J3N1YnN0cmluZycsICd0cmltJywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0Fy
cmF5JywgQXJyYXksIFtcblx0J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdp
bmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21h
cCcsICdzb21lJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1i
ZXInLCBOdW1iZXIsIFtcblx0J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0
cmluZycsICd0b1ByZWNpc2lvbidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBs
eScsICdjYWxsJywgJ2JpbmQnXG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rl
c3QnXG5dKSgnT2JqZWN0JywgT2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHkn
LCAnZGVmaW5lUHJvcGVydGllcycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93
blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRF
eHRlbnNpb25zJywgJ2lzRXh0ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScs
ICdpc0Zyb3plbidcbl0pKCdEYXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQg
PSBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9u
KCl7XG5cdHJldHVybiArKG5ldyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJv
b2xlYW4pO1xuXG4vLyBmaXhlcyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJv
dG90eXBlLiRmYW1pbHkgPSBmdW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAn
bnVtYmVyJyA6ICdudWxsJztcbn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJl
ci5leHRlbmQoJ3JhbmRvbScsIGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxv
b3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9y
RWFjaCwgZWFjaCwga2V5c1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0
Zm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5k
LCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFj
aDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRr
ZXlzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIg
ayBpbiBvYmplY3Qpe1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkg
a2V5cy5wdXNoKGspO1xuXHRcdH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RF
bnVtYmVyYWJsZUtleShvYmplY3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xu
XHRcdH0pO1xuXHRcdC8qPC9sdElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZv
ckVhY2g6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVj
dCkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5
XSwga2V5LCBvYmplY3QpO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9i
amVjdC5mb3JFYWNoO1xuXG5cbi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJn
aW5nIGFuZCBhcHBlbmRpbmdcblxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dp
dGNoICh0eXBlT2YoaXRlbSkpe1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUo
KTtcblx0XHRjYXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRl
ZmF1bHQ6IHJldHVybiBpdGVtO1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywg
ZnVuY3Rpb24oKXtcblx0dmFyIGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7
XG5cdHdoaWxlIChpLS0pIGNsb25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNs
b25lO1xufSk7XG5cbnZhciBtZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50
KXtcblx0c3dpdGNoICh0eXBlT2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0
XHRpZiAodHlwZU9mKHNvdXJjZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJj
ZVtrZXldLCBjdXJyZW50KTtcblx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUo
Y3VycmVudCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0g
Y3VycmVudC5jbG9uZSgpOyBicmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJl
bnQ7XG5cdH1cblx0cmV0dXJuIHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1l
cmdlOiBmdW5jdGlvbihzb3VyY2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmlu
ZycpIHJldHVybiBtZXJnZU9uZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJn
dW1lbnRzW2ldO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNl
LCBrZXksIG9iamVjdFtrZXldKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxu
XHRjbG9uZTogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3Ig
KHZhciBrZXkgaW4gb2JqZWN0KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5c
dFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xu
XHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgZXh0ZW5kZWQgPSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gZXh0ZW5kZWQpIG9yaWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0
XHRyZXR1cm4gb3JpZ2luYWw7XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5c
blsnT2JqZWN0JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1
bWVudHMnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4v
LyBVbmlxdWUgSURcblxudmFyIFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3Vu
aXF1ZUlEJywgZnVuY3Rpb24oKXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7
XG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBBcnJheSBQcm90b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJv
dmlkZXM6IEFycmF5XG5cbi4uLlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1
PiovXG5cdGV2ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgIWZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0
aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1
ZSA9IHRoaXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJl
c3VsdHMucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5c
dGluZGV4T2Y6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aCA+Pj4gMDtcblx0XHRmb3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxl
bmd0aCArIGZyb20pIDogZnJvbSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5c
blx0bWFwOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3Ro
ID4+PiAwLCByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxs
KGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0
fSxcblxuXHRzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1
cm4gaXRlbSAhPSBudWxsO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0
aG9kTmFtZSl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRc
dHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhv
ZE5hbWVdLmFwcGx5KGl0ZW0sIGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTog
ZnVuY3Rpb24oa2V5cyl7XG5cdFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlz
Lmxlbmd0aCwga2V5cy5sZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIG9ialtrZXlzW2ldXSA9IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRs
aW5rOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtl
eSBpbiBvYmplY3Qpe1xuXHRcdFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0
XHRcdHJlc3VsdFtrZXldID0gdGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07
XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHJlc3VsdDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0
cmV0dXJuIHRoaXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLmxlbmd0aCkgPyB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5c
dGdldFJhbmRvbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNb
TnVtYmVyLnJhbmRvbSgwLCB0aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5j
bHVkZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlz
LnB1c2goaXRlbSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsg
aSsrKSB0aGlzLmluY2x1ZGUoYXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGVyYXNlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGkt
LTspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0
aGlzLmxlbmd0aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgYXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0p
O1xuXHRcdFx0aWYgKHR5cGUgPT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJy
YXkuY29uY2F0KCh0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlw
ZSA9PSAnYXJndW1lbnRzJyB8fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5m
bGF0dGVuKHRoaXNbaV0pIDogdGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0
fSxcblxuXHRwaWNrOiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRo
aXNbaV07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5j
dGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRc
dHZhciByZ2IgPSB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVu
Z3RoID09IDEpIHZhbHVlICs9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAx
Nik7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAn
KSc7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggPCAzKSByZXR1cm4gbnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlz
WzNdID09IDAgJiYgIWFycmF5KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0g
W107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0
aGlzW2ldIC0gMCkudG9TdHJpbmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0g
MSkgPyAnMCcgKyBiaXQgOiBiaXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6
ICcjJyArIGhleC5qb2luKCcnKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTog
RnVuY3Rpb25cblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlr
ZSBjcmVhdGUsIGJpbmQsIHBhc3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiov
XG5cbkZ1bmN0aW9uLmV4dGVuZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5
IHtcblx0XHRcdFx0cmV0dXJuIGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50
KHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0
cmV0dXJuIHRoaXMuYXBwbHkoYmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRj
aCAoZSl7fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5c
dGJpbmQ6IGZ1bmN0aW9uKHRoYXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3Mg
PSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxs
LFxuXHRcdFx0RiA9IGZ1bmN0aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7
XG5cdFx0XHR2YXIgY29udGV4dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5c
dFx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBz
ZWxmLnByb3RvdHlwZTtcblx0XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0
dmFyIHJlc3VsdCA9ICghYXJncyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250
ZXh0KVxuXHRcdFx0XHQ6IHNlbGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdz
LmNvbmNhdChBcnJheS5zbGljZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0
XHRcdHJldHVybiBjb250ZXh0ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5c
dFx0cmV0dXJuIGJvdW5kO1xuXHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVu
Y3Rpb24oYXJncywgYmluZCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9
IG51bGwpIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigp
e1xuXHRcdFx0cmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRc
dH07XG5cdH0sXG5cblx0ZGVsYXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRy
ZXR1cm4gc2V0VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJp
bmQpLCBkZWxheSk7XG5cdH0sXG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwg
YmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBu
dWxsID8gW10gOiBhcmdzKSwgYmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBOdW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQ
cm90b3R5cGVzIGxpa2UgbGltaXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVy
XG5cbi4uLlxuKi9cblxuTnVtYmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1p
biwgbWF4KXtcblx0XHRyZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtc
blx0fSxcblxuXHRyb3VuZDogZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBN
YXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVj
aXNpb24gOiAwKTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHBy
ZWNpc2lvbjtcblx0fSxcblxuXHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpczsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxu
XG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5c
dH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlz
LCBiYXNlIHx8IDEwKTtcblx0fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVz
Jyk7XG5cbihmdW5jdGlvbihtYXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNo
KGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNh
dChBcnJheS5jb252ZXJ0KGFyZ3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVt
ZW50KG1ldGhvZHMpO1xuXG59KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFu
MicsICdjZWlsJywgJ2NvcycsICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAn
cG93JywgJ3NpbicsICdzcXJ0JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNl
LCBjYXBpdGFsaXplLCB0ZXN0LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4u
LlxuKi9cblxuU3RyaW5nLmltcGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1
bmN0aW9uKHN0cmluZywgaW5kZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcyku
c2xpY2UoaW5kZXgpIDogU3RyaW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxc
blx0Ly88LyFFUzY+XG5cblx0dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0
dXJuICgodHlwZU9mKHJlZ2V4KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycg
KyByZWdleCwgcGFyYW1zKSkudGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xu
XHR9LFxuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVw
bGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1h
dGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9
KTtcblx0fSxcblxuXHRoeXBoZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0
aGlzKS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCct
JyArIG1hdGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRj
YXBpdGFsaXplOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgv
XFxiW2Etel0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJD
YXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0p
L2csICdcXFxcJDEnKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0
dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8o
XFx3ezEsMn0pKFxcd3sxLDJ9KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4
LnNsaWNlKDEpLmhleFRvUmdiKGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1
bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwz
fS9nKTtcblx0XHRyZXR1cm4gKHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0
fSxcblxuXHRzdWJzdGl0dXRlOiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyks
IGZ1bmN0aW9uKG1hdGNoLCBuYW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xc
XFwnKSByZXR1cm4gbWF0Y2guc2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAh
PSBudWxsKSA/IG9iamVjdFtuYW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBCcm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmpl
Y3QuIENvbnRhaW5zIEJyb3dzZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQs
IGFuZCB0aGUgQnJvd3NlciBIYXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFtBcnJheSwgRnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczog
W0Jyb3dzZXIsIFdpbmRvdywgRG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2lu
ZG93ID0gdGhpcztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEg
PSB1YS50b0xvd2VyQ2FzZSgpO1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRv
TG93ZXJDYXNlKCkgOiAnJyk7XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdl
IFVBLCBzbyBuZWVkIHRvIGNoZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tp
bmcgaWYgaXQncyBjaHJvbWUuXG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0o
W1xcd1xcZFxcLl0rKS8pO1xuXHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8
aWV8ZmlyZWZveHxjaHJvbWV8dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxk
XFwuXSspPy4qPyhzYWZhcml8KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xc
ZFxcLl0rKXwkKS8pIHx8IFtudWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFd
ID09ICd0cmlkZW50Jyl7XG5cdFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0g
PSBVQVs0XTtcblx0fSBlbHNlIGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdj
aHJvbWUnO1xuXHR9XG5cblx0cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8p
ID8gJ2lvcycgOiAodWEubWF0Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21h
Y3x3aW58bGludXgvKSB8fCBbJ290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicp
IHBsYXRmb3JtID0gJ3dpbmRvd3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlv
bi5wcm90b3R5cGUuZXh0ZW5kLFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFb
M10gOiBVQVsxXSxcblx0XHR2ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYm
IFVBWzRdKSA/IFVBWzRdIDogVUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xu
fTtcblxudmFyIEJyb3dzZXIgPSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFn
ZW50LCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYg
ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9j
dW1lbnRNb2RlO1xufVxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBh
dGg6ICEhKGRvY3VtZW50LmV2YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxc
blx0XHRxdWVyeTogISEoZG9jdW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2lu
ZG93LkpTT04pXG5cdH0sXG5cdHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3Rc
blxuQnJvd3Nlci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwyID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1M
Mi5YTUxIVFRQJyk7XG5cdH07XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0
dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0
dXJuIFhNTEhUVFA7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJu
IE1TWE1MMjtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hN
TDtcblx0fSk7XG5cbn0pKCk7XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5S
ZXF1ZXN0KTtcblxuXG5cbi8vIFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0
aW9uKHRleHQpe1xuXHRpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNT
Y3JpcHQpe1xuXHRcdHdpbmRvdy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZh
ciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQu
c2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0
ID0gdGV4dDtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9j
dW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtc
blxuU3RyaW5nLmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZh
ciBzY3JpcHRzID0gJyc7XG5cdHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+
KFtcXHNcXFNdKj8pPFxcL3NjcmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2Ny
aXB0cyArPSBjb2RlICsgJ1xcbic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMg
PT09IHRydWUpIEJyb3dzZXIuZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMp
ID09ICdmdW5jdGlvbicpIGV4ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7
XG5cbi8vIFdpbmRvdywgRG9jdW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDog
dGhpcy5Eb2N1bWVudCxcblx0V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5F
bGVtZW50LFxuXHRFdmVudDogdGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4k
Y29uc3RydWN0b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4k
ZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWly
cm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0p
O1xuXG50aGlzLkRvY3VtZW50ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0Rv
Y3VtZW50JywgZnVuY3Rpb24oKXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNv
bnZlcnQoJ2RvY3VtZW50JykuaGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFt
ZSwgbWV0aG9kKXtcblx0ZG9jdW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQu
aHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9j
dW1lbnQuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5c
bmlmIChkb2N1bWVudC5leGVjQ29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J0JhY2tncm91bmRJbWFnZUNhY2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4v
KjxsdElFOT4qL1xuaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5l
cil7XG5cdHZhciB1bmxvYWRFdmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVu
dCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50
Lmh0bWwgPSBkb2N1bWVudC53aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93
ID0gZG9jdW1lbnQgPSBudWxsO1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcs
IHVubG9hZEV2ZW50KTtcbn1cblxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxl
Y3Q+Lm9wdGlvbnMgKHJlZmVycyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5j
b252ZXJ0O1xudHJ5IHtcblx0YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59
IGNhdGNoIChlKXtcblx0QXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0
eXBlb2YgaXRlbSAhPSAnc3RyaW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBl
T2YoaXRlbSkgIT0gJ2FycmF5Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9
IG5ldyBBcnJheShpKTtcblx0XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0
XHRcdHJldHVybiBhcnJheTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0
fTtcblxuXHR2YXIgcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJv
dG90eXBlLnNsaWNlO1xuXHRbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2go
ZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRB
cnJheVtuYW1lXSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShB
cnJheS5jb252ZXJ0KGl0ZW0pLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5c
dH0pO1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENs
YXNzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2ls
eSBjcmVhdGluZywgZXh0ZW5kaW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJp
bmcsIEZ1bmN0aW9uLCBOdW1iZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG52YXIgQ2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywg
ZnVuY3Rpb24ocGFyYW1zKXtcblx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBh
cmFtcyA9IHtpbml0aWFsaXplOiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9u
KCl7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBu
dWxsO1xuXHRcdHZhciB2YWx1ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXpl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMu
Y2FsbGVyID0gbnVsbDtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxl
bWVudChwYXJhbXMpO1xuXG5cdG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3Rv
dHlwZS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBw
YXJlbnQgPSBmdW5jdGlvbigpe1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9y
KCdUaGUgbWV0aG9kIFwicGFyZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUg
PSB0aGlzLiRjYWxsZXIuJG5hbWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5w
YXJlbnQsXG5cdFx0cHJldmlvdXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0g
OiBudWxsO1xuXHRpZiAoIXByZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCIn
ICsgbmFtZSArICdcIiBoYXMgbm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xu
XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0
XHR2YXIgRiA9IGZ1bmN0aW9uKCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0
XHRcdFx0b2JqZWN0W2tleV0gPSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0
Y2FzZSAnYXJyYXknOiBvYmplY3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1c
blx0fVxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBr
ZXksIG1ldGhvZCl7XG5cdGlmIChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmln
aW47XG5cdHZhciB3cmFwcGVyID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0
ZWQgJiYgdGhpcy4kY2FsbGVyID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBc
IicgKyBrZXkgKyAnXCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhp
cy5jYWxsZXIsIGN1cnJlbnQgPSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJy
ZW50OyB0aGlzLiRjYWxsZXIgPSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNh
bGxlciA9IGNhbGxlcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBz
ZWxmLCAkb3JpZ2luOiBtZXRob2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59
O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYg
KENsYXNzLk11dGF0b3JzLmhhc093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3Mu
TXV0YXRvcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkg
cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtc
blx0XHRpZiAodmFsdWUuJGhpZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVb
a2V5XSA9IChyZXRhaW4pID8gdmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVs
c2Uge1xuXHRcdE9iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1c
blxuXHRyZXR1cm4gdGhpcztcbn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNz
KXtcblx0a2xhc3MuJHByb3RvdHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNz
O1xuXHRkZWxldGUga2xhc3MuJHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5D
bGFzcy5pbXBsZW1lbnQoJ2ltcGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtc
blxuQ2xhc3MuTXV0YXRvcnMgPSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0
XHR0aGlzLnBhcmVudCA9IHBhcmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNl
KHBhcmVudCk7XG5cdH0sXG5cblx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFy
cmF5LmNvbnZlcnQoaXRlbXMpLmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFu
Y2UgPSBuZXcgaXRlbTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50
LmNhbGwodGhpcywga2V5LCBpbnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0
fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIFV0aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBp
bnRvIHlvdXIgb3duIENsYXNzZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9u
IHRhc2tzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4u
Li5cbiovXG5cbihmdW5jdGlvbigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQk
Y2hhaW46IFtdLFxuXG5cdGNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVu
ZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNhbGxDaGFpbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkg
PyB0aGlzLiRjaGFpbi5zaGlmdCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0
fSxcblxuXHRjbGVhckNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9u
KHN0cmluZyl7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9u
KGZ1bGwsIGZpcnN0KXtcblx0XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59
O1xuXG50aGlzLkV2ZW50cyA9IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRk
RXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9u
KHR5cGUpO1xuXG5cdFx0XG5cblx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRz
W3R5cGVdIHx8IFtdKS5pbmNsdWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFs
ID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9u
KGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlw
ZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6
IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7
XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykg
cmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRz
LmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhp
cywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlz
LiRldmVudHNbdHlwZV07XG5cdFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0
dmFyIGluZGV4ID0gZXZlbnRzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBk
ZWxldGUgZXZlbnRzW2luZGV4XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0
eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0
aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztc
blx0XHR9XG5cdFx0aWYgKGV2ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRm
b3IgKHR5cGUgaW4gdGhpcy4kZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9
IHR5cGUpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0
XHRcdGZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0
XHR0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5c
dHNldE9wdGlvbnM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMg
PSBPYmplY3QubWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1
bWVudHMpKTtcblx0XHRpZiAodGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlv
bnMpe1xuXHRcdFx0aWYgKHR5cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwg
ISgvXm9uW0EtWl0vKS50ZXN0KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVu
dChvcHRpb24sIG9wdGlvbnNbb3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25d
O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0t
LVxuXG5uYW1lOiBDbGFzcy5UaGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGls
aXR5IENsYXNzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0
byBtYWtlIHRoZW0gXCJ0aGVuYWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVM
RklMTEVEID0gMSxcblx0U1RBVEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFz
cy5UaGVuYWJsZSA9IG5ldyBDbGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJ
TkcsXG5cdCR0aGVuYWJsZVJlc3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxc
blxuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xu
XHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dFRoZW5hYmxlU3RhdGU6IGZ1bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0
YXRlKXtcblx0XHRcdGNhc2UgU1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5n
JztcblxuXHRcdFx0Y2FzZSBTVEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmls
bGVkJztcblxuXHRcdFx0Y2FzZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWpl
Y3RlZCc7XG5cdFx0fVxuXHR9LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7
XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQp
e1xuXHRcdGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVk
ID0gJ0lkZW50aXR5Jztcblx0XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicp
IG9uUmVqZWN0ZWQgPSAnVGhyb3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFi
bGUoKTtcblxuXHRcdHRoaXMuJHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFi
bGU6IHRoZW5hYmxlLFxuXHRcdFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0
cmVqZWN0SGFuZGxlcjogb25SZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5h
YmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxu
XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVq
ZWN0ZWQpe1xuXHRcdHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxu
fSk7XG5cblRoZW5hYmxlLmV4dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHR2YXIgdGhlbmFibGU7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRc
dFx0dGhlbmFibGUgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcg
VGhlbmFibGUoKTtcblx0XHRcdHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFz
b24pO1xuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rp
b25zXG5cbmZ1bmN0aW9uIHJlc29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09
IHZhbHVlKXtcblx0XHRcdHJlamVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8g
cmVzb2x2ZSBhIHRoZW5hYmxlIHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVl
ICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0
aW9uJykpe1xuXHRcdFx0dmFyIHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFs
dWUudGhlbjtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVu
YWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0XHRcdHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihm
dW5jdGlvbigpe1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0
XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRc
dFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQg
PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtc
blx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0
aW9uKHJlYXNvbil7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0
XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFi
bGUsIHJlYXNvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRc
dFx0XHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAo
IXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0
XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUs
IHZhbHVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwg
dmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1
ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPSBTVEFURV9GVUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1c
bn1cblxuZnVuY3Rpb24gcmVqZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IHJlYXNvbjtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JF
SkVDVEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0
KHRoZW5hYmxlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5E
SU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFj
dCh0aGVuYWJsZSl7XG5cdHZhciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRc
dHJlc3VsdCA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVu
YWJsZS4kdGhlbmFibGVSZWFjdGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNU
QVRFX0ZVTEZJTExFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5c
dFx0dHlwZSA9ICdmdWxmaWxsSGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVf
UkVKRUNURUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5
cGUgPSAncmVqZWN0SGFuZGxlcic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFu
ZGxlLnBhc3MoW3Jlc3VsdCwgcmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9u
IGhhbmRsZShyZXN1bHQsIHJlYWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0g
cmVhY3Rpb25zLmxlbmd0aDsgaSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rp
b25zW2ldLFxuXHRcdFx0aGFuZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRs
ZXIgPT09ICdJZGVudGl0eScpe1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVz
dWx0KTtcblx0XHR9IGVsc2UgaWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWpl
Y3QocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5c
dFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlm
ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRp
Y2sgPT09ICdmdW5jdGlvbicpe1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2Ug
aWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJ
bW1lZGlhdGU7XG59IGVsc2Uge1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1l
b3V0KGZuLCAwKTtcblx0fTtcbn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3Rc
blxuZGVzY3JpcHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNo
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJz
ZXQ6IGZ1bmN0aW9uKG9iamVjdCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBr
ID0ga2V5c1tpXTtcblx0XHRcdGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtr
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihv
YmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0g
T2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBm
bi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biByZXN1bHRzO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVj
dCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZh
ciBrZXkgPSBrZXlzW2ldLCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwo
YmluZCwgdmFsdWUsIGtleSwgb2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZu
LCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2
YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ld
O1xuXHRcdFx0aWYgKCFmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9
IGtleXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0
dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2td
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0
aW9uKG9iamVjdCl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9
LFxuXG5cdGtleU9mOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9i
amVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsg
aSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09
PSB2YWx1ZSkgcmV0dXJuIGtleTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0
Y29udGFpbnM6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5
T2Yob2JqZWN0LCB2YWx1ZSkgIT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5j
dGlvbihvYmplY3QsIGJhc2Upe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2Jq
ZWN0LmVhY2gob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBr
ZXkgPSBiYXNlICsgJ1snICsga2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3
aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJy
YXknOlxuXHRcdFx0XHRcdHZhciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rp
b24odmFsLCBpKXtcblx0XHRcdFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRc
dFx0XHRcdHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklD
b21wb25lbnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5
U3RyaW5nLnB1c2gocmVzdWx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5q
b2luKCcmJyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5QYXJzZXJcbmRlc2NyaXB0aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5w
cm92aWRlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBh
cnNlZCxcblx0c2VwYXJhdG9ySW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQs
XG5cdGNhY2hlID0ge30sXG5cdHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xc
XFwvZztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5c
dGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5T
bGljayA9PT0gdHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBl
eHByZXNzaW9uKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFp
c1JldmVyc2VkO1xuXHR2YXIgY3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNo
ZSA6IGNhY2hlO1xuXHRpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVu
dENhY2hlW2V4cHJlc3Npb25dO1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0
ZXhwcmVzc2lvbnM6IFtdLFxuXHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5j
dGlvbigpe1xuXHRcdFx0cmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07
XG5cdHNlcGFyYXRvckluZGV4ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNz
aW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVu
Z3RoID0gcGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtw
YXJzZWQucmF3XSA9IChyZXZlcnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xu
XG52YXIgcmV2ZXJzZUNvbWJpbmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNv
bWJpbmF0b3IgPT09ICchJykgcmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0g
JyAnKSByZXR1cm4gJyEnO1xuXHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0
dXJuIGNvbWJpbmF0b3IucmVwbGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNv
bWJpbmF0b3I7XG59O1xuXG52YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2
YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0g
MDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lv
bnNbaV07XG5cdFx0dmFyIGxhc3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjog
cmV2ZXJzZUNvbWJpbmF0b3IoZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGog
PSAwOyBqIDwgZXhwLmxlbmd0aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRc
dFx0aWYgKCFjZXhwLnJldmVyc2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0g
JyAnO1xuXHRcdFx0Y2V4cC5jb21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0
XHRcdGRlbGV0ZSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZl
cnNlKCkucHVzaChsYXN0KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBl
c2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAo
YykgMjAwNy0yMDA4IFN0ZXZlbiBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9y
ZWdleC94cmVnZXhwLz4gTUlUIExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtc
XF17fSgpKis/LlxcXFxeJHwsI1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAn
XFxcXCcgKyBtYXRjaDtcblx0fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8q
XG4jIS91c3IvYmluL2VudiBydWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1Yigv
XFwoXFw/eFxcKXxcXHMrIy4qJHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIo
P3gpXig/OlxcXG5cdCAgXFxcXHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJh
dG9yICAgICAgICAgIFxcblxcXG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAg
ICMgQ29tYmluYXRvciAgICAgICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAg
ICAgICAgICAjIENvbWJpbmF0b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4r
IHwgXFxcXCogKSAgICAgIyBUYWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8
dW5pY29kZT4rICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxc
XC4gICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxu
XHR8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxc
blxcXG5cdFxcXFxbICBcXFxuXHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0
XHRcXFxccyogKFsqXiQhfnxdPz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRc
dFx0XHRcdChbXFxcIiddPykoLio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxc
blx0XHQpPyAgXFxcXHMqICBcXFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8
dW5pY29kZT4rICkoPzpcXFxuXHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwx
Ml0qKVxcXFwxMil8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxc
blx0KT9cXFxuXHQpXCJcbiovXG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJp
bmF0b3I+KylcXFxccyp8KFxcXFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2Rl
PispfFxcXFwuKDx1bmljb2RlPispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihb
Kl4kIX58XT89KSg/OlxcXFxzKig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxd
KD8hXFxcXF0pfCg6KykoPHVuaWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwx
M10qKVxcXFwxMyl8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQu
cmVwbGFjZSgvPGNvbWJpbmF0b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9
XFxcXDs8LycpICsgJ10nKVxuXHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxc
dTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgv
PHVuaWNvZGUxPi9nLCAnKD86WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG4pO1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5c
dHNlcGFyYXRvcixcblx0Y29tYmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRh
Z05hbWUsXG5cdGlkLFxuXHRjbGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1
dGVPcGVyYXRvcixcblx0YXR0cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBz
ZXVkb01hcmtlcixcblx0cHNldWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFz
c1F1b3RlZFZhbHVlLFxuXHRwc2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8
IHNlcGFyYXRvckluZGV4ID09PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJh
dG9ySW5kZXhdID0gW107XG5cdFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFy
YXRvcikgcmV0dXJuICcnO1xuXHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNo
aWxkcmVuIHx8IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21i
aW5hdG9yIHx8ICcgJztcblx0XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNz
aW9uc1tzZXBhcmF0b3JJbmRleF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0
b3JbY29tYmluYXRvckluZGV4XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvcklu
ZGV4XS5yZXZlcnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xu
XHRcdGN1cnJlbnRTZXBhcmF0b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNv
bWJpbmF0b3IsIHRhZzogJyonfTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2Vk
LmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0
YWdOYW1lKXtcblx0XHRjdXJyZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNj
YXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlk
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0
XHRjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRp
ZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtd
O1xuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0
Y3VycmVudFBhcnNlZC5jbGFzc2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0
XHRcdHJlZ2V4cDogbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05h
bWUpICsgJyhcXFxcc3wkKScpXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7
XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NR
dW90ZWRWYWx1ZTtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBz
ZXVkb0NsYXNzVmFsdWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYg
KCFjdXJyZW50UGFyc2VkLnBzZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRc
dGN1cnJlbnRQYXJzZWQucHNldWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVw
bGFjZShyZVVuZXNjYXBlLCAnJyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0
XHRcdHR5cGU6IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdc
blx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5
ID0gYXR0cmlidXRlS2V5LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZh
bHVlID0gKGF0dHJpYnV0ZVZhbHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxu
XHRcdHZhciB0ZXN0LCByZWdleHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtc
blx0XHRcdGNhc2UgJ149JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBl
UmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAn
JD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmli
dXRlVmFsdWUpICsnJCcgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAg
PSBuZXcgUmVnRXhwKCAnKF58XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAr
JyhcXFxcc3wkKScgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVn
RXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICAp
OyBicmVhaztcblx0XHRcdGNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnKj0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZh
bHVlICYmIHZhbHVlLmluZGV4T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVh
aztcblx0XHRcdGNhc2UgJyE9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJl
dHVybiBhdHRyaWJ1dGVWYWx1ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVm
YXVsdCAgIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7
XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15b
KiReXT0kLykudGVzdChhdHRyaWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRc
dFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRc
dH07XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5h
dHRyaWJ1dGVzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRc
dFx0a2V5OiBhdHRyaWJ1dGVLZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3Is
XG5cdFx0XHR2YWx1ZTogYXR0cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7
XG5cblx0fVxuXG5cdHJldHVybiAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9
ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0cmV0dXJuIHBhcnNlKGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhw
ID0gZXNjYXBlUmVnRXhwO1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztc
blxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcp
ID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5GaW5kZXJcbmRlc2NyaXB0aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVu
Z2luZS5cbnByb3ZpZGVzOiBTbGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4u
LlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNo
ZSA9IHt9LFxuXHR0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZl
YXR1cmUgLyBCdWcgZGV0ZWN0aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZu
KXtcblx0cmV0dXJuICgvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycg
KyBmbik7XG59O1xuXG5sb2NhbC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJu
ICghIWRvY3VtZW50LnhtbFZlcnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5n
LmNhbGwoZG9jdW1lbnQpID09ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVu
dC5ub2RlVHlwZSA9PSA5ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAn
SFRNTCcpO1xufTtcblxubG9jYWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5c
blx0Ly8gY29udmVydCBlbGVtZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlm
IGRvY3VtZW50IGNhbm5vdCBiZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxu
XHR2YXIgbm9kZVR5cGUgPSBkb2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkp
OyAvLyBkb2N1bWVudFxuXHRlbHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5v
d25lckRvY3VtZW50OyAvLyBub2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9j
dW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5c
dC8vIGNoZWNrIGlmIGl0J3MgdGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50
ID09PSBkb2N1bWVudCkgcmV0dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0
Ly8gY2hlY2sgaWYgd2UgaGF2ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1l
bnQgYmVmb3JlXG5cblx0dmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0
cm9vdFVpZCA9IHRoaXMuZ2V0VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXND
YWNoZVtyb290VWlkXSxcblx0XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9y
IChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tm
ZWF0dXJlXTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJl
c0NhY2hlW3Jvb3RVaWRdID0ge307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1
cmVzLmlzWE1MRG9jdW1lbnQgPSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5i
cm9rZW5TdGFyR0VCVE5cblx0PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZl
YXR1cmVzLmlkR2V0c05hbWVcblx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5HRUJDTlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3Vt
ZW50XG5cdD0gZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0
dmFyIHN0YXJTZWxlY3RzQ2xvc2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNl
Y29uZENsYXNzTmFtZUdFQkNOLCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJy
b2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191
bmlxdWVpZCc7XG5cdHZhciB0ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
O1xuXG5cdHZhciB0ZXN0Um9vdCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2JvZHknKVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0
ZXN0Tm9kZSk7XG5cblx0Ly8gb24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0
RWxlbWVudHNCeUlkIGRvZXNudCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJzxhIGlkPVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1M
RG9jdW1lbnQgPSAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7
fVxuXG5cdGlmIChmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZv
ciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3RO
b2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2Vs
ZWN0c0NvbW1lbnRzID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3Ro
ID4gMSk7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikg
Zm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5
IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0
ZWQgPSB0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVj
dHNDbG9zZWQgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0u
bm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZl
YXR1cmVzLmJyb2tlblN0YXJHRUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVj
dHNDbG9zZWQ7XG5cblx0XHQvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5z
dGVhZCBvZiBqdXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5c
dFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydc
Ij48L2E+PGIgaWQ9XCInKyBpZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFt
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtc
blx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSl7XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNo
ZXMgcmVzdWx0c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxh
IGNsYXNzPVwiZlwiPjwvYT48YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmly
c3RDaGlsZC5jbGFzc05hbWUgPSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFz
c05hbWUgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAy
KTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50
c0J5Q2xhc3NOYW1lIGRvZXNudCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJz
dCBvbmVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFz
cz1cImFcIj48L2E+PGEgY2xhc3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNv
bmRDbGFzc05hbWVHRUJDTiA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJyku
bGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9r
ZW5HRUJDTiA9IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xh
c3NOYW1lR0VCQ047XG5cdFx0fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwp
e1xuXHRcdFx0Ly8gSUUgOCByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9y
IHF1ZXJ5U2VsZWN0b3JBbGwoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5c
dFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3Rl
ZCA9IHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3Rh
clNlbGVjdHNDbG9zZWRRU0EgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2Vs
ZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRo
IG1peGVkY2FzZSBvbiBxdWlya3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5p
bm5lckhUTUwgPSAnPGEgY2xhc3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuTWl4ZWRDYXNlUVNBID0gIXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5n
dGg7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9u
dCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkg
e1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVk
PVwic2VsZWN0ZWRcIj5hPC9vcHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuQ2hlY2tlZFFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxl
bmd0aCA9PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMg
aW5jb3JyZWN0IHJlc3VsdHMgZm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNl
bGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEg
Y2xhc3M9XCJcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVR
U0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAh
PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBh
IGZvcm0gaGFzIGFuIGlucHV0IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMg
YSByZWZlcmVuY2UgdG8gdGhlIGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8Zm9ybSBhY3Rpb249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4n
O1xuXHRcdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxk
LmdldEF0dHJpYnV0ZSgnYWN0aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0
XHQvLyBuYXRpdmUgbWF0Y2hlc1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRp
dmVNYXRjaGVzU2VsZWN0b3IgPSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVj
dG9yIHx8Ki8gcm9vdC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2Vs
ZWN0b3I7XG5cdFx0aWYgKGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0
XHRcdC8vIGlmIG1hdGNoZXNTZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRh
eGVzIHdlIGNhbiB1c2UgaXRcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5j
YWxsKHJvb3QsICc6c2xpY2snKTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ciA9IG51bGw7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Qu
c2xpY2tfZXhwYW5kbyA9IDE7XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRm
ZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZl
YXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3Zl
Q2hpbGQodGVzdE5vZGUpO1xuXHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxs
O1xuXG5cdC8vIGdldEF0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0
dXJlcy5pc0hUTUxEb2N1bWVudCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0
aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNb
bmFtZV07XG5cdFx0aWYgKG1ldGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZh
ciBhdHRyaWJ1dGVOb2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVy
biAoYXR0cmlidXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0g
OiBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVH
ZXR0ZXJzW25hbWVdO1xuXHRcdHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDog
bm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuaGFzQXR0cmlidXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5o
YXNBdHRyaWJ1dGUpKSA/IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5v
ZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1
dGUpe1xuXHRcdG5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRy
ZXR1cm4gISEobm9kZSAmJiAobm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0
fTtcblxuXHQvLyBjb250YWluc1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlu
cyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIg
bmF0aXZlUm9vdENvbnRhaW5zID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRh
aW5zKSxcblx0XHRuYXRpdmVEb2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05h
dGl2ZUNvZGUoZG9jdW1lbnQuY29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5h
dGl2ZVJvb3RDb250YWlucyAmJiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNv
bnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDog
KG5hdGl2ZVJvb3RDb250YWlucyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlv
bihjb250ZXh0LCBub2RlKXtcblx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24g
ZG9jdW1lbnQuXG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBk
b2N1bWVudCkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhu
b2RlKTtcblx0fSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVu
Y3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEo
Y29udGV4dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0
aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9
PT0gY29udGV4dCkgcmV0dXJuIHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVu
dE5vZGUpKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIg
c29ydGluZ1xuXHQvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5c
blx0ZmVhdHVyZXMuZG9jdW1lbnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24g
fHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9
IDogKCdzb3VyY2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEu
c291cmNlSW5kZXggfHwgIWIuc291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNv
dXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkg
PyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRv
Y3VtZW50KSByZXR1cm4gMDtcblx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0
ZVJhbmdlKCksIGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFS
YW5nZS5zZXRTdGFydChhLCAwKTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5n
ZS5zZXRTdGFydChiLCAwKTtcblx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBh
UmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtc
blx0fSA6IG51bGw7XG5cblx0cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5c
bi8vIE1haW4gTWV0aG9kXG5cbnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/Oltc
XHctXSt8XFwqKSkkLyxcblx0cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8
JycpP1xcXS8sXG5cdHFzYUZhaWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5j
dGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQg
PSB0aGlzLmZvdW5kID0gKGZpcnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAo
IWNvbnRleHQpIHJldHVybiBmb3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNv
bnRleHQgPSBjb250ZXh0LmRvY3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5k
b3cgdG8gYSBkb2N1bWVudFxuXHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZv
dW5kO1xuXG5cdC8vIHNldHVwXG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0
dW5pcXVlcyA9IHRoaXMudW5pcXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAm
JiBhcHBlbmQubGVuZ3RoKSxcblx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVU
eXBlID09IDkpO1xuXG5cdGlmICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQg
PyBjb250ZXh0IDogY29udGV4dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250
ZXh0KTtcblxuXHQvLyBhdm9pZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBl
bmQgYXJyYXlcblx0aWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1
bmlxdWVzW3RoaXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24g
Y2hlY2tzXG5cblx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVz
c2lvbiBpcyBhIHN0cmluZ1xuXG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xu
XHRcdHZhciBzaW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rv
cik7XG5cdFx0c2ltcGxlU2VsZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2
YXIgc3ltYm9sID0gc2ltcGxlU2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxl
Y3RvclsyXTtcblxuXHRcdFx0aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcq
JyAmJiB0aGlzLmJyb2tlblN0YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0
XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlm
IChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0
XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxE
b2N1bWVudCB8fCAhY29udGV4dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0
XHRcdFx0bm9kZSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICgh
bm9kZSkgcmV0dXJuIGZvdW5kO1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUu
Z2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2Vs
ZWN0b3JzO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRc
dGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1
c2gobm9kZSk7XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0
aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSB8fCB0aGlzLmJyb2tlbkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0
dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVz
W2krK107KXtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0
VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVs
c2Uge1xuXHRcdFx0XHRcdHZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysg
U2xpY2suZXNjYXBlUmVnRXhwKG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMg
PSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0g
MDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xh
c3NOYW1lO1xuXHRcdFx0XHRcdFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChj
bGFzc05hbWUpKSkgY29udGludWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rl
O1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IChmaXJzdCkgPyBudWxsIDogZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3Rv
cnMtb3ZlcnJpZGU+Ki9cblxuXHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0
cXVlcnlTZWxlY3RvcjogaWYgKGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlm
ICghdGhpcy5pc0hUTUxEb2N1bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVz
c2lvbl1cblx0XHRcdFx0Ly9UT0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVh
bGx5IG1peGVkIGNhc2Vcblx0XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuQ2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVj
a2VkJykgPiAtMSlcblx0XHRcdFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYg
cmVFbXB0eUF0dHJpYnV0ZS50ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJ
c0RvY3VtZW50IC8vQWJvcnQgd2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRc
dFx0Ly8gIHRoZXJlIGFyZSBtdWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0
XHRcdFx0XHQvLyAgc2luY2Ugd2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290
ZWQgUVNBIGZvciBzaW5nbGUgZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHBy
ZXNzaW9uLmluZGV4T2YoJywnKSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlz
YWJsZVFTQVxuXHRcdFx0KSBicmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJl
c3Npb24gPSBleHByZXNzaW9uLCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRc
dGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVk
IFFTQVxuXHRcdFx0XHQvLyBjcmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVu
dElkID0gX2NvbnRleHQuZ2V0QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7
XG5cdFx0XHRcdF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0
X2V4cHJlc3Npb24gPSAnIycgKyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRc
dGNvbnRleHQgPSBfY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Np
b24pIHx8IG51bGw7XG5cdFx0XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwoX2V4cHJlc3Npb24pO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBD
YWNoZVtleHByZXNzaW9uXSA9IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0
XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0
XHRpZiAoY3VycmVudElkKSBfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtc
blx0XHRcdFx0XHRlbHNlIF9jb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0
XHRjb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRo
aXMuc3RhclNlbGVjdHNDbG9zZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1
ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBm
b3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMg
JiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5c
dFx0cGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNl
ZC5sZW5ndGgpIHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwp
eyAvLyB0aGVyZSBpcyBubyBleHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2Ug
aWYgKGV4cHJlc3Npb24uU2xpY2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9i
amVjdFxuXHRcdHBhcnNlZCA9IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlu
cyhjb250ZXh0LmRvY3VtZW50RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4
cHJlc3Npb24gaXMgYSBub2RlXG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikg
OiBmb3VuZCA9IGV4cHJlc3Npb247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBv
dGhlciBqdW5rXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9y
IHRoZSBudGggc2VsZWN0b3JzXG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhM
YXN0ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0
ID0ge307XG5cblx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3Rv
cnM+Ki9cblxuXHQvLyBpZiBhcHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmds
ZSBzZWxlY3RvciB3aXRoIG9uZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1
c2hVSURcblx0dGhpcy5wdXNoID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVu
Z3RoID09IDEgJiYgcGFyc2VkLmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5w
dXNoQXJyYXkgOiB0aGlzLnB1c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0g
W107XG5cblx0Ly8gZGVmYXVsdCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJp
bmF0b3IsIHRhZywgaWQsIGNsYXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztc
blx0dmFyIGN1cnJlbnRJdGVtcywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RC
aXQsIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChp
ID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9
IDA7IChjdXJyZW50Qml0ID0gY3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29t
YmluYXRvciA9ICdjb21iaW5hdG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYg
KCF0aGlzW2NvbWJpbmF0b3JdKSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0g
KHRoaXMuaXNYTUxEb2N1bWVudCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRv
VXBwZXJDYXNlKCk7XG5cdFx0aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NM
aXN0ICA9IGN1cnJlbnRCaXQuY2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0
LmNsYXNzZXM7XG5cdFx0YXR0cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRw
c2V1ZG9zICAgID0gY3VycmVudEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0g
KGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9
IHt9O1xuXG5cdFx0aWYgKGxhc3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztc
blx0XHRcdHRoaXMuZm91bmQgPSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlx
dWVzID0ge307XG5cdFx0XHR0aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09
IDApe1xuXHRcdFx0dGhpc1tjb21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RC
aXQgJiYgZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlm
IChmaXJzdCAmJiBsYXN0Qml0KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKyl7XG5cdFx0XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0
XHRpZiAoZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0g
MCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0o
Y3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBj
bGFzc0xpc3QpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1c
blxuXHQvLyBzaG91bGQgc29ydCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5
b3UgcGFzcyBtdWx0aXBsZSBleHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2Vk
LmV4cHJlc3Npb25zLmxlbmd0aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAo
Zmlyc3QpID8gKGZvdW5kWzBdIHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5s
b2NhbC51aWR4ID0gMTtcbmxvY2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5n
ZXRVSURYTUwgPSBmdW5jdGlvbihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRl
KHRoaXMudWlkayk7XG5cdGlmICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRu
b2RlLnNldEF0dHJpYnV0ZSh0aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07
XG5cbmxvY2FsLmdldFVJREhUTUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5p
cXVlTnVtYmVyIHx8IChub2RlLnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8v
IHNvcnQgYmFzZWQgb24gdGhlIHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxu
bG9jYWwuc29ydCA9IGZ1bmN0aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0
ZXIpIHJldHVybiByZXN1bHRzO1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7
XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1w
c2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNo
TlRIID0gL14oWystXT9cXGQqKT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJz
ZU5USEFyZ3VtZW50ID0gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1l
bnQubWF0Y2godGhpcy5tYXRjaE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5c
dHZhciBzcGVjaWFsID0gcGFyc2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8
fCAxO1xuXHRpZiAoYSA9PSAnLScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7
XG5cdHBhcnNlZCA9XG5cdFx0KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRc
dChzcGVjaWFsID09ICdvZGQnKVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdl
dmVuJylcdD8ge2E6IDIsIGI6IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5j
YWNoZU5USFthcmd1bWVudF0gPSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRv
ID0gZnVuY3Rpb24oY2hpbGQsIHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJu
IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9k
ZSk7XG5cdFx0aWYgKCF0aGlzW3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRc
dHZhciBlbCA9IHBhcmVudFtjaGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xu
XHRcdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0
XHRcdFx0aWYgKGVsLm5vZGVOYW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0
aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hp
bGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5c
dFx0XHRcdFx0aWYgKGVsLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNb
cG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAo
KGVsID0gZWxbc2libGluZ10pKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1
bWVudCB8fCAnbic7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8
IHRoaXMucGFyc2VOVEhBcmd1bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVy
biBmYWxzZTtcblx0XHR2YXIgYSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNb
cG9zaXRpb25zXVt1aWRdO1xuXHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRp
ZiAoYSA+IDApe1xuXHRcdFx0aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Ug
e1xuXHRcdFx0aWYgKGIgPCBwb3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgo
cG9zIC0gYikgJSBhKSA9PSAwO1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3Jz
PiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlz
Lm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cykpIHRoaXMuZm91bmQucHVzaChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMu
bWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KSl7XG5cdFx0dGhpcy51bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChu
b2RlKTtcblx0fVxufTtcblxubG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0
b3Ipe1xuXHRpZiAodGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3Rvcil7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ci5jYWxsKG5vZGUsIHNlbGVjdG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0r
PylcXHMqXFxdL2csICdbJDE9XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9
XG5cdH1cblxuXHR2YXIgcGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlm
ICghcGFyc2VkKSByZXR1cm4gdHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3Jz
XG5cdHZhciBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRl
ciA9IDAsIGksIGN1cnJlbnRFeHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJl
c3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCA9PSAxKXtcblx0XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0
XHRcdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBl
eHAudGFnIDogZXhwLnRhZy50b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAu
YXR0cmlidXRlcywgZXhwLnBzZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENv
dW50ZXIrKztcblx0XHR9XG5cdH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQu
bGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5k
b2N1bWVudCwgcGFyc2VkKSwgaXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107
KXtcblx0XHRpZiAoaXRlbSA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZh
bHNlO1xufTtcblxubG9jYWwubWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1
bWVudCl7XG5cdHZhciBwc2V1ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNb
cHNldWRvTmFtZV0pIHJldHVybiB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0
dmFyIGF0dHJpYnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4g
KGFyZ3VtZW50KSA/IGFyZ3VtZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxu
bG9jYWwubWF0Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhp
cy5pc1hNTERvY3VtZW50KSA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJD
YXNlKCk7XG5cdFx0aWYgKHRhZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSBy
ZXR1cm4gZmFsc2U7IC8vIEZpeCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdH1cblxuXHRpZiAoaWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJl
dHVybiBmYWxzZTtcblxuXHR2YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChp
ID0gY2xhc3Nlcy5sZW5ndGg7IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsICdjbGFzcycpO1xuXHRcdGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNs
cykpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJp
YnV0ZXMubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAo
cGFydC5vcGVyYXRvciA/ICFwYXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5r
ZXkpKSA6ICF0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtc
blx0fVxuXHRpZiAocHNldWRvcykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRc
dHBhcnQgPSBwc2V1ZG9zW2ldO1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0
LmtleSwgcGFydC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07
XG5cbnZhciBjb21iaW5hdG9ycyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBu
b2RlcywgYW55IGxldmVsXG5cblx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAo
dGhpcy5pc0hUTUxEb2N1bWVudCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRp
dGVtID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0
ZW0gJiYgbm9kZS5hbGwpIHx8ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0
dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lk
XSByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5v
ZGVcblx0XHRcdFx0XHQvLyBpZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVs
ZW1lbnQsIGVsc2UgaXQgd2lsbCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9
IG5vZGUuYWxsW2lkXTtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRc
dFx0aWYgKCFjaGlsZHJlblswXSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZv
ciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2Rl
ID0gaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAm
JiBpZE5vZGUubm9kZVZhbHVlID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0s
IHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5c
dFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4
dCBpcyBpbiB0aGUgZG9tIHdlIHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtp
bmcgdGhlIGdldEJ5SWQgbGFiZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJv
b3QsIG5vZGUpKSByZXR1cm47XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0
XHR9IGVsc2UgaWYgKHRoaXMuZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9k
ZSwgaXRlbSkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0
XHRcdGdldEJ5Q2xhc3M6IGlmIChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKGNsYXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGls
ZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBu
dWxsLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRnZXRCeVRhZzoge1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKHRhZyk7XG5cdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBi
cmVhayBnZXRCeVRhZztcblx0XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51
bGw7XG5cdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChp
dGVtLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0Jz4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gZGlyZWN0IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENo
aWxkKSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChu
b2RlID0gbm9kZS5uZXh0U2libGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9
PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBj
aGlsZFxuXHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0J34nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNp
YmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0
dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1
aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHR9XG5cdH0sXG5cblx0JysrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJs
aW5ncyBhbmQgcHJldmlvdXMgc2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21i
aW5hdG9yOiF+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyEnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKXsgLy8gYWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50
KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyE+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5c
blx0JyErJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZp
b3VzU2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7
XG5cdFx0fVxuXHR9LFxuXG5cdCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFz
dENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2li
bGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5n
ZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRc
dFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xu
XG5mb3IgKHZhciBjIGluIGNvbWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBj
b21iaW5hdG9yc1tjXTtcblxudmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qL1xuXG5cdCdlbXB0eSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUu
Zmlyc3RDaGlsZDtcblx0XHRyZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAm
JiAhKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0
fSxcblxuXHQnbm90JzogZnVuY3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0
aGlzLm1hdGNoTm9kZShub2RlLCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBm
dW5jdGlvbihub2RlLCB0ZXh0KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUu
dGV4dENvbnRlbnQgfHwgJycpLmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3Qt
Y2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3Vz
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBm
dW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0g
cHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFs
c2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNp
YmxpbmcpKSBpZiAobmV4dC5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywg
J3Bvc05USCcpLFxuXG5cdCdudGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygn
bGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1v
Zi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5n
JywgJ3Bvc05USFR5cGUnLCB0cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNy
ZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBl
TGFzdCcsIHRydWUpLFxuXG5cdCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRy
ZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xu
XHR9LFxuXG5cdCdldmVuJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVk
bzpudGgtY2hpbGQnXShub2RlLCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xu
XHR9LFxuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
LnByZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4g
ZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlw
ZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2Rl
Lm5vZGVOYW1lO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYg
KHByZXYubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9
IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5v
ZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0s
XG5cblx0Lyo8L29mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1
ZG9zXG5cblx0J2VuYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlz
YWJsZWQ7XG5cdH0sXG5cblx0J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
IG5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHRyZXR1cm4gbm9kZS5jaGVja2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3Vz
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhp
cy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50
eXBlIHx8IHRoaXMuaGFzQXR0cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQn
cm9vdCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtc
blx0fSxcblxuXHQnc2VsZWN0ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5z
ZWxlY3RlZDtcblx0fVxuXG5cdC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZh
ciBwIGluIHBzZXVkb3MpIGxvY2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8g
YXR0cmlidXRlcyBtZXRob2RzXG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmli
dXRlR2V0dGVycyA9IHtcblxuXHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1s
Rm9yJyBpbiB0aGlzKSA/IHRoaXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtc
blx0fSxcblxuXHQnaHJlZic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhp
cykgPyB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hy
ZWYnKTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5z
dHlsZSkgPyB0aGlzLnN0eWxlLmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtc
blx0fSxcblxuXHQndGFiaW5kZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2Rl
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH0sXG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldEF0dHJpYnV0ZSgndHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlv
bigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhM
ZW5ndGgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVj
aWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0
dHJpYnV0ZUdldHRlcnMuTUFYTEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9j
YWwuU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcn
O1xuXG4vLyBTbGljayBmaW5kZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwg
ZXhwcmVzc2lvbiwgYXBwZW5kKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQpO1xufTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4
cHJlc3Npb24pe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51
bGwsIHRydWUpO1xufTtcblxuLy8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5j
b250YWlucyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KGNvbnRhaW5lcik7XG5cdHJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xu
fTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBm
dW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVy
biBsb2NhbC5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1
dGUgPSBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5c
dHJldHVybiBsb2NhbC5oYXNBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBt
YXRjaGVyXG5cblNsaWNrLm1hdGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAo
IShub2RlICYmIHNlbGVjdG9yKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNl
bGVjdG9yID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7
XG5cdHJldHVybiBsb2NhbC5tYXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xp
Y2sgYXR0cmlidXRlIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1
bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xu
XHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0
aW9uKG5hbWUpe1xuXHRyZXR1cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5c
bi8vIFNsaWNrIHBzZXVkbyBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlv
bihuYW1lLCBmbil7XG5cdGxvY2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwg
YXJndW1lbnQpe1xuXHRcdHJldHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0
cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtc
blx0dmFyIHBzZXVkbyA9IGxvY2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSBy
ZXR1cm4gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBh
cmd1bWVudCk7XG5cdH07XG5cdHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVz
IGFjY2Vzc29yXG5cblNsaWNrLm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxv
Y2FsLm92ZXJyaWRlKHJlZ2V4cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlz
WE1MID0gbG9jYWwuaXNYTUw7XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJl
dHVybiBsb2NhbC5nZXRVSURIVE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlz
LlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRz
ICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBFbGVtZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1w
b3J0YW50IGl0ZW1zIGluIE1vb1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0
aGUgZG9sbGFycyBmdW5jdGlvbiwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGlt
ZS1zYXZlciBtZXRob2RzIHRvIGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRz
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERv
Y3VtZW50LCBBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBh
cnNlciwgU2xpY2suRmluZGVyXVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAk
JCwgSUZyYW1lLCBTZWxlY3RvcnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVs
ZW1lbnQgPSBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVu
dC5Db25zdHJ1Y3RvcnNbdGFnXTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0
b3IocHJvcHMpO1xuXHRpZiAodHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50
LmlkKHRhZykuc2V0KHByb3BzKTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlm
ICghKC9eW1xcdy1dKyQvKS50ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJz
ZSh0YWcpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykg
PyAnZGl2JyA6IHBhcnNlZC50YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBu
dWxsKSBwcm9wcy5pZCA9IHBhcnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2Vk
LmF0dHJpYnV0ZXM7XG5cdFx0aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBs
ID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0
ZXNbaV07XG5cdFx0XHRpZiAocHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5c
dFx0XHRpZiAoYXR0ci52YWx1ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9w
c1thdHRyLmtleV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYg
IWF0dHIub3BlcmF0b3IpIHByb3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYg
KHBhcnNlZC5jbGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNz
J10gPSBwYXJzZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVu
dC5uZXdFbGVtZW50KHRhZywgcHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtc
blx0RWxlbWVudC5wcm90b3R5cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJ
RTggYW5kIElFOSByZXF1aXJlIHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2Zp
cmVFdmVudCA9IChmdW5jdGlvbihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBl
LCBldmVudCl7XG5cdFx0XHRyZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQp
O1xuXHRcdH07XG5cdH0pKEVsZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBU
eXBlKCdFbGVtZW50JywgRWxlbWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJy
YXkucHJvdG90eXBlW25hbWVdKSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFt
ZV0gPSBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMs
IGVsZW1lbnRzID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0
c1tpXSA9IGVsZW1lbnRbbmFtZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50
cyA9IChlbGVtZW50cyAmJiB0eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5c
dH07XG5cblx0RWxlbWVudHMuaW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVs
ZW1lbnQpe1xuXHRFbGVtZW50LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlw
ZSA9IHtcblx0XHQnJGNvbnN0cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0
aW9uLmNvbnZlcnQoJ2VsZW1lbnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihm
dW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0
aG9kO1xuXHR9KTtcbn1cblxuRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJ
RnJhbWUgPSBuZXcgVHlwZSgnSUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFy
cmF5LmxpbmsoYXJndW1lbnRzLCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0
XHRpZnJhbWU6IGZ1bmN0aW9uKG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0
XHR9XG5cdH0pO1xuXG5cdHZhciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJh
bWU7XG5cdGlmIChwYXJhbXMuaWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZy
YW1lKTtcblx0dmFyIG9ubG9hZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRl
bGV0ZSBwcm9wcy5vbmxvYWQ7XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwg
cHJvcHMubmFtZSwgaWZyYW1lID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1l
XycgKyBTdHJpbmcudW5pcXVlSUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChp
ZnJhbWUgfHwgJ2lmcmFtZScsIHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtc
blx0XHRvbmxvYWQuY2FsbChpZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdp
bmRvdy5mcmFtZXNbcHJvcHMuaWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVu
ZXIoJ2xvYWQnLCBvbkxvYWQpO1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50
cyA9IHRoaXMuRWxlbWVudHMgPSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rl
cy5sZW5ndGgpe1xuXHRcdHZhciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9k
ZSk7XG5cdFx0XHRpZiAoIXVuaXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHRcdHRoaXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5c
bkVsZW1lbnRzLnByb3RvdHlwZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJy
YXk7XG5cbm5ldyBUeXBlKCdFbGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZp
bHRlcjogZnVuY3Rpb24oZmlsdGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRo
aXM7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihm
aWx0ZXIpID09ICdzdHJpbmcnKSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0u
bWF0Y2goZmlsdGVyKTtcblx0XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdHB1c2g6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkg
dGhpc1tsZW5ndGgrK10gPSBpdGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0g
bGVuZ3RoKTtcblx0fS5wcm90ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgaXRlbXMgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0p
O1xuXHRcdFx0aWYgKGl0ZW0pIGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBB
cnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdGNvbmNhdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxl
bWVudHModGhpcyk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRl
bHNlIG5ld0VsZW1lbnRzLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50
cztcblx0fS5wcm90ZWN0KCksXG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlz
LnB1c2goY29sbGVjdGlvbltpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRo
aXNbLS10aGlzLmxlbmd0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0p
O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnBy
b3RvdHlwZS5zcGxpY2UsIG9iamVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxu
c3BsaWNlLmNhbGwob2JqZWN0LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMu
aW1wbGVtZW50KCdzcGxpY2UnLCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5n
dGg7XG5cdHZhciByZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hp
bGUgKGxlbmd0aCA+PSB0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1
cm4gcmVzdWx0O1xufS5wcm90ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9u
KG1ldGhvZCwgbmFtZSl7XG5cdEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7
XG5cbkFycmF5Lm1pcnJvcihFbGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxl
bWVudEFjY2VwdHNIVE1MO1xudHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBj
YXRjaCAoZSl7fVxuXG52YXIgZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVy
biAoJycgKyBodG1sKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVv
dDsnKTtcbn07XG4vKjwvbHRJRTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENh
bm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0g
KGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScp
LFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0
VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0g
Y2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3Vt
ZW50LmltcGxlbWVudCh7XG5cblx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5c
dFx0aWYgKHByb3BzKXtcblx0XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRl
ZmF1bHRDaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAn
Y2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVs
bCkgcHJvcHMudmFsdWUgPSAnb24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhl
IHR5cGUgdG8gYmUgc2V0IGJlZm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRc
blx0XHRcdGlmICghY2FuQ2hhbmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRc
dFx0dmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5c
dFx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0
XHRcdFx0aWYgKHByb3BzLnR5cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4g
dGhpcy5pZChzdHlsZUVsZW1lbnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTk+Ki9cblx0XHRcdC8qPGx0SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBl
IHByb3BlcnRpZXMgaW4gSUUgPCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1M
KXtcblx0XHRcdFx0dGFnID0gJzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFn
ICs9ICcgbmFtZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0
XHRpZiAocHJvcHMudHlwZSkgdGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMu
dHlwZSkgKyAnXCInO1xuXHRcdFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
bmFtZTtcblx0XHRcdFx0ZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykp
LnNldChwcm9wcyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGlj
ay51aWRPZih3aW5kb3cpO1xuU2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBs
ZW1lbnQoe1xuXG5cdG5ld1RleHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhp
cy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMud2luZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRc
dHZhciB0eXBlcyA9IHtcblxuXHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mp
e1xuXHRcdFx0XHRpZCA9IFNsaWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9n
LCAnXFxcXCQxJykpO1xuXHRcdFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5v
Y2FzaCkgOiBudWxsO1xuXHRcdFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5v
Y2FzaCl7XG5cdFx0XHRcdFNsaWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYg
IWVsLiRmYW1pbHkgJiYgISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkp
e1xuXHRcdFx0XHRcdHZhciBmaXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8g
d3JhcHBpbmcgbmVlZGVkIGluIElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJl
RXZlbnQgPSBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2
ZW50KHR5cGUsIGV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQo
ZWwsIEVsZW1lbnQuUHJvdG90eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5c
dFx0XHR9LFxuXG5cdFx0XHRvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRc
dFx0XHRpZiAob2JqLnRvRWxlbWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVu
dChkb2MpLCBub2Nhc2gpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07
XG5cblx0XHR0eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cg
PSB0eXBlcy5kb2N1bWVudCA9IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5c
dFx0fTtcblxuXHRcdHJldHVybiBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYg
KGVsICYmIGVsLiRmYW1pbHkgJiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2
YXIgdHlwZSA9IHR5cGVPZihlbCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVz
W3R5cGVdKGVsLCBub2Nhc2gsIGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0
fSkoKVxuXG59KTtcblxuaWYgKHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQn
LCBmdW5jdGlvbihlbCwgbmMpe1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRv
Y3VtZW50KTtcbn0pO1xuXG5XaW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwg
RWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwg
bmV3IEVsZW1lbnRzKTtcblx0fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7
XG5cdH1cblxufSk7XG5cbnZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVu
dCl7XG5cdHJldHVybiBTbGljay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAo
IWRvY3VtZW50LmNvbnRhaW5zKSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQo
Y29udGFpbnMpO1xuXG5cblxuLy8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9y
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikg
cmV0dXJuIGNvbWJpbmF0b3I7XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5w
YXJzZShleHByZXNzaW9uKSk7XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHBy
ZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRl
eHByZXNzaW9uc1tpXVswXS5jb21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhw
cmVzc2lvbjtcbn07XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQ
cmV2aW91czogJyF+Jyxcblx0Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3Is
IG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lv
bil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Np
b24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRB
bGxOZXh0OiAnficsXG5cdGdldEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+
Jyxcblx0Z2V0Q2hpbGRyZW46ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0
b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxl
bWVudCh7XG5cblx0Z2V0Rmlyc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBk
b2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9u
LCAnPicpKVswXSk7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5c
dFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9y
KGV4cHJlc3Npb24sICc+JykpLmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5c
dGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7
XG5cdH0sXG5cblx0Z2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykv
ZywgJ1xcXFwkMScpKSk7XG5cdH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xu
XHRcdHJldHVybiAhZXhwcmVzc2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtc
blx0fVxuXG59KTtcblxuXG5cbmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVu
dCgnJCQnLCBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp
e1xuXHRcdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFy
Y2godGhpcy5kb2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAo
VHlwZS5pc0VudW1lcmFibGUoc2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9y
KTtcblx0fVxuXHRyZXR1cm4gbmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5z
ZXJ0ZXJzXG5cbnZhciBpbnNlcnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0
LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlm
IChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5c
blx0YWZ0ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShj
b250ZXh0LCBlbGVtZW50Lm5leHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5c
dH0sXG5cblx0dG9wOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmlu
c2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmlu
c2VydGVycy5pbnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkg
LyBzZXRQcm9wZXJ0eVxuXG52YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVy
cyA9IHt9O1xuXG4vLyBwcm9wZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5m
b3JFYWNoKFtcblx0J3R5cGUnLCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScs
ICdjZWxsUGFkZGluZycsICdjZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVy
JywgJ3Jvd1NwYW4nLCAndGFiSW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkp
e1xuXHRwcm9wZXJ0aWVzW3Byb3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtc
blxucHJvcGVydGllcy5odG1sID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJU
ZXh0JzogJ3RleHRDb250ZW50JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rp
b24ocmVhbCwga2V5KXtcblx0cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2
YWx1ZSl7XG5cdFx0bm9kZVtyZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNb
a2V5XSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7
XG5cbi8qPGx0SUU5PiovXG5wcm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRy
ZXR1cm4gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0g
J3N0eWxlJykgbm9kZS5zZXQoJ2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRp
ZXMudGV4dF0gPSB2YWx1ZTtcblx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJv
cGVydHlHZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5p
bm5lckhUTUwgOiBnZXR0ZXIobm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7
XG4vKjwvbHRJRTk+Ki9cblxuLy8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFj
dCcsICdub3dyYXAnLCAnaXNtYXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxu
XHQnZGlzYWJsZWQnLCAncmVhZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNp
emUnLFxuXHQnZGVmZXInLCAnZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xz
JywgJ2F1dG9wbGF5Jyxcblx0J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5
LmZvckVhY2goYm9vbHMsIGZ1bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93
ZXJDYXNlKCk7XG5cdGJvb2xlYW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1ts
b3dlcl0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7
XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRy
ZXR1cm4gISFub2RlW2Jvb2xdO1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2Jq
ZWN0LmFwcGVuZChwcm9wZXJ0eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2Rl
LCB2YWx1ZSl7XG5cdFx0KCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAo
dmFsdWUgfHwgJycpIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxu
XG5cdCdmb3InOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2Rl
KSA/IG5vZGUuaHRtbEZvciA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVl
KTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUu
c3R5bGUpID8gbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgn
c3R5bGUnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUp
e1xuXHRcdG5vZGUudmFsdWUgPSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5c
bn0pO1xuXG5wcm9wZXJ0eUdldHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0
dXJuICgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2Rl
LmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFk
b25seSBhbmQgdGhyb3dzXG50cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31c
bmlmIChlbC50eXBlICE9ICdidXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9u
KG5vZGUsIHZhbHVlKXtcblx0bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xu
ZWwgPSBudWxsO1xuLyogPC93ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4v
LyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNo
YW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2Lmlu
bmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYu
aW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9s
dElFOT4qL1xuXG52YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2
b2xhdGlsZUlucHV0VmFsdWUsIGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQu
dmFsdWUgPSAndCc7XG5pbnB1dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUg
PSBpbnB1dC52YWx1ZSAhPSAndCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBB
cmd1bWVudFwiIHdoZW4gdHJ5aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0
aW5wdXQudmFsdWUgPSAnJztcblx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRT
dXBwb3J0ID0gaW5wdXQudHlwZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9
IG51bGw7XG5cbmlmICh2b2xhdGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBw
cm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRc
dHZhciB2YWx1ZSA9IG5vZGUudmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2Rl
LnZhbHVlID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0
UHJvcGVydHksIHNldFByb3BlcnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dl
dEF0dHJpYnV0ZSA9IChmdW5jdGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7
XG5cdHJldHVybiAoZGl2LmdldEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xu
fSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAo
ZnVuY3Rpb24odGVzdCl7XG5cdHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9
XCJzaG91bGRfZml4XCIgdmFsdWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0
dXJuIHRlc3QuY2xvbmVOb2RlKHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0g
MTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5c
bnZhciBoYXNDbGFzc0xpc3QgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNz
TGlzdDtcblxudmFyIGNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NO
YW1lcyA9IChjbGFzc05hbWUgfHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9
O1xuXHRyZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRp
ZiAoY2xhc3NOYW1lICE9PSAnJyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVl
c1tjbGFzc05hbWVdID0gY2xhc3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlz
dCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52
YXIgcmVtb3ZlRnJvbUNsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlz
dC5yZW1vdmUobmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0
ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIo
dGhpcywgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2
YXIgYXR0cmlidXRlV2hpdGVMaXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBh
dHRyaWJ1dGVXaGl0ZUxpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywg
e30pO1xuXHRcdFx0LyogPC9sdElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xu
XHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVXaGl0
ZUxpc3RbbmFtZV07XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRc
dFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0
SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRl
TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0
dHJpYnV0ZXMpe1xuXHRcdGZvciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNl
dFByb3BlcnR5KGF0dHJpYnV0ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdl
dHRlciA9IHByb3BlcnR5R2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0
ZXIpIHJldHVybiBnZXR0ZXIodGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xs
dXRlc0dldEF0dHJpYnV0ZSl7XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9k
ZShuYW1lKSwgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdo
aXRlTGlzdCcsIHt9KTtcblx0XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAo
YXR0ci5leHBhbmRvICYmICFhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIg
b3V0ZXIgPSB0aGlzLm91dGVySFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3Blbmlu
ZyB0YWcgYW5kIGZpbmQgbWVudGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0
ZXIuc3Vic3RyKDAsIG91dGVyLnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSku
aW5kZXhPZihuYW1lKSA8IDApIHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVXaGl0ZUxp
c3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dHZhciByZXN1bHQgPSBTbGljay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJu
ICghcmVzdWx0ICYmICFTbGljay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJl
c3VsdDtcblx0fSxcblxuXHRnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdz
ID0gQXJyYXkuY29udmVydChhcmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdl
dFByb3BlcnR5LCB0aGlzKS5hc3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51
bGwpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXku
ZWFjaChhcmd1bWVudHMsIHRoaXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9w
ZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVy
dHkuc2V0KSA/IHByb3BlcnR5LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVy
dHkocHJvcCwgdmFsdWUpO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlv
bihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0cmV0dXJuIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5
KHRoaXMpIDogdGhpcy5nZXRQcm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxu
XG5cdGVyYXNlOiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlBy
b3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3Bl
cnR5LmVyYXNlLmFwcGx5KHRoaXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24o
Y2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5j
bGFzc05hbWUpLmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0Ns
YXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZv
ckVhY2goYWRkVG9DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1l
ICsgJyAnICsgdGhpcy5jbGFzc05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRyZW1vdmVDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFy
IGNsYXNzTmFtZXMgPSBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNz
TmFtZSkuZm9yRWFjaChjbGFzc05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNs
YXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9y
Y2UgPT0gbnVsbCkgZm9yY2UgPSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVy
biAoZm9yY2UpID8gdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhj
bGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQg
PSB0aGlzLCBmcmFnbWVudCwgZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJh
Z21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
aWQoZWxlbWVudHNbaV0sIHRydWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRD
aGlsZChlbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hp
bGQoZnJhZ21lbnQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDog
ZnVuY3Rpb24odGV4dCwgd2hlcmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1
bWVudCgpLm5ld1RleHROb2RlKHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rp
b24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50
LmlkKGVsLCB0cnVlKSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0
OiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10o
dGhpcywgZG9jdW1lbnQuaWQoZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZXBsYWNlczogZnVuY3Rpb24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUp
O1xuXHRcdGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHR3cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRv
Y3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihl
bCwgd2hlcmUpO1xuXHR9LFxuXG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
c2VsZWN0ZWRJbmRleDsgLy8gU2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhB
cnJheS5jb252ZXJ0KHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0
XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3Ry
aW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0
RWxlbWVudHMoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5c
dFx0XHR2YXIgdHlwZSA9IGVsLnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJs
ZWQgfHwgdHlwZSA9PSAnc3VibWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmls
ZScgfHwgdHlwZSA9PSAnaW1hZ2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5n
ZXQoJ3RhZycpID09ICdzZWxlY3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9w
dCl7XG5cdFx0XHRcdC8vIElFXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgn
dmFsdWUnKTtcblx0XHRcdH0pIDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2ti
b3gnKSAmJiAhZWwuY2hlY2tlZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRB
cnJheS5jb252ZXJ0KHZhbHVlKS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBl
b2YgdmFsICE9ICd1bmRlZmluZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVu
dChlbC5uYW1lKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xu
XHRcdH0pO1xuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5c
blxuLy8gYXBwZW5kSFRNTFxuXG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdi
ZWZvcmVCZWdpbicsXG5cdGFmdGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQn
LFxuXHR0b3A6ICdhZnRlckJlZ2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoJ2FwcGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0
aGlzLmluc2VydEFkamFjZW50SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSdd
LCBodG1sKTtcblx0cmV0dXJuIHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2
YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVu
ID0gdGVtcC5jaGlsZE5vZGVzLFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5c
dGlmICghZnJhZ21lbnQpIHJldHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7
XG5cdFx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2Vy
dGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztc
bn0pO1xuXG52YXIgY29sbGVjdGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1
bmN0aW9uKHVpZCl7XG5cdHJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7
fSkpO1xufTtcblxudmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVt
LnVuaXF1ZU51bWJlcjtcblx0aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50
cygpO1xuXHRpZiAoaXRlbS5jbGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7
XG5cdGlmICh1aWQgIT0gbnVsbCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3VpZF07XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVBy
b3BzID0ge2lucHV0OiAnY2hlY2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2
YWx1ZSd9O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtc
blx0XHR2YXIgY2hpbGRyZW4gPSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicp
O1xuXHRcdEFycmF5LmVhY2goY2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2Uo
dGhpcyk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5c
dFx0QXJyYXkuY29udmVydCh0aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiAodGhpcy5wYXJlbnROb2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlz
KSA6IHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xu
XHRcdGNvbnRlbnRzID0gY29udGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMu
Y2xvbmVOb2RlKGNvbnRlbnRzKSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRc
dGlmIChjb250ZW50cyl7XG5cdFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0
aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBj
ZS5sZW5ndGg7IGktLTspe1xuXHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ld
O1xuXHRcdFx0aWYgKCFrZWVwaWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0
Lyo8bHRJRTk+Ki9cblx0XHRcdGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5v
ZGUuY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1l
bnQpO1xuXHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0
XHRcdGlmIChub2RlLm9wdGlvbnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywg
ZW8gPSBlbGVtZW50Lm9wdGlvbnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsg
ai0tOykgbm9bal0uc2VsZWN0ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0
fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50
LnRhZ05hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3Bd
KSBub2RlW3Byb3BdID0gZWxlbWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xu
XHRcdGlmIChoYXNDbG9uZUJ1Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnb2JqZWN0JyksIHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0
Jyk7XG5cdFx0XHRmb3IgKGkgPSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRv
W2ldLm91dGVySFRNTDtcblx0XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3Vt
ZW50LmlkKGNsb25lKTtcblx0fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRd
Lmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBm
bil7XG5cdFx0aWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpe1xuXHRcdFx0Y29sbGVjdGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxu
XHRcdGlmICh0aGlzLmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBl
LCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsg
dHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBm
dW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxz
ZSB0aGlzLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmV0cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3Rv
cmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtc
blx0XHRpZiAoZGZsdCAhPSBudWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJv
cGVydHldID0gZGZsdDtcblx0XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5c
dH0sXG5cblx0c3RvcmU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3Jh
Z2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFs
dWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9w
ZXJ0eSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
Lyo8bHRJRTk+Ki9cbmlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKXtcblx0dmFyIGdjID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0
ZWQsIGNsZWFuKTtcblx0XHRpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFn
ZSgpO1xuXHRcdHdpbmRvdy5yZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3
aW5kb3cuYWRkTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMgPSB7fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtc
blxuXHRzZXQ6IGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHls
ZTtcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3Nz
VGV4dDtcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1Rl
eHQgPSAnJztcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5c
dH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bihodG1sKXtcblx0XHRpZiAoaHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAo
dHlwZU9mKGh0bWwpID09ICdhcnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAodGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwp
IHRoaXMuc3R5bGVTaGVldC5jc3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3Ro
aXMuaW5uZXJIVE1MID0gaHRtbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhp
cy5zZXQoJ2h0bWwnLCAnJyk7XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IHRydWUsIHN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJI
VE1MID0gdHJ1ZTtcblxuLyo8bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBo
dHRwOi8vamRiYXJ0bGV0dC5jb20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpO1xudmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2Pjwv
bmF2Pic7XG5zdXBwb3J0c0hUTUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09
IDEpO1xuaWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFy
dGljbGUgYXNpZGUgYXVkaW8gY2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1
cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNl
Y3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAo
bC0tKSBmcmFnbWVudC5jcmVhdGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8q
PC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9u
LmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgndGFibGUnKTtcblx0dGFibGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5c
dHJldHVybiB0cnVlO1xufSk7XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0cicpLCBodG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1s
O1xuc3VwcG9ydHNUUklubmVySFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51
bGw7XG4vKjwvbHRGRjQ+Ki9cblxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBw
b3J0c1RSSW5uZXJIVE1MIHx8ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQu
UHJvcGVydGllcy5odG1sLnNldCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0
aW9ucyA9IHtcblx0XHRcdHRhYmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRc
dHNlbGVjdDogWzEsICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwg
Jzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0
YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0
XHR0cmFuc2xhdGlvbnMudGhlYWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMu
dGJvZHk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5Piov
XG5cdFx0XHRpZiAodGhpcy5zdHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7
XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMu
Z2V0KCd0YWcnKV07XG5cdFx0XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykg
d3JhcCA9IFswLCAnJywgJyddO1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhp
cywgaHRtbCk7XG5cblx0XHRcdHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3Vw
cG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRc
dHdyYXBwZXIuaW5uZXJIVE1MID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5q
b2luKCcnKTtcblx0XHRcdHdoaWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGls
ZDtcblx0XHRcdHRoaXMuZW1wdHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRp
ZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7
XG5cdFx0XHR3cmFwcGVyID0gbnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGll
cy5odG1sLnNldCk7XG59XG4vKjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8
c2VsZWN0PjxvcHRpb24+czwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJz
dENoaWxkLnZhbHVlICE9ICdzJykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0
aWYgKHRhZyAhPSAnc2VsZWN0JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFs
dWUpO1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0
dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0
ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1
ZSA9IChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQo
J3RleHQnKTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24u
c2VsZWN0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIG9wdGlvbiA9IHRoaXMsIHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRh
ZyAhPSAnc2VsZWN0JyAmJiB0YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5
KCd2YWx1ZScpO1xuXG5cdFx0aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlv
bi5nZXRTZWxlY3RlZCgpWzBdKSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24u
Z2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVj
aWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50
ZXN0Rm9ybSA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3Bl
cnRpZXMuaWQgPSB7XG5cdHNldDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdl
dEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztc
blx0fVxufTtcbi8qPC9JRT4qL1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQg
b2JqZWN0IGNyb3NzLWJyb3dzZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmpl
Y3RdXG5cbnByb3ZpZGVzOiBFdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
X2tleXMgPSB7fTtcbnZhciBub3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xu
XHR2YXIgbm9ybWFsaXplZDtcblx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6
ZWQgPSBldmVudC53aGVlbERlbHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIw
IDogZXZlbnQud2hlZWxEZWx0YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQg
PSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0o
cmF3QW1vdW50ICUgMyA9PSAwID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0
fVxuXHRyZXR1cm4gbm9ybWFsaXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZl
bnQgPSBuZXcgVHlwZSgnRE9NRXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3
aW4pIHdpbiA9IHdpbmRvdztcblx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChl
dmVudC4kZXh0ZW5kZWQpIHJldHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0
aGlzLiRleHRlbmRlZCA9IHRydWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0
dGhpcy5jb250cm9sID0gZXZlbnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7
XG5cdHRoaXMubWV0YSA9IGV2ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0g
ZXZlbnQudHlwZTtcblx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVt
ZW50O1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0
YXJnZXQucGFyZW50Tm9kZTtcblx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xu
XG5cdGlmICh0eXBlLmluZGV4T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5j
b2RlID0gKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlm
dCB8fCB0eXBlICE9ICdrZXlwcmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYg
KHR5cGUgPT0gJ2tleWRvd24nIHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+
IDExMSAmJiBjb2RlIDwgMTI0KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRc
dGVsc2UgaWYgKGNvZGUgPiA5NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtc
blx0XHR9XG5cdFx0aWYgKHRoaXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlKS50b0xvd2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNr
JyB8fCB0eXBlID09ICdkYmxjbGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUg
PT0gJ3doZWVsJyB8fCB0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdt
b3VzZScpID09IDApe1xuXHRcdHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFk
b2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0
bWwgOiBkb2MuYm9keTtcblx0XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVgg
IT0gbnVsbCkgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxc
blx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xp
ZW50WSArIGRvYy5zY3JvbGxUb3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0
eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQg
OiBldmVudC5jbGllbnRYLFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQu
cGFnZVkgLSB3aW4ucGFnZVlPZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAo
dHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdt
b3VzZXdoZWVsJykgdGhpcy53aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRc
dHRoaXMucmlnaHRDbGljayA9IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAy
KTtcblx0XHRpZiAodHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwg
dHlwZSA9PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFy
IG92ZXJUYXJnZXQgPSB0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXIn
O1xuXHRcdFx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVy
VGFyZ2V0ID8gJ2Zyb20nIDogJ3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0
ZWQgJiYgcmVsYXRlZC5ub2RlVHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2Rl
O1xuXHRcdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0
fVxuXHR9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhP
ZignZ2VzdHVyZScpID09IDApe1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtc
blx0XHR0aGlzLnNjYWxlID0gZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0g
ZXZlbnQudGFyZ2V0VG91Y2hlcztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hh
bmdlZFRvdWNoZXM7XG5cdFx0dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3Vj
aGVzO1xuXHRcdGlmICh0b3VjaGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0g
dG91Y2hlc1swXTtcblx0XHRcdHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gu
cGFnZVl9O1xuXHRcdFx0dGhpcy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2gu
Y2xpZW50WX07XG5cdFx0fVxuXHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQg
PSB7fTtcblx0aWYgKCF0aGlzLnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50
LmltcGxlbWVudCh7XG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2
ZW50RGVmYXVsdCgpLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlv
bjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMu
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJs
ZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1
bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQu
cHJldmVudERlZmF1bHQoKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxz
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0g
ZnVuY3Rpb24oY29kZSwga2V5KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlz
O1xufTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9h
ZFNldHRlcih0cnVlKTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0
MCc6ICdkb3duJywgJzM3JzogJ2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywg
JzMyJzogJ3NwYWNlJywgJzgnOiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2Rl
bGV0ZScsICcxMyc6ICdlbnRlcidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxu
bmFtZTogRWxlbWVudC5FdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRo
b2RzIGZvciBkZWFsaW5nIHdpdGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3Vz
ZWVudGVyIGFuZCBtb3VzZWxlYXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBF
dmVudF1cblxucHJvdmlkZXM6IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdHRoaXMuYWRkRXZlbnRzKGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9j
dW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0
XHRpZiAoIWV2ZW50c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtd
fTtcblx0XHRpZiAoZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztc
blx0XHRldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBl
LFxuXHRcdFx0Y3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24g
PSBmbixcblx0XHRcdHNlbGYgPSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1
c3RvbS5vbkFkZCkgY3VzdG9tLm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYg
KGN1c3RvbS5jb25kaXRpb24pe1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkp
IHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0
XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5j
dGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2
YXIgZGVmbiA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9
O1xuXHRcdHZhciBuYXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtc
blx0XHRpZiAobmF0aXZlRXZlbnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRc
dFx0XHRkZWZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2
ZW50KGV2ZW50LCBzZWxmLmdldFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNh
bGwoc2VsZiwgZXZlbnQpID09PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRc
dFx0fVxuXHRcdFx0dGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJd
KTtcblx0XHR9XG5cdFx0ZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0
dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8
ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVd
O1xuXHRcdHZhciBpbmRleCA9IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXgg
PT0gLTEpIHJldHVybiB0aGlzO1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtc
blx0XHRkZWxldGUgbGlzdC5rZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5k
ZXhdO1xuXHRcdHZhciBjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3Vz
dG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRo
aXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNv
bnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAo
RWxlbWVudC5OYXRpdmVFdmVudHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2
YWx1ZSwgYXJndW1lbnRzWzJdKSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlv
bihldmVudHMpe1xuXHRcdGZvciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChl
dmVudCwgZXZlbnRzW2V2ZW50XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3Zl
RXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2Yo
ZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJl
bW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9
XG5cdFx0dmFyIGF0dGFjaGVkID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFh
dHRhY2hlZCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBl
IGluIGF0dGFjaGVkKSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWlu
YXRlKCdldmVudHMnKTtcblx0XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0
YXR0YWNoZWRbZXZlbnRzXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJl
bW92ZUV2ZW50KGV2ZW50cywgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0
YWNoZWRbZXZlbnRzXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2
ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMu
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJl
dHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRz
W3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5
KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5c
dFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1
bmN0aW9uKGZyb20sIHR5cGUpe1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2
YXIgZXZlbnRzID0gZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJl
dHVybiB0aGlzO1xuXHRcdGlmICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4g
ZXZlbnRzKSB0aGlzLmNsb25lRXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlm
IChldmVudHNbdHlwZV0pe1xuXHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihm
bil7XG5cdFx0XHRcdHRoaXMuYWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50
cyA9IHtcblx0Y2xpY2s6IDIsIGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIs
IGNvbnRleHRtZW51OiAyLCAvL21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6
IDIsIERPTU1vdXNlU2Nyb2xsOiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91
c2VvdXQ6IDIsIG1vdXNlbW92ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9t
b3VzZSBtb3ZlbWVudFxuXHRrZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5
Ym9hcmRcblx0b3JpZW50YXRpb25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAy
LCB0b3VjaG1vdmU6IDIsIHRvdWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0
Z2VzdHVyZXN0YXJ0OiAyLCBnZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0
dXJlXG5cdGZvY3VzOiAyLCBibHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIs
IHN1Ym1pdDogMiwgcGFzdGU6IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDog
MiwgdW5sb2FkOiAxLCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29u
dGVudExvYWRlZDogMSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5n
ZTogMSwgcG9wc3RhdGU6IDIsIHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxu
XHRlcnJvcjogMSwgYWJvcnQ6IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5c
bkVsZW1lbnQuRXZlbnRzID0ge1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwn
IGluIGRvY3VtZW50ID8gJ3doZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21v
dXNld2hlZWwnIDogJ0RPTU1vdXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5j
dGlvbihldmVudCl7XG5cdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYg
KHJlbGF0ZWQgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZh
bHNlO1xuXHRyZXR1cm4gKHJlbGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVs
JyAmJiB0eXBlT2YodGhpcykgIT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVk
KSk7XG59O1xuXG5pZiAoJ29ubW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZl
bnRzLm1vdXNlbGVhdmUgPSAyO1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xu
fSBlbHNlIHtcblx0RWxlbWVudC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91
c2VvdmVyJyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMu
bW91c2VsZWF2ZSA9IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcbn1cblxuLyo8bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIp
e1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQu
RXZlbnRzLmNoYW5nZSA9IHtcblx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUg
PSB0aGlzLnR5cGU7XG5cdFx0XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYm
ICh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFu
Z2UnIDogJ2NoYW5nZSc7XG5cdFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtc
blx0XHRcdHJldHVybiBldmVudC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZl
bnQucHJvcGVydHlOYW1lID09ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+
Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5c
bmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVk
ZSB0aGUgZGVsZWdhdGUgbWV0aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2
ZW50XVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVu
Y3Rpb24oKXtcblxudmFyIGV2ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcjtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZl
RXZlbnRzLmZvY3Vzb3V0ID0gMjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2Vs
Zil7XG5cdFx0aWYgKG1hdGNoKHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQs
IGV2ZW50LCB0YXJnZXQpO1xuXHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnRO
b2RlKTtcblx0fVxufTtcblxudmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6
ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0
fSxcblx0bW91c2VsZWF2ZToge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdm
b2N1cycgKyAoZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6
IHRydWVcblx0fSxcblx0Ymx1cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8g
J2JsdXInIDogJ2ZvY3Vzb3V0Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0
SUU5PiovXG52YXIgX2tleSA9ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1
bmN0aW9uKHR5cGUpe1xuXG5cdHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0
XHRyZW1vdmU6IGZ1bmN0aW9uKHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0
cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlz
dCAmJiBsaXN0LmZvcm1zKSBmb3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xu
XHRcdFx0XHQvLyB0aGUgZm9ybSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3Qg
aGF2ZSB0aGVcblx0XHRcdFx0Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQg
Y2FzZSB0aGUgZXZlbnQgd2FzXG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0
aWYgKGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQo
dHlwZSwgbGlzdC5mbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3Jt
ID0gKHRhcmdldC5nZXQoJ3RhZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQu
Z2V0UGFyZW50KCdmb3JtJyk7XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFy
IGxpc3RlbmVycyA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30p
LFxuXHRcdFx0XHRsaXN0ZW5lciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczog
W119LFxuXHRcdFx0XHRmb3JtcyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7
XG5cblx0XHRcdGlmIChmb3Jtcy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRm
b3Jtcy5wdXNoKGZvcm0pO1xuXG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRc
dFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtc
blx0XHRcdGZvcm0uYWRkRXZlbnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5c
blx0XHRcdGxpc3RlbmVyc1t1aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkg
KyB0eXBlICsgJ2xpc3RlbmVycycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFy
IGlucHV0T2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAn
Zm9jdXNpbicsXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0
YXJnZXQpe1xuXHRcdFx0dmFyIGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0
aGlzLnJlbW92ZUV2ZW50cyhldmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0g
PSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZl
bnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVu
dHMpO1xuXHRcdH1cblx0fTtcbn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVj
dC5hcHBlbmQobWFwLCB7XG5cdHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVz
ZXQ6IGZvcm1PYnNlcnZlcigncmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFu
Z2UnKSxcblx0c2VsZWN0OiBpbnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+
Ki9cblxudmFyIHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8u
YWRkRXZlbnQsXG5cdHJlbW92ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxh
eSA9IGZ1bmN0aW9uKG9sZCwgbWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1
c2VDYXB0dXJlKXtcblx0XHRpZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJu
IG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1
ZG9zWzBdLmtleSAhPSAncmVsYXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNl
dWRvcy5zbGljZSgxKS5lYWNoKGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6
JyArIHBzZXVkby5rZXkgKyAocHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJykn
IDogJycpO1xuXHRcdH0pO1xuXHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1
cm4gbWV0aG9kLmNhbGwodGhpcywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZu
KTtcblx0fTtcbn07XG5cbnZhciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlv
bih0eXBlLCBtYXRjaCwgZm4pe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRl
bGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBm
b3IgKHZhciBfdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZu
ICYmIHN0b3JlZFtfdWlkXS5tYXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5c
dFx0dmFyIF90eXBlID0gdHlwZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFw
W3R5cGVdIHx8IHt9O1xuXHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRj
aCA9IGZ1bmN0aW9uKHRhcmdldCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBf
bWF0Y2gpO1xuXHRcdH07XG5cblx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNb
X3R5cGVdO1xuXHRcdGlmIChfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVu
dEV2ZW50LmNvbmRpdGlvbil7XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24g
PSBfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2gg
PSBmdW5jdGlvbih0YXJnZXQsIGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0
LCBldmVudCkgJiYgY29uZGl0aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9
O1xuXHRcdH1cblxuXHRcdHZhciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7
XG5cdFx0dmFyIGRlbGVnYXRvciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNo
LCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7
fTtcblx0XHRzdG9yZWRbdWlkXSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjog
X2ZuLFxuXHRcdFx0ZGVsZWdhdG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5
cGVdID0gc3RvcmVkO1xuXHRcdHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVn
YXRvciwgX21hcC5jYXB0dXJlKTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlw
ZSwgbWF0Y2gsIGZuLCBfdWlkKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRk
ZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQp
IHJldHVybiB0aGlzO1xuXG5cdFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwg
ZGVsZWdhdG9yID0gc3RvcmVkW191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7
fTtcblx0XHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1v
dmUpIF9tYXAucmVtb3ZlKHRoaXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtc
blx0XHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50
LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRc
dHZhciBfX3VpZCwgcztcblx0XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRc
dHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9
PSBmbikgcmV0dXJuIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRj
aCwgZm4sIF9fdWlkKTtcblx0XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0
cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlv
bi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3Vt
ZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBk
ZWxlZ2F0aW9uLmFkZEV2ZW50KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBk
ZWxlZ2F0aW9uLnJlbW92ZUV2ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTog
RWxlbWVudC5TdHlsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJh
Y3Rpbmcgd2l0aCB0aGUgc3R5bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJv
dmlkZXM6IEVsZW1lbnQuU3R5bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0
bWwgPSBkb2N1bWVudC5odG1sLCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUs
IHdoaWNoIGRvZXMgbm90IHJlbW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5l
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVk
JztcbmVsLnN0eWxlLmNvbG9yID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwu
c3R5bGUuY29sb3IgPT0gJ3JlZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJu
cyBib3JkZXIqIHNob3J0aGFuZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0
aC1zdHlsZSBpbnN0ZWFkIG9mIHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHgg
c29saWQgIzEyM2FiYyc7XG5lbC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0Jv
cmRlcnNJbldyb25nT3JkZXIgPSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxs
O1xuLy88L2x0SUU5PlxuXG52YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENv
bXB1dGVkU3R5bGUsXG5cdHN1cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5zdHlsZS5ib3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0
aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0
eWxlcyk7XG59fTtcblxudmFyIGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51
bGwpLFxuXHRoYXNGaWx0ZXIgPSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxw
aGEgPSAvYWxwaGFcXChvcGFjaXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0
eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0
eScsIG9wYWNpdHkpO1xuXHRlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8
fCBvcGFjaXR5ID09IG51bGwgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5
PlxudmFyIHNldEZpbHRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2
YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBl
bGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIg
PSAocmVnZXhwLnRlc3QoZmlsdGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDog
ZmlsdGVyICsgJyAnICsgdmFsdWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxl
LnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3Bh
Y2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1l
bnQuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wYWNpdHkpe1xuXHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50
LmN1cnJlbnRTdHlsZS5oYXNMYXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChv
cGFjaXR5ID09IG51bGwgfHwgb3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwg
cmVBbHBoYSwgJycpO1xuXHRcdGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50
KSAhPSAxKSBzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScp
O1xuXHR9IGVsc2Uge1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3Bh
Y2l0eT0nICsgKG9wYWNpdHkgKiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5c
dH1cbn0gOiBzZXRWaXNpYmlsaXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkg
PyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNp
dHkgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSAnJykgPyAxIDogb3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1
bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8
IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlm
IChmaWx0ZXIpIG9wYWNpdHkgPSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSBudWxsIHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7
XG59IDogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2
ZSgnJG9wYWNpdHknKTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50
LnN0eWxlLnZpc2liaWxpdHkgPT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5
O1xufSkpO1xuXG52YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkg
PyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAn
MCUnLCB0b3A6ICcwJScsIGNlbnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEw
MCUnfSxcblx0aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5k
UG9zaXRpb25YICE9IG51bGwpLFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIg
Y2FtZWxDYXNlID0gZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFj
ZShwcmVmaXhQYXR0ZXJuLCAnJDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZh
ciByZW1vdmVTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0
eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHBy
b3BlcnR5ICsgJ1gnKTtcblx0XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3Zl
QXR0cmlidXRlKHByb3BlcnR5KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFo
YXNHZXRDb21wdXRlZFN0eWxlICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJy
ZW50U3R5bGVbY2FtZWxDYXNlKHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxl
bWVudC5nZXREb2N1bWVudCh0aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVm
YXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVs
bDtcblx0XHRyZXR1cm4gKGNvbXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHBy
b3BlcnR5ID09IGZsb2F0TmFtZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDog
Jyc7XG5cdH0sXG5cblx0c2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0
aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFs
dWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xu
XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3Bl
cnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2
YWx1ZSkgIT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9w
ZXJ0eV0gfHwgJ0AnKS5zcGxpdCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZh
bHVlKS5tYXAoZnVuY3Rpb24odmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAn
Jztcblx0XHRcdFx0cmV0dXJuICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVw
bGFjZSgnQCcsIE1hdGgucm91bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5c
dFx0fSBlbHNlIGlmICh2YWx1ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFs
dWUgPSBNYXRoLnJvdW5kKHZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0g
PSB2YWx1ZTtcblx0XHQvLzxsdElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09
IG51bGwpICYmIGRvZXNOb3RSZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1
dGUpe1xuXHRcdFx0cmVtb3ZlU3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0
aW9uKHByb3BlcnR5KXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0
T3BhY2l0eSh0aGlzKTtcblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxv
YXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVz
ICYmIHByb3BlcnR5LmluZGV4T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVy
biBbJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlv
bihjb3JuZXIpe1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xu
XHRcdFx0fSwgdGhpcykuam9pbignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5z
dHlsZVtwcm9wZXJ0eV07XG5cdFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcp
e1xuXHRcdFx0aWYgKEVsZW1lbnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkp
KXtcblx0XHRcdFx0cmVzdWx0ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5T
aG9ydFN0eWxlc1twcm9wZXJ0eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRc
dFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRo
aXMuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSAmJiAvXmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0
eSkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0
KS9nLCBmdW5jdGlvbihwb3NpdGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1tw
b3NpdGlvbl07XG5cdFx0XHR9KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYg
cHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0
aWYgKHJlc3VsdCl7XG5cdFx0XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBj
b2xvciA9IHJlc3VsdC5tYXRjaCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAo
Y29sb3IpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hl
eCgpKTtcblx0XHR9XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxl
W3Byb3BlcnR5XSl7XG5cdFx0XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0
eSkgJiYgISgvcHgkLy50ZXN0KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9w
ZXJ0eSA9PSAnd2lkdGgnKSA/IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10s
IHNpemUgPSAwO1xuXHRcdFx0XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dFx0c2l6ZSArPSB0aGlzLmdldFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRv
SW50KCkgKyB0aGlzLmdldFN0eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRc
dFx0fSwgdGhpcyk7XG5cdFx0XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2Fw
aXRhbGl6ZSgpXSAtIHNpemUgKyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlcigu
KylXaWR0aHxtYXJnaW58cGFkZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxv
YXQocmVzdWx0KSkpe1xuXHRcdFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dC8vPGx0SUU5PlxuXHRcdGlmIChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRl
cihUb3B8UmlnaHR8Qm90dG9tfExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChy
ZXN1bHQpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4r
KSQvLCAnJDIgJDMgJDEnKTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJl
c3VsdDtcblx0fSxcblxuXHRzZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2
YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0
aW9uKGtleSl7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9
LCB0aGlzKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxl
cyA9IHtcblx0bGVmdDogJ0BweCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAn
QHB4Jyxcblx0d2lkdGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1h
eEhlaWdodDogJ0BweCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFj
a2dyb3VuZENvbG9yOiAncmdiKEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNr
Z3JvdW5kUG9zaXRpb246ICdAcHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250
U2l6ZTogJ0BweCcsIGxldHRlclNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xp
cDogJ3JlY3QoQHB4IEBweCBAcHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcs
IHBhZGRpbmc6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkg
QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAn
QHB4IEBweCBAcHggQHB4JywgYm9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdy
Z2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6
SW5kZXg6ICdAJywgJ3pvb20nOiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0Bw
eCcsIG9wYWNpdHk6ICdAJywgYm9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxu
XG5cblxuXG5FbGVtZW50LlNob3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBi
b3JkZXI6IHt9LCBib3JkZXJXaWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6
IHt9fTtcblxuWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9u
KGRpcmVjdGlvbil7XG5cdHZhciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBB
bGwgPSBFbGVtZW50LlN0eWxlcztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rp
b24oc3R5bGUpe1xuXHRcdHZhciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0
eWxlXVtzZF0gPSBBbGxbc2RdID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyAr
IGRpcmVjdGlvbjtcblx0U2hvcnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAs
IEAsIEApJztcblx0dmFyIGJkdyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBi
ZGMgPSBiZCArICdDb2xvcic7XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0
aFtiZHddID0gU2hvcnRbYmRdW2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3Jk
ZXJTdHlsZVtiZHNdID0gU2hvcnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQu
Ym9yZGVyQ29sb3JbYmRjXSA9IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAs
IEApJztcbn0pO1xuXG5pZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRT
dHlsZXMuYmFja2dyb3VuZFBvc2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFj
a2dyb3VuZFBvc2l0aW9uWTogJ0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVu
dC5EaW1lbnNpb25zXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0
aCBzaXplLCBzY3JvbGwsIG9yIHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93
IG9iamVjdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0g
RWxlbWVudCBwb3NpdGlvbmluZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9v
Lm9yZy8pIGNvZGUgYW5kIHNtYXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6
Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lv
bnMgYmFzZWQgb24gW1lVSV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwg
W0JTRCBMaWNlbnNlXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1s
KS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0Vs
ZW1lbnQuRGltZW5zaW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVu
dC5hcHBlbmRDaGlsZChjaGlsZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9m
ZnNldFBhcmVudCA9PT0gZWxlbWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIg
aGVpZ2h0Q29tcG9uZW50cyA9IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRv
bScsICdib3JkZXJUb3BXaWR0aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBv
bmVudHMgPSBbJ3dpZHRoJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJM
ZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9
IGZ1bmN0aW9uKGVsKXtcblxuXHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwp
LFxuXHRcdGJvdW5kcyA9IHt4OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHdpZHRoQ29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLngg
Kz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxu
dmFyIGlzT2Zmc2V0ID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdw
b3NpdGlvbicpICE9ICdzdGF0aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRT
dGF0aWMgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFi
bGV8dGR8dGgpJC9pKS50ZXN0KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQo
e1xuXG5cdHNjcm9sbFRvOiBmdW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtc
blx0XHRcdHRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdHRoaXMuc2Nyb2xsTGVmdCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5c
dFx0Ly88bHRJRTk+XG5cdFx0Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5v
dCBjYWxjdWxhdGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJp
bGl0eSBoaWRkZW4uXG5cdFx0aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4
OiB0aGlzLm9mZnNldFdpZHRoLCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5
PlxuXG5cdFx0Ly8gVGhpcyBzdmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRl
U2l6ZSgpYCwgY2FuIGJlIHJlbW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxu
XHRcdC8vIEJ1ZyBpbmZvOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzA5ODVcblx0XHRpZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3Zn
Q2FsY3VsYXRlU2l6ZSh0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhp
cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRo
LCB5OiBib3VuZHMuaGVpZ2h0fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDog
MCwgeTogMH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6
ZSgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWln
aHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRo
aXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6
IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9s
bHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0
aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVu
dCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3Np
dGlvbi55ICs9IGVsZW1lbnQuc2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNl
dFBhcmVudDogYnJva2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVu
dCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50
LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNl
dENoZWNrID0gKHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/
IGlzT2Zmc2V0U3RhdGljIDogaXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVu
dC5wYXJlbnROb2RlKSl7XG5cdFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJu
IGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0
cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRc
dHRyeSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0O1xuXG5cdFx0aWYgKGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIg
Ym91bmQgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9j
dW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0
bWxTY3JvbGwgPSBodG1sLmdldFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMu
Z2V0U2Nyb2xscygpLFxuXHRcdFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3Np
dGlvbicpID09ICdmaXhlZCcpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5s
ZWZ0LnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3Jv
bGwueCkgLSBodG1sLmNsaWVudExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkg
KyBlbGVtU2Nyb2xscy55ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5j
bGllbnRUb3Bcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3Np
dGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRp
b247XG5cblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBv
c2l0aW9uLnggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVt
ZW50Lm9mZnNldFRvcDtcblxuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xu
XHRcdH1cblxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVu
Y3Rpb24ocmVsYXRpdmUpe1xuXHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0
XHRcdHNjcm9sbCA9IHRoaXMuZ2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0
XHRcdHg6IG9mZnNldC54IC0gc2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55
XG5cdFx0fTtcblxuXHRcdGlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChy
ZWxhdGl2ZSkpKXtcblx0XHRcdHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9z
aXRpb24oKTtcblx0XHRcdHJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24u
eCAtIGxlZnRCb3JkZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlv
bi55IC0gdG9wQm9yZGVyKHJlbGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtc
blx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlz
Qm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0
XHR2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9
IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54
LFxuXHRcdFx0dG9wOiBwb3NpdGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhl
aWdodDogc2l6ZS55XG5cdFx0fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0
aDtcblx0XHRvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9i
ajtcblx0fSxcblxuXHRjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJu
IHtcblx0XHRcdGxlZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0Jyks
XG5cdFx0XHR0b3A6IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRc
dH07XG5cdH0sXG5cblx0c2V0UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRo
aXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5c
bltEb2N1bWVudCwgV2luZG93XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJl
dHVybiB7eDogZG9jLmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxu
XHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCks
IGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhP
ZmZzZXQgfHwgZG9jLnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xs
VG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2Mg
PSBnZXRDb21wYXRFbGVtZW50KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5c
dFx0XHRib2R5ID0gdGhpcy5nZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1h
dGgubWF4KGRvYy5zY3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRo
Lm1heChkb2Muc2Nyb2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxc
blxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xu
XHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhp
cy5nZXRTaXplKCk7XG5cdFx0cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55
LCByaWdodDogc2l6ZS54LCBoZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxu
fSk7XG5cbi8vIHByaXZhdGUgbWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50Lmdl
dENvbXB1dGVkU3R5bGU7XG5cbmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtc
blx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5c
blxuXG5mdW5jdGlvbiB0b3BCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihl
bGVtZW50LCAnYm9yZGVyLXRvcC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVs
ZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRo
Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8
aHRtbCkkL2kpLnRlc3QoZWxlbWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0
RWxlbWVudChlbGVtZW50KXtcblx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0
cmV0dXJuICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVu
dC5hbGlhcyh7cG9zaXRpb246ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltX
aW5kb3csIERvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRI
ZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5c
blx0Z2V0V2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbCgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTY3JvbGwoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRT
Y3JvbGxXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCku
eDtcblx0fSxcblxuXHRnZXRUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9z
aXRpb24oKS55O1xuXHR9LFxuXG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0UG9zaXRpb24oKS54O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4
dGVuZGVkIGJ5IGFsbCBvdGhlciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJs
ZV1cblxucHJvdmlkZXM6IEZ4XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9
IHRoaXMuRnggPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBP
cHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25T
dGFydDogbmlsLFxuXHRcdG9uQ2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRc
dCovXG5cdFx0ZnBzOiA2MCxcblx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxu
XHRcdGZyYW1lczogbnVsbCxcblx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9y
ZSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1
YmplY3QgPSB0aGlzLnN1YmplY3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdH0sXG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24ocCl7XG5cdFx0XHRyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7
XG5cdFx0fTtcblx0fSxcblxuXHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZnJhbWVTa2lwKXtcblx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/
IChub3cgLSB0aGlzLnRpbWUpIDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZh
bDtcblx0XHRcdHRoaXMudGltZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMu
ZnJhbWUgPCB0aGlzLmZyYW1lcyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24o
dGhpcy5mcmFtZSAvIHRoaXMuZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0
aGlzLmZyb20sIHRoaXMudG8sIGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20s
IHRoaXMudG8sIDEpKTtcblx0XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6
IGZ1bmN0aW9uKG5vdyl7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5j
dGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBk
ZWx0YSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVu
bmluZygpKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0
XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2Fz
ZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7
IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0
OiBmdW5jdGlvbihmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0
dGhpcy5mcmFtZSA9ICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigp
O1xuXHRcdHZhciBmcmFtZXMgPSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlv
bnMuZnBzLCBkdXJhdGlvbiA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0
aW9uID0gRnguRHVyYXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRo
aXMuZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMg
fHwgTWF0aC5yb3VuZCh0aGlzLmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRp
ZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJl
c2V0VGhlbmFibGUodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0
YXJ0JywgdGhpcy5zdWJqZWN0KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVz
ID09IHRoaXMuZnJhbWUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50
KCdjaGFpbkNvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRc
dHRoaXMuZmlyZUV2ZW50KCdzdG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRo
aXMucmVzb2x2ZSh0aGlzLnN1YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtc
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMu
ZnJhbWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlz
LnN1YmplY3QpLmNsZWFyQ2hhaW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmlzUGF1c2VkKCkpIHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGlzdCA9IGluc3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAm
JiBsaXN0LmNvbnRhaW5zKHRoaXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmco
KTtcblx0fVxuXG59KTtcblxuRnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7
XG5cdHJldHVybiAodG8gLSBmcm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9u
cyA9IHsnc2hvcnQnOiAyNTAsICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGds
b2JhbCB0aW1lcnNcblxudmFyIGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxv
b3AgPSBmdW5jdGlvbigpe1xuXHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9
IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlm
IChpbnN0YW5jZSkgaW5zdGFuY2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3Rh
bmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5z
dGFuY2VzW2Zwc10gPSBbXSk7XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBz
XSkgdGltZXJzW2Zwc10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwg
bGlzdCk7XG59O1xuXG52YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxp
c3QgPSBpbnN0YW5jZXNbZnBzXTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7
XG5cdFx0aWYgKCFsaXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5z
dGFuY2VzW2Zwc107XG5cdFx0XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zw
c10pO1xuXHRcdH1cblx0fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1Nc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5
IEZ4LlR3ZWVuLCBGeC5Nb3JwaCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRngu
Q1NTXG5cbi4uLlxuKi9cblxuRnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxc
blxuXHQvL3ByZXBhcmVzIHRoZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVu
Y3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29u
dmVydCh2YWx1ZXMpO1xuXHRcdHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtc
blx0XHRpZiAodG8gPT0gbnVsbCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxl
bWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51
bml0O1xuXHRcdFx0Ly8gYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIv
ZngvYmxvYi9tYXN0ZXIvZnguanMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBl
b2YgZnJvbSA9PSAnc3RyaW5nJyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAm
JiBwYXJzZUZsb2F0KGZyb20pICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3Bl
cnR5LCB0byArIHVuaXQpO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExl
ZnQgb3IgcGl4ZWxXaWR0aFxuXHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRc
dFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxD
YXNlKCldO1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFk
YXB0ZWQgZnJvbSBEZWFuIEVkd2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAw
Ny8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0g
ZWxlbWVudC5zdHlsZS5sZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8g
KyB1bml0O1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0
XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0
XHR9XG5cdFx0XHRcdGZyb20gPSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkg
KiAocGFyc2VGbG9hdChmcm9tKSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9w
ZXJ0eSwgZnJvbSArIHVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRo
aXMucGFyc2UoZnJvbSksIHRvOiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMg
YSB2YWx1ZSBpbnRvIGFuIGFycmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2
YWx1ZSA9IEZ1bmN0aW9uLmNvbnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZh
bHVlID09ICdzdHJpbmcnKSA/IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVl
KTtcblx0XHRyZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJp
bmcodmFsKTtcblx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRngu
Q1NTLlBhcnNlcnMsIGZ1bmN0aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJu
O1xuXHRcdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChw
YXJzZWQgfHwgcGFyc2VkID09PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBh
cnNlcn07XG5cdFx0XHR9KTtcblx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBh
cnNlcjogRnguQ1NTLlBhcnNlcnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9
KTtcblx0fSxcblxuXHQvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0
cywgdXNpbmcgdGhlaXIgcGFyc2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywg
ZGVsdGEpe1xuXHRcdHZhciBjb21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0
aCwgdG8ubGVuZ3RoKSkudGltZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2
YWx1ZTogZnJvbVtpXS5wYXJzZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwg
ZGVsdGEpLCBwYXJzZXI6IGZyb21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQu
JGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBj
b21wdXRlZDtcblx0fSxcblxuXHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRz
ZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdm
eDpjc3M6dmFsdWUnKSB2YWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5l
ZCA9IFtdO1xuXHRcdHZhbHVlLmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0g
cmV0dXJuZWQuY29uY2F0KGJpdC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0
fSk7XG5cdFx0cmV0dXJuIHJldHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdl
IHRvIGFuIGVsZW1lbnRcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2
YWx1ZSwgdW5pdCl7XG5cdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2
YWx1ZSwgdW5pdCkpO1xuXHR9LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0
byBmaW5kIHRoZSB2YWx1ZXMgZm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNl
bGVjdG9yKXtcblx0XHRpZiAoRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5D
YWNoZVtzZWxlY3Rvcl07XG5cdFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdF
eHAoJ14nICsgc2VsZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJj
aFN0eWxlcyA9IGZ1bmN0aW9uKHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0
aW9uKHJ1bGUpe1xuXHRcdFx0XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5
bGVzKHJ1bGUucnVsZXMgfHwgcnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdGlmICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2Vs
ZWN0b3JUZXh0ID0gKHJ1bGUuc2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxh
Y2UoL15cXHcrLywgZnVuY3Rpb24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2Uo
KTtcblx0XHRcdFx0fSkgOiBudWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2Vs
ZWN0b3JUZXN0LnRlc3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFj
aChFbGVtZW50LlN0eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAo
IXJ1bGUuc3R5bGVbc3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47
XG5cdFx0XHRcdFx0dmFsdWUgPSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRc
dHRvW3N0eWxlXSA9ICgoL15yZ2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDog
dmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2go
ZG9jdW1lbnQuc3R5bGVTaGVldHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0g
c2hlZXQuaHJlZjtcblx0XHRcdGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAm
JiBocmVmLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFy
IHJ1bGVzID0gc2hlZXQucnVsZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHls
ZXMocnVsZXMpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0g
dG87XG5cdH1cblxufSk7XG5cbkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9
IHtcblxuXHRDb2xvcjoge1xuXHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAo
dmFsdWUubWF0Y2goL14jWzAtOWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0
cnVlKTtcblx0XHRcdHJldHVybiAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxc
ZCspLFxccyooXFxkKykvKSkpID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFs
c2U7XG5cdFx0fSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRc
dFx0cmV0dXJuIGZyb20ubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1h
dGgucm91bmQoRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xu
XHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5t
YXAoTnVtYmVyKTtcblx0XHR9XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNl
RmxvYXQsXG5cdFx0Y29tcHV0ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUsIHVuaXQpe1xuXHRcdFx0cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xu
XHRcdH1cblx0fSxcblxuXHRTdHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChm
YWxzZSksXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBv
bmU7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVy
bztcblx0XHR9XG5cdH1cblxufTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxu
ZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55
IG51bWJlciBvZiBDU1MgcHJvcGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qg
b2YgcnVsZXMsIG9yIENTUyBiYXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5c
bi4uLlxuKi9cblxuRnguTW9ycGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxc
blxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVs
ZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBh
cmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5
cGVvZiBub3cgPT0gJ3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2
YXIgcCBpbiBub3cpIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9w
dGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rp
b24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBp
biBmcm9tKSBub3dbcF0gPSB0aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRc
dHJldHVybiBub3c7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRc
dGlmICghdGhpcy5jaGVjayhwcm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVv
ZiBwcm9wZXJ0aWVzID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVy
dGllcyk7XG5cdFx0dmFyIGZyb20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHBy
b3BlcnRpZXMpe1xuXHRcdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQs
IHAsIHByb3BlcnRpZXNbcF0pO1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0
dG9bcF0gPSBwYXJzZWQudG87XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0
byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6
IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9w
dGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFt
b3JwaCl7XG5cdFx0XHRtb3JwaCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9
KTtcblx0XHRcdHRoaXMuc3RvcmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4g
bW9ycGg7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5j
dGlvbihwcm9wcyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25z
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0
byBiZSB1c2VkIHdpdGggYW55IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQ
ZW5uZXIsIDxodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFu
ZCBvcHRpbWl6ZWQgdG8gYmUgdXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxu
cHJvdmlkZXM6IEZ4LlRyYW5zaXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxu
XHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9u
cy50cmFuc2l0aW9uIHx8IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0
eXBlb2YgdHJhbnMgPT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgn
OicpO1xuXHRcdFx0dHJhbnMgPSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNb
ZGF0YVswXV0gfHwgdHJhbnNbZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFb
MV0pIHRyYW5zID0gdHJhbnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsy
XSA/IGRhdGFbMl0uY2FwaXRhbGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5z
O1xuXHR9XG5cbn0pO1xuXG5GeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFy
YW1zKXtcblx0cGFyYW1zID0gQXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0g
ZnVuY3Rpb24ocG9zKXtcblx0XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07
XG5cdHJldHVybiBPYmplY3QuYXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxu
XHRcdGVhc2VPdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24o
MSAtIHBvcywgcGFyYW1zKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAocG9zIDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6
ICgyIC0gdHJhbnNpdGlvbigyICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0
fSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8p
e1xuXHRcdHJldHVybiB6ZXJvO1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRl
bmQgPSBmdW5jdGlvbih0cmFuc2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJh
bnNpdGlvbnMpIEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24o
dHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtc
blxuXHRQb3c6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhb
MF0gfHwgNik7XG5cdH0sXG5cblx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgu
cG93KDIsIDggKiAocCAtIDEpKTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRy
ZXR1cm4gMSAtIE1hdGguc2luKE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rp
b24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxu
XG5cdEJhY2s6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0
Qm91bmNlOiBmdW5jdGlvbihwKXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAs
IGIgPSAxOyAxOyBhICs9IGIsIGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAv
IDExKXtcblx0XHRcdFx0dmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEg
KiBwKSAvIDQsIDIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHZhbHVlO1xuXHR9LFxuXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBN
YXRoLnBvdygyLCAxMCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYg
eFswXSB8fCAxKSAvIDMpO1xuXHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQn
LCAnUXVpbnQnXS5lYWNoKGZ1bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9u
c1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVy
biBNYXRoLnBvdyhwLCBpICsgMik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRngu
VHdlZW5cblxuZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNp
dGlvbiBhbnkgQ1NTIHByb3BlcnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBF
bGVtZW50LmZhZGUsIEVsZW1lbnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rp
b24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0g
ZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5c
blx0c2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0
aCA9PSAxKXtcblx0XHRcdG5vdyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnBy
b3BlcnR5IHx8IHRoaXMub3B0aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIo
dGhpcy5lbGVtZW50LCBwcm9wZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7
XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xu
XHRcdHZhciBhcmdzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVy
dHkgPSB0aGlzLm9wdGlvbnMucHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJz
ZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0
XHRyZXR1cm4gdGhpcy5wYXJlbnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7
XG5cbkVsZW1lbnQuUHJvcGVydGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0
d2VlbiA9IHRoaXMucmV0cmlldmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0
d2VlbiA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMu
c3RvcmUoJ3R3ZWVuJywgdHdlZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxu
fTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0
byk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2
YXIgZmFkZSA9IHRoaXMuZ2V0KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5h
cHBlbmQoYXJndW1lbnRzKSwgdG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3Nb
MV0gPSAndG9nZ2xlJztcblx0XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93Jzog
bWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBt
ZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpc
blx0XHRcdFx0dmFyIGZsYWcgPSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0
eWxlKCdvcGFjaXR5JykgPT0gMSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRc
dGFyZ3NbMV0gPSBmbGFnID8gMCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycs
ICFmbGFnKTtcblx0XHRcdFx0dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRk
ZWZhdWx0OiBtZXRob2QgPSAnc3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5l
bGltaW5hdGUoJ2ZhZGU6ZmxhZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdz
KTtcblx0XHR2YXIgdG8gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9k
ID09ICdzZXQnKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8g
J2hpZGRlbicgOiAndmlzaWJsZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRp
ZiAoZmFkZS4kY2hhaW4ubGVuZ3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xu
XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7
XG5cdFx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRc
dH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRp
ZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhp
cy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlz
LmNhbGxDaGFpbigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0aGlnaGxpZ2h0OiBmdW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5c
dFx0XHRlbmQgPSB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJl
bnQnKSA/ICcjZmZmJyA6IGVuZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3
ZWVuJyk7XG5cdFx0dHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2Zm
ZmY4OCcsIGVuZCkuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tn
cm91bmQtY29sb3InLCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0
XHR0d2Vlbi5jYWxsQ2hhaW4oKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246
IFBvd2VyZnVsIGFsbCBwdXJwb3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3Qu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxl
bWVudCwgQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5c
bnByb3ZpZGVzOiBSZXF1ZXN0XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0
eSA9IGZ1bmN0aW9uKCl7fSxcblx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBu
ZXcgQnJvd3Nlci5SZXF1ZXN0KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcg
Q2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5U
aGVuYWJsZV0sXG5cblx0b3B0aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30s
XG5cdFx0b25Mb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVz
czogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30s
XG5cdFx0b25DYW5jZWw6IGZ1bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJl
c3BvbnNlVGV4dCwgcmVzcG9uc2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIp
e30sXG5cdFx0b25FeGNlcHRpb246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRc
dG9uVGltZW91dDogZnVuY3Rpb24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAn
Jyxcblx0XHR3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRh
OiAnJyxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRw
UmVxdWVzdCcsXG5cdFx0XHQnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBh
cHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxc
blx0XHRmb3JtYXQ6IGZhbHNlLFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25v
cmUnLFxuXHRcdGlzU3VjY2VzczogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJs
RW5jb2RlZDogdHJ1ZSxcblx0XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czog
ZmFsc2UsXG5cdFx0ZXZhbFJlc3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5v
Q2FjaGU6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHRoaXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9
LFxuXG5cdG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhy
O1xuXHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtc
blx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVu
Y3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7
XG5cdFx0XHR0aGlzLnN0YXR1cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5c
dFx0fS5iaW5kKHRoaXMpKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5c
dFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQg
PSBlbXB0eTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50
aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3Bv
bnNlID0ge3RleHQ6IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5y
ZXNwb25zZVhNTH07XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0
aGlzLnN0YXR1cykpXG5cdFx0XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlz
LnJlc3BvbnNlLnhtbCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5c
blx0aXNTdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztc
blx0XHRyZXR1cm4gKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRp
c1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxu
XG5cdHByb2Nlc3NTY3JpcHRzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25z
LmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRl
cignQ29udGVudC10eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVy
biB0ZXh0LnN0cmlwU2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5c
dHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5w
cm9jZXNzU2NyaXB0cyh0ZXh0KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQs
IHhtbDogeG1sfSk7XG5cdH0sXG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJn
dW1lbnRzKS5jYWxsQ2hhaW4oKTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMub25GYWlsdXJlKCk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4
aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtc
blx0fSxcblxuXHRsb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVu
dCgnbG9hZHN0YXJ0JywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBm
dW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0
aGlzLnhocl0pO1xuXHR9LFxuXG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJl
RXZlbnQoJ3RpbWVvdXQnLCB0aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3Rp
bWVvdXQnLCB4aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihu
YW1lLCB2YWx1ZSl7XG5cdFx0dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4g
RnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJl
c3BvbnNlSGVhZGVyKG5hbWUpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6
IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYg
KCF0aGlzLmNoZWNrKG9wdGlvbnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5p
c1N1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRc
dHRoaXMucnVubmluZyA9IHRydWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtc
blx0XHRpZiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9
IHtkYXRhOiBvcHRpb25zfTtcblxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0
aW9ucyA9IE9iamVjdC5hcHBlbmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhv
ZDogb2xkLm1ldGhvZH0sIG9wdGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1
cmwgPSBTdHJpbmcob3B0aW9ucy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2Vy
Q2FzZSgpO1xuXG5cdFx0c3dpdGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVu
dCc6IGRhdGEgPSBkb2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmlu
ZyhkYXRhKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2
YXIgZm9ybWF0ID0gJ2Zvcm1hdD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEg
PSAoZGF0YSkgPyBmb3JtYXQgKyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZW11bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0
aG9kKSl7XG5cdFx0XHR2YXIgX21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRk
YXRhID0gKGRhdGEpID8gX21ldGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0
aG9kID0gJ3Bvc3QnO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAm
JiBbJ3Bvc3QnLCAncHV0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2Rpbmcg
PSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5l
bmNvZGluZyA6ICcnO1xuXHRcdFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0
aWYgKCF1cmwpIHVybCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRy
aW1Qb3NpdGlvbiA9IHVybC5sYXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24g
PiAtMSAmJiAodHJpbVBvc2l0aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJs
LnN1YnN0cigwLCB0cmltUG9zaXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hl
KVxuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3Ry
aW5nLnVuaXF1ZUlEKCk7XG5cblx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1l
dGhvZCA9PSAnZGVsZXRlJykpe1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEg
PyAnJicgOiAnPycpICsgZGF0YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZh
ciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5v
bmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9n
cmVzcyA9IHRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3Blbiht
ZXRob2QudG9VcHBlckNhc2UoKSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9u
cy51c2VyLCB0aGlzLm9wdGlvbnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndp
dGhDcmVkZW50aWFscykgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRl
bnRpYWxzID0gdHJ1ZTtcblxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3Rh
dGVDaGFuZ2UuYmluZCh0aGlzKTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVu
Y3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhl
YWRlcihrZXksIHZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVF
dmVudCgnZXhjZXB0aW9uJywgW2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3Jl
YXNvbjogJ2V4Y2VwdGlvbicsIHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0
XHR9LCB0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRp
bmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9
XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0
XHRpZiAoIXRoaXMub3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxz
ZSBpZiAodGhpcy5vcHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVs
YXkodGhpcy5vcHRpb25zLnRpbWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRo
aXM7XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xu
XHRcdHhoci5hYm9ydCgpO1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91
dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIu
b25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhy
Lm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5l
dyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0
dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1
dCcsICdkZWxldGUnLCAncGF0Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVM
RVRFJywgJ1BBVENIJywgJ0hFQUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNb
bWV0aG9kXSA9IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRo
b2Q6IG1ldGhvZFxuXHRcdH07XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBk
YXRhO1xuXHRcdHJldHVybiB0aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0
LmltcGxlbWVudChtZXRob2RzKTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0
c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJyku
Y2FuY2VsKCk7XG5cdFx0c2VuZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmll
dmUoJ3NlbmQnKTtcblx0XHRpZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtc
blx0XHRcdFx0ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21l
dGhvZCcpIHx8ICdwb3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRc
dFx0dGhpcy5zdG9yZSgnc2VuZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0
fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtc
blx0XHR2YXIgc2VuZGVyID0gdGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0
YTogdGhpcywgdXJsOiB1cmwgfHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1M
XG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRk
aXRpb25hbCBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0
XVxuXG5wcm92aWRlczogUmVxdWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1
cGRhdGU6IGZhbHNlLFxuXHRcdGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUs
XG5cdFx0ZmlsdGVyOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0
L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0
c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMs
IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0
cmlwU2NyaXB0cyhmdW5jdGlvbihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9
IHNjcmlwdDtcblx0XHR9KTtcblxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2go
Lzxib2R5W14+XSo+KFtcXHNcXFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVz
cG9uc2UuaHRtbCA9IG1hdGNoWzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdicp
LnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAu
Y2hpbGROb2Rlcztcblx0XHRyZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0
aW9ucy5maWx0ZXIgfHwgJyonKTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2Uu
dHJlZSA9IHJlc3BvbnNlLmVsZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0
XHR2YXIgdXBkYXRlID0gZG9jdW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0
XHRpZiAob3B0aW9ucy5maWx0ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5c
dFx0XHRlbHNlIHVwZGF0ZS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2Ug
aWYgKG9wdGlvbnMuYXBwZW5kKXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRp
b25zLmFwcGVuZCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRz
LnJldmVyc2UoKS5pbmplY3QoYXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAu
Z2V0Q2hpbGRyZW4oKSk7XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93
c2VyLmV4ZWMocmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNw
b25zZS50cmVlLCByZXNwb25zZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2
YXNjcmlwdCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50
czogcmVzcG9uc2UuZWxlbWVudHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJl
c3BvbnNlLmphdmFzY3JpcHR9KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxv
YWQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMu
Z2V0KCdsb2FkJykuY2FuY2VsKCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9
IHRoaXMucmV0cmlldmUoJ2xvYWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5l
dyBSZXF1ZXN0LkhUTUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMs
IG1ldGhvZDogJ2dldCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9
XG5cdFx0cmV0dXJuIGxvYWQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dGxvYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5Lmxpbmso
YXJndW1lbnRzLCB7ZGF0YTogVHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxu
ZGVzY3JpcHRpb246IEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cblNlZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWly
ZXM6IFtBcnJheSwgU3RyaW5nLCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxu
XG4uLi5cbiovXG5cbmlmICh0eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0g
e307XG5cblxuXG4oZnVuY3Rpb24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYics
ICdcXHQnOiAnXFxcXHQnLCAnXFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAn
XFxcXHInLCAnXCInIDogJ1xcXFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2Nh
cGUgPSBmdW5jdGlvbihjaHIpe1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAo
JzAwMDAnICsgY2hyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xu
XG5KU09OLnZhbGlkYXRlID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJl
cGxhY2UoL1xcXFwoPzpbXCJcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5c
blx0XHRcdFx0XHRyZXBsYWNlKC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8
LT9cXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0
XHRyZXBsYWNlKC8oPzpefDp8LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15b
XFxdLDp7fVxcc10qJC8pLnRlc3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5z
dHJpbmdpZnkgPyBmdW5jdGlvbihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtc
bn0gOiBmdW5jdGlvbihvYmope1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50
b0pTT04oKTtcblxuXHRzd2l0Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxu
XHRcdFx0cmV0dXJuICdcIicgKyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBl
c2NhcGUpICsgJ1wiJztcblx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2Jq
Lm1hcChKU09OLmVuY29kZSkuY2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNl
ICdoYXNoJzpcblx0XHRcdHZhciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFs
dWUpO1xuXHRcdFx0XHRpZiAoanNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6
JyArIGpzb24pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xu
XHRcdGNhc2UgJ251bWJlcic6IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0
Y2FzZSAnbnVsbCc6IHJldHVybiAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5c
bkpTT04uc2VjdXJlID0gdHJ1ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywg
c2VjdXJlKXtcblx0aWYgKCFzdHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJl
dHVybiBudWxsO1xuXG5cdGlmIChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7
XG5cdGlmIChzZWN1cmUpe1xuXHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShz
dHJpbmcpO1xuXHRcdGlmICghSlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3Io
J0pTT04gY291bGQgbm90IGRlY29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5k
IHRoZSB2YWx1ZSBpcyBub3Qgc2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsg
c3RyaW5nICsgJyknKTtcbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5K
U09OXG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGgg
YWRkaXRpb25hbCBtZXRob2RzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09O
XVxuXG5wcm92aWRlczogUmVxdWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
Km9uRXJyb3I6IGZ1bmN0aW9uKHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5c
dH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQo
b3B0aW9ucyk7XG5cdFx0T2JqZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2Nl
cHQnOiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0
fSk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5c
dFx0dHJ5IHtcblx0XHRcdGpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0
ZXh0LCB0aGlzLm9wdGlvbnMuc2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0
aGlzLmZpcmVFdmVudCgnZXJyb3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0
XHR9XG5cdFx0aWYgKGpzb24gPT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0dGhpcy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJl
c29sdmUoe2pzb246IGpzb24sIHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogQ29va2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcs
IHJlYWRpbmcsIGFuZCBkZWxldGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkg
UGV0ZXItUGF1bCBLb2NoIChodHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09w
dGlvbnMsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29v
a2llID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6
IHtcblx0XHRwYXRoOiAnLycsXG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFs
c2UsXG5cdFx0c2VjdXJlOiBmYWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5j
b2RlOiB0cnVlLFxuXHRcdGh0dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRP
cHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5lbmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVl
KTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0
aGlzLm9wdGlvbnMuZG9tYWluO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0g
JzsgcGF0aD0nICsgdGhpcy5vcHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJh
dGlvbil7XG5cdFx0XHR2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUo
ZGF0ZS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAx
MDAwKTtcblx0XHRcdHZhbHVlICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtc
blx0XHR9XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xu
XHRcdHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVl
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IHZhbHVlID0gdGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxz
KicgKyB0aGlzLmtleS5lc2NhcGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAo
dmFsdWUpID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0
ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVy
Z2Uoe30sIHRoaXMub3B0aW9ucywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUsIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZh
bHVlKTtcbn07XG5cbkNvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBD
b29raWUoa2V5KS5yZWFkKCk7XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwg
b3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xu
fTtcblxuLypcbi0tLVxuXG5uYW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
dGhlIGN1c3RvbSBldmVudCBkb21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbQnJvd3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlk
ZXM6IFtET01SZWFkeSwgRG9tUmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywg
ZG9jdW1lbnQpe1xuXG52YXIgcmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNo
b3VsZFBvbGwsXG5cdHRpbWVyLFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpO1xuXG52YXIgZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQo
dGltZXIpO1xuXHRpZiAoIXJlYWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1
ZTtcblx0XHRkb2N1bWVudC5yZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJl
YWR5KS5yZW1vdmVMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1
bWVudC5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVh
ZHknKTtcblx0fVxuXHQvLyBjbGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cg
PSB0ZXN0RWxlbWVudCA9IG51bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRm
b3IgKHZhciBpID0gY2hlY2tzLmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRk
b21yZWFkeSgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5c
bnZhciBwb2xsID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFj
aGVjaygpKSB0aW1lciA9IHNldFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRk
TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4v
LyBkb1Njcm9sbCB0ZWNobmlxdWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53
Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93
cyB3aGVuIHRoZSBET00gaXMgbm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIg
ZG9TY3JvbGxXb3JrcyA9IGZ1bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9T
Y3JvbGwoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuLy8gSWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0
byBkZXRlcm1pbmUgZG9tcmVhZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxl
bWVudC5kb1Njcm9sbCAmJiAhZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3Jv
bGxXb3Jrcyk7XG5cdHNob3VsZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChk
b2N1bWVudC5yZWFkeVN0YXRlKSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUg
PSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0
YXRlID09ICdjb21wbGV0ZScpO1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBk
b2N1bWVudCkgZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5lbHNlIHNob3VsZFBvbGwgPSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5F
bGVtZW50LkV2ZW50cy5kb21yZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRp
ZiAocmVhZHkpIGZuLmNhbGwodGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRv
bXJlYWR5IGZpcmVzIGJlZm9yZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNl
OiAnbG9hZCcsXG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlz
ID09IHdpbmRvdykgZm4uY2FsbCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdGlmICh0aGlzID09IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVs
ZXRlIEVsZW1lbnQuRXZlbnRzLmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59
O1xuXG4vLyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFk
ZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3
aW5kb3csIGRvY3VtZW50KTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8qIE1vb1Rvb2xzOiB0aGUg
amF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmln
aHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL21v
b3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIgQnVpbGQ6IGh0dHBzOi8vbW9vdG9vbHMubmV0L2Nv
cmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgwN2IxNzNkNWRlZmY2NzNmY1xuKi9cbi8qXG4tLS1c
blxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlvbjogVGhlIGhlYXJ0IG9mIE1vb1Rvb2xzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIw
MDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLyku
XG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0dHA6Ly9tb290b29s
cy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3BpcmF0aW9uOlxuICAtIENsYXNzIGltcGxlbWVudGF0
aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9n
LzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2FyZHMsIFtHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl
cy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBpbnNwaXJlZCBieSBb
UHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmlnaHQgKGMpIDIwMDUt
MjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuXG5wcm92aWRlczogW0NvcmUsIE1vb1Rvb2xzLCBU
eXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV1cblxuLi4uXG4qL1xuLyohIE1vb1Rvb2xz
OiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBj
b3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXShodHRw
czovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4qL1xuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuTW9vVG9v
bHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcsXG5cdGJ1aWxkOiAnNTI5NDIyODcyYWRmZmY0MDFi
OTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07XG5cbi8vIHR5cGVPZiwgaW5zdGFuY2VPZlxuXG52
YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0g
bnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYgKGl0ZW0uJGZhbWlseSAhPSBudWxsKSByZXR1cm4g
aXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0ZW0ubm9kZU5hbWUpe1xuXHRcdGlmIChpdGVtLm5v
ZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVudCc7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MykgcmV0dXJuICgvXFxTLykudGVzdChpdGVtLm5vZGVWYWx1ZSkgPyAndGV4dG5vZGUnIDogJ3do
aXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyl7
XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0pIHJldHVybiAnYXJndW1lbnRzJztcblx0XHRpZiAo
J2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29sbGVjdGlvbic7XG5cdH1cblxuXHRyZXR1cm4gdHlw
ZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFuY2VPZiA9IGZ1bmN0
aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBmYWxzZTtcblx0
dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5jb25zdHJ1Y3Rvcjtc
blx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0XHRpZiAoY29uc3RydWN0b3IgPT09IG9iamVjdCkg
cmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5wYXJlbnQ7XG5cdH1c
blx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVtLmhhc093blByb3BlcnR5KSByZXR1cm4gZmFsc2U7
XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVjdDtcbn07XG5c
bnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5c
bi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJsZXMgPSB0cnVlO1xuZm9yICh2YXIgaSBpbiB7dG9T
dHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7XG5pZiAoZW51bWVyYWJsZXMpIGVudW1lcmFi
bGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAncHJv
cGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAnY29uc3Ry
dWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmplY3QsIGZu
LCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51bWVyYWJsZXMubGVu
Z3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVudW1lcmFibGVzW2ldO1xuXHRcdC8vIHNpZ25hdHVy
ZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9hZFNldHRlciBjYW4gZGlyZWN0bHkgcGFzcyB0aGVc
blx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdpdGhvdXQgc3dhcHBpbmcgYXJndW1lbnRzLlxuXHRc
dGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwoYmluZCwgaywgb2Jq
ZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4PiovXG5cbi8vIEZ1bmN0aW9uIG92ZXJsb2FkaW5n
XG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5v
dmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztc
blx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmIChhID09IG51bGwpIHJldHVybiB0aGlz
O1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlwZW9mIGEgIT0gJ3N0cmluZycpe1xuXHRcdFx0Zm9y
ICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhpcywgaywgYVtrXSk7XG5cdFx0XHQvKjxsdElFOD4q
L1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KGEsIHNlbGYsIHRoaXMpO1xuXHRc
dFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuY2FsbCh0aGlzLCBhLCBi
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5
cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRo
aXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtcblx0XHR2YXIgYXJncywgcmVzdWx0O1xuXHRcdGlm
ICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJncyA9IGE7XG5cdFx0ZWxzZSBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0ZWxzZSBpZiAodXNlUGx1cmFsKSBh
cmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtcblx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJnc1tpXV0gPSBzZWxm
LmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IHNlbGYu
Y2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn07XG5cbkZ1
bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpc1tr
ZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5p
bXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpcy5wcm90b3R5cGVba2V5XSA9
IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG4vLyBGcm9tXG5cbnZhciBzbGljZSA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xu
XHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107XG5cdHJldHVybiAoVHlwZS5pc0VudW1lcmFi
bGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVPZihpdGVtKSA9PSAn
YXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dO1xufTtcblxuRnVuY3Rp
b24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSAn
ZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBpdGVtO1xuXHR9O1xu
fTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgbnVtYmVyID0g
cGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJuIGlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiBu
dWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIGl0
ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlvbi5mcm9tID0gRnVuY3Rpb24uY29udmVydDtcbk51
bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7XG5TdHJpbmcuZnJvbSA9IFN0cmluZy5jb252ZXJ0
O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0aGlkZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRkZW4gPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kcHJvdGVjdGVkID0gdHJ1
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLy8gVHlwZVxuXG52YXIgVHlwZSA9
IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCl7XG5cdGlmIChuYW1lKXtcblx0XHR2
YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHR5cGVDaGVjayA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gbG93ZXIpO1xuXHRcdH07
XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVDaGVjaztcblx0XHRpZiAob2JqZWN0ICE9
IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0gKGZ1bmN0aW9uKCl7XG5c
dFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRcdH0pLmhpZGUoKTtcblx0XHRcdFxuXHRcdH1cblx0
fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0b2JqZWN0LmV4dGVu
ZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1Y3RvciA9IFR5cGU7XG5cdG9iamVjdC5wcm90b3R5
cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xuXG5cdHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIg
dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5UeXBlLmlzRW51bWVyYWJs
ZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKGl0ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRl
bS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9TdHJpbmcuY2FsbChpdGVtKSAhPSAnW29iamVjdCBG
dW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9va3MgPSB7fTtcblxudmFyIGhvb2tzT2YgPSBmdW5j
dGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90eXBlKTtcblx0
cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29rc1t0eXBlXSA9IFtdKTtcbn07XG5cbnZhciBpbXBs
ZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4k
aGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTtcblxuXHRmb3Ig
KHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgaG9vayA9IGhvb2tz
W2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykgPT0gJ3R5cGUnKSBpbXBsZW1lbnQuY2FsbChob29r
LCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2UgaG9vay5jYWxsKHRoaXMsIG5hbWUsIG1ldGhvZCk7
XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTtcblx0aWYgKHBy
ZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXMucHJvdG90eXBlW25h
bWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlzW25hbWVdID09IG51bGwgJiYgdHlwZU9mKG1ldGhv
ZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNhbGwodGhpcywgbmFtZSwgZnVuY3Rpb24oaXRlbSl7
XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShpdGVtLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkp
O1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRp
ZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cdHZhciBwcmV2aW91cyA9IHRo
aXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtcblxuVHlwZS5pbXBsZW1lbnQoe1xuXG5cdGltcGxl
bWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0ZXh0ZW5kOiBleHRlbmQub3Zl
cmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczogZnVuY3Rpb24obmFtZSwgZXhpc3Rpbmcpe1xuXHRc
dGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUsIHRoaXMucHJvdG90eXBlW2V4aXN0aW5nXSk7XG5c
dH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRtaXJyb3I6IGZ1bmN0aW9uKGhvb2spe1xuXHRcdGhv
b2tzT2YodGhpcykucHVzaChob29rKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
bmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxuLy8gRGVmYXVsdCBUeXBlc1xuXG52YXIgZm9yY2Ug
PSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1ldGhvZHMpe1xuXHR2YXIgaXNUeXBlID0gKG9iamVj
dCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlwZSA9IG9iamVjdC5wcm90b3R5cGU7XG5cblx0aWYg
KGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTtcblxuXHRmb3IgKHZhciBp
ID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHR2YXIga2V5ID0gbWV0
aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBvYmplY3Rba2V5XSxcblx0XHRcdHByb3RvID0gcHJv
dG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2VuZXJpYykgZ2VuZXJpYy5wcm90ZWN0KCk7XG5cdFx0
aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0LmltcGxlbWVudChrZXksIHByb3RvLnByb3RlY3Qo
KSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtcblx0XHR2YXIgbWV0aG9kc0VudW1lcmFibGUgPSBw
cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUobWV0aG9kc1swXSk7XG5cdFx0b2JqZWN0LmZv
ckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoIW1ldGhvZHNFbnVtZXJhYmxl
KSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVttZXRob2RzW2ldXSwgbWV0aG9kc1tpXSk7
XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gcHJvdG90eXBlKSBmbi5jYWxsKHByb3Rv
dHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBmb3Jj
ZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBTdHJpbmcsIFtcblx0J2NoYXJBdCcsICdjaGFyQ29k
ZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycsICdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ21h
dGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNoJyxcblx0J3NsaWNlJywgJ3NwbGl0Jywg
J3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJpbScsICd0b0xvd2VyQ2FzZScsICd0b1VwcGVyQ2Fz
ZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5cdCdwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdmaWx0ZXInLCAnZm9yRWFjaCcsICdl
dmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAnY29udGFpbnMn
XG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5cdCd0b0V4cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAn
dG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nXG5dKSgnRnVuY3Rpb24nLCBGdW5jdGlvbiwg
W1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5kJ1xuXSkoJ1JlZ0V4cCcsIFJlZ0V4cCwgW1xuXHQn
ZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcsIE9iamVjdCwgW1xuXHQnY3JlYXRlJywgJ2RlZmlu
ZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAna2V5cycsXG5cdCdnZXRQcm90b3R5cGVP
ZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsXG5c
dCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4dGVuc2libGUnLCAnc2VhbCcsICdpc1NlYWxlZCcs
ICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgnRGF0ZScsIERhdGUsIFsnbm93J10pO1xuXG5PYmpl
Y3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCk7XG5cbkRhdGUuZXh0ZW5kKCdub3cn
LCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhuZXcgRGF0ZSk7XG59KTtcblxubmV3IFR5cGUoJ0Jv
b2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4ZXMgTmFOIHJldHVybmluZyBhcyBOdW1iZXJcblxu
TnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXtcblx0cmV0dXJuIGlzRmluaXRl
KHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7XG59LmhpZGUoKTtcblxuLy8gTnVtYmVyLnJhbmRv
bVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1heCl7XG5cdHJldHVy
biBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xufSk7
XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNcblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwh
RVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIGZu
LmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxuXHQvKjwvIUVTNT4q
L1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRBcnJheS5mb3JFYWNoKHRoaXMs
IGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuT2JqZWN0LmV4dGVu
ZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIga2V5cyA9IFtdO1xuXHRc
dGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
amVjdCwgaykpIGtleXMucHVzaChrKTtcblx0XHR9XG5cdFx0Lyo8bHRJRTg+Ki9cblx0XHRmb3JF
YWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmdW5jdGlvbihrKXtcblx0XHRcdGtleXMu
cHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwvbHRJRTg+Ki9cblx0XHRyZXR1cm4ga2V5cztcblx0
fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHRPYmplY3Qu
a2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdGZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9KTtcblx0fVxuXG59KTtcblxuT2JqZWN0
LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxuXG4vLyBBcnJheSAmIE9iamVjdCBjbG9uaW5nLCBP
YmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nXG5cbnZhciBjbG9uZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0pKXtcblx0XHRjYXNlICdhcnJheSc6IHJldHVybiBp
dGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2JqZWN0JzogcmV0dXJuIE9iamVjdC5jbG9uZShpdGVt
KTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRlbTtcblx0fVxufTtcblxuQXJyYXkuaW1wbGVtZW50
KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBpID0gdGhpcy5sZW5ndGgsIGNsb25lID0gbmV3
IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2YodGhpc1tpXSk7XG5c
dHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIgbWVyZ2VPbmUgPSBmdW5jdGlvbihzb3VyY2UsIGtl
eSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXtcblx0XHRjYXNlICdvYmpl
Y3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3VyY2Vba2V5XSkgPT0gJ29iamVjdCcpIE9iamVjdC5t
ZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7XG5cdFx0XHRlbHNlIHNvdXJjZVtrZXldID0gT2Jq
ZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXknOiBzb3Vy
Y2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogc291cmNlW2tl
eV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVybiBzb3VyY2U7XG59O1xuXG5PYmplY3QuZXh0ZW5k
KHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXtcblx0XHRpZiAodHlwZU9mKGsp
ID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VPbmUoc291cmNlLCBrLCB2KTtcblx0XHRmb3IgKHZh
ciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIG9i
amVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1lcmdl
T25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5XSk7XG5cdFx0fVxuXHRcdHJldHVybiBzb3VyY2U7
XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGNsb25lID0ge307
XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgY2xvbmVba2V5XSA9IGNsb25lT2Yob2JqZWN0
W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKG9y
aWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBs
OyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVkID0gYXJndW1lbnRzW2ldIHx8IHt9O1xuXHRcdFx0
Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBvcmlnaW5hbFtrZXldID0gZXh0ZW5kZWRba2V5XTtc
blx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsO1xuXHR9XG5cbn0pO1xuXG4vLyBPYmplY3QtbGVz
cyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0ZVNwYWNlJywgJ1RleHROb2RlJywgJ0NvbGxlY3Rp
b24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0bmV3IFR5cGUobmFtZSk7
XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZhciBVSUQgPSBEYXRlLm5vdygpO1xuXG5TdHJpbmcu
ZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiAoVUlEKyspLnRvU3RyaW5n
KDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBBcnJheVxuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gsIGNvbnRhaW5zLCBh
bmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1R5
cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4uLi5cbiovXG5cbkFycmF5LmltcGxlbWVudCh7XG5c
blx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChp
IGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0gW107XG5cdFx0Zm9yICh2YXIgdmFsdWUsIGkg
PSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspIGlmIChpIGluIHRoaXMpe1xu
XHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGks
IHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztc
blx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHR2YXIgbGVuZ3Ro
ID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0Zm9yICh2YXIgaSA9IChmcm9tIDwgMCkgPyBNYXRo
Lm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0
XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0dXJuIC0x
O1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciBsZW5ndGggPSB0
aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSByZXN1bHRzW2ld
ID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJl
c3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChp
IGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiB0cnVl
O1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0Y2xl
YW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe1xu
XHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtcblx0XHR9KTtcblx0fSxcblxuXHRpbnZva2U6IGZ1
bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRz
LCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4g
aXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdzKTtcblx0XHR9KTtcblx0fSxcblxuXHRh
c3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xuXHRcdHZhciBvYmogPSB7fSwgbGVuZ3RoID0gTWF0
aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0gPSB0aGlzW2ldO1xuXHRcdHJldHVybiBvYmo7XG5c
dH0sXG5cblx0bGluazogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRm
b3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHRcdFx0aWYgKG9iamVjdFtrZXldKHRoaXNbaV0p
KXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHRoaXNbaV07XG5cdFx0XHRcdFx0ZGVsZXRlIG9i
amVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKGl0ZW0sIGZy
b20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4T2YoaXRlbSwgZnJvbSkgIT0gLTE7XG5cdH0sXG5c
blx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFy
cmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIDogbnVsbDtc
blx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0
aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0gOiBudWxsO1xuXHR9
LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICghdGhpcy5jb250YWlucyhp
dGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbWJp
bmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0
aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5W2ldKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0Zm9yICh2YXIgaSA9IHRoaXMu
bGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSB0aGlzLnNwbGljZShp
LCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZs
YXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVP
Zih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBlID09ICdudWxsJykgY29udGludWU7XG5cdFx0XHRh
cnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ2NvbGxlY3Rp
b24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlzW2ldLCBBcnJheSkp
ID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNbaV0pO1xuXHRcdH1cblx0XHRyZXR1cm4g
YXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldICE9IG51bGwp
IHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRoZXhU
b1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCAhPSAzKSByZXR1cm4g
bnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYg
KHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybiBwYXJzZUlu
dCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoYXJyYXkpID8gcmdiIDogJ3JnYign
ICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRoaXMubGVuZ3RoID09
IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3BhcmVudCc7XG5cdFx0
dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKXtcblx0XHRcdHZh
ciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2KTtcblx0XHRcdGhleC5wdXNoKChiaXQu
bGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhcnJh
eSkgPyBoZXggOiAnIycgKyBoZXguam9pbignJyk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBGdW5jdGlvbiBQcm90
b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogRnVuY3Rpb25c
blxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRlbmQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtc
blx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhcmd1bWVudHNbaV0oKTtcblx0XHRcdH0gY2F0
Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxufSk7XG5cbkZ1bmN0aW9u
LmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oYXJncywgYmluZCl7XG5cdFx0dHJ5
IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZlcnQoYXJncykpO1xu
XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdC8qPCFFUzUt
YmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0aGF0KXtcblx0XHR2YXIgc2VsZiA9IHRoaXMsXG5c
dFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGljZShhcmd1bWVudHMs
IDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5jdGlvbigpe307XG5cblx0XHR2YXIgYm91bmQgPSBm
dW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRleHQgPSB0aGF0LCBsZW5ndGggPSBhcmd1bWVudHMu
bGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCl7XG5cdFx0XHRcdEYucHJv
dG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5cdFx0XHRcdGNvbnRleHQgPSBuZXcgRjtcblx0XHRc
dH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFyZ3MgJiYgIWxlbmd0aClcblx0XHRcdFx0PyBzZWxm
LmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBzZWxmLmFwcGx5KGNvbnRleHQsIGFyZ3MgJiYgbGVu
Z3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBhcmdzIHx8IGFyZ3Vt
ZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0IDogY29udGV4dDtc
blx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtcblx0fSxcblx0Lyo8LyFFUzUtYmluZD4qL1xuXG5c
dHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRp
ZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRyZXR1cm4g
ZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBzZWxmLmFwcGx5KGJpbmQsIGFyZ3MgfHwgYXJndW1l
bnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRlbGF5OiBmdW5jdGlvbihkZWxheSwgYmluZCwgYXJn
cyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6
IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9LFxuXG5cdHBlcmlvZGljYWw6IGZ1bmN0aW9uKHBl
cmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRJbnRlcnZhbCh0aGlzLnBhc3Mo
KGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBwZXJpb2RpY2FsKTtcblx0fVxuXG59
KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogTnVtYmVyXG5cbmRlc2NyaXB0aW9uOiBDb250YWlu
cyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMsIGFuZCBjZWlsLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlk
ZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51bWJlci5pbXBsZW1lbnQoe1xuXG5cdGxpbWl0OiBm
dW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWlu
LCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uKHByZWNpc2lvbil7XG5cdFx0cHJl
Y2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVkKHByZWNpc2lvbiA8
IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQodGhpcyAqIHByZWNp
c2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5cblx0dGltZXM6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChiaW5kLCBpLCB0aGlz
KTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0
KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFy
c2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH1cblxufSk7XG5cbk51bWJlci5hbGlhcygnZWFj
aCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24obWF0aCl7XG5cbnZhciBtZXRob2RzID0ge307XG5c
bm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtcblx0aWYgKCFOdW1iZXJbbmFtZV0pIG1ldGhvZHNb
bmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBNYXRoW25hbWVdLmFwcGx5KG51bGwsIFt0
aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChhcmd1bWVudHMpKSk7XG5cdH07XG59KTtcblxuTnVt
YmVyLmltcGxlbWVudChtZXRob2RzKTtcblxufSkoWydhYnMnLCAnYWNvcycsICdhc2luJywgJ2F0
YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3MnLCAnZXhwJywgJ2Zsb29yJywgJ2xvZycsICdtYXgn
LCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3FydCcsICd0YW4nXSk7XG5cbi8qXG4tLS1cblxubmFt
ZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJvdG90eXBlcyBsaWtl
IGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlLCBBcnJheV1cblxucHJvdmlkZXM6IFN0
cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5pbXBsZW1lbnQoe1xuXG5cdC8vPCFFUzY+XG5cdGNv
bnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGluZGV4KXtcblx0XHRyZXR1cm4gKGluZGV4ID8gU3Ry
aW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhPZihzdHJpbmcpID4g
LTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5cdHRlc3Q6IGZ1bmN0aW9uKHJlZ2V4LCBwYXJhbXMp
e1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8gcmVnZXggOiBuZXcg
UmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7XG5cdH0sXG5cblx0dHJpbTog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15cXHMrfFxccysk
L2csICcnKTtcblx0fSxcblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5n
KHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5cdH0sXG5cblx0Y2FtZWxDYXNl
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvLVxcRC9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNl
KCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlwaGVuYXRlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0
cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiBtYXRj
aC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGVzY2FwZVJlZ0V4cDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xc
XVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Up
e1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0fSxcblxuXHR0b0Zs
b2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5c
dGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIGhleCA9IFN0cmluZyh0aGlzKS5t
YXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwyfSkoXFx3ezEsMn0pJC8pO1xuXHRcdHJldHVybiAo
aGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHJn
YlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIHJnYiA9IFN0cmluZyh0aGlzKS5tYXRj
aCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSGV4KGFycmF5KSA6
IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdleHApe1xu
XHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShyZWdleHAgfHwgKC9cXFxcP1xceyhbXnt9
XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7XG5cdFx0XHRpZiAobWF0Y2guY2hhckF0
KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNoLnNsaWNlKDEpO1xuXHRcdFx0cmV0dXJuIChvYmpl
Y3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0gOiAnJztcblx0XHR9KTtcblx0fVxuXG59
KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogQnJvd3NlclxuXG5kZXNjcmlwdGlvbjogVGhlIEJy
b3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93c2VyIGluaXRpYWxpemF0aW9uLCBXaW5kb3cgYW5k
IERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIgSGFzaC5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIEZ1bmN0aW9uLCBOdW1iZXIsIFN0cmluZ11cblxu
cHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3csIERvY3VtZW50XVxuXG4uLi5cbiovXG5cbihmdW5j
dGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xudmFyIHdpbmRvdyA9IGRv
Y3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKHVhLCBwbGF0Zm9y
bSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcblx0cGxhdGZvcm0gPSAocGxhdGZvcm0gPyBw
bGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycpO1xuXG5cdC8vIGNocm9tZSBpcyBpbmNsdWRlZCBp
biB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBjaGVjayBmb3IgZWRnZSBmaXJzdCxcblx0Ly8gYmVm
b3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLlxuXHR2YXIgVUEgPSB1YS5tYXRjaCgvKGVkZ2Up
W1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtcblx0aWYgKCFVQSl7XG5cdFx0VUEgPSB1YS5tYXRj
aCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVyc2lvbilbXFxzXFwv
Ol0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJpfCg/OnJ2W1xcc1xcLzpdfHZlcnNpb25bXFxzXFwv
Ol0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXTtcblx0fVxuXG5c
dGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xuXHRcdFVBWzFdID0gJ2llJztcblx0XHRpZiAoVUFb
NF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxzZSBpZiAoVUFbMV0gPT0gJ2NyaW9zJyl7XG5cdFx0
VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5cdHBsYXRmb3JtID0gdWEubWF0Y2goL2lwKD86YWR8
b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRyb2lkKS8pIHx8IHVh
Lm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhlciddKVswXTtcblx0aWYgKHBsYXRmb3Jt
ID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJztcblxuXHRyZXR1cm4ge1xuXHRcdGV4dGVu
ZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxcblx0XHRuYW1lOiAoVUFbMV0gPT0gJ3ZlcnNp
b24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0dmVyc2lvbjogcGFyc2VGbG9hdCgoVUFbMV0gPT0g
J29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6IFVBWzJdKSxcblx0XHRwbGF0Zm9ybTogcGxhdGZv
cm1cblx0fTtcbn07XG5cbnZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0gcGFyc2UobmF2aWdh
dG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuaWYgKEJyb3dzZXIubmFtZSA9
PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSl7XG5cdEJyb3dzZXIudmVyc2lvbiA9IGRv
Y3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuQnJvd3Nlci5leHRlbmQoe1xuXHRGZWF0dXJlczog
e1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5ldmFsdWF0ZSksXG5cdFx0YWlyOiAhISh3aW5kb3cu
cnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpLFxuXHRcdGpz
b246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxuXHRwYXJzZVVBOiBwYXJzZVxufSk7XG5cblxuXG4v
LyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVzdCA9IChmdW5jdGlvbigpe1xuXG5cdHZhciBYTUxI
VFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdH07
XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2Jq
ZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHZhciBNU1hNTCA9IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuXHR9
O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0WE1MSFRUUCgp
O1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MMigpO1xu
XHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwoKTtcblx0XHRy
ZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgpO1xuXG5Ccm93c2VyLkZlYXR1cmVzLnhociA9ICEh
KEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4vLyBTdHJpbmcgc2NyaXB0c1xuXG5Ccm93c2VyLmV4
ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcblx0aWYgKHdp
bmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTtcblx0fSBlbHNl
IHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5c
dFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRz
Y3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQp
O1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0fVxuXHRyZXR1cm4g
dGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1lbnQoJ3N0cmlwU2NyaXB0cycsIGZ1bmN0aW9uKGV4
ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xuXHR2YXIgdGV4dCA9IHRoaXMucmVwbGFjZSgvPHNj
cmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUp
e1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdcXG4nO1xuXHRcdHJldHVybiAnJztcblx0fSk7XG5c
dGlmIChleGVjID09PSB0cnVlKSBCcm93c2VyLmV4ZWMoc2NyaXB0cyk7XG5cdGVsc2UgaWYgKHR5
cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBleGVjKHNjcmlwdHMsIHRleHQpO1xuXHRyZXR1cm4g
dGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERvY3VtZW50XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0
RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5cdFdpbmRvdzogdGhpcy5XaW5kb3csXG5cdEVsZW1l
bnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6IHRoaXMuRXZlbnRcbn0pO1xuXG50aGlzLldpbmRv
dyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ1dpbmRvdycsIGZ1bmN0aW9uKCl7fSk7
XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ3dpbmRvdycpLmhpZGUoKTtcblxu
V2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHR3aW5kb3dbbmFtZV0gPSBt
ZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVudCA9IGRvY3VtZW50LiRjb25zdHJ1Y3RvciA9IG5l
dyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9uKCl7fSk7XG5cbmRvY3VtZW50LiRmYW1pbHkgPSBG
dW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcpLmhpZGUoKTtcblxuRG9jdW1lbnQubWlycm9yKGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRvY3VtZW50W25hbWVdID0gbWV0aG9kO1xufSk7XG5c
bmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5pZiAoIWRvY3VtZW50
LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVh
ZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7XG5cdGRvY3VtZW50LmV4
ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VDYWNoZScsIGZhbHNlLCB0cnVlKTtcbn0gY2F0Y2gg
KGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0aGlzLmF0dGFjaEV2ZW50ICYmICF0aGlzLmFkZEV2
ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2FkRXZlbnQgPSBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xuXHRcdGRvY3VtZW50LmhlYWQg
PSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDtcblx0XHR3aW5kb3cgPSB0
aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVsbDtcblx0fTtcblx0dGhpcy5hdHRhY2hFdmVudCgn
b251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59XG5cbi8vIElFIGZhaWxzIG9uIGNvbGxlY3Rpb25z
IGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZlcnMgdG8gPHNlbGVjdD4pXG52YXIgYXJyYXlGcm9t
ID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5cdGFycmF5RnJvbShkb2N1bWVudC5odG1sLmNoaWxk
Tm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtc
blx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycgJiYgVHlwZS5pc0VudW1lcmFibGUoaXRl
bSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJheScpe1xuXHRcdFx0dmFyIGkgPSBpdGVtLmxlbmd0
aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5cdFx0XHR3aGlsZSAoaS0tKSBhcnJheVtpXSA9IGl0
ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheUZyb20o
aXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSxcblx0XHRz
bGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0Wydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSBwcm90b3R5cGVbbmFt
ZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBtZXRo
b2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtc
blx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9u
IGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGluZyByZXVzYWJs
ZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtB
cnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXVxuXG5wcm92aWRlczogQ2xhc3NcblxuLi4u
XG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIENsYXNzID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBl
KCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7XG5cdGlmIChpbnN0YW5jZU9mKHBhcmFtcywgRnVu
Y3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6ZTogcGFyYW1zfTtcblxuXHR2YXIgbmV3Q2xhc3Mg
PSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdGlmIChuZXdDbGFzcy4kcHJvdG90
eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IG51bGw7XG5cdFx0dGhpcy4k
ZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXplKSA/IHRoaXMu
aW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcztcblx0XHR0aGlzLiRjYWxs
ZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LmV4dGVuZCh0
aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxuXHRuZXdDbGFzcy4kY29uc3RydWN0b3IgPSBDbGFz
cztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG5ld0NsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFyZW50O1xuXG5cdHJldHVybiBuZXdDbGFzcztcbn0p
O1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24oKXtcblx0aWYgKCF0aGlzLiRjYWxsZXIpIHRocm93
IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBhcmVudFwiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5c
dHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRuYW1lLFxuXHRcdHBhcmVudCA9IHRoaXMuJGNhbGxl
ci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZpb3VzID0gKHBhcmVudCkgPyBwYXJlbnQucHJvdG90
eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVycm9yKCdUaGUg
bWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFzIG5vIHBhcmVudC4nKTtcblx0cmV0dXJuIHByZXZp
b3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgcmVzZXQgPSBmdW5jdGlvbihv
YmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHR2YXIgdmFsdWUgPSBvYmpl
Y3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0Y2FzZSAnb2JqZWN0
Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlvbigpe307XG5cdFx0XHRcdEYucHJvdG90eXBlID0g
dmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXldID0gcmVzZXQobmV3IEYpO1xuXHRcdFx0XHRicmVh
aztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5jbG9uZSgpOyBicmVh
aztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB3cmFwID0gZnVuY3Rp
b24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kLiRvcmlnaW4pIG1ldGhvZCA9IG1l
dGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKG1ldGhv
ZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1Ro
ZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdFx0dmFyIGNh
bGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyO1xuXHRcdHRoaXMuY2Fs
bGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3JhcHBlcjtcblx0XHR2YXIgcmVzdWx0ID0g
bWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0dGhpcy4kY2FsbGVyID0gY3VycmVu
dDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fS5leHRlbmQo
eyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7XG5cdHJldHVybiB3
cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIHJldGFp
bil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcblx0XHR2YWx1
ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKHZhbHVl
ID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKHR5cGVPZih2YWx1ZSkgPT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRoaWRkZW4pIHJldHVybiB0aGlzO1xuXHRcdHRoaXMu
cHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlzLCBrZXksIHZhbHVl
KTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5cGUsIGtleSwgdmFs
dWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG52YXIgZ2V0SW5zdGFuY2UgPSBmdW5j
dGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7XG5cdHZhciBwcm90byA9
IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZztcblx0cmV0dXJuIHByb3Rv
O1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1lbnQub3ZlcmxvYWRT
ZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3JzID0ge1xuXG5cdEV4dGVuZHM6IGZ1bmN0aW9uKHBh
cmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5wcm90b3R5cGUgPSBn
ZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxuXG5cdEltcGxlbWVudHM6IGZ1bmN0aW9uKGl0ZW1z
KXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0
dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gaW5zdGFuY2Up
IGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1ZSk7XG5cdFx0fSwg
dGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuRXh0cmFz
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhhdCBjYW4gYmUgaW1w
bGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4ZWN1dGlvbiBvZiBt
YW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4sIEV2ZW50cywgT3B0
aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudGhpcy5DaGFpbiA9IG5ldyBDbGFz
cyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRjaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRj
aGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLiRjaGFp
bi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDog
ZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFp
bi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgcmVtb3ZlT24g
PSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15vbihbQS1aXSkv
LCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5cdFx0cmV0dXJuIGZpcnN0LnRvTG93ZXJDYXNlKCk7
XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMgPSBuZXcgQ2xhc3Moe1xuXG5cdCRldmVudHM6IHt9
LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwpe1xuXHRcdHR5cGUg
PSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxuXG5cdFx0dGhpcy4kZXZlbnRzW3R5cGVdID0gKHRo
aXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5jbHVkZShmbik7XG5cdFx0aWYgKGludGVybmFsKSBm
bi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRz
OiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAodmFyIHR5cGUgaW4gZXZlbnRzKSB0aGlzLmFk
ZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dHlwZSA9IHJlbW92
ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0aWYg
KCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xu
XHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXko
ZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0
XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZl
bnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmIChldmVudHMgJiYgIWZuLmludGVybmFs
KXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTtcblx0XHRcdGlmIChpbmRl
eCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtc
blx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGlu
IGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0
dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChldmVudHMpIGV2ZW50cyA9IHJlbW92ZU9uKGV2ZW50
cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMuJGV2ZW50cyl7XG5cdFx0XHRpZiAoZXZlbnRzICYm
IGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtcblx0XHRcdHZhciBmbnMgPSB0aGlzLiRldmVudHNb
dHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0gZm5zLmxlbmd0aDsgaS0tOykgaWYgKGkgaW4gZm5z
KXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudCh0eXBlLCBmbnNbaV0pO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudGhpcy5PcHRpb25zID0gbmV3IENs
YXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb25zID0gdGhp
cy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFwcGx5KG51bGwsIFt7fSwgdGhpcy5vcHRpb25zXS5h
cHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnQpIGZvciAodmFyIG9wdGlv
biBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAhPSAnZnVu
Y3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTtcblx0XHRcdHRo
aXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pO1xuXHRcdFx0ZGVsZXRlIG9wdGlv
bnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuVGhlbmFibGVcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3du
IENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhlbmFibGVcIi5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLlRoZW5hYmxl
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgU1RBVEVfUEVORElORyA9IDAsXG5c
dFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNUQVRFX1JFSkVDVEVEID0gMjtcblxudmFyIFRoZW5h
YmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3Moe1xuXG5cdCR0aGVuYWJsZVN0YXRlOiBT
VEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVSZXN1bHQ6IG51bGwsXG5cdCR0aGVuYWJsZVJlYWN0
aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHJlc29sdmUodGhp
cywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlamVjdDogZnVuY3Rpb24o
cmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHN3aXRjaCAodGhpcy4k
dGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNlIFNUQVRFX1BFTkRJTkc6XG5cdFx0XHRcdHJldHVy
biAncGVuZGluZyc7XG5cblx0XHRcdGNhc2UgU1RBVEVfRlVMRklMTEVEOlxuXHRcdFx0XHRyZXR1
cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNhc2UgU1RBVEVfUkVKRUNURUQ6XG5cdFx0XHRcdHJl
dHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0fSxcblxuXHRyZXNldFRoZW5hYmxlOiBmdW5jdGlv
bihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJlc2V0KHRoaXMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBv
blJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAnZnVuY3Rpb24nKSBv
bkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5cdFx0aWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAn
ZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Rocm93ZXInO1xuXG5cdFx0dmFyIHRoZW5hYmxlID0g
bmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlzLiR0aGVuYWJsZVJlYWN0aW9ucy5wdXNoKHtcblx0
XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0XHRcdGZ1bGZpbGxIYW5kbGVyOiBvbkZ1bGZpbGxl
ZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9uUmVqZWN0ZWRcblx0XHR9KTtcblxuXHRcdGlmICh0
aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHRcdHJlYWN0KHRoaXMp
O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblxuXHQnY2F0Y2gnOiBmdW5j
dGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQp
O1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5leHRlbmQoe1xuXHRyZXNvbHZlOiBmdW5jdGlvbih2
YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRoZW5h
YmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoZW5h
YmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblx0cmVqZWN0OiBmdW5jdGlvbihyZWFz
b24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdHJlamVjdCh0aGVu
YWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH1cbn0pO1xuXG4vLyBQcml2
YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlm
ICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0aWYgKHRo
ZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRyZWplY3QodGhlbmFibGUsIG5ldyBUeXBlRXJyb3Io
J1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJsZSB3aXRoIGl0c2VsZi4nKSk7XG5cdFx0fSBlbHNl
IGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUg
PT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZhciB0aGVuO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRy
ZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIHRo
ZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHR2YXIgcmVzb2x2ZWQgPSBmYWxzZTtcblx0XHRc
dFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhlbi5j
YWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24obmV4dFZh
bHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRc
dHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodGhlbmFibGUsIG5l
eHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRc
dFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRcdFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xu
XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVq
ZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0
fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0
XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0XHRcdFx0fVxu
XHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxs
KHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZ1bGZpbGwo
dGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZnVsZmlsbCh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVlO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfRlVMRklMTEVEO1xuXG5cdFx0cmVhY3QodGhlbmFi
bGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUg
PSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5j
dGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSAhPT0g
U1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gbnVsbDtcblx0
XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG5cdH1cbn1cblxuZnVu
Y3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2YXIgc3RhdGUgPSB0aGVuYWJsZS4kdGhlbmFibGVT
dGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQsXG5cdFx0cmVhY3Rp
b25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zLFxuXHRcdHR5cGU7XG5cblx0aWYgKHN0
YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9u
cyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmlsbEhhbmRsZXInO1xuXHR9IGVsc2UgaWYgKHN0YXRl
ID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBb
XTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRsZXInO1xuXHR9XG5cblx0aWYgKHR5cGUpe1xuXHRc
dGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQsIHJlYWN0aW9ucywgdHlwZV0pKTtcblx0fVxufVxu
XG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCByZWFjdGlvbnMsIHR5cGUpe1xuXHRmb3IgKHZhciBp
ID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpe1xuXHRcdHZhciByZWFjdGlv
biA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhhbmRsZXIgPSByZWFjdGlvblt0eXBlXTtcblxuXHRc
dGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHknKXtcblx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhl
bmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGlmIChoYW5kbGVyID09PSAnVGhyb3dlcicpe1xu
XHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCBoYW5kbGVyKHJl
c3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHJlYWN0
aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG52YXIg
ZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9j
ZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKXtcblx0ZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNr
O1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyl7XG5cdGRl
ZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIHtcblx0ZGVmZXIgPSBmdW5jdGlvbihmbil7XG5c
dFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07XG59XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBPYmplY3QgZ2VuZXJpYyBtZXRob2RzXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogW09i
amVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuT2JqZWN0LmV4dGVuZCh7
XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmplY3QsIGtleXMpe1xuXHRcdHZhciByZXN1bHRzID0g
e307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHRpZiAoayBpbiBvYmplY3QpIHJlc3VsdHNba10g
PSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdG1hcDog
ZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2
YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBr
ZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0cmVzdWx0
c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xuXHRcdH1c
blx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKG9iamVjdCwg
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qu
a2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7
XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRcdGlm
IChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNba2V5XSA9IHZhbHVl
O1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRldmVyeTogZnVuY3Rpb24o
b2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xu
XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5
ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkg
cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRzb21lOiBm
dW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9i
amVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRc
dHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0s
IGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0
dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHR2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
Lmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRcdHZhbHVlcy5wdXNo
KG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0Z2V0TGVu
Z3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxl
bmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0dmFy
IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5
cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChvYmpl
Y3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBrZXk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xu
XHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHRyZXR1cm4g
T2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7XG5cdH0sXG5cblx0dG9RdWVyeVN0
cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNlKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtc
blxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRp
ZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJztcblx0XHRcdHZhciByZXN1bHQ7
XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0XHRjYXNlICdvYmplY3QnOiBy
ZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1ZSwga2V5KTsgYnJlYWs7XG5cdFx0XHRc
dGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2YXIgcXMgPSB7fTtcblx0XHRcdFx0XHR2YWx1ZS5l
YWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdFx0XHRxc1tpXSA9IHZhbDtcblx0XHRcdFx0
XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyhxcywga2V5KTtc
blx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogcmVzdWx0ID0ga2V5ICsgJz0nICsg
ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZSAhPSBu
dWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcXVl
cnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG5cblxuLypcbi0tLVxu
bmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBDU1MzIFNlbGVjdG9y
IHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7
XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRvckluZGV4LFxuXHRjb21iaW5hdG9ySW5kZXgsXG5c
dHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxuXHRyZXZlcnNlQ2FjaGUgPSB7fSxcblx0cmVVbmVz
Y2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGlzUmV2
ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0aWYgKGV4
cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJldHVybiBleHByZXNzaW9uO1xuXHRleHByZXNzaW9u
ID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHRyZXZl
cnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFyIGN1cnJlbnRDYWNoZSA9IChyZXZlcnNlZCkgPyBy
ZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYgKGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXSkgcmV0
dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXTtcblx0cGFyc2VkID0ge1xuXHRcdFNsaWNrOiB0
cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxcblx0XHRyYXc6IGV4cHJlc3Npb24sXG5cdFx0cmV2
ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBwYXJzZSh0aGlzLnJhdywgdHJ1ZSk7XG5c
dFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRleCA9IC0xO1xuXHR3aGlsZSAoZXhwcmVzc2lvbiAh
PSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNlcikpKTtcblx0
cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGg7XG5cdHJldHVybiBjdXJy
ZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2ZXJzZWQpID8gcmV2ZXJzZShwYXJzZWQpIDogcGFy
c2VkO1xufTtcblxudmFyIHJldmVyc2VDb21iaW5hdG9yID0gZnVuY3Rpb24oY29tYmluYXRvcil7
XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7XG5cdGVsc2UgaWYgKGNvbWJp
bmF0b3IgPT09ICcgJykgcmV0dXJuICchJztcblx0ZWxzZSBpZiAoKC9eIS8pLnRlc3QoY29tYmlu
YXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJlcGxhY2UoL14hLywgJycpO1xuXHRlbHNlIHJldHVy
biAnIScgKyBjb21iaW5hdG9yO1xufTtcblxudmFyIHJldmVyc2UgPSBmdW5jdGlvbihleHByZXNz
aW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGV4cCA9
IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAnKicsIGNv
bWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07XG5cblx0XHRm
b3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5ndGg7IGorKyl7XG5cdFx0XHR2YXIgY2V4cCA9IGV4
cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZlcnNlQ29tYmluYXRvcikgY2V4cC5yZXZlcnNlQ29t
YmluYXRvciA9ICcgJztcblx0XHRcdGNleHAuY29tYmluYXRvciA9IGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHR9XG5cblx0
XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Npb247XG59
O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKXsvLyBDcmVkaXQ6IFhSZWdF
eHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2ZW4gTGV2aXRoYW4gPGh0dHA6Ly9zdGV2ZW5sZXZp
dGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1JVCBMaWNlbnNlXG5cdHJldHVybiBzdHJpbmcucmVw
bGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8LCNcXHNdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0
XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5cdH0pO1xufTtcblxudmFyIHJlZ2V4cCA9IG5ldyBS
ZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYgcnVieVxucHV0cyBcIlxcdFxcdFwiICsgREFUQS5y
ZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMuKiR8XFxzK3xcXFxcJHxcXFxcbi8sJycpXG5fX0VO
RF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxcXFxzKiAoICwgKSBcXFxccyogICAgICAgICAgICAg
ICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5cXFxuXHR8IFxcXFxzKiAoIDxjb21iaW5hdG9yPisg
KSBcXFxccyogICAjIENvbWJpbmF0b3IgICAgICAgICBcXG5cXFxuXHR8ICAgICAgKCBcXFxccysg
KSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXFxuXFxcblx0fCAgICAgICgg
PHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMgVGFnICAgICAgICAgICAgICAgIFxcblxcXG5cdHwg
XFxcXCMgICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIElEICAgICAgICAgICAgICAgICBcXG5c
XFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05hbWUgICAgICAg
ICAgXFxuXFxcblx0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSAg
ICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxcblx0XHRcXFxccyogKDx1bmljb2RlMT4rKSAgKD86
ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58XT89KSAgKD86ICBcXFxuXHRcdFx0XHRcXFxccyog
KD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8pKC4qPylcXFxcOSBcXFxuXHRcdFx0XHQpXFxcblx0
XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAgXFxcblx0XFxcXF0oPyFcXFxcXSkgXFxuXFxcblx0
fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxcblx0XFxcXCggKD86XFxcblx0XHQoPzooW1xcXCIn
XSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspXFxcblx0
KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4qL1xuXHRcIl4oPzpcXFxccyooLClcXFxccyp8XFxc
XHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChcXFxccyspfCg8dW5pY29kZT4rfFxcXFwqKXxcXFxc
Iyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29kZT4rKXxcXFxcW1xcXFxzKig8dW5pY29kZTE+Kyko
PzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxccyooPzooW1xcXCInXT8pKC4qPylcXFxcOSkpKT9c
XFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1bmljb2RlPispKD86XFxcXCgoPzooPzooW1xcXCIn
XSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspKVxcXFwp
KT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5hdG9yPi8sICdbJyArIGVzY2FwZVJlZ0V4cCgnPit+
YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylcblx0LnJlcGxhY2UoLzx1bmljb2RlPi9nLCAnKD86
W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcblx0
LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18
XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuKTtcblxuZnVuY3Rpb24gcGFyc2VyKFxuXHRyYXdN
YXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNvbWJpbmF0b3IsXG5cdGNvbWJpbmF0b3JDaGlsZHJl
bixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0Y2xhc3NOYW1lLFxuXG5cdGF0dHJpYnV0ZUtleSxc
blx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0dHJpYnV0ZVF1b3RlLFxuXHRhdHRyaWJ1dGVWYWx1
ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBzZXVkb0NsYXNzLFxuXHRwc2V1ZG9RdW90ZSxcblx0
cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0cHNldWRvQ2xhc3NWYWx1ZVxuKXtcblx0aWYgKHNl
cGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdHBhcnNlZC5leHByZXNzaW9u
c1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xuXHRcdGNvbWJpbmF0b3JJbmRleCA9IC0xO1xuXHRc
dGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztcblx0fVxuXG5cdGlmIChjb21iaW5hdG9yIHx8IGNv
bWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5hdG9ySW5kZXggPT09IC0xKXtcblx0XHRjb21iaW5h
dG9yID0gY29tYmluYXRvciB8fCAnICc7XG5cdFx0dmFyIGN1cnJlbnRTZXBhcmF0b3IgPSBwYXJz
ZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdO1xuXHRcdGlmIChyZXZlcnNlZCAmJiBjdXJy
ZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0pXG5cdFx0XHRjdXJyZW50U2VwYXJhdG9yW2Nv
bWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJpbmF0b3IgPSByZXZlcnNlQ29tYmluYXRvcihjb21i
aW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4XSA9IHtjb21i
aW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307XG5cdH1cblxuXHR2YXIgY3VycmVudFBhcnNl
ZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRleF1bY29tYmluYXRvckluZGV4XTtc
blxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3VycmVudFBhcnNlZC50YWcgPSB0YWdOYW1lLnJlcGxh
Y2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoaWQpe1xuXHRcdGN1cnJlbnRQYXJz
ZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGNsYXNz
TmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycp
O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCkgY3VycmVudFBhcnNlZC5jbGFz
c0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3VycmVudFBhcnNl
ZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFzc0xpc3QucHVzaChjbGFzc05h
bWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3Nlcy5wdXNoKHtcblx0XHRcdHZhbHVlOiBjbGFz
c05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBlc2NhcGVSZWdF
eHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCknKVxuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAocHNl
dWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlIHx8IHBz
ZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNz
VmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpIDogbnVsbDtc
blxuXHRcdGlmICghY3VycmVudFBhcnNlZC5wc2V1ZG9zKSBjdXJyZW50UGFyc2VkLnBzZXVkb3Mg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBzZXVkb3MucHVzaCh7XG5cdFx0XHRrZXk6IHBzZXVk
b0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpLFxuXHRcdFx0dmFsdWU6IHBzZXVkb0NsYXNz
VmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9NYXJrZXIubGVuZ3RoID09IDEgPyAnY2xhc3MnIDog
J2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChhdHRyaWJ1dGVLZXkpe1xuXHRcdGF0
dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblx0XHRh
dHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8fCAnJykucmVwbGFjZShyZVVuZXNjYXBl
LCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVnZXhwO1xuXG5cdFx0c3dpdGNoIChhdHRyaWJ1dGVP
cGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAn
XicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBicmVhaztcblx0
XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAgZXNjYXBlUmVn
RXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfj0n
IDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxcXFxzKScrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1
dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfD0nIDogcmVnZXhw
ID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsn
KC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICAnPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgPT0gdmFsdWU7XG5cdFx0XHR9OyBi
cmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0xO1xuXHRc
dFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgIT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztc
blx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVy
biAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRlVmFsdWUgPT0g
JycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rp
b24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0aWYgKCF0ZXN0KSB0ZXN0
ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlICYmIHJlZ2V4cC50ZXN0KHZh
bHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMpIGN1cnJl
bnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcy5w
dXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRlS2V5LFxuXHRcdFx0b3BlcmF0b3I6IGF0dHJpYnV0
ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0dHJpYnV0ZVZhbHVlLFxuXHRcdFx0dGVzdDogdGVz
dFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1cm4gJyc7XG59O1xuXG4vLyBTbGljayBOU1xuXG52
YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnBhcnNlID0gZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJzZShleHByZXNzaW9uKTtcbn07XG5cblNsaWNrLmVz
Y2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNr
ID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1
bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxu
bmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlwdGlvbjogVGhlIG5ldywgc3VwZXJmYXN0IGNzcyBz
ZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczogU2xpY2suRmluZGVyXG5yZXF1aXJlczogU2xpY2su
UGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIGxvY2FsID0ge30sXG5cdGZl
YXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
O1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVjdGlvblxuXG5sb2NhbC5pc05hdGl2ZUNvZGUgPSBm
dW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xce1xccypcXFtuYXRpdmUgY29kZVxcXVxccypcXH0v
KS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9jYWwuaXNYTUwgPSBmdW5jdGlvbihkb2N1bWVudCl7
XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1bWVudC54bWwpIHx8
ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1bWVudF0nKSB8fFxu
XHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9k
ZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxvY2FsLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9j
dW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJndW1lbnRzIHRvIGRv
Y3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0aGUgZnVuY3Rpb24g
cmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7XG5cdGlmIChub2Rl
VHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0ZWxzZSBpZiAobm9kZVR5cGUpIGRvY3VtZW50ID0g
ZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZVxuXHRlbHNlIGlmIChkb2N1bWVudC5uYXZp
Z2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRvd1xuXHRlbHNlIHJl
dHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnRcblxuXHRpZiAodGhp
cy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjtcblx0dGhpcy5kb2N1bWVudCA9IGRvY3Vt
ZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRldGVjdGlvbiBvbiB0
aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdldFVJRFhNTChyb290KSxcblx0XHRmZWF0dXJlcyA9
IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5cdFx0ZmVhdHVyZTtcblxuXHRpZiAoZmVhdHVyZXMp
e1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0XHR0aGlzW2ZlYXR1cmVdID0g
ZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdGZlYXR1cmVz
ID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9O1xuXG5cdGZlYXR1cmVzLnJvb3QgPSByb290
O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1bWVudCk7XG5cblx0
ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5cdD0gZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRR
U0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1lXG5cdD0gZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNl
UVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VCQ05cblx0PSBmZWF0dXJlcy5icm9rZW5DaGVja2Vk
UVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Fcblx0PSBmZWF0dXJlcy5p
c0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvclxuXHQ9IGZh
bHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Nsb3NlZCwgc3RhclNlbGVjdHNDb21tZW50cyxcblx0
XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyO1xuXG5cdHZhciBzZWxlY3RlZCwgaWQg
PSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIgdGVzdE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDtcblx0dGVzdFJvb3QuYXBw
ZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8vIG9uIG5vbi1IVE1MIGRvY3VtZW50cyBpbm5lckhU
TUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2VzbnQgd29yayBwcm9wZXJseVxuXHR0cnkge1xuXHRc
dHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBpZD1cIicraWQrJ1wiPjwvYT4nO1xuXHRcdGZlYXR1
cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdH0g
Y2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQpe1xuXG5cdFx0dGVz
dE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuXHRcdC8vIElFIHJldHVybnMgY29tbWVu
dCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNc
blx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCcnKSk7XG5c
dFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwi
PC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50
c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0
XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRc
dHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNl
bGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdH0gY2F0Y2ggKGUpe307
XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4gPSBzdGFyU2VsZWN0c0NvbW1lbnRzIHx8
IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBlbGVtZW50cyB3aXRoIHRo
ZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBmb3IgZ2V0RWxlbWVudHNCeUlkIGZvciBzb21lIGRv
Y3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgbmFtZT1c
IicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysgaWQgKydcIj48L2I+Jztcblx0XHRcdGZlYXR1cmVz
LmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgPT09IHRlc3ROb2RlLmZp
cnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0aWYgKHRlc3ROb2RlLmdldEVsZW1l
bnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIGdldEVsZW1lbnRzQnlDbGFz
c05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+PGEgY2xhc3M9XCJiXCI+PC9hPic7XG5cdFx0XHRc
dHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGg7XG5cdFx0XHRcdHRl
c3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InO1xuXHRcdFx0XHRjYWNoZWRHZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5s
ZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBPcGVyYSA5LjYg
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2VzbnQgZGV0ZWN0cyB0aGUgY2xhc3MgaWYgaXRzIG5v
dCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNsYXNzPVwiZiBiIGFcIj48L2E+Jztcblx0XHRcdFx0
YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04gPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0ZmVh
dHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IGJyb2tl
blNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRcdH1cblxuXHRcdGlmICh0ZXN0Tm9kZS5xdWVyeVNl
bGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9m
b28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxsKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0
XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRc
dFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XG5cdFx0XHRcdGZl
YXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVu
Z3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIHF1ZXJ5U2VsZWN0b3JBbGwgZG9lc250
IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVpcmtzbW9kZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiTWlYXCI+PC9hPic7XG5cdFx0XHRcdGZl
YXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcu
TWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBXZWJraXQgYW5k
IE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlTZWxlY3RvckFsbFxu
XHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlv
biBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cdFx0XHRcdGZl
YXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnOmNo
ZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBJ
RSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09XCJcIiBzZWxlY3RvcnMg
b24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJI
VE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkVtcHR5
QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9XCJcIl0n
KS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHR9XG5cblx0XHQvLyBJ
RTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdldEF0dHJpYnV0ZSh4
KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dFxuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0
Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0aW9uPVwic1wiPjxpbnB1dCBpZD1cImFjdGlvblwi
Lz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIgPSAodGVzdE5vZGUu
Zmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlvblxuXG5cdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8IC8qcm9vdC5tc01h
dGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0
TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ip
IHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVzU2VsZWN0b3IgdHJvd3MgZXJyb3JzIG9uIGluY29y
cmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVz
U2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNrJyk7XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHR9XG5cblx0dHJ5IHtc
blx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAxO1xuXHRcdGRlbGV0ZSByb290LnNsaWNrX2V4cGFu
ZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MO1xuXHR9IGNhdGNoIChl
KXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDtcblx0fVxuXG5cdHRlc3RS
b290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtcblx0dGVzdE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RS
b290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5nZXRBdHRyaWJ1
dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgJiYgYnJva2VuRm9ybUF0dHJpYnV0ZUdldHRl
cikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1
dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmIChtZXRob2QpIHJldHVybiBtZXRob2QuY2FsbChub2Rl
KTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtc
blx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBu
dWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMu
YXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRyZXR1cm4gKG1ldGhvZCkgPyBtZXRob2QuY2Fs
bChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9O1xuXG5cdC8vIGhhc0F0dHJp
YnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMuaXNOYXRpdmVD
b2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRc
dHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHR9IDogZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0
ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUuc3BlY2lmaWVkIHx8IG5vZGUubm9kZVZh
bHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFpbnNcblx0Ly8gRklYTUU6IEFkZCBzcGVjczogbG9j
YWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgeG1sIGFuZCBodG1sIGRvY3VtZW50
cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlucyA9IHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUo
cm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZlRG9jdW1lbnRDb250YWlucyA9IGRvY3VtZW50ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50LmNvbnRhaW5zKTtcblxuXHRmZWF0dXJlcy5jb250
YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMgJiYgbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBm
dW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dC5jb250YWlucyhub2Rl
KTtcblx0fSA6IChuYXRpdmVSb290Q29udGFpbnMgJiYgIW5hdGl2ZURvY3VtZW50Q29udGFpbnMp
ID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0Ly8gSUU4IGRvZXMgbm90IGhhdmUgLmNv
bnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICgoY29u
dGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogY29udGV4dCku
Y29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9vdCAmJiByb290LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0ID09PSBu
b2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiAxNik7XG5c
dH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRpZiAobm9kZSkgZG8ge1xuXHRcdFx0
aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlO1xuXHRcdH0gd2hpbGUgKChub2RlID0g
bm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdC8vIGRvY3Vt
ZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3JlZGl0cyB0byBTaXp6bGUgKGh0dHA6Ly9zaXp6bGVq
cy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3VtZW50U29ydGVyID0gKHJvb3QuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSByZXR1cm4gMDtcblx0XHRy
ZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEgPT09IGIgPyAw
IDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgnIGluIHJvb3QpID8gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4gMDtcblx0XHRy
ZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cdH0gOiAoZG9jdW1lbnQuY3Jl
YXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLm93bmVyRG9jdW1lbnQgfHwg
IWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7XG5cdFx0dmFyIGFSYW5nZSA9IGEub3duZXJEb2N1
bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2UgPSBiLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7XG5cdFx0YVJhbmdlLnNldEVuZChhLCAwKTtc
blx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7XG5cdFx0YlJhbmdlLnNldEVuZChiLCAwKTtcblx0
XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19FTkQs
IGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5cdHJvb3QgPSBudWxsO1xuXG5cdGZvciAoZmVhdHVy
ZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xu
XHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxuXG52YXIgcmVTaW1wbGVTZWxlY3RvciA9IC9eKFsj
Ll0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5cdHJlRW1wdHlBdHRyaWJ1dGUgPSAvXFxbLitbKiRe
XT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FGYWlsRXhwQ2FjaGUgPSB7fTtcblxubG9jYWwuc2Vh
cmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBmaXJzdCl7XG5cblx0
dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChmaXJzdCkgPyBudWxsIDogKGFwcGVuZCB8fCBbXSk7
XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7XG5cdGVsc2UgaWYgKGNvbnRleHQubmF2
aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVydCB0aGUgbm9kZSBm
cm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRcblx0ZWxzZSBpZiAoIWNvbnRleHQubm9kZVR5cGUp
IHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1cFxuXG5cdHZhciBwYXJzZWQsIGksIG5vZGUsIG5v
ZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSxcblx0XHRoYXNPdGhlcnMgPSAh
IShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCksXG5cdFx0Y29udGV4dElzRG9jdW1lbnQgPSAoY29u
dGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRpZiAodGhpcy5kb2N1bWVudCAhPT0gKGNvbnRleHRJ
c0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRleHQub3duZXJEb2N1bWVudCkpIHRoaXMuc2V0RG9j
dW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMgYWxyZWFkeSBp
biB0aGUgYXBwZW5kIGFycmF5XG5cdGlmIChoYXNPdGhlcnMpIGZvciAoaSA9IGZvdW5kLmxlbmd0
aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJRChmb3VuZFtpXSldID0gdHJ1ZTtcblxuXHQvLyBl
eHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7
IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdcblxuXHRcdC8qPHNpbXBsZS1zZWxlY3RvcnMtb3Zl
cnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2VsZWN0b3IgPSBleHByZXNzaW9uLm1hdGNoKHJlU2lt
cGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNlbGVjdG9yKXtc
blxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLFxuXHRcdFx0XHRuYW1lID0g
c2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRcdGlmICghc3ltYm9sKXtcblxuXHRcdFx0XHRpZiAo
bmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5TdGFyR0VCVE4pIGJyZWFrIHNpbXBsZVNlbGVjdG9y
cztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdGlmICghKGhhc090aGVycyAm
JiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRc
dH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJyMnKXtcblxuXHRcdFx0XHRpZiAoIXRo
aXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVhayBzaW1wbGVTZWxl
Y3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG5hbWUpO1xuXHRc
dFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3VuZDtcblx0XHRcdFx0aWYgKHRoaXMuaWRHZXRzTmFt
ZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IG5hbWUpIGJyZWFr
IHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZSB8fCBudWxs
O1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0p
KSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnLicpe1xu
XG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250ZXh0LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4dC5xdWVyeVNlbGVj
dG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAoY29udGV4dC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0XHRub2Rl
cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTtcblx0XHRcdFx0XHRpZiAo
Zmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVl
c1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0
XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2hDbGFzcyA9IG5ldyBSZWdFeHAoJyhe
fFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4cChuYW1lKSArJyhcXFxcc3wkKScpO1xuXHRcdFx0
XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0XHRc
dGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUg
PSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRcdGlmICghKGNsYXNzTmFtZSAmJiBtYXRjaENs
YXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aWYgKGZpcnN0KSBy
ZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMu
Z2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9
XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0
XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9zaW1w
bGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cblx0XHQvKjxxdWVyeS1zZWxlY3Rvci1vdmVycmlk
ZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpe1xu
XG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnRcblx0XHRcdFx0fHwgcXNhRmFpbEV4cENh
Y2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8vVE9ETzogb25seSBza2lwIHdoZW4gZXhwcmVzc2lv
biBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5cdFx0XHRcdHx8IHRoaXMuYnJva2VuTWl4ZWRDYXNl
UVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhwcmVzc2lvbi5pbmRl
eE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkVtcHR5QXR0cmli
dXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSlcblx0XHRcdFx0fHwg
KCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0IHdoZW4gIWNvbnRleHRJc0RvY3VtZW50IGFuZC4u
LlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNl
bGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5IGZpeCBub24tZG9j
dW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0b3JzXG5cdFx0XHRc
dFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcsJykgPiAtMVxuXHRcdFx0XHQpXG5cdFx0XHRcdHx8
IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkgYnJlYWsgcXVlcnlTZWxlY3RvcjtcblxuXHRcdFx0
dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250ZXh0LCBjdXJyZW50
SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0Ly8gbm9uLWRvY3Vt
ZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8gY3JlZGl0cyB0byBBbmRyZXcgRHVwb250XG5cdFx0
XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2xpY2tpZCA9ICdz
bGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2xpY2tpZCk7
XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMnICsgc2xpY2tpZCArICcgJyArIF9leHByZXNzaW9u
O1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRc
dFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9y
KF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRcdFx0XHRlbHNlIG5vZGVzID0gY29udGV4dC5xdWVy
eVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHRx
c2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxO1xuXHRcdFx0XHRicmVhayBxdWVyeVNlbGVj
dG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkgX2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIGN1
cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBfY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7
XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0
XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAwOyBub2RlID0gbm9k
ZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA+ICdAJyAmJiAhKGhhc090aGVy
cyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0
XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0
XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvcXVlcnktc2VsZWN0b3Itb3ZlcnJp
ZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVzc2lvbik7XG5cdFx0
aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lv
biA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVzc2lvblxuXHRcdHJldHVybiBmb3VuZDtc
blx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHBhcnNl
ZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQgPSBleHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKHRo
aXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4dCwgZXhwcmVzc2lv
bikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZVxuXHRcdChmb3VuZCkgPyBmb3VuZC5wdXNoKGV4
cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNzaW9uO1xuXHRcdHJldHVybiBmb3VuZDtcblx0fSBl
bHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdC8qPHBzZXVk
by1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGNhY2hlIGVs
ZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9yc1xuXG5cdHRoaXMucG9zTlRIID0ge307XG5cdHRo
aXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGUgPSB7fTtcblx0dGhpcy5wb3NO
VEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1
ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYgYXBwZW5kIGlzIG51bGwgYW5kIHRoZXJlIGlzIG9u
bHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2UgcHVzaEFycmF5LCBl
bHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVzaCA9ICghaGFzT3RoZXJzICYmIChmaXJzdCB8fCAo
cGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNlZC5leHByZXNzaW9uc1swXS5sZW5ndGggPT0gMSkp
KSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5wdXNoVUlEO1xuXG5cdGlmIChmb3VuZCA9PSBudWxs
KSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1bHQgZW5naW5lXG5cblx0dmFyIGosIG0sIG47XG5c
dHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNzaW9uLCBjdXJyZW50
Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucztcblxuXHRzZWFy
Y2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9IGN1cnJlbnRFeHByZXNzaW9uW2pdKTsgaisrKXtc
blxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJpdC5jb21iaW5hdG9y
O1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNoO1xuXG5cdFx0dGFn
ICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gY3VycmVudEJpdC50YWcgOiBjdXJyZW50
Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRcdGlkICAgICAgICAgPSBjdXJyZW50Qml0LmlkO1xu
XHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNzTGlzdDtcblx0XHRjbGFzc2VzICAgID0g
Y3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0dHJpYnV0ZXMgPSBjdXJyZW50Qml0LmF0dHJpYnV0
ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJlbnRCaXQucHNldWRvcztcblx0XHRsYXN0Qml0ICAg
ID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggLSAxKSk7XG5cblx0XHR0aGlzLmJp
dFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChsYXN0Qml0KXtcblx0XHRcdHRoaXMudW5pcXVlcyA9
IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5kID0gZm91bmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRc
dHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0dGhpcy5mb3VuZCA9IFtdO1xuXHRcdH1cblxuXHRc
dGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNbY29tYmluYXRvcl0oY29udGV4dCwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdGlmIChmaXJz
dCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCkgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVt
cy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRcdFx0XHR0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJ
dGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0
KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdFx0fSBlbHNl
IGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKSB0aGlzW2Nv
bWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9XG5cblx0XHRjdXJyZW50SXRlbXMgPSB0aGlzLmZv
dW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5vZGVzIGluIGFwcGVu
ZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuXG5cdGlmIChoYXNPdGhlcnMg
fHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGggPiAxKSkgdGhpcy5zb3J0KGZvdW5kKTtcblxu
XHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5kO1xufTtcblxuLy8g
VXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5sb2NhbC51aWRrID0gJ3NsaWNrLXVuaXF1ZWlkJztc
blxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHZhciB1aWQgPSBub2RlLmdl
dEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRpZiAoIXVpZCl7XG5cdFx0dWlkID0gdGhpcy51aWR4
Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpO1xuXHR9XG5cdHJldHVy
biB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURIVE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVy
biBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0aGlzLnVpZHgrKyk7
XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1bWVudFNvcnRlciBt
ZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXtcblx0aWYgKCF0aGlzLmRv
Y3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0cztcblx0cmVzdWx0cy5zb3J0KHRoaXMuZG9jdW1l
bnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qPHBzZXVkby1zZWxlY3RvcnM+
Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5jYWNoZU5USCA9IHt9O1xuXG5s
b2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxkKik/KFthLXpdKyk/KFsrLV1cXGQrKT8kLztcblxu
bG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0dmFyIHBhcnNl
ZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJu
IGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBhcnNlZFsyXSB8fCBmYWxzZTtcblx0dmFyIGEgPSBw
YXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0gJy0nKSBhID0gLTE7XG5cdHZhciBiID0gK3BhcnNl
ZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRcdChzcGVjaWFsID09ICduJylcdD8ge2E6IGEsIGI6
IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2RkJylcdD8ge2E6IDIsIGI6IDF9IDpcblx0XHQoc3Bl
Y2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBhfTtcblxuXHRyZXR1
cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFyc2VkKTtcbn07XG5cbmxvY2FsLmNyZWF0
ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlvbnMsIG9mVHlwZSl7
XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0dmFyIHVpZCA9IHRoaXMu
Z2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0pe1xuXHRcdFx0dmFy
IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1cm4gZmFs
c2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7XG5cdFx0XHRpZiAo
b2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHRcdFx0
ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkgY29udGludWU7XG5c
dFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRc
dFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRc
dFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRc
dFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRc
dH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFyZ3Vt
ZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLmNhY2hlTlRIW2Fy
Z3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpO1xuXHRcdGlmICghcGFy
c2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIGEgPSBwYXJzZWQuYSwgYiA9IHBhcnNlZC5iLCBw
b3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtcblx0XHRpZiAoYSA9PSAwKSByZXR1cm4gYiA9PSBw
b3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRcdGlmIChwb3MgPCBiKSByZXR1cm4gZmFsc2U7XG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwgcG9zKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRc
dHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDtcblx0fTtcbn07XG5cbi8qPC9udGgtcHNldWRv
LXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLnB1c2hBcnJheSA9
IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xu
XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG59O1xuXG5sb2NhbC5wdXNoVUlE
ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0aWYgKCF0aGlzLnVuaXF1ZXNbdWlk
XSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHR0aGlzLmZv
dW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5cbmxvY2FsLm1hdGNoTm9kZSA9IGZ1bmN0aW9uKG5v
ZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5uYXRpdmVN
YXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cXFsoW149XSspPVxccyoo
W14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQxPVwiJDJcIl0nKSk7XG5cdFx0fSBjYXRjaCAobWF0
Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2Uoc2VsZWN0
b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7XG5cblx0Ly8gc2ltcGxlIChzaW5nbGUp
IHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnMsIHNpbXBs
ZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50RXhwcmVzc2lvbjtcblx0Zm9yIChpID0gMDsgKGN1
cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspe1xuXHRcdGlmIChjdXJyZW50
RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5cdFx0XHR2YXIgZXhwID0gY3VycmVudEV4cHJlc3Np
b25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsICh0aGlzLmlzWE1MRG9j
dW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcudG9VcHBlckNhc2UoKSwgZXhwLmlkLCBleHAuY2xh
c3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5wc2V1ZG9zKSkgcmV0dXJuIHRydWU7XG5cdFx0XHRz
aW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNpbXBsZUV4cENvdW50ZXIg
PT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBub2RlcyA9IHRoaXMuc2Vh
cmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07XG5cdGZvciAoaSA9IDA7IGl0ZW0gPSBu
b2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHR9XG5c
dHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2FsLm1hdGNoUHNldWRvID0gZnVuY3Rpb24obm9kZSwg
bmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86JyArIG5hbWU7XG5c
dGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1cm4gdGhpc1twc2V1ZG9OYW1lXShub2RlLCBhcmd1
bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtc
blx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUgOiAhIWF0dHJpYnV0
ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRhZyl7XG5cdFx0dmFyIG5vZGVO
YW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDogbm9kZS5ub2RlTmFt
ZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0YWcgPT0gJyonKXtcblx0XHRcdGlmIChub2RlTmFt
ZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9kZXMgYW5kIGNsb3Nl
ZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAobm9kZU5hbWUgIT0gdGFnKSByZXR1cm4g
ZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlkICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcp
ICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIGksIHBhcnQsIGNscztcblx0aWYgKGNsYXNz
ZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3RoOyBpLS07KXtcblx0XHRjbHMgPSB0aGlzLmdldEF0
dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0XHRpZiAoIShjbHMgJiYgY2xhc3Nlc1tpXS5yZWdl
eHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzKSBmb3Ig
KGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IGF0dHJpYnV0ZXNbaV07
XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSByZXR1
cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVkb3MpIGZvciAoaSA9IHBzZXVkb3MubGVuZ3RoOyBp
LS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tpXTtcblx0XHRpZiAoIXRoaXMubWF0Y2hQc2V1ZG8o
bm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJu
IHRydWU7XG59O1xuXG52YXIgY29tYmluYXRvcnMgPSB7XG5cblx0JyAnOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpeyAvLyBh
bGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxuXG5cdFx0dmFyIGksIGl0ZW0sIGNoaWxkcmVuO1xu
XG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpe1xuXHRcdFx0Z2V0QnlJZDogaWYgKGlkKXtc
blx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0
XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1lICYmIGl0ZW0gJiYg
aXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkpe1xuXHRcdFx0XHRc
dC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIHdpdGggdGhhdCBuYW1lIG9yIGlk
IGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmVzIGp1c3Qgb25lIGl0IHdpbGwgcmV0
dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0
Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlbikgcmV0dXJu
O1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcblx0
XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspe1xuXHRcdFx0XHRcdFx0
dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTtcblx0XHRcdFx0XHRcdGlm
IChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBpZCl7XG5cdFx0XHRcdFx0XHRcdHRoaXMu
cHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXRlbSl7XG5cdFx0XHRcdFx0Ly8gaWYg
dGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ugd2lsbCB0cnkgR0VC
VE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsXG5cdFx0XHRcdFx0aWYgKHRoaXMuY29udGFp
bnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuO1xuXHRcdFx0XHRcdGVsc2UgYnJlYWsgZ2V0QnlJ
ZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2RlICYmICF0aGlzLmNv
bnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47XG5cdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcs
IG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5c
dFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBpZiAoY2xhc3NlcyAmJiBub2RlLmdldEVsZW1lbnRz
QnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRjaGlsZHJlbiA9IG5v
ZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcpKTtcblx0XHRcdFx0
aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlDbGFzcztcblx0
XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwg
dGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0
XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6IHtcblx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4u
bGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5cdFx0XHRpZiAoIXRoaXMuYnJva2VuU3RhckdFQlRO
KSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0
aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBjaGlsZHJlblxuXHRcdGlmICgobm9kZSA9IG5v
ZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9
IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKTtcblx0fSxcblxuXHQnKyc6IGZ1bmN0
aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0
IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0J14n
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdGlmIChub2Rl
KXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29tYmlu
YXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51
ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlzLmJp
dFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7
XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcrKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcgYW5kIHByZXZpb3Vz
IHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0J35+Jzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0dGhpc1snY29tYmluYXRv
cjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMgdXAgdG8gZG9jdW1l
bnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAobm9kZSAhPT0gdGhp
cy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgcGFyZW50IChvbmUgbGV2ZWwpXG5c
dFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVu
dCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0g
bm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnIV4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbGFzdCBjaGlsZFxuXHRcdG5vZGUg
PSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlw
ZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0JyF+JzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHBy
ZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcp
KXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBi
cmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVz
aChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5c
dH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxbJ2NvbWJpbmF0b3I6
JyArIGNdID0gY29tYmluYXRvcnNbY107XG5cbnZhciBwc2V1ZG9zID0ge1xuXG5cdC8qPHBzZXVk
by1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHknOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgY2hp
bGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0cmV0dXJuICEoY2hpbGQgJiYgY2hpbGQubm9kZVR5
cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5s
ZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1bmN0aW9uKG5vZGUsIGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7XG5cdH0sXG5cblx0J2Nv
bnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7XG5cdFx0cmV0dXJuIChub2RlLmlubmVyVGV4
dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5pbmRleE9mKHRleHQpID4gLTE7XG5cdH0sXG5c
blx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9k
ZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2Rl
KXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5
LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlO1xuXHRcdHdoaWxl
ICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZVR5cGUgPT0gMSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5c
blx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0
U2libGluZycsICdwb3NOVEgnKSxcblxuXHQnbnRoLWxhc3QtY2hpbGQnOiBsb2NhbC5jcmVhdGVO
VEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRITGFzdCcpLFxu
XG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICdu
ZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSksXG5cblx0J250aC1sYXN0LW9mLXR5cGUn
OiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAn
cG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxuXHQnaW5kZXgnOiBmdW5jdGlvbihub2RlLCBpbmRl
eCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnJyArIChpbmRl
eCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0
aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuJyk7XG5cdH0sXG5cblx0J29kZCc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwg
JzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvKjxv
Zi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZmlyc3Qtb2YtdHlwZSc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFt
ZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LW9mLXR5
cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9
PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdv
bmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGUsIG5vZGVO
YW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2li
bGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0
dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBp
ZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0
cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBj
dXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
ICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdjaGVja2VkJzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVjdGVkO1xuXHR9LFxu
XG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSAmJiAobm9kZS5ocmVm
IHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCAndGFiaW5kZXgnKSk7XG5c
dH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUgPT09IHRo
aXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVjdGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0
dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xufTtc
blxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBwXSA9IHBzZXVkb3Nb
cF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9kc1xuXG52YXIgYXR0cmlidXRlR2V0dGVycyA9IGxv
Y2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5cblx0J2Zvcic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlzLmdldEF0dHJpYnV0
ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2hy
ZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6IHRoaXMuZ2V0QXR0
cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHlsZS5jc3NUZXh0IDogdGhpcy5nZXRBdHRyaWJ1dGUo
J3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmluZGV4JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0
cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTtcblx0XHRyZXR1
cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRl
Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9LFxuXG5cdCd0eXBlJzogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcblx0fSxcblxuXHQnbWF4bGVuZ3Ro
JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRl
Tm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0
ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fVxu
XG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4
TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5ndGg7XG5cbi8vIFNsaWNrXG5cbnZhciBT
bGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGljay52ZXJzaW9u
ID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmluZGVyXG5cblNsaWNrLnNlYXJjaCA9IGZ1bmN0aW9u
KGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29u
dGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtcbn07XG5cblNsaWNrLmZpbmQgPSBmdW5jdGlvbihj
b250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5cbi8vIFNsaWNrIGNvbnRhaW5tZW50IGNoZWNrZXJc
blxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlvbihjb250YWluZXIsIG5vZGUpe1xuXHRsb2NhbC5z
ZXREb2N1bWVudChjb250YWluZXIpO1xuXHRyZXR1cm4gbG9jYWwuY29udGFpbnMoY29udGFpbmVy
LCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBnZXR0ZXJcblxuU2xpY2suZ2V0QXR0
cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUp
O1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxuU2xpY2su
aGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFzQXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxu
Ly8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9y
KXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTtcblx0aWYgKCFzZWxl
Y3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdGxvY2FsLnNldERvY3Vt
ZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNlbGVjdG9yKTtcbn07
XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVBdHRyaWJ1dGVH
ZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBBdHRyaWJ1dGVHZXR0
ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0dXJuIGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8gYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lUHNldWRv
ID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbFsncHNldWRvOicgKyBuYW1lXSA9IGZ1bmN0
aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gZm4uY2FsbChub2RlLCBhcmd1bWVudCk7
XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9va3VwUHNldWRvID0gZnVuY3Rp
b24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBuYW1lXTtcblx0aWYg
KHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gcHNldWRvLmNh
bGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8vIFNsaWNr
IG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGljay5vdmVycmlkZSA9IGZ1bmN0aW9uKHJlZ2V4cCwg
Zm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdleHAsIGZuKTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1MO1xuXG5TbGljay51aWRPZiA9IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChub2RlKTtcbn07XG5cbmlmICghdGhpcy5T
bGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBl
b2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhp
cyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudFxuXG5kZXNjcmlwdGlvbjogT25lIG9mIHRo
ZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBNb29Ub29scy4gQ29udGFpbnMgdGhlIGRvbGxhciBm
dW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rpb24sIGFuZCBhbiBoYW5kZnVsIG9mIGNyb3NzLWJy
b3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0byBsZXQgeW91IGVhc2lseSB3b3JrIHdpdGggSFRN
TCBFbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
V2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE9iamVjdCwgTnVtYmVy
LCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl1cblxucHJvdmlkZXM6IFtFbGVtZW50LCBFbGVt
ZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0b3JzXVxuXG4uLi5cbiovXG5cbnZhciBFbGVtZW50
ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdHZhciBrb25zdHJ1Y3Rv
ciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107XG5cdGlmIChrb25zdHJ1Y3RvcikgcmV0dXJu
IGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYgKHR5cGVvZiB0YWcgIT0gJ3N0cmluZycpIHJldHVy
biBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7XG5cblx0aWYgKCFwcm9wcykgcHJvcHMgPSB7
fTtcblxuXHRpZiAoISgvXltcXHctXSskLykudGVzdCh0YWcpKXtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9uc1swXVswXTtcblx0XHR0YWcgPSAocGFyc2VkLnRh
ZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnO1xuXHRcdGlmIChwYXJzZWQuaWQgJiYgcHJv
cHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQuaWQ7XG5cblx0XHR2YXIgYXR0cmlidXRl
cyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRcdGlmIChhdHRyaWJ1dGVzKSBmb3IgKHZhciBhdHRy
LCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGF0dHIg
PSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYgKHByb3BzW2F0dHIua2V5XSAhPSBudWxsKSBjb250
aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJhdG9yID09
ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTtcblx0XHRcdGVsc2UgaWYgKCFhdHRy
LnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVlO1xuXHRcdH1c
blxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0ICYmIHByb3BzWydjbGFzcyddID09IG51bGwpIHBy
b3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNzTGlzdC5qb2luKCcgJyk7XG5cdH1cblxuXHRyZXR1
cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTtcbn07XG5cblxuaWYgKEJyb3dzZXIu
RWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVtZW50LnByb3RvdHlw
ZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWlyZSB0aGUgd3JhcHBpbmcuXG5cdEVsZW1lbnQucHJv
dG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGZpcmVFdmVudC5jYWxsKHRoaXMsIHR5
cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShFbGVtZW50LnByb3RvdHlwZS5maXJlRXZlbnQpO1xu
fVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVsZW1lbnQpLm1pcnJvcihmdW5jdGlvbihuYW1lKXtc
blx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuO1xuXG5cdHZhciBvYmogPSB7fTtc
blx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdLCBhcmdzID0g
YXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXNbaV0sIHJlc3Vs
dCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3MpO1xuXHRc
dFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTtc
blx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50cykgPyBuZXcgRWxlbWVudHMocmVzdWx0cykgOiBy
ZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRzLmltcGxlbWVudChvYmopO1xufSk7XG5cbmlmICgh
QnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wYXJlbnQgPSBPYmplY3Q7XG5cblx0RWxlbWVu
dC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25zdHJ1Y3Rvcic6IEVsZW1lbnQsXG5cdFx0JyRmYW1p
bHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50JykuaGlkZSgpXG5cdH07XG5cblx0RWxlbWVu
dC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0XHRFbGVtZW50LlByb3RvdHlwZVtu
YW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5cbkVsZW1lbnQuQ29uc3RydWN0b3JzID0ge307XG5c
blxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBw
YXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge1xuXHRcdHByb3BlcnRpZXM6IFR5cGUuaXNP
YmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlvbihvYmope1xuXHRcdFx0cmV0dXJuIChvYmogIT0g
bnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgcHJvcHMgPSBwYXJhbXMucHJvcGVydGllcyB8
fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0gZG9jdW1lbnQuaWQo
cGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxvYWQgPSBwcm9wcy5vbmxvYWQgfHwgZnVuY3Rpb24o
KXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2FkO1xuXHRwcm9wcy5pZCA9IHByb3BzLm5hbWUgPSBb
cHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwgaWZyYW1lLm5hbWUp
IDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTtcblx0aWZyYW1lID0gbmV3
IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUnLCBwcm9wcyk7XG5cblx0dmFyIG9uTG9hZCA9IGZ1
bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwoaWZyYW1lLmNvbnRlbnRXaW5kb3cpO1xuXHR9O1xu
XG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7XG5cdGVsc2UgaWZyYW1l
LmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcblx0cmV0dXJuIGlmcmFtZTtcbn0pO1xuXG52
YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMpe1xuXHRpZiAobm9k
ZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2YXIgdW5pcXVlcyA9IHt9LCBub2RlO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0dmFyIHVpZCA9IFNsaWNr
LnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1bmlxdWVzW3VpZF0pe1xuXHRcdFx0XHR1bmlxdWVz
W3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxu
XHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTtcbkVsZW1lbnRzLnBh
cmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50cykuaW1wbGVtZW50
KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlciwgYmluZCl7XG5cdFx0aWYgKCFmaWx0ZXIp
IHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVyKHRoaXMs
ICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJl
dHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5cdFx0fSA6IGZpbHRlciwgYmluZCkpO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0
aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0gaXRlbTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlz
Lmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHVuc2hpZnQ6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0
XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywgaXRlbXMpO1xuXHR9
LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG5ld0VsZW1lbnRz
ID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTtcblx0
XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMuYXBwZW5kKGl0ZW0p
O1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4g
bmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oY29sbGVj
dGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7
IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR3aGlsZSAodGhpcy5sZW5ndGgp
IGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3Rl
Y3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG4vLyBGRiwgSUVcbnZhciBzcGxpY2Ug
PSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBvYmplY3QgPSB7JzAnOiAwLCAnMSc6IDEsIGxlbmd0
aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVjdCwgMSwgMSk7XG5pZiAob2JqZWN0WzFdID09IDEp
IEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNlJywgZnVuY3Rpb24oKXtcblx0dmFyIGxlbmd0aCA9
IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzW2xlbmd0aC0t
XTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJvdGVjdCgpKTtcblxuQXJyYXkuZm9yRWFjaE1ldGhv
ZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xuXHRFbGVtZW50cy5pbXBsZW1lbnQobmFtZSwgbWV0
aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3IoRWxlbWVudHMpO1xuXG4vKjxsdElFOD4qL1xudmFy
IGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtcbnRyeSB7XG5cdGNyZWF0ZUVsZW1lbnRBY2NlcHRz
SFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aW5wdXQgbmFtZT14PicpLm5hbWUgPT0g
J3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFyIGVzY2FwZVF1b3RlcyA9IGZ1bmN0aW9uKGh0bWwp
e1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC9c
Ii9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0SUU4PiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3
OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0
eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRN
TCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJI
VE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4q
L1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywg
cHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5cdFx0XHRpZiAocHJvcHMuY2hlY2tlZCAhPSBudWxs
KSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cdFx0XHRpZiAoKHByb3Bz
LnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09ICdyYWRpbycpICYmIHByb3BzLnZh
bHVlID09IG51bGwpIHByb3BzLnZhbHVlID0gJ29uJztcblx0XHRcdC8qPGx0SUU5PiovIC8vIElF
IG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBiZWZvcmUgY2hhbmdpbmcgY29udGVudCBvZiBzdHls
ZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNoYW5nZVN0eWxlSFRNTCAmJiB0YWcgPT0gJ3N0eWxl
Jyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
dHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQv
Y3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSBkZWxldGUgcHJvcHMudHlwZTtcblx0XHRc
dFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpO1xuXHRcdFx0fVxuXHRc
dFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxsdElFOD4qLy8vIEZpeCBmb3IgcmVhZG9ubHkgbmFt
ZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOFxuXHRcdFx0aWYgKGNyZWF0ZUVsZW1lbnRB
Y2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9ICc8JyArIHRhZztcblx0XHRcdFx0aWYgKHByb3Bz
Lm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLm5hbWUpICsgJ1wi
Jztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIHRhZyArPSAnIHR5cGU9XCInICsgZXNjYXBlUXVv
dGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0XHRcdFx0dGFnICs9ICc+Jztcblx0XHRcdFx0ZGVs
ZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0fVxuXHRc
dFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlkKHRoaXMuY3JlYXRlRWxl
bWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4oZnVuY3Rpb24o
KXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtcblNsaWNrLnVpZE9mKGRvY3VtZW50KTtcblxuRG9j
dW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdUZXh0Tm9kZTogZnVuY3Rpb24odGV4dCl7XG5cdFx0
cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndpbmRvdztcblx0fSxcblxuXHRpZDogKGZ1bmN0aW9u
KCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5cblx0XHRcdHN0cmluZzogZnVuY3Rpb24oaWQsIG5v
Y2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBTbGljay5maW5kKGRvYywgJyMnICsgaWQucmVwbGFj
ZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0XHRcdFx0cmV0dXJuIChpZCkgPyB0eXBlcy5lbGVt
ZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0XHRcdH0sXG5cblx0XHRcdGVsZW1lbnQ6IGZ1bmN0
aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRTbGljay51aWRPZihlbCk7XG5cdFx0XHRcdGlmICgh
bm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQpJC9pKS50ZXN0KGVs
LnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIgZmlyZUV2ZW50ID0gZWwuZmlyZUV2ZW50O1xuXHRc
dFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBpbiBJRTcsIG9yIGVsc2UgY3Jhc2hcblx0XHRcdFx0
XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0XHRcdFx0cmV0
dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRPYmpl
Y3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3RvdHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0
dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0b2JqZWN0OiBmdW5jdGlvbihvYmosIG5vY2FzaCwg
ZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0VsZW1lbnQpIHJldHVybiB0eXBlcy5lbGVtZW50KG9i
ai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9
XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4dG5vZGUgPSB0eXBlcy53aGl0ZXNwYWNlID0gdHlw
ZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQgPSBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVy
biB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWwsIG5vY2FzaCwgZG9jKXtc
blx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5ICYmIGVsLnVuaXF1ZU51bWJlcikgcmV0dXJuIGVs
O1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YoZWwpO1xuXHRcdFx0cmV0dXJuICh0eXBlc1t0eXBl
XSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNoLCBkb2MgfHwgZG9jdW1lbnQpIDogbnVsbDtcblx0
XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlmICh3aW5kb3cuJCA9PSBudWxsKSBXaW5kb3cuaW1w
bGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5jKXtcblx0cmV0dXJuIGRvY3VtZW50LmlkKGVsLCBu
YywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxuV2luZG93LmltcGxlbWVudCh7XG5cblx0Z2V0RG9j
dW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQ7XG5cdH0sXG5cblx0
Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5b
RG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEVsZW1lbnRz
OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMsIGV4
cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudDogZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgZXhw
cmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52YXIgY29udGFpbnMgPSB7Y29udGFpbnM6IGZ1bmN0
aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xpY2suY29udGFpbnModGhpcywgZWxlbWVudCk7XG59
fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlucykgRG9jdW1lbnQuaW1wbGVtZW50KGNvbnRhaW5z
KTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY29udGFpbnMpIEVsZW1lbnQu
aW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5cbi8vIHRyZWUgd2Fsa2luZ1xuXG52YXIgaW5qZWN0
Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNvbWJpbmF0b3Ipe1xuXHRpZiAoIWV4
cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yO1xuXG5cdGV4cHJlc3Npb24gPSBPYmplY3QuY2xv
bmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpO1xuXG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJl
c3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGkt
LTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0uY29tYmluYXRvciA9IGNvbWJpbmF0b3I7XG5cblx0
cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldE5leHQ6ICd+
Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5cdGdldFBhcmVudDogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5qZWN0Q29tYmluYXRv
cihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbk9iamVjdC5mb3JFYWNo
KHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRnZXRBbGxQcmV2aW91czogJyF+Jyxcblx0Z2V0U2li
bGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVuOiAnPicsXG5cdGdldFBhcmVudHM6ICchJ1xufSwg
ZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9k
LCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50cyhpbmpl
Y3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZpcnN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0
XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3Io
ZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKGV4cHJl
c3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0
Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKS5nZXRMYXN0KCkpO1xuXHR9LFxuXG5cdGdldFdp
bmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LndpbmRvdztc
blx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25l
ckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbihpZCl7XG5cdFx0
cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcnICsgaWQpLnJlcGxh
Y2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xuXHR9LFxuXG5cdG1hdGNoOiBmdW5jdGlvbihleHBy
ZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0Y2godGhpcywgZXhw
cmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxuXG5pZiAod2luZG93LiQkID09IG51bGwpIFdpbmRv
dy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRpZiAoYXJndW1lbnRzLmxl
bmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9mIHNlbGVjdG9yID09ICdzdHJpbmcnKSByZXR1cm4g
U2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHNlbGVjdG9yLCBuZXcgRWxlbWVudHMpO1xuXHRc
dGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50
cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJuIG5ldyBFbGVtZW50cyhhcmd1bWVudHMpO1xufSk7
XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5zZXJ0ZXJzID0ge1xuXG5cdGJlZm9yZTogZnVuY3Rp
b24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9k
ZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQp
O1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2YXIg
cGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5pbnNl
cnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2libGluZyk7XG5cdH0sXG5cblx0Ym90dG9t
OiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNv
bnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0
ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENoaWxkKTtcblx0fVxu
XG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTtcblxuXG5cbi8vIGdl
dFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxudmFyIHByb3BlcnR5R2V0dGVycyA9IHt9LCBwcm9w
ZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJvcGVydGllc1xuXG52YXIgcHJvcGVydGllcyA9IHt9
O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBlJywgJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZScsICdh
Y2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAnY2VsbFNwYWNpbmcnLCAnY29sU3BhbicsXG5cdCdm
cmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCdcbl0sIGZ1bmN0aW9u
KHByb3BlcnR5KXtcblx0cHJvcGVydGllc1twcm9wZXJ0eS50b0xvd2VyQ2FzZSgpXSA9IHByb3Bl
cnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRtbCA9ICdpbm5lckhUTUwnO1xucHJvcGVydGllcy50
ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnRleHRDb250ZW50ID09IG51bGwp
ID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVudCc7XG5cbk9iamVjdC5mb3JFYWNoKHByb3BlcnRp
ZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5cdHByb3BlcnR5U2V0dGVyc1trZXldID0gZnVuY3Rp
b24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbcmVhbF0gPSB2YWx1ZTtcblx0fTtcblx0cHJvcGVy
dHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZVtyZWFsXTtc
blx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xucHJvcGVydHlTZXR0ZXJzLnRleHQgPSAoZnVuY3Rp
b24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRpZiAobm9kZS5nZXQo
J3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpO1xuXHRcdGVsc2Ugbm9k
ZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7XG5cdH07XG59KShwcm9wZXJ0eVNldHRlcnMudGV4
dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRlcil7XG5cdHJldHVy
biBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUn
KSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUpO1xuXHR9O1xufSkocHJvcGVydHlHZXR0
ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5cbi8vIEJvb2xlYW5zXG5cbnZhciBib29scyA9IFtc
blx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lzbWFwJywgJ2RlY2xhcmUnLCAnbm9zaGFkZScsICdj
aGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxlJywgJ3NlbGVjdGVk
JywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywgJ2F1dG9mb2N1cycs
ICdjb250cm9scycsICdhdXRvcGxheScsXG5cdCdsb29wJ1xuXTtcblxudmFyIGJvb2xlYW5zID0g
e307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBmdW5jdGlvbihib29sKXtcblx0dmFyIGxvd2VyID0g
Ym9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29sZWFuc1tsb3dlcl0gPSBib29sO1xuXHRwcm9wZXJ0
eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbYm9vbF0g
PSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29sXTtcblx0fTtcbn0pO1xuXG4vLyBTcGVjaWFsIGNh
c2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7XG5cblx0J2NsYXNzJzogZnVu
Y3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xh
c3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVl
KTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnaHRtbEZv
cicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3IgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdm
b3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xu
XHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5bGUuY3NzVGV4dCA9IHZhbHVlIDogbm9kZS5zZXRB
dHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xuXHR9LFxuXG5cdCd2YWx1ZSc6IGZ1bmN0aW9uKG5v
ZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwpID8gdmFsdWUgOiAn
Jztcblx0fVxuXG59KTtcblxucHJvcGVydHlHZXR0ZXJzWydjbGFzcyddID0gZnVuY3Rpb24obm9k
ZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSB8fCBu
dWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG59O1xuXG4vKiA8d2Via2l0PiAqL1xu
dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyBJRSBzZXRzIHR5
cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xudHJ5IHsgZWwudHlwZSA9ICdidXR0b24nOyB9IGNh
dGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAnYnV0dG9uJykgcHJvcGVydHlTZXR0ZXJzLnR5cGUg
PSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdG5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgdmFs
dWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwvd2Via2l0PiAqL1xuXG4vKjxJRT4qL1xuXG4vKjxs
dElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRc
bnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xu
XHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0Zmxh
ZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0p
KCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVlLCBodG1sNUlucHV0U3VwcG9ydDtcblxuLy8gIzIx
NzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5wdXQudHlwZSA9ICdzdWJtaXQnO1xudm9sYXRpbGVJ
bnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0gJ3QnO1xuXG4vLyAjMjQ0MyAtIElFIHRocm93cyBc
IkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUgaW5wdXQgdHlwZXNc
bnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7XG5cdGlucHV0LnR5cGUgPSAnZW1haWwnO1xuXHRo
dG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJztcbn0gY2F0Y2ggKGUpe31c
blxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8ICFodG1sNUlucHV0
U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKXtcblx0
dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuXHRcdG5vZGUudHlwZSA9IHR5cGU7
XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKXt9XG59O1xuLyo8L0lFPiov
XG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSAqL1xuXG4vKiA8bHRJRTk+ICovXG52YXIg
cG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oZGl2KXtcblx0ZGl2LnJhbmRvbSA9ICdh
dHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5nZXRBdHRyaWJ1dGUoJ3JhbmRvbScpID09ICdhdHRy
aWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxudmFyIGhhc0Ns
b25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xuXHR0ZXN0LmlubmVySFRNTCA9ICc8b2JqZWN0Pjxw
YXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZhbHVlPVwidGhlIHVua25vd25cIiAvPjwvb2JqZWN0
Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9kZSh0cnVlKS5maXJzdENoaWxkLmNoaWxkTm9kZXMu
bGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4vKiA8L2x0
SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0ID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0
dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1lIHx8ICcnKS5jbGVhbigpLnNwbGl0KCcgJyksIHVu
aXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFt
ZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0gJycgJiYgIXVuaXF1ZXNbY2xhc3NOYW1lXSkgcmV0
dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNsYXNzTmFtZTtcblx0fSk7XG59O1xuXG52YXIgYWRk
VG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKG5hbWUp
O1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhp
cy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIHNldHRlciA9IHBy
b3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChzZXR0ZXIpe1xuXHRc
dFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0dmFyIGF0dHJpYnV0ZUFsbG93TGlzdDtcblx0XHRcdGlmIChwb2xsdXRlc0dldEF0
dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFs
bG93TGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJRTk+ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9
PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8q
IDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0
cmlidXRlQWxsb3dMaXN0W25hbWVdO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fSBl
bHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2YWx1ZSk7XG5cdFx0
XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRy
aWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXRQcm9wZXJ0aWVzOiBm
dW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRmb3IgKHZhciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRl
cykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlXSk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xu
XHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMpO1xuXHRcdC8qIDxsdElFOT4gKi9cblx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpe1xuXHRcdFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0ZUFsbG93TGlzdCA9IHRoaXMucmV0cmlldmUoJyRh
dHRyaWJ1dGVBbGxvd0xpc3QnLCB7fSk7XG5cdFx0XHRpZiAoIWF0dHIpIHJldHVybiBudWxsO1xu
XHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAhYXR0cmlidXRlQWxsb3dMaXN0W25hbWVdKXtcblx0
XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRlckhUTUw7XG5cdFx0XHRcdC8vIHNlZ21lbnQgYnkg
dGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRlIG5hbWVcblx0XHRc
dFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRlci5zZWFyY2goL1xcLz9bJ1wiXT8+KD8hW148XSo8
WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0YXR0cmli
dXRlQWxsb3dMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyogPC9sdElF
OT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xpY2suZ2V0QXR0cmlidXRlKHRoaXMsIG5hbWUpO1xu
XHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xpY2suaGFzQXR0cmlidXRlKHRoaXMsIG5hbWUpKSA/
IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0Z2V0UHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gYXJncy5t
YXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcykuYXNzb2NpYXRlKGFyZ3MpO1xuXHR9LFxuXG5cdHJl
bW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0
eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xu
XHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5LCB0aGlzKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKXtcblx0
XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5
ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB0aGlz
LnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdGdl
dDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVz
W3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5
LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7XG5cdH0ub3ZlcmxvYWRH
ZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0g
RWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lcmFz
ZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3ZlUHJvcGVydHkocHJv
cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGhhc0NsYXNzTGlzdCA/
IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5z
KGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiBjbGFz
c2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkZENs
YXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xh
c3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc2Vz
KGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xhc3NOYW1lKS5qb2luKCcgJyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNs
YXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2gocmVtb3ZlRnJvbUNsYXNz
TGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUp
e1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSk7XG5cdFx0Y2xh
c3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xhc3NOYW1lcyk7XG5c
dFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVzLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3JjZSl7XG5c
dFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNlID0gIXRoaXMuaGFzQ2xhc3MoY2xhc3NOYW1lKTtc
blx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1lKSA6IHRoaXMucmVt
b3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZG9wdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQsIGVsZW1lbnRzID0gQXJyYXkuZmxhdHRlbihhcmd1
bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCA+IDEpIHBh
cmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG5c
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9
IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTtcblx0XHRcdGlmIChlbGVtZW50KSBwYXJl
bnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyYWdtZW50KSB0aGlz
LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFw
cGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXtcblx0XHRyZXR1cm4gdGhpcy5ncmFiKHRo
aXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUpO1xuXHR9LFxuXG5cdGdy
YWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20n
XShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwg
J2JvdHRvbSddKHRoaXMsIGRvY3VtZW50LmlkKGVsLCB0cnVlKSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXtcblx0XHRlbCA9IGRvY3VtZW50Lmlk
KGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLCBlbCk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcHM6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5c
dFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZXMo
ZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxcblxuXHRnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8vIFNhZmFyaSAzLjIuMVxuXHRcdHJldHVybiBuZXcg
RWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5jdGlvbihvcHRp
b24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZDtcblx0XHR9KSk7XG5cdH0sXG5cblx0
dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblx0
XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rp
b24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBlbC50eXBlO1xuXHRcdFx0aWYgKCFlbC5uYW1lIHx8
IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAncmVzZXQnIHx8IHR5
cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG5cdFx0XHR2YXIgdmFs
dWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxlY3RlZCgpLm1hcChm
dW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJRVxuXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuaWQo
b3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9KSA6ICgodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUg
PT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNrZWQpID8gbnVsbCA6IGVsLmdldCgndmFsdWUnKTtc
blxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2YWwpe1xuXHRcdFx0
XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVzaChlbmNvZGVV
UklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsKSk7XG5c
dFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9
XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxcblxudmFyIGFwcGVuZEluc2VydGVycyA9IHtcblx0
YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRhZnRlcjogJ2FmdGVyRW5kJyxcblx0Ym90dG9tOiAn
YmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJCZWdpbicsXG5cdGluc2lkZTogJ2JlZm9yZUVuZCdc
bn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNlcnRBZGphY2VudEhU
TUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0aW9uKGh0bWwsIHdo
ZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2VudEhUTUwoYXBwZW5kSW5zZXJ0ZXJzW3doZXJlIHx8
ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVybiB0aGlzO1xufSA6IGZ1bmN0aW9uKGh0bWwsIHdo
ZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6IGh0bWx9KSxcblx0
XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rlcyxcblx0XHRmcmFnbWVudCA9IHRlbXAuZmlyc3RD
aGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSByZXR1cm4gdGhpcztcblx0aWYgKGNoaWxkcmVuLmxl
bmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcblx0XHR9XG5cdH1c
blxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGZyYWdtZW50LCB0aGlzKTtcblx0cmV0
dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0ge307XG5cbnZh
ciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRyZXR1cm4gKHN0b3JhZ2VbdWlkXSB8fCAoc3RvcmFn
ZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIg
dWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5cdGlmIChpdGVtLnJlbW92ZUV2ZW50cykgaXRlbS5y
ZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBpdGVtLmNsZWFyQXR0
cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51bGwpe1xuXHRcdGRlbGV0ZSBjb2xsZWN0ZWRbdWlk
XTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRdO1xuXHR9XG5cdHJldHVybiBpdGVtO1xufTtcblxu
dmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdzZWxlY3RlZCcsIHRl
eHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGRlc3Ryb3k6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVuID0gY2xlYW4odGhpcykuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNoKGNoaWxkcmVuLCBjbGVhbik7XG5cdFx0RWxlbWVu
dC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5j
dGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQu
ZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihjb250ZW50cywg
a2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTtcblx0XHR2YXIgY2xv
bmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwgdGUgPSBbdGhpc10s
IGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xuXHRcdFx0Y2UuYXBwZW5kKEFycmF5LmNvbnZlcnQo
Y2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdFx0dGUuYXBwZW5kKEFycmF5
LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0fVxuXG5cdFx0
Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtcblx0XHRcdHZhciBub2RlID0gY2VbaV0sIGVsZW1l
bnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnaWQn
KTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAobm9kZS5jbGVhckF0dHJpYnV0ZXMpe1xu
XHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRlcygpO1xuXHRcdFx0XHRub2RlLm1lcmdlQXR0cmli
dXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3VuaXF1ZU51bWJl
cicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRpb25zKXtcblx0XHRcdFx0XHR2YXIgbm8gPSBub2Rl
Lm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSBu
by5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0ZWQ7XG5cdFx0XHRc
dH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHByb3AgPSBmb3JtUHJv
cHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdFx0aWYgKHByb3AgJiYgZWxl
bWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07XG5cdFx0fVxuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVCdWcpe1xuXHRcdFx0dmFyIGNvID0gY2xvbmUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChpID0gY28ubGVuZ3RoOyBpLS07KSBjb1tpXS5vdXRl
ckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5cdFx0fVxuXHRcdC8qPC9sdElFOT4qL1xuXHRcdHJl
dHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5cdH1cblxufSk7XG5cbltFbGVtZW50LCBXaW5kb3cs
IERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRMaXN0ZW5lcjogZnVuY3Rp
b24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxlY3RlZFtTbGljay51aWRPZih0aGlzKV0gPSB0aGlz
O1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRFdmVudExpc3RlbmVyKSB0aGlzLmFkZEV2ZW50TGlz
dGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuYXR0YWNoRXZl
bnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVM
aXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh0aGlzLnJlbW92ZUV2ZW50TGlz
dGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0p
O1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0eSwgZGZsdCl7XG5c
dFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9wID0gc3RvcmFnZVtw
cm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0gbnVsbCAmJiBwcm9wID09IG51bGwpIHByb3AgPSBz
dG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5cdFx0cmV0dXJuIHByb3AgIT0gbnVsbCA/IHByb3Ag
OiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRc
dHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRzdG9yYWdlW3Byb3Bl
cnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVsaW1pbmF0ZTogZnVu
Y3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMp
KTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBnYyA9IGZ1bmN0aW9uKCl7XG5cdFx0T2JqZWN0LmVh
Y2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0aWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFnZSkgQ29s
bGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cucmVtb3ZlTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtc
blx0fTtcblx0d2luZG93LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG59XG4vKjwvbHRJRTk+
Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307XG5cblxuXG5FbGVtZW50LlByb3BlcnRpZXMu
c3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihzdHlsZSl7XG5cdFx0dGhpcy5zdHlsZS5jc3NU
ZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5z
dHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnRhZyA9
IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudGFnTmFtZS50b0xvd2Vy
Q2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy5odG1sID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYgKGh0bWwgPT0gbnVsbCkgaHRtbCA9ICcnO1xuXHRc
dGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRtbC5qb2luKCcnKTtc
blxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKHRoaXMuc3R5bGVTaGVldCAmJiAhY2FuQ2hhbmdl
U3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGh0bWw7XG5cdFx0ZWxzZSAvKjwv
bHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycpO1xuXHR9XG5cbn07XG5cbnZhciBzdXBwb3J0c0hU
TUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gdHJ1ZSwgc3VwcG9y
dHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8qPGx0SUU5PiovXG4vLyB0ZWNobmlxdWUgYnkgamRi
YXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQuY29tL2lubmVyc2hpdi9cbnZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBmcmFnbWVudDtcbmRpdi5pbm5lckhUTUwg
PSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gKGRpdi5jaGlsZE5vZGVz
Lmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblx0dmFyIHRhZ3Mg
PSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2Nh
cHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBw
cm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAnKTtcblx0ZnJhZ21l
bnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGwgPSB0YWdzLmxlbmd0aDtc
blx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3JlYXRlRWxlbWVudCh0YWdzW2xdKTtcbn1cbmRpdiA9
IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbnN1cHBvcnRzVGFibGVJbm5lckhUTUwg
PSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdHZhciB0YWJsZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRhYmxlLmlubmVySFRNTCA9ICc8dHI+PHRkPjwvdGQ+
PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0pO1xuXG4vKjxsdEZGND4qL1xudmFyIHRyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwgaHRtbCA9ICc8dGQ+PC90ZD4nO1xudHIuaW5uZXJI
VE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5lckhUTUwgPSAodHIuaW5uZXJIVE1MID09IGh0bWwp
O1xudHIgPSBudWxsO1xuLyo8L2x0RkY0PiovXG5cbmlmICghc3VwcG9ydHNUYWJsZUlubmVySFRN
TCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8fCAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblxu
XHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0KXtcblxuXHRcdHZh
ciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0YWJsZTogWzEsICc8dGFibGU+JywgJzwvdGFibGU+
J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNlbGVjdD4nLCAnPC9zZWxlY3Q+J10sXG5cdFx0XHR0
Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG5cdFx0XHR0
cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J11cblx0
XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25zLnRmb290ID0gdHJh
bnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGh0bWwpe1xuXG5cdFx0XHQv
KjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMuc3R5bGVTaGVldCkgcmV0dXJuIHNldC5jYWxsKHRo
aXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgd3JhcCA9IHRyYW5zbGF0
aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRcdFx0aWYgKCF3cmFwICYmICFzdXBwb3J0c0hUTUw1
RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcnXTtcblx0XHRcdGlmICghd3JhcCkgcmV0dXJuIHNl
dC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0XHR2YXIgbGV2ZWwgPSB3cmFwWzBdLCB3cmFwcGVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHRhcmdldCA9IHdyYXBwZXI7XG5cdFx0
XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcHBl
cik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRNTCA9IFt3cmFwWzFdLCBodG1sLCB3cmFwWzJdXS5m
bGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3aGlsZSAobGV2ZWwtLSkgdGFyZ2V0ID0gdGFyZ2V0
LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVtcHR5KCkuYWRvcHQodGFyZ2V0LmNoaWxkTm9kZXMp
O1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LnJlbW92ZUNoaWxk
KHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9IG51bGw7XG5cdFx0fTtcblxuXHR9KShFbGVtZW50
LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxuLyo8L0lFPiovXG5cbi8qPGx0SUU5PiovXG52YXIg
dGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG50ZXN0Rm9ybS5pbm5l
ckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4nO1xuXG5pZiAodGVz
dEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAncycpIEVsZW1lbnQuUHJvcGVydGllcy52YWx1ZSA9
IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGFnID0gdGhpcy5nZXQoJ3Rh
ZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcpIHJldHVybiB0aGlzLnNldFByb3BlcnR5KCd2
YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxlbWVudHMoJ29wdGlv
bicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIG9wdGlvbiA9IG9wdGlvbnNbaV0sXG5c
dFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKSxcblx0XHRcdFx0
b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBv
cHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IHZhbHVlKSByZXR1
cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0KCd0YWcnKTtcblxu
XHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYgdGFnICE9ICdvcHRpb24nKSByZXR1cm4gdGhpcy5n
ZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRcdGlmICh0YWcgPT0gJ3NlbGVjdCcgJiYgIShvcHRp
b24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVswXSkpIHJldHVybiAnJztcblxuXHRcdHZhciBhdHRy
ID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7XG5cdFx0cmV0dXJuIChhdHRyICYm
IGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0
fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5pZiAo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKSkgRWxl
bWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKGlkKXtcblx0XHR0aGlzLmlk
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7XG5cdH0sXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5pZCB8fCBudWxsO1xuXHR9LFxuXHRlcmFzZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZh
bHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+Ki9cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1l
OiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5cGUsIHRvIG1ha2Ug
dGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgRnVuY3Rpb24sIFN0
cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczogRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxudmFyIF9rZXlzID0ge307XG52YXIgbm9ybWFsaXplV2hlZWxTcGVlZCA9IGZ1bmN0aW9u
KGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7XG5cdGlmIChldmVudC53aGVlbERlbHRhKXtcblx0
XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxEZWx0YSAlIDEyMCA9PSAwID8gZXZlbnQud2hlZWxE
ZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVsdGEgLyAxMjtcblx0fSBlbHNlIHtcblx0XHR2YXIg
cmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8IGV2ZW50LmRldGFpbCB8fCAwO1xuXHRcdG5vcm1h
bGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMgOiByYXdBbW91bnQg
KiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZWQ7XG59O1xuXG52YXIgRE9NRXZlbnQgPSB0
aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RPTUV2ZW50JywgZnVuY3Rpb24oZXZlbnQsIHdpbil7
XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luLmV2ZW50
O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7XG5cdHRoaXMuZXZlbnQgPSBl
dmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0cnVlO1xuXHR0aGlzLnNoaWZ0ID0gZXZlbnQuc2hp
ZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2ZW50LmN0cmxLZXk7XG5cdHRoaXMuYWx0ID0gZXZl
bnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBldmVudC5tZXRhS2V5O1xuXHR2YXIgdHlwZSA9IHRo
aXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZl
bnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykg
dGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQo
dGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRleE9mKCdrZXknKSA9PSAwKXtcblx0XHR2YXIgY29k
ZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtcblx0XHRpZiAo
IXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5cHJlc3MnKSB0aGlzLmtleSA9IF9rZXlzW2NvZGVd
O1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3duJyB8fCB0eXBlID09ICdrZXl1cCcpe1xuXHRcdFx0
aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEyNCkgdGhpcy5rZXkgPSAnZicgKyAoY29kZSAtIDEx
MSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4gOTUgJiYgY29kZSA8IDEwNikgdGhpcy5rZXkgPSBj
b2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmtleSA9PSBudWxsKSB0aGlzLmtleSA9IFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKTtcblx0fSBlbHNlIGlmICh0eXBl
ID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0gJ2NvbnRleHRtZW51
JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUu
aW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0XHR2YXIgZG9jID0gd2luLmRvY3VtZW50O1xuXHRc
dGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5cdFx0dGhpcy5wYWdlID0ge1xuXHRcdFx0eDogKGV2
ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYICsgZG9jLnNj
cm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSA6
IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wXG5cdFx0fTtcblx0XHR0aGlzLmNsaWVudCA9
IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBh
Z2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxcblx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxs
KSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xpZW50WVxuXHRcdH07
XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlID09ICd3aGVlbCcgfHwg
dHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMud2hlZWwgPSBub3JtYWxpemVXaGVlbFNwZWVkKGV2
ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0gMyB8fCBldmVudC5i
dXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91
c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21vdXNlbGVhdmUnKXtc
blx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdt
b3VzZWVudGVyJztcblx0XHRcdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBl
dmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQnXTtcblx0XHRcdHdo
aWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQu
cGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3VtZW50LmlkKHJlbGF0
ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNoJykgPT0gMCB8fCB0
eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXtcblx0XHR0aGlzLnJvdGF0aW9uID0gZXZlbnQu
cm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9IGV2ZW50LnNjYWxlO1xuXHRcdHRoaXMudGFyZ2V0
VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7XG5cdFx0dGhpcy5jaGFuZ2VkVG91Y2hlcyA9
IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRcdHZhciB0b3VjaGVzID0gdGhpcy50b3VjaGVzID0g
ZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXtcblx0XHRcdHZh
ciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0XHR0aGlzLnBhZ2UgPSB7eDogdG91Y2gucGFnZVgs
IHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRoaXMuY2xpZW50ID0ge3g6IHRvdWNoLmNsaWVudFgs
IHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhpcy5jbGllbnQpIHRo
aXMuY2xpZW50ID0ge307XG5cdGlmICghdGhpcy5wYWdlKSB0aGlzLnBhZ2UgPSB7fTtcbn0pO1xu
XG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fSxcblxuXHRzdG9w
UHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5j
YW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByZXZlbnRE
ZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KSB0
aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LnJldHVyblZh
bHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkRPTUV2ZW50LmRl
ZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtleSl7XG5cdF9rZXlzW2NvZGVdID0ga2V5O1xuXHRy
ZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50LmRlZmluZUtleXMgPSBET01FdmVudC5kZWZpbmVL
ZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleXMoe1xuXHQnMzgn
OiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6ICdsZWZ0JywgJzM5JzogJ3JpZ2h0Jyxcblx0JzI3
JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4JzogJ2JhY2tzcGFjZScsICc5JzogJ3RhYicsXG5c
dCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInXG59KTtcblxufSkoKTtcblxuXG5cblxuXG4v
KlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEVs
ZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBmaWxlIGFsc28gaW5j
bHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVudCBFdmVudHMsIGlm
IG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVzOiBFbGVtZW50LkV2ZW50XG5cbi4uLlxuKi9cblxu
KGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5jdGlv
bihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50cyhldmVudHMpO1xufX07XG5cbltFbGVtZW50LCBX
aW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMn
LCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwg
dmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50c1t0eXBlXS5rZXlzLmNvbnRhaW5zKGZuKSkgcmV0
dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMucHVzaChmbik7XG5cdFx0dmFyIHJlYWxU
eXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdLFxuXHRcdFx0
Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxmID0gdGhpcztcblx0XHRpZiAoY3VzdG9tKXtcblx0
XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3RvbS5vbkFkZC5jYWxsKHRoaXMsIGZuLCB0eXBlKTtc
blx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uKXtcblx0XHRcdFx0Y29uZGl0aW9uID0gZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uLmNhbGwodGhpcywgZXZl
bnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdFx0cmV0dXJu
IHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHJlYWxU
eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0
XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZuLmNhbGwoc2Vs
Zik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZlRXZlbnQgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50c1ty
ZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2ZW50KXtcblx0XHRcdGlmIChuYXRpdmVFdmVudCA9
PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRldmVudCA9
IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5kb3coKSk7XG5cdFx0XHRcdFx0aWYgKGNv
bmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0b3AoKTtcblx0XHRc
dFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWRkTGlzdGVuZXIocmVhbFR5cGUsIGRlZm4sIGFy
Z3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2ZW50c1t0eXBlXS52YWx1ZXMucHVzaChkZWZuKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwg
Zm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAo
IWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHR2YXIgbGlzdCA9IGV2
ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXggPSBsaXN0LmtleXMuaW5kZXhPZihmbik7XG5cdFx0
aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpcztcblx0XHR2YXIgdmFsdWUgPSBsaXN0LnZhbHVl
c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qua2V5c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qu
dmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV07XG5c
dFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uUmVtb3ZlKSBjdXN0b20ub25SZW1v
dmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHR5cGUgPSBG
dW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZlbnRzW3R5cGVdKSA/IHRoaXMucmVtb3ZlTGlzdGVu
ZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1syXSkgOiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50
czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMu
YWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRp
ZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50
cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRo
aXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xu
XHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICghZXZlbnRzKXtcblx0XHRc
dGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhpcy5yZW1vdmVFdmVudHModHlwZSk7XG5cdFx0XHR0
aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5cdFx0fSBlbHNlIGlmIChhdHRhY2hlZFtldmVudHNd
KXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRc
dFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0
ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHZhciBldmVu
dHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRz
W3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblxu
XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5
KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMs
IGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25l
RXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXtcblx0XHRmcm9tID0gZG9jdW1lbnQuaWQoZnJv
bSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20ucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICgh
ZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIXR5cGUpe1xuXHRcdFx0Zm9yICh2YXIgZXZl
bnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9uZUV2ZW50cyhmcm9tLCBldmVudFR5cGUpO1xuXHRc
dH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtcblx0XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2go
ZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50KHR5cGUsIGZuKTtcblx0XHRcdH0s
IHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRWxlbWVudC5O
YXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAyLCBkYmxjbGljazogMiwgbW91c2V1cDogMiwgbW91
c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwgLy9tb3VzZSBidXR0b25zXG5cdHdoZWVsOiAyLCBt
b3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVlbFxuXHRtb3VzZW92
ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1vdmU6IDIsIHNlbGVjdHN0YXJ0OiAyLCBzZWxlY3Rl
bmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0a2V5ZG93bjogMiwga2V5cHJlc3M6IDIsIGtleXVw
OiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBtb2JpbGVcblx0dG91
Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0b3VjaGVuZDogMiwgdG91Y2hjYW5jZWw6IDIsIC8v
IHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwgZ2VzdHVyZWVuZDog
MiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAyLCByZXNldDogMiwg
c2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9mb3JtIGVsZW1lbnRz
XG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVmb3JldW5sb2FkOiAyLCByZXNpemU6IDEsIG1vdmU6
IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJlYWR5c3RhdGVjaGFuZ2U6IDEsIC8vd2luZG93XG5c
dGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAyLCBwYWdlc2hvdzogMiwgcGFnZWhpZGU6IDIsIC8v
IGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1lc3NhZ2U6IDIgLy9t
aXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9IHtcblx0bW91c2V3aGVlbDoge1xuXHRcdGJhc2U6
ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdoZWVsJyBpbiBkb2N1
bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNjcm9sbCdcblx0fVxufTtcblxudmFyIGNo
ZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJn
ZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwpIHJldHVybiB0cnVlO1xuXHRpZiAoIXJlbGF0ZWQp
IHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYgcmVsYXRlZC5wcmVm
aXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYgIXRoaXMuY29udGFp
bnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdvbm1vdXNlZW50ZXInIGluIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50ZXIgPSBFbGVtZW50
Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjtcblx0RWxlbWVudC5Nb3VzZWVudGVyQ2hlY2sg
PSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlZW50ZXIgPSB7XG5cdFx0
YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xuXG5cdEVsZW1l
bnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25k
aXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8qPGx0SUU5PiovXG5pZiAoIXdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMucHJvcGVydHljaGFuZ2UgPSAyO1xu
XHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7XG5cdFx0YmFzZTogZnVuY3Rpb24oKXtcblx0XHRc
dHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRcdFx0cmV0dXJuICh0aGlzLmdldCgndGFnJykgPT0g
J2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94JykpID8gJ3By
b3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xuXHRcdH0sXG5cdFx0Y29uZGl0aW9uOiBmdW5jdGlv
bihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVydHljaGFuZ2UnIHx8
IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7XG5cdFx0fVxuXHR9O1xufVxu
Lyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGVs
ZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0
IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZpY2llbnQgZXZlbnQg
bWFuYWdlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRpb25dXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBldmVudExpc3RlbmVyU3VwcG9ydCA9ICEhd2luZG93
LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3VzaW4gPSBFbGVt
ZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7XG5cbnZhciBidWJibGVVcCA9IGZ1bmN0aW9u
KHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFy
Z2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkgcmV0dXJuIGZuLmNh
bGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtcblx0XHR0YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJn
ZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5cbnZhciBtYXAgPSB7XG5cdG1vdXNlZW50ZXI6IHtc
blx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRl
ckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRc
dGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0Zm9jdXM6IHtcblx0
XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycgOiAnaW4nKSxcblx0
XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJsdXI6IHtcblx0XHRiYXNlOiBldmVudExpc3RlbmVy
U3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9XG59
O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkgPSAnJGRlbGVnYXRpb246JztcbnZhciBmb3JtT2Jz
ZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxuXHRyZXR1cm4ge1xuXG5cdFx0YmFzZTogJ2ZvY3Vz
aW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxmLCB1aWQpe1xuXHRcdFx0dmFyIGxpc3Qg
PSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KVt1aWRdO1xuXHRc
dFx0aWYgKGxpc3QgJiYgbGlzdC5mb3JtcykgZm9yICh2YXIgaSA9IGxpc3QuZm9ybXMubGVuZ3Ro
OyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNv
IGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRcdC8vIHJlbW92ZUV2ZW50IG1ldGhvZCBhbnltb3Jl
LiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdhc1xuXHRcdFx0XHQvLyByZW1vdmVkIGFzIHdlbGwu
XG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0LmZvcm1zW2ldLnJl
bW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bGlz
dGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCl7XG5cdFx0
XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8gdGFyZ2V0IDogZXZl
bnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpO1xuXHRcdFx0aWYgKCFmb3JtKSByZXR1cm47XG5c
blx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3Rl
bmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVuZXIgPSBsaXN0ZW5lcnNbdWlkXSB8fCB7Zm9ybXM6
IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9ybXMgPSBsaXN0ZW5lci5mb3JtcywgZm5zID0gbGlz
dGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAhPSAtMSkgcmV0dXJu
O1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtcblxuXHRcdFx0dmFyIF9mbiA9IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtc
blx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2ZW50KHR5cGUsIF9mbik7XG5cdFx0XHRmbnMucHVz
aChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNbdWlkXSA9IGxpc3RlbmVyO1xuXHRcdFx0c2VsZi5z
dG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCBsaXN0ZW5lcnMpO1xuXHRcdH1cblx0fTtc
bn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cdHJldHVybiB7XG5c
dFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZu
LCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZhciBldmVudHMgPSB7Ymx1cjogZnVuY3Rpb24oKXtc
blx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMoZXZlbnRzKTtcblx0XHRcdH19O1xuXHRcdFx0ZXZl
bnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxmLCBtYXRj
aCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGV2ZW50LnRhcmdldC5hZGRF
dmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07XG59O1xuXG5pZiAoIWV2ZW50TGlzdGVuZXJTdXBw
b3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xuXHRzdWJtaXQ6IGZvcm1PYnNlcnZlcignc3VibWl0
JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksXG5cdGNoYW5nZTogaW5wdXRPYnNl
cnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDogaW5wdXRPYnNlcnZlcignc2VsZWN0Jylcbn0pO1xu
Lyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLFxuXHRhZGRFdmVu
dCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1vdmVFdmVudCA9IHByb3RvLnJlbW92ZUV2ZW50O1xu
XG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQsIG1ldGhvZCl7XG5cdHJldHVybiBmdW5jdGlvbih0
eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0aWYgKHR5cGUuaW5kZXhPZignOnJlbGF5JykgPT0g
LTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFy
IHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdGlmIChw
YXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5
cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgbmV3VHlwZSA9IHBhcnNlZC50YWc7XG5cdFx0
cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFjaChmdW5jdGlvbihwc2V1ZG8pe1xuXHRcdFx0bmV3
VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsgKHBzZXVkby52YWx1ZSA/ICcoJyArIHBzZXVkby52
YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtcblx0XHRvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbik7
XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIG5ld1R5cGUsIHBhcnNlZC5wc2V1ZG9zWzBd
LnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52YXIgZGVsZWdhdGlvbiA9IHtcblxuXHRhZGRFdmVu
dDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0
cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYg
KHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0aWYgKHN0b3JlZFtfdWlk
XS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0ubWF0Y2ggPT0gbWF0Y2gpIHJldHVybiB0aGlzO1xu
XHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5cGUsIF9tYXRjaCA9IG1hdGNoLCBfZm4gPSBmbiwg
X21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xu
XG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpe1xuXHRcdFx0cmV0dXJuIFNsaWNrLm1hdGNo
KHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xuXG5cdFx0dmFyIGVsZW1lbnRFdmVudCA9IEVsZW1l
bnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAoX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50
ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24pe1xuXHRcdFx0dmFyIF9fbWF0Y2ggPSBtYXRjaCwg
Y29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNvbmRpdGlvbjtcblx0
XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVudCl7XG5cdFx0XHRcdHJldHVybiBfX21h
dGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRpdGlvbi5jYWxsKHRhcmdldCwgZXZlbnQsIHR5cGUp
O1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgc2VsZiA9IHRoaXMsIHVpZCA9IFN0cmluZy51
bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0b3IgPSBfbWFwLmxpc3RlbiA/IGZ1bmN0aW9uKGV2
ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0
KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBfbWFwLmxpc3Rlbihz
ZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCk7XG5cdFx0fSA6IGZ1bmN0aW9uKGV2
ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0
KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBidWJibGVVcChzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdH07XG5cblx0XHRpZiAoIXN0b3JlZCkg
c3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3VpZF0gPSB7XG5cdFx0XHRtYXRjaDogX21hdGNoLFxu
XHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVnYXRvcjogZGVsZWdhdG9yXG5cdFx0fTtcblx0XHRz
dG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRyZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0
eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1
bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3VpZCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJl
dHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlm
ICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxuXHRcdGlmIChfdWlkKXtcblx0XHRcdHZhciBfdHlw
ZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3JlZFtfdWlkXS5kZWxlZ2F0b3IsIF9tYXAgPSBtYXBb
dHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXHRcdFx0aWYg
KF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0aGlzLCBfdWlkKTtcblx0XHRcdGRlbGV0ZSBzdG9y
ZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRcdHJldHVybiBy
ZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJlKTtcblx0
XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5cdFx0aWYgKGZuKSBmb3IgKF9fdWlkIGluIHN0b3Jl
ZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNo
ICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywg
dHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5cdFx0fSBlbHNlIGZvciAoX191aWQgaW4gc3RvcmVk
KXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2gp
IGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgcy5mbiwgX191
aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59O1xuXG5bRWxlbWVudCwgV2lu
ZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cdGFkZEV2ZW50OiByZWxheShh
ZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVudCksXG5cdHJlbW92ZUV2ZW50OiByZWxheShyZW1v
dmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVFdmVudClcbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMg
Zm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBpbiBhIGZhc2hpb25h
YmxlIHdheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBFbGVt
ZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0eWxlXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRtbCwgZWw7XG5cbi8vPGx0SUU5PlxuLy8gQ2hlY2sg
Zm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCByZW1vdmUgc3R5bGVzIHdoZW4gdGhleSdyZSBzZXQg
dG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsLnN0eWxlLmNv
bG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xvciA9IG51bGw7XG52YXIgZG9lc05vdFJlbW92ZVN0
eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdyZWQnO1xuXG4vLyBjaGVjayBmb3Igb2xkSUUsIHdo
aWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhhbmQgc3R5bGVzIGluIHRoZSB3cm9uZyBvcmRlciAo
Y29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBvZiB3aWR0aC1zdHlsZS1jb2xvcilcbnZhciBib3Jk
ZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xuZWwuc3R5bGUuYm9yZGVyID0gYm9yZGVyO1xudmFy
IHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyID0gZWwuc3R5bGUuYm9yZGVyICE9IGJvcmRlcjtc
bmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxudmFyIGhhc0dldENvbXB1dGVkU3R5bGUgPSAhIXdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRzdXBwb3J0Qm9yZGVyUmFkaXVzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51bGw7XG5cbkVsZW1l
bnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMpe1xuXHR0aGlzLnNl
dFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZhciBoYXNPcGFjaXR5ID0gKGh0bWwuc3R5bGUub3Bh
Y2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVyID0gKGh0bWwuc3R5bGUuZmlsdGVyICE9IG51bGwp
LFxuXHRyZUFscGhhID0gL2FscGhhXFwob3BhY2l0eT0oW1xcZC5dKylcXCkvaTtcblxudmFyIHNl
dFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdG9y
ZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gb3Bh
Y2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxsID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59O1xu
XG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIgPSBmdW5jdGlvbihlbGVtZW50LCByZWdleHAsIHZh
bHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRmaWx0ZXIgPSBzdHlsZS5m
aWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8fCAnJztcblx0c3R5
bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVwbGFjZShyZWdleHAs
IHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50cmltKCk7XG5cdGlmICghc3R5bGUuZmls
dGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xufTtcbi8vPC9sdElFOT5cblxu
dmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkp
e1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xufSA6IChoYXNGaWx0ZXIgPyBm
dW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0aWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8
fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxlLnpvb20gPSAx
O1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8IG9wYWNpdHkgPT0gMSl7XG5cdFx0c2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0XHRpZiAob3BhY2l0eSA9PSAxICYmIGdldE9wYWNp
dHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFj
aXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwg
J2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5ICogMTAwKS5saW1pdCgwLCAxMDApLnJvdW5kKCkg
KyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJpbGl0eSkpO1xuXG52YXIgZ2V0T3BhY2l0eSA9ICho
YXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5z
dHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnb3BhY2l0eScpO1xuXHRy
ZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNpdHkudG9GbG9hdCgpO1xufSA6IChoYXNG
aWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIGZpbHRlciA9IChlbGVtZW50LnN0eWxl
LmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpKSxcblx0XHRvcGFj
aXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJlQWxwaGEpO1xuXHRy
ZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBmaWx0ZXIgPT0gbnVsbCkgPyAxIDogKG9wYWNpdHlb
MV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1l
bnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5cdGlmIChvcGFjaXR5ID09IG51bGwpIG9wYWNpdHkg
PSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6IDEpO1xuXHRyZXR1
cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZsb2F0TmFtZSA9IChodG1sLnN0eWxlLmNzc0Zsb2F0
ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyxcblx0bmFtZWRQb3NpdGlvbnMg
PSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBjZW50ZXI6ICc1MCUnLCByaWdodDogJzEwMCUnLCBi
b3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tncm91bmRQb3NpdGlvblhZID0gKGh0bWwuc3R5bGUu
YmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSxcblx0cHJlZml4UGF0dGVybiA9IC9eLShtcykt
LztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cmV0dXJuIHByb3Bl
cnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwgJyQxLScpLmNhbWVsQ2FzZSgpO1xufTtcblxuLy88
bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcHJvcGVydHkpe1xuXHRp
ZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpe1xuXHRcdHN0eWxlLnJlbW92ZUF0
dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5cdFx0cHJvcGVydHkgKz0gJ1knO1xuXHR9XG5cdHN0
eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG59O1xuLy88L2x0SUU5PlxuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0ZWRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xu
XHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJu
IHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldO1xuXHRcdHZhciBkZWZhdWx0
VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQodGhpcykuZGVmYXVsdFZpZXcsXG5cdFx0XHRjb21w
dXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLCBu
dWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRlZC5nZXRQcm9wZXJ0
eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHByb3BlcnR5Lmh5cGhl
bmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFs
dWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpe1xuXHRcdFx0aWYgKHZhbHVlICE9
IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cdFx0XHRzZXRPcGFjaXR5KHRoaXMs
IHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRwcm9wZXJ0eSA9IGNhbWVs
Q2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlm
ICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcnKXtcblx0XHRcdHZhciBtYXAgPSAoRWxlbWVudC5T
dHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3BsaXQoJyAnKTtcblx0XHRcdHZhbHVlID0gQXJyYXku
Y29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdGlmICghbWFwW2ld
KSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVybiAodHlwZU9mKHZhbCkgPT0gJ251bWJlcicpID8g
bWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsO1xuXHRcdFx0fSkuam9p
bignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJlcih2YWx1ZSkpKXtc
blx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3R5bGVb
cHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKCh2YWx1ZSA9PSAnJyB8
fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90UmVtb3ZlU3R5bGVzICYmIHRoaXMuc3R5bGUucmVt
b3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92ZVN0eWxlKHRoaXMuc3R5bGUsIHByb3BlcnR5KTtc
blx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFN0
eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jykg
cmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVy
dHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAoc3VwcG9ydEJv
cmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRleE9mKCdib3JkZXJSYWRpdXMnKSAhPSAtMSl7XG5c
dFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVz
JywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnXS5t
YXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVbY29ybmVyXSB8
fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpvaW4oJyAnKTtcblx0XHR9XG5cdFx0dmFyIHJlc3Vs
dCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xuXHRcdGlmICghcmVzdWx0IHx8IHByb3BlcnR5ID09
ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVtZW50LlNob3J0U3R5bGVzLmhhc093blByb3BlcnR5
KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3VsdCA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBzIGlu
IEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVydHldKSByZXN1bHQucHVzaCh0aGlzLmdldFN0eWxl
KHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRy
ZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRcdH1cblx0XHRpZiAo
aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRpb25bWFldPyQvLnRl
c3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvKHRvcHxyaWdodHxi
b3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24pe1xuXHRcdFx0XHRyZXR1cm4gbmFtZWRQ
b3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0fSkgfHwgJzBweCc7XG5cdFx0fVxuXHRcdGlmICgh
cmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKSByZXR1cm4gJzBweCAw
cHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRcdFx0cmVzdWx0ID0gU3RyaW5nKHJlc3VsdCk7XG5c
dFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3JnYmE/XFwoW1xcZFxccyxdK1xcKS8pO1xu
XHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xvclswXSwgY29sb3Jb
MF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiAh
dGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRcdFx0aWYgKCgvXihoZWlnaHR8d2lkdGgpJC8pLnRl
c3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1bHQpKSl7XG5cdFx0XHRcdHZhciB2YWx1
ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQnXSA6IFsndG9wJywg
J2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRcdFx0dmFsdWVzLmVhY2goZnVuY3Rpb24odmFsdWUp
e1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5nZXRTdHlsZSgnYm9yZGVyLScgKyB2YWx1ZSArICct
d2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRTdHlsZSgncGFkZGluZy0nICsgdmFsdWUpLnRvSW50
KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gdGhpc1snb2Zmc2V0JyArIHBy
b3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4Jztcblx0XHRcdH1cblx0XHRcdGlmICgo
L15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5KSAmJiBpc05h
TihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0XHRcdFx0cmV0dXJuICcwcHgnO1xuXHRcdFx0fVxu
XHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRpZiAocmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIg
JiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRvbXxMZWZ0KT8kLy50ZXN0KHByb3BlcnR5KSAmJiAv
XiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoL14oLispXFxz
KC4rKVxccyguKykkLywgJyQyICQzICQxJyk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblxuXHRc
dHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0c2V0U3R5bGVzOiBmdW5jdGlvbihzdHlsZXMpe1xu
XHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxlcykgdGhpcy5zZXRTdHlsZShzdHlsZSwgc3R5bGVz
W3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGVzOiBmdW5jdGlv
bigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyku
ZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtl
eSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59KTtcblxuRWxl
bWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgn
LCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4JywgbWF4V2lkdGg6
ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1pbkhlaWdodDogJ0Bw
eCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tncm91bmRTaXplOiAn
QHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAnQHB4IEBweCcsIGNvbG9yOiAncmdiKEAsIEAsIEAp
Jyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4JywgbGluZUhlaWdodDog
J0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBweCknLFxuXHRtYXJnaW46ICdAcHggQHB4
IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyOiAnQHB4IEAgcmdi
KEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCknLFxuXHRib3Jk
ZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlclN0eWxlOiAnQCBAIEAgQCcsIGJvcmRl
ckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAs
IEApJyxcblx0ekluZGV4OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0OiAnQCcsIHRleHRJ
bmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0BweCBAcHggQHB4IEBw
eCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJnaW46IHt9LCBwYWRk
aW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJTdHlsZToge30sIGJv
cmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J10uZWFj
aChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2YXIgU2hvcnQgPSBFbGVtZW50LlNob3J0U3R5bGVz
O1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7XG5cdFsnbWFyZ2luJywgJ3BhZGRpbmcnXS5l
YWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlvbjtcblx0
XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdAcHgnO1xuXHR9KTtcblx0dmFyIGJkID0g
J2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNob3J0LmJvcmRlcltiZF0gPSBBbGxbYmRdID0gJ0Bw
eCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBiZHcgPSBiZCArICdXaWR0aCcsIGJkcyA9IGJkICsg
J1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InO1xuXHRTaG9ydFtiZF0gPSB7fTtcblx0U2hvcnQu
Ym9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2JkXVtiZHddID0gQWxsW2Jkd10gPSAnQHB4Jztcblx0
U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7
XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFsbFtiZGNdID0g
J3JnYihALCBALCBAKSc7XG59KTtcblxuaWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZKSBFbGVt
ZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3JvdW5kUG9zaXRpb25Y
OiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyB0
byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVtZW50cyBhbmQg
dGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVk
aXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRw
Oi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNl
bnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS5cbiAgLSBWaWV3cG9y
dCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1
aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xp
Y2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHlsZV1cblxucHJv
dmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG5cdGNoaWxkID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcw
JztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xudmFyIGJyb2tlbk9mZnNldFBhcmVudCA9
IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQpO1xuZWxlbWVudCA9IGNoaWxkID0gbnVs
bDtcblxudmFyIGhlaWdodENvbXBvbmVudHMgPSBbJ2hlaWdodCcsICdwYWRkaW5nVG9wJywgJ3Bh
ZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lkdGgnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcblx0
d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQn
LCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnXTtcblxudmFyIHN2Z0NhbGN1
bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5cblx0dmFyIGdDUyA9IHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7eDogMCwgeTogMH07XG5cblx0aGVpZ2h0Q29tcG9u
ZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnkgKz0gcGFyc2VGbG9hdChnQ1Nb
Y3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRc
dGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0cmV0dXJuIGJvdW5k
cztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJuIHN0eWxlU3Ry
aW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpO1xufTtcblxudmFy
IGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gaXNPZmZzZXQoZWwpIHx8
ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChlbC50YWdOYW1lKTtcbn07XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSl7XG5cdFx0aWYgKGlzQm9k
eSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKHgsIHkpO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExlZnQgPSB4O1xuXHRcdFx0dGhpcy5zY3JvbGxUb3Ag
PSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTaXplOiBmdW5jdGlv
bigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNp
emUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRcdC8vIFRoaXMgaWYgY2xhdXNlIGlzIGJlY2F1c2Ug
SUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvZiBlbGVtZW50cyB3
aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRcdGlmICghd2luZG93LmdldENvbXB1dGVkU3R5bGUp
IHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRIZWlnaHR9O1xuXHRc
dC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIsIGNhbGxpbmcgYHN2
Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4ZWQgdGhlIHN2ZyBz
aXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0aWYgKHRoaXMuZ2V0KCd0YWcnKSA9PSAnc3ZnJykg
cmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhpcyk7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIGJv
dW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRyZXR1cm4ge3g6IGJv
dW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07XG5cdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRy
ZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1cblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5j
dGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdl
dFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsV2lkdGgsIHk6IHRoaXMu
c2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7XG5cdFx0
cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQsIHk6IHRoaXMuc2Nyb2xsVG9wfTtcblx0fSxcblxu
XHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5wYXJlbnRO
b2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNC
b2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5zY3JvbGxMZWZ0O1xu
XHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdGVsZW1lbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxu
XHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9mZnNldFBhcmVudCA/IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJp
bmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR2
YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAn
c3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6IGlzT2Zmc2V0O1xuXHRcdHdoaWxlICgoZWxlbWVu
dCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xuXHRcdFx0aWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVu
dCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSA6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkg
fHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51
bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRc
dH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRnZXRPZmZzZXRzOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlmIChoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3Qpe1xu
XHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcblx0XHRcdFx0
aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQpLFxu
XHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3JvbGwoKSxcblx0XHRcdFx0ZWxlbVNjcm9s
bHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0XHRcdFx0aXNGaXhlZCA9IChzdHlsZVN0cmluZyh0
aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKTtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0
eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy54ICsgKChpc0ZpeGVkKSA/IDAg
OiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGllbnRMZWZ0LFxuXHRcdFx0XHR5OiBib3VuZC50b3Au
dG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC55
KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBlbGVtZW50ID0g
dGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0
dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7
XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDtcblx0XHRcdHBvc2l0aW9u
LnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5cblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNl
dFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0UG9z
aXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtcblx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZz
ZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmdldFNjcm9sbHMoKTtcblx0XHR2YXIgcG9zaXRp
b24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAtIHNjcm9sbC54LFxuXHRcdFx0eTogb2Zmc2V0Lnkg
LSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRpZiAocmVsYXRpdmUgJiYgKHJlbGF0aXZlID0gZG9j
dW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0XHR2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IHJlbGF0
aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRyZXR1cm4ge3g6IHBvc2l0aW9uLnggLSByZWxhdGl2
ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJlbGF0aXZlKSwgeTogcG9zaXRpb24ueSAtIHJlbGF0
aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihyZWxhdGl2ZSl9O1xuXHRcdH1cblx0XHRyZXR1cm4g
cG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xu
XHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5h
dGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihlbGVtZW50KSxcblx0
XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHR2YXIgb2JqID0ge1xuXHRcdFx0bGVmdDog
cG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9zaXRpb24ueSxcblx0XHRcdHdpZHRoOiBzaXplLngs
XG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRcdH07XG5cdFx0b2JqLnJpZ2h0ID0gb2JqLmxlZnQg
KyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRvbSA9IG9iai50b3AgKyBvYmouaGVpZ2h0O1xuXHRc
dHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xu
XHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBvYmoueCAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJn
aW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmoueSAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4t
dG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRc
dHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihvYmopKTtcblx0fVxu
XG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRvd10uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0
Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGllbnRXaWR0aCwgeTogZG9jLmNsaWVudEhlaWdodH07
XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdHZhciB3aW4gPSB0aGlzLmdl
dFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDog
d2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3JvbGxMZWZ0LCB5OiB3aW4ucGFnZVlPZmZzZXQgfHwg
ZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKSxcblx0XHRcdG1pbiA9IHRoaXMuZ2V0
U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdFx0cmV0
dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xsV2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIG1pbi54
KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIG1pbi55
KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHt4OiAw
LCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oKXtcblx0XHR2YXIg
c2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0
b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwgaGVpZ2h0OiBzaXplLnksIHdpZHRoOiBzaXplLnh9
O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRlIG1ldGhvZHNcblxudmFyIHN0eWxlU3RyaW5nID0g
RWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xuXG5mdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50
LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHlsZSkudG9JbnQoKSB8
fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5
bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gbGVm
dEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXIt
bGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7XG5cdHJldHVybiAo
L14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7XG59XG5cbmZ1bmN0aW9u
IGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7XG5cdHZhciBkb2MgPSBlbGVtZW50LmdldERvY3Vt
ZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdD
U1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xufVxuXG59KSgpO1xuXG4vL2FsaWFz
ZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7IC8vY29tcGF0YWJp
bGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS55
O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNp
emUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxIZWln
aHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLnk7XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Ny
b2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxcblxuXHRnZXRMZWZ0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDtcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5u
YW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGJhc2ljIGFuaW1hdGlvbiBsb2dp
YyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3RoZXIgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xh
c3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBGeFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4s
IEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
KlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRvbkNhbmNlbDogbmlsLFxuXHRcdG9uQ29tcGxldGU6
IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAsXG5cdFx0dW5pdDogZmFsc2UsXG5cdFx0ZHVyYXRp
b246IDUwMCxcblx0XHRmcmFtZXM6IG51bGwsXG5cdFx0ZnJhbWVTa2lwOiB0cnVlLFxuXHRcdGxp
bms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7XG5cdFx0dGhpcy5zZXRPcHRp
b25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0cmV0dXJuIC0oTWF0aC5jb3MoTWF0aC5QSSAqIHAp
IC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5cblx0c3RlcDogZnVuY3Rpb24obm93KXtcblx0XHRp
ZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7XG5cdFx0XHR2YXIgZGlmZiA9ICh0aGlzLnRpbWUg
IT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRpZmYgLyB0aGlzLmZy
YW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRpbWUgPSBub3c7XG5cdFx0XHR0aGlzLmZyYW1lICs9
IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSsrO1xuXHRcdH1cblxuXHRc
dGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpe1xuXHRcdFx0dmFyIGRlbHRhID0gdGhpcy50
cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7XG5cdFx0XHR0aGlzLnNldCh0aGlz
LmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUo
dGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0XHR9XG5cdH0s
XG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdHJldHVybiBub3c7XG5cdH0sXG5cblx0Y29t
cHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRyZXR1cm4gRnguY29tcHV0ZShm
cm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICgh
dGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMu
bGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtc
blx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50
cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxc
blxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhmcm9t
LCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZnJvbSA9IGZyb207XG5cdFx0dGhpcy50byA9
IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCkgPyAwIDogLTE7
XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmdldFRy
YW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVzID0gdGhpcy5vcHRpb25zLmZyYW1lcywgZnBzID0g
dGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZHVyYXRpb247XG5cdFx0
dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9uc1tkdXJhdGlvbl0gfHwgZHVyYXRpb24udG9JbnQo
KTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXHRcdHRoaXMuZnJhbWVz
ID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbiAvIHRoaXMuZnJhbWVJbnRlcnZh
bCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRc
dFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHRoaXMuZmly
ZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0cHVzaEluc3RhbmNlLmNhbGwodGhp
cywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdGlmICh0
aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBs
ZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxDaGFpbigpKSB0aGlz
LmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9
XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5zdWJqZWN0ID09PSB0aGlzID8gbnVsbCA6IHRoaXMu
c3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
dWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5c
dFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnY2Fu
Y2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7XG5cdFx0XHR0aGlzLnJlamVjdCh0aGlz
LnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwYXVzZTogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
dWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlc3VtZTogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlv
bnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbdGhpcy5vcHRpb25zLmZwc107XG5cdFx0cmV0
dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTtcblx0fSxcblxuXHRpc1BhdXNlZDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1lcykgJiYgIXRoaXMu
aXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5cbkZ4LmNvbXB1dGUgPSBmdW5jdGlvbihmcm9tLCB0
bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207XG59O1xuXG5G
eC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9
O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZhciBpbnN0YW5jZXMgPSB7fSwgdGltZXJzID0ge307
XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtcblx0dmFyIG5vdyA9IERhdGUubm93KCk7XG5cdGZv
ciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGluc3RhbmNlID0gdGhpc1tp
XTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTtcblx0fVxufTtcblxudmFy
IHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zw
c10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10pO1xuXHRsaXN0LnB1c2godGhpcyk7XG5cdGlmICgh
dGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0gbG9vcC5wZXJpb2RpY2FsKE1hdGgucm91bmQoMTAw
MCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFyIHB1bGxJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7
XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc107XG5cdGlmIChsaXN0KXtcblx0XHRsaXN0LmVy
YXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5sZW5ndGggJiYgdGltZXJzW2Zwc10pe1xuXHRcdFx0
ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRcdFx0dGltZXJzW2Zwc10gPSBjbGVhckludGVydmFs
KHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ1NTIGFuaW1hdGlvbiBsb2dp
Yy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4LkVsZW1lbnRzLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtGeCwgRWxlbWVudC5TdHlsZV1cblxucHJv
dmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5cbkZ4LkNTUyA9IG5ldyBDbGFzcyh7XG5cblx0RXh0
ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVjdFxuXG5cdHBy
ZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpe1xuXHRcdHZhbHVlcyA9
IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0XHR2YXIgZnJvbSA9IHZhbHVlc1swXSwgdG8gPSB2
YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51bGwpe1xuXHRcdFx0dG8gPSBmcm9tO1xuXHRcdFx0
ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0dmFyIHVuaXQgPSB0aGlz
Lm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29t
L3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4LmpzI0wyOTlcblx0XHRcdGlmICh1bml0ICYmIGZy
b20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmluZycgJiYgZnJvbS5zbGljZSgtdW5pdC5sZW5ndGgp
ICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9tKSAhPSAwKXtcblx0XHRcdFx0ZWxlbWVudC5zZXRT
dHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxlbWVudC5n
ZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gSUUgYW5kIE9wZXJhIHN1cHBv
cnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhcblx0XHRcdFx0aWYgKCEoL3B4JC8udGVzdCh2YWx1
ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbKCdwaXhlbC0nICsgcHJvcGVy
dHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRc
dFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJpay5lYWUubmV0L2Fy
Y2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxXG5cdFx0XHRcdFx0XHR2
YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUu
bGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZS5waXhl
bExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0O1xuXHRcdFx0XHRc
dH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9tID0gKHRvIHx8IDEpIC8gKHBhcnNlRmxvYXQodmFs
dWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJvbSkgfHwgMCk7XG5cdFx0XHRcdGVsZW1lbnQuc2V0
U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9O1xuXHR9LFxuXG5c
dC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheVxuXG5cdHBhcnNlOiBmdW5jdGlvbih2YWx1
ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5jb252ZXJ0KHZhbHVlKSgpO1xuXHRcdHZhbHVlID0g
KHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDogQXJyYXkuY29u
dmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2YWwpe1xuXHRcdFx0
dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdE9iamVj
dC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpe1xuXHRcdFx0XHRpZiAoZm91
bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBhcnNlZCA9IHBhcnNlci5wYXJzZSh2YWwpO1xuXHRc
dFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBhcnNlZCwg
cGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7XG5cdFx0XHRmb3VuZCA9IGZvdW5kIHx8IHt2YWx1
ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307XG5cdFx0XHRyZXR1cm4gZm91
bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9jb21wdXRlcyBieSBhIGZyb20gYW5kIHRvIHByZXBh
cmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBhcnNlcnMuXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24o
ZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgY29tcHV0ZWQgPSBbXTtcblx0XHQoTWF0aC5taW4o
ZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpe1xuXHRcdFx0Y29tcHV0
ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9b
aV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pO1xuXHRcdH0pO1xuXHRc
dGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdmeDpjc3M6dmFsdWUnKTtcblx0
XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5cblx0Ly9zZXJ2ZXMgdGhlIHZhbHVlIGFzIHNldHRh
YmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRpZiAodHlwZU9mKHZh
bHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcblx0XHR2
YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7XG5cdFx0XHRy
ZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5p
dCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXR1cm5lZDtcblx0fSxcblxuXHQvL3JlbmRlcnMg
dGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5cblx0cmVuZGVyOiBmdW5jdGlvbihlbGVtZW50LCBw
cm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRo
aXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0fSxcblxuXHQvL3NlYXJjaGVzIGluc2lkZSB0aGUg
cGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVzIGZvciBhIHNlbGVjdG9yXG5cblx0c2VhcmNoOiBm
dW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYgKEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0pIHJldHVy
biBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xuXHRcdHZhciB0byA9IHt9LCBzZWxlY3RvclRlc3Qg
PSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9yLmVzY2FwZVJlZ0V4cCgpICsgJyQnKTtcblxuXHRc
dHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRBcnJheS5lYWNoKHJ1
bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRcdFx0aWYgKHJ1bGUubWVkaWEpe1xuXHRcdFx0XHRc
dHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpO1xuXHRcdFx0XHRcdHJl
dHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGUpIHJldHVybjtcblx0XHRc
dFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxlLnNlbGVjdG9yVGV4dCkgPyBydWxlLnNlbGVjdG9y
VGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0aW9uKG0pe1xuXHRcdFx0XHRcdHJldHVybiBtLnRv
TG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDogbnVsbDtcblx0XHRcdFx0aWYgKCFzZWxlY3RvclRl
eHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNlbGVjdG9yVGV4dCkpIHJldHVybjtcblx0XHRcdFx0
T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBzdHlsZSl7XG5cdFx0
XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0U3R5bGVzW3N0eWxl
XSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTtc
blx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9ecmdiLykudGVzdCh2YWx1ZSkpID8gdmFsdWUucmdi
VG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRB
cnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVldCl7XG5cdFx0XHR2
YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0XHRpZiAoaHJlZiAmJiBocmVmLmluZGV4T2YoJzov
LycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgPT0gLTEpIHJldHVybjtc
blx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuXHRcdFx0
c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gRnguQ1NTLkNhY2hlW3Nl
bGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xuXG5GeC5DU1MuQ2FjaGUgPSB7fTtcblxuRnguQ1NT
LlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtcblx0XHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUu
aGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXFxk
KyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykpKSA/IFt2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVl
WzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRl
bHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7XG5cdFx0XHRc
dHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0sIGRlbHRhKSk7XG5c
dFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1
cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0fVxuXHR9LFxuXG5cdE51bWJlcjoge1xuXHRcdHBh
cnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1dGU6IEZ4LmNvbXB1dGUsXG5cdFx0c2VydmU6IGZ1
bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRcdHJldHVybiAodW5pdCkgPyB2YWx1ZSArIHVuaXQg
OiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0U3RyaW5nOiB7XG5cdFx0cGFyc2U6IEZ1bmN0aW9u
LmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKHplcm8sIG9uZSl7XG5cdFx0
XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0
cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5cbn07XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4
Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0byB0cmFu
c2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcg
YW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBG
eC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1vcnBoID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRz
OiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7XG5c
dFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5c
dFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xu
XHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJpbmcnKSBub3cgPSB0aGlzLnNlYXJjaChub3cpO1xu
XHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHAsIG5vd1tw
XSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbXB1
dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIG5vdyA9IHt9O1xuXHRcdGZv
ciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0gdGhpcy5wYXJlbnQoZnJvbVtwXSwgdG9bcF0sIGRl
bHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0
aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydGllcykpIHJldHVybiB0aGlzO1xuXHRc
dGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAnc3RyaW5nJykgcHJvcGVydGllcyA9IHRoaXMuc2Vh
cmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBmcm9tID0ge30sIHRvID0ge307XG5cdFx0Zm9yICh2
YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUodGhp
cy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3BdKTtcblx0XHRcdGZyb21bcF0gPSBwYXJzZWQuZnJv
bTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRvO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJl
bnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubW9ycGggPSB7
XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5jYW5j
ZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9ycGggPSB0aGlzLnJldHJpZXZlKCdtb3JwaCcpO1xu
XHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9ycGggPSBuZXcgRnguTW9ycGgodGhpcywge2xpbms6
ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTtcblx0XHR9XG5c
dFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRt
b3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLnN0YXJ0KHByb3Bz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5U
cmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2YgYWR2YW5jZWQgdHJh
bnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nlcy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWFzaW5nIEVxdWF0aW9ucyBi
eSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2luZy8+LCBt
b2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29scy5cblxucmVxdWly
ZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFuc2l0aW9uc1xuXG4uLi5cbiovXG5cbkZ4LmltcGxl
bWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHJhbnMgPSB0
aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJbk91dDtc
blx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdzdHJpbmcnKXtcblx0XHRcdHZhciBkYXRhID0gdHJh
bnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5zID0gRnguVHJhbnNpdGlvbnM7XG5cdFx0XHR0cmFu
cyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5zW2RhdGFbMF0uY2FwaXRhbGl6ZSgpXTtcblx0XHRc
dGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5zWydlYXNlJyArIGRhdGFbMV0uY2FwaXRhbGl6ZSgp
ICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0YWxpemUoKSA6ICcnKV07XG5cdFx0fVxuXHRcdHJl
dHVybiB0cmFucztcblx0fVxuXG59KTtcblxuRnguVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5z
aXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9IEFycmF5LmNvbnZlcnQocGFyYW1zKTtcblx0dmFy
IGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHRyYW5zaXRpb24ocG9zLCBwYXJh
bXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHtcblx0XHRlYXNlSW46
IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIDEgLSB0
cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7XG5cdFx0fSxcblx0XHRlYXNlSW5PdXQ6IGZ1bmN0
aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0aW9uKDIgKiBwb3Ms
IHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFyYW1zKSkpIC8gMjtc
blx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMgPSB7XG5cblx0bGluZWFyOiBmdW5j
dGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVybztcblx0fVxuXG59O1xuXG5cblxuRnguVHJhbnNp
dGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpe1xuXHRmb3IgKHZhciB0cmFuc2l0
aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5U
cmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTtcbn07XG5cbkZ4LlRyYW5zaXRpb25z
LmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3co
cCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxuXG5cdEV4cG86IGZ1bmN0aW9uKHApe1xuXHRcdHJl
dHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAxKSk7XG5cdH0sXG5cblx0Q2lyYzogZnVuY3Rpb24o
cCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xuXHR9LFxuXG5cdFNp
bmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MocCAqIE1hdGguUEkgLyAy
KTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlvbihwLCB4KXtcblx0XHR4ID0geCAmJiB4WzBdIHx8
IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEpICogcCAtIHgpO1xu
XHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24ocCl7XG5cdFx0dmFyIHZhbHVlO1xuXHRcdGZvciAo
dmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89IDIpe1xuXHRcdFx0aWYgKHAgPj0gKDcg
LSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZhbHVlID0gYiAqIGIgLSBNYXRoLnBvdygoMTEgLSA2
ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxuXHRFbGFzdGljOiBmdW5jdGlvbihwLCB4KXtcblx0
XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAtLXApICogTWF0aC5jb3MoMjAgKiBwICogTWF0aC5Q
SSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtcblx0fVxuXG59KTtcblxuWydRdWFkJywgJ0N1Ymlj
JywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBpKXtcblx0Rngu
VHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihwKXtc
blx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpO1xuXHR9KTtcbn0pO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZSwgZWZmZWN0
IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVudC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IFtG
eC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVtZW50LmhpZ2hsaWdodF1cblxuLi4uXG4qL1xuXG5G
eC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxp
emU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMu
c3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMp
O1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7XG5cdFx0aWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRub3cgPSBwcm9wZXJ0eTtcblx0XHRcdHByb3BlcnR5
ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7XG5cdFx0fVxuXHRcdHRo
aXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRpb25zLnVuaXQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1
cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTtcblx0XHR0
aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Muc2hpZnQoKTtcblx0
XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhpcy5wcm9wZXJ0eSwg
YXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBwYXJzZWQudG8pO1xu
XHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7XG5cblx0c2V0OiBmdW5j
dGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwoKS5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpO1xuXHRcdGlmICghdHdlZW4p
e1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5c
dFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR3ZWVu
O1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHR0d2VlbjogZnVuY3Rpb24o
cHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5zdGFydChwcm9wZXJ0
eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZhZGU6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdldCgndHdlZW4nKSwgbWV0aG9kLCBhcmdzID0gWydv
cGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyksIHRvZ2dsZTtcblx0XHRpZiAoYXJnc1sxXSA9PSBu
dWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5cdFx0c3dpdGNoIChhcmdzWzFdKXtcblx0XHRcdGNh
c2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNl
ICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2Ug
J3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywg
dGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpO1xuXHRcdFx0XHRtZXRob2QgPSAnc3RhcnQn
O1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/IDAgOiAxO1xuXHRcdFx0XHR0aGlzLnN0b3JlKCdm
YWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRcdHRvZ2dsZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFr
O1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0gJ3N0YXJ0Jztcblx0XHR9XG5cdFx0aWYgKCF0b2dn
bGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTtcblx0XHRmYWRlW21ldGhvZF0uYXBwbHko
ZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG5cdFx0
aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5Jywg
dG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtcblx0XHR9IGVsc2UgaWYgKHRvICE9IDAp
e1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxlbmd0aCl7XG5cdFx0XHRcdGZhZGUuY2hhaW4oZnVu
Y3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAn
dmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHRcdH0pO1xuXHRc
dFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxl
Jyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtc
blx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpKSByZXR1cm47XG5c
dFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblx0
XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVuZCl7XG5cdFx0aWYg
KCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJywg
dGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpKTtcblx0XHRcdGVuZCA9IChlbmQgPT0g
J3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBlbmQ7XG5cdFx0fVxuXHRcdHZhciB0d2VlbiA9IHRo
aXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVuLnN0YXJ0KCdiYWNrZ3JvdW5kLWNvbG9yJywgc3Rh
cnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFs
JykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWluKCk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0XG5cbmRl
c2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhU
VFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtP
YmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlLCBC
cm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVzdFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sXG5cdHByb2dyZXNzU3VwcG9ydCA9ICgnb25wcm9n
cmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVzdCk7XG5cbnZhciBSZXF1ZXN0ID0gdGhpcy5SZXF1
ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9u
cywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHsvKlxuXHRcdG9uUmVxdWVzdDogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRc
dG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Db21wbGV0ZTogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sXG5cdFx0b25TdWNjZXNzOiBm
dW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKXt9LFxuXHRcdG9uRmFpbHVyZTogZnVu
Y3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0aW9uOiBmdW5jdGlvbihoZWFkZXJOYW1lLCB2YWx1
ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSxcblx0XHR1c2VyOiAnJyxcblx0XHRw
YXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqL1xuXHRcdHVybDogJycs
XG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0J1gtUmVxdWVzdGVkLVdpdGgn
OiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0J0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRl
eHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH0sXG5cdFx0YXN5
bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxzZSxcblx0XHRtZXRob2Q6ICdwb3N0Jyxcblx0XHRs
aW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nlc3M6IG51bGwsXG5cdFx0ZW11bGF0aW9uOiB0cnVl
LFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5cdFx0ZW5jb2Rpbmc6ICd1dGYtOCcsXG5cdFx0ZXZh
bFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxSZXNwb25zZTogZmFsc2UsXG5cdFx0dGltZW91dDog
MCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMu
c2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVh
ZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpe1xuXHRcdHZhciB4aHIg
PSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAhdGhpcy5ydW5uaW5n
KSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0dXMgPSAw
O1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBzdGF0dXMgPSB4
aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0dXMgPSAoc3RhdHVzID09IDEyMjMpID8gMjA0IDog
c3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9u
bG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1l
b3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXG5cdFx0
dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5yZXNwb25zZVRleHQgfHwgJycsIHhtbDog
dGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNh
bGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRcdFx0dGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2Uu
dGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuZmFpbHVyZSgp
O1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc3RhdHVzID0gdGhp
cy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCk7XG5c
dH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAhIXRoaXMucnVubmlu
Zztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0czogZnVuY3Rpb24odGV4dCl7XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwgKC8oZWNtYXxqYXZhKXNjcmlwdC8pLnRlc3QodGhp
cy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpKSkgcmV0dXJuIEJyb3dzZXIuZXhlYyh0ZXh0KTtc
blx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKTtc
blx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0LCB4bWwpe1xuXHRcdHRoaXMub25TdWNj
ZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4dCksIHhtbCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0
ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9LFxuXG5cdG9uU3VjY2VzczogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVFdmVudCgnc3Vj
Y2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7XG5cdH0sXG5cblx0ZmFpbHVyZTogZnVuY3Rp
b24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdm
YWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdG9uRmFpbHVyZTogZnVuY3Rpb24o
KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQoJ2ZhaWx1cmUnLCB0
aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCl7XG5cdFx0dGhp
cy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHRw
cm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdwcm9ncmVzcycs
IFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHR0aW1lb3V0OiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0JywgdGhpcy54aHIpO1xuXHRcdHRoaXMucmVqZWN0KHty
ZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdHNldEhlYWRlcjog
ZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHRoaXMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSl7XG5c
dFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlz
Lnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHR9LFxu
XG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdHJ1
ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6
IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNo
YWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHNlbmQ6IGZ1bmN0aW9uKG9wdGlvbnMp
e1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7XG5cblx0XHR0aGlz
Lm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5vcHRpb25zLmlzU3VjY2VzcyB8fCB0aGlzLmlzU3Vj
Y2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0dmFyIHR5cGUgPSB0eXBlT2Yo
b3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnZWxlbWVudCcp
IG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307XG5cblx0XHR2YXIgb2xkID0gdGhpcy5vcHRpb25z
O1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQu
dXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTtcblx0XHR2YXIgZGF0YSA9IG9wdGlv
bnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlvbnMudXJsKSwgbWV0aG9kID0gb3B0aW9ucy5tZXRo
b2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3aXRjaCAodHlwZU9mKGRhdGEpKXtcblx0XHRcdGNh
c2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVyeVN0cmluZygpOyBi
cmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRhID0gT2JqZWN0LnRv
UXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mb3JtYXQp
e1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3JtYXQ9JyArIHRoaXMub3B0aW9ucy5mb3JtYXQ7XG5c
dFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0ICsgJyYnICsgZGF0YSA6IGZvcm1hdDtcblx0XHR9
XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAncG9zdCddLmNv
bnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9k
O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21ldGhvZDtc
blx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLnVy
bEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFy
IGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5lbmNvZGluZykgPyAnOyBjaGFyc2V0PScgKyB0aGlz
Lm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0XHRcdHRoaXMuaGVhZGVyc1snQ29udGVudC10eXBl
J10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyArIGVuY29kaW5nO1xuXHRc
dH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTtcblxu
XHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwubGFzdEluZGV4T2YoJy8nKTtcblx0XHRpZiAodHJp
bVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9mKCcjJykpID4gLTEp
IHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9uKTtcblxuXHRcdGlmICh0aGlzLm9wdGlv
bnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDog
Jz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xuXG5cdFx0aWYgKGRhdGEgJiYgKG1ldGhvZCA9PSAn
Z2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScpKXtcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2Yo
Jz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRhdGE7XG5cdFx0XHRkYXRhID0gbnVsbDtcblx0XHR9
XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCl7XG5c
dFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlzLmxvYWRzdGFydC5iaW5kKHRoaXMpO1xuXHRcdFx0
eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7XG5cdFx0fVxuXG5cdFx0
eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCwgdGhpcy5vcHRpb25zLmFzeW5jLCB0
aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtcblx0XHRpZiAoKHRoaXMu
b3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYmICd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikgeGhy
LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG5cblx0XHRPYmplY3QuZWFjaCh0aGlzLmhl
YWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0eGhyLnNl
dFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0
dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7XG5cdFx0XHRcdHRoaXMu
cmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24nLCB4aHI6IHhociwgZXhjZXB0aW9uOiBlfSk7XG5c
dFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkg
IT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUoe3JlYXNvbjogJ3NlbmQn
fSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7XG5cdFx0eGhyLnNlbmQo
ZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25TdGF0ZUNoYW5nZSgp
O1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aW1lb3V0KSB0aGlzLnRpbWVyID0gdGhpcy50
aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50aW1lb3V0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcp
IHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHZhciB4aHIgPSB0
aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRj
bGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9
XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1
cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0dGhp
cy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNl
bCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6IHhocn0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuWydnZXQnLCAn
cG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VUJywgJ1BPU1QnLCAn
UFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlvbihtZXRob2Qpe1xu
XHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIgb2JqZWN0ID0ge1xu
XHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9O1xuXHRcdGlmIChkYXRhICE9IG51bGwpIG9iamVj
dC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7XG5cdH07XG59KTtc
blxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zZW5k
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLmdl
dCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNlbmQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNlbmQgPSB0
aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0aWYgKCFzZW5kKXtcblx0XHRcdHNlbmQgPSBuZXcg
UmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCBtZXRob2Q6IHRo
aXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2FjdGlvbicpXG5cdFx0
XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTtcblx0XHR9XG5cdFx0cmV0dXJu
IHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNlbmQ6IGZ1bmN0
aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7XG5cdFx0c2VuZGVy
LnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJsIHx8IHNlbmRlci5vcHRpb25zLnVybH0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJl
cXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFz
cyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIVE1MIHJlc3Bv
bnNlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVu
dCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJlcXVlc3QuSFRNTFxuXG4uLi5cbiovXG5cblJlcXVl
c3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25z
OiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0XHRhcHBlbmQ6IGZhbHNlLFxuXHRcdGV2YWxTY3Jp
cHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFsc2UsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0QWNj
ZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fVxu
XHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBvcHRpb25zID0gdGhp
cy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRyZXNwb25zZS5odG1s
ID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2NyaXB0KXtcblx0XHRcdHJlc3BvbnNlLmph
dmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7XG5cblx0XHR2YXIgbWF0Y2ggPSByZXNwb25zZS5o
dG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9pKTtcblx0XHRpZiAo
bWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTtcblx0XHR2YXIgdGVtcCA9IG5ldyBFbGVt
ZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblxuXHRcdHJlc3BvbnNlLnRy
ZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0cmVzcG9uc2UuZWxlbWVudHMgPSB0ZW1wLmdldEVs
ZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7XG5cblx0XHRpZiAob3B0aW9ucy5maWx0ZXIp
IHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50cztcblx0XHRpZiAob3B0aW9ucy51cGRh
dGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRvY3VtZW50LmlkKG9wdGlvbnMudXBkYXRlKS5lbXB0
eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB1cGRhdGUuYWRvcHQocmVzcG9uc2UuZWxl
bWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5c
dFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7XG5cdFx0XHR2YXIgYXBwZW5kID0gZG9jdW1l
bnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25z
ZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVuZCk7XG5cdFx0XHRlbHNlIGFwcGVuZC5h
ZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5ldmFsU2Ny
aXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXG5cdFx0dGhpcy5vblN1
Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0bWwsIHJl
c3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dHJlZTogcmVzcG9uc2UudHJl
ZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1lbnRzLCBodG1sOiByZXNwb25zZS5odG1sLCBqYXZh
c2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0fSk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJv
cGVydGllcy5sb2FkID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIGxv
YWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpO1xuXHRcdGxvYWQuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCdsb2FkJyk7XG5cdFx0aWYgKCFsb2FkKXtcblx0XHRc
dGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtkYXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgdXBk
YXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdsb2FkJywgbG9h
ZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2FkO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZ2V0KCdsb2FkJykuc2VuZChB
cnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDogVHlwZS5pc1N0
cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1l
OiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5TZWVBbHNvOiA8aHR0cDovL3d3dy5qc29uLm9yZy8+
XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl1cblxucHJvdmlk
ZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRo
aXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBzcGVjaWFsID0geydcXGIn
OiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0JywgJ1xcbic6ICdcXFxcbicsICdcXGYnOiAnXFxcXGYn
LCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdcXFxcXCInLCAnXFxcXCc6ICdcXFxcXFxcXCd9O1xu
XG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXtcblx0cmV0dXJuIHNwZWNpYWxbY2hyXSB8fCAn
XFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2Uo
LTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHN0cmluZyA9
IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0p
L2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXCJbXlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxm
YWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/L2csICddJyku
XG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csICcnKTtcblxuXHRy
ZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50ZXN0KHN0cmluZyk7XG59O1xuXG5KU09OLmVuY29k
ZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rpb24ob2JqKXtcblx0cmV0dXJuIEpTT04uc3RyaW5n
aWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2JqKXtcblx0aWYgKG9iaiAmJiBvYmoudG9KU09OKSBv
YmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dpdGNoICh0eXBlT2Yob2JqKSl7XG5cdFx0Y2FzZSAn
c3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCInICsgb2JqLnJlcGxhY2UoL1tcXHgwMC1cXHgxZlxc
XFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5cdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0cmV0dXJu
ICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7XG5cdFx0Y2FzZSAnb2Jq
ZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2YXIgc3RyaW5nID0gW107XG5cdFx0XHRPYmplY3Qu
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0XHR2YXIganNvbiA9IEpTT04u
ZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYgKGpzb24pIHN0cmluZy5wdXNoKEpTT04uZW5jb2Rl
KGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICd7JyArIHN0cmlu
ZyArICd9Jztcblx0XHRjYXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzogcmV0dXJuICcnICsg
b2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1cm4gJ251bGwnO1xuXHR9XG5cblx0cmV0dXJuIG51
bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRydWU7XG5cblxuSlNPTi5kZWNvZGUgPSBmdW5jdGlv
bihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJpbmcpICE9ICdz
dHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRpZiAoc2VjdXJlID09IG51bGwpIHNlY3VyZSA9IEpT
T04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtcblx0XHRpZiAoSlNPTi5wYXJzZSkgcmV0dXJuIEpT
T04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAoIUpTT04udmFsaWRhdGUoc3RyaW5nKSkgdGhyb3cg
bmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0eSBpcyBl
bmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4nKTtcblx0fVxuXG5cdHJldHVybiBl
dmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6
IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBD
bGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIEpT
T04gZGF0YS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbUmVx
dWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJlcXVlc3QuSlNPTlxuXG4uLi5cbiovXG5cblJlcXVl
c3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25z
OiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqL1xuXHRcdHNlY3Vy
ZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRo
aXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9iamVjdC5hcHBlbmQodGhpcy5oZWFkZXJzLCB7XG5c
dFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0J1gtUmVxdWVzdCc6ICdK
U09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZh
ciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRqc29uID0gdGhpcy5yZXNwb25zZS5qc29uID0gSlNP
Ti5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25zLnNlY3VyZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3Ip
e1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7XG5cdFx0XHRy
ZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29uID09IG51bGwpe1xuXHRcdFx0dGhpcy5mYWlsdXJl
KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub25TdWNjZXNzKGpzb24sIHRleHQpO1xuXHRc
dFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7XG5cdFx0fVxuXHR9XG5c
bn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENvb2tpZVxuXG5kZXNjcmlwdGlvbjogQ2xhc3MgZm9y
IGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29raWVzLlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBCYXNlZCBvbiB0aGUgZnVu
Y3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3JnKS5cblxucmVx
dWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxuXG5wcm92aWRlczogQ29va2llXG5cbi4uLlxuKi9c
blxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogT3B0aW9ucyxcblxu
XHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8nLFxuXHRcdGRvbWFpbjogZmFsc2UsXG5cdFx0ZHVy
YXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTogZmFsc2UsXG5cdFx0ZG9jdW1lbnQ6IGRvY3VtZW50
LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRodHRwT25seTogZmFsc2Vcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRcdHRoaXMua2V5ID0ga2V5O1xuXHRc
dHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHR3cml0ZTogZnVuY3Rpb24odmFs
dWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW5jb2RlKSB2YWx1ZSA9IGVuY29kZVVSSUNvbXBv
bmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kb21haW4pIHZhbHVlICs9ICc7IGRv
bWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFpbjtcblx0XHRpZiAodGhpcy5vcHRpb25zLnBhdGgp
IHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoO1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0ZGF0
ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogMjQgKiA2
MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1ZSArPSAnOyBleHBpcmVzPScgKyBkYXRlLnRvR01U
U3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAn
OyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaHR0cE9ubHkpIHZhbHVlICs9ICc7IEh0
dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0gdGhpcy5rZXkgKyAn
PScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFkOiBmdW5jdGlvbigp
e1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUubWF0Y2goJyg/
Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtdKiknKTtcblx0
XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVsxXSkgOiBudWxsO1xu
XHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0bmV3IENvb2tpZSh0aGlzLmtleSwg
T2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9KSkud3JpdGUoJycp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5Db29raWUud3JpdGUgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25z
KS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29raWUucmVhZCA9IGZ1bmN0aW9uKGtleSl7XG5cdHJl
dHVybiBuZXcgQ29va2llKGtleSkucmVhZCgpO1xufTtcblxuQ29va2llLmRpc3Bvc2UgPSBmdW5j
dGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLmRp
c3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxubmFtZTogRE9NUmVhZHlcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRd
XG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XVxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bih3aW5kb3csIGRvY3VtZW50KXtcblxudmFyIHJlYWR5LFxuXHRsb2FkZWQsXG5cdGNoZWNrcyA9
IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1lcixcblx0dGVzdEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIGRvbXJlYWR5ID0gZnVuY3Rpb24oKXtcblx0Y2xl
YXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFyZWFkeSl7XG5cdFx0QnJvd3Nlci5sb2FkZWQgPSBy
ZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2Fk
ZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHRcdHdpbmRvdy5maXJlRXZl
bnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8gY2xlYW51cCBzY29wZSB2YXJzXG5cdGRvY3VtZW50
ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsO1xufTtcblxudmFyIGNoZWNrID0gZnVuY3Rp
b24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlmIChjaGVja3NbaV0o
KSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7
XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEwKTtcbn07XG5cbmRv
Y3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpO1xuXG4vKjxs
dElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmluaSBodHRwOi8vamF2
YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkL1xuLy8gdGVzdEVsZW1lbnQuZG9TY3Jv
bGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBpbiB0aGUgdG9wIHdp
bmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlvbigpe1xuXHR0cnkge1xuXHRcdHRlc3RF
bGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpe31cblx0
cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRvU2Nyb2xsIHdvcmtzIGFscmVhZHksIGl0IGNhbid0
IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJlYWR5XG4vLyAgIGUuZy4gaW4gYW4gaWZyYW1lXG5p
ZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYgIWRvU2Nyb2xsV29ya3MoKSl7XG5cdGNoZWNrcy5w
dXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91bGRQb2xsID0gdHJ1ZTtcbn1cbi8qPC9sdElFOD4q
L1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24oKXtcblx0
dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcblx0cmV0dXJuIChzdGF0ZSA9PSAnbG9h
ZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUnKTtcbn0pO1xuXG5pZiAoJ29ucmVhZHlzdGF0ZWNo
YW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50LmFkZExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdl
JywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xsID0gdHJ1ZTtcblxuaWYgKHNob3VsZFBvbGwpIHBv
bGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9tcmVhZHkgPSB7XG5cdG9uQWRkOiBmdW5jdGlvbihm
bil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxsKHRoaXMpO1xuXHR9XG59O1xuXG4vLyBNYWtlIHN1
cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZFxuRWxlbWVudC5FdmVudHMubG9hZCA9
IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChsb2Fk
ZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNhbGwodGhpcyk7XG5cdH0sXG5cdGNvbmRpdGlvbjog
ZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9PSB3aW5kb3cpe1xuXHRcdFx0ZG9tcmVhZHkoKTtc
blx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2FkO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY3VzdG9tIGxvYWQgZXZlbnRc
bndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9uKCl7XG5cdGxvYWRlZCA9IHRydWU7XG59
KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7XG4iCiAKIC8qKiovIH0pLAogLyogNDA2ICovCkBA
IC0xMTM2NDEsMTMgKzExMzY0MSwxMyBAQCBtb2R1bGUuZXhwb3J0cyA9ICIvKmpzaGludCBxdW90
bWFyazogZmFsCiAvKiA0MTQgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsK
IAotbW9kdWxlLmV4cG9ydHMgPSAiLy8gbGlicy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9WSURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElN
UExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNo
ZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqICovXG5cbi8vIFR5cGluZyBmb3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9u
IDEuMTAueCAvIDIuMC54XG4vLyBQcm9qZWN0OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmlu
aXRpb25zIGJ5OiBCb3JpcyBZYW5rb3YgPGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+
LCBDaHJpc3RpYW4gSG9mZm1laXN0ZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+
LCBTdGV2ZSBGZW50b24sIERpdWxsZWkgR29tZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVp
PiwgVGFzcyBJbGlvcG91bG9zIDxodHRwczovL2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3
ZWFyaW5nZW4sIFNlYW4gSGlsbCA8aHR0cHM6Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdv
b3NzZW5zIDxodHRwczovL2dpdGh1Yi5jb20vR3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6
Ly9naXRodWIuY29tL2tzdW1tZXJsaW4+LCBCYXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1
Yi5jb20vYmFzYXJhdD4sIE5pY2hvbGFzIFdvbHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253
b2x2ZXJzb24+LCBEZXJlayBDaWNlcm9uZSA8aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJv
bmU+LCBBbmRyZXcgR2FzcGFyIDxodHRwczovL2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFt
ZXMgSGFycmlzb24gRmlzaGVyIDxodHRwczovL2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vp
a2ljaGkgS29uZG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2tt
YW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxo
dHRwczovL2dpdGh1Yi5jb20vczA5MzI5ND4sIEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5j
b20vSm9zaFN0cm9ibD4sIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVp
bGx5Lz5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVm
aW5pdGVseVR5cGVkXG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRo
YXQgd2lsbCBjb25maWd1cmUgdGhlIEFKQVggcmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlB
amF4U2V0dGluZ3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0
aGUgcmVxdWVzdCBoZWFkZXIgdGhhdCB0ZWxscyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNw
b25zZSBpdCB3aWxsIGFjY2VwdCBpbiByZXR1cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVl
ZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAk
LmFqYXhTZXR1cCgpIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8q
KlxuICAgICAqIEJ5IGRlZmF1bHQsIGFsbCByZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNs
eSAoaS5lLiB0aGlzIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5j
aHJvbm91cyByZXF1ZXN0cywgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4g
cmVxdWVzdHMgYW5kIGRhdGFUeXBlOiBcImpzb25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQg
c3luY2hyb25vdXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5
IHRlbXBvcmFyaWx5IGxvY2sgdGhlIGJyb3dzZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGls
ZSB0aGUgcmVxdWVzdCBpcyBhY3RpdmUuIEFzIG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5
bmM6IGZhbHNlIHdpdGgganFYSFIgKCQuRGVmZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0
IHVzZSB0aGUgc3VjY2Vzcy9lcnJvci9jb21wbGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQg
b2YgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMg
anFYSFIuZG9uZSgpIG9yIHRoZSBkZXByZWNhdGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9c
biAgICBhc3luYz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpR
dWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNl
IHRoaXMgdG8gc2V0IGN1c3RvbSBoZWFkZXJzLCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mg
b2JqZWN0cyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBS
ZXR1cm5pbmcgZmFsc2UgaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhl
IHJlcXVlc3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJl
IGNhbGxlZCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAg
YmVmb3JlU2VuZD8gKGpxWEhSOiBKUXVlcnlYSFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGlu
Z3MpOiBhbnk7XG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNl
IHJlcXVlc3RlZCBwYWdlcyBub3QgdG8gYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBT
ZXR0aW5nIGNhY2hlIHRvIGZhbHNlIHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQg
YW5kIEdFVCByZXF1ZXN0cy4gSXQgd29ya3MgYnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwi
IHRvIHRoZSBHRVQgcGFyYW1ldGVycy4gVGhlIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBv
dGhlciB0eXBlcyBvZiByZXF1ZXN0cywgZXhjZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRl
IHRvIGEgVVJMIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAg
ICovXG4gICAgY2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVy
cm9yIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQpLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdv
IGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBv
YmplY3QgYW5kIGEgc3RyaW5nIGNhdGVnb3JpemluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0
IChcInN1Y2Nlc3NcIiwgXCJub3Rtb2RpZmllZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBc
ImFib3J0XCIsIG9yIFwicGFyc2VyZXJyb3JcIikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21w
bGV0ZSBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0
aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAg
Ki9cbiAgICBjb21wbGV0ZT8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6
IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVz
c2lvbiBwYWlycyB0aGF0IGRldGVybWluZSBob3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3Bv
bnNlLCBnaXZlbiBpdHMgY29udGVudCB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAq
L1xuICAgIGNvbnRlbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRp
bmcgdG8galF1ZXJ5LmFqYXggc291cmNlIGNvZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxs
b3dzIGNvbnRlbnRUeXBlIHRvIHNldCB0byBcImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1
Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAg
ICAgKiBXaGVuIHNlbmRpbmcgZGF0YSB0byB0aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5
cGUuIERlZmF1bHQgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJz
ZXQ9VVRGLThcIiwgd2hpY2ggaXMgZmluZSBmb3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0
bHkgcGFzcyBpbiBhIGNvbnRlbnQtdHlwZSB0byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMg
c2VudCB0byB0aGUgc2VydmVyIChldmVuIGlmIG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1M
SHR0cFJlcXVlc3Qgc3BlY2lmaWNhdGlvbiBkaWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFs
d2F5cyBVVEYtODsgc3BlY2lmeWluZyBhbm90aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhl
IGJyb3dzZXIgdG8gY2hhbmdlIHRoZSBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlw
ZT86IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNv
bnRleHQgb2YgYWxsIEFqYXgtcmVsYXRlZCBjYWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250
ZXh0IGlzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBp
biB0aGUgY2FsbCAoJC5hamF4U2V0dGluZ3MgbWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3Nl
ZCB0byAkLmFqYXgpLlxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAg
ICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4g
RWFjaCBjb252ZXJ0ZXIncyB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJh
bnNmb3JtZWQgdmFsdWUgb2YgdGhlIHJlc3BvbnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAg
ICAqL1xuICAgIGNvbnZlcnRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipc
biAgICAgKiBJZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2gg
YXMgSlNPTlApIG9uIHRoZSBzYW1lIGRvbWFpbiwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFp
biB0byB0cnVlLiBUaGlzIGFsbG93cywgZm9yIGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0
aW9uIHRvIGFub3RoZXIgZG9tYWluLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAg
IGNyb3NzRG9tYWluPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQg
dG8gdGhlIHNlcnZlci4gSXQgaXMgY29udmVydGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3Qg
YWxyZWFkeSBhIHN0cmluZy4gSXQncyBhcHBlbmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVz
dHMuIFNlZSBwcm9jZXNzRGF0YSBvcHRpb24gdG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9j
ZXNzaW5nLiBPYmplY3QgbXVzdCBiZSBLZXkvVmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFy
cmF5LCBqUXVlcnkgc2VyaWFsaXplcyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNl
ZCBvbiB0aGUgdmFsdWUgb2YgdGhlIHRyYWRpdGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxv
dykuXG4gICAgICovXG4gICAgZGF0YT86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9u
IHRvIGJlIHVzZWQgdG8gaGFuZGxlIHRoZSByYXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVx
dWVzdC5UaGlzIGlzIGEgcHJlLWZpbHRlcmluZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVz
cG9uc2UuIFlvdSBzaG91bGQgcmV0dXJuIHRoZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9u
IGFjY2VwdHMgdHdvIGFyZ3VtZW50czogVGhlIHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNl
cnZlciBhbmQgdGhlICdkYXRhVHlwZScgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0
ZXI/IChkYXRhOiBhbnksIHR5OiBhbnkpOiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUg
b2YgZGF0YSB0aGF0IHlvdSdyZSBleHBlY3RpbmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5v
bmUgaXMgc3BlY2lmaWVkLCBqUXVlcnkgd2lsbCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhl
IE1JTUUgdHlwZSBvZiB0aGUgcmVzcG9uc2UgKGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBY
TUwsIGluIDEuNCBKU09OIHdpbGwgeWllbGQgYSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNj
cmlwdCB3aWxsIGV4ZWN1dGUgdGhlIHNjcmlwdCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSBy
ZXR1cm5lZCBhcyBhIHN0cmluZykuXG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4g
ICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFp
bHMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4g
alF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgb2NjdXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlv
biBvYmplY3QsIGlmIG9uZSBvY2N1cnJlZC4gUG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25k
IGFyZ3VtZW50IChiZXNpZGVzIG51bGwpIGFyZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFi
b3J0XCIsIGFuZCBcInBhcnNlcmVycm9yXCIuIFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVy
cm9yVGhyb3duIHJlY2VpdmVzIHRoZSB0ZXh0dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVz
LCBzdWNoIGFzIFwiTm90IEZvdW5kXCIgb3IgXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMg
b2YgalF1ZXJ5IDEuNSwgdGhlIGVycm9yIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBm
dW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhp
cyBoYW5kbGVyIGlzIG5vdCBjYWxsZWQgZm9yIGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3Nz
LWRvbWFpbiBKU09OUCByZXF1ZXN0cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xu
ICAgIGVycm9yPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRo
cm93OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGds
b2JhbCBBamF4IGV2ZW50IGhhbmRsZXJzIGZvciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlz
IHRydWUuIFNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBh
amF4U3RhcnQgb3IgYWpheFN0b3AgZnJvbSBiZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVz
ZWQgdG8gY29udHJvbCB2YXJpb3VzIEFqYXggRXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVy
IGtleS92YWx1ZSBwYWlycyB0byBzZW5kIGFsb25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhN
TEh0dHBSZXF1ZXN0IHRyYW5zcG9ydC4gVGhlIGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxI
dHRwUmVxdWVzdCBpcyBhbHdheXMgYWRkZWQsIGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVz
dCB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBoZXJlLiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGlu
ZyBjYW4gYWxzbyBiZSBvdmVyd3JpdHRlbiBmcm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5j
dGlvbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8g
YmUgc3VjY2Vzc2Z1bCBvbmx5IGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUg
bGFzdCByZXF1ZXN0LiBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQg
aGVhZGVyLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBq
UXVlcnkgMS40IHRoaXMgdGVjaG5pcXVlIGFsc28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVk
IGJ5IHRoZSBzZXJ2ZXIgdG8gY2F0Y2ggdW5tb2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlm
TW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVu
dmlyb25tZW50IHRvIGJlIHJlY29nbml6ZWQgYXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5
c3RlbSksIGV2ZW4gaWYgalF1ZXJ5IGRvZXMgbm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRl
ZmF1bHQuIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBh
cyBsb2NhbDogZmlsZSwgKi1leHRlbnNpb24sIGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNl
dHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNl
IGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAg
ICAqL1xuICAgIGlzTG9jYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGluIGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3
aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAnY2FsbGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFy
dCBvZiB0aGUgcXVlcnkgc3RyaW5nIGluIHRoZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQn
fSB3b3VsZCByZXN1bHQgaW4gJ29uSlNPTlBMb2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBB
cyBvZiBqUXVlcnkgMS41LCBzZXR0aW5nIHRoZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVu
dHMgalF1ZXJ5IGZyb20gYWRkaW5nIHRoZSBcIj9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJM
IG9yIGF0dGVtcHRpbmcgdG8gdXNlIFwiPT9cIiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMg
Y2FzZSwgeW91IHNob3VsZCBhbHNvIGV4cGxpY2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNl
dHRpbmcuIEZvciBleGFtcGxlLCB7IGpzb25wOiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxs
YmFja05hbWVcIiB9XG4gICAgICovXG4gICAganNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogU3BlY2lmeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0
LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBieSBqUXVlcnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpR
dWVyeSBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1h
bmFnZSB0aGUgcmVxdWVzdHMgYW5kIHByb3ZpZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGlu
Zy4gWW91IG1heSB3YW50IHRvIHNwZWNpZnkgdGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8g
ZW5hYmxlIGJldHRlciBicm93c2VyIGNhY2hpbmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVl
cnkgMS41LCB5b3UgY2FuIGFsc28gdXNlIGEgZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4g
d2hpY2ggY2FzZSB0aGUgdmFsdWUgb2YganNvbnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBh
bnk7XG4gICAgLyoqXG4gICAgICogQSBtaW1lIHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1l
IHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBBIHBhc3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRw
UmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0LlxuICAgICAqL1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5
IGRlZmF1bHQsIGRhdGEgcGFzc2VkIGluIHRvIHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3Qg
KHRlY2huaWNhbGx5LCBhbnl0aGluZyBvdGhlciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nl
c3NlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBhIHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUg
ZGVmYXVsdCBjb250ZW50LXR5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRc
Ii4gSWYgeW91IHdhbnQgdG8gc2VuZCBhIERPTURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vz
c2VkIGRhdGEsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNz
RGF0YT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwi
c2NyaXB0XCIgdHJhbnNwb3J0IGlzIHVzZWQgKGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3
aXRoIFwianNvbnBcIiBvciBcInNjcmlwdFwiIGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBT
ZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSBvbiB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSBy
ZXF1ZXN0LiBVc2VkIHdoZW4gdGhlIGNoYXJhY3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMg
bm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgb24gdGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4g
ICAgc2NyaXB0Q2hhcnNldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Yg
bnVtZXJpYyBIVFRQIGNvZGVzIGFuZCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJl
c3BvbnNlIGhhcyB0aGUgY29ycmVzcG9uZGluZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nl
c3NmdWwsIHRoZSBzdGF0dXMgY29kZSBmdW5jdGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJz
IGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrOyBpZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNs
dWRpbmcgM3h4IHJlZGlyZWN0KSwgdGhleSB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhl
IGVycm9yIGNhbGxiYWNrLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1
c0NvZGU/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdl
dHMgcGFzc2VkIHRocmVlIGFyZ3VtZW50czogVGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2Vy
dmVyLCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIHN0YXR1czsgYW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54
LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBz
ZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdp
bGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAg
ICBzdWNjZXNzPyAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpOiBhbnk7XG4gICAgLyoqXG4gICAgICogU2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRz
KSBmb3IgdGhlIHJlcXVlc3QuIFRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQg
c2V0IHdpdGggJC5hamF4U2V0dXAoKS4gVGhlIHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUg
cG9pbnQgdGhlICQuYWpheCBjYWxsIGlzIG1hZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMg
YXJlIGluIHByb2dyZXNzIGFuZCB0aGUgYnJvd3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxh
YmxlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSByZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBj
YW4gYmUgc2VudC4gSW4galF1ZXJ5IDEuNC54IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0
IG9iamVjdCB3aWxsIGJlIGluIGFuIGludmFsaWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMg
b3V0OyBhY2Nlc3NpbmcgYW55IG9iamVjdCBtZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24u
IEluIEZpcmVmb3ggMy4wKyBvbmx5LCBzY3JpcHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBi
ZSBjYW5jZWxsZWQgYnkgYSB0aW1lb3V0OyB0aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQg
YXJyaXZlcyBhZnRlciB0aGUgdGltZW91dCBwZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86
IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRv
IHVzZSB0aGUgdHJhZGl0aW9uYWwgc3R5bGUgb2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAg
Ki9cbiAgICB0cmFkaXRpb25hbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUg
b2YgcmVxdWVzdCB0byBtYWtlIChcIlBPU1RcIiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdF
VFwiLiBOb3RlOiBPdGhlciBIVFRQIHJlcXVlc3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERF
TEVURSwgY2FuIGFsc28gYmUgdXNlZCBoZXJlLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBi
eSBhbGwgYnJvd3NlcnMuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAg
ICAgKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKi9cbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2Vy
bmFtZSB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRU
UCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86
IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0
dHBSZXF1ZXN0IG9iamVjdC4gRGVmYXVsdHMgdG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFp
bGFibGUgKElFKSwgdGhlIFhNTEh0dHBSZXF1ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJv
dmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5j
ZW1lbnRzIHRvIHRoZSBmYWN0b3J5LlxuICAgICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipc
biAgICAgKiBBbiBvYmplY3Qgb2YgZmllbGROYW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9u
IHRoZSBuYXRpdmUgWEhSIG9iamVjdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNl
dCB3aXRoQ3JlZGVudGlhbHMgdG8gdHJ1ZSBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5l
ZWRlZC4gSW4galF1ZXJ5IDEuNSwgdGhlIHdpdGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90
IHByb3BhZ2F0ZWQgdG8gdGhlIG5hdGl2ZSBYSFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1
aXJpbmcgaXQgd291bGQgaWdub3JlIHRoaXMgZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNv
bW1lbmQgdXNpbmcgalF1ZXJ5IDEuNS4xKyBzaG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBp
dC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhS
IG9iamVjdFxuKi9cbmludGVyZmFjZSBKUXVlcnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwg
SlF1ZXJ5UHJvbWlzZTxhbnk+IHtcbiAgICBvdmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJp
bmcpOiBhbnk7XG4gICAgYWJvcnQoc3RhdHVzVGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpR
dWVyeUNhbGxiYWNrIHtcbiAgICBhZGQoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBk
aXNhYmxlKCk6IGFueTtcbiAgICBlbXB0eSgpOiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6
IGFueVtdKTogYW55O1xuICAgIGZpcmVkKCk6IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4
dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJv
b2xlYW47XG4gICAgbG9jaygpOiBhbnk7XG4gICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVt
b3ZlKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVy
eSBQcm9taXNlcyB0byBpbnRlcm9wIHdpdGggbm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVy
ZmFjZSBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2
YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9
PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4p
OiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVl
OiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkp
ID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59
XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2Fs
bGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMg
dmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBK
UXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeVByb21pc2U8VD47XG5cbiAgICAvLyBEZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xu
ICAgIHBpcGUoZG9uZUZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBh
bnkpID0+IGFueSwgcHJvZ3Jlc3NGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9t
aXNlPGFueT47XG5cbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJl
amVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVz
ZSBKUXVlcnkgUHJvbWlzZXMgU3Vja1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVz
OiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJv
Z3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+
O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblBy
b2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxV
PjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVq
ZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Q
cm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8
VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkg
PT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBKUXVlcnkgZGVmZXJyZWQsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eURlZmVycmVkPFQ+IGV4dGVuZHMgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2
ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlb
XSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1
ZXJ5RGVmZXJyZWQ8VD47XG4gICAgbm90aWZ5V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFu
eVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBK
UXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZWplY3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczog
YW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIHJlc29sdmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVl
cnlEZWZlcnJlZDxUPjtcbiAgICBzdGF0ZSgpOiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdl
dD86IGFueSk6IEpRdWVyeVByb21pc2U8VD47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRo
ZSBKUXVlcnkgZXh0ZW5zaW9uIG9mIHRoZSBXM0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZh
Y2UgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtc
biAgICBkZWxlZ2F0ZVRhcmdldDogRWxlbWVudDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTog
Ym9vbGVhbjtcbiAgICBpc0ltbWVkaWF0ZVByb3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xu
ICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJp
bmc7XG4gICAgcHJldmVudERlZmF1bHQoKTogYW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1l
bnQ7XG4gICAgcmVzdWx0OiBhbnk7XG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZv
aWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAg
ICBwYWdlWTogbnVtYmVyO1xuICAgIHdoaWNoOiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVh
bjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUlucHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1
ZXJ5RXZlbnRPYmplY3Qge1xuICAgIGFsdEtleTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29s
ZWFuO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5c
bmludGVyZmFjZSBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVu
dE9iamVjdCB7XG4gICAgYnV0dG9uOiBudW1iZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAg
IGNsaWVudFk6IG51bWJlcjtcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVt
YmVyO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5Y
OiBudW1iZXI7XG4gICAgc2NyZWVuWTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5
RXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBh
bnk7XG4gICAgY2hhckNvZGU6IG51bWJlcjtcbiAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBu
dW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMg
QmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50
O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZl
bnRPYmplY3QsIEpRdWVyeUlucHV0RXZlbnRPYmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qs
IEpRdWVyeUtleUV2ZW50T2JqZWN0LCBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxu
LypcbiAgICBDb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3Nlclxu
Ki9cblxuaW50ZXJmYWNlIEpRdWVyeVN1cHBvcnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAg
IGJveE1vZGVsPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBj
aGVja0Nsb25lPzogYm9vbGVhbjtcbiAgICBjaGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzog
Ym9vbGVhbjtcbiAgICBjc3NGbG9hdD86IGJvb2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBi
b29sZWFuO1xuICAgIGh0bWxTZXJpYWxpemU/OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNw
YWNlPzogYm9vbGVhbjtcbiAgICBub0Nsb25lQ2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9u
ZUV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGFjaXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxl
ZD86IGJvb2xlYW47XG4gICAgb3B0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/
ICgpOiBib29sZWFuO1xuICAgIHN0eWxlPzogYm9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzog
Ym9vbGVhbjtcbiAgICB0Ym9keT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJh
bSB7XG4gICAgKG9iajogYW55KTogc3RyaW5nO1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6
IGJvb2xlYW4pOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNv
bnN0cnVjdCBqUXVlcnkgZXZlbnRzICh3aXRoICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBz
ZXBhcmF0ZWx5IGluc3RlYWQgb2YgaW5saW5lIGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICog
b3ZlcnJpZGluZyB0aGUgY29uc3RydWN0aW9uIGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5n
c1xuICogcmV0dXJuaW5nIHNwZWNpZmljIGV2ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBK
UXVlcnlFdmVudENvbnN0cnVjdG9yIHtcbiAgICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRp
ZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZl
bnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhl
IGludGVyZmFjZSB1c2VkIHRvIHNwZWNpZnkgZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJm
YWNlIEpRdWVyeUVhc2luZyB7XG4gICAgbGluZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBz
d2luZyhwOiBudW1iZXIpOiBudW1iZXI7XG59XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2Yg
alF1ZXJ5ICh0aG9zZSBvbiAkIGFuZCBqUXVlcnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5U3RhdGljIHtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3Vz
IEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBz
ZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFs
bCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0
aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVl
cnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBh
c3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0
IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBB
IGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4g
ICAgICovXG4gICAgYWpheCh1cmw6IHN0cmluZywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGlu
Z3MpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0
aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNl
bnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZGF0YVR5cGVzIEFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBkYXRhVHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5c
biAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAo
b3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXgg
b3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlz
IHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZv
ciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRs
ZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjog
SlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4
U2V0dGluZ3M7XG5cbiAgICAgLyoqXG4gICAgICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0
dXJlIEFqYXggcmVxdWVzdHMuIEl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxu
ICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25m
aWd1cmUgdGhlIGRlZmF1bHQgQWpheCByZXF1ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwu
XG4gICAgICAqL1xuICAgIGFqYXhTZXR1cChvcHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2
b2lkO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0
YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4
bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRo
ZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxp
Z2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdl
dCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0
byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBj
YWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRz
LlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20g
dGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0
LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcs
IHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChk
YXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTog
SlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0
aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlz
IHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQg
aXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1
Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmpl
Y3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5j
b2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3Ry
aW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3Ry
aW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBhIEphdmFTY3JpcHQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LCB0aGVuIGV4ZWN1dGUgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBz
dHJpbmcsIHN1Y2Nlc3M/OiAoc2NyaXB0OiBzdHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFY
SFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBh
cmFtO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBj
b250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBA
cGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQg
Y2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlw
ZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQg
R3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0
KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBq
cVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xu
ICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBP
U1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRh
dGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdp
dGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlv
biB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBk
YXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAg
KiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2
ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwg
aHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBM
b2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlk
ZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBl
IFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRl
bGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xu
ICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/
OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2Ug
Y2FsbGJhY2tzIGxpc3Qgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFu
YWdlIGNhbGxiYWNrIGxpc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlv
bmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2Fs
bGJhY2sgbGlzdCBiZWhhdmVzLlxuICAgICAqL1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmlu
Zyk6IEpRdWVyeUNhbGxiYWNrO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMg
dGhlIGV4ZWN1dGlvbiBvZiBqUXVlcnkncyByZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBob2xkIEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVl
c3RlZCBvciByZWxlYXNlZFxuICAgICAqL1xuICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTog
dm9pZDtcblxuICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xu
ICAgIChlbGVtZW50OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5
O1xuICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBK
UXVlcnkpOiBKUXVlcnk7XG4gICAgKGZ1bmM6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJh
eTogYW55W10pOiBKUXVlcnk7XG4gICAgKCk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJl
bGlucXVpc2ggalF1ZXJ5J3MgY29udHJvbCBvZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSByZW1vdmVBbGwgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1v
dmUgYWxsIGpRdWVyeSB2YXJpYWJsZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcg
alF1ZXJ5IGl0c2VsZikuXG4gICAgICovXG4gICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29s
ZWFuKTogT2JqZWN0O1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0
ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxs
eSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVj
dHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4u
LmRlZmVycmVkczogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47
XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5j
dGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmpl
Y3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEph
dmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBl
eGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1
c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQg
b2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48
VD4oLi4uZGVmZXJyZWRzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29r
czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAv
KipcbiAgICAgKiBTdG9yZSBhcmJpdHJhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNp
ZmllZCBlbGVtZW50LiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhl
IGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRh
dGEgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAg
ICovXG4gICAgZGF0YTxUPihlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQp
OiBUO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBm
b3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1
ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBk
YXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRh
IHRvIHNldC5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5n
KTogYW55O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9y
ZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2
YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRo
ZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAg
IGRlcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4g
ICAgaGFzRGF0YShlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6
IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEoZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3Rh
cnQ/OiAoZGVmZXJyZWQ6IEpRdWVyeURlZmVycmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcblxuICAgIC8vIEVmZmVjdHNcbiAgICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRl
cnZhbDogbnVtYmVyOyBzdG9wOiAoKSA9PiB2b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBm
YXN0OiBudW1iZXI7IH07IG9mZjogYm9vbGVhbjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZl
bnRzXG4gICAgcHJveHkoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnks
IC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3Ry
aW5nLCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcblxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0
cnVjdG9yO1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1
ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55
OyAgLy9UT0RPOiBEZWNpZGUgaG93IHdlIHdhbnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTog
Ym9vbGVhbjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0
O1xuXG4gICAgLy8gVXRpbGl0aWVzXG4gICAgY29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBj
b250YWluZWQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnks
IGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBhbnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFu
eSk6IGFueTtcbiAgICBlYWNoKGNvbGxlY3Rpb246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleElu
QXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7
XG4gICAgZWFjaDxUPihjb2xsZWN0aW9uOiBUW10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBu
dW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBUKSA9PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFy
Z2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFu
LCB0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNv
ZGU6IHN0cmluZyk6IGFueTtcblxuICAgIGdyZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1l
bnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0Pzog
Ym9vbGVhbik6IFRbXTtcblxuICAgIGluQXJyYXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZy
b21JbmRleD86IG51bWJlcik6IG51bWJlcjtcblxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29s
ZWFuO1xuICAgIGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rp
b24ob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICBpc1BsYWluT2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNYTUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5c
biAgICBtYWtlQXJyYXkob2JqOiBhbnkpOiBhbnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTog
VFtdLCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikg
PT4gVSk6IFVbXTtcbiAgICBtYXAoYXJyYXk6IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJh
eTogYW55LCBpbmRleEluQXJyYXk6IGFueSkgPT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4o
Zmlyc3Q6IFRbXSwgc2Vjb25kOiBUW10pOiBUW107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtd
LCBzZWNvbmQ6IFVbXSk6IGFueVtdO1xuXG4gICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTog
bnVtYmVyO1xuXG4gICAgcGFyc2VKU09OKGpzb246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxu
ICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBkYXRhYSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAg
ICAqL1xuICAgIHBhcnNlWE1MKGRhdGE6IHN0cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVl
dWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6
IEpRdWVyeTtcblxuICAgIHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9i
ajogYW55KTogc3RyaW5nO1xuXG4gICAgdW5pcXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAg
IC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAg
ICAqIEBwYXJhbSBjb250ZXh0IERPTSBlbGVtZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGlu
IHdoaWNoIHRoZSBIVE1MIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBr
ZWVwU2NyaXB0cyBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0
cyBwYXNzZWQgaW4gdGhlIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6
IHN0cmluZywgY29udGV4dD86IEhUTUxFbGVtZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBh
bnlbXTtcblxuICAgIEFuaW1hdGlvbihlbGVtOiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9u
czogYW55KTogYW55O1xuXG4gICAgZWFzaW5nOiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAg
VGhlIGpRdWVyeSBpbnN0YW5jZSBtZW1iZXJzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAg
Ly8gQUpBWFxuICAgIGFqYXhDb21wbGV0ZShoYW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWph
eEVycm9yKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBl
eGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChl
dmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdGFydChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFN0b3AoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNj
ZXNzKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNl
cHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0
YT86IGFueSwgY29tcGxldGU/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3Ry
aW5nO1xuICAgIHNlcmlhbGl6ZUFycmF5KCk6IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xu
ICAgIGFkZENsYXNzKGNsYXNzTmFtZXM6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhm
dW5jOiAoaW5kZXg6IGFueSwgY3VycmVudENsYXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2Vs
ZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cblxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3Ry
aW5nKTogc3RyaW5nO1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55
KTogSlF1ZXJ5O1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6
IGFueSwgYXR0cjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpR
dWVyeTtcblxuICAgIGhhc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAg
IGh0bWwoKTogc3RyaW5nO1xuICAgIGh0bWwoaHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGh0bWwoaHRtbENvbnRlbnQ6IChpbmRleDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAg
cHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7
XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFBy
b3BlcnR5VmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcmVtb3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNs
czogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3
dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4p
OiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBz
d3RjaDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2
YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgdmFsKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDog
YW55LCB2YWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQg
dGhlIHZhbHVlIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRo
ZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0
eU5hbWUgQSBDU1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3Ry
aW5nKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9w
ZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0
aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVl
IEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3Bl
cnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVt
YmVyW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9w
ZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZh
bHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1
cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50
IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAg
IGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTog
c3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRo
aXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9m
IHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVt
YmVyLCB2YWx1ZTogbnVtYmVyKSA9PiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
U2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJv
cGVydHktdmFsdWUgcGFpcnMgdG8gc2V0LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBP
YmplY3QpOiBKUXVlcnk7XG5cbiAgICBoZWlnaHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIGhlaWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGhlaWdodChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIGlubmVySGVpZ2h0KCk6IG51bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJX
aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVt
YmVyOyB0b3A6IG51bWJlcjsgfTtcbiAgICBvZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVy
eTtcbiAgICBvZmZzZXQoZnVuYzogKGluZGV4OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJl
cjtcbiAgICBvdXRlckhlaWdodCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVh
bik6IEpRdWVyeTtcblxuICAgIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBu
dW1iZXI7XG4gICAgb3V0ZXJXaWR0aCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9v
bGVhbik6IEpRdWVyeTtcblxuICAgIHBvc2l0aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51
bWJlcjsgfTtcblxuICAgIHNjcm9sbExlZnQoKTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFs
dWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Ny
b2xsVG9wKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4g
ICAgd2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIHdpZHRoKGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGF0YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpR
dWVyeTtcbiAgICBkYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4g
ICAgZGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVy
eTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgcHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBh
bnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShw
cm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1
ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJv
cGVydGllczogYW55LCBvcHRpb25zOiB7IGR1cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7
IGNvbXBsZXRlPzogRnVuY3Rpb247IHN0ZXA/OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBz
cGVjaWFsRWFzaW5nPzogYW55OyB9KTogSlF1ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51
bWJlciwgcXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRl
T3V0KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0
KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJl
ciwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBmaW5pc2goKTogSlF1ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFu
eSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFz
aW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlk
ZURvd24oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRl
RG93bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcblxuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5n
LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnks
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVh
c2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFy
UXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3Ao
cXVldWU/OiBhbnksIGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTog
SlF1ZXJ5O1xuXG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVl
cnk7XG5cbiAgICAvLyBFdmVudHNcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERh
dGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnks
IHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0
cmluZywgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50
czogYW55W10pOiBKUXVlcnk7XG5cbiAgICBibHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFu
eSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQg
b24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICov
XG4gICAgY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGlj
ayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRi
bGNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRi
bGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGRibGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgZGJsY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2Vs
ZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwiZm9jdXNcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3Vz
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgZm9jdXMoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBmb2N1cyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgZm9jdXNvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBmb2N1c291dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QmluZCB0d28gaGFuZGxlcnMgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVk
IHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhh
bmRsZXJPdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVh
dmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhIHNpbmdsZSBoYW5kbGVyIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRl
ZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAg
ICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbk91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJr
ZXlkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5
ZG93blwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBrZXlkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIGtleWRvd25cIlwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXlkb3duKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwia2V5cHJlc3NcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGtleXByZXNzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQg
ZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXl1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBsb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRv
d25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
ZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2Vkb3duKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2VlbnRlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2VlbnRlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVu
IHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRl
cihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlbGVhdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNl
bGVhdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVh
dmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92
ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlbW92ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbW91c2Vtb3ZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwibW91c2VvdXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNlb3V0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVy
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJt
b3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJtb3VzZXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
bW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIG1vdXNldXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZXVwKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tc
IiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFt
IHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxs
eSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9y
IHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAg
b2ZmKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24u
bXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhh
bmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0
aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNl
bnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBu
YW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJl
dmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2Vk
IHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9m
ZihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9u
IGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQg
dHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5
ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNv
IGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyBy
ZXR1cm4gZmFsc2UuIFJlc3QgcGFyYW1ldGVyIGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRl
cnMgcGFzc2VkIHRvIGpRdWVyeS50cmlnZ2VyKCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFt
ZXRlcnMgb24gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0
aW9uYWwgKD8gc3ludGF4KS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFu
eSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5j
dGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBc
ImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRl
ZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxl
Y3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFs
bG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1
cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJp
bmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRv
d24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0
cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBl
bGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5k
bGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBv
bihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3Jl
IGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9t
aXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRv
IHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICov
XG4gICAgb24oZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnks
IGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVy
IHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0
IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2
ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZl
bnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0
IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVu
dCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2Ug
cGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywg
c3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxu
ICAgICAqIEBwYXJhbSBkYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBU
aGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50
IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEg
c2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVk
IGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxs
IG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hl
cyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2Ug
aXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5
IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2Vs
ZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4g
ZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBv
bmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFs
IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxu
ICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRl
c2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlz
IHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0
YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUg
ZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQg
c2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmlu
Zywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRh
Y2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlz
IGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5
cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBv
cHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxl
Y3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBz
ZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVj
dG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVu
IGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0
YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50
IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSwgc2VsZWN0b3I/OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxu
ICAgICAqIFNwZWNpZnkgYSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxs
eSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgYWZ0ZXIgdGhlIERPTSBpcyByZWFkeS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVy
OiBGdW5jdGlvbik6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVz
aXplXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHJlc2l6ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
cmVzaXplKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInNjcm9sbFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzY3JvbGwoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNjcm9sbChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJzZWxlY3RcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNl
bGVjdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzZWxlY3QoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic3VibWl0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzdWJtaXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmln
Z2VyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIHRyaWdnZXIoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAg
dHJpZ2dlckhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55
W10pOiBPYmplY3Q7XG5cbiAgICB1bmJpbmQoZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVu
YmluZChldmVudFR5cGU6IHN0cmluZywgZmxzOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmlu
ZChldnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVu
ZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxl
Z2F0ZShzZWxlY3RvcjogYW55LCBldmVudHM6IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRl
KG5hbWVzcGFjZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQo
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxl
bWVudDtcbiAgICBqcXVlcnk6IHN0cmluZztcblxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVu
dERhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtc
biAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFueVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55
KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWFuaXB1bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDog
YW55W10pOiBKUXVlcnk7XG4gICAgYWZ0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIGFwcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBl
bmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
YXBwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDog
YW55W10pOiBKUXVlcnk7XG4gICAgYmVmb3JlKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBjbG9uZSh3aXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRo
RGF0YUFuZEV2ZW50cz86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBlbXB0eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRl
cih0YXJnZXQ6IGFueSk6IEpRdWVyeTtcbiAgICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBwcmVwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHBy
ZXBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgcHJlcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9y
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtc
blxuICAgIHJlcGxhY2VXaXRoKGZ1bmM6IGFueSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3Ry
aW5nO1xuICAgIHRleHQodGV4dFN0cmluZzogYW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0
cmluZzogKGluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgdG9BcnJheSgpOiBhbnlbXTtcblxuICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3
cmFwKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwSW5uZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVl
cnk7XG4gICAgd3JhcElubmVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTog
RWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55
O1xuXG4gICAgaW5kZXgoKTogbnVtYmVyO1xuICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBu
dW1iZXI7XG4gICAgaW5kZXgoZWxlbWVudDogYW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVy
dGllc1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6
IHN0cmluZ106IGFueTtcbiAgICBbeDogbnVtYmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBU
cmF2ZXJzaW5nXG4gICAgYWRkKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVl
cnk7XG4gICAgYWRkKC4uLmVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNo
aWxkcmVuKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86
IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAg
ICBjbG9zZXN0KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczog
YW55LCBjb250ZXh0PzogRWxlbWVudCk6IGFueVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5
O1xuXG4gICAgZW5kKCk6IEpRdWVyeTtcblxuICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7
XG5cbiAgICBmaWx0ZXIoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVu
YzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55
KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQo
c2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVy
eTtcbiAgICBmaW5kKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5
O1xuXG4gICAgaGFzKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5l
ZDogRWxlbWVudCk6IEpRdWVyeTtcblxuICAgIGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFu
O1xuICAgIGlzKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVs
ZW1lbnQ6IGFueSk6IGJvb2xlYW47XG4gICAgaXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4g
ICAgbGFzdCgpOiBKUXVlcnk7XG5cbiAgICBtYXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21F
bGVtZW50OiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIG5leHRVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIG5leHRVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIG5vdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChm
dW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkp
OiBKUXVlcnk7XG4gICAgbm90KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFy
ZW50KCk6IEpRdWVyeTtcblxuICAgIHBhcmVudChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHBhcmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRz
VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBw
YXJlbnRzVW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtc
biAgICBwYXJlbnRzVW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICBwcmV2KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChz
ZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0
cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50Pzog
RWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBK
UXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVt
YmVyKTogSlF1ZXJ5O1xuXG4gICAgLy8gVXRpbGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/
OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVP
ckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG4gICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBh
bnkpOiBKUXVlcnk7XG59XG5kZWNsYXJlIG1vZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQg
PSAkO1xufVxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAk
OiBKUXVlcnlTdGF0aWM7XG4vLyBsaWJzL2FuZ3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRl
ZmluaXRpb25zIGZvciBBbmd1bGFyIEpTIDEuMFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJq
cy5vcmdcbi8vIERlZmluaXRpb25zIGJ5OiBEaWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20v
ZGllZ292aWxhcj5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5r
b3YvRGVmaW5pdGVseVR5cGVkXG5cblxuXG5kZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxh
clN0YXRpYztcblxuLy8gU3VwcG9ydCBmb3IgcGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25c
bmludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAgJGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuLy8gbmcgbW9kdWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuZGVjbGFyZSBtb2R1bGUgbmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJv
dmlkZXJzIGV4dGVuZCB0aGlzIGludGVyZmFjZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgJGdldDogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEFuZ3VsYXJTdGF0aWNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJT
dGF0aWMge1xuICAgICAgICBiaW5kKGNvbnRleHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdz
OiBhbnlbXSk6IEZ1bmN0aW9uO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBt
b2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJh
cChlbGVtZW50OiBKUXVlcnksIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6
IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3Vt
ZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNv
cHkoc291cmNlOiBhbnksIGRlc3RpbmF0aW9uPzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50
OiBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljO1xuICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZh
bHVlMjogYW55KTogYm9vbGVhbjtcbiAgICAgICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4u
LnNvdXJjZXM6IGFueVtdKTogYW55O1xuICAgICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRv
cjogKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIGZyb21Kc29uKGpzb246IHN0cmluZyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJn
PzogYW55KTogYW55O1xuICAgICAgICBpbmplY3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJ
bmplY3RvclNlcnZpY2U7XG4gICAgICAgIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzRGF0ZSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZh
bHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xl
YW47XG4gICAgICAgIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlz
TnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGlzVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uo
c3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFy
IGFwcGxpY2F0aW9uXG5cdFx0b2ZmaWNpYWwgZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmlu
ZyBhbmd1bGFyIG1vZHVsZXMuXG5cdFx0c2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9hbmd1bGFyLk1vZHVsZVxuXHRcdCovXG4gICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8q
KiBuYW1lIG9mIHlvdXIgbW9kdWxlIHlvdSB3YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAg
bmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBl
bmRzIG9uICovXG4gICAgICAgICAgICByZXF1aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAg
Y29uZmlnRnVuY3Rpb24/OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFu
eVtdKTogdm9pZDtcbiAgICAgICAgdG9Kc29uKG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTog
c3RyaW5nO1xuICAgICAgICB1cHBlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAg
IHZlcnNpb246IHtcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9y
OiBudW1iZXI7XG4gICAgICAgICAgICBtaW5vcjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBu
dW1iZXI7XG4gICAgICAgICAgICBjb2RlbmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJTW9kdWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6
IHN0cmluZywgYW5pbWF0aW9uRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBh
bmltYXRpb24obmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJ
TW9kdWxlO1xuICAgICAgICBhbmltYXRpb24ob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAg
ICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhv
ZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUg
bG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1v
ZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2Ug
dGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQg
b24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0
KTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAg
ICAgICAgY29udHJvbGxlcihvYmplY3QgOiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJl
Y3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9u
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElN
b2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0
aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBp
bmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5
KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywg
ZmlsdGVyRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRl
cihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIGZpbHRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTog
SU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRD
b25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0
cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBz
ZXJ2aWNlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3Ry
aW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3Qp
OiBJTW9kdWxlO1xuXG4gICAgICAgIC8vIFByb3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5n
O1xuICAgICAgICByZXF1aXJlczogc3RyaW5nW107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVj
ZXNzYXJ5IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBu
b3QgdmVyeSBlbGVnYW50XG5cdC8vIGJlY2F1c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28n
XSBpbnN0ZWFkIG9mIGF0dHJzLmZvbyBidXQgSSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxu
XHQvLyB0aGlzIHNob3VsZCByZWFsbHkgYmUgbGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBp
dCBjcmVhdGVzIHRoaXMgcHJvYmxlbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4
NTQvMTY1NjU2XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUg
Q1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRo
ZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4g
YW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkXG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRk
aXRpb24uXG4gICAgICAgICRhZGRDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAg
ICAgICAvLyBSZW1vdmVzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFz
c1ZhbCBwYXJhbWV0ZXIgZnJvbSB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9u
cyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAg
ICAgICAgLy8gdGhlIGNsYXNzIHJlbW92YWwuXG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1Zh
bDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRl
IHZhbHVlLlxuICAgICAgICAkc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxu
ICAgICAgICAvLyBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAv
LyBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBu
ZXh0ICRkaWdlc3RcbiAgICAgICAgLy8gZm9sbG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2
ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQg
dmFsdWUgY2hhbmdlcy5cbiAgICAgICAgJG9ic2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/
OmFueSk9PmFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50
IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxu
ICAgICAgICAvLyB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNr
IHRvIGFjdHVhbCBuYW1lLlxuICAgICAgICAkYXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZvcm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7
XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xu
ICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAg
ICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9k
ZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcu
SU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4g
ICAgICAgICRzZXRQcmlzdGluZSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIE5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7
XG4gICAgICAgICRyZW5kZXIoKTogdm9pZDtcbiAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRp
b25FcnJvcktleTogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8g
RG9jdW1lbnRhdGlvbiBzdGF0ZXMgdmlld1ZhbHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3Ry
aW5nIGJ1dCBvdGhlclxuICAgICAgICAvLyB0eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0
byB1c2UgdGhlbS5cbiAgICAgICAgJHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAg
ICAgICAgJHZpZXdWYWx1ZTogYW55O1xuXG4gICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAg
ICAgICAgJHBhcnNlcnM6IElNb2RlbFBhcnNlcltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1v
ZGVsRm9ybWF0dGVyW107XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6
IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29s
ZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SU1vZGVsUGFyc2VyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElNb2RlbEZvcm1hdHRlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5
KCk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBw
bHkoZXhwOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNh
c3QobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAg
ICRkZXN0cm95KCk6IHZvaWQ7XG4gICAgICAgICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVt
aXQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAg
ICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBs
ZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcs
IGFyZ3M/OiBPYmplY3QpOiBhbnk7XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTog
SVNjb3BlKSA9PiBhbnksIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1l
bnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNv
dW50cyBvbiBpdFxuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7
XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6
IHZvaWQ7XG5cbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0
aW9uIGNoZWNraW5nIHN0cmF0ZWd5XG4gICAgICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJ
U2NvcGU7XG5cbiAgICAgICAgJG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFu
Z3VsYXJFdmVudCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAg
ICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVj
dEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHBy
ZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnks
IHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rp
b247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBh
bnksIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlv
bjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFu
eSwgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29w
ZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAg
ICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5l
d1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0
aW9uO1xuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJ
U2NvcGUpID0+IGFueSwgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBz
Y29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2Nv
cGU7XG5cbiAgICAgICAgJGlkOiBudW1iZXI7XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNc
biAgICAgICAgJCRpc29sYXRlQmluZGluZ3M6IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5ndWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2Nv
cGU6IElTY29wZTtcbiAgICAgICAgY3VycmVudFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6
IHN0cmluZztcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZh
dWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50
cyB0aGF0IHdlcmUgJGVtaXQtdGVkXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9u
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRz
IFdpbmRvdyB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZp
Y2VcbiAgICAvLyBUT0RPIHVuZG9jdW1lbnRlZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0
aGUgc291cmNlIGNvZGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJy
b3dzZXJTZXJ2aWNlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGlt
ZW91dFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZp
Y2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBs
eT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVBy
b21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSW50ZXJ2YWxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRpbnRlcnZhbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJSW50ZXJ2YWxTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVt
YmVyLCBjb3VudD86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55
PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAg
ICAobmFtZTogc3RyaW5nKTogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0
ZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3Rlcihu
YW1lOiBzdHJpbmcsIGZpbHRlckZhY3Rvcnk6IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAg
ICBpZDogc3RyaW5nO1xuXG4gICAgICAgIC8vIFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAg
ICAgICAvLyBDaGVjayBhbmd1bGFyJ3MgaTE4biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAg
TlVNQkVSX0ZPUk1BVFM6IElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBE
QVRFVElNRV9GT1JNQVRTOiBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAg
ICBwbHVyYWxDYXQ6IChudW06IGFueSkgPT4gc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBz
dHJpbmc7XG4gICAgICAgIEdST1VQX1NFUDogc3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxv
Y2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yW107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3Ry
aW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0
b3Ige1xuICAgICAgICBtaW5JbnQ6IG51bWJlcjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xu
ICAgICAgICBtYXhGcmFjOiBudW1iZXI7XG4gICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAg
ICBwb3NTdWY6IHN0cmluZztcbiAgICAgICAgbmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1
Zjogc3RyaW5nO1xuICAgICAgICBnU2l6ZTogbnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJl
cjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRv
ciB7XG4gICAgICAgIE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5n
W107XG4gICAgICAgIERBWTogc3RyaW5nW107XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtc
biAgICAgICAgQU1QTVM6IHN0cmluZ1tdO1xuICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAg
ICAgc2hvcnQ6IHN0cmluZztcbiAgICAgICAgZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9u
Z0RhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9y
dERhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9y
dFRpbWU6IHN0cmluZztcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBM
b2dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRs
b2dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xu
ICAgICAgICBkZWJ1ZzogSUxvZ0NhbGw7XG4gICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAg
ICAgaW5mbzogSUxvZ0NhbGw7XG4gICAgICAgIGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46
IElMb2dDYWxsO1xuICAgIH1cblxuICAgIC8vIFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGlu
dGVyZmFjZSBzbyB3ZSBjYW4gcmVvcGVuIGl0IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sg
bW9kdWxlLlxuICAgIGludGVyZmFjZSBJTG9nQ2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlb
XSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJz
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtc
biAgICAgICAgKGV4cHJlc3Npb246IHN0cmluZyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4
dDogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90
IHByb3ZpZGVkLCB1bmRlZmluZWQgaXMgZ29ubmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50
YXRpb25cbiAgICAgICAgLy8gZG9lcyBub3QgY2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9y
Y2UgYSB2YWx1ZSBmb3IgY29uc2lzdGVuY3kuIElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50
cyB0byB1bmRlZmluZSBpdCwgcGFzcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4g
ICAgICAgIGFzc2lnbihjb250ZXh0OiBhbnksIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4k
bG9jYXRpb25cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9u
U2VydmljZSB7XG4gICAgICAgIGFic1VybCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3Ry
aW5nO1xuICAgICAgICBoYXNoKG5ld0hhc2g6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIGhvc3QoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAg
cGF0aChuZXdQYXRoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6
IG51bWJlcjtcbiAgICAgICAgcHJvdG9jb2woKTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6
IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJj
aChwYXJhbWV0ZXJzTWFwOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2go
cGFyYW1ldGVyOiBzdHJpbmcsIHBhcmFtZXRlclZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNl
O1xuICAgICAgICB1cmwoKTogc3RyaW5nO1xuICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBl
eHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztc
biAgICAgICAgaGFzaFByZWZpeChwcmVmaXg6IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xu
ICAgICAgICBodG1sNU1vZGUoKTogYm9vbGVhbjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9u
IHN0YXRlcyB0aGF0IHBhcmFtZXRlciBpcyBzdHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1l
bnRhdGlvbiB0ZXN0cyBpdCBhcyBib29sZWFuLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAg
ICAgIC8vIHNpbmNlIHRoaXMgaXMgYSB0b2dnbGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6
IGJvb2xlYW4pOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBEb2N1bWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGRvY3VtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElEb2N1bWVudFNlcnZpY2UgZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRXhjZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2
aWNlIHtcbiAgICAgICAgKGV4Y2VwdGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVt
ZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNl
cnZpY2UgZXh0ZW5kcyBKUXVlcnkge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IFFTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRx
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAg
ICAgIGFsbChwcm9taXNlczogSVByb21pc2U8YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAg
ICAgICBkZWZlcjxUPigpOiBJRGVmZXJyZWQ8VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBh
bnkpOiBJUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNl
PFQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21p
c2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5
Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAg
ICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJ
UHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBu
b3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0Pjtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQp
ID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5v
dGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xu
XG5cbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJ
SHR0cFByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8
VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6
IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAo
cmVhc29uOiBhbnkpID0+IFRSZXN1bHQpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBm
aW5hbGx5PFRSZXN1bHQ+KGZpbmFsbHlDYWxsYmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3Vs
dD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29s
dmUodmFsdWU/OiBUKTogdm9pZDtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7
XG4gICAgICAgIG5vdGlmeShzdGF0ZT86YW55KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVBy
b21pc2U8VD47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9y
U2Nyb2xsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kYW5jaG9yU2Nyb2xsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElB
bmNob3JTY3JvbGxTZXJ2aWNlIHtcbiAgICAgICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElBbmNob3JTY3JvbGxQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICBkaXNhYmxlQXV0b1Njcm9sbGluZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIENhY2hlRmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAg
IC8vIExldHMgbm90IGZvY2UgdGhlIG9wdGlvbnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVt
YmVyLiBFdmVuIHRob3VnaFxuICAgICAgICAvLyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRl
cmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBt
aWdodCBmaW5kIGl0IHVzZWZ1bCB0byBhc3NvY2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRo
ZSBjYWNoZSBvYmplY3QuXG4gICAgICAgIC8vKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86
IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IENhY2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDog
c3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0
O1xuXG4gICAgICAgIC8vIE1ldGhvZHMgYmVsbG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAg
ICBpbmZvKCk6IGFueTtcbiAgICAgICAgZ2V0IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmpl
Y3Q7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8o
KToge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtc
blxuICAgICAgICAgICAgLy8gTm90IGdhcmFudGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9u
LW1hbmRhdG9yeSBvcHRpb25cbiAgICAgICAgICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAg
ICAgfTtcbiAgICAgICAgcHV0KGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAg
ICAgIGdldCAoa2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6
IHZvaWQ7XG4gICAgICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZv
aWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92
aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZp
Y2Uge1xuICAgICAgICAoZWxlbWVudDogc3RyaW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlu
a2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5j
dGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVM
aW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1
bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogSlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRl
TGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdG
dW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRz
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJl
Y3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElDb21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8g
VW5kb2N1bWVudGVkLCBidXQgaXQgaXMgdGhlcmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVj
dGl2ZXNNYXA6IGFueSk6IElDb21waWxlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiB7XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5v
dCBmb3JjZSBjbG9uZUF0dGFjaEZuJ3Mgc2lnbmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3Bl
LCBjbG9uZUF0dGFjaEZuPzogKGNsb25lZEVsZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3Bl
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gQ29udHJvbGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbnRyb2xsZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJQ29udHJvbGxlclNlcnZpY2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUg
ZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHN0YXRlIHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAg
ICAgICAgKGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFu
eTtcbiAgICAgICAgKGNvbnRyb2xsZXJOYW1lOiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2
aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJp
bmcsIGRlcGVuZGVuY3lBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwU2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0
IG1vZXRob2QgYW5kIHVybCBtdXN0IGJlIHByb3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElS
ZXF1ZXN0Q29uZmlnKTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJp
bmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVs
ZXRlICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBoZWFkKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQ
cm9taXNlPGFueT47XG4gICAgICAgIGpzb25wKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6
IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBw
dXQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAg
Ly8gRm9yIGRlYnVnZ2luZywgQlVUIGl0IGlzIGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxu
ICAgICAgICBwZW5kaW5nUmVxdWVzdHM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMg
anVzdCBmb3IgaGludGluZy5cbiAgICAvLyBTb21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFp
bGFibGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cCNVc2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNc
biAgICBpbnRlcmZhY2UgSVJlcXVlc3RDb25maWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztc
biAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAv
LyBYWFggaXQgaGFzIGl0J3Mgb3duIHN0cnVjdHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVm
aW5lIGl0IGluIHRoZSBmdXR1cmVcbiAgICAgICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBj
YWNoZT86IGFueTtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAg
ICAvLyBUaGVzZSBhY2NlcHQgbXVsdGlwbGUgdHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFz
IGFueVxuICAgICAgICBkYXRhPzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55
O1xuICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFu
eTsgLy8gbnVtYmVyIHwgcHJvbWlzZVxuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21p
c2VDYWxsYmFjazxUPiB7XG4gICAgICAgIChkYXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVy
czogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmln
KTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8
VD4ge1xuICAgICAgICBkYXRhPzogVDtcbiAgICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAg
ICBoZWFkZXJzPzogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25m
aWc/OiBJUmVxdWVzdENvbmZpZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNl
PFQ+IGV4dGVuZHMgSVByb21pc2U8VD4ge1xuICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0
cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2Fs
bGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAg
ICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VD
YWxsYmFja0FyZzxUPikgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0
dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAg
ICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPikgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAo
cmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElT
ZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAg
ICAgIGludGVyY2VwdG9yczogYW55W107XG4gICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBh
bnlbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2Vu
ZFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0
dHBCYWNrZW5kXG4gICAgLy8gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZp
Y2UgZGlyZWN0bHkuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRw
QmFja2VuZFNlcnZpY2Uge1xuICAgICAgICAvLyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sg
c2lnbmF0dXJlIGluIHRoZSBmdXR1cmVcbiAgICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0
cmluZywgcG9zdD86IGFueSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGlt
ZW91dD86IG51bWJlciwgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92
aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVT
ZXJ2aWNlIHtcbiAgICAgICAgKHRleHQ6IHN0cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9v
bGVhbik6IElJbnRlcnBvbGF0aW9uRnVuY3Rpb247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJp
bmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZh
Y2UgSUludGVycG9sYXRpb25GdW5jdGlvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJp
bmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMg
SVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAg
ICAgc3RhcnRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAg
ICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmlu
Zyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFRlbXBsYXRlQ2FjaGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiR0ZW1wbGF0ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUNhY2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVj
dCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4
dGVuZHMgSVNjb3BlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cblx0aW50ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRU
cnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1
c3RlZENzcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkp
OiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEpzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3Rl
ZFJlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTog
YW55KTogYW55O1xuXHRcdHBhcnNlKHR5cGU6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTog
KGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJl
c3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0
cGFyc2VBc0h0bWwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBh
bnkpID0+IGFueTtcblx0XHRwYXJzZUFzSnMoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6
IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVz
c2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRw
YXJzZUFzVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55
KSA9PiBhbnk7XG5cdFx0dHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0dHJ1c3RBc0h0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFu
eSk6IGFueTtcblx0XHR0cnVzdEFzUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0
cnVzdEFzVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5c
dH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2
aWNlIHtcbiAgICAgICAgZ2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55
KTogYW55O1xuICAgICAgICB0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtc
biAgICAgICAgdmFsdWVPZih2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRl
bmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZXNvdXJjZVVybEJsYWNrbGlzdChibGFj
a2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICAgICAgcmVzb3VyY2VVcmxXaGl0ZWxpc3Qod2hpdGVs
aXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gRGlyZWN0aXZlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZlXG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvZ3VpZGUvZGlyZWN0aXZlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBp
bnRlcmZhY2UgSURpcmVjdGl2ZXtcbiAgICAgICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVt
cGxhdGVFbGVtZW50OiBhbnksXG4gICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRy
aWJ1dGVzLFxuICAgICAgICAgICAgdHJhbnNjbHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlu
a2luZ0ZuOiBGdW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAg
IGNvbnRyb2xsZXI/OiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAg
ICAgbGluaz86XG4gICAgICAgICAgICAoc2NvcGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3Rh
bmNlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmli
dXRlcyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lk
O1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAg
ICAgICAgcmVwbGFjZT86IGJvb2xlYW47XG4gICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAg
IHJlc3RyaWN0Pzogc3RyaW5nO1xuICAgICAgICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxh
dGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlVXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86
IGJvb2xlYW47XG4gICAgICAgIHRyYW5zY2x1ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gYW5ndWxhci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5n
IGFuZ3VsYXIuZWxlbWVudCwgYW5ndWxhciByZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAv
LyBhdWdtZW50ZWQgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAg
IC8vIHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0
aWMgZXh0ZW5kcyBKUXVlcnlTdGF0aWMge1xuICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29u
dGV4dD86IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1
ZXJ5O1xuICAgICAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5
O1xuICAgICAgICAob2JqZWN0OiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAo
ZnVuYzogRnVuY3Rpb24pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtd
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAg
ICAgICAvLyBUT0RPOiBldmVudHMsIGhvdyB0byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lc
blxuICAgICAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAg
ICAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQo
b2JqOiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFt
ZTogc3RyaW5nKTogYW55O1xuICAgICAgICBpbmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3Bl
KCk6IElTY29wZTtcblxuICAgICAgICBpbmhlcml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTog
YW55KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmdd
OiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTog
YW55O1xuXG5cbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8g
bW9kdWxlIChhbmd1bGFyLmpzKVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBt
b2R1bGUgYXV0byB7XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0
b3JTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9B
VVRPLiRpbmplY3RvclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2Ug
SUluamVjdG9yU2VydmljZSB7XG4gICAgICAgICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBz
dHJpbmdbXTtcbiAgICAgICAgICAgIGFubm90YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBh
bnlbXSk6IHN0cmluZ1tdO1xuICAgICAgICAgICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4g
ICAgICAgICAgICBpbnN0YW50aWF0ZSh0eXBlQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/
OiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246
IGFueVtdKTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0
PzogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgICAgICAvLyBQcm92aWRlU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgICAgICBpbnRlcmZhY2UgSVByb3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8v
IERvY3VtZW50YXRpb24gc2F5cyBpdCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBi
dXQgYWN0dWFsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4g
YW55dGhpbmcuXG4gICAgICAgICAgICAvLyBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiBhbnk7XG4gICAgICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiB2b2lkO1xuXG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6
IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRl
Y29yYXRvcklubGluZTogYW55W10pOiB2b2lkO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBz
dHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92
aWRlcjtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRG
dW5jdGlvbjogYW55W10pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlk
ZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjogbmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2
aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQ
cm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcu
SVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1v
ZGVscy9Ub2RvSXRlbS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0Jztcblxu
ICAgIGV4cG9ydCBjbGFzcyBUb2RvSXRlbSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAg
ICAgICAgcHVibGljIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVk
OiBib29sZWFuXG4gICAgICAgICAgICApIHsgfVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRv
ZG9TY29wZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2Nv
cGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xuXHRcdHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1Rv
ZG86IHN0cmluZztcblx0XHRlZGl0ZWRUb2RvOiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86
IFRvZG9JdGVtO1xuXHRcdHJlbWFpbmluZ0NvdW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBu
dW1iZXI7XG5cdFx0YWxsQ2hlY2tlZDogYm9vbGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtc
blx0XHRzdGF0dXNGaWx0ZXI6IHsgY29tcGxldGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9u
OiBuZy5JTG9jYXRpb25TZXJ2aWNlO1xuXHRcdHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50
ZXJmYWNlcy9JVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVy
ZmFjZSBJVG9kb1N0b3JhZ2Uge1xuXHRcdGdldCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9k
b3M6IFRvZG9JdGVtW10pO1xuXHR9XG59Ly8gZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9k
dWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhh
dCBwbGFjZXMgZm9jdXMgb24gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBl
eHByZXNzaW9uIGl0IGJpbmRzIHRvIGV2YWx1YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0
IGZ1bmN0aW9uIHRvZG9Gb2N1cygkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURp
cmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwg
ZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3
YXRjaChhdHRyaWJ1dGVzLnRvZG9Gb2N1cywgbmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3
dmFsKSB7XG5cdFx0XHRcdFx0XHQkdGltZW91dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAs
IGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1c
blxuXHR0b2RvRm9jdXMuJGluamVjdCA9IFsnJHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMv
VG9kb0JsdXIudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAv
KipcbiAgICAgKiBEaXJlY3RpdmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhl
IGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byBsb3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBv
cnQgZnVuY3Rpb24gdG9kb0JsdXIoKTogbmcuSURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7
XG4gICAgICAgICAgICBsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwg
YXR0cmlidXRlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVy
JywgKCkgPT4geyAkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAg
ICAgICAgICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQo
J2JsdXInKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGly
ZWN0aXZlcy9Ub2RvRXNjYXBlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0Jztc
blxuXHRjb25zdCBFU0NBUEVfS0VZID0gMjc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0
IGNhbmNlbHMgZWRpdGluZyBhIHRvZG8gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5c
blx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xu
XHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpR
dWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93
bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVf
S0VZKSB7XG5cdFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7
XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJv
eScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0
fTtcblx0fVxufVxuLy8gc2VydmljZXMvVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtc
biAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNp
c3RzIGFuZCByZXRyaWV2ZXMgVE9ET3MgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAg
ZXhwb3J0IGNsYXNzIFRvZG9TdG9yYWdlIGltcGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAg
ICAgICBTVE9SQUdFX0lEID0gJ3RvZG9zLWFuZ3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAg
ICBnZXQgKCk6IFRvZG9JdGVtW10ge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9j
YWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxu
XG4gICAgICAgIHB1dCh0b2RvczogVG9kb0l0ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9y
YWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAg
ICAgICB9XG4gICAgfVxufS8vIGNvbnRyb2xsZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2Rv
cyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBm
b3IgdGhlIGFwcC4gVGhlIGNvbnRyb2xsZXI6XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0
cyB0aGUgbW9kZWwgdmlhIHRoZSB0b2RvU3RvcmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0
aGUgbW9kZWwgdG8gdGhlIHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQg
Ki9cblx0ZXhwb3J0IGNsYXNzIFRvZG9DdHJsIHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9J
dGVtW107XG5cblx0XHQvLyAkaW5qZWN0IGFubm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMg
JGluamVjdG9yIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVj
dGVkIGludG8gY29uc3RydWN0b3Jcblx0XHQvLyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9z
ZSB0byB0aGUgY29uc3RydWN0b3IsIGJlY2F1c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBp
biBjb3VudCBhbmQgdHlwZS5cblx0XHQvLyBTZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9n
dWlkZS9kaVxuXHRcdHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxu
XHRcdFx0JyRsb2NhdGlvbicsXG5cdFx0XHQndG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZp
bHRlcidcblx0XHRdO1xuXG5cdFx0Ly8gZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5n
dWxhckpTICRpbmplY3RvclxuXHRcdC8vIGNvbnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQg
aW4gQXBwbGljYXRpb24udHMgYW5kIHNwZWNpZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmli
dXRlIGluIGluZGV4Lmh0bWxcblx0XHRjb25zdHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3Bl
OiBJVG9kb1Njb3BlLFxuXHRcdFx0cHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZp
Y2UsXG5cdFx0XHRwcml2YXRlIHRvZG9TdG9yYWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2
YXRlIGZpbHRlckZpbHRlclxuXHRcdCkge1xuXHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2Rv
cyA9IHRvZG9TdG9yYWdlLmdldCgpO1xuXG5cdFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRc
dFx0JHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3Ig
J3ZpZXcgbW9kZWwnLiBXZSdyZSBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIg
dG8gdGhlIHNjb3BlXG5cdFx0XHQvLyBmb3IgaXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBm
cm9tIHZpZXcgLyBIVE1MXG5cdFx0XHQkc2NvcGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRj
aGluZyBmb3IgZXZlbnRzL2NoYW5nZXMgaW4gc2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmll
dy91c2VyIGlucHV0XG5cdFx0XHQvLyBpZiB5b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50
IHdpdGggbGlmZXRpbWUgbG9uZ2VyIHRoYW4gdGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91
IHVuc3Vic2NyaWJlLlxuXHRcdFx0JHNjb3BlLiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9u
VG9kb3MoKSwgdHJ1ZSk7XG5cdFx0XHQkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBw
YXRoID0+IHRoaXMub25QYXRoKHBhdGgpKVxuXG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9
PT0gJycpICRsb2NhdGlvbi5wYXRoKCcvJyk7XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9j
YXRpb247XG5cdFx0fVxuXG5cdFx0b25QYXRoKHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4k
c2NvcGUuc3RhdHVzRmlsdGVyID0gKHBhdGggPT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNv
bXBsZXRlZDogZmFsc2UgfSA6IChwYXRoID09PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBj
b21wbGV0ZWQ6IHRydWUgfSA6IHt9O1xuXHRcdH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0
aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudCA9IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3Ms
IHsgY29tcGxldGVkOiBmYWxzZSB9KS5sZW5ndGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291
bnQgPSB0aGlzLnRvZG9zLmxlbmd0aCAtIHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRc
dFx0dGhpcy4kc2NvcGUuYWxsQ2hlY2tlZCA9ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxu
XHRcdFx0dGhpcy50b2RvU3RvcmFnZS5wdXQodGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRk
VG9kbygpIHtcblx0XHRcdHZhciBuZXdUb2RvIDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9k
by50cmltKCk7XG5cdFx0XHRpZiAoIW5ld1RvZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtc
blx0XHRcdH1cblxuXHRcdFx0dGhpcy50b2Rvcy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBm
YWxzZSkpO1xuXHRcdFx0dGhpcy4kc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVk
aXRUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9k
byA9IHRvZG9JdGVtO1xuXG5cdFx0XHQvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNl
IGVkaXRpbmcgaXMgY2FuY2VsbGVkLlxuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0g
YW5ndWxhci5leHRlbmQoe30sIHRvZG9JdGVtKTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9m
KHRvZG9JdGVtKV0gPSB0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29w
ZS5yZXZlcnRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRv
ZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRo
aXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2
ZXJ0ZWQpIHtcblx0XHRcdFx0Ly8gVG9kbyBlZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZl
LlxuXHRcdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtc
blx0XHRcdH1cblx0XHRcdHRvZG9JdGVtLnRpdGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xu
XHRcdFx0aWYgKCF0b2RvSXRlbS50aXRsZSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9k
b0l0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9J
dGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zLnNwbGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0
ZW0pLCAxKTtcblx0XHR9XG5cblx0XHRjbGVhckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNj
b3BlLnRvZG9zID0gdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0
b2RvSXRlbS5jb21wbGV0ZWQpO1xuXHRcdH1cblxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29s
ZWFuKSB7XG5cdFx0XHR0aGlzLnRvZG9zLmZvckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5j
b21wbGV0ZWQgPSBjb21wbGV0ZWQ7IH0pO1xuXHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlv
bi50c1xuXG4vKipcbiAqIFRoZSBtYWluIFRvZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlw
ZSB7YW5ndWxhci5Nb2R1bGV9XG4gKi9cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3Qn
O1xuXG4gICAgdmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAg
ICAgICAgICAgLmNvbnRyb2xsZXIoJ3RvZG9DdHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAu
ZGlyZWN0aXZlKCd0b2RvQmx1cicsIHRvZG9CbHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgn
dG9kb0ZvY3VzJywgdG9kb0ZvY3VzKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2Fw
ZScsIHRvZG9Fc2NhcGUpXG4gICAgICAgICAgICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2Rv
U3RvcmFnZSk7XG59XG4iCittb2R1bGUuZXhwb3J0cyA9ICIvLyBsaWJzL2pxdWVyeS9qcXVlcnku
ZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNl
XG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElTIFBST1ZJREVEICpBUyBJUyogQkFT
SVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1Q
TElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXG5c
blNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlwaW5nIGZvciB0aGUgalF1ZXJ5IGxp
YnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFByb2plY3Q6IGh0dHA6Ly9qcXVlcnku
Y29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtvdiA8aHR0cHM6Ly9naXRodWIuY29t
L2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3RlciA8aHR0cHM6Ly9naXRodWIuY29t
L2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxlaSBHb21lcyA8aHR0cHM6Ly9naXRo
dWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS90YXNv
aWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxodHRwczovL2dpdGh1Yi5jb20vc2Vh
bnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9HdXV6PiwgS2VsbHkgU3Vt
bWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxpbj4sIEJhc2FyYXQgQWxpIFN5ZWQg
PGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9sYXMgV29sdmVyc29uIDxodHRwczov
L2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vyb25lIDxodHRwczovL2dpdGh1Yi5j
b20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9BbmRy
ZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qYW1l
c2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9naXRodWIuY29tL3NlaWtpY2hpPiwg
QmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluamFja21hbj4sIFBv
dWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkzMjk0PiwgSm9zaCBTdHJvYmwgPGh0
dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBSZWlsbHkgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9i
b3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBB
SkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgQUpBWCByZXF1ZXN0XG4qL1xuaW50
ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQg
dHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0IHRlbGxzIHRoZSBzZXJ2ZXIgd2hh
dCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGluIHJldHVybi4gSWYgdGhlIGFjY2Vw
dHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNv
IG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxuICAgICAqL1xuICAgIGFjY2VwdHM/
OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgYWxsIHJlcXVlc3RzIGFyZSBzZW50
IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCkuIElm
IHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2Uu
IENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6IFwianNvbnBcIiByZXF1ZXN0cyBk
byBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE5vdGUgdGhhdCBzeW5jaHJvbm91
cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUgYnJvd3NlciwgZGlzYWJsaW5nIGFu
eSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQXMgb2YgalF1ZXJ5IDEuOCwg
dGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAoJC5EZWZlcnJlZCkgaXMgZGVwcmVj
YXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9yL2NvbXBsZXRlIGNhbGxiYWNrIG9w
dGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIG9mIHRoZSBqcVhIUiBv
YmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRlcHJlY2F0ZWQganFYSFIuc3VjY2Vz
cygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIHBy
ZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRo
ZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGJlZm9yZSBp
dCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhlYWRlcnMsIGV0Yy4gVGhlIGpxWEhS
IGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzLiBUaGlzIGlzIGFu
IEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbiB3
aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGJlZm9yZVNlbmQg
b3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgcmVxdWVzdC5c
biAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpRdWVyeVhIUiwgc2V0dGluZ3M6IEpR
dWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gZmFsc2Us
IGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0byBiZSBjYWNoZWQgYnkgdGhlIGJy
b3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ugd2lsbCBvbmx5IHdvcmsgY29ycmVj
dGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3b3JrcyBieSBhcHBlbmRpbmcgXCJf
PXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJzLiBUaGUgcGFyYW1ldGVyIGlzIG5v
dCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3RzLCBleGNlcHQgaW4gSUU4IHdoZW4g
YSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBi
eSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBmaW5pc2hlcyAoYWZ0ZXIg
c3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCkuIFRoZSBmdW5jdGlvbiBn
ZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1M
SFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0ZWdvcml6aW5nIHRoZSBzdGF0dXMg
b2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1vZGlmaWVkXCIsIFwiZXJyb3JcIiwg
XCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJlcnJvclwiKS4gQXMgb2YgalF1ZXJ5
IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlv
bnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4
IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0
YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBzdHJpbmcv
cmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJtaW5lIGhvdyBqUXVlcnkgd2lsbCBw
YXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50IHR5cGUuICh2ZXJzaW9uIGFkZGVk
OiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
biAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3VyY2UgY29kZSwgYWpheCdzIG9wdGlv
biBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0IHRvIFwiZmFsc2VcIlxuICAgIC8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzc0
MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRhIHRvIHRoZSBzZXJ2ZXIsIHVzZSB0
aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJs
ZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBmaW5lIGZvciBtb3N0IGNhc2VzLiBJ
ZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10eXBlIHRvICQuYWpheCgpLCB0aGVu
IGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2ZW4gaWYgbm8gZGF0YSBpcyBzZW50
KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0aW9uIGRpY3RhdGVzIHRoYXQgdGhl
IGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5nIGFub3RoZXIgY2hhcnNldCB3aWxs
IG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhlIGVuY29kaW5nLlxuICAgICAqL1xu
ICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRoaXMgb2JqZWN0IHdpbGwg
YmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxhdGVkIGNhbGxiYWNrcy4gQnkgZGVm
YXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgYWpheCBz
ZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0aW5ncyBtZXJnZWQgd2l0aCB0aGUg
c2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICovXG4gICAgY29udGV4dD86IGFueTtc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhVHlwZS10by1kYXRhVHlw
ZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUgcmVzcG9uc2UuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRvIGZvcmNlIGEgY3Jvc3NEb21haW4g
cmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUgZG9tYWluLCBzZXQgdGhlIHZhbHVl
IG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgc2VydmVy
LXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4uICh2ZXJzaW9uIGFkZGVkOiAxLjUp
XG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERh
dGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBjb252ZXJ0ZWQgdG8gYSBxdWVyeSBz
dHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdzIGFwcGVuZGVkIHRvIHRoZSB1cmwg
Zm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9wdGlvbiB0byBwcmV2ZW50IHRoaXMg
YXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJlIEtleS9WYWx1ZSBwYWlycy4gSWYg
dmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVzIG11bHRpcGxlIHZhbHVlcyB3aXRo
IHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdHJhZGl0aW9uYWwgc2V0dGluZyAo
ZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRhPzogYW55O1xuICAgIC8qKlxuICAg
ICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUgdGhlIHJhdyByZXNwb25zZSBkYXRh
IG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmlsdGVyaW5nIGZ1bmN0aW9uIHRvIHNh
bml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1cm4gdGhlIHNhbml0aXplZCBkYXRh
LiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzOiBUaGUgcmF3IGRhdGEgcmV0dXJu
ZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBlJyBwYXJhbWV0ZXIuXG4gICAgICov
XG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFueSk6IGFueTtcbiAgICAvKipcbiAg
ICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4cGVjdGluZyBiYWNrIGZyb20gdGhl
IHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVyeSB3aWxsIHRyeSB0byBpbmZlciBp
dCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNwb25zZSAoYW4gWE1MIE1JTUUgdHlw
ZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5aWVsZCBhIEphdmFTY3JpcHQgb2Jq
ZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0LCBhbmQgYW55dGhpbmcg
ZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5cbiAgICAgKi9cbiAgICBkYXRhVHlw
ZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0
aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRocmVlIGFyZ3VtZW50czog
VGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QsIGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1cnJlZCBhbmQgYW4gb3B0
aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3VycmVkLiBQb3NzaWJsZSB2YWx1ZXMg
Zm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVsbCkgYXJlIFwidGltZW91dFwiLCBc
ImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJyb3JcIi4gV2hlbiBhbiBIVFRQIGVy
cm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhlIHRleHR1YWwgcG9ydGlvbiBvZiB0
aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRcIiBvciBcIkludGVybmFsIFNlcnZl
ciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJyb3Igc2V0dGluZyBjYW4gYWNjZXB0
IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0
dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3IgY3Jvc3MtZG9tYWluIHNj
cmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3RzLiBUaGlzIGlzIGFuIEFqYXggRXZl
bnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBz
dHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVy
IHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxlcnMgZm9yIHRoaXMgcmVxdWVzdC4g
VGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRvIHByZXZlbnQgdGhlIGdsb2JhbCBo
YW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBmcm9tIGJlaW5nIHRyaWdnZXJlZC4g
VGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgQWpheCBFdmVudHMuXG4gICAgICov
XG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgYWRk
aXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNlbmQgYWxvbmcgd2l0aCByZXF1ZXN0
cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0LiBUaGUgaGVhZGVyIFgtUmVxdWVz
dGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBhZGRlZCwgYnV0IGl0cyBkZWZhdWx0
IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGhlcmUuIFZhbHVlcyBpbiB0aGUg
aGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0dGVuIGZyb20gd2l0aGluIHRoZSBi
ZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGhl
YWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0
aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFu
Z2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyB0aGUg
TGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UsIGlnbm9yaW5nIHRo
ZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlxdWUgYWxzbyBjaGVja3MgdGhlICdl
dGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRjaCB1bm1vZGlmaWVkIGRhdGEuXG4g
ICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxsb3cg
dGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2duaXplZCBhcyBcImxvY2FsLFwiIChl
LmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkgZG9lcyBub3QgcmVjb2duaXplIGl0
IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIGN1cnJlbnRs
eSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVuc2lvbiwgYW5kIHdpZGdldC4gSWYg
dGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVk
IHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLiAodmVyc2lvbiBhZGRl
ZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAg
ICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgaW4gYSBqc29ucCByZXF1ZXN0
LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICdjYWxsYmFjaycgaW4gdGhlICdj
YWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgaW4gdGhlIHVybC4gU28ge2pzb25w
OidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25KU09OUExvYWQ9PycgcGFzc2VkIHRv
IHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRpbmcgdGhlIGpzb25wIG9wdGlvbiB0
byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcgdGhlIFwiP2NhbGxiYWNrXCIgc3Ry
aW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2UgXCI9P1wiIGZvciB0cmFuc2Zvcm1h
dGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28gZXhwbGljaXRseSBzZXQgdGhlIGpz
b25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsganNvbnA6IGZhbHNlLCBqc29ucENh
bGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9cbiAgICBqc29ucD86IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGZvciBh
IEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHJh
bmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGpRdWVyeS4gSXQgaXMgcHJlZmVy
YWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgYXMgaXQnbGwgbWFrZSBp
dCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQgcHJvdmlkZSBjYWxsYmFja3MgYW5k
IGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3BlY2lmeSB0aGUgY2FsbGJhY2sgd2hl
biB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIgY2FjaGluZyBvZiBHRVQgcmVxdWVz
dHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1c2UgYSBmdW5jdGlvbiBmb3IgdGhp
cyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBvZiBqc29ucENhbGxiYWNrIGlzIHNl
dCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uXG4gICAgICovXG4gICAganNv
bnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIG1pbWUgdHlwZSB0byBvdmVycmlk
ZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAg
IG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgcGFzc3dvcmQgdG8gYmUgdXNl
ZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhl
bnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQgaW4gdG8gdGhlIGRhdGEgb3B0aW9u
IGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5nIG90aGVyIHRoYW4gYSBzdHJpbmcp
IHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIGEgcXVlcnkgc3RyaW5nLCBm
aXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBcImFwcGxpY2F0aW9uL3gtd3d3LWZv
cm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgRE9NRG9jdW1lbnQsIG9yIG90
aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLlxuICAgICAq
L1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGxp
ZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMgdXNlZCAoZS5nLiwgY3Jvc3MtZG9t
YWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2NyaXB0XCIgZGF0YVR5cGUgYW5kIFwi
R0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIG9uIHRoZSBzY3JpcHQgdGFn
IHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUgY2hhcmFjdGVyIHNldCBvbiB0aGUg
bG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBvbiB0aGUgcmVtb3RlIHNjcmlw
dC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5kIGZ1bmN0aW9ucyB0byBiZSBjYWxs
ZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUuIGYgdGhlIHJl
cXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2RlIGZ1bmN0aW9ucyB0YWtlIHRoZSBz
YW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2s7IGlmIGl0IHJlc3VsdHMgaW4g
YW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0aGV5IHRha2UgdGhlIHNhbWUgcGFy
YW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAg
ICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxu
ICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBU
aGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1lbnRzOiBUaGUgZGF0YSByZXR1cm5l
ZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGRhdGFUeXBlIHBh
cmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3RhdHVzOyBhbmQgdGhlIGpxWEhSIChp
biBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QuIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVh
Y2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50
LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAgICAgKiBTZXQgYSB0aW1lb3V0IChp
biBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhpcyB3aWxsIG92ZXJyaWRlIGFueSBn
bG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgpLiBUaGUgdGltZW91dCBwZXJpb2Qg
c3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwgaXMgbWFkZTsgaWYgc2V2ZXJhbCBv
dGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBicm93c2VyIGhhcyBubyBjb25u
ZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHJlcXVlc3QgdG8gdGltZSBv
dXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkgMS40LnggYW5kIGJlbG93LCB0aGUg
WE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiB0aGUg
cmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2JqZWN0IG1lbWJlcnMgbWF5IHRocm93
IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHksIHNjcmlwdCBhbmQgSlNPTlAgcmVx
dWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVvdXQ7IHRoZSBzY3JpcHQgd2lsbCBy
dW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAgICAgKi9c
biAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUg
aWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBzdHlsZSBvZiBwYXJhbSBzZXJpYWxp
emF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwiUE9TVFwiIG9yIFwiR0VUXCIpLCBk
ZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAgcmVxdWVzdCBtZXRob2RzLCBzdWNo
IGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2VkIGhlcmUsIGJ1dCB0aGV5IGFyZSBu
b3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAgKi9cbiAgICB0eXBlPzogc3RyaW5n
O1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVybD86IHN0cmluZztcbiAgICAvKipc
biAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNw
b25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xu
ICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZvciBjcmVh
dGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZhdWx0cyB0byB0aGUgQWN0aXZlWE9i
amVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0cFJlcXVlc3Qgb3RoZXJ3aXNlLiBP
dmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGZvciBYTUxIdHRwUmVx
dWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3RvcnkuXG4gICAgICovXG4gICAgeGhyPzog
YW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBmaWVsZE5hbWUtZmllbGRWYWx1ZSBw
YWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0LiBGb3IgZXhhbXBsZSwgeW91IGNh
biB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0cnVlIGZvciBjcm9zcy1kb21haW4g
cmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0aGUgd2l0aENyZWRlbnRpYWxzIHBy
b3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0aXZlIFhIUiBhbmQgdGh1cyBDT1JT
IHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUgdGhpcyBmbGFnLiBGb3IgdGhpcyBy
ZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41LjErIHNob3VsZCB5b3UgcmVxdWly
ZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgeGhy
RmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5cbi8qXG4gICAgSW50ZXJmYWNl
IGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVhIUiBleHRlbmRzIFhN
TEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xuICAgIG92ZXJyaWRlTWltZVR5cGUo
bWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChzdGF0dXNUZXh0Pzogc3RyaW5nKTog
dm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgY2FsbGJhY2tcbiov
XG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFkZCguLi5jYWxsYmFja3M6IGFueVtd
KTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVtcHR5KCk6IGFueTtcbiAgICBmaXJl
KC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmlyZWQoKTogYm9vbGVhbjtcbiAgICBm
aXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIGhhcyhjYWxs
YmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFueTtcbiAgICBsb2NrZWQoKTogYm9v
bGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbn1cblxuLypcbiAg
ICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Agd2l0aCBub24talF1ZXJ5IHByb21p
c2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+IHtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4g
VSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFs
dWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFu
eSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxs
OiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86
IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgcHJvbWlz
ZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4g
ICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlz
Q2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6
IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFj
a3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJh
Y2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tz
OiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBh
bnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIC8vIERlcHJlY2F0ZWQgLSBnaXZl
biBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBmYWls
RmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0ZpbHRlcj86ICh4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNz
PzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAg
ICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxV
Piwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4u
cHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFu
eVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG5c
biAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNrXG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlb
XSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpR
dWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtd
KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55
W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBK
UXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlb
XSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55
W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIElu
dGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQcm9taXNlPFQ+IHtcbiAg
ICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXND
YWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tz
OiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxi
YWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2Fs
bGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3ND
YWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBub3RpZnkoLi4uYXJn
czogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBub3RpZnlXaXRoKGNvbnRleHQ6IGFu
eSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlamVjdCguLi5h
cmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlamVjdFdpdGgoY29udGV4dDog
YW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVzb2x2ZSh2
YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlKC4uLmFyZ3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdz
OiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0YXRlKCk6IHN0cmluZztcblxuICAg
IHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbn1cblxuLypcbiAgICBJ
bnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2YgdGhlIFczQyBldmVudCBvYmplY3Rc
biovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBFdmVudCB7XG4g
ICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBFbGVtZW50O1xuICAgIGlzRGVmYXVs
dFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRpYXRlUHJvcG9nYXRpb25TdG9wcGVk
KCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBu
YW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVsdCgpOiBhbnk7XG4gICAgcmVsYXRl
ZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtcbiAgICBzdG9wSW1tZWRpYXRlUHJv
cGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBwYWdl
WDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgd2hpY2g6IG51bWJlcjtcbiAgICBt
ZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCBl
eHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgYWx0S2V5OiBib29sZWFuO1xuICAg
IGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbiAgICBzaGlmdEtleTog
Ym9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QgZXh0ZW5kcyBK
UXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246IG51bWJlcjtcbiAgICBjbGllbnRY
OiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAg
ICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVy
O1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5ZOiBudW1iZXI7XG59XG5cbmludGVy
ZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qg
e1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVtYmVyO1xuICAgIGtleTogYW55O1xu
ICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBvcFN0YXRlRXZlbnRP
YmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAgIG9yaWdpbmFsRXZlbnQ6
IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVlcnlFdmVudE9iamVjdCBleHRlbmRz
IEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCwgSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3QsIEpRdWVyeVBvcFN0YXRlRXZlbnRP
YmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2YgcHJvcGVydGllcyBvZiB0aGUgY3Vy
cmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5U3VwcG9ydCB7XG4gICAgYWpheD86
IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xuICAgIGNoYW5nZUJ1YmJsZXM/OiBi
b29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xuICAgIGNoZWNrT24/OiBib29sZWFu
O1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0PzogYm9vbGVhbjtcbiAgICBocmVm
Tm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlhbGl6ZT86IGJvb2xlYW47XG4gICAg
bGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVDaGVja2VkPzogYm9vbGVh
bjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAgIG9wYWNpdHk/OiBib29sZWFuO1xu
ICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRTZWxlY3RlZD86IGJvb2xlYW47XG4g
ICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5bGU/OiBib29sZWFuO1xuICAgIHN1
Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5PzogYm9vbGVhbjtcbn1cblxuaW50ZXJm
YWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBzdHJpbmc7XG4gICAgKG9iajogYW55
LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJm
YWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMgKHdpdGggJC5FdmVudCkuIEl0IGlz
XG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBpbmxpbmUgaW4gSlF1ZXJ5U3RhdGlj
IHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1Y3Rpb24gZnVuY3Rpb24gd2l0aCBz
cGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lmaWMgZXZlbnQgb2JqZWN0cy5cbiAq
L1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ige1xuICAgIChuYW1lOiBzdHJpbmcs
IGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xuICAgIG5ldyAobmFt
ZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbn1c
blxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3BlY2lmeSBlYXNpbmcgZnVuY3Rpb25z
LlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAgICBsaW5lYXIocDogbnVtYmVyKTog
bnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLypcbiAgICBTdGF0
aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5kIGpRdWVyeSB0aGVtc2VsdmVzKVxu
Ki9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBh
biBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFq
YXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBz
ZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgo
c2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAg
KiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3Zh
bHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBh
cmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5h
amF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDogc3RyaW5nLCBzZXR0aW5ncz86IEpR
dWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBj
dXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBlYWNo
IHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFqYXgo
KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMgQW4gb3B0aW9uYWwgc3RyaW5nIGNv
bnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGRhdGFUeXBlc1xuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBB
amF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoZGF0YVR5cGVzOiBzdHJp
bmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdz
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEhhbmRs
ZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBl
YWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFq
YXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVm
YXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQ
cmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0
dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG5cbiAgICBhamF4U2V0dGlu
Z3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipcbiAgICAgICogU2V0IGRlZmF1bHQg
dmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRzIHVzZSBpcyBub3QgcmVjb21tZW5k
ZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0IG9mIGtleS92YWx1ZSBw
YWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4IHJlcXVlc3QuIEFsbCBvcHRpb25z
IGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNldHVwKG9wdGlvbnM6IEpRdWVyeUFq
YXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4
ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBU
aGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxs
aWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBn
ZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
R0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3
aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERl
ZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4g
ICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcg
dGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFy
YW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJl
cXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEg
ZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1s
LCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywg
ZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBp
ZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29k
ZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2gg
dGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBv
ciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAg
ICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQg
aWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmlu
ZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAq
IExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBmaWxlIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0ZSBpdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3JpcHQ6IHN0cmluZywgdGV4dFN0YXR1
czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG5cbiAgICBw
YXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
dXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBz
ZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBl
eGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMg
cHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0
OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAg
ICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcp
OiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0
cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAg
ICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRv
IHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNh
bGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
IFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhh
dCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVk
IGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwg
c2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRh
PzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhI
UjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAg
IC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1Qg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRh
VHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBA
cGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIu
IERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRt
bCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vz
cz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEEg
bXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIHBvd2Vy
ZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgZmxhZ3MgdGhhdCBjaGFu
Z2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4gICAgICovXG4gICAgQ2FsbGJhY2tz
KGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5cbiAgICAvKipcbiAgICAgKiBIb2xk
cyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVyeSdzIHJlYWR5IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlYWR5IGhvbGQg
aXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAgICovXG4gICAgaG9sZFJlYWR5KGhv
bGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBh
bnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgKG9iamVj
dDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSlF1ZXJ5O1xu
ICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAoZnVuYzogRnVuY3Rpb24pOiBKUXVl
cnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAgICAoKTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250cm9sIG9mIHRoZSAkIHZhcmlhYmxl
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBBIEJvb2xlYW4gaW5kaWNhdGluZyB3
aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxlcyBmcm9tIHRoZSBnbG9iYWwgc2Nv
cGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAgKi9cbiAgICBub0NvbmZsaWN0KHJl
bW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBh
IHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBv
YmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9u
b3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUg
RGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xu
ICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPltdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRl
IGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5
IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0
cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4u
ZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3Zp
ZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBt
b3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3lu
Y2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3Ig
bW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAg
ICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
blxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICBjc3NOdW1iZXI6
IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0cmFyeSBkYXRhIGFzc29jaWF0ZWQg
d2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNl
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3Nv
Y2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0
aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgZGF0
YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3Ry
aW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBuYW1l
ZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1l
bnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2Np
YXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhl
IHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVu
dCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBu
YW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVs
ZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1l
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNz
b2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50
KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJp
bmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4g
ICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4g
ICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JD
YWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShlbGVtZW50OiBFbGVtZW50
LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBEZWZlcnJl
ZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5RGVmZXJyZWQ8VD4pID0+IGFueSk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGZ4OiB7IHRpY2s6ICgp
ID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgpID0+IHZvaWQ7IHNwZWVkczogeyBz
bG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBib29sZWFuOyBzdGVwOiBhbnk7IH07
XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnks
IGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgcHJveHkoY29udGV4dDog
YW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuXG4gICAgRXZlbnQ6IEpR
dWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAgICBlcnJvcihtZXNz
YWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZXhwcjogYW55
O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cgd2Ugd2FudCB0byB0eXBlIHRoaXNc
biAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAgIHN1cHBvcnQ6
IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBjb250YWlucyhjb250YWlu
ZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBlYWNoKGNv
bGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IGFueSwgdmFsdWVPZkVsZW1l
bnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29sbGVjdGlvbjogSlF1ZXJ5LCBjYWxs
YmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogSFRNTEVsZW1lbnQp
ID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rpb246IFRbXSwgY2FsbGJhY2s6IChp
bmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IFQpID0+IGFueSk6IGFueTtcblxu
ICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG4gICAgZXh0ZW5k
KGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcblxuICAg
IGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4gICAgZ3JlcDxUPihhcnJheTogVFtd
LCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBib29s
ZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAgaW5BcnJheTxUPih2YWx1ZTogVCwg
YXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xuXG4gICAgaXNBcnJheShv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47
XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNOdW1lcmljKHZhbHVl
OiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xu
ICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1hNTERvYyhub2RlOiBOb2Rl
KTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFueSk6IGFueVtdO1xuXG4gICAgbWFw
PFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5B
cnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChhcnJheTogYW55LCBjYWxsYmFjazog
KGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTogYW55KSA9PiBhbnkpOiBhbnk7XG5c
biAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRbXSk6IFRbXTtcbiAgICBtZXJnZTxU
LFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107XG5cbiAgICBub29wKCk6IGFueTtc
blxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpTT04oanNvbjogc3RyaW5nKTogYW55
O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gWE1MIGRvY3VtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgdG8g
YmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0YTogc3RyaW5nKTogWE1MRG9jdW1l
bnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3
UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZztc
blxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAgICB1bmlxdWUoYXJyOiBhbnlbXSk6
IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gYXJyYXkg
b2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgSFRNTCBzdHJpbmcgdG8g
YmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9NIGVsZW1lbnQgdG8gc2VydmUgYXMg
dGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkXG4g
ICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8g
aW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBzdHJpbmdcbiAgICAgKi9cbiAgICBw
YXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRNTEVsZW1lbnQsIGtlZXBTY3JpcHRz
PzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9uKGVsZW06IGFueSwgcHJvcGVydGll
czogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBlYXNpbmc6IEpRdWVyeUVhc2luZztc
bn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1lbWJlcnNcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBsZXRlKGhhbmRsZXI6IGFueSk6IEpR
dWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNl
dHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFNl
bmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2Vw
dGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0YXJ0KGhhbmRsZXI6ICgpID0+
IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRp
bmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBsb2FkKHVy
bDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFueSk6IEpRdWVyeTtcblxuICAgIHNl
cmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJyYXkoKTogYW55W107XG5cbiAgICAv
LyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lczogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJyZW50Q2xhc3M6IGFueSkgPT4gc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5qcXVlcnkuY29tL2FkZEJhY2svXG4g
ICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuXG4gICAgYXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJp
bmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcs
IGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhdHRy
KG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBi
b29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAgaHRtbChodG1sU3RyaW5nOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDogKGluZGV4OiBudW1iZXIsIG9sZGh0
bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55O1xuICAgIHByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChtYXA6
IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCBmdW5jOiAoaW5k
ZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUNs
YXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAgICByZW1vdmVDbGFzcyhmdW5jOiAo
aW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZVByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b2dnbGVDbGFzcyhjbGFzc05h
bWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKHN3
dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhmdW5jOiAoaW5kZXg6IGFu
eSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHZhbCgpOiBh
bnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB2YWwo
ZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0
IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICov
XG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNl
dCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmlu
ZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1v
cmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAg
KiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9c
biAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBz
ZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9y
IG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4g
dGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24g
b2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMu
XG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBu
dW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZh
bHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5k
ZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBh
cyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1
ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IG51bWJlcik6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQg
b2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFu
IG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBzZXQuXG4gICAgICovXG4gICAgY3Nz
KHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAgIGhlaWdodCgpOiBudW1iZXI7XG4g
ICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KHZhbHVlOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQoKTogbnVtYmVyO1xuICAgIGlubmVy
SGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBpbm5lcldpZHRoKCk6IG51bWJl
cjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXQo
KTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xuICAgIG9mZnNldChjb29yZGluYXRl
czogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAoaW5kZXg6IGFueSwgY29vcmRzOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW4/OiBi
b29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZhbHVlOiBudW1iZXIsIGluY2x1ZGVN
YXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lu
PzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoKHZhbHVlOiBudW1iZXIsIGluY2x1
ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgcG9zaXRpb24oKTogeyB0b3A6IG51
bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xsTGVmdCgpOiBudW1iZXI7XG4gICAg
c2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgc2Nyb2xsVG9wKCk6IG51
bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHdpZHRo
KCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHdpZHRo
KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgoZnVuYzogKGluZGV4OiBhbnksIGhl
aWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEYXRhXG4gICAgY2xlYXJRdWV1
ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBkYXRhKGtleTogc3RyaW5nLCB2
YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuICAgIGRlcXVldWUo
cXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShuYW1lT3JMaXN0
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBwcm9taXNlKHR5cGU/OiBh
bnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIC8vIEVmZmVjdHNc
biAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGNvbXBsZXRlPzog
RnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4g
ICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IHsgZHVyYXRpb24/OiBhbnk7IGVh
c2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsgc3RlcD86IEZ1bmN0aW9uOyBxdWV1
ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0pOiBKUXVlcnk7XG5cbiAgICBkZWxh
eShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBm
YWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVJ
bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVt
YmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwg
b3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgpOiBKUXVlcnk7XG5cbiAgICBoaWRl
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBoaWRlKGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2hv
dyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVVcChk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVVcChkdXJh
dGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxu
ICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0Vu
ZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzog
c3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoc2hvd09ySGlkZTog
Ym9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xuICAgIGJpbmQoZXZlbnRUeXBlOiBz
dHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBl
dmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5k
KGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIGJsdXIoaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJsdXIo
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjaGFu
Z2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNoYW5nZSgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hh
bmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwi
Y2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNsaWNrKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vz
aW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1
c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzaW4oZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywg
dG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgYW5kIGxlYXZlcyB0
aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlckluIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyB0aGUgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91
c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxl
ckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnksIGhhbmRsZXJPdXQ6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMs
IHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0
aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlckluT3V0IEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhl
IGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluT3V0OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwiXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVzc1wiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNz
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5dXBc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXVwKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
a2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChl
dmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91
c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWVudGVyXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50
ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVu
IHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2
ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vt
b3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91dFwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdmVy
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92
ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgb2Zm
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1
Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5c
biAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhl
IG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5k
bGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNs
eSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5c
biAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yPzogc3RyaW5nLCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5k
IG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNr
XCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUg
ZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihl
dmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVy
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qgd2hlcmUgdGhlIHN0cmlu
ZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBoYW5kbGVy
IGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICog
QHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3Jp
Z2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4g
ICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVl
IGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0
IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJhbWV0ZXIgYXJncyBpcyBmb3Igb3B0
aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRyaWdnZXIoKS4gTm90ZSB0aGF0IHRo
ZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBtdXN0IGJl
IG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czog
c3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0LCAuLi5hcmdz
OiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVu
dCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMg
XCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMg
bnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJl
YWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZh
bHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNp
bXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywg
c2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5k
bGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1l
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBl
bGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBv
ciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMg
dGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNz
ZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxu
ICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBh
bnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyBy
ZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9y
IGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0
IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0
byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9j
Y3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBz
ZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0
dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIg
aXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3Jl
IEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwi
IG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5k
bGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVk
IGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0
IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20g
ZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgZGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0
aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxl
bWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9y
IG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2Vz
LCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFy
YW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBv
ZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNl
bGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQg
d2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRo
ZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rp
b24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEg
aGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVj
dXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBl
cyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3du
Lm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRv
IGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJp
Z2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBl
dmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxl
bWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxl
ciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEg
ZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25l
KGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4g
VGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVu
dCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2gg
dGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZl
bnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2Vu
dCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAg
ICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2Vu
ZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVy
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdh
eXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBA
cGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRh
IHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHsgW2tleTog
c3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywgZGF0YT86IGFueSk6IEpRdWVyeTtc
blxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlzIHJlYWR5LlxuICAgICAqL1xuICAg
IHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHJl
c2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3QoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJtaXRcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczog
YW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpOiBK
UXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQ
YXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVuYmluZChldmVudFR5cGU/OiBzdHJp
bmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBmbHM6IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgdW5kZWxlZ2F0ZSgpOiBK
UXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50czogYW55KTogSlF1ZXJ5O1xu
ICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB1bmxvYWQo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAg
ICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3RyaW5nO1xuXG4gICAgZXJyb3IoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFu
eVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10sIG5hbWU6IGFueSwg
YXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNYW5pcHVsYXRpb25cbiAgICBhZnRl
ciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZnRlcihmdW5jOiAoaW5kZXg6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1
ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIGJlZm9y
ZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBiZWZvcmUoZnVuYzogKGluZGV4OiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdpdGhEYXRhQW5kRXZlbnRzPzogYm9v
bGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIGRl
dGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGVtcHR5KCk6IEpRdWVyeTtcblxu
ICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuICAgIGluc2VydEJlZm9yZSh0
YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQoLi4uY29udGVudDogYW55W10pOiBK
UXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlQWxsKHRhcmdldDog
YW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVuYzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiBhbnkpOiBKUXVlcnk7XG4g
ICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtdO1xuXG4gICAgdW53cmFwKCk6IEpR
dWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3Jh
cChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcEFsbCh3cmFw
cGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBJbm5lcih3cmFwcGluZ0VsZW1l
bnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBlYWNoKGZ1bmM6IChpbmRl
eDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBnZXQoaW5kZXg/
OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1iZXI7XG4gICAgaW5kZXgoc2VsZWN0
b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVtZW50OiBhbnkpOiBudW1iZXI7XG5c
biAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgc2VsZWN0b3I6IHN0
cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4OiBudW1iZXJdOiBIVE1MRWxlbWVu
dDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2VsZWN0b3I6IHN0cmluZywgY29udGV4
dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xu
ICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkKG9iajogSlF1ZXJ5KTogSlF1
ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9z
ZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3Ry
aW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KG9iajogSlF1ZXJ5
KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGNsb3Nl
c3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50KTogYW55W107XG5cbiAgICBjb250
ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5O1xuXG4gICAgZXEoaW5kZXg6IG51
bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRl
cihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKG9iajogSlF1ZXJ5KTogSlF1ZXJ5
O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbmQoZWxlbWVu
dDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBm
aXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xuXG4gICAgaXMoc2VsZWN0b3I6IHN0
cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IGJvb2xl
YW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtcbiAgICBpcyhvYmo6IEpRdWVyeSk6
IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxuICAgIG1hcChjYWxsYmFjazogKGlu
ZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG5l
eHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0QWxsKHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0
ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKG9iaj86IEpRdWVyeSwgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgbm90
KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5c
biAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50KHNlbGVjdG9yPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldlVudGls
KHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJldlVu
dGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJl
dlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2li
bGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzbGljZShzdGFydDogbnVt
YmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAvLyBVdGlsaXRpZXNcblxuICAgIHF1
ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKHF1ZXVlTmFtZTogc3Ry
aW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbiAgICBxdWV1ZShuZXdRdWV1
ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xhcmUgbW9kdWxlIFwianF1ZXJ5XCIg
e1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBqUXVlcnk6IEpRdWVyeVN0YXRpYztc
bmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxpYnMvYW5ndWxhci9hbmd1bGFyLmQu
dHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIgSlMgMS4wXG4vLyBQcm9qZWN0OiBo
dHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMgYnk6IERpZWdvIFZpbGFyIDxodHRw
Oi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHVi
LmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuXG5cbmRlY2xhcmUgdmFyIGFuZ3Vs
YXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0IGZvciBwYWlubGVzcyBkZXBlbmRl
bmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAkaW5qZWN0OnN0cmluZ1td
O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBuZyBtb2R1bGUgKGFuZ3VsYXIuanMp
XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1vZHVsZSBuZyB7XG5cbiAgICAvLyBB
bGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNlXG4gICAgaW50ZXJmYWNl
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBhbnk7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRpY1xuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQoY29udGV4dDogYW55LCBmbjogRnVu
Y3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4gICAgICAgIGJvb3RzdHJhcChlbGVt
ZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAg
ICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9kdWxlcz86IGFueVtdKTogYXV0by5J
SW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogRWxlbWVudCwgbW9k
dWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAo
ZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGluYXRpb24/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0aWM7XG4gICAgICAgIGVxdWFscyh2
YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBleHRlbmQoZGVzdGlu
YXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7XG4gICAgICAgIGZvckVhY2gob2Jq
OiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IGFueSwgY29udGV4dD86
IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjogc3RyaW5nKTogYW55O1xuICAgICAg
ICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKG1vZHVsZXM/OiBh
bnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgaXNBcnJheSh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRWxlbWVudCh2YWx1
ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzT2Jq
ZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1N0cmluZyh2YWx1ZTogYW55KTog
Ym9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgLyoqIGNvbnN0cnVj
dCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZpY2lhbCBkb2NzOiBJbnRlcmZhY2Ug
Zm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0XHRzZWU6IGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0Ki9cbiAgICAgICAgbW9kdWxlKFxu
ICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUgeW91IHdhbnQgdG8gY3JlYXRlICov
XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAvKiogbmFtZSBvZiBtb2R1
bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAgIHJlcXVpcmVzPzogc3RyaW5nW10s
XG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6IElNb2R1bGU7XG4gICAgICAgIG5v
b3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0b0pzb24ob2JqOiBhbnksIHByZXR0
eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVyY2FzZShzdHI6IHN0cmluZyk6IHN0
cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgZnVsbDogc3RyaW5nO1xuICAg
ICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbm9yOiBudW1iZXI7XG4gICAg
ICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNvZGVuYW1lOiBzdHJpbmc7XG4gICAg
ICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTW9kdWxlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElNb2R1bGUge1xuICAgICAgICBh
bmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0
aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihvYmplY3Q6IE9iamVjdCk6
IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0
VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9y
bWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhjb25maWdGbjog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZp
Y2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRv
IGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWco
aW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29uc3Rh
bnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgY29uc3RhbnQo
b2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmlu
ZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGNv
bnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10p
OiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVjdCA6IE9iamVjdCk6IElNb2R1bGU7
XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgaW5saW5lQW5u
b3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG9iamVj
dDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZp
Y2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4g
ICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIo
bmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFu
eVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtc
biAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIGlu
bGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGluaXRpYWxpemF0aW9u
RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgc2Vydmlj
ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1
bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICB2
YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAgLy8gUHJvcGVydGllc1xuICAgICAg
ICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBzdHJpbmdbXTtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVz
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdHRyaWJ1dGVzIHtcblx0
Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHNjb3BlZCBhdHRy
aWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8gYmVjYXVzZSB5b3UgaGF2ZSB0byB1
c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9vIGJ1dCBJIGRvbid0IGtub3cgb2Yg
YSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBsaW1pdGVkIHRvIHJldHVy
biBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVtOiBodHRwOi8vc3RhY2tvdmVyZmxv
dy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0cmluZ106IGFueTtcblxuICAgICAg
ICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBw
YXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVu
YWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gZm9y
IHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENsYXNzKGNsYXNzVmFsOiBzdHJpbmcp
OiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZp
ZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZVxuICAgICAgICAvLyBlbGVtZW50
LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJp
Z2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVtb3ZhbC5cbiAgICAgICAgJHJlbW92
ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFNldCBET00gZWxl
bWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFuIGludGVycG9sYXRlZCBhdHRyaWJ1
dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25j
ZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAvLyBmb2xsb3dpbmcgY29tcGlsYXRp
b24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIgdGhlXG4gICAgICAgIC8v
IGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAkb2JzZXJ2ZShuYW1lOiBzdHJp
bmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgLy8gQSBtYXAg
b2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3JtYWxpemVkIG5hbWUuIFRo
aXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVyc2UgbG9va3VwIGZyb20gbm9ybWFs
aXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAgICAgICRhdHRyOiBPYmplY3Q7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRm9ybUNvbnRyb2xsZXJcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOmZvcm0u
Rm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZv
cm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGly
dHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6
IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkYWRkQ29udHJvbChjb250
cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkcmVtb3ZlQ29udHJv
bChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkc2V0RGly
dHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOm5nTW9kZWwuTmdNb2Rl
bENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU5nTW9k
ZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2b2lkO1xuICAgICAgICAkc2V0VmFs
aWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lk
O1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2aWV3VmFsdWUgYW5kIG1vZGVsVmFs
dWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAgIC8vIHR5cGVzIGRvIHdvcmsgYW5k
IGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAkc2V0Vmlld1ZhbHVlKHZhbHVlOiBh
bnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7XG5cbiAgICAgICAgJG1vZGVsVmFs
dWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVsUGFyc2VyW107XG4gICAgICAgICRm
b3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAg
ICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAg
ICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0dGVyIHtcbiAgICAgICAgKHZhbHVl
OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2Nv
cGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29w
ZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU2NvcGUge1xu
ICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiBzdHJpbmcpOiBhbnk7
XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBhbnk7XG5cbiAg
ICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJF
dmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAgICAgICAgJGRpZ2VzdCgpOiB2b2lk
O1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJF
dmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBi
dXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsKGV4cHJl
c3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtcbiAgICAgICAgJGV2YWwoZXhwcmVz
c2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86IE9iamVjdCk6IGFueTtcblxuICAg
ICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGlt
cGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjog
c3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiAoc2NvcGU6IElT
Y29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZSBieSB0
aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lcbiAgICAgICAgJG5ldyhpc29sYXRl
PzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24obmFtZTogc3RyaW5nLCBsaXN0ZW5l
cjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogRnVuY3Rp
b247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86
IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3
YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwg
b2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJv
b2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3Bl
OiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9v
bGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6
IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55
LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0
aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcs
IGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkg
PT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNz
aW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9s
ZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAg
ICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51bWJlcjtcblxuICAgICAgICAvLyBI
aWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5kaW5nczogYW55O1xuICAgICAgICAk
JHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyRXZlbnQge1xuICAg
ICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBjdXJyZW50U2NvcGU6IElTY29wZTtc
biAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogRnVuY3Rpb247
XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gQXZhaWxh
YmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRcbiAgICAgICAgc3RvcFByb3BhZ2F0
aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
V2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElXaW5kb3dT
ZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1bWVudGVkLCBzbyB3ZSBuZWVkIHRv
IGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk/OiBudW1i
ZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNl
bChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rp
b24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4p
OiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6
IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmlsdGVy
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmls
dGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJQ
cm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRmlsdGVyU2Vy
dmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeTogRnVuY3Rpb24pOiBJU2Vy
dmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExv
Y2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYWxlU2Vy
dmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgICAgLy8gVGhlc2UgYXJlIG5vdCBk
b2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIncyBpMThuIGZpbGVzIGZvciBleGVt
cGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0
b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2Ny
aXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55KSA9PiBzdHJpbmc7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAg
REVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBfU0VQOiBzdHJpbmc7XG4gICAgICAg
IFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3JbXTtcbiAgICAgICAgQ1VS
UkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJQ
YXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDogbnVtYmVyO1xuICAgICAgICBtaW5G
cmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJlcjtcbiAgICAgICAgcG9zUHJlOiBz
dHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAgICAgICBuZWdQcmU6IHN0cmluZztc
biAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdTaXplOiBudW1iZXI7XG4gICAgICAg
IGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlRGF0ZVRpbWVG
b3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBTSE9S
VE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRE
QVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5nW107XG4gICAgICAgIG1lZGl1bTog
c3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAgICAgICBmdWxsRGF0ZTogc3RyaW5n
O1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1EYXRlOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1UaW1lOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
TG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2FsbDtcbiAgICAgICAgZXJyb3I6IElM
b2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAgICAgICAgbG9nOiBJTG9nQ2FsbDtc
biAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4gICAgLy8gV2UgZGVmaW5lIHRoaXMg
YXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9wZW4gaXQgbGF0ZXIgZm9yXG4gICAg
Ly8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNlIElMb2dDYWxsIHtcbiAgICAgICAg
KC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElQ
YXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjogc3RyaW5nKTogSUNvbXBpbGVkRXhw
cmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVkRXhwcmVzc2lvbiB7XG4g
ICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcblxuICAgICAgICAvLyBJ
ZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBpcyBnb25uYSBiZSB1c2VkIHNpbmNl
IHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCBjaGVjayB0aGUgcGFyYW1l
dGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0ZW5jeS4gSWYgY29uc3VtZXJcbiAg
ICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNzIHRoZSB1bmRlZmluZWQgdmFsdWUg
ZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6IGFueSwgdmFsdWU6IGFueSk6IGFu
eTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhdGlvblNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9u
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblBy
b3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGV2X2d1
aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJzVXJsKCk6IHN0cmluZztcbiAgICAg
ICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3SGFzaDogc3RyaW5nKTogSUxvY2F0
aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgoKTogc3Ry
aW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90b2NvbCgpOiBzdHJpbmc7XG4gICAg
ICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKCk6IGFueTtc
biAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFyYW1ldGVyVmFsdWU6IGFueSk6IElM
b2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJpbmc7XG4gICAgICAgIHVybCh1cmw6
IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2Nh
dGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGhhc2hQcmVm
aXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHByZWZpeDogc3RyaW5nKTogSUxvY2F0
aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBib29sZWFuO1xuXG4gICAgICAgIC8v
IERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVyIGlzIHN0cmluZywgYnV0XG4gICAg
ICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJvb2xlYW4sIHdoaWNoIG1ha2VzIG1v
cmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHRvZ2dsZXJcbiAgICAgICAgaHRt
bDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50U2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9jdW1lbnRcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2VydmljZSBleHRlbmRzIERvY3VtZW50
IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFeGNlcHRpb25IYW5kbGVyU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZXhjZXB0
aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRXhjZXB0
aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0aW9uOiBFcnJvciwgY2F1c2U/OiBz
dHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJv
b3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7fVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVFT
ZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJvbWlzZTxhbnk+W10pOiBJUHJvbWlz
ZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZlcnJlZDxUPjtcbiAgICAgICAgcmVq
ZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xuICAgICAgICB3aGVuPFQ+KHZhbHVl
OiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElQcm9taXNlPFQ+IHtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQp
ID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNl
VmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjog
YW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHBy
b21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21p
c2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVh
c29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xu
ICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElQcm9t
aXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+
KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCk6IElQcm9taXNlPFRSZXN1bHQ+
O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxseUNhbGxiYWNrOiAoKT0+YW55KTpJ
UHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSURlZmVycmVkPFQ+IHtc
biAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xuICAgICAgICByZWplY3QocmVhc29u
PzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRlPzphbnkpOiB2b2lkO1xuICAgICAg
ICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xuICAgICAgICAoKTogdm9pZDtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZp
Y2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Nyb2xsaW5nKCk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ2FjaGVGYWN0b3J5U2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY2FjaGVGYWN0b3J5
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDYWNoZUZhY3RvcnlTZXJ2
aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUgb3B0aW9uc01hcCB0byBoYXZlIHRo
ZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGl0J3MgdGhlIE9OTFkg
b3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvZGF5LCBhIGNvbnN1bWVy
XG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGFzc29jaWF0ZSBzb21lIG90aGVy
IG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgICAgLy8oY2FjaGVJZDogc3RyaW5n
LCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogQ2FjaGVPYmplY3Q7XG4gICAg
ICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0p
OiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9kcyBiZWxsb3cgYXJlIG5vdCBkb2N1
bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAgICBnZXQgKGNhY2hlSWQ6IHN0cmlu
Zyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNhY2hlT2JqZWN0IHtc
biAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAg
c2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3QgZ2FyYW50ZWVkIHRvIGhhdmUsIHNp
bmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAgICAgICAgICAgLy9jYXBhY2l0eTog
bnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5OiBzdHJpbmcsIHZhbHVlPzogYW55
KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6IGFueTtcbiAgICAgICAgcmVtb3Zl
KGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlQWxsKCk6IHZvaWQ7XG4gICAgICAg
IGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50OiBzdHJpbmcsIHRyYW5zY2x1ZGU/
OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBs
YXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCwgdHJhbnNjbHVk
ZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVt
cGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBKUXVlcnksIHRyYW5zY2x1
ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRl
bXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZVBy
b3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1l
OiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSUNvbXBpbGVQcm92aWRlcjtc
blxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBpcyB0aGVyZS4uLlxuICAgICAgICBk
aXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBpbGVQcm92aWRlcjtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uIHtcbiAgICAgICAgLy8gTGV0
J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4ncyBzaWduYXR1cmVcbiAgICAgICAg
KHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xvbmVkRWxlbWVudD86IEpRdWVyeSwg
c2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyU2VydmljZSB7XG4gICAgICAgIC8v
IEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc3RhdGUgdGhpcywgbG9jYWxzIGFy
ZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9j
YWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxlck5hbWU6IHN0cmluZywgbG9jYWxz
PzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29udHJvbGxlclByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmlu
ZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgIHJlZ2lz
dGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6
IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBTZXJ2aWNlIHtcbiAgICAg
ICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3QgYmUgcHJvdmlkZWQuLi5cbiAgICAg
ICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAg
Z2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0
dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/
OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAganNvbnAodXJsOiBzdHJpbmcsIFJl
cXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcG9zdCh1cmw6
IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZp
ZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQgaXQgaXMgZG9jdW1lbnRlZCBhcyBw
dWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0czogYW55W107XG4gICAgfVxuXG4g
ICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAgIC8vIFNvbWUgb3BldGlvbnMgbWln
aHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3QuXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwI1VzYWdlIGZvciBvcHRpb25z
IGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVzdENvbmZpZyB7XG4gICAgICAgIG1l
dGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgcGFyYW1zPzogYW55
O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24gc3RydWN0dXJlLi4uICBwZXJoYXBz
IHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxuICAgICAgICBoZWFkZXJzPzogYW55
O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29s
ZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0aXBsZSB0eXBlcywgc28gbGV0J3Mg
ZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9y
bVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNlPzogYW55O1xuICAgICAg
ICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNlXG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAgICAgKGRhdGE6IFQsIHN0YXR1czog
bnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmcsIGNvbmZpZzog
SVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBUO1xuICAgICAgICBzdGF0dXM/OiBu
dW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7
XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHN1Y2Nlc3Mo
Y2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAg
ICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21p
c2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6
IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzog
KHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8
VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9u
c2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJy
b3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFu
eSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb3Zp
ZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVz
dENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICAgICAgcmVzcG9uc2VJ
bnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8g
dXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAgICAgIC8vIFhYWCBQZXJoYXBzIGRl
ZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAobWV0aG9kOiBz
dHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uLCBoZWFk
ZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuKTog
dm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnBvbGF0
ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGlu
dGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRp
bnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4dDogc3RyaW5nLCBtdXN0SGF2ZUV4
cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25GdW5jdGlvbjtcbiAgICAgICAgZW5k
U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uIHtcbiAgICAgICAgKGNvbnRl
eHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgc3RhcnRTeW1ib2woKTog
c3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRl
UHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIGVuZFN5bWJv
bCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNoZVNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRlbXBsYXRlQ2FjaGVcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlIGV4dGVu
ZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290
U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RT
Y29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpbnRlcmZhY2UgSVNDRVNlcnZp
Y2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFu
eTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEh0
bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSnModmFsdWU6IGFueSk6IGFueTtc
blx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVz
dGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2UodHlwZTogc3RyaW5nLCBleHByZXNz
aW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBh
cnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkp
ID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDog
YW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNKcyhleHByZXNzaW9uOiBzdHJp
bmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNSZXNv
dXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkg
PT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6
IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0
QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNSZXNvdXJjZVVybCh2YWx1ZTogYW55
KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRpc0VuYWJsZWQo
KTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFUHJv
dmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VQcm92aWRl
ciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBlbmFibGVkKHZhbHVlOiBib29s
ZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VE
ZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElT
Q0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5
QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxu
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVByb3ZpZGVyXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0
ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlc291cmNlVXJs
QmxvY2tsaXN0KGJsb2NrbGlzdDogYW55W10pOiB2b2lkO1xuICAgICAgICByZXNvdXJjZVVybEFs
bG93bGlzdChhbGxvd2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmVcbiAgICAvLyBhbmQgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3RpdmVcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xuICAgICAgICBjb21waWxlPzpcbiAg
ICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIHRlbXBsYXRlQXR0
cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0cmFuc2NsdWRlOiAoc2NvcGU6IElT
Y29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2b2lkXG4gICAgICAgICAgICApID0+
IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAgICAgICAgY29udHJvbGxlckFzPzog
c3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAgIChzY29wZTogSVNjb3BlLFxuICAg
ICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAgICAgICAgICBpbnN0YW5jZUF0dHJp
YnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29udHJvbGxlcjogYW55XG4gICAgICAg
ICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHByaW9yaXR5
PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAgICAgICAgcmVxdWlyZT86
IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4gICAgICAgIHNjb3BlPzogYW55O1xu
ICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGVVcmw/OiBhbnk7XG4gICAg
ICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJhbnNjbHVkZT86IGFueTtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhbmd1bGFyLmVsZW1lbnRcbiAgICAv
LyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1bGFyIHJldHVybnMgYSBqUXVlcnkg
b2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBsaWtlIGUu
Zy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1
bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF1Z21l
bnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRpYyB7XG4gICAgICAgIChzZWxlY3Rv
cjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVs
ZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiB7fSk6
IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAg
IChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoKTogSUF1Z21lbnRl
ZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeSBleHRlbmRz
IEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywgaG93IHRvIGRlZmluZT9cbiAgICAg
ICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IElBdWdtZW50
ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7XG5cbiAgICAgICAg
Y29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKCk6IGFueTtc
biAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5OiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEob2JqOiB7
IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShr
ZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
ICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
ICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICAgICAgICAgIGFubm90YXRlKGZu
OiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAgYW5ub3RhdGUoaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAgICAgICAgICBnZXQgKG5hbWU6IHN0
cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRlKHR5cGVDb25zdHJ1Y3RvcjogRnVu
Y3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShpbmxpbmVBbm5v
dGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoZnVuYzogRnVu
Y3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgfVxuXG4g
ICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFByb3ZpZGVTZXJ2aWNlXG4gICAgICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRwcm92aWRlXG4gICAg
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJUHJvdmlkZVNlcnZpY2Uge1xu
ICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0IHJldHVybnMgdGhlIHJlZ2lzdGVy
ZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAgIC8vIGNvbnN0YW50KG5hbWU6IHN0
cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJp
bmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICAgICAgZGVjb3JhdG9yKG5h
bWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgICAgICBm
YWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBu
Zy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlu
bGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBuZy5JU2VydmljZVByb3Zp
ZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0
cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQ
cm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBjb25zdHJ1Y3Rvcjog
RnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgdmFsdWUobmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgfVxuXG4g
ICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3Vz
ZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9JdGVtIHtcbiAgICAgICAgY29uc3Ry
dWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgICAgIHB1
YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICkgeyB9XG4gICAgfVxufVxuLy8g
aW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRl
cmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7XG5cdFx0dG9kb3M6IFRvZG9JdGVt
W107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRlZFRvZG86IFRvZG9JdGVtO1xuXHRc
dG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWluaW5nQ291bnQ6IG51bWJlcjtcblx0
XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2VkOiBib29sZWFuO1xuXHRcdHJldmVy
dGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBjb21wbGV0ZWQ/OiBib29sZWFuIH07
XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7XG5cdFx0dm06IFRvZG9DdHJsO1xu
XHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xu
XHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5cdFx0Z2V0ICgpOiBUb2RvSXRlbVtd
O1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1cbn0vLyBkaXJlY3RpdmVzL1RvZG9G
b2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAq
IERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVk
IHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVhdGVzIHRvIHRydWUuXG5c
dCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0OiBuZy5JVGltZW91dFNl
cnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29w
ZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRc
dFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0ZvY3VzLCBuZXd2YWwgPT4ge1xuXHRc
dFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0aW1lb3V0KCgpID0+IGVsZW1lbnRb
MF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9
XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0ID0gWyckdGltZW91dCddO1xuXG59
Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3Ry
aWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0aGF0IGV4ZWN1dGVzIGFuIGV4cHJl
c3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxvc2VzIGZvY3VzLlxuICAg
ICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigpOiBuZy5JRGlyZWN0aXZlIHtcbiAg
ICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxl
bWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVt
ZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvQmx1
cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBl
bGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAg
ICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0
J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkgPSAyNztcblxuXHQvKipcblx0ICog
RGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9kbyBpZiB0aGUgdXNlciBwcmVzc2Vz
IHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Fc2NhcGUoKTogbmcu
SURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29w
ZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0ZWxlbWVu
dC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNv
ZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoYXR0cmlidXRl
cy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdCRzY29w
ZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgna2V5ZG93bicpOyB9KTtc
blx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNlcy9Ub2RvU3RvcmFnZS50c1xuXG5t
b2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIFNlcnZp
Y2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9tIGxvY2FsU3RvcmFnZS5c
biAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3JhZ2UgaW1wbGVtZW50cyBJVG9kb1N0
b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzLXR5cGVzY3Jp
cHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7XG4gICAgICAgICAgICByZXR1cm4g
SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQpIHx8ICdbXScp
O1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBUb2RvSXRlbVtdKSB7XG4gICAgICAg
ICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQsIEpTT04uc3RyaW5naWZ5
KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29udHJvbGxlcnMvVG9kb0N0cmwudHNc
blxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWFp
biBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjpcblx0ICogLSByZXRyaWV2
ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRvZG9TdG9yYWdlIHNlcnZpY2Vcblx0
ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxhdGUgYW5kIHByb3ZpZGVzIGV2ZW50
IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9kb0N0cmwge1xuXG5cdFx0cHJpdmF0
ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmplY3QgYW5ub3RhdGlvbi5cblx0XHQv
LyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNp
ZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3RvclxuXHRcdC8vIGl0IGlzIGJldHRlciB0
byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3RvciwgYmVjYXVzZSB0aGUgcGFyYW1ldGVy
cyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRcdC8vIFNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xuXHRc
dFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0XHRcdCd0b2RvU3RvcmFnZScsXG5c
dFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQvLyBkZXBlbmRlbmNpZXMgYXJlIGlu
amVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0Ly8gY29udHJvbGxlcidzIG5hbWUg
aXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQgc3BlY2lmaWVkIGZyb20gbmctY29u
dHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRcdGNvbnN0cnVjdG9yKFxuXHRcdFx0
cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRwcml2YXRlICRsb2NhdGlvbjogbmcu
SUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9kb1N0b3JhZ2U6IElUb2RvU3RvcmFn
ZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnRvZG9z
ID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7XG5cblx0XHRcdCRzY29wZS5uZXdU
b2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cblx0XHRcdC8vICd2
bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFkZGluZyBhIHJlZmVyZW5jZSB0byB0
aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8vIGZvciBpdHMgbWV0aG9kcyB0byBi
ZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRcdCRzY29wZS52bSA9IHRoaXM7XG5c
blx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdlcyBpbiBzY29wZSwgd2hpY2ggYXJl
IGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8vIGlmIHlvdSBzdWJzY3JpYmUgdG8g
c2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIgdGhhbiB0aGlzIGNvbnRyb2xsZXIs
IG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQkc2NvcGUuJHdhdGNoKCd0b2Rvcycs
ICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRcdCRzY29wZS4kd2F0Y2goJ2xvY2F0
aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0aCkpXG5cblx0XHRcdGlmICgkbG9j
YXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgoJy8nKTtcblx0XHRcdCRzY29wZS5s
b2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRvblBhdGgocGF0aDogc3RyaW5nKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0aCA9PT0gJy9hY3RpdmUnKSA/
XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09ICcvY29tcGxldGVkJykg
P1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307XG5cdFx0fVxuXG5cdFx0b25Ub2Rv
cygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50ID0gdGhpcy5maWx0ZXJGaWx0
ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0aDtcblx0XHRcdHRoaXMu
JHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3RoIC0gdGhpcy4kc2NvcGUucmVtYWlu
aW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVja2VkID0gIXRoaXMuJHNjb3BlLnJl
bWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdlLnB1dCh0aGlzLnRvZG9zKTtcblx0
XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5ld1RvZG8gOiBzdHJpbmcgPSB0aGlz
LiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICghbmV3VG9kby5sZW5ndGgpIHtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZG9zLnB1c2gobmV3IFRvZG9J
dGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRzY29wZS5uZXdUb2RvID0gJyc7XG5c
dFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRz
Y29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRcdC8vIENsb25lIHRoZSBvcmlnaW5h
bCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQuXG5cdFx0XHR0aGlzLiRzY29wZS5v
cmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kb0l0ZW0pO1xuXHRcdH1cblxuXHRc
dHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvc1t0aGlz
LnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbztcblx0
XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRkb25lRWRpdGlu
Zyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSBu
dWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gbnVsbDtcblx0XHRcdGlmICh0
aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBUb2RvIGVkaXRzIHdlcmUgcmV2ZXJ0
ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gbnVsbDtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0ZW0udGl0bGUgPSB0b2RvSXRlbS50
aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRpdGxlKSB7XG5cdFx0XHRcdHRoaXMu
cmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVtb3ZlVG9kbyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3Muc3BsaWNlKHRoaXMudG9kb3Mu
aW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRcdGNsZWFyRG9uZVRvZG9zKCkge1xu
XHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIo
dG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5cdFx0fVxuXG5cdFx0bWFya0FsbChj
b21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9kb3MuZm9yRWFjaCh0b2RvSXRlbSA9
PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsgfSk7XG5cdFx0fVxuXHR9XG5cbn1c
bi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1haW4gVG9kb01WQyBhcHAgbW9kdWxl
LlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAqL1xubW9kdWxlIHRvZG9zIHtcbiAg
ICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9IGFuZ3VsYXIubW9kdWxlKCd0b2Rv
bXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcigndG9kb0N0cmwnLCBUb2RvQ3RybClc
biAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgdG9kb0JsdXIpXG4gICAgICAgICAg
ICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMpXG4gICAgICAgICAgICAuZGlyZWN0
aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAgICAgICAgIC5zZXJ2aWNlKCd0b2Rv
U3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKIAogLyoqKi8gfSksCiAvKiA0MTUgKi8KIC8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSAiLy8g
ICAgIFVuZGVyc2NvcmUuanMgMS44LjNcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xu
Ly8gICAgIChjKSAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJ
bnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBi
ZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24o
KSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBF
c3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4
cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuXG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRo
ZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRl
cnNjb3JlID0gcm9vdC5fO1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQg
bm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBl
LCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3Rv
dHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQg
YWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9
IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGlj
ZSxcbiAgICB0b1N0cmluZyAgICAgICAgID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3du
UHJvcGVydHkgICA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFT
Y3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRv
IHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAg
ICAgID0gQXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5
cyxcbiAgICBuYXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVD
cmVhdGUgICAgICAgPSBPYmplY3QuY3JlYXRlO1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVy
ZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5j
dGlvbigpe307XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2Nv
cmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
aWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5j
ZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9
O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3
aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClg
IEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwg
b2JqZWN0LlxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYg
KHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAg
ICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBf
O1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNp
b24uXG4gIF8uVkVSU0lPTiA9ICcxLjguMyc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhh
dCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAv
LyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4g
b3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVu
Y3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9p
ZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJn
Q291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2Ug
MjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIHZhbHVlLCBvdGhlcik7XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1
cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBm
dW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4g
ICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBj
b2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0
b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1
cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVu
dHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8g
Z2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVt
ZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0
aGVyXG4gIC8vIGlkZW50aXR5LCBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0
Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUs
IGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlk
ZW50aXR5O1xuICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2
YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0
dXJuIF8ubWF0Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9
O1xuICBfLml0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4g
Y2IodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBm
dW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNz
aWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgdW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAg
ICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3Ig
KHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBz
b3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNv
dXJjZSksXG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAg
ICAgaWYgKCF1bmRlZmluZWRPbmx5IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0g
c291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcg
b2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1
bmN0aW9uKHByb3RvdHlwZSkge1xuICAgIGlmICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1
cm4ge307XG4gICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5
cGUpO1xuICAgIEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBu
ZXcgQ3RvcjtcbiAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICB2YXIgcHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5
XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRv
IGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQg
YXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUu
bW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8v
IEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZh
ciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3Ro
ID0gcHJvcGVydHkoJ2xlbmd0aCcpO1xuICB2YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xs
ZWN0aW9uKSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICBy
ZXR1cm4gdHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGgg
PD0gTUFYX0FSUkFZX0lOREVYO1xuICB9O1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4g
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFj
aGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVj
dHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFy
cmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1p
emVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAg
ICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAg
IGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAg
IH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBh
cHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVj
dCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNi
KGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYm
IF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAg
ICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8g
a2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2Jq
W2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0
cztcbiAgfTtcblxuICAvLyBDcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVm
dCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGlt
aXplZCBpdGVyYXRvciBmdW5jdGlvbiBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8g
aW4gdGhlIG1haW4gZnVuY3Rpb24gd2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAg
IGZ1bmN0aW9uIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5n
dGgpIHtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCAr
PSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBp
bmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3Vy
cmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAg
IHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtl
eXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGgg
PSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDog
bGVuZ3RoIC0gMTtcbiAgICAgIC8vIERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25l
IGlzIHByb3ZpZGVkLlxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAg
IG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCAr
PSBkaXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVt
bywga2V5cywgaW5kZXgsIGxlbmd0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiog
YnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5q
ZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3Qg
PSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24g
b2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZv
bGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdo
aWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9
IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIg
a2V5O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRl
eChvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8u
ZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09
IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0
dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNl
ZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJl
ZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3Qp
KSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9
O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3Qg
ZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4
dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBt
YXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBf
LmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRl
ID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShv
YmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0
aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4g
ICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAg
aWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4g
ZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBp
ZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9i
aiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBj
b250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmop
LFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBp
bmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtl
eSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpb
Y3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBy
ZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmpl
Y3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMg
YGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8u
aW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlm
ICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9m
IGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1
cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIElu
dm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0
aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlv
bihtZXRob2QpO1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAg
ICB2YXIgZnVuYyA9IGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1
cm4gZnVuYyA9PSBudWxsID8gZnVuYyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0p
O1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ug
b2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmos
IGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5c
biAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVy
YDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6
dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJl
dHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZl
bmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRo
ZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWly
cy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8u
ZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4
aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBm
dW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZp
bml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7
XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9
IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2
YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAg
cmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAg
aXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5j
dGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQg
fHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAg
ICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVk
O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtc
blxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21w
dXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAg
ICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0g
bnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9i
aik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0
aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCBy
ZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxu
ICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBj
b21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21w
dXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09
PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RD
b21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0
dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhl
IG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1
ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8g
b2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2
YXIgc2h1ZmZsZWQgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFu
ZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBp
bmRleCk7XG4gICAgICBpZiAocmFuZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZm
bGVkW3JhbmRdO1xuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAg
ICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH07XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1
ZXMgZnJvbSBhIGNvbGxlY3Rpb24uXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJl
dHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRg
IGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVu
Y3Rpb24ob2JqLCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAg
ICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJl
dHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8u
c2h1ZmZsZShvYmopLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0
IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0
ZWUuXG4gIF8uc29ydEJ5ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8u
bWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xu
ICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3Jp
dGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29y
dChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xu
ICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAg
ICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8
IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVm
dC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBB
biBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJh
dGlvbnMuXG4gIHZhciBncm91cCA9IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtc
biAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7
XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBH
cm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBz
dHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0
dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQs
IHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5w
dXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIElu
ZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3Jv
dXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVz
IHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZh
bHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3Vu
dHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJp
b24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3Ig
YSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5
ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJl
c3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xu
XG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRl
cmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1
cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xu
ICAgIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtc
biAgICByZXR1cm4gXy52YWx1ZXMob2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJl
ciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xu
ICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9i
aikgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0
IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0
aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFs
bCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9u
KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBr
ZXksIG9iaikgPyBwYXNzIDogZmFpbCkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJu
IFtwYXNzLCBmYWlsXTtcbiAgfTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0t
LS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNz
aW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJy
YXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAg
Ly8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0g
Xy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51
bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFy
cmF5WzBdO1xuICAgIHJldHVybiBfLmluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xu
ICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhl
IGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4g
UGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJy
YXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwg
biwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwg
YXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4g
IC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwg
cmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0g
ZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVy
biB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5
Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5
Lmxlbmd0aCAtIG4pKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBm
aXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4g
IC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFu
ICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5c
biAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7
XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBu
KTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXku
XG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFy
cmF5LCBfLmlkZW50aXR5KTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBv
ZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rp
b24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwgc3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQg
PSBbXSwgaWR4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGgg
PSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9
IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZh
bHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJl
bnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxs
b3cpIHZhbHVlID0gZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFy
IGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVu
O1xuICAgICAgICB3aGlsZSAoaiA8IGxlbikge1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2
YWx1ZVtqKytdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAg
ICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0
cHV0O1xuICB9O1xuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZl
bHkgKGJ5IGRlZmF1bHQpLCBvciBqdXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rp
b24oYXJyYXksIHNoYWxsb3cpIHtcbiAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywg
ZmFsc2UpO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQg
ZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBm
dW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVl
IHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVl
biBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGht
LlxuICAvLyBBbGlhc2VkIGFzIGB1bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0
aW9uKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNC
b29sZWFuKGlzU29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRl
cmF0ZWUgPSBpc1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlm
IChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2
YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRl
cmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4g
ICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xu
ICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4g
ICAgICAgIGlmICghXy5jb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVu
LnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAg
fVxuICAgICAgfSBlbHNlIGlmICghXy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAg
ICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7
XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjog
ZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJy
YXlzLlxuICBfLnVuaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVu
KGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkg
dGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFz
c2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAg
IHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7
XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRh
aW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBh
cmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwg
aXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3Vs
dC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRh
a2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVy
IGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJz
dCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICB2YXIgcmVzdCA9IGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICBy
ZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5j
b250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVy
IG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFy
ZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAg
ICByZXR1cm4gXy51bnppcChhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2Yg
Xy56aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8g
ZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0
TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxu
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAg
IHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNz
IGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3Ig
dHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFu
ZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1
bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZh
ciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtc
biAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0
b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVu
Y3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAg
IHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVk
aWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7
XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGly
KSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSBy
ZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4g
IC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMg
YSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4Rmlu
ZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigt
MSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBz
bWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVk
IHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVk
SW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0
ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJh
dGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAg
IHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsg
aGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cg
PSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07
XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFz
dEluZGV4T2YgZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJl
ZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0
ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xu
ICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDAp
IHtcbiAgICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0
aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/
IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9
XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAg
ICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlb
aWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0
ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBs
ZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0x
O1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlk
eCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlb
aWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJy
ZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBu
b3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5k
IGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQq
KiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIo
MSwgXy5maW5kSW5kZXgsIF8uc29ydGVkSW5kZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRl
SW5kZXhGaW5kZXIoLTEsIF8uZmluZExhc3RJbmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50
ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBv
ZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBb
dGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkv
ZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3As
IHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwg
MDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAg
IHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwg
MCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9
IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lk
eF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVu
Y3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBE
ZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3Jc
biAgLy8gb3IgYSBub3JtYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4g
IHZhciBleGVjdXRlQm91bmQgPSBmdW5jdGlvbihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRl
eHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5z
dGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdz
KTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAg
IHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlz
T2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5c
biAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmlu
ZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8g
KipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxh
YmxlLlxuICBfLmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2
ZUJpbmQgJiYgZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBs
eShmdW5jLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9u
KGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVu
Y3Rpb24nKTtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2
YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywg
Ym91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkp
O1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBs
eSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBp
dHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFt
aWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2lu
ZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFy
dGlhbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDEpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBv
c2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlv
bisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFy
Z3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAg
cmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAg
fTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBv
YmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8v
IGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRo
YXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQu
XG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoLCBrZXk7XG4gICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3Io
J2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAx
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9i
altrZXldID0gXy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xu
ICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRz
IHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZh
ciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNh
Y2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhp
cywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkg
Y2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1
cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAg
cmV0dXJuIG1lbW9pemU7XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBn
aXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRo
IHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0
KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJu
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFy
Z3MpO1xuICAgIH0sIHdhaXQpO1xuICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hl
ZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBj
bGVhcmVkLlxuICBfLmRlZmVyID0gXy5wYXJ0aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dl
cmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9y
bWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBp
dCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0
aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24g
dGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2Fi
bGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9
IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywg
cmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xu
ICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9u
KCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8u
bm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHko
Y29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVs
bDtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5v
dygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBw
cmV2aW91cyA9IG5vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZp
b3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAg
ICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlm
ICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAg
IHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAg
ICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRp
bWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQg
JiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRp
bWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFz
IGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQu
IFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQg
Zm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdn
ZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhl
IHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRl
KSB7XG4gICAgdmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xu
XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkg
LSB0aW1lc3RhbXA7XG5cbiAgICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAg
ICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkg
e1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAg
ICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAg
IH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRo
aXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtc
biAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0
aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2Fs
bE5vdykge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAg
ICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1
bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNz
ZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFk
anVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25k
aXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5j
dGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5j
KTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQt
aW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJl
dHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBp
cyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25z
dW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBf
LmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2
YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxs
KHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBh
ZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xu
ICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAg
ICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVk
IHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1
bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9
IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMg
YSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0
dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxp
emF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVj
dCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5
IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNz
ZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1l
cmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2Yn
LCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3By
b3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107
XG5cbiAgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIg
bm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVj
dG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29u
c3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAv
LyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1
Y3Rvcic7XG4gICAgaWYgKF8uaGFzKG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJv
cCkpIGtleXMucHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAg
IHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBp
biBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBw
cm9wKSkge1xuICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5c
biAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxu
ICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNg
XG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSBy
ZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4g
ICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2Jq
LCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhh
c0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5
cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9i
amVjdC5cbiAgXy5hbGxLZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0
KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBp
biBvYmopIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFz
RW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlz
O1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVy
dGllcy5cbiAgXy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7
XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0
ZWUgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBvYmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5t
YXAgaXQgcmV0dXJucyBhbiBvYmplY3RcbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7
XG4gICAgdmFyIGtleXMgPSAgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5s
ZW5ndGgsXG4gICAgICAgICAgcmVzdWx0cyA9IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4g
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAg
ICAgIGN1cnJlbnRLZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5
XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1c
biAgICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGlu
dG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5
cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpb
a2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0
IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2Vy
aWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQg
PSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2Jq
W2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJs
ZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9u
cyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAg
IGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0p
KSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07
XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGlu
IHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxL
ZXlzKTtcblxuICAvLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJv
cGVydGllcyBpbiB0aGUgcGFzc2VkLWluIG9iamVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVj
dHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2ln
bmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0
aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9
IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9
IGtleXNbaV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVy
biBrZXk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBv
bmx5IGNvbnRhaW5pbmcgdGhlIHdoaXRlbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1
bmN0aW9uKG9iamVjdCwgb2l0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9
LCBvYmogPSBvYmplY3QsIGl0ZXJhdGVlLCBrZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0
dXJuIHJlc3VsdDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtl
eXMgPSBfLmFsbEtleXMob2JqKTtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVu
dHMsIGZhbHNlLCBmYWxzZSwgMSk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBr
ZXksIG9iaikgeyByZXR1cm4ga2V5IGluIG9iajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmop
O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUg
PSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRb
a2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBS
ZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgYmxhY2tsaXN0ZWQgcHJvcGVy
dGllcy5cbiAgXy5vbWl0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRl
KGl0ZXJhdGVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVu
KGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0g
ZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywg
a2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCk7XG4gIH07XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1
bHQgcHJvcGVydGllcy5cbiAgXy5kZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywg
dHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBn
aXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJl
IHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9i
amVjdC5cbiAgXy5jcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFy
IHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5k
T3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3Jl
YXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25l
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7
XG4gICAgcmV0dXJuIF8uaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwg
b2JqKTtcbiAgfTtcblxuICAvLyBJbnZva2VzIGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5k
IHRoZW4gcmV0dXJucyBvYmouXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRo
b2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBw
ZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFp
bi5cbiAgXy50YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0
b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBh
biBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0
Y2ggPSBmdW5jdGlvbihvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0
cnMpLCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVy
biAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAg
IGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFs
c2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVj
dXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVu
Y3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBh
cmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8g
U2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQu
b3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBh
ICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVs
bCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBl
ZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAg
aWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0Ns
YXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAg
IGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBz
d2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBl
eHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4g
ICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNl
ZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylc
biAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5k
IHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVz
LCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIp
YC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVj
dCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJl
ZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAg
ICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVn
YWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAg
ICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAg
ICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6
XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRp
dmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlz
ZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxp
c2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2
YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFy
cmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5
cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmpl
Y3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29u
c3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xu
ICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEu
Y29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0g
YkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3Ig
JiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYm
IGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgn
Y29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1
cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3lj
bGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAv
LyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0
cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2
ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQg
dGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0
YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0g
YVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBz
ZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJl
ciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFj
a1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4g
ICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8g
UmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5
cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRl
ZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAg
ICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVw
IGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxu
ICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xl
bmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxz
ZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5r
ZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3Vy
ZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVz
IGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVu
Z3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xu
ICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1ts
ZW5ndGhdO1xuICAgICAgICBpZiAoIShfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXld
LCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8v
IFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRy
dWU7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0
d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAg
ICByZXR1cm4gZXEoYSwgYik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5n
LCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1l
cmFibGUgb3duLXByb3BlcnRpZXMuXG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikg
JiYgKF8uaXNBcnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9i
aikpKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVu
Z3RoID09PSAwO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9c
biAgXy5pc0VsZW1lbnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9i
ai5ub2RlVHlwZSA9PT0gMSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJh
eT9cbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5p
c0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9T
dHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEg
Z2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rp
b24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21l
IGlzVHlwZSBtZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVt
YmVyLCBpc0RhdGUsIGlzUmVnRXhwLCBpc0Vycm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAn
RnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvcidd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsg
J10nO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2Yg
dGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUg
aXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJn
dW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgICByZXR1cm4gXy5oYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8v
IE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0
eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkg
OCAoIzE5MjkpLlxuICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4
QXJyYXkgIT0gJ29iamVjdCcpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtc
biAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zp
bml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05h
TihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFO
YD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5c
biAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikg
JiYgb2JqICE9PSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFu
P1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRy
dWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJv
b2xlYW5dJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4g
IF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5l
ZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxu
ICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdp
dmVuIHByb3BlcnR5IGRpcmVjdGx5XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5v
dCBvbiBhIHByb3RvdHlwZSkuXG4gIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBy
ZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07
XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAv
LyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBg
X2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJl
bmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24o
KSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xu
ICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVs
dCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVy
biB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9m
dGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlv
bih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtc
biAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5
ID0gcHJvcGVydHk7XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2Jq
ZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5j
dGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5j
dGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8v
IFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBh
IGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5t
YXRjaGVzID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBh
dHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRj
aChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioq
IHRpbWVzLlxuICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAg
ICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47
IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVz
aXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0g
bnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0
dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4g
IH07XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRp
bWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkg
e1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBv
ZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAn
Jic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wi
JzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAg
fTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5j
dGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGlu
dGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAg
dmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07
XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRz
IHRvIGJlIGVzY2FwZWRcbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2lu
KCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2
YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsg
c3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJl
cGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAg
Xy5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVh
dGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVk
IGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBg
b2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBm
dW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBmYWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9i
amVjdCA9PSBudWxsID8gdm9pZCAwIDogb2JqZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUg
PT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJu
IF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtc
blxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBl
bnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRz
LlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkg
e1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHBy
ZWZpeCArIGlkIDogaWQ7XG4gIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2Vz
IEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2lu
ZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50
ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4v
ZyxcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAg
ICAgIDogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5n
IGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8v
IGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25l
IHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0g
LyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28g
dGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIg
ZXNjYXBlcyA9IHtcbiAgICBcIidcIjogICAgICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxc
XCcsXG4gICAgJ1xccic6ICAgICAncicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIw
MjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2Nh
cGVyID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVD
aGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRj
aF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRv
IEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5n
IGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAv
LyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5c
biAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRp
bmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRT
ZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBs
YXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3Vs
YXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAo
W1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0
dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2
YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtc
blxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxp
dGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNl
ID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gs
IGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSAr
PSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7
XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2Fw
ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9
PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBv
bGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRl
ICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUp
IHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdc
IjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVk
IHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAg
IH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlz
IG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlm
ICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3Vy
Y2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5w
cm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2Fs
bChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxu
JztcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAg
ICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0
ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlz
LCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNl
IGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9
IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5j
dGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJu
IHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQg
Y2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFp
biA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAt
LS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlv
biwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08t
c3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAg
Ly8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5c
blxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRl
IHJlc3VsdHMuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAg
cmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4g
IC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVj
dC5cbiAgXy5taXhpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhv
YmopLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFt
ZV07XG4gICAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIg
YXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVu
dHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xu
ICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3Jl
IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8g
QWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNo
KFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1
bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tu
YW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9i
aiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xu
ICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmou
bGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBv
YmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rp
b25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSdd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4g
ICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQo
dGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4g
IH0pO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWlu
ZWQgb2JqZWN0LlxuICBfLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVy
biB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBm
b3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBh
cml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVP
ZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90
eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBl
ZDtcbiAgfTtcblxuICAvLyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3Ig
Y29tcGF0aWJpbGl0eSB3aXRoIEFNRCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNl
IG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAv
LyBwcmFjdGljZSBmb3IgQU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVy
c2NvcmUgcmVnaXN0ZXJzXG4gIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1
ZXJ5LCBpdCBpcyBhIGJhc2UgbGlicmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRv
IGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAv
LyBhbiBBTUQgbG9hZCByZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJv
ciB3aGVuIGFuXG4gIC8vIGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBh
IGxvYWRlciByZXF1ZXN0LlxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBk
ZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xu
ICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iCittb2R1bGUu
ZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8gICAgIGh0dHA6Ly91bmRl
cnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3Vt
ZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVu
ZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2Uu
XG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBi
cm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xu
XG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZh
ciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUg
bWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBB
cnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgRnVuY1Byb3RvID0g
RnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFi
bGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICB2YXJcbiAgICBwdXNo
ICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlICAgICAgICAgICAgPSBB
cnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmlu
ZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAg
Ly8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0
aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBu
YXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAg
ICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5k
LFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQg
ZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2
YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0
byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAo
ISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBw
ZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3Ig
KipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBv
bGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBf
YCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5l
ZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4
cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAg
IGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8v
IEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztcblxuICAvLyBJbnRlcm5h
bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVz
KSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVk
bHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgdmFyIG9w
dGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChj
b250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0g
bnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFs
dWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9
O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAg
ICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAg
ICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24p
O1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2
YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250
ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4g
ICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNv
bnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBIG1vc3RseS1pbnRlcm5h
bCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAv
LyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQg
cmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0cmFyeSBjYWxsYmFjaywg
YSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICB2YXIgY2IgPSBm
dW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVs
bCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVy
biBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmpl
Y3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0
eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkg
e1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8v
IEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4g
IHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1bmRlZmluZWRPbmx5KSB7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50
cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9i
ajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtc
biAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlz
ID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5
c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2JqW2tleV0gPT09IHZvaWQg
MCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0
dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBj
cmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBi
YXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHBy
b3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZl
Q3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAg
dmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1bmN0aW9uKGtleSkge1xu
ICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZv
aWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVscGVyIGZvciBjb2xsZWN0
aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3Vs
ZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3RcbiAgLy8gUmVsYXRlZDog
aHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMt
dG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02
NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4g
IHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9
IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxl
Y3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+
PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlv
biBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVy
c3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFu
ZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxu
ICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2gg
PSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRl
cmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3Ro
O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGgg
PSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ld
LCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7
XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRo
ZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8u
bWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJy
YXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9i
aikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVu
dEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0g
PSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAg
IHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9u
IGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7
XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVzaW5nIGFyZ3VtZW50cy5s
ZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRlb3B0aW1pemUgdGhlLCBz
ZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5
cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBs
ZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBr
ZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1
cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87
XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRl
eHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCk7
XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAg
ICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0g
ZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbml0aWFs
IHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8
IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4g
ICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvcihvYmos
IGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAgICB9O1xuICB9XG5cbiAg
Ly8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZh
bHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBfLnJlZHVjZSA9IF8uZm9s
ZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2Np
YXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgXy5yZWR1
Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiB0aGUg
Zmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0
YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGtl
eSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xu
ICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9XG4g
ICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAg
fTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVu
Y3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xu
ICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgXy5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVl
LCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJu
IHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNo
IGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubmVnYXRlKGNiKHByZWRp
Y2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2Yg
dGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5c
biAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0g
IWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlz
IHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDog
aW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXks
IG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAg
Ly8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hl
cyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIF8uc29tZSA9IF8uYW55
ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBj
YihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikg
JiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xu
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAg
IHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAo
cHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7
XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhl
IGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbiAg
Ly8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBf
LmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1
YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xu
ICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXgg
PSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4g
IH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRl
bSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtc
biAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5j
ID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24o
dmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9k
XTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVuYy5hcHBseSh2YWx1ZSwg
YXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNv
bW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgXy5wbHVjayA9
IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgXy5wcm9wZXJ0eShr
ZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBj
YXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4gIC8vIGNvbnRhaW5pbmcg
c3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0
dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07
XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlu
ZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBr
ZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtc
biAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24p
LlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIg
cmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZh
bHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkg
e1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4g
ICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPiByZXN1bHQp
IHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0g
ZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8u
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRl
ZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA+
IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUlu
ZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1
dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVt
ZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJ
bmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBu
dWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2Jq
IDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVu
Z3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAg
IGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAg
ICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0
KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAg
ICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0
eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4g
ICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xu
ICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0
aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMg
c2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVm
ZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHNldCA9IGlzQXJy
YXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBzZXQu
bGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIg
aW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmFuZCA9
IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBpbmRleCkgc2h1ZmZsZWRb
aW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFtyYW5kXSA9IHNldFtpbmRl
eF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipu
KiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8gSWYgKipuKiogaXMgbm90
IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGlu
dGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAg
Xy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8
fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhv
YmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1c
biAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xuICB9
O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNl
ZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgcmV0
dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAg
ICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4
LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KVxuICAgICAg
fTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxl
ZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEg
IT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4g
ICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAg
ICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xu
ICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdy
b3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IpIHtc
biAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFy
IHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4g
ICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtl
eSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0
LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xu
ICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQ
YXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1
bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkp
IHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAg
fSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBz
aW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91
ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0
aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0p
O1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBj
ZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRv
IGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9u
LlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAg
ICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXld
ID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJv
bSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
aWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGlj
ZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmos
IF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJl
dHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4g
aXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07
XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVs
ZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hv
c2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0
aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTtc
biAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICAgIChwcmVk
aWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTtcbiAgICB9
KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8vIEFycmF5IEZ1bmN0aW9u
c1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2Yg
YW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFs
dWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3Vh
cmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8uZmly
c3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBp
ZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1
YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXku
bGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFz
dCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1
bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGlu
XG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4gIF8uaW5pdGlhbCA9IGZ1
bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAw
LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4p
KSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3Np
bmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5
LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkg
PT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1
cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0
aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0
aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAg
YW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmpl
Y3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMg
aW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJh
eSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8
IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMg
ZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1
cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGlt
cGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZs
YXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBzdGFydEluZGV4KSB7XG4g
ICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4
IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYm
IChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAv
L2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0XG4gICAg
ICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBzdHJpY3Qp
O1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgb3V0cHV0
Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7XG4gICAgICAgICAgb3V0
cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0
cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxu
ICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVp
dGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZs
YXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFy
cmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0
aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4g
IF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShh
cnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEg
ZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxy
ZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZh
c3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8u
dW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0
ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtc
biAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAg
IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0g
aXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAo
aXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQu
cHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAo
aXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xu
ICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFs
dWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFs
dWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAg
cmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFp
bnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhl
IHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4g
Xy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4gIH07XG5cbiAgLy8gUHJv
ZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxs
IHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9u
KGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJn
dW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFy
cmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAg
ICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICBmb3IgKHZh
ciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMo
YXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJn
c0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBu
dW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGlu
IGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRpZmZlcmVuY2UgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRy
dWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAg
ICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICAv
LyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVt
ZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuICBfLnppcCA9IGZ1
bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgLy8g
Q29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5k
IGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXNcbiAg
Xy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIF8u
bWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZhciByZXN1bHQgPSBBcnJh
eShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5k
ZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJyYXksIGluZGV4KTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRv
IG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4g
IC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBv
bmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4g
IF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9
O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0g
PSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0g
PSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpbmRJbmRleCBhbmQgZmlu
ZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5k
ZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQp
IHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAw
IDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGlu
ZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlr
ZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEluZGV4ID0gY3JlYXRlUHJl
ZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0
ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZp
Z3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91
bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJj
aC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFy
IHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0
aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRo
LmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0p
IDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0
dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBp
bmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhG
aW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5j
dGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAg
ICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5t
YXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbmd0
aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCAr
IDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxl
bmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAg
IHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBp
ZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNh
bGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAg
PyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDog
bGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAg
ICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAg
cmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRo
ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlm
IHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJh
eSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBm
b3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBfLmluZGV4T2YgPSBjcmVh
dGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7XG4gIF8ubGFzdElu
ZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdEluZGV4KTtcblxuICAvLyBH
ZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVz
c2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlv
bi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhv
bi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlv
bihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0
b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gc3Rl
cCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0
YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAg
Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xu
ICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAg
fTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMg
YSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRl
ZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJv
dW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxs
aW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5
KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnBy
b3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7
XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4g
c2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9i
amVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSku
IERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBp
ZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHtc
biAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBu
YXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYg
KCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBj
YWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4ZWN1
dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2Fs
bChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8g
UGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFz
IGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFu
Z2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vo
b2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZp
bGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAgIHZhciBib3VuZEFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAg
ICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBfID8gYXJn
dW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUg
KHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlv
bisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlz
LCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBCaW5kIGEg
bnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBh
cmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBm
b3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0
IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGks
IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAobGVuZ3RoIDw9IDEpIHRo
cm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xu
ICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gYXJndW1lbnRz
W2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAg
IHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24g
Ynkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFz
aGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNo
ZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhh
c2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghXy5oYXMoY2Fj
aGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2Fj
aGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5j
dGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxz
XG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0
aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAy
KTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEg
ZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3Rh
Y2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywg
MSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwg
b25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRv
dyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAv
LyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBl
ciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhl
IGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFs
c2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxu
ICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBj
b250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBw
cmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgdmFyIGxh
dGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0g
ZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0
ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4
dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
dmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGlu
ZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQg
LSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0g
YXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQp
IHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91
dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlv
dXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4g
ICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNl
IGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0
aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJl
dHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRo
YXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8v
IGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3Bz
IGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlz
IHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwg
aW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3
YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0
YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBs
YXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxh
c3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxh
c3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlm
ICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBh
cmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAg
ICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB0aW1lc3Rh
bXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7
XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtc
biAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH1cblxuICAg
ICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0
IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxv
d2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwg
YW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4g
IF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1cm4gXy5wYXJ0aWFs
KHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24g
b2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGlj
YXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBl
YWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0
IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJn
dW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nb
c3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQg
PSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhl
Y3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRp
bWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMg
PCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAg
ICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9u
bHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuXG4g
IF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVt
byA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1l
cyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5c
biAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9u
ZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9y
IGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7
XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8g
S2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5g
IGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5w
cm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9w
cyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAg
ICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9M
b2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5
cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAg
ICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKF8u
aXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQ
cm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBw
cm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBwcm9wKSAmJiAhXy5jb250
YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1J
ZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAg
ICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFfLmNv
bnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1c
biAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3du
IHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZl
IGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlz
T2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2
ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmop
IGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwg
OS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xu
ICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVydHkg
bmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBp
ZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAg
Zm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5
LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4g
ICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBv
YmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAg
IHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTtcbiAgICB9XG4gICAg
cmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5
aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9iamVjdFxuICAvLyBJbiBj
b250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBfLm1hcE9iamVjdCA9IGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJh
dGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2JqKSxcbiAgICAgICAgICBs
ZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0ge30sXG4gICAgICAgICAg
Y3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgICByZXN1
bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBv
YmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVy
dCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIF8ucGFp
cnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZh
ciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhaXJzW2ldID0g
W2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfTtc
blxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1
ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJl
c3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24g
bmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNg
XG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5h
bWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5j
dGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVz
LnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhl
IHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVB
c3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBh
bGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpXG4gIC8vICho
dHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5j
ZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVuZE93biA9IF8uYXNzaWdu
ID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkg
b24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kS2V5ID0g
ZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaiksIGtleTtcbiAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtl
eSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBv
ZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dsaXN0ZWQgcHJvcGVydGllcy5c
biAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2
YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtleXM7XG4gICAgaWYgKG9i
aiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24ob2l0ZXJhdGVl
KSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBm
bGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVu
Y3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2JqOyB9O1xuICAgICAgb2Jq
ID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAg
ICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXks
IG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibG9j
a2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJh
dGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9
IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpLCBTdHJpbmcpO1xuICAg
ICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhXy5j
b250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucGljayhv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2Jq
ZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWdu
ZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVy
aXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwg
cHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4g
IC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJv
cHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChw
cm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAg
fTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmpl
Y3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2Jq
KSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6
IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0
aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9z
ZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4g
IC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3
aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtc
biAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0
dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFp
cnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5
cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3Qg
PT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBr
ZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9i
aikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAv
LyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxu
ICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50
aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50
aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dp
a2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9
PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0
IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAg
ICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53
cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5f
d3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8v
IENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5n
LmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJu
IGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1i
ZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJl
ZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdF
eHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2Ev
aSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8g
UHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVx
dWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3
IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAg
ICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxl
bnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFs
ZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAg
ICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVy
aWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDog
K2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2Jq
ZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBu
dW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAg
ICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRh
dGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5g
IGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICB9XG5c
biAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAg
IGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlw
ZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRo
IGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBz
IG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAg
dmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAg
aWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5z
dGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5j
dGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7
XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVx
dWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5n
IGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9u
IDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5n
IHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNl
IHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAg
ICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAg
IHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAg
ICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25h
bCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4g
ICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0g
YjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2go
Yik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAg
ICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0
ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9
IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtc
biAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmlj
IHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShh
W2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAg
ICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAg
dmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xu
ICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVy
IG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYg
KF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgd2hpbGUg
KGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgICAg
ICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFzKGIsIGtleSkgJiYgZXEo
YVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1c
biAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtc
biAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29u
IHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rp
b24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVj
dCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5pc0VtcHR5ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopIHx8IF8u
aXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBf
LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBh
IERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVy
biAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXku
aXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xu
ICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07
XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBm
dW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5
cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH07XG5c
biAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBp
c1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJyb3IuXG4gIF8uZWFjaChb
J0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVn
RXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmpl
Y3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJh
Y2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVy
ZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxu
ICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9
O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3Jr
IGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8gSUUgMTEgKCMxNjIxKSwg
YW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicg
JiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBm
YWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVt
YmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzRmluaXRl
KG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5cbiAgLy8gSXMgdGhlIGdp
dmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3aGljaCBkb2VzIG5vdCBl
cXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIF8u
aXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2
YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9
PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1
YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2Jq
ID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xu
ICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9p
ZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBv
YmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBv
dGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmos
IGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
aiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCBy
ZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJl
dHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm5vQ29uZmxp
Y3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7XG4gICAg
cmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJv
dW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVl
KSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5n
IGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgXy5jb25z
dGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0gZnVuY3Rpb24oKXt9O1xu
XG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBm
b3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG4gIF8ucHJv
cGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IGZ1bmN0
aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH07
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBh
biBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBf
Lm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xuICAgIGF0dHJzID0gXy5l
eHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBy
ZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUnVuIGEg
ZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBh
Y2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBh
bmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4g
ICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xu
ICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAt
IG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQg
dGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID0gRGF0ZS5ub3cg
fHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xu
XG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBl
TWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcm
Z3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2An
OiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmludmVydChlc2NhcGVNYXAp
O1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0
by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVzY2FwZXIgPSBmdW5jdGlv
bihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1
cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEg
a2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3VyY2UgPSAnKD86JyArIF8u
a2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChz
b3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVs
bCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmlu
ZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAg
ICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcbiAgXy51
bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIElmIHRoZSB2YWx1
ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdp
dGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lzZSwgcmV0dXJuIGl0Llxu
ICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZhbGxiYWNrKSB7XG4gICAg
dmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3RbcHJvcGVydHldO1xu
ICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9IGZhbGxiYWNrO1xuICAg
IH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6
IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1
ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVt
cG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVu
Y3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1
cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBV
bmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVc
biAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxp
bWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGUgICAgOiAvPCUo
W1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShbXFxzXFxTXSs/KSU+L2cs
XG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdo
ZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBk
ZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdl
eCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAg
dmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8g
YmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxp
dGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAgIFwiJ1wiLFxuICAgICdc
XFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAgICAnXFxuJzogICAgICdu
JyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07
XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5c
biAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcg
KyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRp
bmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNj
b3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdo
aXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVy
cG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBzZXR0
aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBz
ZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0
dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMg
aW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0
Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJj
ZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAg
ICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8Jykg
KyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2Nh
cGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xu
ICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBm
dW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xu
ICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVy
LCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4g
ICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsg
ZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVs
c2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwi
ICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNl
IGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUg
KyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUg
bWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZlc3QuXG4gICAgICByZXR1
cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElm
IGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwg
c2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7
fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9
JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24o
KXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAn
cmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZW5kZXIgPSBuZXcgRnVu
Y3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNh
dGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAg
fVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJl
bmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBj
b21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAg
dmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7XG4gICAgdGVtcGxhdGUu
c291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7
XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRkIGEgXCJjaGFpblwiIGZ1
bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8u
Y2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfKG9iaik7XG4gICAg
aW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAg
Ly8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdFxuICAvLyBj
YW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMg
b2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1h
eSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmlu
ZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNl
LCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBv
Ymo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVu
ZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNo
KF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tu
YW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5
KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQodGhpcywgZnVuYy5hcHBs
eShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEFkZCBhbGwgb2Yg
dGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgXy5taXhp
bihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFw
cGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQn
LCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2Qg
PSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmos
IGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3Nw
bGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07XG4gICAgICByZXR1cm4g
cmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3Nv
ciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ2NvbmNhdCcsICdq
b2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQ
cm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRz
KSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3Jh
cHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24o
KSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndy
YXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xu
ICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnBy
b3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7
XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJycg
KyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBh
dCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBt
YXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3Vn
aCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFu
b255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVj
YXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9w
dWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBi
ZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdl
bmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxl
ZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAn
ZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwg
ZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxufS5jYWxsKHRoaXMp
KTtcbiIKIAogLyoqKi8gfSksCiAvKiA0MTYgKi8KQEAgLTE0ODc3NSw3ICsxNDg3NzUsNyBAQCB2
YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIGNvbWJpbmUoZGVzdCwgc3Jj
KSB7CiAgICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAg
IGlmIChfLmhhcyhKU0hJTlQuYmxhY2tsaXN0LCBuYW1lKSkgcmV0dXJuOworICAgICAgaWYgKF8u
aGFzKEpTSElOVC5ibG9ja2xpc3QsIG5hbWUpKSByZXR1cm47CiAgICAgICBkZXN0W25hbWVdID0g
c3JjW25hbWVdOwogICAgIH0pOwogICB9CkBAIC0xNDkwNjAsNyArMTQ5MDYwLDcgQEAgdmFyIEpT
SElOVCA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoMSk7CiAgICAg
ICAgICAgdmFsID0gZmFsc2U7CiAKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W2tleV0gPSBr
ZXk7CisgICAgICAgICAgSlNISU5ULmJsb2NrbGlzdFtrZXldID0ga2V5OwogICAgICAgICAgIGRl
bGV0ZSBwcmVkZWZpbmVkW2tleV07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgcHJlZGVm
W2tleV0gPSAodmFsID09PSAidHJ1ZSIpOwpAQCAtMTUzODY3LDcgKzE1Mzg2Nyw3IEBAIHZhciBK
U0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBKU0hJTlQuZXJyb3JzID0gW107CiAgICAgICBK
U0hJTlQudW5kZWZzID0gW107CiAgICAgICBKU0hJTlQuaW50ZXJuYWxzID0gW107Ci0gICAgICBK
U0hJTlQuYmxhY2tsaXN0ID0ge307CisgICAgICBKU0hJTlQuYmxvY2tsaXN0ID0ge307CiAgICAg
ICBKU0hJTlQuc2NvcGUgPSAiKG1haW4pIjsKICAgICB9CiAKQEAgLTE1Mzg5Niw3ICsxNTM4OTYs
NyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogCiAgICAgICAgIGlmIChpdGVtWzBdID09
PSAiLSIpIHsKICAgICAgICAgICBzbGljZSA9IGl0ZW0uc2xpY2UoMSk7Ci0gICAgICAgICAgSlNI
SU5ULmJsYWNrbGlzdFtzbGljZV0gPSBzbGljZTsKKyAgICAgICAgICBKU0hJTlQuYmxvY2tsaXN0
W3NsaWNlXSA9IHNsaWNlOwogICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHByZWRlZmluZWQgaWYg
dGhlcmUKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtzbGljZV07CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xOTU1NzYsNyArMTk1NTc2LDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3Bl
Y2lmaWVyKG5vZGUpIAogCXZhciByZWdleFNpbmdsZUVzY2FwZSA9IC9bIidcXFxiXGZcblxyXHRd
LzsKIAogCXZhciByZWdleERpZ2l0ID0gL1swLTldLzsKLQl2YXIgcmVnZXhXaGl0ZWxpc3QgPSAv
WyAhIy0mXCgtXFtcXS1+XS87CisJdmFyIHJlZ2V4QWxsb3dsaXN0ID0gL1sgISMtJlwoLVxbXF0t
fl0vOwogCiAJdmFyIGpzZXNjID0gZnVuY3Rpb24oYXJndW1lbnQsIG9wdGlvbnMpIHsKIAkJLy8g
SGFuZGxlIG9wdGlvbnMKQEAgLTE5NTc1MSw3ICsxOTU3NTEsNyBAQCBmdW5jdGlvbiBJbXBvcnRO
YW1lc3BhY2VTcGVjaWZpZXIobm9kZSkgCiAJCQkJfQogCQkJfQogCQkJaWYgKCFvcHRpb25zLmVz
Y2FwZUV2ZXJ5dGhpbmcpIHsKLQkJCQlpZiAocmVnZXhXaGl0ZWxpc3QudGVzdChjaGFyYWN0ZXIp
KSB7CisJCQkJaWYgKHJlZ2V4QWxsb3dsaXN0LnRlc3QoY2hhcmFjdGVyKSkgewogCQkJCQkvLyBJ
dOKAmXMgYSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGAiYCwgYCdgIG9y
IGBcYCwKIAkJCQkJLy8gc28gZG9u4oCZdCBlc2NhcGUgaXQuCiAJCQkJCXJlc3VsdCArPSBjaGFy
YWN0ZXI7CkBAIC0yMDkwODEsNyArMjA5MDgxLDcgQEAgdmFyIF9nZXRJdGVyYXRvcjMgPSBfaW50
ZXJvcFJlcXVpcmVEZWZhdQogCiBleHBvcnRzLmNhbGwgPSBjYWxsOwogZXhwb3J0cy5fY2FsbCA9
IF9jYWxsOwotZXhwb3J0cy5pc0JsYWNrbGlzdGVkID0gaXNCbGFja2xpc3RlZDsKK2V4cG9ydHMu
aXNCbG9ja2xpc3RlZCA9IGlzQmxvY2tsaXN0ZWQ7CiBleHBvcnRzLnZpc2l0ID0gdmlzaXQ7CiBl
eHBvcnRzLnNraXAgPSBza2lwOwogZXhwb3J0cy5za2lwS2V5ID0gc2tpcEtleTsKQEAgLTIwOTE1
Nyw5ICsyMDkxNTcsOSBAQCBmdW5jdGlvbiBfY2FsbChmbnMpIHsKICAgcmV0dXJuIGZhbHNlOwog
fQogCi1mdW5jdGlvbiBpc0JsYWNrbGlzdGVkKCkgewotICB2YXIgYmxhY2tsaXN0ID0gdGhpcy5v
cHRzLmJsYWNrbGlzdDsKLSAgcmV0dXJuIGJsYWNrbGlzdCAmJiBibGFja2xpc3QuaW5kZXhPZih0
aGlzLm5vZGUudHlwZSkgPiAtMTsKK2Z1bmN0aW9uIGlzQmxvY2tsaXN0ZWQoKSB7CisgIHZhciBi
bG9ja2xpc3QgPSB0aGlzLm9wdHMuYmxvY2tsaXN0OworICByZXR1cm4gYmxvY2tsaXN0ICYmIGJs
b2NrbGlzdC5pbmRleE9mKHRoaXMubm9kZS50eXBlKSA+IC0xOwogfQogCiBmdW5jdGlvbiB2aXNp
dCgpIHsKQEAgLTIwOTE2Nyw3ICsyMDkxNjcsNyBAQCBmdW5jdGlvbiB2aXNpdCgpIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiAgIH0KIAotICBpZiAodGhpcy5pc0JsYWNrbGlzdGVkKCkpIHsKKyAgaWYg
KHRoaXMuaXNCbG9ja2xpc3RlZCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKQEAgLTIx
MDgyNSw3ICsyMTA4MjUsNyBAQCBmdW5jdGlvbiBzaG91bGRJZ25vcmVLZXkoa2V5KSB7CiAKICAg
aWYgKGtleSA9PT0gImVudGVyIiB8fCBrZXkgPT09ICJleGl0IiB8fCBrZXkgPT09ICJzaG91bGRT
a2lwIikgcmV0dXJuIHRydWU7CiAKLSAgaWYgKGtleSA9PT0gImJsYWNrbGlzdCIgfHwga2V5ID09
PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtleXMiKSByZXR1cm4gdHJ1ZTsKKyAgaWYgKGtl
eSA9PT0gImJsb2NrbGlzdCIgfHwga2V5ID09PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtl
eXMiKSByZXR1cm4gdHJ1ZTsKIAogICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjI1MTUsNyArMjIy
NTE1LDcgQEAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IAogCiBjb25z
dCBsaWZlY3ljbGVNZXRob2RzID0gbmV3IFNldChbImNvbXBvbmVudFdpbGxVbm1vdW50IiwgImNv
bXBvbmVudERpZE1vdW50IiwgImNvbXBvbmVudFdpbGxNb3VudCIsICJjb21wb25lbnREaWRVcGRh
dGUiLCAiY29tcG9uZW50V2lsbFVwZGF0ZSIsICJjb21wb25lbnREaWRDYXRjaCIsICJjb21wb25l
bnRXaWxsUmVjZWl2ZVByb3BzIl0pOwogCi1jb25zdCB3aGl0ZWxpc3RlZFByb3BlcnRpZXMgPSBu
ZXcgU2V0KFsicHJvcHMiLCAiY29udGV4dCIsICJyZWZzIl0pOworY29uc3QgYWxsb3dsaXN0ZWRQ
cm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKIAogZnVu
Y3Rpb24gZ2V0SW5pdGlhbFByb3BzKHJlYWxtLCBjb21wb25lbnRUeXBlKSB7CiAgIGxldCBwcm9w
c05hbWUgPSBudWxsOwpAQCAtMjIyNjg1LDcgKzIyMjY4NSw3IEBAIGZ1bmN0aW9uIGV2YWx1YXRl
Q2xhc3NDb25zdHJ1Y3RvcihyZWFsbSwKICAgICBsZXQgaW5zdGFuY2UgPSAoMCwgX2luZGV4Mi5D
b25zdHJ1Y3QpKHJlYWxtLCBjb25zdHJ1Y3RvckZ1bmMsIFtwcm9wcywgY29udGV4dF0pOwogICAg
ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShpbnN0YW5jZSBpbnN0YW5jZW9mIF9pbmRleC5PYmpl
Y3RWYWx1ZSk7CiAgICAgZm9yIChsZXQgW3Byb3BlcnR5TmFtZV0gb2YgaW5zdGFuY2UucHJvcGVy
dGllcykgewotICAgICAgaWYgKCF3aGl0ZWxpc3RlZFByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgIGlmICghYWxsb3dsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUp
KSB7CiAgICAgICAgIGluc3RhbmNlUHJvcGVydGllcy5hZGQocHJvcGVydHlOYW1lKTsKICAgICAg
IH0KICAgICB9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmct
YmVuY2htYXJrL2NsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bTIvd2ViLXRvb2xpbmctYmVuY2htYXJrL2NsaS5qcwkocmV2aXNpb24gMjcxMTIyKQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanMJKHdv
cmtpbmcgY29weSkKQEAgLTEwNDIzLDggKzEwNDIzLDggQEAgdHJhdmVyc2UuaGFzVHlwZSA9IGZ1
bmN0aW9uICh0cmVlLCBzY29wZQogICB9OwogCiAgIHRyYXZlcnNlKHRyZWUsIHsKLSAgICBibGFj
a2xpc3Q6IGJsYWNrbGlzdFR5cGVzLAotICAgIGVudGVyOiBoYXNCbGFja2xpc3RlZFR5cGUKKyAg
ICBibG9ja2xpc3Q6IGJsb2NrbGlzdFR5cGVzLAorICAgIGVudGVyOiBoYXNCbG9ja2xpc3RlZFR5
cGUKICAgfSwgc2NvcGUsIHN0YXRlKTsKIAogICByZXR1cm4gc3RhdGUuaGFzOwpAQCAtMTMyMjgs
OCArMTMyMjgsOCBAQCBtb2R1bGUuZXhwb3J0cyA9ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDYyCiAv
KiA1NSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi0vKiBXRUJQQUNL
IFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oX193ZWJwYWNrX2FtZF9vcHRpb25zX18pIHsvKiBn
bG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovDQotbW9kdWxlLmV4cG9ydHMgPSBfX3dl
YnBhY2tfYW1kX29wdGlvbnNfXzsNCisvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rp
b24oX193ZWJwYWNrX2FtZF9vcHRpb25zX18pIHsvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0
aW9uc19fICovCittb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fOwogCiAv
KiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywge30pKQogCkBAIC0xMTM4
NDAsNyArMTEzODQwLDcgQEAgbW9kdWxlLmV4cG9ydHMgPSAie1widmVyc2lvblwiOjMsXCJzb3Vy
YwogLyogNDExICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVs
ZS5leHBvcnRzID0gIi8qIE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3
IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL21vb3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIg
QnVpbGQ6IGh0dHBzOi8vbW9vdG9vbHMubmV0L2NvcmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgw
N2IxNzNkNWRlZmY2NzNmY1xuKi9cbi8qXG4tLS1cblxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlv
bjogVGhlIGhlYXJ0IG9mIE1vb1Rvb2xzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxuY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0o
aHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuXG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBw
cm9kdWN0aW9uIHRlYW0gKGh0dHA6Ly9tb290b29scy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3Bp
cmF0aW9uOlxuICAtIENsYXNzIGltcGxlbWVudGF0aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXSho
dHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAo
YykgMjAwNiBEZWFuIEVkd2FyZHMsIFtHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vd
KGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNv
bWUgZnVuY3Rpb25hbGl0eSBpbnNwaXJlZCBieSBbUHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90
eXBlanMub3JnKSBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBM
aWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxu
XG5wcm92aWRlczogW0NvcmUsIE1vb1Rvb2xzLCBUeXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5h
dGl2ZV1cblxuLi4uXG4qL1xuLyohIE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsu
IGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAw
Ni0yMDE1IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4q
L1xuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuTW9vVG9vbHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcs
XG5cdGJ1aWxkOiAnNTI5NDIyODcyYWRmZmY0MDFiOTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07
XG5cbi8vIHR5cGVPZiwgaW5zdGFuY2VPZlxuXG52YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBm
dW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYg
KGl0ZW0uJGZhbWlseSAhPSBudWxsKSByZXR1cm4gaXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0
ZW0ubm9kZU5hbWUpe1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVu
dCc7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0gMykgcmV0dXJuICgvXFxTLykudGVzdChpdGVt
Lm5vZGVWYWx1ZSkgPyAndGV4dG5vZGUnIDogJ3doaXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5
cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyl7XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0p
IHJldHVybiAnYXJndW1lbnRzJztcblx0XHRpZiAoJ2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29s
bGVjdGlvbic7XG5cdH1cblxuXHRyZXR1cm4gdHlwZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFu
Y2VPZiA9IHRoaXMuaW5zdGFuY2VPZiA9IGZ1bmN0aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChp
dGVtID09IG51bGwpIHJldHVybiBmYWxzZTtcblx0dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29u
c3RydWN0b3IgfHwgaXRlbS5jb25zdHJ1Y3Rvcjtcblx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0
XHRpZiAoY29uc3RydWN0b3IgPT09IG9iamVjdCkgcmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0
b3IgPSBjb25zdHJ1Y3Rvci5wYXJlbnQ7XG5cdH1cblx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVt
Lmhhc093blByb3BlcnR5KSByZXR1cm4gZmFsc2U7XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4g
aXRlbSBpbnN0YW5jZW9mIG9iamVjdDtcbn07XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVj
dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJs
ZXMgPSB0cnVlO1xuZm9yICh2YXIgaSBpbiB7dG9TdHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51
bGw7XG5pZiAoZW51bWVyYWJsZXMpIGVudW1lcmFibGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2
YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2Nh
bGVTdHJpbmcnLCAndG9TdHJpbmcnLCAnY29uc3RydWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hP
YmplY3RFbnVtYmVyYWJsZUtleShvYmplY3QsIGZuLCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVz
KSBmb3IgKHZhciBpID0gZW51bWVyYWJsZXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVu
dW1lcmFibGVzW2ldO1xuXHRcdC8vIHNpZ25hdHVyZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9h
ZFNldHRlciBjYW4gZGlyZWN0bHkgcGFzcyB0aGVcblx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdp
dGhvdXQgc3dhcHBpbmcgYXJndW1lbnRzLlxuXHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
amVjdCwgaykpIGZuLmNhbGwoYmluZCwgaywgb2JqZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4
PiovXG5cbi8vIEZ1bmN0aW9uIG92ZXJsb2FkaW5nXG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVu
Y3Rpb247XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVz
ZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xu
XHRcdGlmIChhID09IG51bGwpIHJldHVybiB0aGlzO1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlw
ZW9mIGEgIT0gJ3N0cmluZycpe1xuXHRcdFx0Zm9yICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhp
cywgaywgYVtrXSk7XG5cdFx0XHQvKjxsdElFOD4qL1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1i
ZXJhYmxlS2V5KGEsIHNlbGYsIHRoaXMpO1xuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNl
IHtcblx0XHRcdHNlbGYuY2FsbCh0aGlzLCBhLCBiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlv
bih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtc
blx0XHR2YXIgYXJncywgcmVzdWx0O1xuXHRcdGlmICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJn
cyA9IGE7XG5cdFx0ZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVu
dHM7XG5cdFx0ZWxzZSBpZiAodXNlUGx1cmFsKSBhcmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtc
blx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0
aDsgaSsrKSByZXN1bHRbYXJnc1tpXV0gPSBzZWxmLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0
fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IHNlbGYuY2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHJlc3VsdDtcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBm
dW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpc1trZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0
dGVyKCk7XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5pbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZh
bHVlKXtcblx0dGhpcy5wcm90b3R5cGVba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigp
O1xuXG4vLyBGcm9tXG5cbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJy
YXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4g
W107XG5cdHJldHVybiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0g
J3N0cmluZycpID8gKHR5cGVPZihpdGVtKSA9PSAnYXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxs
KGl0ZW0pIDogW2l0ZW1dO1xufTtcblxuRnVuY3Rpb24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0p
e1xuXHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSAnZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiBpdGVtO1xuXHR9O1xufTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1
bmN0aW9uKGl0ZW0pe1xuXHR2YXIgbnVtYmVyID0gcGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJu
IGlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiBudWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQg
PSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIGl0ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlv
bi5mcm9tID0gRnVuY3Rpb24uY29udmVydDtcbk51bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7
XG5TdHJpbmcuZnJvbSA9IFN0cmluZy5jb252ZXJ0O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1
bmN0aW9uLmltcGxlbWVudCh7XG5cblx0aGlkZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRk
ZW4gPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy4kcHJvdGVjdGVkID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxuLy8gVHlwZVxuXG52YXIgVHlwZSA9IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUs
IG9iamVjdCl7XG5cdGlmIChuYW1lKXtcblx0XHR2YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNl
KCk7XG5cdFx0dmFyIHR5cGVDaGVjayA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0
eXBlT2YoaXRlbSkgPT0gbG93ZXIpO1xuXHRcdH07XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9
IHR5cGVDaGVjaztcblx0XHRpZiAob2JqZWN0ICE9IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3Rv
dHlwZS4kZmFtaWx5ID0gKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRc
dH0pLmhpZGUoKTtcblx0XHRcdFxuXHRcdH1cblx0fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkg
cmV0dXJuIG51bGw7XG5cblx0b2JqZWN0LmV4dGVuZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1
Y3RvciA9IFR5cGU7XG5cdG9iamVjdC5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xu
XG5cdHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nO1xuXG5UeXBlLmlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1
cm4gKGl0ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9T
dHJpbmcuY2FsbChpdGVtKSAhPSAnW29iamVjdCBGdW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9v
a3MgPSB7fTtcblxudmFyIGhvb2tzT2YgPSBmdW5jdGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9
IHR5cGVPZihvYmplY3QucHJvdG90eXBlKTtcblx0cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29r
c1t0eXBlXSA9IFtdKTtcbn07XG5cbnZhciBpbXBsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhv
b2tzID0gaG9va3NPZih0aGlzKTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0
aDsgaSsrKXtcblx0XHR2YXIgaG9vayA9IGhvb2tzW2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykg
PT0gJ3R5cGUnKSBpbXBsZW1lbnQuY2FsbChob29rLCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2Ug
aG9vay5jYWxsKHRoaXMsIG5hbWUsIG1ldGhvZCk7XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0
aGlzLnByb3RvdHlwZVtuYW1lXTtcblx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3Vz
LiRwcm90ZWN0ZWQpIHRoaXMucHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlz
W25hbWVdID09IG51bGwgJiYgdHlwZU9mKG1ldGhvZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNh
bGwodGhpcywgbmFtZSwgZnVuY3Rpb24oaXRlbSl7XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShp
dGVtLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQg
PSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVu
KSByZXR1cm47XG5cdHZhciBwcmV2aW91cyA9IHRoaXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9
PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVkKSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtc
blxuVHlwZS5pbXBsZW1lbnQoe1xuXG5cdGltcGxlbWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0
dGVyKCksXG5cblx0ZXh0ZW5kOiBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczog
ZnVuY3Rpb24obmFtZSwgZXhpc3Rpbmcpe1xuXHRcdGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUs
IHRoaXMucHJvdG90eXBlW2V4aXN0aW5nXSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRt
aXJyb3I6IGZ1bmN0aW9uKGhvb2spe1xuXHRcdGhvb2tzT2YodGhpcykucHVzaChob29rKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxubmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxu
Ly8gRGVmYXVsdCBUeXBlc1xuXG52YXIgZm9yY2UgPSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1l
dGhvZHMpe1xuXHR2YXIgaXNUeXBlID0gKG9iamVjdCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlw
ZSA9IG9iamVjdC5wcm90b3R5cGU7XG5cblx0aWYgKGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUo
bmFtZSwgb2JqZWN0KTtcblxuXHRmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHR2YXIga2V5ID0gbWV0aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBv
YmplY3Rba2V5XSxcblx0XHRcdHByb3RvID0gcHJvdG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2Vu
ZXJpYykgZ2VuZXJpYy5wcm90ZWN0KCk7XG5cdFx0aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0
LmltcGxlbWVudChrZXksIHByb3RvLnByb3RlY3QoKSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtc
blx0XHR2YXIgbWV0aG9kc0VudW1lcmFibGUgPSBwcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFi
bGUobWV0aG9kc1swXSk7XG5cdFx0b2JqZWN0LmZvckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7
XG5cdFx0XHRpZiAoIW1ldGhvZHNFbnVtZXJhYmxlKSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhv
ZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3Rv
dHlwZVttZXRob2RzW2ldXSwgbWV0aG9kc1tpXSk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gcHJvdG90eXBlKSBmbi5jYWxsKHByb3RvdHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7
XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBmb3JjZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBT
dHJpbmcsIFtcblx0J2NoYXJBdCcsICdjaGFyQ29kZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycs
ICdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ21hdGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAn
c2VhcmNoJyxcblx0J3NsaWNlJywgJ3NwbGl0JywgJ3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJp
bScsICd0b0xvd2VyQ2FzZScsICd0b1VwcGVyQ2FzZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5c
dCdwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vu
c2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5k
ZXhPZicsICdmaWx0ZXInLCAnZm9yRWFjaCcsICdldmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1
Y2UnLCAncmVkdWNlUmlnaHQnLCAnY29udGFpbnMnXG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5c
dCd0b0V4cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNp
b24nXG5dKSgnRnVuY3Rpb24nLCBGdW5jdGlvbiwgW1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5k
J1xuXSkoJ1JlZ0V4cCcsIFJlZ0V4cCwgW1xuXHQnZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcs
IE9iamVjdCwgW1xuXHQnY3JlYXRlJywgJ2RlZmluZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRp
ZXMnLCAna2V5cycsXG5cdCdnZXRQcm90b3R5cGVPZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsXG5cdCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4
dGVuc2libGUnLCAnc2VhbCcsICdpc1NlYWxlZCcsICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgn
RGF0ZScsIERhdGUsIFsnbm93J10pO1xuXG5PYmplY3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2Fk
U2V0dGVyKCk7XG5cbkRhdGUuZXh0ZW5kKCdub3cnLCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhu
ZXcgRGF0ZSk7XG59KTtcblxubmV3IFR5cGUoJ0Jvb2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4
ZXMgTmFOIHJldHVybmluZyBhcyBOdW1iZXJcblxuTnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0g
ZnVuY3Rpb24oKXtcblx0cmV0dXJuIGlzRmluaXRlKHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7
XG59LmhpZGUoKTtcblxuLy8gTnVtYmVyLnJhbmRvbVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20n
LCBmdW5jdGlvbihtaW4sIG1heCl7XG5cdHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkg
KiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xufSk7XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNc
blxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9u
KGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsg
aSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhp
cyk7XG5cdFx0fVxuXHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBi
aW5kKXtcblx0XHRBcnJheS5mb3JFYWNoKHRoaXMsIGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59KTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2Jq
ZWN0KXtcblx0XHR2YXIga2V5cyA9IFtdO1xuXHRcdGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0
XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGtleXMucHVzaChrKTtcblx0
XHR9XG5cdFx0Lyo8bHRJRTg+Ki9cblx0XHRmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2Jq
ZWN0LCBmdW5jdGlvbihrKXtcblx0XHRcdGtleXMucHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwv
bHRJRTg+Ki9cblx0XHRyZXR1cm4ga2V5cztcblx0fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihv
YmplY3QsIGZuLCBiaW5kKXtcblx0XHRPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rp
b24oa2V5KXtcblx0XHRcdGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtc
blx0XHR9KTtcblx0fVxuXG59KTtcblxuT2JqZWN0LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxu
XG4vLyBBcnJheSAmIE9iamVjdCBjbG9uaW5nLCBPYmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5n
XG5cbnZhciBjbG9uZU9mID0gZnVuY3Rpb24oaXRlbSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0p
KXtcblx0XHRjYXNlICdhcnJheSc6IHJldHVybiBpdGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2Jq
ZWN0JzogcmV0dXJuIE9iamVjdC5jbG9uZShpdGVtKTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRl
bTtcblx0fVxufTtcblxuQXJyYXkuaW1wbGVtZW50KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZh
ciBpID0gdGhpcy5sZW5ndGgsIGNsb25lID0gbmV3IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBj
bG9uZVtpXSA9IGNsb25lT2YodGhpc1tpXSk7XG5cdHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIg
bWVyZ2VPbmUgPSBmdW5jdGlvbihzb3VyY2UsIGtleSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlw
ZU9mKGN1cnJlbnQpKXtcblx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3Vy
Y2Vba2V5XSkgPT0gJ29iamVjdCcpIE9iamVjdC5tZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7
XG5cdFx0XHRlbHNlIHNvdXJjZVtrZXldID0gT2JqZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0
YnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXknOiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsg
YnJlYWs7XG5cdFx0ZGVmYXVsdDogc291cmNlW2tleV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVy
biBzb3VyY2U7XG59O1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291
cmNlLCBrLCB2KXtcblx0XHRpZiAodHlwZU9mKGspID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VP
bmUoc291cmNlLCBrLCB2KTtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIG9iamVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRc
dGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1lcmdlT25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5
XSk7XG5cdFx0fVxuXHRcdHJldHVybiBzb3VyY2U7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9u
KG9iamVjdCl7XG5cdFx0dmFyIGNsb25lID0ge307XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVj
dCkgY2xvbmVba2V5XSA9IGNsb25lT2Yob2JqZWN0W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtc
blx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKG9yaWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0g
MSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVk
ID0gYXJndW1lbnRzW2ldIHx8IHt9O1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBv
cmlnaW5hbFtrZXldID0gZXh0ZW5kZWRba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFs
O1xuXHR9XG5cbn0pO1xuXG4vLyBPYmplY3QtbGVzcyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0
ZVNwYWNlJywgJ1RleHROb2RlJywgJ0NvbGxlY3Rpb24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5j
dGlvbihuYW1lKXtcblx0bmV3IFR5cGUobmFtZSk7XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZh
ciBVSUQgPSBEYXRlLm5vdygpO1xuXG5TdHJpbmcuZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9u
KCl7XG5cdHJldHVybiAoVUlEKyspLnRvU3RyaW5nKDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBBcnJheVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJv
dG90eXBlcyBsaWtlIGVhY2gsIGNvbnRhaW5zLCBhbmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1R5cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4u
Li5cbiovXG5cbkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVu
Y3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+
IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChpIGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQs
IHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVl
O1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRz
ID0gW107XG5cdFx0Zm9yICh2YXIgdmFsdWUsIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7
IGkgPCBsOyBpKyspIGlmIChpIGluIHRoaXMpe1xuXHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRc
dFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGksIHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUp
O1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlv
bihpdGVtLCBmcm9tKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0
Zm9yICh2YXIgaSA9IChmcm9tIDwgMCkgPyBNYXRoLm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZy
b20gfHwgMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSBy
ZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9
IEFycmF5KGxlbmd0aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5c
dFx0XHRpZiAoaSBpbiB0aGlzKSByZXN1bHRzW2ldID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBp
LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVu
Y3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+
IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChpIGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwg
dGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7
XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtc
blx0XHR9KTtcblx0fSxcblxuXHRpbnZva2U6IGZ1bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZh
ciBhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAo
ZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVt
LCBhcmdzKTtcblx0XHR9KTtcblx0fSxcblxuXHRhc3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xu
XHRcdHZhciBvYmogPSB7fSwgbGVuZ3RoID0gTWF0aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVu
Z3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0g
PSB0aGlzW2ldO1xuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0bGluazogZnVuY3Rpb24ob2Jq
ZWN0KXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0
XHRcdFx0aWYgKG9iamVjdFtrZXldKHRoaXNbaV0pKXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9
IHRoaXNbaV07XG5cdFx0XHRcdFx0ZGVsZXRlIG9iamVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFr
O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5c
blx0Y29udGFpbnM6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4
T2YoaXRlbSwgZnJvbSkgIT0gLTE7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7
XG5cdFx0dGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFycmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8g
dGhpc1t0aGlzLmxlbmd0aCAtIDFdIDogbnVsbDtcblx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwg
dGhpcy5sZW5ndGggLSAxKV0gOiBudWxsO1xuXHR9LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdGlmICghdGhpcy5jb250YWlucyhpdGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbWJpbmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRl
KGFycmF5W2ldKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24o
aXRlbSl7XG5cdFx0Zm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0
aGlzW2ldID09PSBpdGVtKSB0aGlzLnNwbGljZShpLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZsYXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IGFycmF5ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVPZih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBl
ID09ICdudWxsJykgY29udGludWU7XG5cdFx0XHRhcnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9
PSAnYXJyYXknIHx8IHR5cGUgPT0gJ2NvbGxlY3Rpb24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycg
fHwgaW5zdGFuY2VPZih0aGlzW2ldLCBBcnJheSkpID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6
IHRoaXNbaV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVu
Y3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdGlmICh0aGlzW2ldICE9IG51bGwpIHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0
XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRc
dGlmICh0aGlzLmxlbmd0aCAhPSAzKSByZXR1cm4gbnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5t
YXAoZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSAr
PSB2YWx1ZTtcblx0XHRcdHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRc
dHJldHVybiAoYXJyYXkpID8gcmdiIDogJ3JnYignICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJn
YlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJu
IG51bGw7XG5cdFx0aWYgKHRoaXMubGVuZ3RoID09IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJh
eSkgcmV0dXJuICd0cmFuc3BhcmVudCc7XG5cdFx0dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFy
IGkgPSAwOyBpIDwgMzsgaSsrKXtcblx0XHRcdHZhciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3Ry
aW5nKDE2KTtcblx0XHRcdGhleC5wdXNoKChiaXQubGVuZ3RoID09IDEpID8gJzAnICsgYml0IDog
Yml0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhcnJheSkgPyBoZXggOiAnIycgKyBoZXguam9pbign
Jyk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2Ny
aXB0aW9uOiBDb250YWlucyBGdW5jdGlvbiBQcm90b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBw
YXNzLCBhbmQgZGVsYXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogVHlwZVxuXG5wcm92aWRlczogRnVuY3Rpb25cblxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRl
bmQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBh
cmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVy
biBhcmd1bWVudHNbaV0oKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJu
IG51bGw7XG5cdH1cblxufSk7XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDog
ZnVuY3Rpb24oYXJncywgYmluZCl7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5
KGJpbmQsIEFycmF5LmNvbnZlcnQoYXJncykpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJl
dHVybiBudWxsO1xuXHR9LFxuXG5cdC8qPCFFUzUtYmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0
aGF0KXtcblx0XHR2YXIgc2VsZiA9IHRoaXMsXG5cdFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0
aCA+IDEgPyBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5j
dGlvbigpe307XG5cblx0XHR2YXIgYm91bmQgPSBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRl
eHQgPSB0aGF0LCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5z
dGFuY2VvZiBib3VuZCl7XG5cdFx0XHRcdEYucHJvdG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5c
dFx0XHRcdGNvbnRleHQgPSBuZXcgRjtcblx0XHRcdH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFy
Z3MgJiYgIWxlbmd0aClcblx0XHRcdFx0PyBzZWxmLmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBz
ZWxmLmFwcGx5KGNvbnRleHQsIGFyZ3MgJiYgbGVuZ3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xp
Y2UoYXJndW1lbnRzKSkgOiBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4
dCA9PSB0aGF0ID8gcmVzdWx0IDogY29udGV4dDtcblx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtc
blx0fSxcblx0Lyo8LyFFUzUtYmluZD4qL1xuXG5cdHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQp
e1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRpZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJy
YXkuY29udmVydChhcmdzKTtcblx0XHRyZXR1cm4gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBz
ZWxmLmFwcGx5KGJpbmQsIGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRl
bGF5OiBmdW5jdGlvbihkZWxheSwgYmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQo
dGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9
LFxuXG5cdHBlcmlvZGljYWw6IGZ1bmN0aW9uKHBlcmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRc
dHJldHVybiBzZXRJbnRlcnZhbCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyks
IGJpbmQpLCBwZXJpb2RpY2FsKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTog
TnVtYmVyXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxp
bWl0LCByb3VuZCwgdGltZXMsIGFuZCBjZWlsLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51
bWJlci5pbXBsZW1lbnQoe1xuXG5cdGxpbWl0OiBmdW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0
dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6
IGZ1bmN0aW9uKHByZWNpc2lvbil7XG5cdFx0cHJlY2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNp
c2lvbiB8fCAwKS50b0ZpeGVkKHByZWNpc2lvbiA8IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0
cmV0dXJuIE1hdGgucm91bmQodGhpcyAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5c
blx0dGltZXM6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXM7IGkrKykgZm4uY2FsbChiaW5kLCBpLCB0aGlzKTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBm
dW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5c
dH1cblxufSk7XG5cbk51bWJlci5hbGlhcygnZWFjaCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24o
bWF0aCl7XG5cbnZhciBtZXRob2RzID0ge307XG5cbm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtc
blx0aWYgKCFOdW1iZXJbbmFtZV0pIG1ldGhvZHNbbmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiBNYXRoW25hbWVdLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChh
cmd1bWVudHMpKSk7XG5cdH07XG59KTtcblxuTnVtYmVyLmltcGxlbWVudChtZXRob2RzKTtcblxu
fSkoWydhYnMnLCAnYWNvcycsICdhc2luJywgJ2F0YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3Mn
LCAnZXhwJywgJ2Zsb29yJywgJ2xvZycsICdtYXgnLCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3Fy
dCcsICd0YW4nXSk7XG5cbi8qXG4tLS1cblxubmFtZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBTdHJpbmcgUHJvdG90eXBlcyBsaWtlIGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVz
dCwgYW5kIHRvSW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IFtUeXBlLCBBcnJheV1cblxucHJvdmlkZXM6IFN0cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5p
bXBsZW1lbnQoe1xuXG5cdC8vPCFFUzY+XG5cdGNvbnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGlu
ZGV4KXtcblx0XHRyZXR1cm4gKGluZGV4ID8gU3RyaW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0
cmluZyh0aGlzKSkuaW5kZXhPZihzdHJpbmcpID4gLTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5c
dHRlc3Q6IGZ1bmN0aW9uKHJlZ2V4LCBwYXJhbXMpe1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdl
eCkgPT0gJ3JlZ2V4cCcpID8gcmVnZXggOiBuZXcgUmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykp
LnRlc3QodGhpcyk7XG5cdH0sXG5cblx0dHJpbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3Ry
aW5nKHRoaXMpLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblx0fSxcblxuXHRjbGVhbjog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAn
KS50cmltKCk7XG5cdH0sXG5cblx0Y2FtZWxDYXNlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBT
dHJpbmcodGhpcykucmVwbGFjZSgvLVxcRC9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1
cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlw
aGVuYXRlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvW0Et
Wl0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQo
MCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0
aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xu
XHR9LFxuXG5cdGVzY2FwZVJlZ0V4cDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRo
aXMpLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5c
dH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlz
LCBiYXNlIHx8IDEwKTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7
XG5cdFx0dmFyIGhleCA9IFN0cmluZyh0aGlzKS5tYXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwy
fSkoXFx3ezEsMn0pJC8pO1xuXHRcdHJldHVybiAoaGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1Jn
YihhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5c
dFx0dmFyIHJnYiA9IFN0cmluZyh0aGlzKS5tYXRjaCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJu
IChyZ2IpID8gcmdiLnJnYlRvSGV4KGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0
ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdleHApe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVw
bGFjZShyZWdleHAgfHwgKC9cXFxcP1xceyhbXnt9XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwg
bmFtZSl7XG5cdFx0XHRpZiAobWF0Y2guY2hhckF0KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNo
LnNsaWNlKDEpO1xuXHRcdFx0cmV0dXJuIChvYmplY3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3Rb
bmFtZV0gOiAnJztcblx0XHR9KTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTog
QnJvd3NlclxuXG5kZXNjcmlwdGlvbjogVGhlIEJyb3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93
c2VyIGluaXRpYWxpemF0aW9uLCBXaW5kb3cgYW5kIERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIg
SGFzaC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXks
IEZ1bmN0aW9uLCBOdW1iZXIsIFN0cmluZ11cblxucHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3cs
IERvY3VtZW50XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0
aGlzLmRvY3VtZW50O1xudmFyIHdpbmRvdyA9IGRvY3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZh
ciBwYXJzZSA9IGZ1bmN0aW9uKHVhLCBwbGF0Zm9ybSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2Uo
KTtcblx0cGxhdGZvcm0gPSAocGxhdGZvcm0gPyBwbGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycp
O1xuXG5cdC8vIGNocm9tZSBpcyBpbmNsdWRlZCBpbiB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBj
aGVjayBmb3IgZWRnZSBmaXJzdCxcblx0Ly8gYmVmb3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21l
LlxuXHR2YXIgVUEgPSB1YS5tYXRjaCgvKGVkZ2UpW1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtc
blx0aWYgKCFVQSl7XG5cdFx0VUEgPSB1YS5tYXRjaCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21l
fHRyaWRlbnR8Y3Jpb3N8dmVyc2lvbilbXFxzXFwvOl0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJp
fCg/OnJ2W1xcc1xcLzpdfHZlcnNpb25bXFxzXFwvOl0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBb
bnVsbCwgJ3Vua25vd24nLCAwXTtcblx0fVxuXG5cdGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xu
XHRcdFVBWzFdID0gJ2llJztcblx0XHRpZiAoVUFbNF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxz
ZSBpZiAoVUFbMV0gPT0gJ2NyaW9zJyl7XG5cdFx0VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5c
dHBsYXRmb3JtID0gdWEubWF0Y2goL2lwKD86YWR8b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1h
dGNoKC8oPzp3ZWJvc3xhbmRyb2lkKS8pIHx8IHVhLm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwg
WydvdGhlciddKVswXTtcblx0aWYgKHBsYXRmb3JtID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5k
b3dzJztcblxuXHRyZXR1cm4ge1xuXHRcdGV4dGVuZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVu
ZCxcblx0XHRuYW1lOiAoVUFbMV0gPT0gJ3ZlcnNpb24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0
dmVyc2lvbjogcGFyc2VGbG9hdCgoVUFbMV0gPT0gJ29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6
IFVBWzJdKSxcblx0XHRwbGF0Zm9ybTogcGxhdGZvcm1cblx0fTtcbn07XG5cbnZhciBCcm93c2Vy
ID0gdGhpcy5Ccm93c2VyID0gcGFyc2UobmF2aWdhdG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBs
YXRmb3JtKTtcblxuaWYgKEJyb3dzZXIubmFtZSA9PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50
TW9kZSl7XG5cdEJyb3dzZXIudmVyc2lvbiA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxu
QnJvd3Nlci5leHRlbmQoe1xuXHRGZWF0dXJlczoge1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5l
dmFsdWF0ZSksXG5cdFx0YWlyOiAhISh3aW5kb3cucnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IpLFxuXHRcdGpzb246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxu
XHRwYXJzZVVBOiBwYXJzZVxufSk7XG5cblxuXG4vLyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVz
dCA9IChmdW5jdGlvbigpe1xuXG5cdHZhciBYTUxIVFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdH07XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9
O1xuXG5cdHZhciBNU1hNTCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2Jq
ZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRl
bXB0KGZ1bmN0aW9uKCl7XG5cdFx0WE1MSFRUUCgpO1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9
LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MMigpO1xuXHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1
bmN0aW9uKCl7XG5cdFx0TVNYTUwoKTtcblx0XHRyZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgp
O1xuXG5Ccm93c2VyLkZlYXR1cmVzLnhociA9ICEhKEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4v
LyBTdHJpbmcgc2NyaXB0c1xuXG5Ccm93c2VyLmV4ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYg
KCF0ZXh0KSByZXR1cm4gdGV4dDtcblx0aWYgKHdpbmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5k
b3cuZXhlY1NjcmlwdCh0ZXh0KTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlw
ZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRzY3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9j
dW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3Zl
Q2hpbGQoc2NyaXB0KTtcblx0fVxuXHRyZXR1cm4gdGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1l
bnQoJ3N0cmlwU2NyaXB0cycsIGZ1bmN0aW9uKGV4ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xu
XHR2YXIgdGV4dCA9IHRoaXMucmVwbGFjZSgvPHNjcmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9z
Y3JpcHQ+L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUpe1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdc
XG4nO1xuXHRcdHJldHVybiAnJztcblx0fSk7XG5cdGlmIChleGVjID09PSB0cnVlKSBCcm93c2Vy
LmV4ZWMoc2NyaXB0cyk7XG5cdGVsc2UgaWYgKHR5cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBl
eGVjKHNjcmlwdHMsIHRleHQpO1xuXHRyZXR1cm4gdGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERv
Y3VtZW50XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5c
dFdpbmRvdzogdGhpcy5XaW5kb3csXG5cdEVsZW1lbnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6
IHRoaXMuRXZlbnRcbn0pO1xuXG50aGlzLldpbmRvdyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3
IFR5cGUoJ1dpbmRvdycsIGZ1bmN0aW9uKCl7fSk7XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9u
LmNvbnZlcnQoJ3dpbmRvdycpLmhpZGUoKTtcblxuV2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1l
LCBtZXRob2Qpe1xuXHR3aW5kb3dbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVu
dCA9IGRvY3VtZW50LiRjb25zdHJ1Y3RvciA9IG5ldyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9u
KCl7fSk7XG5cbmRvY3VtZW50LiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcp
LmhpZGUoKTtcblxuRG9jdW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRv
Y3VtZW50W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQ7XG5pZiAoIWRvY3VtZW50LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhl
Y0NvbW1hbmQpIHRyeSB7XG5cdGRvY3VtZW50LmV4ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VD
YWNoZScsIGZhbHNlLCB0cnVlKTtcbn0gY2F0Y2ggKGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0
aGlzLmF0dGFjaEV2ZW50ICYmICF0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2Fk
RXZlbnQgPSBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5s
b2FkRXZlbnQpO1xuXHRcdGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQu
d2luZG93ID0gbnVsbDtcblx0XHR3aW5kb3cgPSB0aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVs
bDtcblx0fTtcblx0dGhpcy5hdHRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59
XG5cbi8vIElFIGZhaWxzIG9uIGNvbGxlY3Rpb25zIGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZl
cnMgdG8gPHNlbGVjdD4pXG52YXIgYXJyYXlGcm9tID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5c
dGFycmF5RnJvbShkb2N1bWVudC5odG1sLmNoaWxkTm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFy
cmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0
cmluZycgJiYgVHlwZS5pc0VudW1lcmFibGUoaXRlbSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJh
eScpe1xuXHRcdFx0dmFyIGkgPSBpdGVtLmxlbmd0aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5c
dFx0XHR3aGlsZSAoaS0tKSBhcnJheVtpXSA9IGl0ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7
XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheUZyb20oaXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3Rv
dHlwZSA9IEFycmF5LnByb3RvdHlwZSxcblx0XHRzbGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0
Wydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vu
c2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xu
XHRcdHZhciBtZXRob2QgPSBwcm90b3R5cGVbbmFtZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5j
dGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBtZXRob2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVt
KSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElF
OT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlv
bjogQ29udGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9uIGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVu
ZGluZywgYW5kIGltcGxlbWVudGluZyByZXVzYWJsZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVt
YmVyXVxuXG5wcm92aWRlczogQ2xhc3NcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFy
IENsYXNzID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBlKCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7
XG5cdGlmIChpbnN0YW5jZU9mKHBhcmFtcywgRnVuY3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6
ZTogcGFyYW1zfTtcblxuXHR2YXIgbmV3Q2xhc3MgPSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRo
aXMpO1xuXHRcdGlmIChuZXdDbGFzcy4kcHJvdG90eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRo
aXMuJGNhbGxlciA9IG51bGw7XG5cdFx0dGhpcy4kZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFs
dWUgPSAodGhpcy5pbml0aWFsaXplKSA/IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1
bWVudHMpIDogdGhpcztcblx0XHR0aGlzLiRjYWxsZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5c
dFx0cmV0dXJuIHZhbHVlO1xuXHR9LmV4dGVuZCh0aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxu
XHRuZXdDbGFzcy4kY29uc3RydWN0b3IgPSBDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRj
b25zdHJ1Y3RvciA9IG5ld0NsYXNzO1xuXHRuZXdDbGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFy
ZW50O1xuXG5cdHJldHVybiBuZXdDbGFzcztcbn0pO1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24o
KXtcblx0aWYgKCF0aGlzLiRjYWxsZXIpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBh
cmVudFwiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRu
YW1lLFxuXHRcdHBhcmVudCA9IHRoaXMuJGNhbGxlci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZp
b3VzID0gKHBhcmVudCkgPyBwYXJlbnQucHJvdG90eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFw
cmV2aW91cykgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFz
IG5vIHBhcmVudC4nKTtcblx0cmV0dXJuIHByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
XG59O1xuXG52YXIgcmVzZXQgPSBmdW5jdGlvbihvYmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4g
b2JqZWN0KXtcblx0XHR2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVP
Zih2YWx1ZSkpe1xuXHRcdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlv
bigpe307XG5cdFx0XHRcdEYucHJvdG90eXBlID0gdmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXld
ID0gcmVzZXQobmV3IEYpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2Jq
ZWN0W2tleV0gPSB2YWx1ZS5jbG9uZSgpOyBicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9i
amVjdDtcbn07XG5cbnZhciB3cmFwID0gZnVuY3Rpb24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRp
ZiAobWV0aG9kLiRvcmlnaW4pIG1ldGhvZCA9IG1ldGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBl
ciA9IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKG1ldGhvZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxl
ciA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNh
bm5vdCBiZSBjYWxsZWQuJyk7XG5cdFx0dmFyIGNhbGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50
ID0gdGhpcy4kY2FsbGVyO1xuXHRcdHRoaXMuY2FsbGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVy
ID0gd3JhcHBlcjtcblx0XHR2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7XG5cdFx0dGhpcy4kY2FsbGVyID0gY3VycmVudDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5c
dFx0cmV0dXJuIHJlc3VsdDtcblx0fS5leHRlbmQoeyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0
aG9kLCAkbmFtZToga2V5fSk7XG5cdHJldHVybiB3cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVu
dCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIHJldGFpbil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5o
YXNPd25Qcm9wZXJ0eShrZXkpKXtcblx0XHR2YWx1ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2Fs
bCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9
XG5cblx0aWYgKHR5cGVPZih2YWx1ZSkgPT0gJ2Z1bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRo
aWRkZW4pIHJldHVybiB0aGlzO1xuXHRcdHRoaXMucHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/
IHZhbHVlIDogd3JhcCh0aGlzLCBrZXksIHZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3Qu
bWVyZ2UodGhpcy5wcm90b3R5cGUsIGtleSwgdmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7
XG59O1xuXG52YXIgZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90
b3R5cGluZyA9IHRydWU7XG5cdHZhciBwcm90byA9IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNz
LiRwcm90b3R5cGluZztcblx0cmV0dXJuIHByb3RvO1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdp
bXBsZW1lbnQnLCBpbXBsZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3Jz
ID0ge1xuXG5cdEV4dGVuZHM6IGZ1bmN0aW9uKHBhcmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBw
YXJlbnQ7XG5cdFx0dGhpcy5wcm90b3R5cGUgPSBnZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxu
XG5cdEltcGxlbWVudHM6IGZ1bmN0aW9uKGl0ZW1zKXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1z
KS5lYWNoKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5c
dFx0XHRmb3IgKHZhciBrZXkgaW4gaW5zdGFuY2UpIGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwg
aW5zdGFuY2Vba2V5XSwgdHJ1ZSk7XG5cdFx0fSwgdGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5c
bi8qXG4tLS1cblxubmFtZTogQ2xhc3MuRXh0cmFzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBV
dGlsaXR5IENsYXNzZXMgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFz
c2VzIHRvIGVhc2UgdGhlIGV4ZWN1dGlvbiBvZiBtYW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0Ns
YXNzLkV4dHJhcywgQ2hhaW4sIEV2ZW50cywgT3B0aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rp
b24oKXtcblxudGhpcy5DaGFpbiA9IG5ldyBDbGFzcyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRj
aGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihh
cmd1bWVudHMpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLiRjaGFpbi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hp
ZnQoKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFp
bjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFpbi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG52YXIgcmVtb3ZlT24gPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1
cm4gc3RyaW5nLnJlcGxhY2UoL15vbihbQS1aXSkvLCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5c
dFx0cmV0dXJuIGZpcnN0LnRvTG93ZXJDYXNlKCk7XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMg
PSBuZXcgQ2xhc3Moe1xuXG5cdCRldmVudHM6IHt9LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0
eXBlLCBmbiwgaW50ZXJuYWwpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxu
XG5cdFx0dGhpcy4kZXZlbnRzW3R5cGVdID0gKHRoaXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5j
bHVkZShmbik7XG5cdFx0aWYgKGludGVybmFsKSBmbi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZv
ciAodmFyIHR5cGUgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBh
cmdzLCBkZWxheSl7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMg
PSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRc
dGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZu
KXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0
ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUg
PSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xu
XHRcdGlmIChldmVudHMgJiYgIWZuLmludGVybmFsKXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50
cy5pbmRleE9mKGZuKTtcblx0XHRcdGlmIChpbmRleCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRl
eF07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVu
Y3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0g
J29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0
eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChl
dmVudHMpIGV2ZW50cyA9IHJlbW92ZU9uKGV2ZW50cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMu
JGV2ZW50cyl7XG5cdFx0XHRpZiAoZXZlbnRzICYmIGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtc
blx0XHRcdHZhciBmbnMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0g
Zm5zLmxlbmd0aDsgaS0tOykgaWYgKGkgaW4gZm5zKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVu
dCh0eXBlLCBmbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxudGhpcy5PcHRpb25zID0gbmV3IENsYXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5j
dGlvbigpe1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFw
cGx5KG51bGwsIFt7fSwgdGhpcy5vcHRpb25zXS5hcHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYg
KHRoaXMuYWRkRXZlbnQpIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0
eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAhPSAnZnVuY3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVz
dChvcHRpb24pKSBjb250aW51ZTtcblx0XHRcdHRoaXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25z
W29wdGlvbl0pO1xuXHRcdFx0ZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3Mu
VGhlbmFibGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNh
biBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3duIENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhl
bmFibGVcIi5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFz
c1xuXG5wcm92aWRlczogW0NsYXNzLlRoZW5hYmxlXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigp
e1xuXG52YXIgU1RBVEVfUEVORElORyA9IDAsXG5cdFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNU
QVRFX1JFSkVDVEVEID0gMjtcblxudmFyIFRoZW5hYmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcg
Q2xhc3Moe1xuXG5cdCR0aGVuYWJsZVN0YXRlOiBTVEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVS
ZXN1bHQ6IG51bGwsXG5cdCR0aGVuYWJsZVJlYWN0aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVu
Y3Rpb24odmFsdWUpe1xuXHRcdHJlc29sdmUodGhpcywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywg
cmVhc29uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBm
dW5jdGlvbigpe1xuXHRcdHN3aXRjaCAodGhpcy4kdGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNl
IFNUQVRFX1BFTkRJTkc6XG5cdFx0XHRcdHJldHVybiAncGVuZGluZyc7XG5cblx0XHRcdGNhc2Ug
U1RBVEVfRlVMRklMTEVEOlxuXHRcdFx0XHRyZXR1cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNh
c2UgU1RBVEVfUkVKRUNURUQ6XG5cdFx0XHRcdHJldHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0
fSxcblxuXHRyZXNldFRoZW5hYmxlOiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlz
LCByZWFzb24pO1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9m
IG9uRnVsZmlsbGVkICE9PSAnZnVuY3Rpb24nKSBvbkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5c
dFx0aWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAnZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Ro
cm93ZXInO1xuXG5cdFx0dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlz
LiR0aGVuYWJsZVJlYWN0aW9ucy5wdXNoKHtcblx0XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0
XHRcdGZ1bGZpbGxIYW5kbGVyOiBvbkZ1bGZpbGxlZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9u
UmVqZWN0ZWRcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFU
RV9QRU5ESU5HKXtcblx0XHRcdHJlYWN0KHRoaXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVu
YWJsZTtcblx0fSxcblxuXHQnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1
cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5l
eHRlbmQoe1xuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xu
XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRoZW5hYmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFs
dWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0
XHRyZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtc
blx0fSxcblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5l
dyBUaGVuYWJsZSgpO1xuXHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4g
dGhlbmFibGU7XG5cdH1cbn0pO1xuXG4vLyBQcml2YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiBy
ZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9
PT0gU1RBVEVfUEVORElORyl7XG5cdFx0aWYgKHRoZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRy
ZWplY3QodGhlbmFibGUsIG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJs
ZSB3aXRoIGl0c2VsZi4nKSk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVl
ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZh
ciB0aGVuO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9
IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7
XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0
XHR2YXIgcmVzb2x2ZWQgPSBmYWxzZTtcblx0XHRcdFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRc
dFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxc
blx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24obmV4dFZhbHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAo
IXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0
XHRcdFx0XHRcdHJlc29sdmUodGhlbmFibGUsIG5leHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0
fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRc
dFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQg
PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRc
dFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0
XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0
XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxl
LCBleGNlcHRpb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5c
dFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9
XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5c
dH1cbn1cblxuZnVuY3Rpb24gZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFi
bGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVu
YWJsZVJlc3VsdCA9IHZhbHVlO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVf
RlVMRklMTEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJl
amVjdCh0aGVuYWJsZSwgcmVhc29uKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09
PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247
XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJl
YWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlm
ICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFi
bGUuJHRoZW5hYmxlUmVzdWx0ID0gbnVsbDtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9
IFNUQVRFX1BFTkRJTkc7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2
YXIgc3RhdGUgPSB0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQsXG5cdFx0cmVhY3Rpb25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVh
Y3Rpb25zLFxuXHRcdHR5cGU7XG5cblx0aWYgKHN0YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xu
XHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmls
bEhhbmRsZXInO1xuXHR9IGVsc2UgaWYgKHN0YXRlID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0
aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRs
ZXInO1xuXHR9XG5cblx0aWYgKHR5cGUpe1xuXHRcdGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQs
IHJlYWN0aW9ucywgdHlwZV0pKTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCBy
ZWFjdGlvbnMsIHR5cGUpe1xuXHRmb3IgKHZhciBpID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7
IGkgPCBsOyArK2kpe1xuXHRcdHZhciByZWFjdGlvbiA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhh
bmRsZXIgPSByZWFjdGlvblt0eXBlXTtcblxuXHRcdGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHkn
KXtcblx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNl
IGlmIChoYW5kbGVyID09PSAnVGhyb3dlcicpe1xuXHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5h
YmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZl
KHJlYWN0aW9uLnRoZW5hYmxlLCBoYW5kbGVyKHJlc3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhj
ZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xu
XHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG52YXIgZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3Mg
IT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24n
KXtcblx0ZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNrO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1t
ZWRpYXRlICE9PSAndW5kZWZpbmVkJyl7XG5cdGRlZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNl
IHtcblx0ZGVmZXIgPSBmdW5jdGlvbihmbil7XG5cdFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07
XG59XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBP
YmplY3QgZ2VuZXJpYyBtZXRob2RzXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogW09iamVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4o
ZnVuY3Rpb24oKXtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmpl
Y3QsIGtleXMpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0
XHRpZiAoayBpbiBvYmplY3QpIHJlc3VsdHNba10gPSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJl
dHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVj
dCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZh
ciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0cmVzdWx0c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmpl
Y3Rba2V5XSwga2V5LCBvYmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxc
blxuXHRmaWx0ZXI6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRz
ID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFy
IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwg
dmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXks
IG9iamVjdCkpIHJlc3VsdHNba2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0
cztcblx0fSxcblxuXHRldmVyeTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFy
IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5
cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4u
Y2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRzb21lOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtc
blx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7
IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0
aWYgKGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1c
blx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xu
XHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7
XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBr
ID0ga2V5c1tpXTtcblx0XHRcdHZhbHVlcy5wdXNoKG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJl
dHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0Z2V0TGVuZ3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRc
dHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVu
Y3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3Qp
O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIg
a2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChvYmplY3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBr
ZXk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlv
bihvYmplY3QsIHZhbHVlKXtcblx0XHRyZXR1cm4gT2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUp
ICE9IG51bGw7XG5cdH0sXG5cblx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNl
KXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwg
ZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRpZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyAr
IGtleSArICddJztcblx0XHRcdHZhciByZXN1bHQ7XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1
ZSkpe1xuXHRcdFx0XHRjYXNlICdvYmplY3QnOiByZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmlu
Zyh2YWx1ZSwga2V5KTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2
YXIgcXMgPSB7fTtcblx0XHRcdFx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0
XHRcdFx0XHRxc1tpXSA9IHZhbDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBP
YmplY3QudG9RdWVyeVN0cmluZyhxcywga2V5KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0
ZGVmYXVsdDogcmVzdWx0ID0ga2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtc
blx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3Vs
dCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5c
bn0pO1xuXG59KSgpO1xuXG5cblxuLypcbi0tLVxubmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlw
dGlvbjogU3RhbmRhbG9uZSBDU1MzIFNlbGVjdG9yIHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBh
cnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRv
ckluZGV4LFxuXHRjb21iaW5hdG9ySW5kZXgsXG5cdHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxu
XHRyZXZlcnNlQ2FjaGUgPSB7fSxcblx0cmVVbmVzY2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJz
ZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGlzUmV2ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9
PSBudWxsKSByZXR1cm4gbnVsbDtcblx0aWYgKGV4cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJl
dHVybiBleHByZXNzaW9uO1xuXHRleHByZXNzaW9uID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFj
ZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHRyZXZlcnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFy
IGN1cnJlbnRDYWNoZSA9IChyZXZlcnNlZCkgPyByZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYg
KGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXSkgcmV0dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9u
XTtcblx0cGFyc2VkID0ge1xuXHRcdFNsaWNrOiB0cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxc
blx0XHRyYXc6IGV4cHJlc3Npb24sXG5cdFx0cmV2ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJl
dHVybiBwYXJzZSh0aGlzLnJhdywgdHJ1ZSk7XG5cdFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRl
eCA9IC0xO1xuXHR3aGlsZSAoZXhwcmVzc2lvbiAhPSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24u
cmVwbGFjZShyZWdleHAsIHBhcnNlcikpKTtcblx0cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHBy
ZXNzaW9ucy5sZW5ndGg7XG5cdHJldHVybiBjdXJyZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2
ZXJzZWQpID8gcmV2ZXJzZShwYXJzZWQpIDogcGFyc2VkO1xufTtcblxudmFyIHJldmVyc2VDb21i
aW5hdG9yID0gZnVuY3Rpb24oY29tYmluYXRvcil7XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScp
IHJldHVybiAnICc7XG5cdGVsc2UgaWYgKGNvbWJpbmF0b3IgPT09ICcgJykgcmV0dXJuICchJztc
blx0ZWxzZSBpZiAoKC9eIS8pLnRlc3QoY29tYmluYXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJl
cGxhY2UoL14hLywgJycpO1xuXHRlbHNlIHJldHVybiAnIScgKyBjb21iaW5hdG9yO1xufTtcblxu
dmFyIHJldmVyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0g
ZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9u
cy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGV4cCA9IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBs
YXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAnKicsIGNvbWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9y
KGV4cFswXS5jb21iaW5hdG9yKX07XG5cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5n
dGg7IGorKyl7XG5cdFx0XHR2YXIgY2V4cCA9IGV4cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZl
cnNlQ29tYmluYXRvcikgY2V4cC5yZXZlcnNlQ29tYmluYXRvciA9ICcgJztcblx0XHRcdGNleHAu
Y29tYmluYXRvciA9IGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5y
ZXZlcnNlQ29tYmluYXRvcjtcblx0XHR9XG5cblx0XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7
XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVu
Y3Rpb24oc3RyaW5nKXsvLyBDcmVkaXQ6IFhSZWdFeHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2
ZW4gTGV2aXRoYW4gPGh0dHA6Ly9zdGV2ZW5sZXZpdGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1J
VCBMaWNlbnNlXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8
LCNcXHNdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5c
dH0pO1xufTtcblxudmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYg
cnVieVxucHV0cyBcIlxcdFxcdFwiICsgREFUQS5yZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMu
KiR8XFxzK3xcXFxcJHxcXFxcbi8sJycpXG5fX0VORF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxc
XFxzKiAoICwgKSBcXFxccyogICAgICAgICAgICAgICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5c
XFxuXHR8IFxcXFxzKiAoIDxjb21iaW5hdG9yPisgKSBcXFxccyogICAjIENvbWJpbmF0b3IgICAg
ICAgICBcXG5cXFxuXHR8ICAgICAgKCBcXFxccysgKSAgICAgICAgICAgICAgICAgIyBDb21iaW5h
dG9yQ2hpbGRyZW4gXFxuXFxcblx0fCAgICAgICggPHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMg
VGFnICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxcXCMgICggPHVuaWNvZGU+KyAgICAgICAp
ICAgICAjIElEICAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisg
ICAgICAgKSAgICAgIyBDbGFzc05hbWUgICAgICAgICAgXFxuXFxcblx0fCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSAgICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxc
blx0XHRcXFxccyogKDx1bmljb2RlMT4rKSAgKD86ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58
XT89KSAgKD86ICBcXFxuXHRcdFx0XHRcXFxccyogKD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8p
KC4qPylcXFxcOSBcXFxuXHRcdFx0XHQpXFxcblx0XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAg
XFxcblx0XFxcXF0oPyFcXFxcXSkgXFxuXFxcblx0fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxc
blx0XFxcXCggKD86XFxcblx0XHQoPzooW1xcXCInXSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpc
XFxcKFteKV0rXFxcXCl8W14oKV0qKSspXFxcblx0KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4q
L1xuXHRcIl4oPzpcXFxccyooLClcXFxccyp8XFxcXHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChc
XFxccyspfCg8dW5pY29kZT4rfFxcXFwqKXxcXFxcIyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29k
ZT4rKXxcXFxcW1xcXFxzKig8dW5pY29kZTE+KykoPzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxc
cyooPzooW1xcXCInXT8pKC4qPylcXFxcOSkpKT9cXFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1
bmljb2RlPispKD86XFxcXCgoPzooPzooW1xcXCInXSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpc
XFxcKFteKV0rXFxcXCl8W14oKV0qKSspKVxcXFwpKT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5h
dG9yPi8sICdbJyArIGVzY2FwZVJlZ0V4cCgnPit+YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylc
blx0LnJlcGxhY2UoLzx1bmljb2RlPi9nLCAnKD86W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1d
fFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcblx0LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/
Ols6XFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxu
KTtcblxuZnVuY3Rpb24gcGFyc2VyKFxuXHRyYXdNYXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNv
bWJpbmF0b3IsXG5cdGNvbWJpbmF0b3JDaGlsZHJlbixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0
Y2xhc3NOYW1lLFxuXG5cdGF0dHJpYnV0ZUtleSxcblx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0
dHJpYnV0ZVF1b3RlLFxuXHRhdHRyaWJ1dGVWYWx1ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBz
ZXVkb0NsYXNzLFxuXHRwc2V1ZG9RdW90ZSxcblx0cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0
cHNldWRvQ2xhc3NWYWx1ZVxuKXtcblx0aWYgKHNlcGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9
PT0gLTEpe1xuXHRcdHBhcnNlZC5leHByZXNzaW9uc1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xu
XHRcdGNvbWJpbmF0b3JJbmRleCA9IC0xO1xuXHRcdGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztc
blx0fVxuXG5cdGlmIChjb21iaW5hdG9yIHx8IGNvbWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5h
dG9ySW5kZXggPT09IC0xKXtcblx0XHRjb21iaW5hdG9yID0gY29tYmluYXRvciB8fCAnICc7XG5c
dFx0dmFyIGN1cnJlbnRTZXBhcmF0b3IgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5k
ZXhdO1xuXHRcdGlmIChyZXZlcnNlZCAmJiBjdXJyZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRl
eF0pXG5cdFx0XHRjdXJyZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJp
bmF0b3IgPSByZXZlcnNlQ29tYmluYXRvcihjb21iaW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJh
dG9yWysrY29tYmluYXRvckluZGV4XSA9IHtjb21iaW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcq
J307XG5cdH1cblxuXHR2YXIgY3VycmVudFBhcnNlZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBh
cmF0b3JJbmRleF1bY29tYmluYXRvckluZGV4XTtcblxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3Vy
cmVudFBhcnNlZC50YWcgPSB0YWdOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0g
ZWxzZSBpZiAoaWQpe1xuXHRcdGN1cnJlbnRQYXJzZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2Nh
cGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xh
c3NOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2Vk
LmNsYXNzTGlzdCkgY3VycmVudFBhcnNlZC5jbGFzc0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJl
bnRQYXJzZWQuY2xhc3NlcykgY3VycmVudFBhcnNlZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVu
dFBhcnNlZC5jbGFzc0xpc3QucHVzaChjbGFzc05hbWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xh
c3Nlcy5wdXNoKHtcblx0XHRcdHZhbHVlOiBjbGFzc05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBS
ZWdFeHAoJyhefFxcXFxzKScgKyBlc2NhcGVSZWdFeHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCkn
KVxuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAocHNldWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNz
VmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlIHx8IHBzZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0
cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJl
cGxhY2UocmVVbmVzY2FwZSwgJycpIDogbnVsbDtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5w
c2V1ZG9zKSBjdXJyZW50UGFyc2VkLnBzZXVkb3MgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBz
ZXVkb3MucHVzaCh7XG5cdFx0XHRrZXk6IHBzZXVkb0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwg
JycpLFxuXHRcdFx0dmFsdWU6IHBzZXVkb0NsYXNzVmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9N
YXJrZXIubGVuZ3RoID09IDEgPyAnY2xhc3MnIDogJ2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBl
bHNlIGlmIChhdHRyaWJ1dGVLZXkpe1xuXHRcdGF0dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5y
ZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblx0XHRhdHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVW
YWx1ZSB8fCAnJykucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVn
ZXhwO1xuXG5cdFx0c3dpdGNoIChhdHRyaWJ1dGVPcGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScg
OiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVW
YWx1ZSkgICAgICAgICAgICApOyBicmVhaztcblx0XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5l
dyBSZWdFeHAoICAgICAgICAgICAgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAg
ICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhe
fFxcXFxzKScrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJy
ZWFrO1xuXHRcdFx0Y2FzZSAnfD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBl
c2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRj
YXNlICAnPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmli
dXRlVmFsdWUgPT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRl
c3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRl
eE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0xO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICch
PScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFs
dWUgIT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztcblx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBm
dW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9
XG5cblx0XHRpZiAoYXR0cmlidXRlVmFsdWUgPT0gJycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0
cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtc
blx0XHR9O1xuXG5cdFx0aWYgKCF0ZXN0KSB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0
cmV0dXJuIHZhbHVlICYmIHJlZ2V4cC50ZXN0KHZhbHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFj
dXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMpIGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xu
XHRcdGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRl
S2V5LFxuXHRcdFx0b3BlcmF0b3I6IGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0
dHJpYnV0ZVZhbHVlLFxuXHRcdFx0dGVzdDogdGVzdFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1
cm4gJyc7XG59O1xuXG4vLyBTbGljayBOU1xuXG52YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7
fSk7XG5cblNsaWNrLnBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJz
ZShleHByZXNzaW9uKTtcbn07XG5cblNsaWNrLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtc
blxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENv
bW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwv
Q29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxubmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlw
dGlvbjogVGhlIG5ldywgc3VwZXJmYXN0IGNzcyBzZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczog
U2xpY2suRmluZGVyXG5yZXF1aXJlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rp
b24oKXtcblxudmFyIGxvY2FsID0ge30sXG5cdGZlYXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJp
bmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVj
dGlvblxuXG5sb2NhbC5pc05hdGl2ZUNvZGUgPSBmdW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xc
e1xccypcXFtuYXRpdmUgY29kZVxcXVxccypcXH0vKS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9j
YWwuaXNYTUwgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxW
ZXJzaW9uKSB8fCAoISFkb2N1bWVudC54bWwpIHx8ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9
PSAnW29iamVjdCBYTUxEb2N1bWVudF0nKSB8fFxuXHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAm
JiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxv
Y2FsLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxl
bWVudHMgLyB3aW5kb3cgYXJndW1lbnRzIHRvIGRvY3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3Qg
YmUgZXh0cmFwb2xhdGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0g
ZG9jdW1lbnQubm9kZVR5cGU7XG5cdGlmIChub2RlVHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0
ZWxzZSBpZiAobm9kZVR5cGUpIGRvY3VtZW50ID0gZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8g
bm9kZVxuXHRlbHNlIGlmIChkb2N1bWVudC5uYXZpZ2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQu
ZG9jdW1lbnQ7IC8vIHdpbmRvd1xuXHRlbHNlIHJldHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdz
IHRoZSBvbGQgZG9jdW1lbnRcblxuXHRpZiAodGhpcy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJl
dHVybjtcblx0dGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhh
dmUgZG9uZSBmZWF0dXJlIGRldGVjdGlvbiBvbiB0aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZh
ciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdl
dFVJRFhNTChyb290KSxcblx0XHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5c
dFx0ZmVhdHVyZTtcblxuXHRpZiAoZmVhdHVyZXMpe1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0
dXJlcyl7XG5cdFx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxu
XHRcdHJldHVybjtcblx0fVxuXG5cdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9
IHt9O1xuXG5cdGZlYXR1cmVzLnJvb3QgPSByb290O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50
ID0gdGhpcy5pc1hNTChkb2N1bWVudCk7XG5cblx0ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5c
dD0gZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRRU0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1l
XG5cdD0gZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNlUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VC
Q05cblx0PSBmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1w
dHlBdHRyaWJ1dGVRU0Fcblx0PSBmZWF0dXJlcy5pc0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVz
Lm5hdGl2ZU1hdGNoZXNTZWxlY3RvclxuXHQ9IGZhbHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Ns
b3NlZCwgc3RhclNlbGVjdHNDb21tZW50cyxcblx0XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJD
TiwgY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRl
R2V0dGVyO1xuXG5cdHZhciBzZWxlY3RlZCwgaWQgPSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIg
dGVzdE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJv
b3QgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5
JylbMF0gfHwgcm9vdDtcblx0dGVzdFJvb3QuYXBwZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8v
IG9uIG5vbi1IVE1MIGRvY3VtZW50cyBpbm5lckhUTUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2Vz
bnQgd29yayBwcm9wZXJseVxuXHR0cnkge1xuXHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBp
ZD1cIicraWQrJ1wiPjwvYT4nO1xuXHRcdGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdH0gY2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVy
ZXMuaXNIVE1MRG9jdW1lbnQpe1xuXG5cdFx0dGVzdE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25l
JztcblxuXHRcdC8vIElFIHJldHVybnMgY29tbWVudCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVDb21tZW50KCcnKSk7XG5cdFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0
ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8g
SUUgcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5
VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9k
ZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVj
dGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgw
KSA9PSAnLycpO1xuXHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFy
R0VCVE4gPSBzdGFyU2VsZWN0c0NvbW1lbnRzIHx8IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0
Ly8gSUUgcmV0dXJucyBlbGVtZW50cyB3aXRoIHRoZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBm
b3IgZ2V0RWxlbWVudHNCeUlkIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0
ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgbmFtZT1cIicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysg
aWQgKydcIj48L2I+Jztcblx0XHRcdGZlYXR1cmVzLmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChpZCkgPT09IHRlc3ROb2RlLmZpcnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7
fVxuXG5cdFx0aWYgKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQv
LyBTYWZhcmkgMy4yIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRc
dHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+
PGEgY2xhc3M9XCJiXCI+PC9hPic7XG5cdFx0XHRcdHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoJ2InKS5sZW5ndGg7XG5cdFx0XHRcdHRlc3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1l
ID0gJ2InO1xuXHRcdFx0XHRjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2Rl
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNo
IChlKXt9O1xuXG5cdFx0XHQvLyBPcGVyYSA5LjYgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2Vz
bnQgZGV0ZWN0cyB0aGUgY2xhc3MgaWYgaXRzIG5vdCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkg
e1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNs
YXNzPVwiZiBiIGFcIj48L2E+Jztcblx0XHRcdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04g
PSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0
XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0ZmVhdHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRH
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRc
dH1cblxuXHRcdGlmICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDgg
cmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9mb28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxs
KCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5p
bm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRcdFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVy
eVNlbGVjdG9yQWxsKCcqJyk7XG5cdFx0XHRcdGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNB
ID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1l
LmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZh
cmkgMy4yIHF1ZXJ5U2VsZWN0b3JBbGwgZG9lc250IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVp
cmtzbW9kZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNs
YXNzPVwiTWlYXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9
ICF0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcuTWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRj
aCAoZSl7fVxuXG5cdFx0XHQvLyBXZWJraXQgYW5kIE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVk
IG9wdGlvbnMgb24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5v
ZGUuaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwv
b3B0aW9uPjwvc2VsZWN0Pic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAo
dGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnOmNoZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0
XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBJRSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRz
IGZvciBhdHRyWypeJF09XCJcIiBzZWxlY3RvcnMgb24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0
dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7
XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1
ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9XCJcIl0nKS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNh
dGNoIChlKXt9XG5cblx0XHR9XG5cblx0XHQvLyBJRTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1
dCBvZiBpZCB4LCBmb3JtLmdldEF0dHJpYnV0ZSh4KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRo
ZSBpbnB1dFxuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0
aW9uPVwic1wiPjxpbnB1dCBpZD1cImFjdGlvblwiLz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZv
cm1BdHRyaWJ1dGVHZXR0ZXIgPSAodGVzdE5vZGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2Fj
dGlvbicpICE9ICdzJyk7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNo
ZXNTZWxlY3RvciBmdW5jdGlvblxuXG5cdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9y
ID0gcm9vdC5tYXRjaGVzIHx8IC8qcm9vdC5tc01hdGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96
TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChm
ZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IpIHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVz
U2VsZWN0b3IgdHJvd3MgZXJyb3JzIG9uIGluY29ycmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0
XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNr
Jyk7XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0g
Y2F0Y2ggKGUpe31cblxuXHR9XG5cblx0dHJ5IHtcblx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAx
O1xuXHRcdGRlbGV0ZSByb290LnNsaWNrX2V4cGFuZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0g
dGhpcy5nZXRVSURIVE1MO1xuXHR9IGNhdGNoIChlKXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0
aGlzLmdldFVJRFhNTDtcblx0fVxuXG5cdHRlc3RSb290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtc
blx0dGVzdE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RSb290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRy
aWJ1dGVcblxuXHRmZWF0dXJlcy5nZXRBdHRyaWJ1dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1l
bnQgJiYgYnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtc
blx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmICht
ZXRob2QpIHJldHVybiBtZXRob2QuY2FsbChub2RlKTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9
IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUp
ID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwg
bmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0
XHRyZXR1cm4gKG1ldGhvZCkgPyBtZXRob2QuY2FsbChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRl
KG5hbWUpO1xuXHR9O1xuXG5cdC8vIGhhc0F0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJp
YnV0ZSA9IChyb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBm
dW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRcdHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShh
dHRyaWJ1dGUpO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0g
bm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYg
KG5vZGUuc3BlY2lmaWVkIHx8IG5vZGUubm9kZVZhbHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFp
bnNcblx0Ly8gRklYTUU6IEFkZCBzcGVjczogbG9jYWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZl
cmVudCBmb3IgeG1sIGFuZCBodG1sIGRvY3VtZW50cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlu
cyA9IHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZl
RG9jdW1lbnRDb250YWlucyA9IGRvY3VtZW50ICYmIHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50
LmNvbnRhaW5zKTtcblxuXHRmZWF0dXJlcy5jb250YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMg
JiYgbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0
XHRyZXR1cm4gY29udGV4dC5jb250YWlucyhub2RlKTtcblx0fSA6IChuYXRpdmVSb290Q29udGFp
bnMgJiYgIW5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7
XG5cdFx0Ly8gSUU4IGRvZXMgbm90IGhhdmUgLmNvbnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJl
dHVybiBjb250ZXh0ID09PSBub2RlIHx8ICgoY29udGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50IDogY29udGV4dCkuY29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9v
dCAmJiByb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5v
ZGUpe1xuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24obm9kZSkgJiAxNik7XG5cdH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2Rl
KXtcblx0XHRpZiAobm9kZSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVy
biB0cnVlO1xuXHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0
dXJuIGZhbHNlO1xuXHR9O1xuXG5cdC8vIGRvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3Jl
ZGl0cyB0byBTaXp6bGUgKGh0dHA6Ly9zaXp6bGVqcy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3Vt
ZW50U29ydGVyID0gKHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwg
Yil7XG5cdFx0aWYgKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKSByZXR1cm4gMDtcblx0XHRyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbihiKSAmIDQgPyAtMSA6IGEgPT09IGIgPyAwIDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgn
IGluIHJvb3QpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFi
LnNvdXJjZUluZGV4KSByZXR1cm4gMDtcblx0XHRyZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291
cmNlSW5kZXg7XG5cdH0gOiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7
XG5cdFx0aWYgKCFhLm93bmVyRG9jdW1lbnQgfHwgIWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7
XG5cdFx0dmFyIGFSYW5nZSA9IGEub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2Ug
PSBiLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwg
MCk7XG5cdFx0YVJhbmdlLnNldEVuZChhLCAwKTtcblx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7
XG5cdFx0YlJhbmdlLnNldEVuZChiLCAwKTtcblx0XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19FTkQsIGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5c
dHJvb3QgPSBudWxsO1xuXG5cdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tm
ZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxu
XG52YXIgcmVTaW1wbGVTZWxlY3RvciA9IC9eKFsjLl0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5c
dHJlRW1wdHlBdHRyaWJ1dGUgPSAvXFxbLitbKiReXT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FG
YWlsRXhwQ2FjaGUgPSB7fTtcblxubG9jYWwuc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhw
cmVzc2lvbiwgYXBwZW5kLCBmaXJzdCl7XG5cblx0dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChm
aXJzdCkgPyBudWxsIDogKGFwcGVuZCB8fCBbXSk7XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4g
Zm91bmQ7XG5cdGVsc2UgaWYgKGNvbnRleHQubmF2aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5k
b2N1bWVudDsgLy8gQ29udmVydCB0aGUgbm9kZSBmcm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRc
blx0ZWxzZSBpZiAoIWNvbnRleHQubm9kZVR5cGUpIHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1
cFxuXG5cdHZhciBwYXJzZWQsIGksIG5vZGUsIG5vZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVu
aXF1ZXMgPSB7fSxcblx0XHRoYXNPdGhlcnMgPSAhIShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCks
XG5cdFx0Y29udGV4dElzRG9jdW1lbnQgPSAoY29udGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRp
ZiAodGhpcy5kb2N1bWVudCAhPT0gKGNvbnRleHRJc0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRl
eHQub3duZXJEb2N1bWVudCkpIHRoaXMuc2V0RG9jdW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZv
aWQgZHVwbGljYXRpbmcgaXRlbXMgYWxyZWFkeSBpbiB0aGUgYXBwZW5kIGFycmF5XG5cdGlmICho
YXNPdGhlcnMpIGZvciAoaSA9IGZvdW5kLmxlbmd0aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJ
RChmb3VuZFtpXSldID0gdHJ1ZTtcblxuXHQvLyBleHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0
eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdc
blxuXHRcdC8qPHNpbXBsZS1zZWxlY3RvcnMtb3ZlcnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2Vs
ZWN0b3IgPSBleHByZXNzaW9uLm1hdGNoKHJlU2ltcGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNl
bGVjdG9yczogaWYgKHNpbXBsZVNlbGVjdG9yKXtcblxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBs
ZVNlbGVjdG9yWzFdLFxuXHRcdFx0XHRuYW1lID0gc2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRc
dGlmICghc3ltYm9sKXtcblxuXHRcdFx0XHRpZiAobmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5T
dGFyR0VCVE4pIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0
LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBu
b2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTsp
e1xuXHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUp
XSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1i
b2wgPT0gJyMnKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRl
eHRJc0RvY3VtZW50KSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250
ZXh0LmdldEVsZW1lbnRCeUlkKG5hbWUpO1xuXHRcdFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3Vu
ZDtcblx0XHRcdFx0aWYgKHRoaXMuaWRHZXRzTmFtZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUo
J2lkJykubm9kZVZhbHVlICE9IG5hbWUpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0
aWYgKGZpcnN0KSByZXR1cm4gbm9kZSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMg
JiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0
XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnLicpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxE
b2N1bWVudCB8fCAoKCFjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9r
ZW5HRUJDTikgJiYgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0
b3JzO1xuXHRcdFx0XHRpZiAoY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlz
LmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZShuYW1lKTtcblx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBu
dWxsO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRc
dFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3Vu
ZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2
YXIgbWF0Y2hDbGFzcyA9IG5ldyBSZWdFeHAoJyhefFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4
cChuYW1lKSArJyhcXFxcc3wkKScpO1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tp
KytdOyl7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0
XHRcdGlmICghKGNsYXNzTmFtZSAmJiBtYXRjaENsYXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRp
bnVlO1xuXHRcdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlm
ICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2go
bm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhh
c090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6
IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9zaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5c
blx0XHQvKjxxdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlm
IChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpe1xuXG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9j
dW1lbnRcblx0XHRcdFx0fHwgcXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8v
VE9ETzogb25seSBza2lwIHdoZW4gZXhwcmVzc2lvbiBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5c
dFx0XHRcdHx8IHRoaXMuYnJva2VuTWl4ZWRDYXNlUVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tl
bkNoZWNrZWRRU0EgJiYgZXhwcmVzc2lvbi5pbmRleE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0
XHRcdHx8ICh0aGlzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUu
dGVzdChleHByZXNzaW9uKSlcblx0XHRcdFx0fHwgKCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0
IHdoZW4gIWNvbnRleHRJc0RvY3VtZW50IGFuZC4uLlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUg
bXVsdGlwbGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNlbGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNl
IHdlIGN1cnJlbnRseSBvbmx5IGZpeCBub24tZG9jdW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xl
IGV4cHJlc3Npb24gc2VsZWN0b3JzXG5cdFx0XHRcdFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcs
JykgPiAtMVxuXHRcdFx0XHQpXG5cdFx0XHRcdHx8IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkg
YnJlYWsgcXVlcnlTZWxlY3RvcjtcblxuXHRcdFx0dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lv
biwgX2NvbnRleHQgPSBjb250ZXh0LCBjdXJyZW50SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0Rv
Y3VtZW50KXtcblx0XHRcdFx0Ly8gbm9uLWRvY3VtZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8g
Y3JlZGl0cyB0byBBbmRyZXcgRHVwb250XG5cdFx0XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0Lmdl
dEF0dHJpYnV0ZSgnaWQnKSwgc2xpY2tpZCA9ICdzbGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4
dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2xpY2tpZCk7XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMn
ICsgc2xpY2tpZCArICcgJyArIF9leHByZXNzaW9uO1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRl
eHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0
KSByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yKF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRc
dFx0XHRlbHNlIG5vZGVzID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtc
blx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHRxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0g
PSAxO1xuXHRcdFx0XHRicmVhayBxdWVyeVNlbGVjdG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0
XHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkg
X2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIGN1cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBf
Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250
ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xv
c2VkUVNBKSBmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9k
ZS5ub2RlTmFtZSA+ICdAJyAmJiAhKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5v
ZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9
IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5n
ZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhh
c090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1c
blx0XHQvKjwvcXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMu
U2xpY2sucGFyc2UoZXhwcmVzc2lvbik7XG5cdFx0aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4g
Zm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8g
ZXhwcmVzc2lvblxuXHRcdHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNs
aWNrKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHBhcnNlZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQg
PSBleHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKHRoaXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVu
dEVsZW1lbnQgfHwgY29udGV4dCwgZXhwcmVzc2lvbikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9k
ZVxuXHRcdChmb3VuZCkgPyBmb3VuZC5wdXNoKGV4cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNz
aW9uO1xuXHRcdHJldHVybiBmb3VuZDtcblx0fSBlbHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJl
dHVybiBmb3VuZDtcblx0fVxuXG5cdC8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRv
LXNlbGVjdG9ycz4qL1xuXG5cdC8vIGNhY2hlIGVsZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9y
c1xuXG5cdHRoaXMucG9zTlRIID0ge307XG5cdHRoaXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlz
LnBvc05USFR5cGUgPSB7fTtcblx0dGhpcy5wb3NOVEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9u
dGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYg
YXBwZW5kIGlzIG51bGwgYW5kIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBv
bmUgZXhwcmVzc2lvbiB1c2UgcHVzaEFycmF5LCBlbHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVz
aCA9ICghaGFzT3RoZXJzICYmIChmaXJzdCB8fCAocGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNl
ZC5leHByZXNzaW9uc1swXS5sZW5ndGggPT0gMSkpKSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5w
dXNoVUlEO1xuXG5cdGlmIChmb3VuZCA9PSBudWxsKSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1
bHQgZW5naW5lXG5cblx0dmFyIGosIG0sIG47XG5cdHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBj
bGFzc0xpc3QsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRl
bXMsIGN1cnJlbnRFeHByZXNzaW9uLCBjdXJyZW50Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9
IHBhcnNlZC5leHByZXNzaW9ucztcblxuXHRzZWFyY2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhw
cmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsrKSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9
IGN1cnJlbnRFeHByZXNzaW9uW2pdKTsgaisrKXtcblxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmlu
YXRvcjonICsgY3VycmVudEJpdC5jb21iaW5hdG9yO1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9y
XSkgY29udGludWUgc2VhcmNoO1xuXG5cdFx0dGFnICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1l
bnQpID8gY3VycmVudEJpdC50YWcgOiBjdXJyZW50Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRc
dGlkICAgICAgICAgPSBjdXJyZW50Qml0LmlkO1xuXHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0
LmNsYXNzTGlzdDtcblx0XHRjbGFzc2VzICAgID0gY3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0
dHJpYnV0ZXMgPSBjdXJyZW50Qml0LmF0dHJpYnV0ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJl
bnRCaXQucHNldWRvcztcblx0XHRsYXN0Qml0ICAgID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lv
bi5sZW5ndGggLSAxKSk7XG5cblx0XHR0aGlzLmJpdFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChs
YXN0Qml0KXtcblx0XHRcdHRoaXMudW5pcXVlcyA9IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5k
ID0gZm91bmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0
dGhpcy5mb3VuZCA9IFtdO1xuXHRcdH1cblxuXHRcdGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNb
Y29tYmluYXRvcl0oY29udGV4dCwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cywgY2xhc3NMaXN0KTtcblx0XHRcdGlmIChmaXJzdCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0
aCkgYnJlYWsgc2VhcmNoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJp
dCkgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRc
dFx0XHR0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0
aCkgYnJlYWsgc2VhcmNoO1xuXHRcdFx0fSBlbHNlIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRl
bXMubGVuZ3RoOyBtIDwgbjsgbSsrKSB0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9
XG5cblx0XHRjdXJyZW50SXRlbXMgPSB0aGlzLmZvdW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNv
cnQgaWYgdGhlcmUgYXJlIG5vZGVzIGluIGFwcGVuZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUg
ZXhwcmVzc2lvbnMuXG5cdGlmIChoYXNPdGhlcnMgfHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5n
dGggPiAxKSkgdGhpcy5zb3J0KGZvdW5kKTtcblxuXHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFsw
XSB8fCBudWxsKSA6IGZvdW5kO1xufTtcblxuLy8gVXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5s
b2NhbC51aWRrID0gJ3NsaWNrLXVuaXF1ZWlkJztcblxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rp
b24obm9kZSl7XG5cdHZhciB1aWQgPSBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRp
ZiAoIXVpZCl7XG5cdFx0dWlkID0gdGhpcy51aWR4Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUo
dGhpcy51aWRrLCB1aWQpO1xuXHR9XG5cdHJldHVybiB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURI
VE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9k
ZS51bmlxdWVOdW1iZXIgPSB0aGlzLnVpZHgrKyk7XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRo
ZSBzZXREb2N1bWVudCBkb2N1bWVudFNvcnRlciBtZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5j
dGlvbihyZXN1bHRzKXtcblx0aWYgKCF0aGlzLmRvY3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0
cztcblx0cmVzdWx0cy5zb3J0KHRoaXMuZG9jdW1lbnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0
cztcbn07XG5cbi8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4q
L1xuXG5sb2NhbC5jYWNoZU5USCA9IHt9O1xuXG5sb2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxk
Kik/KFthLXpdKyk/KFsrLV1cXGQrKT8kLztcblxubG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1
bmN0aW9uKGFyZ3VtZW50KXtcblx0dmFyIHBhcnNlZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0
Y2hOVEgpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBh
cnNlZFsyXSB8fCBmYWxzZTtcblx0dmFyIGEgPSBwYXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0g
Jy0nKSBhID0gLTE7XG5cdHZhciBiID0gK3BhcnNlZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRc
dChzcGVjaWFsID09ICduJylcdD8ge2E6IGEsIGI6IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2Rk
JylcdD8ge2E6IDIsIGI6IDF9IDpcblx0XHQoc3BlY2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBi
OiAwfSA6IHthOiAwLCBiOiBhfTtcblxuXHRyZXR1cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRd
ID0gcGFyc2VkKTtcbn07XG5cbmxvY2FsLmNyZWF0ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxk
LCBzaWJsaW5nLCBwb3NpdGlvbnMsIG9mVHlwZSl7XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBh
cmd1bWVudCl7XG5cdFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhp
c1twb3NpdGlvbnNdW3VpZF0pe1xuXHRcdFx0dmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtc
blx0XHRcdGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRb
Y2hpbGRdLCBjb3VudCA9IDE7XG5cdFx0XHRpZiAob2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVO
YW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2Rl
TmFtZSAhPSBub2RlTmFtZSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3Ro
aXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJs
aW5nXSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5u
b2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5n
ZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmdd
KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFyZ3VtZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRc
dHZhciBwYXJzZWQgPSB0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJn
dW1lbnQoYXJndW1lbnQpO1xuXHRcdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFy
IGEgPSBwYXJzZWQuYSwgYiA9IHBhcnNlZC5iLCBwb3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtc
blx0XHRpZiAoYSA9PSAwKSByZXR1cm4gYiA9PSBwb3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRc
dGlmIChwb3MgPCBiKSByZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwg
cG9zKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0g
MDtcblx0fTtcbn07XG5cbi8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cbmxvY2FsLnB1c2hBcnJheSA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1
c2gobm9kZSk7XG59O1xuXG5sb2NhbC5wdXNoVUlEID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChu
b2RlKTtcblx0aWYgKCF0aGlzLnVuaXF1ZXNbdWlkXSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9k
ZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5p
cXVlc1t1aWRdID0gdHJ1ZTtcblx0XHR0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5c
bmxvY2FsLm1hdGNoTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMu
aXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7
XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxl
Y3Rvci5yZXBsYWNlKC9cXFsoW149XSspPVxccyooW14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQx
PVwiJDJcIl0nKSk7XG5cdFx0fSBjYXRjaCAobWF0Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBh
cnNlZCA9IHRoaXMuU2xpY2sucGFyc2Uoc2VsZWN0b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJu
IHRydWU7XG5cblx0Ly8gc2ltcGxlIChzaW5nbGUpIHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lv
bnMgPSBwYXJzZWQuZXhwcmVzc2lvbnMsIHNpbXBsZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50
RXhwcmVzc2lvbjtcblx0Zm9yIChpID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lv
bnNbaV0pOyBpKyspe1xuXHRcdGlmIChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5c
dFx0XHR2YXIgZXhwID0gY3VycmVudEV4cHJlc3Npb25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRj
aFNlbGVjdG9yKG5vZGUsICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcu
dG9VcHBlckNhc2UoKSwgZXhwLmlkLCBleHAuY2xhc3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5w
c2V1ZG9zKSkgcmV0dXJuIHRydWU7XG5cdFx0XHRzaW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxu
XHR9XG5cblx0aWYgKHNpbXBsZUV4cENvdW50ZXIgPT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZh
bHNlO1xuXG5cdHZhciBub2RlcyA9IHRoaXMuc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCks
IGl0ZW07XG5cdGZvciAoaSA9IDA7IGl0ZW0gPSBub2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0g
PT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2Fs
Lm1hdGNoUHNldWRvID0gZnVuY3Rpb24obm9kZSwgbmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNl
dWRvTmFtZSA9ICdwc2V1ZG86JyArIG5hbWU7XG5cdGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1
cm4gdGhpc1twc2V1ZG9OYW1lXShub2RlLCBhcmd1bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0
aGlzLmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcblx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1
bWVudCA9PSBhdHRyaWJ1dGUgOiAhIWF0dHJpYnV0ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0
b3IgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KXtcblx0aWYgKHRhZyl7XG5cdFx0dmFyIG5vZGVOYW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkg
PyBub2RlLm5vZGVOYW1lIDogbm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0
YWcgPT0gJyonKXtcblx0XHRcdGlmIChub2RlTmFtZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBG
aXggZm9yIGNvbW1lbnQgbm9kZXMgYW5kIGNsb3NlZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHRpZiAobm9kZU5hbWUgIT0gdGFnKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYg
KGlkICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcpICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0
dmFyIGksIHBhcnQsIGNscztcblx0aWYgKGNsYXNzZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3Ro
OyBpLS07KXtcblx0XHRjbHMgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0
XHRpZiAoIShjbHMgJiYgY2xhc3Nlc1tpXS5yZWdleHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNl
O1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzKSBmb3IgKGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0t
Oyl7XG5cdFx0cGFydCA9IGF0dHJpYnV0ZXNbaV07XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAh
cGFydC50ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNB
dHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVk
b3MpIGZvciAoaSA9IHBzZXVkb3MubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tp
XTtcblx0XHRpZiAoIXRoaXMubWF0Y2hQc2V1ZG8obm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUp
KSByZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG52YXIgY29tYmluYXRv
cnMgPSB7XG5cblx0JyAnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpeyAvLyBhbGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxu
XG5cdFx0dmFyIGksIGl0ZW0sIGNoaWxkcmVuO1xuXG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1l
bnQpe1xuXHRcdFx0Z2V0QnlJZDogaWYgKGlkKXtcblx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8
fCAodGhpcy5pZEdldHNOYW1lICYmIGl0ZW0gJiYgaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcp
Lm5vZGVWYWx1ZSAhPSBpZCkpe1xuXHRcdFx0XHRcdC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhl
IGVsZW1lbnRzIHdpdGggdGhhdCBuYW1lIG9yIGlkIGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8g
aWYgdGhlcmVzIGp1c3Qgb25lIGl0IHdpbGwgcmV0dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdp
bGwgYmUgYSBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5c
dFx0XHRcdFx0aWYgKCFjaGlsZHJlbikgcmV0dXJuO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5b
MF0pIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0g
Y2hpbGRyZW5baSsrXTspe1xuXHRcdFx0XHRcdFx0dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmli
dXRlTm9kZSgnaWQnKTtcblx0XHRcdFx0XHRcdGlmIChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1
ZSA9PSBpZCl7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0
XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRc
dGlmICghaXRlbSl7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3
ZSByZXR1cm4sIGVsc2Ugd2Ugd2lsbCB0cnkgR0VCVE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxh
YmVsXG5cdFx0XHRcdFx0aWYgKHRoaXMuY29udGFpbnModGhpcy5yb290LCBub2RlKSkgcmV0dXJu
O1xuXHRcdFx0XHRcdGVsc2UgYnJlYWsgZ2V0QnlJZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlz
LmRvY3VtZW50ICE9PSBub2RlICYmICF0aGlzLmNvbnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47
XG5cdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBp
ZiAoY2xhc3NlcyAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2Vu
R0VCQ04pe1xuXHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShj
bGFzc0xpc3Quam9pbignICcpKTtcblx0XHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4u
bGVuZ3RoKSkgYnJlYWsgZ2V0QnlDbGFzcztcblx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNo
aWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywg
cHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6
IHtcblx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRc
dFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5c
dFx0XHRpZiAoIXRoaXMuYnJva2VuU3RhckdFQlROKSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChp
ID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVj
dCBjaGlsZHJlblxuXHRcdGlmICgobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRc
dGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNp
YmxpbmcpKTtcblx0fSxcblxuXHQnKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUg
PSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlz
LnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0J14nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0g
bm9kZS5maXJzdENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBl
ID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rp
b24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQg
c2libGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRp
ZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdl
dFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0
XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcr
Kyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
eyAvLyBuZXh0IHNpYmxpbmcgYW5kIHByZXZpb3VzIHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5h
dG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHR0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdH0sXG5cblx0J35+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3MgYW5kIHByZXZpb3Vz
IHNpYmxpbmdzXG5cdFx0dGhpc1snY29tYmluYXRvcjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IGFsbCBwYXJlbnQgbm9kZXMgdXAgdG8gZG9jdW1lbnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
LnBhcmVudE5vZGUpKSBpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6
IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAv
LyBkaXJlY3QgcGFyZW50IChvbmUgbGV2ZWwpXG5cdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtc
blx0XHRpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91
cyBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAo
bm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxu
XHQnIV4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKXsgLy8gbGFzdCBjaGlsZFxuXHRcdG5vZGUgPSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAo
bm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2Nv
bWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KTtcblx0XHR9XG5cdH0sXG5cblx0JyF+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBl
ICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRc
dFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVl
c1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBj
b21iaW5hdG9ycykgbG9jYWxbJ2NvbWJpbmF0b3I6JyArIGNdID0gY29tYmluYXRvcnNbY107XG5c
bnZhciBwc2V1ZG9zID0ge1xuXG5cdC8qPHBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHkn
OiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0
cmV0dXJuICEoY2hpbGQgJiYgY2hpbGQubm9kZVR5cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4
dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5sZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1
bmN0aW9uKG5vZGUsIGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9k
ZSwgZXhwcmVzc2lvbik7XG5cdH0sXG5cblx0J2NvbnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4
dCl7XG5cdFx0cmV0dXJuIChub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcn
KS5pbmRleE9mKHRleHQpID4gLTE7XG5cdH0sXG5cblx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9k
ZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5c
blx0J2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
Lm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRc
dHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0dmFyIHByZXYgPSBub2RlO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJs
aW5nKSkgaWYgKHByZXYubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0
ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQu
bm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5c
dC8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0
ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0U2libGluZycsICdwb3NOVEgnKSxcblxuXHQn
bnRoLWxhc3QtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2
aW91c1NpYmxpbmcnLCAncG9zTlRITGFzdCcpLFxuXG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNy
ZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0U2libGluZycsICdwb3NOVEhUeXBlJywg
dHJ1ZSksXG5cblx0J250aC1sYXN0LW9mLXR5cGUnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xh
c3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxu
XHQnaW5kZXgnOiBmdW5jdGlvbihub2RlLCBpbmRleCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVk
bzpudGgtY2hpbGQnXShub2RlLCAnJyArIChpbmRleCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9k
ZSwgJzJuJyk7XG5cdH0sXG5cblx0J29kZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0
aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRo
LXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvKjxvZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9c
blxuXHQnZmlyc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9
IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcp
KSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVy
biB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2
YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4
dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2Rl
KXtcblx0XHR2YXIgcHJldiA9IG5vZGUsIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3
aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09
IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxl
ICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBpZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFt
ZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBl
LXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBjdXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVk
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5c
dCdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xu
XHR9LFxuXG5cdCdjaGVja2VkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hl
Y2tlZCB8fCBub2RlLnNlbGVjdGVkO1xuXHR9LFxuXG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUp
e1xuXHRcdHJldHVybiB0aGlzLmlzSFRNTERvY3VtZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZl
RWxlbWVudCA9PT0gbm9kZSAmJiAobm9kZS5ocmVmIHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0
dHJpYnV0ZShub2RlLCAndGFiaW5kZXgnKSk7XG5cdH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihu
b2RlKXtcblx0XHRyZXR1cm4gKG5vZGUgPT09IHRoaXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVj
dGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxu
XHQvKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xufTtcblxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBs
b2NhbFsncHNldWRvOicgKyBwXSA9IHBzZXVkb3NbcF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9k
c1xuXG52YXIgYXR0cmlidXRlR2V0dGVycyA9IGxvY2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5c
blx0J2Zvcic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0
aGlzLmh0bWxGb3IgOiB0aGlzLmdldEF0dHJpYnV0ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYn
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2hyZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRy
aWJ1dGUoJ2hyZWYnLCAyKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0
J3N0eWxlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHls
ZS5jc3NUZXh0IDogdGhpcy5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmlu
ZGV4JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmli
dXRlTm9kZSgndGFiaW5kZXgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmli
dXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9
LFxuXG5cdCd0eXBlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUo
J3R5cGUnKTtcblx0fSxcblxuXHQnbWF4bGVuZ3RoJzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0
cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0
dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0
ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fVxuXG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1B
WExFTkdUSCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5t
YXhsZW5ndGg7XG5cbi8vIFNsaWNrXG5cbnZhciBTbGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMu
U2xpY2sgfHwge30pO1xuXG5TbGljay52ZXJzaW9uID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmlu
ZGVyXG5cblNsaWNrLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVu
ZCl7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtc
bn07XG5cblNsaWNrLmZpbmQgPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0
dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5c
bi8vIFNsaWNrIGNvbnRhaW5tZW50IGNoZWNrZXJcblxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlv
bihjb250YWluZXIsIG5vZGUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChjb250YWluZXIpO1xuXHRy
ZXR1cm4gbG9jYWwuY29udGFpbnMoY29udGFpbmVyLCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0
dHJpYnV0ZSBnZXR0ZXJcblxuU2xpY2suZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFt
ZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmli
dXRlKG5vZGUsIG5hbWUpO1xufTtcblxuU2xpY2suaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9k
ZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFz
QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxuLy8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5t
YXRjaCA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3Rv
cikpIHJldHVybiBmYWxzZTtcblx0aWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkg
cmV0dXJuIHRydWU7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwu
bWF0Y2hOb2RlKG5vZGUsIHNlbGVjdG9yKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nl
c3NvclxuXG5TbGljay5kZWZpbmVBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7
XG5cdGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59
O1xuXG5TbGljay5sb29rdXBBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0
dXJuIGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8g
YWNjZXNzb3JcblxuU2xpY2suZGVmaW5lUHNldWRvID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRs
b2NhbFsncHNldWRvOicgKyBuYW1lXSA9IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRy
ZXR1cm4gZm4uY2FsbChub2RlLCBhcmd1bWVudCk7XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtc
blxuU2xpY2subG9va3VwUHNldWRvID0gZnVuY3Rpb24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBs
b2NhbFsncHNldWRvOicgKyBuYW1lXTtcblx0aWYgKHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFy
Z3VtZW50KXtcblx0XHRyZXR1cm4gcHNldWRvLmNhbGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xu
XHRyZXR1cm4gbnVsbDtcbn07XG5cbi8vIFNsaWNrIG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGlj
ay5vdmVycmlkZSA9IGZ1bmN0aW9uKHJlZ2V4cCwgZm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdl
eHAsIGZuKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1M
O1xuXG5TbGljay51aWRPZiA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlE
SFRNTChub2RlKTtcbn07XG5cbmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xu
XG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykg
PyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxl
bWVudFxuXG5kZXNjcmlwdGlvbjogT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBN
b29Ub29scy4gQ29udGFpbnMgdGhlIGRvbGxhciBmdW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rp
b24sIGFuZCBhbiBoYW5kZnVsIG9mIGNyb3NzLWJyb3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0
byBsZXQgeW91IGVhc2lseSB3b3JrIHdpdGggSFRNTCBFbGVtZW50cy5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0
cmluZywgRnVuY3Rpb24sIE9iamVjdCwgTnVtYmVyLCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRl
cl1cblxucHJvdmlkZXM6IFtFbGVtZW50LCBFbGVtZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0
b3JzXVxuXG4uLi5cbiovXG5cbnZhciBFbGVtZW50ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24o
dGFnLCBwcm9wcyl7XG5cdHZhciBrb25zdHJ1Y3RvciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3Rh
Z107XG5cdGlmIChrb25zdHJ1Y3RvcikgcmV0dXJuIGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYg
KHR5cGVvZiB0YWcgIT0gJ3N0cmluZycpIHJldHVybiBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9w
cyk7XG5cblx0aWYgKCFwcm9wcykgcHJvcHMgPSB7fTtcblxuXHRpZiAoISgvXltcXHctXSskLyku
dGVzdCh0YWcpKXtcblx0XHR2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9u
c1swXVswXTtcblx0XHR0YWcgPSAocGFyc2VkLnRhZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQu
dGFnO1xuXHRcdGlmIChwYXJzZWQuaWQgJiYgcHJvcHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBw
YXJzZWQuaWQ7XG5cblx0XHR2YXIgYXR0cmlidXRlcyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRc
dGlmIChhdHRyaWJ1dGVzKSBmb3IgKHZhciBhdHRyLCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVu
Z3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYg
KHByb3BzW2F0dHIua2V5XSAhPSBudWxsKSBjb250aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFs
dWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJhdG9yID09ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0
ci52YWx1ZTtcblx0XHRcdGVsc2UgaWYgKCFhdHRyLnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBw
cm9wc1thdHRyLmtleV0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0
ICYmIHByb3BzWydjbGFzcyddID09IG51bGwpIHByb3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNz
TGlzdC5qb2luKCcgJyk7XG5cdH1cblxuXHRyZXR1cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcs
IHByb3BzKTtcbn07XG5cblxuaWYgKEJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90
eXBlID0gQnJvd3Nlci5FbGVtZW50LnByb3RvdHlwZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWly
ZSB0aGUgd3JhcHBpbmcuXG5cdEVsZW1lbnQucHJvdG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rp
b24oZmlyZUV2ZW50KXtcblx0XHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0
cmV0dXJuIGZpcmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShF
bGVtZW50LnByb3RvdHlwZS5maXJlRXZlbnQpO1xufVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVs
ZW1lbnQpLm1pcnJvcihmdW5jdGlvbihuYW1lKXtcblx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1l
XSkgcmV0dXJuO1xuXG5cdHZhciBvYmogPSB7fTtcblx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtc
blx0XHR2YXIgcmVzdWx0cyA9IFtdLCBhcmdzID0gYXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR2YXIgZWxlbWVudCA9IHRoaXNbaV0sIHJlc3VsdCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25h
bWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3MpO1xuXHRcdFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYg
dHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50
cykgPyBuZXcgRWxlbWVudHMocmVzdWx0cykgOiByZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRz
LmltcGxlbWVudChvYmopO1xufSk7XG5cbmlmICghQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVu
dC5wYXJlbnQgPSBPYmplY3Q7XG5cblx0RWxlbWVudC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25z
dHJ1Y3Rvcic6IEVsZW1lbnQsXG5cdFx0JyRmYW1pbHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVt
ZW50JykuaGlkZSgpXG5cdH07XG5cblx0RWxlbWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0
aG9kKXtcblx0XHRFbGVtZW50LlByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5c
bkVsZW1lbnQuQ29uc3RydWN0b3JzID0ge307XG5cblxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUo
J0lGcmFtZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50
cywge1xuXHRcdHByb3BlcnRpZXM6IFR5cGUuaXNPYmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlv
bihvYmope1xuXHRcdFx0cmV0dXJuIChvYmogIT0gbnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2
YXIgcHJvcHMgPSBwYXJhbXMucHJvcGVydGllcyB8fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1z
LmlmcmFtZSkgaWZyYW1lID0gZG9jdW1lbnQuaWQocGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxv
YWQgPSBwcm9wcy5vbmxvYWQgfHwgZnVuY3Rpb24oKXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2Fk
O1xuXHRwcm9wcy5pZCA9IHByb3BzLm5hbWUgPSBbcHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFt
ZSA/IChpZnJhbWUuaWQgfHwgaWZyYW1lLm5hbWUpIDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1
ZUlEKCldLnBpY2soKTtcblx0aWZyYW1lID0gbmV3IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUn
LCBwcm9wcyk7XG5cblx0dmFyIG9uTG9hZCA9IGZ1bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwo
aWZyYW1lLmNvbnRlbnRXaW5kb3cpO1xuXHR9O1xuXG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3Bz
LmlkXSkgb25Mb2FkKCk7XG5cdGVsc2UgaWZyYW1lLmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2Fk
KTtcblx0cmV0dXJuIGlmcmFtZTtcbn0pO1xuXG52YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRz
ID0gZnVuY3Rpb24obm9kZXMpe1xuXHRpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2
YXIgdW5pcXVlcyA9IHt9LCBub2RlO1xuXHRcdGZvciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNb
aSsrXTspe1xuXHRcdFx0dmFyIHVpZCA9IFNsaWNrLnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1
bmlxdWVzW3VpZF0pe1xuXHRcdFx0XHR1bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlz
LnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5
cGUgPSB7bGVuZ3RoOiAwfTtcbkVsZW1lbnRzLnBhcmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgn
RWxlbWVudHMnLCBFbGVtZW50cykuaW1wbGVtZW50KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZp
bHRlciwgYmluZCl7XG5cdFx0aWYgKCFmaWx0ZXIpIHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBu
ZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVyKHRoaXMsICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5n
JykgPyBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5c
dFx0fSA6IGZpbHRlciwgYmluZCkpO1xuXHR9LnByb3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlv
bigpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1
bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0g
aXRlbTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJv
dGVjdCgpLFxuXG5cdHVuc2hpZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0
XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVt
KSBpdGVtcy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVu
c2hpZnQuYXBwbHkodGhpcywgaXRlbXMpO1xuXHR9LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIG5ld0VsZW1lbnRzID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShp
dGVtKSkgbmV3RWxlbWVudHMuYXBwZW5kKGl0ZW0pO1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5w
dXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oY29sbGVjdGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAs
IGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25b
aV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rp
b24oKXtcblx0XHR3aGlsZSAodGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhd
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3RlY3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlv
bigpe1xuXG4vLyBGRiwgSUVcbnZhciBzcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBv
YmplY3QgPSB7JzAnOiAwLCAnMSc6IDEsIGxlbmd0aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVj
dCwgMSwgMSk7XG5pZiAob2JqZWN0WzFdID09IDEpIEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNl
JywgZnVuY3Rpb24oKXtcblx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0
ID0gc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhp
cy5sZW5ndGgpIGRlbGV0ZSB0aGlzW2xlbmd0aC0tXTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJv
dGVjdCgpKTtcblxuQXJyYXkuZm9yRWFjaE1ldGhvZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xu
XHRFbGVtZW50cy5pbXBsZW1lbnQobmFtZSwgbWV0aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3Io
RWxlbWVudHMpO1xuXG4vKjxsdElFOD4qL1xudmFyIGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtc
bnRyeSB7XG5cdGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCc8aW5wdXQgbmFtZT14PicpLm5hbWUgPT0gJ3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFy
IGVzY2FwZVF1b3RlcyA9IGZ1bmN0aW9uKGh0bWwpe1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVw
bGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0
SUU4PiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Yg
c3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2
YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFs
c2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBw
eDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJl
dHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4qL1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xu
XG5cdG5ld0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywgcHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5c
dFx0XHRpZiAocHJvcHMuY2hlY2tlZCAhPSBudWxsKSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHBy
b3BzLmNoZWNrZWQ7XG5cdFx0XHRpZiAoKHByb3BzLnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9w
cy50eXBlID09ICdyYWRpbycpICYmIHByb3BzLnZhbHVlID09IG51bGwpIHByb3BzLnZhbHVlID0g
J29uJztcblx0XHRcdC8qPGx0SUU5PiovIC8vIElFIG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBi
ZWZvcmUgY2hhbmdpbmcgY29udGVudCBvZiBzdHlsZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNo
YW5nZVN0eWxlSFRNTCAmJiB0YWcgPT0gJ3N0eWxlJyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1l
bnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50
eXBlKSBkZWxldGUgcHJvcHMudHlwZTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVt
ZW50KS5zZXQocHJvcHMpO1xuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxs
dElFOD4qLy8vIEZpeCBmb3IgcmVhZG9ubHkgbmFtZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElF
IDwgOFxuXHRcdFx0aWYgKGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9
ICc8JyArIHRhZztcblx0XHRcdFx0aWYgKHByb3BzLm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsg
ZXNjYXBlUXVvdGVzKHByb3BzLm5hbWUpICsgJ1wiJztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUp
IHRhZyArPSAnIHR5cGU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0
XHRcdFx0dGFnICs9ICc+Jztcblx0XHRcdFx0ZGVsZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRl
bGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0fVxuXHRcdFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRc
dHJldHVybiB0aGlzLmlkKHRoaXMuY3JlYXRlRWxlbWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9
XG5cbn0pO1xuXG59KSgpO1xuXG4oZnVuY3Rpb24oKXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtc
blNsaWNrLnVpZE9mKGRvY3VtZW50KTtcblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdU
ZXh0Tm9kZTogZnVuY3Rpb24odGV4dCl7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUo
dGV4dCk7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndp
bmRvdztcblx0fSxcblxuXHRpZDogKGZ1bmN0aW9uKCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5c
blx0XHRcdHN0cmluZzogZnVuY3Rpb24oaWQsIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBT
bGljay5maW5kKGRvYywgJyMnICsgaWQucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0
XHRcdFx0cmV0dXJuIChpZCkgPyB0eXBlcy5lbGVtZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0
XHRcdH0sXG5cblx0XHRcdGVsZW1lbnQ6IGZ1bmN0aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRT
bGljay51aWRPZihlbCk7XG5cdFx0XHRcdGlmICghbm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEo
L14oPzpvYmplY3R8ZW1iZWQpJC9pKS50ZXN0KGVsLnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIg
ZmlyZUV2ZW50ID0gZWwuZmlyZUV2ZW50O1xuXHRcdFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBp
biBJRTcsIG9yIGVsc2UgY3Jhc2hcblx0XHRcdFx0XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24o
dHlwZSwgZXZlbnQpe1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7
XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRPYmplY3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3Rv
dHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0
b2JqZWN0OiBmdW5jdGlvbihvYmosIG5vY2FzaCwgZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0Vs
ZW1lbnQpIHJldHVybiB0eXBlcy5lbGVtZW50KG9iai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtc
blx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4
dG5vZGUgPSB0eXBlcy53aGl0ZXNwYWNlID0gdHlwZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQg
PSBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1
cm4gZnVuY3Rpb24oZWwsIG5vY2FzaCwgZG9jKXtcblx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5
ICYmIGVsLnVuaXF1ZU51bWJlcikgcmV0dXJuIGVsO1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2Yo
ZWwpO1xuXHRcdFx0cmV0dXJuICh0eXBlc1t0eXBlXSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNo
LCBkb2MgfHwgZG9jdW1lbnQpIDogbnVsbDtcblx0XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlm
ICh3aW5kb3cuJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5j
KXtcblx0cmV0dXJuIGRvY3VtZW50LmlkKGVsLCBuYywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxu
V2luZG93LmltcGxlbWVudCh7XG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIHRoaXMuZG9jdW1lbnQ7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5bRG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgn
aW1wbGVtZW50Jywge1xuXG5cdGdldEVsZW1lbnRzOiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0
XHRyZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMsIGV4cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5c
dH0sXG5cblx0Z2V0RWxlbWVudDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRv
Y3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgZXhwcmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52
YXIgY29udGFpbnMgPSB7Y29udGFpbnM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xp
Y2suY29udGFpbnModGhpcywgZWxlbWVudCk7XG59fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlu
cykgRG9jdW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2JykuY29udGFpbnMpIEVsZW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5c
bi8vIHRyZWUgd2Fsa2luZ1xuXG52YXIgaW5qZWN0Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJl
c3Npb24sIGNvbWJpbmF0b3Ipe1xuXHRpZiAoIWV4cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9y
O1xuXG5cdGV4cHJlc3Npb24gPSBPYmplY3QuY2xvbmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikp
O1xuXG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAo
dmFyIGkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGktLTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0u
Y29tYmluYXRvciA9IGNvbWJpbmF0b3I7XG5cblx0cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5P
YmplY3QuZm9yRWFjaCh7XG5cdGdldE5leHQ6ICd+Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5c
dGdldFBhcmVudDogJyEnXG59LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVt
ZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0
aGlzLmdldEVsZW1lbnQoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7
XG5cdH0pO1xufSk7XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRn
ZXRBbGxQcmV2aW91czogJyF+Jyxcblx0Z2V0U2libGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVu
OiAnPicsXG5cdGdldFBhcmVudHM6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9k
KXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50cyhpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNv
bWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZp
cnN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2su
c2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9
LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVu
dC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicp
KS5nZXRMYXN0KCkpO1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5vd25lckRvY3VtZW50LndpbmRvdztcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVs
ZW1lbnRCeUlkOiBmdW5jdGlvbihpZCl7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZp
bmQodGhpcywgJyMnICsgKCcnICsgaWQpLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xu
XHR9LFxuXG5cdG1hdGNoOiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJl
c3Npb24gfHwgU2xpY2subWF0Y2godGhpcywgZXhwcmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxu
XG5pZiAod2luZG93LiQkID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24o
c2VsZWN0b3Ipe1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9m
IHNlbGVjdG9yID09ICdzdHJpbmcnKSByZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQs
IHNlbGVjdG9yLCBuZXcgRWxlbWVudHMpO1xuXHRcdGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxl
KHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJu
IG5ldyBFbGVtZW50cyhhcmd1bWVudHMpO1xufSk7XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5z
ZXJ0ZXJzID0ge1xuXG5cdGJlZm9yZTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0
dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQu
aW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQpO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlv
bihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2Rl
O1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5u
ZXh0U2libGluZyk7XG5cdH0sXG5cblx0Ym90dG9tOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50
KXtcblx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVu
Y3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4
dCwgZWxlbWVudC5maXJzdENoaWxkKTtcblx0fVxuXG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0g
aW5zZXJ0ZXJzLmJvdHRvbTtcblxuXG5cbi8vIGdldFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxu
dmFyIHByb3BlcnR5R2V0dGVycyA9IHt9LCBwcm9wZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJv
cGVydGllc1xuXG52YXIgcHJvcGVydGllcyA9IHt9O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBl
JywgJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZScsICdhY2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAn
Y2VsbFNwYWNpbmcnLCAnY29sU3BhbicsXG5cdCdmcmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3Rh
YkluZGV4JywgJ3VzZU1hcCdcbl0sIGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cHJvcGVydGllc1tw
cm9wZXJ0eS50b0xvd2VyQ2FzZSgpXSA9IHByb3BlcnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRt
bCA9ICdpbm5lckhUTUwnO1xucHJvcGVydGllcy50ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpLnRleHRDb250ZW50ID09IG51bGwpID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVu
dCc7XG5cbk9iamVjdC5mb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5c
dHByb3BlcnR5U2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVb
cmVhbF0gPSB2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihu
b2RlKXtcblx0XHRyZXR1cm4gbm9kZVtyZWFsXTtcblx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xu
cHJvcGVydHlTZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5v
ZGUsIHZhbHVlKXtcblx0XHRpZiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0
KCdodG1sJywgdmFsdWUpO1xuXHRcdGVsc2Ugbm9kZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7
XG5cdH07XG59KShwcm9wZXJ0eVNldHRlcnMudGV4dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0
ID0gKGZ1bmN0aW9uKGdldHRlcil7XG5cdHJldHVybiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1
cm4gKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVy
KG5vZGUpO1xuXHR9O1xufSkocHJvcGVydHlHZXR0ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5c
bi8vIEJvb2xlYW5zXG5cbnZhciBib29scyA9IFtcblx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lz
bWFwJywgJ2RlY2xhcmUnLCAnbm9zaGFkZScsICdjaGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3Jl
YWRPbmx5JywgJ211bHRpcGxlJywgJ3NlbGVjdGVkJywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywg
J2RlZmF1bHRDaGVja2VkJywgJ2F1dG9mb2N1cycsICdjb250cm9scycsICdhdXRvcGxheScsXG5c
dCdsb29wJ1xuXTtcblxudmFyIGJvb2xlYW5zID0ge307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBm
dW5jdGlvbihib29sKXtcblx0dmFyIGxvd2VyID0gYm9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29s
ZWFuc1tsb3dlcl0gPSBib29sO1xuXHRwcm9wZXJ0eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24o
bm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbYm9vbF0gPSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0
eUdldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29s
XTtcblx0fTtcbn0pO1xuXG4vLyBTcGVjaWFsIGNhc2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVy
dHlTZXR0ZXJzLCB7XG5cblx0J2NsYXNzJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgn
Y2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5v
ZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVlKTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rp
b24obm9kZSwgdmFsdWUpe1xuXHRcdCgnaHRtbEZvcicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3Ig
PSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdmb3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0
eWxlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5
bGUuY3NzVGV4dCA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xu
XHR9LFxuXG5cdCd2YWx1ZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVl
ID0gKHZhbHVlICE9IG51bGwpID8gdmFsdWUgOiAnJztcblx0fVxuXG59KTtcblxucHJvcGVydHlH
ZXR0ZXJzWydjbGFzcyddID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScg
aW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSB8fCBudWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2Ns
YXNzJyk7XG59O1xuXG4vKiA8d2Via2l0PiAqL1xudmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnYnV0dG9uJyk7XG4vLyBJRSBzZXRzIHR5cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xu
dHJ5IHsgZWwudHlwZSA9ICdidXR0b24nOyB9IGNhdGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAn
YnV0dG9uJykgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5c
dG5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgdmFsdWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwv
d2Via2l0PiAqL1xuXG4vKjxJRT4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fu
bm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAo
ZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyks
XG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RU
ZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBj
YXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlu
cHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVl
LCBodG1sNUlucHV0U3VwcG9ydDtcblxuLy8gIzIxNzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5w
dXQudHlwZSA9ICdzdWJtaXQnO1xudm9sYXRpbGVJbnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0g
J3QnO1xuXG4vLyAjMjQ0MyAtIElFIHRocm93cyBcIkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRy
eWluZyB0byB1c2UgaHRtbDUgaW5wdXQgdHlwZXNcbnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7
XG5cdGlucHV0LnR5cGUgPSAnZW1haWwnO1xuXHRodG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5
cGUgPT0gJ2VtYWlsJztcbn0gY2F0Y2ggKGUpe31cblxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9s
YXRpbGVJbnB1dFZhbHVlIHx8ICFodG1sNUlucHV0U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5
cGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKXtcblx0dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2Rl
LnZhbHVlO1xuXHRcdG5vZGUudHlwZSA9IHR5cGU7XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xu
XHR9IGNhdGNoIChlKXt9XG59O1xuLyo8L0lFPiovXG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9w
ZXJ0eSAqL1xuXG4vKiA8bHRJRTk+ICovXG52YXIgcG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVu
Y3Rpb24oZGl2KXtcblx0ZGl2LnJhbmRvbSA9ICdhdHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5n
ZXRBdHRyaWJ1dGUoJ3JhbmRvbScpID09ICdhdHRyaWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpKTtcblxudmFyIGhhc0Nsb25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xu
XHR0ZXN0LmlubmVySFRNTCA9ICc8b2JqZWN0PjxwYXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZh
bHVlPVwidGhlIHVua25vd25cIiAvPjwvb2JqZWN0Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9k
ZSh0cnVlKS5maXJzdENoaWxkLmNoaWxkTm9kZXMubGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSk7XG4vKiA8L2x0SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0
ID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFz
c2VzID0gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1l
IHx8ICcnKS5jbGVhbigpLnNwbGl0KCcgJyksIHVuaXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNz
TmFtZXMuZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0g
JycgJiYgIXVuaXF1ZXNbY2xhc3NOYW1lXSkgcmV0dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNs
YXNzTmFtZTtcblx0fSk7XG59O1xuXG52YXIgYWRkVG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1l
KXtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKG5hbWUpO1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFz
c0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xu
fTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1l
LCB2YWx1ZSl7XG5cdFx0dmFyIHNldHRlciA9IHByb3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJD
YXNlKCldO1xuXHRcdGlmIChzZXR0ZXIpe1xuXHRcdFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0
XHR9IGVsc2Uge1xuXHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0dmFyIGF0dHJpYnV0ZVdoaXRl
TGlzdDtcblx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0
ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdoaXRlTGlzdCcsIHt9KTtcblx0XHRcdC8qIDwv
bHRJRTk+ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1v
dmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBv
bGx1dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdO1xuXHRc
dFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRy
aWJ1dGUobmFtZSwgJycgKyB2YWx1ZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0
aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0gPSB0cnVl
O1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRzZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRm
b3IgKHZhciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlcykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1
dGUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
Z2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdl
dHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVy
KHRoaXMpO1xuXHRcdC8qIDxsdElFOT4gKi9cblx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUp
e1xuXHRcdFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0
ZVdoaXRlTGlzdCA9IHRoaXMucmV0cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5c
dFx0XHRpZiAoIWF0dHIpIHJldHVybiBudWxsO1xuXHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAh
YXR0cmlidXRlV2hpdGVMaXN0W25hbWVdKXtcblx0XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRl
ckhUTUw7XG5cdFx0XHRcdC8vIHNlZ21lbnQgYnkgdGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1l
bnRpb24gb2YgYXR0cmlidXRlIG5hbWVcblx0XHRcdFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRl
ci5zZWFyY2goL1xcLz9bJ1wiXT8+KD8hW148XSo8WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAw
KSByZXR1cm4gbnVsbDtcblx0XHRcdFx0YXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtc
blx0XHRcdH1cblx0XHR9XG5cdFx0LyogPC9sdElFOT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xp
Y2suZ2V0QXR0cmlidXRlKHRoaXMsIG5hbWUpO1xuXHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xp
Y2suaGFzQXR0cmlidXRlKHRoaXMsIG5hbWUpKSA/IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0
Z2V0UHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQo
YXJndW1lbnRzKTtcblx0XHRyZXR1cm4gYXJncy5tYXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcyku
YXNzb2NpYXRlKGFyZ3MpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1l
KXtcblx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRy
ZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0
aGlzLnJlbW92ZVByb3BlcnR5LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRz
ZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlBy
b3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0
eS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB0aGlzLnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtc
blx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdGdldDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFy
IHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVy
dHkgJiYgcHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0
UHJvcGVydHkocHJvcCk7XG5cdH0ub3ZlcmxvYWRHZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rp
b24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xu
XHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lcmFzZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0
aGlzKSA6IHRoaXMucmVtb3ZlUHJvcGVydHkocHJvcCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0aGFzQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0
cmV0dXJuIHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlv
bihjbGFzc05hbWUpe1xuXHRcdHJldHVybiBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlu
cyhjbGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkZENsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlv
bihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NM
aXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7
XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc2VzKGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xh
c3NOYW1lKS5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xh
c3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFz
c05hbWUpLmZvckVhY2gocmVtb3ZlRnJvbUNsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xh
c3Nlcyh0aGlzLmNsYXNzTmFtZSk7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xh
c3NOYW1lcy5lcmFzZSwgY2xhc3NOYW1lcyk7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05h
bWVzLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczog
ZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3JjZSl7XG5cdFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNl
ID0gIXRoaXMuaGFzQ2xhc3MoY2xhc3NOYW1lKTtcblx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMu
YWRkQ2xhc3MoY2xhc3NOYW1lKSA6IHRoaXMucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxc
blxuXHRhZG9wdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQs
IGVsZW1lbnRzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5s
ZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCA+IDEpIHBhcmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0
cnVlKTtcblx0XHRcdGlmIChlbGVtZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5c
dFx0fVxuXG5cdFx0aWYgKGZyYWdtZW50KSB0aGlzLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFwcGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdo
ZXJlKXtcblx0XHRyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9k
ZSh0ZXh0KSwgd2hlcmUpO1xuXHR9LFxuXG5cdGdyYWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5c
dFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRo
aXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdo
ZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKHRoaXMsIGRvY3VtZW50Lmlk
KGVsLCB0cnVlKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0
aW9uKGVsKXtcblx0XHRlbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnRO
b2RlLnJlcGxhY2VDaGlsZCh0aGlzLCBlbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
d3JhcHM6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1
ZSk7XG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZXMoZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxc
blxuXHRnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8v
IFNhZmFyaSAzLjIuMVxuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlz
Lm9wdGlvbnMpLmZpbHRlcihmdW5jdGlvbihvcHRpb24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5z
ZWxlY3RlZDtcblx0XHR9KSk7XG5cdH0sXG5cblx0dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtc
blx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblx0XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwg
c2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rpb24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBl
bC50eXBlO1xuXHRcdFx0aWYgKCFlbC5uYW1lIHx8IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1
Ym1pdCcgfHwgdHlwZSA9PSAncmVzZXQnIHx8IHR5cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2lt
YWdlJykgcmV0dXJuO1xuXG5cdFx0XHR2YXIgdmFsdWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2Vs
ZWN0JykgPyBlbC5nZXRTZWxlY3RlZCgpLm1hcChmdW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJ
RVxuXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuaWQob3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9
KSA6ICgodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNr
ZWQpID8gbnVsbCA6IGVsLmdldCgndmFsdWUnKTtcblxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1
ZSkuZWFjaChmdW5jdGlvbih2YWwpe1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZp
bmVkJykgcXVlcnlTdHJpbmcucHVzaChlbmNvZGVVUklDb21wb25lbnQoZWwubmFtZSkgKyAnPScg
KyBlbmNvZGVVUklDb21wb25lbnQodmFsKSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1
cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxc
blxudmFyIGFwcGVuZEluc2VydGVycyA9IHtcblx0YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRh
ZnRlcjogJ2FmdGVyRW5kJyxcblx0Ym90dG9tOiAnYmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJC
ZWdpbicsXG5cdGluc2lkZTogJ2JlZm9yZUVuZCdcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdh
cHBlbmRIVE1MJywgKCdpbnNlcnRBZGphY2VudEhUTUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpKSA/IGZ1bmN0aW9uKGh0bWwsIHdoZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2Vu
dEhUTUwoYXBwZW5kSW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVy
biB0aGlzO1xufSA6IGZ1bmN0aW9uKGh0bWwsIHdoZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxl
bWVudCgnZGl2Jywge2h0bWw6IGh0bWx9KSxcblx0XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rl
cyxcblx0XHRmcmFnbWVudCA9IHRlbXAuZmlyc3RDaGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSBy
ZXR1cm4gdGhpcztcblx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENo
aWxkKGNoaWxkcmVuW2ldKTtcblx0XHR9XG5cdH1cblxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2Jv
dHRvbSddKGZyYWdtZW50LCB0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxl
Y3RlZCA9IHt9LCBzdG9yYWdlID0ge307XG5cbnZhciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRy
ZXR1cm4gKHN0b3JhZ2VbdWlkXSB8fCAoc3RvcmFnZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBj
bGVhbiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgdWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5c
dGlmIChpdGVtLnJlbW92ZUV2ZW50cykgaXRlbS5yZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0u
Y2xlYXJBdHRyaWJ1dGVzKSBpdGVtLmNsZWFyQXR0cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51
bGwpe1xuXHRcdGRlbGV0ZSBjb2xsZWN0ZWRbdWlkXTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRd
O1xuXHR9XG5cdHJldHVybiBpdGVtO1xufTtcblxudmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2No
ZWNrZWQnLCBvcHRpb246ICdzZWxlY3RlZCcsIHRleHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVu
dC5pbXBsZW1lbnQoe1xuXG5cdGRlc3Ryb3k6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVu
ID0gY2xlYW4odGhpcykuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNo
KGNoaWxkcmVuLCBjbGVhbik7XG5cdFx0RWxlbWVudC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVy
biBudWxsO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQo
dGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQuZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50
Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxu
XG5cdGNsb25lOiBmdW5jdGlvbihjb250ZW50cywga2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNv
bnRlbnRzICE9PSBmYWxzZTtcblx0XHR2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50
cyksIGNlID0gW2Nsb25lXSwgdGUgPSBbdGhpc10sIGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xu
XHRcdFx0Y2UuYXBwZW5kKEFycmF5LmNvbnZlcnQoY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
JyonKSkpO1xuXHRcdFx0dGUuYXBwZW5kKEFycmF5LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnKicpKSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtc
blx0XHRcdHZhciBub2RlID0gY2VbaV0sIGVsZW1lbnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2Vl
cGlkKSBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0
XHRpZiAobm9kZS5jbGVhckF0dHJpYnV0ZXMpe1xuXHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRl
cygpO1xuXHRcdFx0XHRub2RlLm1lcmdlQXR0cmlidXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9k
ZS5yZW1vdmVBdHRyaWJ1dGUoJ3VuaXF1ZU51bWJlcicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRp
b25zKXtcblx0XHRcdFx0XHR2YXIgbm8gPSBub2RlLm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRp
b25zO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSBuby5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVj
dGVkID0gZW9bal0uc2VsZWN0ZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElF
OT4qL1xuXHRcdFx0dmFyIHByb3AgPSBmb3JtUHJvcHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJD
YXNlKCldO1xuXHRcdFx0aWYgKHByb3AgJiYgZWxlbWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVs
ZW1lbnRbcHJvcF07XG5cdFx0fVxuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVC
dWcpe1xuXHRcdFx0dmFyIGNvID0gY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcp
LCB0byA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChp
ID0gY28ubGVuZ3RoOyBpLS07KSBjb1tpXS5vdXRlckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5c
dFx0fVxuXHRcdC8qPC9sdElFOT4qL1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5c
dH1cblxufSk7XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVu
dCcsIHtcblxuXHRhZGRMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5k
b3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxl
Y3RlZFtTbGljay51aWRPZih0aGlzKV0gPSB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRF
dmVudExpc3RlbmVyKSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRz
WzJdKTtcblx0XHRlbHNlIHRoaXMuYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4p
e1xuXHRcdGlmICh0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0
ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVu
dCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZl
OiBmdW5jdGlvbihwcm9wZXJ0eSwgZGZsdCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2su
dWlkT2YodGhpcykpLCBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0g
bnVsbCAmJiBwcm9wID09IG51bGwpIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5c
dFx0cmV0dXJuIHByb3AgIT0gbnVsbCA/IHByb3AgOiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBm
dW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVp
ZE9mKHRoaXMpKTtcblx0XHRzdG9yYWdlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGVsaW1pbmF0ZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBz
dG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9w
ZXJ0eV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAo
d2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBn
YyA9IGZ1bmN0aW9uKCl7XG5cdFx0T2JqZWN0LmVhY2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0
aWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFnZSkgQ29sbGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cu
cmVtb3ZlTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcblx0fTtcblx0d2luZG93LmFkZExpc3RlbmVy
KCd1bmxvYWQnLCBnYyk7XG59XG4vKjwvbHRJRTk+Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0g
e307XG5cblxuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bihzdHlsZSl7XG5cdFx0dGhpcy5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0
ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zdHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxu
fTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnRhZyA9IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1l
bnQuUHJvcGVydGllcy5odG1sID0ge1xuXG5cdHNldDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYg
KGh0bWwgPT0gbnVsbCkgaHRtbCA9ICcnO1xuXHRcdGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAn
YXJyYXknKSBodG1sID0gaHRtbC5qb2luKCcnKTtcblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYg
KHRoaXMuc3R5bGVTaGVldCAmJiAhY2FuQ2hhbmdlU3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQu
Y3NzVGV4dCA9IGh0bWw7XG5cdFx0ZWxzZSAvKjwvbHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0
bWw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycp
O1xuXHR9XG5cbn07XG5cbnZhciBzdXBwb3J0c0hUTUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0
c1RhYmxlSW5uZXJIVE1MID0gdHJ1ZSwgc3VwcG9ydHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8q
PGx0SUU5PiovXG4vLyB0ZWNobmlxdWUgYnkgamRiYXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQu
Y29tL2lubmVyc2hpdi9cbnZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtc
bnZhciBmcmFnbWVudDtcbmRpdi5pbm5lckhUTUwgPSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNI
VE1MNUVsZW1lbnRzID0gKGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9y
dHNIVE1MNUVsZW1lbnRzKXtcblx0dmFyIHRhZ3MgPSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlv
IGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIg
aGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGlt
ZSB2aWRlbycuc3BsaXQoJyAnKTtcblx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCksIGwgPSB0YWdzLmxlbmd0aDtcblx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3Jl
YXRlRWxlbWVudCh0YWdzW2xdKTtcbn1cbmRpdiA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8
SUU+Ki9cbnN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9u
KCl7XG5cdHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRh
YmxlLmlubmVySFRNTCA9ICc8dHI+PHRkPjwvdGQ+PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0p
O1xuXG4vKjxsdEZGND4qL1xudmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwg
aHRtbCA9ICc8dGQ+PC90ZD4nO1xudHIuaW5uZXJIVE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5l
ckhUTUwgPSAodHIuaW5uZXJIVE1MID09IGh0bWwpO1xudHIgPSBudWxsO1xuLyo8L2x0RkY0Piov
XG5cbmlmICghc3VwcG9ydHNUYWJsZUlubmVySFRNTCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8
fCAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblxuXHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5z
ZXQgPSAoZnVuY3Rpb24oc2V0KXtcblxuXHRcdHZhciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0
YWJsZTogWzEsICc8dGFibGU+JywgJzwvdGFibGU+J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNl
bGVjdD4nLCAnPC9zZWxlY3Q+J10sXG5cdFx0XHR0Ym9keTogWzIsICc8dGFibGU+PHRib2R5Pics
ICc8L3Rib2R5PjwvdGFibGU+J10sXG5cdFx0XHR0cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4n
LCAnPC90cj48L3Rib2R5PjwvdGFibGU+J11cblx0XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRo
ZWFkID0gdHJhbnNsYXRpb25zLnRmb290ID0gdHJhbnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0
dXJuIGZ1bmN0aW9uKGh0bWwpe1xuXG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMu
c3R5bGVTaGVldCkgcmV0dXJuIHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5
PiovXG5cdFx0XHR2YXIgd3JhcCA9IHRyYW5zbGF0aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRc
dFx0aWYgKCF3cmFwICYmICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcn
XTtcblx0XHRcdGlmICghd3JhcCkgcmV0dXJuIHNldC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0
XHR2YXIgbGV2ZWwgPSB3cmFwWzBdLCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JyksIHRhcmdldCA9IHdyYXBwZXI7XG5cdFx0XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50
cykgZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRN
TCA9IFt3cmFwWzFdLCBodG1sLCB3cmFwWzJdXS5mbGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3
aGlsZSAobGV2ZWwtLSkgdGFyZ2V0ID0gdGFyZ2V0LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVt
cHR5KCkuYWRvcHQodGFyZ2V0LmNoaWxkTm9kZXMpO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1
RWxlbWVudHMpIGZyYWdtZW50LnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9
IG51bGw7XG5cdFx0fTtcblxuXHR9KShFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxu
Lyo8L0lFPiovXG5cbi8qPGx0SUU5PiovXG52YXIgdGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdmb3JtJyk7XG50ZXN0Rm9ybS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8
L29wdGlvbj48L3NlbGVjdD4nO1xuXG5pZiAodGVzdEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAn
cycpIEVsZW1lbnQuUHJvcGVydGllcy52YWx1ZSA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVl
KXtcblx0XHR2YXIgdGFnID0gdGhpcy5nZXQoJ3RhZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVj
dCcpIHJldHVybiB0aGlzLnNldFByb3BlcnR5KCd2YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0
aW9ucyA9IHRoaXMuZ2V0RWxlbWVudHMoJ29wdGlvbicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZh
bHVlKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRc
dFx0dmFyIG9wdGlvbiA9IG9wdGlvbnNbaV0sXG5cdFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0
cmlidXRlTm9kZSgndmFsdWUnKSxcblx0XHRcdFx0b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRy
LnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRp
ZiAob3B0aW9uVmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtc
blx0XHR9XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlz
LCB0YWcgPSBvcHRpb24uZ2V0KCd0YWcnKTtcblxuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYg
dGFnICE9ICdvcHRpb24nKSByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRc
dGlmICh0YWcgPT0gJ3NlbGVjdCcgJiYgIShvcHRpb24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVsw
XSkpIHJldHVybiAnJztcblxuXHRcdHZhciBhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUo
J3ZhbHVlJyk7XG5cdFx0cmV0dXJuIChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52
YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xu
Lyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5pZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
JykuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKSkgRWxlbWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRz
ZXQ6IGZ1bmN0aW9uKGlkKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdp
ZCcpLnZhbHVlID0gaWQ7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhp
cy5pZCB8fCBudWxsO1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0g
dGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+
Ki9cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgdGhlIEV2ZW50IFR5cGUsIHRvIG1ha2UgdGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93
c2VyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3cs
IERvY3VtZW50LCBBcnJheSwgRnVuY3Rpb24sIFN0cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczog
RXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIF9rZXlzID0ge307XG52YXIg
bm9ybWFsaXplV2hlZWxTcGVlZCA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7
XG5cdGlmIChldmVudC53aGVlbERlbHRhKXtcblx0XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxE
ZWx0YSAlIDEyMCA9PSAwID8gZXZlbnQud2hlZWxEZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVs
dGEgLyAxMjtcblx0fSBlbHNlIHtcblx0XHR2YXIgcmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8
IGV2ZW50LmRldGFpbCB8fCAwO1xuXHRcdG5vcm1hbGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0g
MCA/IHJhd0Ftb3VudCAvIDMgOiByYXdBbW91bnQgKiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1h
bGl6ZWQ7XG59O1xuXG52YXIgRE9NRXZlbnQgPSB0aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RP
TUV2ZW50JywgZnVuY3Rpb24oZXZlbnQsIHdpbil7XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7
XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luLmV2ZW50O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSBy
ZXR1cm4gZXZlbnQ7XG5cdHRoaXMuZXZlbnQgPSBldmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0
cnVlO1xuXHR0aGlzLnNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2
ZW50LmN0cmxLZXk7XG5cdHRoaXMuYWx0ID0gZXZlbnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBl
dmVudC5tZXRhS2V5O1xuXHR2YXIgdHlwZSA9IHRoaXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZh
ciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRh
cmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7
XG5cdHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRl
eE9mKCdrZXknKSA9PSAwKXtcblx0XHR2YXIgY29kZSA9IHRoaXMuY29kZSA9IChldmVudC53aGlj
aCB8fCBldmVudC5rZXlDb2RlKTtcblx0XHRpZiAoIXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5
cHJlc3MnKSB0aGlzLmtleSA9IF9rZXlzW2NvZGVdO1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3du
JyB8fCB0eXBlID09ICdrZXl1cCcpe1xuXHRcdFx0aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEy
NCkgdGhpcy5rZXkgPSAnZicgKyAoY29kZSAtIDExMSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4g
OTUgJiYgY29kZSA8IDEwNikgdGhpcy5rZXkgPSBjb2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0
aGlzLmtleSA9PSBudWxsKSB0aGlzLmtleSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9M
b3dlckNhc2UoKTtcblx0fSBlbHNlIGlmICh0eXBlID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJs
Y2xpY2snIHx8IHR5cGUgPT0gJ2NvbnRleHRtZW51JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlw
ZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUuaW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0
XHR2YXIgZG9jID0gd2luLmRvY3VtZW50O1xuXHRcdGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwg
ZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5c
dFx0dGhpcy5wYWdlID0ge1xuXHRcdFx0eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQu
cGFnZVggOiBldmVudC5jbGllbnRYICsgZG9jLnNjcm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQu
cGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xs
VG9wXG5cdFx0fTtcblx0XHR0aGlzLmNsaWVudCA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAh
PSBudWxsKSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBhZ2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxc
blx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZ
T2Zmc2V0IDogZXZlbnQuY2xpZW50WVxuXHRcdH07XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNl
U2Nyb2xsJyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMu
d2hlZWwgPSBub3JtYWxpemVXaGVlbFNwZWVkKGV2ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sg
PSAoZXZlbnQud2hpY2ggPT0gMyB8fCBldmVudC5idXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUg
PT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50
ZXInIHx8IHR5cGUgPT0gJ21vdXNlbGVhdmUnKXtcblx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlw
ZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZWVudGVyJztcblx0XHRcdHZhciByZWxh
dGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6
ICd0bycpICsgJ0VsZW1lbnQnXTtcblx0XHRcdHdoaWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9k
ZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVs
YXRlZFRhcmdldCA9IGRvY3VtZW50LmlkKHJlbGF0ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0
eXBlLmluZGV4T2YoJ3RvdWNoJykgPT0gMCB8fCB0eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAw
KXtcblx0XHR0aGlzLnJvdGF0aW9uID0gZXZlbnQucm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9
IGV2ZW50LnNjYWxlO1xuXHRcdHRoaXMudGFyZ2V0VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNo
ZXM7XG5cdFx0dGhpcy5jaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRc
dHZhciB0b3VjaGVzID0gdGhpcy50b3VjaGVzID0gZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91
Y2hlcyAmJiB0b3VjaGVzWzBdKXtcblx0XHRcdHZhciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0
XHR0aGlzLnBhZ2UgPSB7eDogdG91Y2gucGFnZVgsIHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRo
aXMuY2xpZW50ID0ge3g6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1c
blx0fVxuXG5cdGlmICghdGhpcy5jbGllbnQpIHRoaXMuY2xpZW50ID0ge307XG5cdGlmICghdGhp
cy5wYWdlKSB0aGlzLnBhZ2UgPSB7fTtcbn0pO1xuXG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5c
dHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9w
UHJvcGFnYXRpb24oKTtcblx0fSxcblxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlm
ICh0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KSB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7
XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtl
eSl7XG5cdF9rZXlzW2NvZGVdID0ga2V5O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50
LmRlZmluZUtleXMgPSBET01FdmVudC5kZWZpbmVLZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5c
bkRPTUV2ZW50LmRlZmluZUtleXMoe1xuXHQnMzgnOiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6
ICdsZWZ0JywgJzM5JzogJ3JpZ2h0Jyxcblx0JzI3JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4
JzogJ2JhY2tzcGFjZScsICc5JzogJ3RhYicsXG5cdCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50
ZXInXG59KTtcblxufSkoKTtcblxuXG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZl
bnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEVsZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3
aXRoIGV2ZW50cy4gVGhpcyBmaWxlIGFsc28gaW5jbHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2Vs
ZWF2ZSBjdXN0b20gRWxlbWVudCBFdmVudHMsIGlmIG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVz
OiBFbGVtZW50LkV2ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJv
cGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5jdGlvbihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50
cyhldmVudHMpO1xufX07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2lt
cGxlbWVudCcsIHtcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBl
dmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnLCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlw
ZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwgdmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50
c1t0eXBlXS5rZXlzLmNvbnRhaW5zKGZuKSkgcmV0dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVd
LmtleXMucHVzaChmbik7XG5cdFx0dmFyIHJlYWxUeXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9
IEVsZW1lbnQuRXZlbnRzW3R5cGVdLFxuXHRcdFx0Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxm
ID0gdGhpcztcblx0XHRpZiAoY3VzdG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3Rv
bS5vbkFkZC5jYWxsKHRoaXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9u
KXtcblx0XHRcdFx0Y29uZGl0aW9uID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChj
dXN0b20uY29uZGl0aW9uLmNhbGwodGhpcywgZXZlbnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0
aGlzLCBldmVudCk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9
XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHJlYWxUeXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0
b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlv
bigpe1xuXHRcdFx0cmV0dXJuIGZuLmNhbGwoc2VsZik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZl
RXZlbnQgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50c1tyZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2
ZW50KXtcblx0XHRcdGlmIChuYXRpdmVFdmVudCA9PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0
aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRldmVudCA9IG5ldyBET01FdmVudChldmVudCwgc2VsZi5n
ZXRXaW5kb3coKSk7XG5cdFx0XHRcdFx0aWYgKGNvbmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9
PT0gZmFsc2UpIGV2ZW50LnN0b3AoKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMu
YWRkTGlzdGVuZXIocmVhbFR5cGUsIGRlZm4sIGFyZ3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2
ZW50c1t0eXBlXS52YWx1ZXMucHVzaChkZWZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlz
LnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSBy
ZXR1cm4gdGhpcztcblx0XHR2YXIgbGlzdCA9IGV2ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXgg
PSBsaXN0LmtleXMuaW5kZXhPZihmbik7XG5cdFx0aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhp
cztcblx0XHR2YXIgdmFsdWUgPSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qu
a2V5c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3Vz
dG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV07XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAo
Y3VzdG9tLm9uUmVtb3ZlKSBjdXN0b20ub25SZW1vdmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5c
dFx0XHRpZiAoY3VzdG9tLmJhc2UpIHR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNl
KS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZl
bnRzW3R5cGVdKSA/IHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1sy
XSkgOiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRm
b3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVu
dF0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24o
ZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVj
dCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBl
dmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hl
ZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0
aGlzO1xuXHRcdGlmICghZXZlbnRzKXtcblx0XHRcdGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhp
cy5yZW1vdmVFdmVudHModHlwZSk7XG5cdFx0XHR0aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5c
dFx0fSBlbHNlIGlmIChhdHRhY2hlZFtldmVudHNdKXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10u
a2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMs
IGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlw
ZSwgYXJncywgZGVsYXkpe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMn
KTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRh
cmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblxuXHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2go
ZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJn
cyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lRXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBl
KXtcblx0XHRmcm9tID0gZG9jdW1lbnQuaWQoZnJvbSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20u
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRp
ZiAoIXR5cGUpe1xuXHRcdFx0Zm9yICh2YXIgZXZlbnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9u
ZUV2ZW50cyhmcm9tLCBldmVudFR5cGUpO1xuXHRcdH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtc
blx0XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlz
LmFkZEV2ZW50KHR5cGUsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4g
dGhpcztcblx0fVxuXG59KTtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAy
LCBkYmxjbGljazogMiwgbW91c2V1cDogMiwgbW91c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwg
Ly9tb3VzZSBidXR0b25zXG5cdHdoZWVsOiAyLCBtb3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9s
bDogMiwgLy9tb3VzZSB3aGVlbFxuXHRtb3VzZW92ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1v
dmU6IDIsIHNlbGVjdHN0YXJ0OiAyLCBzZWxlY3RlbmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0
a2V5ZG93bjogMiwga2V5cHJlc3M6IDIsIGtleXVwOiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0
aW9uY2hhbmdlOiAyLCAvLyBtb2JpbGVcblx0dG91Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0
b3VjaGVuZDogMiwgdG91Y2hjYW5jZWw6IDIsIC8vIHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwg
Z2VzdHVyZWNoYW5nZTogMiwgZ2VzdHVyZWVuZDogMiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwg
Ymx1cjogMiwgY2hhbmdlOiAyLCByZXNldDogMiwgc2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3Rl
OiAyLCBpbnB1dDogMiwgLy9mb3JtIGVsZW1lbnRzXG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVm
b3JldW5sb2FkOiAyLCByZXNpemU6IDEsIG1vdmU6IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJl
YWR5c3RhdGVjaGFuZ2U6IDEsIC8vd2luZG93XG5cdGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAy
LCBwYWdlc2hvdzogMiwgcGFnZWhpZGU6IDIsIC8vIGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0
OiAxLCBzY3JvbGw6IDEsIG1lc3NhZ2U6IDIgLy9taXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9
IHtcblx0bW91c2V3aGVlbDoge1xuXHRcdGJhc2U6ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3
aGVlbCcgOiAnb25tb3VzZXdoZWVsJyBpbiBkb2N1bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01N
b3VzZVNjcm9sbCdcblx0fVxufTtcblxudmFyIGNoZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2
YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwp
IHJldHVybiB0cnVlO1xuXHRpZiAoIXJlbGF0ZWQpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChy
ZWxhdGVkICE9IHRoaXMgJiYgcmVsYXRlZC5wcmVmaXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMp
ICE9ICdkb2N1bWVudCcgJiYgIXRoaXMuY29udGFpbnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdv
bm1vdXNlZW50ZXInIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0
aXZlRXZlbnRzLm1vdXNlZW50ZXIgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0g
Mjtcblx0RWxlbWVudC5Nb3VzZWVudGVyQ2hlY2sgPSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1l
bnQuRXZlbnRzLm1vdXNlZW50ZXIgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29u
ZGl0aW9uOiBjaGVja1xuXHR9O1xuXG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5c
dFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8q
PGx0SUU5PiovXG5pZiAoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRp
dmVFdmVudHMucHJvcGVydHljaGFuZ2UgPSAyO1xuXHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7
XG5cdFx0YmFzZTogZnVuY3Rpb24oKXtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRc
dFx0cmV0dXJuICh0aGlzLmdldCgndGFnJykgPT0gJ2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8n
IHx8IHR5cGUgPT0gJ2NoZWNrYm94JykpID8gJ3Byb3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xu
XHRcdH0sXG5cdFx0Y29uZGl0aW9uOiBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZl
bnQudHlwZSAhPSAncHJvcGVydHljaGFuZ2UnIHx8IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9
PSAnY2hlY2tlZCc7XG5cdFx0fVxuXHR9O1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xu
XG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGVsZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0
ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1l
dGhvZCBmb3IgbW9yZSBlZmZpY2llbnQgZXZlbnQgbWFuYWdlbWVudC5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6
IFtFbGVtZW50LkRlbGVnYXRpb25dXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBl
dmVudExpc3RlbmVyU3VwcG9ydCA9ICEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1l
bnQuTmF0aXZlRXZlbnRzLmZvY3VzaW4gPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9
IDI7XG5cbnZhciBidWJibGVVcCA9IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRh
cmdldCl7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRj
aCh0YXJnZXQsIGV2ZW50KSkgcmV0dXJuIGZuLmNhbGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtc
blx0XHR0YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5c
bnZhciBtYXAgPSB7XG5cdG1vdXNlZW50ZXI6IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0
XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6
IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVu
dGVyQ2hlY2tcblx0fSxcblx0Zm9jdXM6IHtcblx0XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlz
dGVuZXJTdXBwb3J0ID8gJycgOiAnaW4nKSxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJs
dXI6IHtcblx0XHRiYXNlOiBldmVudExpc3RlbmVyU3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291
dCcsXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9XG59O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkg
PSAnJGRlbGVnYXRpb246JztcbnZhciBmb3JtT2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxu
XHRyZXR1cm4ge1xuXG5cdFx0YmFzZTogJ2ZvY3VzaW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlv
bihzZWxmLCB1aWQpe1xuXHRcdFx0dmFyIGxpc3QgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBl
ICsgJ2xpc3RlbmVycycsIHt9KVt1aWRdO1xuXHRcdFx0aWYgKGxpc3QgJiYgbGlzdC5mb3Jtcykg
Zm9yICh2YXIgaSA9IGxpc3QuZm9ybXMubGVuZ3RoOyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZv
cm0gbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRc
dC8vIHJlbW92ZUV2ZW50IG1ldGhvZCBhbnltb3JlLiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdh
c1xuXHRcdFx0XHQvLyByZW1vdmVkIGFzIHdlbGwuXG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ld
LnJlbW92ZUV2ZW50KSBsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ld
KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwg
Zm4sIGV2ZW50LCB0YXJnZXQsIHVpZCl7XG5cdFx0XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0
YWcnKSA9PSAnZm9ybScpID8gdGFyZ2V0IDogZXZlbnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScp
O1xuXHRcdFx0aWYgKCFmb3JtKSByZXR1cm47XG5cblx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxm
LnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVu
ZXIgPSBsaXN0ZW5lcnNbdWlkXSB8fCB7Zm9ybXM6IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9y
bXMgPSBsaXN0ZW5lci5mb3JtcywgZm5zID0gbGlzdGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9y
bXMuaW5kZXhPZihmb3JtKSAhPSAtMSkgcmV0dXJuO1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtc
blxuXHRcdFx0dmFyIF9mbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2Vs
ZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2
ZW50KHR5cGUsIF9mbik7XG5cdFx0XHRmbnMucHVzaChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNb
dWlkXSA9IGxpc3RlbmVyO1xuXHRcdFx0c2VsZi5zdG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5l
cnMnLCBsaXN0ZW5lcnMpO1xuXHRcdH1cblx0fTtcbn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0g
ZnVuY3Rpb24odHlwZSl7XG5cdHJldHVybiB7XG5cdFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxp
c3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZh
ciBldmVudHMgPSB7Ymx1cjogZnVuY3Rpb24oKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMo
ZXZlbnRzKTtcblx0XHRcdH19O1xuXHRcdFx0ZXZlbnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQp
e1xuXHRcdFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRc
dFx0fTtcblx0XHRcdGV2ZW50LnRhcmdldC5hZGRFdmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07
XG59O1xuXG5pZiAoIWV2ZW50TGlzdGVuZXJTdXBwb3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xu
XHRzdWJtaXQ6IGZvcm1PYnNlcnZlcignc3VibWl0JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIo
J3Jlc2V0JyksXG5cdGNoYW5nZTogaW5wdXRPYnNlcnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDog
aW5wdXRPYnNlcnZlcignc2VsZWN0Jylcbn0pO1xuLyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9
IEVsZW1lbnQucHJvdG90eXBlLFxuXHRhZGRFdmVudCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1v
dmVFdmVudCA9IHByb3RvLnJlbW92ZUV2ZW50O1xuXG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQs
IG1ldGhvZCl7XG5cdHJldHVybiBmdW5jdGlvbih0eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0
aWYgKHR5cGUuaW5kZXhPZignOnJlbGF5JykgPT0gLTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0
eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUp
LmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdGlmIChwYXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3Jl
bGF5JykgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2
YXIgbmV3VHlwZSA9IHBhcnNlZC50YWc7XG5cdFx0cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFj
aChmdW5jdGlvbihwc2V1ZG8pe1xuXHRcdFx0bmV3VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsg
KHBzZXVkby52YWx1ZSA/ICcoJyArIHBzZXVkby52YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtc
blx0XHRvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRo
aXMsIG5ld1R5cGUsIHBhcnNlZC5wc2V1ZG9zWzBdLnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52
YXIgZGVsZWdhdGlvbiA9IHtcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZu
KXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0
b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBz
dG9yZWQpe1xuXHRcdFx0aWYgKHN0b3JlZFtfdWlkXS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0u
bWF0Y2ggPT0gbWF0Y2gpIHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5
cGUsIF9tYXRjaCA9IG1hdGNoLCBfZm4gPSBmbiwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0
XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJn
ZXQpe1xuXHRcdFx0cmV0dXJuIFNsaWNrLm1hdGNoKHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xu
XG5cdFx0dmFyIGVsZW1lbnRFdmVudCA9IEVsZW1lbnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAo
X21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24p
e1xuXHRcdFx0dmFyIF9fbWF0Y2ggPSBtYXRjaCwgY29uZGl0aW9uID0gX21hcC5jb25kaXRpb24g
fHwgZWxlbWVudEV2ZW50LmNvbmRpdGlvbjtcblx0XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0
LCBldmVudCl7XG5cdFx0XHRcdHJldHVybiBfX21hdGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRp
dGlvbi5jYWxsKHRhcmdldCwgZXZlbnQsIHR5cGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2
YXIgc2VsZiA9IHRoaXMsIHVpZCA9IFN0cmluZy51bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0
b3IgPSBfbWFwLmxpc3RlbiA/IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0
YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5c
dFx0XHRpZiAodGFyZ2V0KSBfbWFwLmxpc3RlbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJn
ZXQsIHVpZCk7XG5cdFx0fSA6IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0
YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5c
dFx0XHRpZiAodGFyZ2V0KSBidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQp
O1xuXHRcdH07XG5cblx0XHRpZiAoIXN0b3JlZCkgc3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3Vp
ZF0gPSB7XG5cdFx0XHRtYXRjaDogX21hdGNoLFxuXHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVn
YXRvcjogZGVsZWdhdG9yXG5cdFx0fTtcblx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0
XHRyZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVy
ZSk7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3Vp
ZCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBz
dG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxu
XHRcdGlmIChfdWlkKXtcblx0XHRcdHZhciBfdHlwZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3Jl
ZFtfdWlkXS5kZWxlZ2F0b3IsIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0g
X21hcC5iYXNlIHx8IF90eXBlO1xuXHRcdFx0aWYgKF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0
aGlzLCBfdWlkKTtcblx0XHRcdGRlbGV0ZSBzdG9yZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190
eXBlXSA9IHN0b3JlZDtcblx0XHRcdHJldHVybiByZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUs
IGRlbGVnYXRvciwgX21hcC5jYXB0dXJlKTtcblx0XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5c
dFx0aWYgKGZuKSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlk
XTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNoICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxl
Z2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5c
dFx0fSBlbHNlIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRd
O1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2gpIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2Fs
bCh0aGlzLCB0eXBlLCBtYXRjaCwgcy5mbiwgX191aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fVxuXG59O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBs
ZW1lbnQnLCB7XG5cdGFkZEV2ZW50OiByZWxheShhZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVu
dCksXG5cdHJlbW92ZUV2ZW50OiByZWxheShyZW1vdmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVF
dmVudClcbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxu
ZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0
eWxlcyBvZiBFbGVtZW50cyBpbiBhIGZhc2hpb25hYmxlIHdheS5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBFbGVtZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0
eWxlXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRt
bCwgZWw7XG5cbi8vPGx0SUU5PlxuLy8gQ2hlY2sgZm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCBy
ZW1vdmUgc3R5bGVzIHdoZW4gdGhleSdyZSBzZXQgdG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTtcbmVsLnN0eWxlLmNvbG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xv
ciA9IG51bGw7XG52YXIgZG9lc05vdFJlbW92ZVN0eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdy
ZWQnO1xuXG4vLyBjaGVjayBmb3Igb2xkSUUsIHdoaWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhh
bmQgc3R5bGVzIGluIHRoZSB3cm9uZyBvcmRlciAoY29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBv
ZiB3aWR0aC1zdHlsZS1jb2xvcilcbnZhciBib3JkZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xu
ZWwuc3R5bGUuYm9yZGVyID0gYm9yZGVyO1xudmFyIHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVy
ID0gZWwuc3R5bGUuYm9yZGVyICE9IGJvcmRlcjtcbmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxu
dmFyIGhhc0dldENvbXB1dGVkU3R5bGUgPSAhIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRz
dXBwb3J0Qm9yZGVyUmFkaXVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUu
Ym9yZGVyUmFkaXVzICE9IG51bGw7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0
OiBmdW5jdGlvbihzdHlsZXMpe1xuXHR0aGlzLnNldFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZh
ciBoYXNPcGFjaXR5ID0gKGh0bWwuc3R5bGUub3BhY2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVy
ID0gKGh0bWwuc3R5bGUuZmlsdGVyICE9IG51bGwpLFxuXHRyZUFscGhhID0gL2FscGhhXFwob3Bh
Y2l0eT0oW1xcZC5dKylcXCkvaTtcblxudmFyIHNldFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVt
ZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdG9yZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0
ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gb3BhY2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxs
ID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59O1xuXG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIg
PSBmdW5jdGlvbihlbGVtZW50LCByZWdleHAsIHZhbHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVu
dC5zdHlsZSxcblx0XHRmaWx0ZXIgPSBzdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRl
ZFN0eWxlKCdmaWx0ZXInKSB8fCAnJztcblx0c3R5bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZp
bHRlcikgPyBmaWx0ZXIucmVwbGFjZShyZWdleHAsIHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZh
bHVlKS50cmltKCk7XG5cdGlmICghc3R5bGUuZmlsdGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUo
J2ZpbHRlcicpO1xufTtcbi8vPC9sdElFOT5cblxudmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0
eSA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkg
PSBvcGFjaXR5O1xufSA6IChoYXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtc
blx0aWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFz
TGF5b3V0KSBlbGVtZW50LnN0eWxlLnpvb20gPSAxO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8
IG9wYWNpdHkgPT0gMSl7XG5cdFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0
XHRpZiAob3BhY2l0eSA9PSAxICYmIGdldE9wYWNpdHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0
XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5
ICogMTAwKS5saW1pdCgwLCAxMDApLnJvdW5kKCkgKyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJp
bGl0eSkpO1xuXG52YXIgZ2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVu
dCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5zdHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0
Q29tcHV0ZWRTdHlsZSgnb3BhY2l0eScpO1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6
IG9wYWNpdHkudG9GbG9hdCgpO1xufSA6IChoYXNGaWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtc
blx0dmFyIGZpbHRlciA9IChlbGVtZW50LnN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1
dGVkU3R5bGUoJ2ZpbHRlcicpKSxcblx0XHRvcGFjaXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5
ID0gZmlsdGVyLm1hdGNoKHJlQWxwaGEpO1xuXHRyZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBm
aWx0ZXIgPT0gbnVsbCkgPyAxIDogKG9wYWNpdHlbMV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVs
ZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5c
dGlmIChvcGFjaXR5ID09IG51bGwpIG9wYWNpdHkgPSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5
ID09ICdoaWRkZW4nID8gMCA6IDEpO1xuXHRyZXR1cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZs
b2F0TmFtZSA9IChodG1sLnN0eWxlLmNzc0Zsb2F0ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDog
J2Nzc0Zsb2F0Jyxcblx0bmFtZWRQb3NpdGlvbnMgPSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBj
ZW50ZXI6ICc1MCUnLCByaWdodDogJzEwMCUnLCBib3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tn
cm91bmRQb3NpdGlvblhZID0gKGh0bWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxs
KSxcblx0cHJlZml4UGF0dGVybiA9IC9eLShtcyktLztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0
aW9uKHByb3BlcnR5KXtcblx0cmV0dXJuIHByb3BlcnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwg
JyQxLScpLmNhbWVsQ2FzZSgpO1xufTtcblxuLy88bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBm
dW5jdGlvbihzdHlsZSwgcHJvcGVydHkpe1xuXHRpZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQ
b3NpdGlvbicpe1xuXHRcdHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5c
dFx0cHJvcGVydHkgKz0gJ1knO1xuXHR9XG5cdHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0
eSk7XG59O1xuLy88L2x0SUU5PlxuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0
ZWRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHls
ZSAmJiB0aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2Fz
ZShwcm9wZXJ0eSldO1xuXHRcdHZhciBkZWZhdWx0VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQo
dGhpcykuZGVmYXVsdFZpZXcsXG5cdFx0XHRjb21wdXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVs
dFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLCBudWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChj
b21wdXRlZCkgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5h
bWUpID8gJ2Zsb2F0JyA6IHByb3BlcnR5Lmh5cGhlbmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNl
dFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAn
b3BhY2l0eScpe1xuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2
YWx1ZSk7XG5cdFx0XHRzZXRPcGFjaXR5KHRoaXMsIHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlz
O1xuXHRcdH1cblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8g
ZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcn
KXtcblx0XHRcdHZhciBtYXAgPSAoRWxlbWVudC5TdHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3Bs
aXQoJyAnKTtcblx0XHRcdHZhbHVlID0gQXJyYXkuY29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9u
KHZhbCwgaSl7XG5cdFx0XHRcdGlmICghbWFwW2ldKSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVy
biAodHlwZU9mKHZhbCkgPT0gJ251bWJlcicpID8gbWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJv
dW5kKHZhbCkpIDogdmFsO1xuXHRcdFx0fSkuam9pbignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFs
dWUgPT0gU3RyaW5nKE51bWJlcih2YWx1ZSkpKXtcblx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2
YWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3R5bGVbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88
bHRJRTk+XG5cdFx0aWYgKCh2YWx1ZSA9PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90
UmVtb3ZlU3R5bGVzICYmIHRoaXMuc3R5bGUucmVtb3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92
ZVN0eWxlKHRoaXMuc3R5bGUsIHByb3BlcnR5KTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5c
dFx0aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5JykgcmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5c
dFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6
IHByb3BlcnR5KTtcblx0XHRpZiAoc3VwcG9ydEJvcmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRl
eE9mKCdib3JkZXJSYWRpdXMnKSAhPSAtMSl7XG5cdFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0
UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVz
JywgJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnXS5tYXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRc
dFx0cmV0dXJuIHRoaXMuc3R5bGVbY29ybmVyXSB8fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpv
aW4oJyAnKTtcblx0XHR9XG5cdFx0dmFyIHJlc3VsdCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xu
XHRcdGlmICghcmVzdWx0IHx8IHByb3BlcnR5ID09ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVt
ZW50LlNob3J0U3R5bGVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3Vs
dCA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBzIGluIEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVy
dHldKSByZXN1bHQucHVzaCh0aGlzLmdldFN0eWxlKHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3Vs
dC5qb2luKCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5
bGUocHJvcGVydHkpO1xuXHRcdH1cblx0XHRpZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYg
L15iYWNrZ3JvdW5kUG9zaXRpb25bWFldPyQvLnRlc3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVy
biByZXN1bHQucmVwbGFjZSgvKHRvcHxyaWdodHxib3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9z
aXRpb24pe1xuXHRcdFx0XHRyZXR1cm4gbmFtZWRQb3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0
fSkgfHwgJzBweCc7XG5cdFx0fVxuXHRcdGlmICghcmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNr
Z3JvdW5kUG9zaXRpb24nKSByZXR1cm4gJzBweCAwcHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRc
dFx0cmVzdWx0ID0gU3RyaW5nKHJlc3VsdCk7XG5cdFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0
Y2goL3JnYmE/XFwoW1xcZFxccyxdK1xcKS8pO1xuXHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSBy
ZXN1bHQucmVwbGFjZShjb2xvclswXSwgY29sb3JbMF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRc
dGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiAhdGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRc
dFx0aWYgKCgvXihoZWlnaHR8d2lkdGgpJC8pLnRlc3QocHJvcGVydHkpICYmICEoL3B4JC8udGVz
dChyZXN1bHQpKSl7XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykg
PyBbJ2xlZnQnLCAncmlnaHQnXSA6IFsndG9wJywgJ2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRc
dFx0dmFsdWVzLmVhY2goZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5n
ZXRTdHlsZSgnYm9yZGVyLScgKyB2YWx1ZSArICctd2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRT
dHlsZSgncGFkZGluZy0nICsgdmFsdWUpLnRvSW50KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRc
dFx0XHRyZXR1cm4gdGhpc1snb2Zmc2V0JyArIHByb3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXpl
ICsgJ3B4Jztcblx0XHRcdH1cblx0XHRcdGlmICgoL15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBh
ZGRpbmcvKS50ZXN0KHByb3BlcnR5KSAmJiBpc05hTihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0
XHRcdFx0cmV0dXJuICcwcHgnO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRp
ZiAocmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIgJiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRv
bXxMZWZ0KT8kLy50ZXN0KHByb3BlcnR5KSAmJiAvXiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRy
ZXR1cm4gcmVzdWx0LnJlcGxhY2UoL14oLispXFxzKC4rKVxccyguKykkLywgJyQyICQzICQxJyk7
XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0
c2V0U3R5bGVzOiBmdW5jdGlvbihzdHlsZXMpe1xuXHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxl
cykgdGhpcy5zZXRTdHlsZShzdHlsZSwgc3R5bGVzW3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0Z2V0U3R5bGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtc
blx0XHRBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0
cmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtleSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0
dXJuIHJlc3VsdDtcblx0fVxuXG59KTtcblxuRWxlbWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdA
cHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgnLCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAn
QHB4JywgaGVpZ2h0OiAnQHB4JywgbWF4V2lkdGg6ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBt
aW5XaWR0aDogJ0BweCcsIG1pbkhlaWdodDogJ0BweCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3Jn
YihALCBALCBAKScsIGJhY2tncm91bmRTaXplOiAnQHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAn
QHB4IEBweCcsIGNvbG9yOiAncmdiKEAsIEAsIEApJyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0
ZXJTcGFjaW5nOiAnQHB4JywgbGluZUhlaWdodDogJ0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHgg
QHB4IEBweCknLFxuXHRtYXJnaW46ICdAcHggQHB4IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBw
eCBAcHggQHB4JywgYm9yZGVyOiAnQHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBA
KSBAcHggQCByZ2IoQCwgQCwgQCknLFxuXHRib3JkZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcs
IGJvcmRlclN0eWxlOiAnQCBAIEAgQCcsIGJvcmRlckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihA
LCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApJyxcblx0ekluZGV4OiAnQCcsICd6b29t
JzogJ0AnLCBmb250V2VpZ2h0OiAnQCcsIHRleHRJbmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcs
IGJvcmRlclJhZGl1czogJ0BweCBAcHggQHB4IEBweCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5T
aG9ydFN0eWxlcyA9IHttYXJnaW46IHt9LCBwYWRkaW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVy
V2lkdGg6IHt9LCBib3JkZXJTdHlsZToge30sIGJvcmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywg
J1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J10uZWFjaChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2
YXIgU2hvcnQgPSBFbGVtZW50LlNob3J0U3R5bGVzO1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHls
ZXM7XG5cdFsnbWFyZ2luJywgJ3BhZGRpbmcnXS5lYWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2
YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlvbjtcblx0XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3Nk
XSA9ICdAcHgnO1xuXHR9KTtcblx0dmFyIGJkID0gJ2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNo
b3J0LmJvcmRlcltiZF0gPSBBbGxbYmRdID0gJ0BweCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBi
ZHcgPSBiZCArICdXaWR0aCcsIGJkcyA9IGJkICsgJ1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3In
O1xuXHRTaG9ydFtiZF0gPSB7fTtcblx0U2hvcnQuYm9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2Jk
XVtiZHddID0gQWxsW2Jkd10gPSAnQHB4Jztcblx0U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNo
b3J0W2JkXVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10g
PSBTaG9ydFtiZF1bYmRjXSA9IEFsbFtiZGNdID0gJ3JnYihALCBALCBAKSc7XG59KTtcblxuaWYg
KGhhc0JhY2tncm91bmRQb3NpdGlvblhZKSBFbGVtZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQ
b3NpdGlvbiA9IHtiYWNrZ3JvdW5kUG9zaXRpb25YOiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6
ICdAJ307XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5k
ZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyB0byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBv
ciBwb3NpdGlvbmluZyBvZiBFbGVtZW50cyBhbmQgdGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25p
bmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRwOi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBz
bWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNlbnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGlj
ZW5zZXMvbGdwbC5odG1sKS5cbiAgLSBWaWV3cG9ydCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUld
KGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0
cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xpY2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudCwgRWxlbWVudC5TdHlsZV1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNd
XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2JyksXG5cdGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7XG5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcwJztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hp
bGQpO1xudmFyIGJyb2tlbk9mZnNldFBhcmVudCA9IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVs
ZW1lbnQpO1xuZWxlbWVudCA9IGNoaWxkID0gbnVsbDtcblxudmFyIGhlaWdodENvbXBvbmVudHMg
PSBbJ2hlaWdodCcsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lk
dGgnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcblx0d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcs
ICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRl
clJpZ2h0V2lkdGgnXTtcblxudmFyIHN2Z0NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5c
blx0dmFyIGdDUyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7
eDogMCwgeTogMH07XG5cblx0aGVpZ2h0Q29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5c
dFx0Ym91bmRzLnkgKz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBv
bmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRcdGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NT
W2Nzc10pO1xuXHR9KTtcblx0cmV0dXJuIGJvdW5kcztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1
bmN0aW9uKGVsKXtcblx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3Rh
dGljJyB8fCBpc0JvZHkoZWwpO1xufTtcblxudmFyIGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24o
ZWwpe1xuXHRyZXR1cm4gaXNPZmZzZXQoZWwpIHx8ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVz
dChlbC50YWdOYW1lKTtcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzog
ZnVuY3Rpb24oeCwgeSl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdp
bmRvdygpLnNjcm9sbFRvKHgsIHkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExl
ZnQgPSB4O1xuXHRcdFx0dGhpcy5zY3JvbGxUb3AgPSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRnZXRTaXplOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykp
IHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNpemUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRc
dC8vIFRoaXMgaWYgY2xhdXNlIGlzIGJlY2F1c2UgSUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJv
dW5kaW5nQ2xpZW50UmVjdCBvZiBlbGVtZW50cyB3aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRc
dGlmICghd2luZG93LmdldENvbXB1dGVkU3R5bGUpIHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0
aCwgeTogdGhpcy5vZmZzZXRIZWlnaHR9O1xuXHRcdC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMg
c3ZnIHNlY3Rpb24gdW5kZXIsIGNhbGxpbmcgYHN2Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSBy
ZW1vdmVkIHdoZW4gRkYgZml4ZWQgdGhlIHN2ZyBzaXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzog
aHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0
aWYgKHRoaXMuZ2V0KCd0YWcnKSA9PSAnc3ZnJykgcmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhp
cyk7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7XG5cdFx0XHRyZXR1cm4ge3g6IGJvdW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdo
dH07XG5cdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1c
blx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhp
cykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4g
e3g6IHRoaXMuc2Nyb2xsV2lkdGgsIHk6IHRoaXMuc2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRn
ZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMu
Z2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQs
IHk6IHRoaXMuc2Nyb2xsVG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBlbGVtZW50ID0gdGhpcy5wYXJlbnROb2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAw
fTtcblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0
aW9uLnggKz0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50
LnNjcm9sbFRvcDtcblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxu
XHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9m
ZnNldFBhcmVudCA/IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlm
IChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0g
J2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR2YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0
cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnc3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6
IGlzT2Zmc2V0O1xuXHRcdHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xu
XHRcdFx0aWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1c
blx0XHRyZXR1cm4gbnVsbDtcblx0fSA6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0
aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bv
c2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0
dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRcdH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4g
bnVsbDtcblx0fSxcblxuXHRnZXRPZmZzZXRzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRC
b3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlm
IChoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3Qpe1xuXHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKSxcblx0XHRcdFx0aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0
RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQpLFxuXHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5n
ZXRTY3JvbGwoKSxcblx0XHRcdFx0ZWxlbVNjcm9sbHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0
XHRcdFx0aXNGaXhlZCA9IChzdHlsZVN0cmluZyh0aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQn
KTtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBl
bGVtU2Nyb2xscy54ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGll
bnRMZWZ0LFxuXHRcdFx0XHR5OiBib3VuZC50b3AudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSAr
ICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC55KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9
O1xuXHRcdH1cblxuXHRcdHZhciBlbGVtZW50ID0gdGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTog
MH07XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUg
KGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1l
bnQub2Zmc2V0TGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5c
blx0XHRcdGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1
cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtc
blx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlz
LmdldFNjcm9sbHMoKTtcblx0XHR2YXIgcG9zaXRpb24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAt
IHNjcm9sbC54LFxuXHRcdFx0eTogb2Zmc2V0LnkgLSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRp
ZiAocmVsYXRpdmUgJiYgKHJlbGF0aXZlID0gZG9jdW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0
XHR2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IHJlbGF0aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRy
ZXR1cm4ge3g6IHBvc2l0aW9uLnggLSByZWxhdGl2ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJl
bGF0aXZlKSwgeTogcG9zaXRpb24ueSAtIHJlbGF0aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihy
ZWxhdGl2ZSl9O1xuXHRcdH1cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29v
cmRpbmF0ZXM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVy
biB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5hdGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0g
dGhpcy5nZXRQb3NpdGlvbihlbGVtZW50KSxcblx0XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtc
blx0XHR2YXIgb2JqID0ge1xuXHRcdFx0bGVmdDogcG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9z
aXRpb24ueSxcblx0XHRcdHdpZHRoOiBzaXplLngsXG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRc
dH07XG5cdFx0b2JqLnJpZ2h0ID0gb2JqLmxlZnQgKyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRv
bSA9IG9iai50b3AgKyBvYmouaGVpZ2h0O1xuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29t
cHV0ZVBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBv
YmoueCAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmou
eSAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4tdG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNl
dFBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRcdHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlz
LmNvbXB1dGVQb3NpdGlvbihvYmopKTtcblx0fVxuXG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRv
d10uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2
YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGll
bnRXaWR0aCwgeTogZG9jLmNsaWVudEhlaWdodH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5j
dGlvbigpe1xuXHRcdHZhciB3aW4gPSB0aGlzLmdldFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRF
bGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDogd2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3Jv
bGxMZWZ0LCB5OiB3aW4ucGFnZVlPZmZzZXQgfHwgZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0
Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVu
dCh0aGlzKSxcblx0XHRcdG1pbiA9IHRoaXMuZ2V0U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMu
Z2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdFx0cmV0dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xs
V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIG1pbi54KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhl
aWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIG1pbi55KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29y
ZGluYXRlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRc
dHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwg
aGVpZ2h0OiBzaXplLnksIHdpZHRoOiBzaXplLnh9O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRl
IG1ldGhvZHNcblxudmFyIHN0eWxlU3RyaW5nID0gRWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xu
XG5mdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0
cmluZyhlbGVtZW50LCBzdHlsZSkudG9JbnQoKSB8fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9w
Qm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10
b3Atd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gbGVmdEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJu
IHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItbGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlv
biBpc0JvZHkoZWxlbWVudCl7XG5cdHJldHVybiAoL14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVs
ZW1lbnQudGFnTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7
XG5cdHZhciBkb2MgPSBlbGVtZW50LmdldERvY3VtZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21w
YXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRv
Yy5ib2R5O1xufVxuXG59KSgpO1xuXG4vL2FsaWFzZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9u
OiAnc2V0UG9zaXRpb24nfSk7IC8vY29tcGF0YWJpbGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwg
RWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9s
bFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxu
XG5cdGdldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xs
KCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxIZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0
VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxc
blxuXHRnZXRMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCku
eDtcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgdGhlIGJhc2ljIGFuaW1hdGlvbiBsb2dpYyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3Ro
ZXIgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBG
eFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENs
YXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhl
bmFibGVdLFxuXG5cdG9wdGlvbnM6IHtcblx0XHQvKlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRv
bkNhbmNlbDogbmlsLFxuXHRcdG9uQ29tcGxldGU6IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAs
XG5cdFx0dW5pdDogZmFsc2UsXG5cdFx0ZHVyYXRpb246IDUwMCxcblx0XHRmcmFtZXM6IG51bGws
XG5cdFx0ZnJhbWVTa2lwOiB0cnVlLFxuXHRcdGxpbms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5p
dGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJq
ZWN0IHx8IHRoaXM7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdl
dFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0
cmV0dXJuIC0oTWF0aC5jb3MoTWF0aC5QSSAqIHApIC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5c
blx0c3RlcDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7
XG5cdFx0XHR2YXIgZGlmZiA9ICh0aGlzLnRpbWUgIT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1l
KSA6IDAsIGZyYW1lcyA9IGRpZmYgLyB0aGlzLmZyYW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRp
bWUgPSBub3c7XG5cdFx0XHR0aGlzLmZyYW1lICs9IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRc
dFx0dGhpcy5mcmFtZSsrO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFt
ZXMpe1xuXHRcdFx0dmFyIGRlbHRhID0gdGhpcy50cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlz
LmZyYW1lcyk7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRv
LCBkZWx0YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7
XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5c
dFx0XHR0aGlzLnN0b3AoKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xu
XHRcdHJldHVybiBub3c7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRl
bHRhKXtcblx0XHRyZXR1cm4gRnguY29tcHV0ZShmcm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5c
dGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRy
dWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwn
OiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5j
aGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5c
dFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwg
dG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRo
aXMuZnJvbSA9IGZyb207XG5cdFx0dGhpcy50byA9IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhp
cy5vcHRpb25zLmZyYW1lU2tpcCkgPyAwIDogLTE7XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0
XHR0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmdldFRyYW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVz
ID0gdGhpcy5vcHRpb25zLmZyYW1lcywgZnBzID0gdGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24g
PSB0aGlzLm9wdGlvbnMuZHVyYXRpb247XG5cdFx0dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9u
c1tkdXJhdGlvbl0gfHwgZHVyYXRpb24udG9JbnQoKTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwg
PSAxMDAwIC8gZnBzO1xuXHRcdHRoaXMuZnJhbWVzID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhp
cy5kdXJhdGlvbiAvIHRoaXMuZnJhbWVJbnRlcnZhbCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFi
bGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMu
c3ViamVjdCk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVj
dCk7XG5cdFx0cHVzaEluc3RhbmNlLmNhbGwodGhpcywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtc
blx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0
aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdGlmICh0aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtc
blx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRc
dFx0aWYgKCF0aGlzLmNhbGxDaGFpbigpKSB0aGlzLmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScs
IHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgn
c3RvcCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5z
dWJqZWN0ID09PSB0aGlzID8gbnVsbCA6IHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1
bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNh
bGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFt
ZXM7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNo
YWluKCk7XG5cdFx0XHR0aGlzLnJlamVjdCh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRwYXVzZTogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1
bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNh
bGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdHJlc3VtZTogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNo
SW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5j
ZXNbdGhpcy5vcHRpb25zLmZwc107XG5cdFx0cmV0dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0
aGlzKTtcblx0fSxcblxuXHRpc1BhdXNlZDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMu
ZnJhbWUgPCB0aGlzLmZyYW1lcykgJiYgIXRoaXMuaXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5c
bkZ4LmNvbXB1dGUgPSBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0g
ZnJvbSkgKiBkZWx0YSArIGZyb207XG59O1xuXG5GeC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUw
LCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZh
ciBpbnN0YW5jZXMgPSB7fSwgdGltZXJzID0ge307XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtc
blx0dmFyIG5vdyA9IERhdGUubm93KCk7XG5cdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0t
Oyl7XG5cdFx0dmFyIGluc3RhbmNlID0gdGhpc1tpXTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3Rh
bmNlLnN0ZXAobm93KTtcblx0fVxufTtcblxudmFyIHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZw
cyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10p
O1xuXHRsaXN0LnB1c2godGhpcyk7XG5cdGlmICghdGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0g
bG9vcC5wZXJpb2RpY2FsKE1hdGgucm91bmQoMTAwMCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFy
IHB1bGxJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zw
c107XG5cdGlmIChsaXN0KXtcblx0XHRsaXN0LmVyYXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5s
ZW5ndGggJiYgdGltZXJzW2Zwc10pe1xuXHRcdFx0ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRc
dFx0dGltZXJzW2Zwc10gPSBjbGVhckludGVydmFsKHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1c
bn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyB0aGUgQ1NTIGFuaW1hdGlvbiBsb2dpYy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9y
cGgsIEZ4LkVsZW1lbnRzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWly
ZXM6IFtGeCwgRWxlbWVudC5TdHlsZV1cblxucHJvdmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5c
bkZ4LkNTUyA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0
aGUgYmFzZSBmcm9tL3RvIG9iamVjdFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHBy
b3BlcnR5LCB2YWx1ZXMpe1xuXHRcdHZhbHVlcyA9IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0
XHR2YXIgZnJvbSA9IHZhbHVlc1swXSwgdG8gPSB2YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51
bGwpe1xuXHRcdFx0dG8gPSBmcm9tO1xuXHRcdFx0ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJv
cGVydHkpO1xuXHRcdFx0dmFyIHVuaXQgPSB0aGlzLm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFk
YXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4
LmpzI0wyOTlcblx0XHRcdGlmICh1bml0ICYmIGZyb20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmlu
ZycgJiYgZnJvbS5zbGljZSgtdW5pdC5sZW5ndGgpICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9t
KSAhPSAwKXtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtc
blx0XHRcdFx0dmFyIHZhbHVlID0gZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtc
blx0XHRcdFx0Ly8gSUUgYW5kIE9wZXJhIHN1cHBvcnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhc
blx0XHRcdFx0aWYgKCEoL3B4JC8udGVzdCh2YWx1ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVs
ZW1lbnQuc3R5bGVbKCdwaXhlbC0nICsgcHJvcGVydHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0
XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBF
ZHdhcmRzJyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUv
I2NvbW1lbnQtMTAyMjkxXG5cdFx0XHRcdFx0XHR2YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVm
dDtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0
XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZS5waXhlbExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50
LnN0eWxlLmxlZnQgPSBsZWZ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9t
ID0gKHRvIHx8IDEpIC8gKHBhcnNlRmxvYXQodmFsdWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJv
bSkgfHwgMCk7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0
KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0
bzogdGhpcy5wYXJzZSh0byl9O1xuXHR9LFxuXG5cdC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBh
cnJheVxuXG5cdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5j
b252ZXJ0KHZhbHVlKSgpO1xuXHRcdHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykg
PyB2YWx1ZS5zcGxpdCgnICcpIDogQXJyYXkuY29udmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZh
bHVlLm1hcChmdW5jdGlvbih2YWwpe1xuXHRcdFx0dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2
YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdE9iamVjdC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5j
dGlvbihwYXJzZXIpe1xuXHRcdFx0XHRpZiAoZm91bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBh
cnNlZCA9IHBhcnNlci5wYXJzZSh2YWwpO1xuXHRcdFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9
PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBhcnNlZCwgcGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7
XG5cdFx0XHRmb3VuZCA9IGZvdW5kIHx8IHt2YWx1ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJz
ZXJzLlN0cmluZ307XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9j
b21wdXRlcyBieSBhIGZyb20gYW5kIHRvIHByZXBhcmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBh
cnNlcnMuXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIg
Y29tcHV0ZWQgPSBbXTtcblx0XHQoTWF0aC5taW4oZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRp
bWVzKGZ1bmN0aW9uKGkpe1xuXHRcdFx0Y29tcHV0ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFy
c2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9baV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBm
cm9tW2ldLnBhcnNlcn0pO1xuXHRcdH0pO1xuXHRcdGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlv
bi5jb252ZXJ0KCdmeDpjc3M6dmFsdWUnKTtcblx0XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5c
blx0Ly9zZXJ2ZXMgdGhlIHZhbHVlIGFzIHNldHRhYmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZh
bHVlLCB1bml0KXtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFs
dWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcblx0XHR2YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1
ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7XG5cdFx0XHRyZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChi
aXQucGFyc2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5pdCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBy
ZXR1cm5lZDtcblx0fSxcblxuXHQvL3JlbmRlcnMgdGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5c
blx0cmVuZGVyOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRc
dGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRoaXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0
fSxcblxuXHQvL3NlYXJjaGVzIGluc2lkZSB0aGUgcGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVz
IGZvciBhIHNlbGVjdG9yXG5cblx0c2VhcmNoOiBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYg
KEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0pIHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xu
XHRcdHZhciB0byA9IHt9LCBzZWxlY3RvclRlc3QgPSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9y
LmVzY2FwZVJlZ0V4cCgpICsgJyQnKTtcblxuXHRcdHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlv
bihydWxlcyl7XG5cdFx0XHRBcnJheS5lYWNoKHJ1bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRc
dFx0aWYgKHJ1bGUubWVkaWEpe1xuXHRcdFx0XHRcdHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8
IHJ1bGUuY3NzUnVsZXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRp
ZiAoIXJ1bGUuc3R5bGUpIHJldHVybjtcblx0XHRcdFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxl
LnNlbGVjdG9yVGV4dCkgPyBydWxlLnNlbGVjdG9yVGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0
aW9uKG0pe1xuXHRcdFx0XHRcdHJldHVybiBtLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDog
bnVsbDtcblx0XHRcdFx0aWYgKCFzZWxlY3RvclRleHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNl
bGVjdG9yVGV4dCkpIHJldHVybjtcblx0XHRcdFx0T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMs
IGZ1bmN0aW9uKHZhbHVlLCBzdHlsZSl7XG5cdFx0XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxl
XSB8fCBFbGVtZW50LlNob3J0U3R5bGVzW3N0eWxlXSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVl
ID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTtcblx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9e
cmdiLykudGVzdCh2YWx1ZSkpID8gdmFsdWUucmdiVG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9
KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRBcnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hl
ZXRzLCBmdW5jdGlvbihzaGVldCl7XG5cdFx0XHR2YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0
XHRpZiAoaHJlZiAmJiBocmVmLmluZGV4T2YoJzovLycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRv
Y3VtZW50LmRvbWFpbikgPT0gLTEpIHJldHVybjtcblx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1
bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuXHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9
KTtcblx0XHRyZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xu
XG5GeC5DU1MuQ2FjaGUgPSB7fTtcblxuRnguQ1NTLlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtc
blx0XHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1sw
LTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUuaGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1
cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXFxkKyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykp
KSA/IFt2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0
Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1h
cChmdW5jdGlvbih2YWx1ZSwgaSl7XG5cdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1
dGUoZnJvbVtpXSwgdG9baV0sIGRlbHRhKSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZl
OiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0
fVxuXHR9LFxuXG5cdE51bWJlcjoge1xuXHRcdHBhcnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1
dGU6IEZ4LmNvbXB1dGUsXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRc
dHJldHVybiAodW5pdCkgPyB2YWx1ZSArIHVuaXQgOiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0
U3RyaW5nOiB7XG5cdFx0cGFyc2U6IEZ1bmN0aW9uLmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1
dGU6IGZ1bmN0aW9uKHplcm8sIG9uZSl7XG5cdFx0XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0
c2VydmU6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5c
bn07XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3Jt
ZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHBy
b3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcgYW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1Mg
YmFzZWQgc2VsZWN0b3IgcnVsZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBGeC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1v
cnBoID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTog
ZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJq
ZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5c
dH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJp
bmcnKSBub3cgPSB0aGlzLnNlYXJjaChub3cpO1xuXHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlz
LnJlbmRlcih0aGlzLmVsZW1lbnQsIHAsIG5vd1twXSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0
YSl7XG5cdFx0dmFyIG5vdyA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0g
dGhpcy5wYXJlbnQoZnJvbVtwXSwgdG9bcF0sIGRlbHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9
LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2so
cHJvcGVydGllcykpIHJldHVybiB0aGlzO1xuXHRcdGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAn
c3RyaW5nJykgcHJvcGVydGllcyA9IHRoaXMuc2VhcmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBm
cm9tID0ge30sIHRvID0ge307XG5cdFx0Zm9yICh2YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRc
dHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3Bd
KTtcblx0XHRcdGZyb21bcF0gPSBwYXJzZWQuZnJvbTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRv
O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xu
XG5FbGVtZW50LlByb3BlcnRpZXMubW9ycGggPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25z
KXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9y
cGggPSB0aGlzLnJldHJpZXZlKCdtb3JwaCcpO1xuXHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9y
cGggPSBuZXcgRnguTW9ycGgodGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0
b3JlKCdtb3JwaCcsIG1vcnBoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07
XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRtb3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRc
dHRoaXMuZ2V0KCdtb3JwaCcpLnN0YXJ0KHByb3BzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5UcmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjog
Q29udGFpbnMgYSBzZXQgb2YgYWR2YW5jZWQgdHJhbnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFu
eSBvZiB0aGUgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNy
ZWRpdHM6XG4gIC0gRWFzaW5nIEVxdWF0aW9ucyBieSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3
dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2luZy8+LCBtb2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJl
IHVzZWQgd2l0aCBNb29Ub29scy5cblxucmVxdWlyZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFu
c2l0aW9uc1xuXG4uLi5cbiovXG5cbkZ4LmltcGxlbWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjog
ZnVuY3Rpb24oKXtcblx0XHR2YXIgdHJhbnMgPSB0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBG
eC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJbk91dDtcblx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdz
dHJpbmcnKXtcblx0XHRcdHZhciBkYXRhID0gdHJhbnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5z
ID0gRnguVHJhbnNpdGlvbnM7XG5cdFx0XHR0cmFucyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5z
W2RhdGFbMF0uY2FwaXRhbGl6ZSgpXTtcblx0XHRcdGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5z
WydlYXNlJyArIGRhdGFbMV0uY2FwaXRhbGl6ZSgpICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0
YWxpemUoKSA6ICcnKV07XG5cdFx0fVxuXHRcdHJldHVybiB0cmFucztcblx0fVxuXG59KTtcblxu
RnguVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5zaXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9
IEFycmF5LmNvbnZlcnQocGFyYW1zKTtcblx0dmFyIGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5c
dFx0cmV0dXJuIHRyYW5zaXRpb24ocG9zLCBwYXJhbXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0
LmFwcGVuZChlYXNlSW4sIHtcblx0XHRlYXNlSW46IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5j
dGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIDEgLSB0cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7
XG5cdFx0fSxcblx0XHRlYXNlSW5PdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBv
cyA8PSAwLjUgPyB0cmFuc2l0aW9uKDIgKiBwb3MsIHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24o
MiAqICgxIC0gcG9zKSwgcGFyYW1zKSkpIC8gMjtcblx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJh
bnNpdGlvbnMgPSB7XG5cblx0bGluZWFyOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVy
bztcblx0fVxuXG59O1xuXG5cblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJh
bnNpdGlvbnMpe1xuXHRmb3IgKHZhciB0cmFuc2l0aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFu
c2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5z
aXRpb25dKTtcbn07XG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlv
bihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxu
XG5cdEV4cG86IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAx
KSk7XG5cdH0sXG5cblx0Q2lyYzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNp
bihNYXRoLmFjb3MocCkpO1xuXHR9LFxuXG5cdFNpbmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVy
biAxIC0gTWF0aC5jb3MocCAqIE1hdGguUEkgLyAyKTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlv
bihwLCB4KXtcblx0XHR4ID0geCAmJiB4WzBdIHx8IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBv
dyhwLCAyKSAqICgoeCArIDEpICogcCAtIHgpO1xuXHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24o
cCl7XG5cdFx0dmFyIHZhbHVlO1xuXHRcdGZvciAodmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBi
LCBiIC89IDIpe1xuXHRcdFx0aWYgKHAgPj0gKDcgLSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZh
bHVlID0gYiAqIGIgLSBNYXRoLnBvdygoMTEgLSA2ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0
XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxu
XHRFbGFzdGljOiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAt
LXApICogTWF0aC5jb3MoMjAgKiBwICogTWF0aC5QSSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtc
blx0fVxuXG59KTtcblxuWydRdWFkJywgJ0N1YmljJywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChm
dW5jdGlvbih0cmFuc2l0aW9uLCBpKXtcblx0RnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBu
ZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSAr
IDIpO1xuXHR9KTtcbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0
aW9uOiBGb3JtZXJseSBGeC5TdHlsZSwgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9w
ZXJ0eSBmb3IgYW4gZWxlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJl
cXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IFtGeC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVt
ZW50LmhpZ2hsaWdodF1cblxuLi4uXG4qL1xuXG5GeC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0
RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlv
bnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1l
bnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24o
cHJvcGVydHksIG5vdyl7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRu
b3cgPSBwcm9wZXJ0eTtcblx0XHRcdHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9w
dGlvbnMucHJvcGVydHk7XG5cdFx0fVxuXHRcdHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJv
cGVydHksIG5vdywgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5j
aGVjayhwcm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFy
cmF5LmZsYXR0ZW4oYXJndW1lbnRzKTtcblx0XHR0aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25z
LnByb3BlcnR5IHx8IGFyZ3Muc2hpZnQoKTtcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJl
KHRoaXMuZWxlbWVudCwgdGhpcy5wcm9wZXJ0eSwgYXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFy
ZW50KHBhcnNlZC5mcm9tLCBwYXJzZWQudG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3Bl
cnRpZXMudHdlZW4gPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdl
dCgndHdlZW4nKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJp
ZXZlKCd0d2VlbicpO1xuXHRcdGlmICghdHdlZW4pe1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdl
ZW4odGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3
ZWVuKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR3ZWVuO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1w
bGVtZW50KHtcblxuXHR0d2VlbjogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0
aGlzLmdldCgndHdlZW4nKS5zdGFydChwcm9wZXJ0eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGZhZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdl
dCgndHdlZW4nKSwgbWV0aG9kLCBhcmdzID0gWydvcGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyks
IHRvZ2dsZTtcblx0XHRpZiAoYXJnc1sxXSA9PSBudWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5c
dFx0c3dpdGNoIChhcmdzWzFdKXtcblx0XHRcdGNhc2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0Jzsg
YXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0Jzsg
YXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBh
cmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFy
Z3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFn
ID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywgdGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09
IDEpO1xuXHRcdFx0XHRtZXRob2QgPSAnc3RhcnQnO1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/
IDAgOiAxO1xuXHRcdFx0XHR0aGlzLnN0b3JlKCdmYWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRc
dHRvZ2dsZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0g
J3N0YXJ0Jztcblx0XHR9XG5cdFx0aWYgKCF0b2dnbGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZs
YWcnKTtcblx0XHRmYWRlW21ldGhvZF0uYXBwbHkoZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0g
YXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG5cdFx0aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0
XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgdG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2li
bGUnKTtcblx0XHR9IGVsc2UgaWYgKHRvICE9IDApe1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxl
bmd0aCl7XG5cdFx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVs
ZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMu
Y2FsbENoYWluKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5z
ZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtc
blx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5n
ZXRTdHlsZSgnb3BhY2l0eScpKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHls
ZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0
XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDog
ZnVuY3Rpb24oc3RhcnQsIGVuZCl7XG5cdFx0aWYgKCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5y
ZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJywgdGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1j
b2xvcicpKTtcblx0XHRcdGVuZCA9IChlbmQgPT0gJ3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBl
bmQ7XG5cdFx0fVxuXHRcdHZhciB0d2VlbiA9IHRoaXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVu
LnN0YXJ0KCdiYWNrZ3JvdW5kLWNvbG9yJywgc3RhcnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWlu
KGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhp
cy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWlu
KCk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0XG5cbmRlc2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVy
cG9zZSBSZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhUVFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtPYmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVu
dHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlLCBCcm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVz
dFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30s
XG5cdHByb2dyZXNzU3VwcG9ydCA9ICgnb25wcm9ncmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVz
dCk7XG5cbnZhciBSZXF1ZXN0ID0gdGhpcy5SZXF1ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBs
ZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9w
dGlvbnM6IHsvKlxuXHRcdG9uUmVxdWVzdDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0
OiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRcdG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50
LCB4aHIpe30sXG5cdFx0b25Db21wbGV0ZTogZnVuY3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBm
dW5jdGlvbigpe30sXG5cdFx0b25TdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3Bv
bnNlWE1MKXt9LFxuXHRcdG9uRmFpbHVyZTogZnVuY3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0
aW9uOiBmdW5jdGlvbihoZWFkZXJOYW1lLCB2YWx1ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0
aW9uKCl7fSxcblx0XHR1c2VyOiAnJyxcblx0XHRwYXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRl
bnRpYWxzOiBmYWxzZSwqL1xuXHRcdHVybDogJycsXG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVy
czoge1xuXHRcdFx0J1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0
J0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0
ZXh0L3htbCwgKi8qJ1xuXHRcdH0sXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxz
ZSxcblx0XHRtZXRob2Q6ICdwb3N0Jyxcblx0XHRsaW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nl
c3M6IG51bGwsXG5cdFx0ZW11bGF0aW9uOiB0cnVlLFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5c
dFx0ZW5jb2Rpbmc6ICd1dGYtOCcsXG5cdFx0ZXZhbFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxS
ZXNwb25zZTogZmFsc2UsXG5cdFx0dGltZW91dDogMCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9
LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3
IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0
aGlzLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVhZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hh
bmdlOiBmdW5jdGlvbigpe1xuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJl
YWR5U3RhdGUgIT0gNCB8fCAhdGhpcy5ydW5uaW5nKSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5n
ID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0dXMgPSAwO1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVu
Y3Rpb24oKXtcblx0XHRcdHZhciBzdGF0dXMgPSB4aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0
dXMgPSAoc3RhdHVzID09IDEyMjMpID8gMjA0IDogc3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7
XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1
cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYg
KHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVs
ZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlz
Lnhoci5yZXNwb25zZVRleHQgfHwgJycsIHhtbDogdGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRc
dGlmICh0aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNhbGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRc
dFx0dGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2UudGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xu
XHRcdGVsc2Vcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgc3RhdHVzID0gdGhpcy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0
dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCk7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiAhIXRoaXMucnVubmluZztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0
czogZnVuY3Rpb24odGV4dCl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwg
KC8oZWNtYXxqYXZhKXNjcmlwdC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScp
KSkgcmV0dXJuIEJyb3dzZXIuZXhlYyh0ZXh0KTtcblx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlw
dHModGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKTtcblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlv
bih0ZXh0LCB4bWwpe1xuXHRcdHRoaXMub25TdWNjZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4
dCksIHhtbCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9
LFxuXG5cdG9uU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxl
dGUnLCBhcmd1bWVudHMpLmZpcmVFdmVudCgnc3VjY2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWlu
KCk7XG5cdH0sXG5cblx0ZmFpbHVyZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgp
O1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdmYWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xu
XHR9LFxuXG5cdG9uRmFpbHVyZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29t
cGxldGUnKS5maXJlRXZlbnQoJ2ZhaWx1cmUnLCB0aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0
YXJ0OiBmdW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtl
dmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHRwcm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xu
XHRcdHRoaXMuZmlyZUV2ZW50KCdwcm9ncmVzcycsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxc
blxuXHR0aW1lb3V0OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0Jywg
dGhpcy54aHIpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlz
Lnhocn0pO1xuXHR9LFxuXG5cdHNldEhlYWRlcjogZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRc
dHRoaXMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQo
ZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1l
KTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRc
dGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9u
cy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVl
O1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1l
bnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9
LFxuXG5cdHNlbmQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRp
b25zKSkgcmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5v
cHRpb25zLmlzU3VjY2VzcyB8fCB0aGlzLmlzU3VjY2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0
cnVlO1xuXG5cdFx0dmFyIHR5cGUgPSB0eXBlT2Yob3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0g
J3N0cmluZycgfHwgdHlwZSA9PSAnZWxlbWVudCcpIG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307
XG5cblx0XHR2YXIgb2xkID0gdGhpcy5vcHRpb25zO1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBw
ZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQudXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBv
cHRpb25zKTtcblx0XHR2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlv
bnMudXJsKSwgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3
aXRjaCAodHlwZU9mKGRhdGEpKXtcblx0XHRcdGNhc2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1l
bnQuaWQoZGF0YSkudG9RdWVyeVN0cmluZygpOyBicmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6
IGNhc2UgJ2hhc2gnOiBkYXRhID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxu
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mb3JtYXQpe1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3Jt
YXQ9JyArIHRoaXMub3B0aW9ucy5mb3JtYXQ7XG5cdFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0
ICsgJyYnICsgZGF0YSA6IGZvcm1hdDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVt
dWxhdGlvbiAmJiAhWydnZXQnLCAncG9zdCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFy
IF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9kO1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9t
ZXRob2QgKyAnJicgKyBkYXRhIDogX21ldGhvZDtcblx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0
XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLnVybEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCdd
LmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5l
bmNvZGluZykgPyAnOyBjaGFyc2V0PScgKyB0aGlzLm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0
XHRcdHRoaXMuaGVhZGVyc1snQ29udGVudC10eXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9y
bS11cmxlbmNvZGVkJyArIGVuY29kaW5nO1xuXHRcdH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBk
b2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTtcblxuXHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwu
bGFzdEluZGV4T2YoJy8nKTtcblx0XHRpZiAodHJpbVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3Np
dGlvbiA9IHVybC5pbmRleE9mKCcjJykpID4gLTEpIHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBv
c2l0aW9uKTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAo
dXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xu
XG5cdFx0aWYgKGRhdGEgJiYgKG1ldGhvZCA9PSAnZ2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScp
KXtcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRh
dGE7XG5cdFx0XHRkYXRhID0gbnVsbDtcblx0XHR9XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7
XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCl7XG5cdFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlz
LmxvYWRzdGFydC5iaW5kKHRoaXMpO1xuXHRcdFx0eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dy
ZXNzLmJpbmQodGhpcyk7XG5cdFx0fVxuXG5cdFx0eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNl
KCksIHVybCwgdGhpcy5vcHRpb25zLmFzeW5jLCB0aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRp
b25zLnBhc3N3b3JkKTtcblx0XHRpZiAoKHRoaXMub3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYm
ICd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5c
blx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhp
cyk7XG5cblx0XHRPYmplY3QuZWFjaCh0aGlzLmhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkp
e1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7
XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbics
IFtrZXksIHZhbHVlXSk7XG5cdFx0XHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24n
LCB4aHI6IHhociwgZXhjZXB0aW9uOiBlfSk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0
XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlz
LnJlc2V0VGhlbmFibGUoe3JlYXNvbjogJ3NlbmQnfSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2
ZW50KCdyZXF1ZXN0Jyk7XG5cdFx0eGhyLnNlbmQoZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlv
bnMuYXN5bmMpIHRoaXMub25TdGF0ZUNoYW5nZSgpO1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9u
cy50aW1lb3V0KSB0aGlzLnRpbWVyID0gdGhpcy50aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50
aW1lb3V0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0
aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVu
bmluZyA9IGZhbHNlO1xuXHRcdHZhciB4aHIgPSB0aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtc
blx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5c
dFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5n
ZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhy
Lm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0
KCk7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFz
b246ICdjYW5jZWwnLCB4aHI6IHhocn0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xu
XG52YXIgbWV0aG9kcyA9IHt9O1xuWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3Bh
dGNoJywgJ2hlYWQnLCAnR0VUJywgJ1BPU1QnLCAnUFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdI
RUFEJ10uZWFjaChmdW5jdGlvbihtZXRob2Qpe1xuXHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlv
bihkYXRhKXtcblx0XHR2YXIgb2JqZWN0ID0ge1xuXHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9
O1xuXHRcdGlmIChkYXRhICE9IG51bGwpIG9iamVjdC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4g
dGhpcy5zZW5kKG9iamVjdCk7XG5cdH07XG59KTtcblxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9k
cyk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zZW5kID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0
aW9ucyl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLmdldCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNl
bmQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0
aWYgKCFzZW5kKXtcblx0XHRcdHNlbmQgPSBuZXcgUmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRo
aXMsIGxpbms6ICdjYW5jZWwnLCBtZXRob2Q6IHRoaXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcs
IHVybDogdGhpcy5nZXQoJ2FjdGlvbicpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3Nl
bmQnLCBzZW5kKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVu
dC5pbXBsZW1lbnQoe1xuXG5cdHNlbmQ6IGZ1bmN0aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9
IHRoaXMuZ2V0KCdzZW5kJyk7XG5cdFx0c2VuZGVyLnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJs
IHx8IHNlbmRlci5vcHRpb25zLnVybH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xu
XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjog
RXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBm
b3IgaW50ZXJhY3Rpbmcgd2l0aCBIVE1MIHJlc3BvbnNlcy5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJl
cXVlc3QuSFRNTFxuXG4uLi5cbiovXG5cblJlcXVlc3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0
RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25zOiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0
XHRhcHBlbmQ6IGZhbHNlLFxuXHRcdGV2YWxTY3JpcHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFs
c2UsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0QWNjZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlv
bi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fVxuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9u
KHRleHQpe1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMu
cmVzcG9uc2U7XG5cblx0XHRyZXNwb25zZS5odG1sID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rp
b24oc2NyaXB0KXtcblx0XHRcdHJlc3BvbnNlLmphdmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7
XG5cblx0XHR2YXIgbWF0Y2ggPSByZXNwb25zZS5odG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxz
XFxTXSo/KTxcXC9ib2R5Pi9pKTtcblx0XHRpZiAobWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRj
aFsxXTtcblx0XHR2YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNw
b25zZS5odG1sKTtcblxuXHRcdHJlc3BvbnNlLnRyZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0
cmVzcG9uc2UuZWxlbWVudHMgPSB0ZW1wLmdldEVsZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcq
Jyk7XG5cblx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5l
bGVtZW50cztcblx0XHRpZiAob3B0aW9ucy51cGRhdGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRv
Y3VtZW50LmlkKG9wdGlvbnMudXBkYXRlKS5lbXB0eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmls
dGVyKSB1cGRhdGUuYWRvcHQocmVzcG9uc2UuZWxlbWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUu
c2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVu
ZCl7XG5cdFx0XHR2YXIgYXBwZW5kID0gZG9jdW1lbnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRc
dFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0
KGFwcGVuZCk7XG5cdFx0XHRlbHNlIGFwcGVuZC5hZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xu
XHRcdH1cblx0XHRpZiAob3B0aW9ucy5ldmFsU2NyaXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNl
LmphdmFzY3JpcHQpO1xuXG5cdFx0dGhpcy5vblN1Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9u
c2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0bWwsIHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRo
aXMucmVzb2x2ZSh7dHJlZTogcmVzcG9uc2UudHJlZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1l
bnRzLCBodG1sOiByZXNwb25zZS5odG1sLCBqYXZhc2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0
fSk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5sb2FkID0ge1xuXG5cdHNldDog
ZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIGxvYWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNl
bCgpO1xuXHRcdGxvYWQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCds
b2FkJyk7XG5cdFx0aWYgKCFsb2FkKXtcblx0XHRcdGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtk
YXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgdXBkYXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7
XG5cdFx0XHR0aGlzLnN0b3JlKCdsb2FkJywgbG9hZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2Fk
O1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuZ2V0KCdsb2FkJykuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6
IFR5cGUuaXNPYmplY3QsIHVybDogVHlwZS5pc1N0cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09O
IGVuY29kZXIgYW5kIGRlY29kZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5T
ZWVBbHNvOiA8aHR0cDovL3d3dy5qc29uLm9yZy8+XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmlu
ZywgTnVtYmVyLCBGdW5jdGlvbl1cblxucHJvdmlkZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAo
dHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRoaXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0
aW9uKCl7XG5cbnZhciBzcGVjaWFsID0geydcXGInOiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0Jywg
J1xcbic6ICdcXFxcbicsICdcXGYnOiAnXFxcXGYnLCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdc
XFxcXCInLCAnXFxcXCc6ICdcXFxcXFxcXCd9O1xuXG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hy
KXtcblx0cmV0dXJuIHNwZWNpYWxbY2hyXSB8fCAnXFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFy
Q29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9
IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wi
XFxcXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFj
ZSgvXCJbXlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxmYWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCop
Pyg/OltlRV1bK1xcLV0/XFxkKyk/L2csICddJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6
fCwpKD86XFxzKlxcWykrL2csICcnKTtcblxuXHRyZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50
ZXN0KHN0cmluZyk7XG59O1xuXG5KU09OLmVuY29kZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rp
b24ob2JqKXtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2Jq
KXtcblx0aWYgKG9iaiAmJiBvYmoudG9KU09OKSBvYmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dp
dGNoICh0eXBlT2Yob2JqKSl7XG5cdFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCIn
ICsgb2JqLnJlcGxhY2UoL1tcXHgwMC1cXHgxZlxcXFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5c
dFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0cmV0dXJuICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUp
LmNsZWFuKCkgKyAnXSc7XG5cdFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2
YXIgc3RyaW5nID0gW107XG5cdFx0XHRPYmplY3QuZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBr
ZXkpe1xuXHRcdFx0XHR2YXIganNvbiA9IEpTT04uZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYg
KGpzb24pIHN0cmluZy5wdXNoKEpTT04uZW5jb2RlKGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRc
dH0pO1xuXHRcdFx0cmV0dXJuICd7JyArIHN0cmluZyArICd9Jztcblx0XHRjYXNlICdudW1iZXIn
OiBjYXNlICdib29sZWFuJzogcmV0dXJuICcnICsgb2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1
cm4gJ251bGwnO1xuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRy
dWU7XG5cblxuSlNPTi5kZWNvZGUgPSBmdW5jdGlvbihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICgh
c3RyaW5nIHx8IHR5cGVPZihzdHJpbmcpICE9ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRp
ZiAoc2VjdXJlID09IG51bGwpIHNlY3VyZSA9IEpTT04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtc
blx0XHRpZiAoSlNPTi5wYXJzZSkgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAo
IUpTT04udmFsaWRhdGUoc3RyaW5nKSkgdGhyb3cgbmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBk
ZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0eSBpcyBlbmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90
IHNlY3VyZS4nKTtcblx0fVxuXG5cdHJldHVybiBldmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59
O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlv
bjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9k
cyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIEpTT04gZGF0YS5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbUmVxdWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJl
cXVlc3QuSlNPTlxuXG4uLi5cbiovXG5cblJlcXVlc3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0
RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25zOiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlv
bih0ZXh0LCBlcnJvcil7fSwqL1xuXHRcdHNlY3VyZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxp
emU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9i
amVjdC5hcHBlbmQodGhpcy5oZWFkZXJzLCB7XG5cdFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9u
L2pzb24nLFxuXHRcdFx0J1gtUmVxdWVzdCc6ICdKU09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1
Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRq
c29uID0gdGhpcy5yZXNwb25zZS5qc29uID0gSlNPTi5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25z
LnNlY3VyZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3Ipe1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vy
cm9yJywgW3RleHQsIGVycm9yXSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29u
ID09IG51bGwpe1xuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRo
aXMub25TdWNjZXNzKGpzb24sIHRleHQpO1xuXHRcdFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29u
LCB0ZXh0OiB0ZXh0fSk7XG5cdFx0fVxuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENv
b2tpZVxuXG5kZXNjcmlwdGlvbjogQ2xhc3MgZm9yIGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVs
ZXRpbmcgYnJvd3NlciBDb29raWVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
Y3JlZGl0czpcbiAgLSBCYXNlZCBvbiB0aGUgZnVuY3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAo
aHR0cDovL3F1aXJrc21vZGUub3JnKS5cblxucmVxdWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxu
XG5wcm92aWRlczogQ29va2llXG5cbi4uLlxuKi9cblxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7
XG5cblx0SW1wbGVtZW50czogT3B0aW9ucyxcblxuXHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8n
LFxuXHRcdGRvbWFpbjogZmFsc2UsXG5cdFx0ZHVyYXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTog
ZmFsc2UsXG5cdFx0ZG9jdW1lbnQ6IGRvY3VtZW50LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRo
dHRwT25seTogZmFsc2Vcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlv
bnMpe1xuXHRcdHRoaXMua2V5ID0ga2V5O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtc
blx0fSxcblxuXHR3cml0ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMu
ZW5jb2RlKSB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMu
b3B0aW9ucy5kb21haW4pIHZhbHVlICs9ICc7IGRvbWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFp
bjtcblx0XHRpZiAodGhpcy5vcHRpb25zLnBhdGgpIHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMu
b3B0aW9ucy5wYXRoO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFy
IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0ZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsg
dGhpcy5vcHRpb25zLmR1cmF0aW9uICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1
ZSArPSAnOyBleHBpcmVzPScgKyBkYXRlLnRvR01UU3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0
aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAnOyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuaHR0cE9ubHkpIHZhbHVlICs9ICc7IEh0dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMu
ZG9jdW1lbnQuY29va2llID0gdGhpcy5rZXkgKyAnPScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRyZWFkOiBmdW5jdGlvbigpe1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0
aW9ucy5kb2N1bWVudC5jb29raWUubWF0Y2goJyg/Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNj
YXBlUmVnRXhwKCkgKyAnPShbXjtdKiknKTtcblx0XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVS
SUNvbXBvbmVudCh2YWx1ZVsxXSkgOiBudWxsO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9u
KCl7XG5cdFx0bmV3IENvb2tpZSh0aGlzLmtleSwgT2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlv
bnMsIHtkdXJhdGlvbjogLTF9KSkud3JpdGUoJycpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5c
bn0pO1xuXG5Db29raWUud3JpdGUgPSBmdW5jdGlvbihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0
cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29r
aWUucmVhZCA9IGZ1bmN0aW9uKGtleSl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSkucmVhZCgp
O1xufTtcblxuQ29va2llLmRpc3Bvc2UgPSBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1
cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLmRpc3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxu
bmFtZTogRE9NUmVhZHlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQg
ZG9tcmVhZHkuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jy
b3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERv
bVJlYWR5XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50KXtcblxudmFy
IHJlYWR5LFxuXHRsb2FkZWQsXG5cdGNoZWNrcyA9IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1l
cixcblx0dGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFy
IGRvbXJlYWR5ID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFy
ZWFkeSl7XG5cdFx0QnJvd3Nlci5sb2FkZWQgPSByZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQu
cmVtb3ZlTGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVu
ZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdk
b21yZWFkeScpO1xuXHRcdHdpbmRvdy5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8g
Y2xlYW51cCBzY29wZSB2YXJzXG5cdGRvY3VtZW50ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBu
dWxsO1xufTtcblxudmFyIGNoZWNrID0gZnVuY3Rpb24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNr
cy5sZW5ndGg7IGktLTspIGlmIChjaGVja3NbaV0oKSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0
aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBz
ZXRUaW1lb3V0KHBvbGwsIDEwKTtcbn07XG5cbmRvY3VtZW50LmFkZExpc3RlbmVyKCdET01Db250
ZW50TG9hZGVkJywgZG9tcmVhZHkpO1xuXG4vKjxsdElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5p
cXVlIGJ5IERpZWdvIFBlcmluaSBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50
TG9hZGVkL1xuLy8gdGVzdEVsZW1lbnQuZG9TY3JvbGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlz
IG5vdCByZWFkeSwgb25seSBpbiB0aGUgdG9wIHdpbmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBm
dW5jdGlvbigpe1xuXHR0cnkge1xuXHRcdHRlc3RFbGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0
dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRv
U2Nyb2xsIHdvcmtzIGFscmVhZHksIGl0IGNhbid0IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJl
YWR5XG4vLyAgIGUuZy4gaW4gYW4gaWZyYW1lXG5pZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYg
IWRvU2Nyb2xsV29ya3MoKSl7XG5cdGNoZWNrcy5wdXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91
bGRQb2xsID0gdHJ1ZTtcbn1cbi8qPC9sdElFOD4qL1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0
ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24oKXtcblx0dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlT
dGF0ZTtcblx0cmV0dXJuIChzdGF0ZSA9PSAnbG9hZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUn
KTtcbn0pO1xuXG5pZiAoJ29ucmVhZHlzdGF0ZWNoYW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50
LmFkZExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xs
ID0gdHJ1ZTtcblxuaWYgKHNob3VsZFBvbGwpIHBvbGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9t
cmVhZHkgPSB7XG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxs
KHRoaXMpO1xuXHR9XG59O1xuXG4vLyBNYWtlIHN1cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZv
cmUgbG9hZFxuRWxlbWVudC5FdmVudHMubG9hZCA9IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFk
ZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChsb2FkZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNh
bGwodGhpcyk7XG5cdH0sXG5cdGNvbmRpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9
PSB3aW5kb3cpe1xuXHRcdFx0ZG9tcmVhZHkoKTtcblx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50
cy5sb2FkO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBi
YXNlZCBvbiB0aGUgY3VzdG9tIGxvYWQgZXZlbnRcbndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1
bmN0aW9uKCl7XG5cdGxvYWRlZCA9IHRydWU7XG59KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7
XG4iCittb2R1bGUuZXhwb3J0cyA9ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3
b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMp
IDIwMDYtMjAxNyBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBc
bi8qIVxuV2ViIEJ1aWxkOiBodHRwczovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5
YWU3MTY3YzU4MDdiMTczZDVkZWZmNjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxu
ZGVzY3JpcHRpb246IFRoZSBoZWFydCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbmNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8g
UHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUg
TW9vVG9vbHMgcHJvZHVjdGlvbiB0ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMv
KVxuXG5pbnNwaXJhdGlvbjpcbiAgLSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBb
QmFzZS5qc10oaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBD
b3B5cmlnaHQgKGMpIDIwMDYgRGVhbiBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBo
cClcbiAgLSBTb21lIGZ1bmN0aW9uYWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0
cDovL3Byb3RvdHlwZWpzLm9yZykgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5z
b24sIFtNSVQgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNl
bnNlLnBocClcblxucHJvdmlkZXM6IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0
YW5jZU9mLCBOYXRpdmVdXG5cbi4uLlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQg
ZnJhbWV3b3JrLiBsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmln
aHQgKGMpIDIwMDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2th
bWljYW5lLykuKi9cbihmdW5jdGlvbigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9u
OiAnMS42LjAnLFxuXHRidWlsZDogJzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVl
OTVlMmInXG59O1xuXG4vLyB0eXBlT2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMu
dHlwZU9mID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVs
bCc7XG5cdGlmIChpdGVtLiRmYW1pbHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xu
XG5cdGlmIChpdGVtLm5vZGVOYW1lKXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1
cm4gJ2VsZW1lbnQnO1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8p
LnRlc3QoaXRlbS5ub2RlVmFsdWUpID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBl
bHNlIGlmICh0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVl
JyBpbiBpdGVtKSByZXR1cm4gJ2FyZ3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSBy
ZXR1cm4gJ2NvbGxlY3Rpb24nO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxu
dmFyIGluc3RhbmNlT2YgPSB0aGlzLmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qp
e1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9
IGl0ZW0uJGNvbnN0cnVjdG9yIHx8IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1
Y3Rvcil7XG5cdFx0aWYgKGNvbnN0cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRc
dGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5c
dGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9c
blx0cmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVy
dHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFy
IGVudW1lcmFibGVzID0gdHJ1ZTtcbmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVy
YWJsZXMgPSBudWxsO1xuaWYgKGVudW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJv
cGVydHknLCAndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxl
JywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlv
biBmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChl
bnVtZXJhYmxlcykgZm9yICh2YXIgaSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0
dmFyIGsgPSBlbnVtZXJhYmxlc1tpXTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwg
c28gb3ZlcmxvYWRTZXR0ZXIgY2FuIGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1
bmN0aW9uLCB3aXRob3V0IHN3YXBwaW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVy
dHkuY2FsbChvYmplY3QsIGspKSBmbi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1c
bi8qPC9sdElFOD4qL1xuXG4vLyBGdW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24g
PSB0aGlzLkZ1bmN0aW9uO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBm
dW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlv
bihhLCBiKXtcblx0XHRpZiAoYSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1
cmFsIHx8IHR5cGVvZiBhICE9ICdzdHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2Vs
Zi5jYWxsKHRoaXMsIGssIGFba10pO1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hP
YmplY3RFbnVtYmVyYWJsZUtleShhLCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVy
ID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVu
Y3Rpb24oYSl7XG5cdFx0dmFyIGFyZ3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0
cmluZycpIGFyZ3MgPSBhO1xuXHRcdGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdz
ID0gYXJndW1lbnRzO1xuXHRcdGVsc2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRp
ZiAoYXJncyl7XG5cdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwg
YXJncy5sZW5ndGg7IGkrKykgcmVzdWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3Nb
aV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5c
dFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUu
ZXh0ZW5kID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5v
dmVybG9hZFNldHRlcigpO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rp
b24oa2V5LCB2YWx1ZSl7XG5cdHRoaXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3Zlcmxv
YWRTZXR0ZXIoKTtcblxuLy8gRnJvbVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xp
Y2U7XG5cbkFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVs
bCkgcmV0dXJuIFtdO1xuXHRyZXR1cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVv
ZiBpdGVtICE9ICdzdHJpbmcnKSA/ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDog
c2xpY2UuY2FsbChpdGVtKSA6IFtpdGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5j
dGlvbihpdGVtKXtcblx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVt
IDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNv
bnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7
XG5cdHJldHVybiBpc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmlu
Zy5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5c
blxuRnVuY3Rpb24uZnJvbSA9IEZ1bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJl
ci5jb252ZXJ0O1xuU3RyaW5nLmZyb20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJv
dGVjdFxuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0
dGhpcy4kaGlkZGVuID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0
OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbi8vIFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5j
dGlvbihuYW1lLCBvYmplY3Qpe1xuXHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50
b0xvd2VyQ2FzZSgpO1xuXHRcdHZhciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRc
dHJldHVybiAodHlwZU9mKGl0ZW0pID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMn
ICsgbmFtZV0gPSB0eXBlQ2hlY2s7XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9i
amVjdC5wcm90b3R5cGUuJGZhbWlseSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93
ZXI7XG5cdFx0XHR9KS5oaWRlKCk7XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0
ID09IG51bGwpIHJldHVybiBudWxsO1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVj
dC4kY29uc3RydWN0b3IgPSBUeXBlO1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9
IG9iamVjdDtcblxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZztcblxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVt
KXtcblx0cmV0dXJuIChpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1i
ZXInICYmIHRvU3RyaW5nLmNhbGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtc
blxudmFyIGhvb2tzID0ge307XG5cbnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0
dmFyIHR5cGUgPSB0eXBlT2Yob2JqZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBl
XSB8fCAoaG9va3NbdHlwZV0gPSBbXSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24o
bmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xu
XG5cdHZhciBob29rcyA9IGhvb2tzT2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBo
b29rcy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlw
ZU9mKGhvb2spID09ICd0eXBlJykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtc
blx0XHRlbHNlIGhvb2suY2FsbCh0aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHBy
ZXZpb3VzID0gdGhpcy5wcm90b3R5cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8
ICFwcmV2aW91cy4kcHJvdGVjdGVkKSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxu
XHRpZiAodGhpc1tuYW1lXSA9PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicp
IGV4dGVuZC5jYWxsKHRoaXMsIG5hbWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRo
b2QuYXBwbHkoaXRlbSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52
YXIgZXh0ZW5kID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRo
b2QuJGhpZGRlbikgcmV0dXJuO1xuXHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAo
cHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1l
dGhvZDtcbn07XG5cblR5cGUuaW1wbGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5v
dmVybG9hZFNldHRlcigpLFxuXG5cdGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5c
blx0YWxpYXM6IGZ1bmN0aW9uKG5hbWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0
aGlzLCBuYW1lLCB0aGlzLnByb3RvdHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVy
KCksXG5cblx0bWlycm9yOiBmdW5jdGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2go
aG9vayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywg
VHlwZSk7XG5cbi8vIERlZmF1bHQgVHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwg
b2JqZWN0LCBtZXRob2RzKXtcblx0dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0
XHRwcm90b3R5cGUgPSBvYmplY3QucHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9
IG5ldyBUeXBlKG5hbWUsIG9iamVjdCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2Rz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRn
ZW5lcmljID0gb2JqZWN0W2tleV0sXG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5c
dFx0aWYgKGdlbmVyaWMpIGdlbmVyaWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJv
dG8pIG9iamVjdC5pbXBsZW1lbnQoa2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYg
KGlzVHlwZSl7XG5cdFx0dmFyIG1ldGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5
SXNFbnVtZXJhYmxlKG1ldGhvZHNbMF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVu
Y3Rpb24oZm4pe1xuXHRcdFx0aWYgKCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAs
IGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90
eXBlLCBwcm90b3R5cGVbbWV0aG9kc1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0
Zm9yICh2YXIga2V5IGluIHByb3RvdHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtr
ZXldLCBrZXkpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgn
U3RyaW5nJywgU3RyaW5nLCBbXG5cdCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAn
Y29udGFpbnMnLCAnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdy
ZXBsYWNlJywgJ3NlYXJjaCcsXG5cdCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3Ry
aW5nJywgJ3RyaW0nLCAndG9Mb3dlckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBB
cnJheSwgW1xuXHQncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3Nw
bGljZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2Yn
LCAnbGFzdEluZGV4T2YnLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3Nv
bWUnLCAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51
bWJlciwgW1xuXHQndG9FeHBvbmVudGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywg
J3RvUHJlY2lzaW9uJ1xuXSkoJ0Z1bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2Nh
bGwnLCAnYmluZCdcbl0pKCdSZWdFeHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0p
KCdPYmplY3QnLCBPYmplY3QsIFtcblx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZp
bmVQcm9wZXJ0aWVzJywgJ2tleXMnLFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yJywgJ2dldE93blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lv
bnMnLCAnaXNFeHRlbnNpYmxlJywgJ3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJv
emVuJ1xuXSkoJ0RhdGUnLCBEYXRlLCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVu
ZC5vdmVybG9hZFNldHRlcigpO1xuXG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0
cmV0dXJuICsobmV3IERhdGUpO1xufSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7
XG5cbi8vIGZpeGVzIE5hTiByZXR1cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUu
JGZhbWlseSA9IGZ1bmN0aW9uKCl7XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXIn
IDogJ251bGwnO1xufS5oaWRlKCk7XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVu
ZCgncmFuZG9tJywgZnVuY3Rpb24obWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRo
LnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBl
YWNoLCBrZXlzXG5cbkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNo
OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNb
aV0sIGksIHRoaXMpO1xuXHRcdH1cblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5j
dGlvbihmbiwgYmluZCl7XG5cdFx0QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9i
amVjdCl7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1
c2goayk7XG5cdFx0fVxuXHRcdC8qPGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJh
YmxlS2V5KG9iamVjdCwgZnVuY3Rpb24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7
XG5cdFx0Lyo8L2x0SUU4PiovXG5cdFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDog
ZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JF
YWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXks
IG9iamVjdCk7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZv
ckVhY2g7XG5cblxuLy8gQXJyYXkgJiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5k
IGFwcGVuZGluZ1xuXG52YXIgY2xvbmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5
cGVPZihpdGVtKSl7XG5cdFx0Y2FzZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRc
dGNhc2UgJ29iamVjdCc6IHJldHVybiBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDog
cmV0dXJuIGl0ZW07XG5cdH1cbn07XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlv
bigpe1xuXHR2YXIgaSA9IHRoaXMubGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hp
bGUgKGktLSkgY2xvbmVbaV0gPSBjbG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59
KTtcblxudmFyIG1lcmdlT25lID0gZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRz
d2l0Y2ggKHR5cGVPZihjdXJyZW50KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0
eXBlT2Yoc291cmNlW2tleV0pID09ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0s
IGN1cnJlbnQpO1xuXHRcdFx0ZWxzZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50
KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50
LmNsb25lKCk7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0
fVxuXHRyZXR1cm4gc291cmNlO1xufTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1
bmN0aW9uKHNvdXJjZSwgaywgdil7XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0
dXJuIG1lcmdlT25lKHNvdXJjZSwgaywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1
bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNb
aV07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwg
b2JqZWN0W2tleV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25l
OiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtl
eSBpbiBvYmplY3QpIGNsb25lW2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1
cm4gY2xvbmU7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9y
ICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZh
ciBleHRlbmRlZCA9IGFyZ3VtZW50c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBl
eHRlbmRlZCkgb3JpZ2luYWxba2V5XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVy
biBvcmlnaW5hbDtcblx0fVxuXG59KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmpl
Y3QnLCAnV2hpdGVTcGFjZScsICdUZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cydd
LmVhY2goZnVuY3Rpb24obmFtZSl7XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1
ZSBJRFxuXG52YXIgVUlEID0gRGF0ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQn
LCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5c
bn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5z
IEFycmF5IFByb3RvdHlwZXMgbGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczog
QXJyYXlcblxuLi4uXG4qL1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0
ZXZlcnk6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
bGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4u
Y2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2
YXIgcmVzdWx0cyA9IFtdO1xuXHRcdGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVu
Z3RoID4+PiAwOyBpIDwgbDsgaSsrKSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhp
c1tpXTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5w
dXNoKHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhP
ZjogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+
PiAwO1xuXHRcdGZvciAodmFyIGkgPSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsg
ZnJvbSkgOiBmcm9tIHx8IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9
PT0gaXRlbSkgcmV0dXJuIGk7XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6
IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAs
IHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwg
dGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5c
dHNvbWU6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMu
bGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5j
YWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0
dXJuIGZhbHNlO1xuXHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVt
ICE9IG51bGw7XG5cdFx0fSk7XG5cdH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1l
KXtcblx0XHR2YXIgYXJncyA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJu
IHRoaXMubWFwKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0u
YXBwbHkoaXRlbSwgYXJncyk7XG5cdFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlv
bihrZXlzKXtcblx0XHR2YXIgb2JqID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3Ro
LCBrZXlzLmxlbmd0aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2Jq
W2tleXNbaV1dID0gdGhpc1tpXTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAw
LCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9i
amVjdCl7XG5cdFx0XHRcdGlmIChvYmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVz
dWx0W2tleV0gPSB0aGlzW2ldO1xuXHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRc
dFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0
O1xuXHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4g
dGhpcy5pbmRleE9mKGl0ZW0sIGZyb20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdHRoaXMucHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMu
bGVuZ3RoKSA/IHRoaXNbdGhpcy5sZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFu
ZG9tOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIu
cmFuZG9tKDAsIHRoaXMubGVuZ3RoIC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBm
dW5jdGlvbihpdGVtKXtcblx0XHRpZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChp
dGVtKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJh
eSl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRo
aXMuaW5jbHVkZShhcnJheVtpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6
IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5c
dFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVu
Z3RoID0gMDtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigp
e1xuXHRcdHZhciBhcnJheSA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5n
dGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0
XHRpZiAodHlwZSA9PSAnbnVsbCcpIGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25j
YXQoKHR5cGUgPT0gJ2FycmF5JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdh
cmd1bWVudHMnIHx8IGluc3RhbmNlT2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4o
dGhpc1tpXSkgOiB0aGlzW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5c
dHBpY2s6IGZ1bmN0aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsg
aSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtc
blx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFy
cmF5KXtcblx0XHRpZiAodGhpcy5sZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJn
YiA9IHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0g
MSkgdmFsdWUgKz0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0
XHR9KTtcblx0XHRyZXR1cm4gKGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0
fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8
IDMpIHJldHVybiBudWxsO1xuXHRcdGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0g
MCAmJiAhYXJyYXkpIHJldHVybiAndHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0g
LSAwKS50b1N0cmluZygxNik7XG5cdFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcw
JyArIGJpdCA6IGJpdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsg
aGV4LmpvaW4oJycpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlv
blxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0
ZSwgYmluZCwgcGFzcywgYW5kIGRlbGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVu
Y3Rpb24uZXh0ZW5kKHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkg
PSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRc
dFx0XHRyZXR1cm4gYXJndW1lbnRzW2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxu
XHRcdHJldHVybiBudWxsO1xuXHR9XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5c
dGF0dGVtcHQ6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4g
dGhpcy5hcHBseShiaW5kLCBBcnJheS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDog
ZnVuY3Rpb24odGhhdCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3Vt
ZW50cy5sZW5ndGggPiAxID8gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0
XHRGID0gZnVuY3Rpb24oKXt9O1xuXG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRc
dHZhciBjb250ZXh0ID0gdGhhdCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlm
ICh0aGlzIGluc3RhbmNlb2YgYm91bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJv
dG90eXBlO1xuXHRcdFx0XHRjb250ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVz
dWx0ID0gKCFhcmdzICYmICFsZW5ndGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5c
dFx0XHRcdDogc2VsZi5hcHBseShjb250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0
KEFycmF5LnNsaWNlKGFyZ3VtZW50cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0
dXJuIGNvbnRleHQgPT0gdGhhdCA/IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1
cm4gYm91bmQ7XG5cdH0sXG5cdC8qPC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihh
cmdzLCBiaW5kKXtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkg
YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0
XHRyZXR1cm4gc2VsZi5hcHBseShiaW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0
fSxcblxuXHRkZWxheTogZnVuY3Rpb24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBz
ZXRUaW1lb3V0KHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRl
bGF5KTtcblx0fSxcblxuXHRwZXJpb2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBh
cmdzKXtcblx0XHRyZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBb
XSA6IGFyZ3MpLCBiaW5kKSwgcGVyaW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IE51bWJlclxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlw
ZXMgbGlrZSBsaW1pdCwgcm91bmQsIHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4u
XG4qL1xuXG5OdW1iZXIuaW1wbGVtZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgp
e1xuXHRcdHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxu
XG5cdHJvdW5kOiBmdW5jdGlvbihwcmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93
KDEwLCBwcmVjaXNpb24gfHwgMCkudG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6
IDApO1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9u
O1xuXHR9LFxuXG5cdHRpbWVzOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzOyBpKyspIGZuLmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9G
bG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxu
XHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2Ug
fHwgMTApO1xuXHR9XG5cbn0pO1xuXG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxu
KGZ1bmN0aW9uKG1hdGgpe1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rp
b24obmFtZSl7XG5cdGlmICghTnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gTWF0aFtuYW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5
LmNvbnZlcnQoYXJndW1lbnRzKSkpO1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0
aG9kcyk7XG5cbn0pKFsnYWJzJywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2Nl
aWwnLCAnY29zJywgJ2V4cCcsICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAn
c2luJywgJ3NxcnQnLCAndGFuJ10pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgU3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0
YWxpemUsIHRlc3QsIGFuZCB0b0ludC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBbVHlwZSwgQXJyYXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xu
XG5TdHJpbmcuaW1wbGVtZW50KHtcblxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24o
c3RyaW5nLCBpbmRleCl7XG5cdFx0cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShp
bmRleCkgOiBTdHJpbmcodGhpcykpLmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwv
IUVTNj5cblxuXHR0ZXN0OiBmdW5jdGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0
eXBlT2YocmVnZXgpID09ICdyZWdleHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4
LCBwYXJhbXMpKS50ZXN0KHRoaXMpO1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5c
blx0Y2xlYW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9c
XHMrL2csICcgJykudHJpbSgpO1xuXHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xu
XHRcdFx0cmV0dXJuIG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9
LFxuXG5cdGh5cGhlbmF0ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJl
cGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0
Y2guY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxp
emU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16
XS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtc
blx0XHR9KTtcblx0fSxcblxuXHRlc2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xc
XFwkMScpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFy
c2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdHZhciBoZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwy
fSkoXFx3ezEsMn0pKFxcd3sxLDJ9KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2Uo
MSkuaGV4VG9SZ2IoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24o
YXJyYXkpe1xuXHRcdHZhciByZ2IgPSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xu
XHRcdHJldHVybiAocmdiKSA/IHJnYi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5c
dHN1YnN0aXR1dGU6IGZ1bmN0aW9uKG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5n
KHRoaXMpLnJlcGxhY2UocmVnZXhwIHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rp
b24obWF0Y2gsIG5hbWUpe1xuXHRcdFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJl
dHVybiBtYXRjaC5zbGljZSgxKTtcblx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwp
ID8gb2JqZWN0W25hbWVdIDogJyc7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IEJyb3dzZXJcblxuZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29u
dGFpbnMgQnJvd3NlciBpbml0aWFsaXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRo
ZSBCcm93c2VyIEhhc2guXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJl
czogW0FycmF5LCBGdW5jdGlvbiwgTnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3Nl
ciwgV2luZG93LCBEb2N1bWVudF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRv
Y3VtZW50ID0gdGhpcy5kb2N1bWVudDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0
aGlzO1xuXG52YXIgcGFyc2UgPSBmdW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRv
TG93ZXJDYXNlKCk7XG5cdHBsYXRmb3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNh
c2UoKSA6ICcnKTtcblxuXHQvLyBjaHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNv
IG5lZWQgdG8gY2hlY2sgZm9yIGVkZ2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBp
dCdzIGNocm9tZS5cblx0dmFyIFVBID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxk
XFwuXSspLyk7XG5cdGlmICghVUEpe1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJl
Zm94fGNocm9tZXx0cmlkZW50fGNyaW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/
Lio/KHNhZmFyaXwoPzpydltcXHNcXC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSsp
fCQpLykgfHwgW251bGwsICd1bmtub3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3Ry
aWRlbnQnKXtcblx0XHRVQVsxXSA9ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRd
O1xuXHR9IGVsc2UgaWYgKFVBWzFdID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7
XG5cdH1cblxuXHRwbGF0Zm9ybSA9IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9z
JyA6ICh1YS5tYXRjaCgvKD86d2Vib3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxs
aW51eC8pIHx8IFsnb3RoZXInXSlbMF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZv
cm0gPSAnd2luZG93cyc7XG5cblx0cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3Rv
dHlwZS5leHRlbmQsXG5cdFx0bmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVB
WzFdLFxuXHRcdHZlcnNpb246IHBhcnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0p
ID8gVUFbNF0gOiBVQVsyXSksXG5cdFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52
YXIgQnJvd3NlciA9IHRoaXMuQnJvd3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5h
dmlnYXRvci5wbGF0Zm9ybSk7XG5cbmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVu
dC5kb2N1bWVudE1vZGUpe1xuXHRCcm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1v
ZGU7XG59XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEo
ZG9jdW1lbnQuZXZhbHVhdGUpLFxuXHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1
ZXJ5OiAhIShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNP
Tilcblx0fSxcblx0cGFyc2VVQTogcGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93
c2VyLlJlcXVlc3QgPSAoZnVuY3Rpb24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIg
PSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhU
VFAnKTtcblx0fTtcblxuXHR2YXIgTVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcg
QWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVu
Y3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1M
SFRUUDtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwy
O1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9
KTtcblxufSkoKTtcblxuQnJvd3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3Qp
O1xuXG5cblxuLy8gU3RyaW5nIHNjcmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4
dCl7XG5cdGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7
XG5cdFx0d2luZG93LmV4ZWNTY3JpcHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlw
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRy
aWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0
O1xuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5o
ZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJp
bmcuaW1wbGVtZW50KCdzdHJpcFNjcmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlw
dHMgPSAnJztcblx0dmFyIHRleHQgPSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xc
U10qPyk8XFwvc2NyaXB0Pi9naSwgZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9
IGNvZGUgKyAnXFxuJztcblx0XHRyZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1
ZSkgQnJvd3Nlci5leGVjKHNjcmlwdHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1
bmN0aW9uJykgZXhlYyhzY3JpcHRzLCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8g
V2luZG93LCBEb2N1bWVudFxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRv
Y3VtZW50LFxuXHRXaW5kb3c6IHRoaXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQs
XG5cdEV2ZW50OiB0aGlzLkV2ZW50XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1
Y3RvciA9IG5ldyBUeXBlKCdXaW5kb3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkg
PSBGdW5jdGlvbi5jb252ZXJ0KCd3aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVu
Y3Rpb24obmFtZSwgbWV0aG9kKXtcblx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRo
aXMuRG9jdW1lbnQgPSBkb2N1bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQn
LCBmdW5jdGlvbigpe30pO1xuXG5kb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgn
ZG9jdW1lbnQnKS5oaWRlKCk7XG5cbkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRo
b2Qpe1xuXHRkb2N1bWVudFtuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0g
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5o
ZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRv
Y3VtZW50LmV4ZWNDb21tYW5kKSB0cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dy
b3VuZEltYWdlQ2FjaGUnLCBmYWxzZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5
PiovXG5pZiAodGhpcy5hdHRhY2hFdmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0
dmFyIHVubG9hZEV2ZW50ID0gZnVuY3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVu
bG9hZCcsIHVubG9hZEV2ZW50KTtcblx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9
IGRvY3VtZW50LndpbmRvdyA9IG51bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1
bWVudCA9IG51bGw7XG5cdH07XG5cdHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2Fk
RXZlbnQpO1xufVxuXG4vLyBJRSBmYWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0
aW9ucyAocmVmZXJzIHRvIDxzZWxlY3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7
XG50cnkge1xuXHRhcnJheUZyb20oZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2gg
KGUpe1xuXHRBcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBp
dGVtICE9ICdzdHJpbmcnICYmIFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVt
KSAhPSAnYXJyYXknKXtcblx0XHRcdHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFy
cmF5KGkpO1xuXHRcdFx0d2hpbGUgKGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0
dXJuIGFycmF5O1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5c
dHZhciBwcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUu
c2xpY2U7XG5cdFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3Nw
bGljZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlv
bihuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25h
bWVdID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNv
bnZlcnQoaXRlbSksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59
XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3Ncblxu
ZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0
aW5nLCBleHRlbmRpbmcsIGFuZCBpbXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGlj
ZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVu
Y3Rpb24sIE51bWJlcl1cblxucHJvdmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9u
KCl7XG5cbnZhciBDbGFzcyA9IHRoaXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlv
bihwYXJhbXMpe1xuXHRpZiAoaW5zdGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0g
e2luaXRpYWxpemU6IHBhcmFtc307XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0
XHRyZXNldCh0aGlzKTtcblx0XHRpZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhp
cztcblx0XHR0aGlzLiRjYWxsZXIgPSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5c
dFx0dmFyIHZhbHVlID0gKHRoaXMuaW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHko
dGhpcywgYXJndW1lbnRzKSA6IHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIg
PSBudWxsO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBh
cmFtcyk7XG5cblx0bmV3Q2xhc3MuJGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnBy
b3RvdHlwZS4kY29uc3RydWN0b3IgPSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBh
cmVudCA9IHBhcmVudDtcblxuXHRyZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9
IGZ1bmN0aW9uKCl7XG5cdGlmICghdGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBt
ZXRob2QgXCJwYXJlbnRcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMu
JGNhbGxlci4kbmFtZSxcblx0XHRwYXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxc
blx0XHRwcmV2aW91cyA9IChwYXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7
XG5cdGlmICghcHJldmlvdXMpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1l
ICsgJ1wiIGhhcyBubyBwYXJlbnQuJyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBh
cmd1bWVudHMpO1xufTtcblxudmFyIHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2
YXIga2V5IGluIG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dp
dGNoICh0eXBlT2YodmFsdWUpKXtcblx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBG
ID0gZnVuY3Rpb24oKXt9O1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRv
YmplY3Rba2V5XSA9IHJlc2V0KG5ldyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdh
cnJheSc6IG9iamVjdFtrZXldID0gdmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5c
dHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0
aG9kKXtcblx0aWYgKG1ldGhvZC4kb3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0
dmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0
aGlzLiRjYWxsZXIgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtl
eSArICdcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxl
ciwgY3VycmVudCA9IHRoaXMuJGNhbGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRo
aXMuJGNhbGxlciA9IHdyYXBwZXI7XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlz
LCBhcmd1bWVudHMpO1xuXHRcdHRoaXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0g
Y2FsbGVyO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRv
cmlnaW46IG1ldGhvZCwgJG5hbWU6IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZh
ciBpbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3Mu
TXV0YXRvcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9y
c1trZXldLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4g
dGhpcztcblx0fVxuXG5cdGlmICh0eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlm
ICh2YWx1ZS4kaGlkZGVuKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0g
KHJldGFpbikgPyB2YWx1ZSA6IHdyYXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5c
dFx0T2JqZWN0Lm1lcmdlKHRoaXMucHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJl
dHVybiB0aGlzO1xufTtcblxudmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRr
bGFzcy4kcHJvdG90eXBpbmcgPSB0cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRl
bGV0ZSBrbGFzcy4kcHJvdG90eXBpbmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmlt
cGxlbWVudCgnaW1wbGVtZW50JywgaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFz
cy5NdXRhdG9ycyA9IHtcblxuXHRFeHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMu
cGFyZW50ID0gcGFyZW50O1xuXHRcdHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50
KTtcblx0fSxcblxuXHRJbXBsZW1lbnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29u
dmVydChpdGVtcykuZWFjaChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5l
dyBpdGVtO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0
aGlzLCBrZXksIGluc3RhbmNlW2tleV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xu
XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjog
Q29udGFpbnMgVXRpbGl0eSBDbGFzc2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91
ciBvd24gQ2xhc3NlcyB0byBlYXNlIHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3Mu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJv
dmlkZXM6IFtDbGFzcy5FeHRyYXMsIENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9c
blxuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjog
W10sXG5cblx0Y2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5
LmZsYXR0ZW4oYXJndW1lbnRzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENo
YWluOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMu
JGNoYWluLnNoaWZ0KCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5c
dGNsZWFyQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5n
KXtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwg
Zmlyc3Qpe1xuXHRcdHJldHVybiBmaXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRo
aXMuRXZlbnRzID0gbmV3IENsYXNzKHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDog
ZnVuY3Rpb24odHlwZSwgZm4sIGludGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7
XG5cblx0XHRcblxuXHRcdHRoaXMuJGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0g
fHwgW10pLmluY2x1ZGUoZm4pO1xuXHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVl
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRz
KXtcblx0XHRmb3IgKHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVu
dHNbdHlwZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rp
b24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2
YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4g
dGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChm
dW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdz
KTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtc
blx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50
c1t0eXBlXTtcblx0XHRpZiAoZXZlbnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5k
ZXggPSBldmVudHMuaW5kZXhPZihmbik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBl
dmVudHNbaW5kZXhdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVF
dmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihl
dmVudHMpID09ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVt
b3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1c
blx0XHRpZiAoZXZlbnRzKSBldmVudHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlw
ZSBpbiB0aGlzLiRldmVudHMpe1xuXHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkg
Y29udGludWU7XG5cdFx0XHR2YXIgZm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9y
ICh2YXIgaSA9IGZucy5sZW5ndGg7IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMu
cmVtb3ZlRXZlbnQodHlwZSwgZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbnRoaXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0
aW9uczogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVj
dC5tZXJnZS5hcHBseShudWxsLCBbe30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykp
O1xuXHRcdGlmICh0aGlzLmFkZEV2ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5c
dFx0XHRpZiAodHlwZU9mKG9wdGlvbnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25b
QS1aXS8pLnRlc3Qob3B0aW9uKSkgY29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlv
biwgb3B0aW9uc1tvcHRpb25dKTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IENsYXNzLlRoZW5hYmxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xh
c3MgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2Ug
dGhlbSBcInRoZW5hYmxlXCIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1
aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4o
ZnVuY3Rpb24oKXtcblxudmFyIFNUQVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQg
PSAxLFxuXHRTVEFURV9SRUpFQ1RFRCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5h
YmxlID0gbmV3IENsYXNzKHtcblxuXHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0
JHRoZW5hYmxlUmVzdWx0OiBudWxsLFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJl
c29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVq
ZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFi
bGVTdGF0ZTogZnVuY3Rpb24oKXtcblx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xu
XHRcdFx0Y2FzZSBTVEFURV9QRU5ESU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5c
dFx0XHRjYXNlIFNUQVRFX0ZVTEZJTExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xu
XG5cdFx0XHRjYXNlIFNUQVRFX1JFSkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztc
blx0XHR9XG5cdH0sXG5cblx0cmVzZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRy
ZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHR0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0
aWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRl
bnRpdHknO1xuXHRcdGlmICh0eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWpl
Y3RlZCA9ICdUaHJvd2VyJztcblxuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xu
XG5cdFx0dGhpcy4kdGhlbmFibGVSZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhl
bmFibGUsXG5cdFx0XHRmdWxmaWxsSGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RI
YW5kbGVyOiBvblJlamVjdGVkXG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0
ZSAhPT0gU1RBVEVfUEVORElORyl7XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRy
ZXR1cm4gdGhlbmFibGU7XG5cdH0sXG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7
XG5cdFx0cmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxu
VGhlbmFibGUuZXh0ZW5kKHtcblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0
aGVuYWJsZTtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVu
YWJsZSA9IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJs
ZSgpO1xuXHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4g
dGhlbmFibGU7XG5cdH0sXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhl
bmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5c
dFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxu
ZnVuY3Rpb24gcmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUp
e1xuXHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZl
IGEgdGhlbmFibGUgd2l0aCBpdHNlbGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5
cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7
XG5cdFx0XHR2YXIgdGhlbjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVu
O1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBl
eGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24n
KXtcblx0XHRcdFx0dmFyIHJlc29sdmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9u
KCl7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRc
dFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0
XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7
XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0
XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVh
c29uKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRc
dHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVh
c29uKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7
XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2
ZWQpe1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVj
dCh0aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0
XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUp
O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7
XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0
aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVu
YWJsZS4kdGhlbmFibGVSZXN1bHQgPSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0
ZSA9IFNUQVRFX0ZVTEZJTExFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5m
dW5jdGlvbiByZWplY3QodGhlbmFibGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFi
bGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0
ID0gcmVhc29uO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7
XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFi
bGUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xu
XHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPSBTVEFURV9QRU5ESU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5h
YmxlKXtcblx0dmFyIHN0YXRlID0gdGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0
ID0gdGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0
aGVuYWJsZVJlYWN0aW9ucyxcblx0XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVM
RklMTEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBl
ID0gJ2Z1bGZpbGxIYW5kbGVyJztcblx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RF
RCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdy
ZWplY3RIYW5kbGVyJztcblx0fVxuXG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFz
cyhbcmVzdWx0LCByZWFjdGlvbnMsIHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxl
KHJlc3VsdCwgcmVhY3Rpb25zLCB0eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlv
bnMubGVuZ3RoOyBpIDwgbDsgKytpKXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0s
XG5cdFx0XHRoYW5kbGVyID0gcmVhY3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0g
J0lkZW50aXR5Jyl7XG5cdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xu
XHRcdH0gZWxzZSBpZiAoaGFuZGxlciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFj
dGlvbi50aGVuYWJsZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRc
dFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0g
Y2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhj
ZXB0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVv
ZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0g
J2Z1bmN0aW9uJyl7XG5cdGRlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlw
ZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0
ZTtcbn0gZWxzZSB7XG5cdGRlZmVyID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4s
IDApO1xuXHR9O1xufVxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNj
cmlwdGlvbjogT2JqZWN0IGdlbmVyaWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4u
LlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVu
Y3Rpb24ob2JqZWN0LCBrZXlzKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlz
W2ldO1xuXHRcdFx0aWYgKGsgaW4gb2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRc
dH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwg
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qu
a2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7
XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwo
YmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3Vs
dHM7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2
YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9
IGtleXNbaV0sIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2
YWx1ZSwga2V5LCBvYmplY3QpKSByZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0
dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQp
e1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0
XHRpZiAoIWZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBm
biwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tp
XTtcblx0XHRcdGlmIChmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1
ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24o
b2JqZWN0KXtcblx0XHR2YXIgdmFsdWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5
cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5c
dFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRc
dH1cblx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2Jq
ZWN0KXtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0
a2V5T2Y6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0Lmtl
eXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xu
XHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVl
KSByZXR1cm4ga2V5O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWlu
czogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmpl
Y3QsIHZhbHVlKSAhPSBudWxsO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9i
amVjdCwgYmFzZSl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFj
aChvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJh
c2UgKyAnWycgKyBrZXkgKyAnXSc7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0
eXBlT2YodmFsdWUpKXtcblx0XHRcdFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRv
UXVlcnlTdHJpbmcodmFsdWUsIGtleSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5c
dFx0XHRcdFx0dmFyIHFzID0ge307XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWws
IGkpe1xuXHRcdFx0XHRcdFx0cXNbaV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0
cmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7
XG5cdFx0XHRcdGRlZmF1bHQ6IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVu
dCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcu
cHVzaChyZXN1bHQpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYn
KTtcblx0fVxuXG59KTtcblxufSkoKTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNl
clxuZGVzY3JpcHRpb246IFN0YW5kYWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVz
OiBTbGljay5QYXJzZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxu
XHRzZXBhcmF0b3JJbmRleCxcblx0Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2Fj
aGUgPSB7fSxcblx0cmV2ZXJzZUNhY2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xu
XG52YXIgcGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4
cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09
PSB0cnVlKSByZXR1cm4gZXhwcmVzc2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Np
b24pLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJz
ZWQ7XG5cdHZhciBjdXJyZW50Q2FjaGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2Fj
aGU7XG5cdGlmIChjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVb
ZXhwcmVzc2lvbl07XG5cdHBhcnNlZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNz
aW9uczogW10sXG5cdFx0cmF3OiBleHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7
XG5cdFx0XHRyZXR1cm4gcGFyc2UodGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2Vw
YXJhdG9ySW5kZXggPSAtMTtcblx0d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBl
eHByZXNzaW9uLnJlcGxhY2UocmVnZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBw
YXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5y
YXddID0gKHJldmVyc2VkKSA/IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciBy
ZXZlcnNlQ29tYmluYXRvciA9IGZ1bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRv
ciA9PT0gJyEnKSByZXR1cm4gJyAnO1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJl
dHVybiAnISc7XG5cdGVsc2UgaWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29t
YmluYXRvci5yZXBsYWNlKC9eIS8sICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRv
cjtcbn07XG5cbnZhciByZXZlcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHBy
ZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwg
ZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtc
blx0XHR2YXIgbGFzdCA9IHtwYXJ0czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNl
Q29tYmluYXRvcihleHBbMF0uY29tYmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGog
PCBleHAubGVuZ3RoOyBqKyspe1xuXHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAo
IWNleHAucmV2ZXJzZUNvbWJpbmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5c
dFx0XHRjZXhwLmNvbWJpbmF0b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVs
ZXRlIGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5w
dXNoKGxhc3QpO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJl
Z0V4cCA9IGZ1bmN0aW9uKHN0cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3
LTIwMDggU3RldmVuIExldml0aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hy
ZWdleHAvPiBNSVQgTGljZW5zZVxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkq
Kz8uXFxcXF4kfCwjXFxzXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyAr
IG1hdGNoO1xuXHR9KTtcbn07XG5cbnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vz
ci9iaW4vZW52IHJ1YnlcbnB1dHMgXCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94
XFwpfFxccysjLiokfFxccyt8XFxcXCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86
XFxcblx0ICBcXFxccyogKCAsICkgXFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAg
ICAgICAgXFxuXFxcblx0fCBcXFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21i
aW5hdG9yICAgICAgICAgXFxuXFxcblx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAg
ICMgQ29tYmluYXRvckNoaWxkcmVuIFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxc
KiApICAgICAjIFRhZyAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2Rl
PisgICAgICAgKSAgICAgIyBJRCAgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8
dW5pY29kZT4rICAgICAgICkgICAgICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0
XFxcXFsgIFxcXG5cdFx0XFxcXHMqICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxz
KiAoWypeJCF+fF0/PSkgICg/OiAgXFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0
KFtcXFwiJ10/KSguKj8pXFxcXDkgXFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/
ICBcXFxccyogIFxcXG5cdFxcXFxdKD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2Rl
PisgKSg/OlxcXG5cdFxcXFwoICg/OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxc
XDEyKXwoKD86XFxcXChbXildK1xcXFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xc
XG5cdClcIlxuKi9cblx0XCJeKD86XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4r
KVxcXFxzKnwoXFxcXHMrKXwoPHVuaWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxc
XC4oPHVuaWNvZGU+Kyl8XFxcXFtcXFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxd
Pz0pKD86XFxcXHMqKD86KFtcXFwiJ10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxc
XSl8KDorKSg8dW5pY29kZT4rKSg/OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxc
XDEzKXwoKD86XFxcXChbXildK1xcXFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNl
KC88Y29tYmluYXRvcj4vLCAnWycgKyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwv
JykgKyAnXScpXG5cdC5yZXBsYWNlKC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1c
XFxcdUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29k
ZTE+L2csICcoPzpbOlxcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAt
OWEtZl0pJylcbik7XG5cbmZ1bmN0aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJh
dG9yLFxuXHRjb21iaW5hdG9yLFxuXHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxc
blx0aWQsXG5cdGNsYXNzTmFtZSxcblxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJh
dG9yLFxuXHRhdHRyaWJ1dGVRdW90ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFy
a2VyLFxuXHRwc2V1ZG9DbGFzcyxcblx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVk
VmFsdWUsXG5cdHBzZXVkb0NsYXNzVmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJh
dG9ySW5kZXggPT09IC0xKXtcblx0XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRl
eF0gPSBbXTtcblx0XHRjb21iaW5hdG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSBy
ZXR1cm4gJyc7XG5cdH1cblxuXHRpZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4g
fHwgY29tYmluYXRvckluZGV4ID09PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3Ig
fHwgJyAnO1xuXHRcdHZhciBjdXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3Nl
cGFyYXRvckluZGV4XTtcblx0XHRpZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21i
aW5hdG9ySW5kZXhdKVxuXHRcdFx0Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJl
dmVyc2VDb21iaW5hdG9yID0gcmV2ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3Vy
cmVudFNlcGFyYXRvclsrK2NvbWJpbmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRv
ciwgdGFnOiAnKid9O1xuXHR9XG5cblx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVz
c2lvbnNbc2VwYXJhdG9ySW5kZXhdW2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUp
e1xuXHRcdGN1cnJlbnRQYXJzZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcn
KTtcblxuXHR9IGVsc2UgaWYgKGlkKXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFj
ZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNz
TmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3Vy
cmVudFBhcnNlZC5jbGFzc0xpc3QpIGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0
aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xu
XHRcdGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50
UGFyc2VkLmNsYXNzZXMucHVzaCh7XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVn
ZXhwOiBuZXcgUmVnRXhwKCcoXnxcXFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAn
KFxcXFxzfCQpJylcblx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRw
c2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZh
bHVlO1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xh
c3NWYWx1ZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJl
bnRQYXJzZWQucHNldWRvcykgY3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVu
dFBhcnNlZC5wc2V1ZG9zLnB1c2goe1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJl
VW5lc2NhcGUsICcnKSxcblx0XHRcdHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlw
ZTogcHNldWRvTWFya2VyLmxlbmd0aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0p
O1xuXG5cdH0gZWxzZSBpZiAoYXR0cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRy
aWJ1dGVLZXkucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAo
YXR0cmlidXRlVmFsdWUgfHwgJycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFy
IHRlc3QsIHJlZ2V4cDtcblxuXHRcdHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0
Y2FzZSAnXj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAo
YXR0cmlidXRlVmFsdWUpICAgICAgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiBy
ZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1
ZSkgKyckJyAgICAgICApOyBicmVhaztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBS
ZWdFeHAoICcoXnxcXFxccyknKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxz
fCQpJyApOyBicmVhaztcblx0XHRcdGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAg
ICAgICdeJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFr
O1xuXHRcdFx0Y2FzZSAgJz0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0
dXJuIGF0dHJpYnV0ZVZhbHVlID09IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNl
ICcqPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYg
dmFsdWUuaW5kZXhPZihhdHRyaWJ1dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnIT0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0
dHJpYnV0ZVZhbHVlICE9IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAg
OiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRc
dH07XG5cdFx0fVxuXG5cdFx0aWYgKGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQv
KS50ZXN0KGF0dHJpYnV0ZU9wZXJhdG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1
cm4gZmFsc2U7XG5cdFx0fTtcblxuXHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVl
KXtcblx0XHRcdHJldHVybiB2YWx1ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxu
XHRcdGlmICghY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0
ZXMgPSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6
IGF0dHJpYnV0ZUtleSxcblx0XHRcdG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRc
dHZhbHVlOiBhdHRyaWJ1dGVWYWx1ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9
XG5cblx0cmV0dXJuICcnO1xufTtcblxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMu
U2xpY2sgfHwge30pO1xuXG5TbGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRy
ZXR1cm4gcGFyc2UoZXhwcmVzc2lvbik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2Nh
cGVSZWdFeHA7XG5cbmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5h
cHBseSgvKjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBv
cnRzIDogLyo8L0NvbW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRl
clxuZGVzY3JpcHRpb246IFRoZSBuZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxu
cHJvdmlkZXM6IFNsaWNrLkZpbmRlclxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xu
XG47KGZ1bmN0aW9uKCl7XG5cbnZhciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30s
XG5cdHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAv
IEJ1ZyBkZXRlY3Rpb25cblxubG9jYWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRy
ZXR1cm4gKC9cXHtcXHMqXFxbbmF0aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtc
bn07XG5cbmxvY2FsLmlzWE1MID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9j
dW1lbnQueG1sVmVyc2lvbikgfHwgKCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChk
b2N1bWVudCkgPT0gJ1tvYmplY3QgWE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVU
eXBlID09IDkgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7
XG59O1xuXG5sb2NhbC5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBj
b252ZXJ0IGVsZW1lbnRzIC8gd2luZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1l
bnQgY2Fubm90IGJlIGV4dHJhcG9sYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBu
b2RlVHlwZSA9IGRvY3VtZW50Lm5vZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRv
Y3VtZW50XG5cdGVsc2UgaWYgKG5vZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9j
dW1lbnQ7IC8vIG5vZGVcblx0ZWxzZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9
IGRvY3VtZW50LmRvY3VtZW50OyAvLyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hl
Y2sgaWYgaXQncyB0aGUgb2xkIGRvY3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRv
Y3VtZW50KSByZXR1cm47XG5cdHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVj
ayBpZiB3ZSBoYXZlIGRvbmUgZmVhdHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZv
cmVcblxuXHR2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlk
ID0gdGhpcy5nZXRVSURYTUwocm9vdCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jv
b3RVaWRdLFxuXHRcdGZlYXR1cmU7XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1
cmUgaW4gZmVhdHVyZXMpe1xuXHRcdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVd
O1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVb
cm9vdFVpZF0gPSB7fTtcblxuXHRmZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNY
TUxEb2N1bWVudCA9IHRoaXMuaXNYTUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0
YXJHRUJUTlxuXHQ9IGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMu
aWRHZXRzTmFtZVxuXHQ9IGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVz
LmJyb2tlbkdFQkNOXG5cdD0gZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVz
LmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0
PSBmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3Rh
clNlbGVjdHNDbG9zZWQsIHN0YXJTZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xh
c3NOYW1lR0VCQ04sIGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9y
bUF0dHJpYnV0ZUdldHRlcjtcblxuXHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlk
Jztcblx0dmFyIHRlc3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0
dmFyIHRlc3RSb290ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnYm9keScpWzBdIHx8IHJvb3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2Rl
KTtcblxuXHQvLyBvbiBub24tSFRNTCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50
c0J5SWQgZG9lc250IHdvcmsgcHJvcGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhU
TUwgPSAnPGEgaWQ9XCInK2lkKydcIj48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVu
dCA9ICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0
aWYgKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3Bs
YXkgPSAnbm9uZSc7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVs
ZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29t
bWVudHMgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtc
blxuXHRcdC8vIElFIHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRc
dFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRl
c3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3Nl
ZCA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFt
ZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMu
YnJva2VuU3RhckdFQlROID0gc3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3Nl
ZDtcblxuXHRcdC8vIElFIHJldHVybnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9m
IGp1c3QgaWQgZm9yIGdldEVsZW1lbnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkg
e1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48
YiBpZD1cIicrIGlkICsnXCI+PC9iPic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0g
Y2F0Y2ggKGUpe31cblxuXHRcdGlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtc
blxuXHRcdFx0Ly8gU2FmYXJpIDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1
bHRzXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9
XCJmXCI+PC9hPjxhIGNsYXNzPVwiYlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxk
LmNsYXNzTmFtZSA9ICdiJztcblx0XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9
ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRc
dFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFz
c05hbWUgZG9lc250IGRldGVjdHMgdGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxu
XHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwi
PjwvYT48YSBjbGFzcz1cImYgYiBhXCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNz
TmFtZUdFQkNOID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGgg
IT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNO
ID0gY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVH
RUJDTjtcblx0XHR9XG5cblx0XHRpZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0
XHQvLyBJRSA4IHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlT
ZWxlY3RvckFsbCgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVz
dE5vZGUucXVlcnlTZWxlY3RvckFsbCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0
c0Nsb3NlZFFTQSA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFsw
XS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRc
dFx0Ly8gU2FmYXJpIDMuMiBxdWVyeVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRj
YXNlIG9uIHF1aXJrc21vZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRN
TCA9ICc8YSBjbGFzcz1cIk1pWFwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhl
ZENhc2VRU0EgPSAhdGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0
XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVy
biBzZWxlY3RlZCBvcHRpb25zIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0
XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxl
Y3RlZFwiPmE8L29wdGlvbj48L3NlbGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVj
a2VkUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09
IDApO1xuXHRcdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJl
Y3QgcmVzdWx0cyBmb3IgYXR0clsqXiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JB
bGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1c
IlwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0
ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xu
XHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBo
YXMgYW4gaW5wdXQgb2YgaWQgeCwgZm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVy
ZW5jZSB0byB0aGUgaW5wdXRcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0g
Jzxmb3JtIGFjdGlvbj1cInNcIj48aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0
XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0
cmlidXRlKCdhY3Rpb24nKSAhPSAncycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5h
dGl2ZSBtYXRjaGVzU2VsZWN0b3IgZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNo
ZXNTZWxlY3RvciA9IHJvb3QubWF0Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwq
LyByb290Lm1vek1hdGNoZXNTZWxlY3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtc
blx0XHRpZiAoZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8g
aWYgbWF0Y2hlc1NlbGVjdG9yIHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2Ug
Y2FuIHVzZSBpdFxuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9v
dCwgJzpzbGljaycpO1xuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVs
bDtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19l
eHBhbmRvID0gMTtcblx0XHRkZWxldGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVz
LmdldFVJRCA9IHRoaXMuZ2V0VUlESFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMu
Z2V0VUlEID0gdGhpcy5nZXRVSURYTUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0
ZXN0Tm9kZSk7XG5cdHRlc3ROb2RlID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0
Ly8gZ2V0QXR0cmlidXRlXG5cblx0ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlz
SFRNTERvY3VtZW50ICYmIGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9k
ZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtc
blx0XHRpZiAobWV0aG9kKSByZXR1cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJp
YnV0ZU5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRy
aWJ1dGVOb2RlKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0
aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNb
bmFtZV07XG5cdFx0cmV0dXJuIChtZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdl
dEF0dHJpYnV0ZShuYW1lKTtcblx0fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJl
cy5oYXNBdHRyaWJ1dGUgPSAocm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJp
YnV0ZSkpID8gZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNB
dHRyaWJ1dGUoYXR0cmlidXRlKTtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5c
dFx0bm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAh
IShub2RlICYmIChub2RlLnNwZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5c
dC8vIGNvbnRhaW5zXG5cdC8vIEZJWE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3Vs
ZCBiZSBkaWZmZXJlbnQgZm9yIHhtbCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVS
b290Q29udGFpbnMgPSByb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxu
XHRcdG5hdGl2ZURvY3VtZW50Q29udGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29k
ZShkb2N1bWVudC5jb250YWlucyk7XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9v
dENvbnRhaW5zICYmIG5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwg
bm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZl
Um9vdENvbnRhaW5zICYmICFuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRl
eHQsIG5vZGUpe1xuXHRcdC8vIElFOCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVu
dC5cblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50
KSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xu
XHR9IDogKHJvb3QgJiYgcm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihj
b250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29u
dGV4dCwgbm9kZSl7XG5cdFx0aWYgKG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250
ZXh0KSByZXR1cm4gdHJ1ZTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkp
O1xuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5n
XG5cdC8vIGNyZWRpdHMgdG8gU2l6emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0
dXJlcy5kb2N1bWVudFNvcnRlciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1
bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24oYikgJiA0ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3Nv
dXJjZUluZGV4JyBpbiByb290KSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJ
bmRleCB8fCAhYi5zb3VyY2VJbmRleCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5k
ZXggLSBiLnNvdXJjZUluZGV4O1xuXHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0
aW9uKGEsIGIpe1xuXHRcdGlmICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQp
IHJldHVybiAwO1xuXHRcdHZhciBhUmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KSwgYlJhbmdlID0gYi5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNl
dFN0YXJ0KGEsIDApO1xuXHRcdGFSYW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0
YXJ0KGIsIDApO1xuXHRcdGJSYW5nZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDog
bnVsbDtcblxuXHRyb290ID0gbnVsbDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xu
XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFp
biBNZXRob2RcblxudmFyIHJlU2ltcGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xc
XCopKSQvLFxuXHRyZUVtcHR5QXR0cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxd
Lyxcblx0cXNhRmFpbEV4cENhY2hlID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNv
bnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMu
Zm91bmQgPSAoZmlyc3QpID8gbnVsbCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4
dCkgcmV0dXJuIGZvdW5kO1xuXHRlbHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9
IGNvbnRleHQuZG9jdW1lbnQ7IC8vIENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBh
IGRvY3VtZW50XG5cdGVsc2UgaWYgKCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5c
blx0Ly8gc2V0dXBcblxuXHR2YXIgcGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVz
ID0gdGhpcy51bmlxdWVzID0ge30sXG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVu
ZC5sZW5ndGgpLFxuXHRcdGNvbnRleHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0g
OSk7XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRl
eHQgOiBjb250ZXh0Lm93bmVyRG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xu
XG5cdC8vIGF2b2lkIGR1cGxpY2F0aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJh
eVxuXHRpZiAoaGFzT3RoZXJzKSBmb3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNb
dGhpcy5nZXRVSUQoZm91bmRbaV0pXSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3Nc
blxuXHRpZiAodHlwZW9mIGV4cHJlc3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlz
IGEgc3RyaW5nXG5cblx0XHQvKjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFy
IHNpbXBsZVNlbGVjdG9yID0gZXhwcmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0
XHRzaW1wbGVTZWxlY3RvcnM6IGlmIChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1i
b2wgPSBzaW1wbGVTZWxlY3RvclsxXSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJd
O1xuXG5cdFx0XHRpZiAoIXN5bWJvbCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRo
aXMuYnJva2VuU3RhckdFQlROKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVz
ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0
KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5v
ZGVzW2krK107KXtcblx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdl
dFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxz
ZSBpZiAoc3ltYm9sID09ICcjJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50
IHx8ICFjb250ZXh0SXNEb2N1bWVudCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRu
b2RlID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSBy
ZXR1cm4gZm91bmQ7XG5cdFx0XHRcdGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRy
aWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7
XG5cdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRo
aXMuaXNIVE1MRG9jdW1lbnQgfHwgKCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8
IHRoaXMuYnJva2VuR0VCQ04pICYmIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNp
bXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUobmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9k
ZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTsp
e1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5c
dFx0XHRcdFx0dmFyIG1hdGNoQ2xhc3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5l
c2NhcGVSZWdFeHAobmFtZSkgKycoXFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRl
eHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2Rl
ID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7
XG5cdFx0XHRcdFx0XHRpZiAoIShjbGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFt
ZSkpKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0
XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBm
b3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0
XHRcdGlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0
KSA/IG51bGwgOiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVy
cmlkZT4qL1xuXG5cdFx0Lyo8cXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNl
bGVjdG9yOiBpZiAoY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlz
LmlzSFRNTERvY3VtZW50XG5cdFx0XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxu
XHRcdFx0XHQvL1RPRE86IG9ubHkgc2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4
ZWQgY2FzZVxuXHRcdFx0XHR8fCB0aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAo
dGhpcy5icm9rZW5DaGVja2VkUVNBICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+
IC0xKVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5
QXR0cmlidXRlLnRlc3QoZXhwcmVzc2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1l
bnQgLy9BYm9ydCB3aGVuICFjb250ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAg
dGhlcmUgYXJlIG11bHRpcGxlIGV4cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRc
dC8vICBzaW5jZSB3ZSBjdXJyZW50bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0Eg
Zm9yIHNpbmdsZSBleHByZXNzaW9uIHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24u
aW5kZXhPZignLCcpID4gLTFcblx0XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNB
XG5cdFx0XHQpIGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9
IGV4cHJlc3Npb24sIF9jb250ZXh0ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFj
b250ZXh0SXNEb2N1bWVudCl7XG5cdFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5c
dFx0XHRcdC8vIGNyZWRpdHMgdG8gQW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBf
Y29udGV4dC5nZXRBdHRyaWJ1dGUoJ2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRc
dFx0X2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVz
c2lvbiA9ICcjJyArIHNsaWNraWQgKyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4
dCA9IF9jb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRc
dGlmIChmaXJzdCkgcmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwg
bnVsbDtcblx0XHRcdFx0ZWxzZSBub2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhw
cmVzc2lvbik7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4
cHJlc3Npb25dID0gMTtcblx0XHRcdFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmlu
YWxseSB7XG5cdFx0XHRcdGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChj
dXJyZW50SWQpIF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0
XHRcdGVsc2UgX2NvbnRleHQucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRl
eHQgPSBfY29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFy
U2VsZWN0c0Nsb3NlZFFTQSkgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRc
dFx0aWYgKG5vZGUubm9kZU5hbWUgPiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlz
LmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9
IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlx
dWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0
XHRcdGlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7
XG5cblx0XHR9XG5cdFx0Lyo8L3F1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJz
ZWQgPSB0aGlzLlNsaWNrLnBhcnNlKGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0
aCkgcmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRo
ZXJlIGlzIG5vIGV4cHJlc3Npb25cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhw
cmVzc2lvbi5TbGljayl7IC8vIGV4cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5c
dFx0cGFyc2VkID0gZXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRl
eHQuZG9jdW1lbnRFbGVtZW50IHx8IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lv
biBpcyBhIG5vZGVcblx0XHQoZm91bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5k
ID0gZXhwcmVzc2lvbjtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1
bmtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8
bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50
aCBzZWxlY3RvcnNcblxuXHR0aGlzLnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7
fTtcblx0dGhpcy5wb3NOVEhUeXBlID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtc
blxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xu
XG5cdC8vIGlmIGFwcGVuZCBpcyBudWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVj
dG9yIHdpdGggb25lIGV4cHJlc3Npb24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxu
XHR0aGlzLnB1c2ggPSAoIWhhc090aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0g
MSAmJiBwYXJzZWQuZXhwcmVzc2lvbnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJh
eSA6IHRoaXMucHVzaFVJRDtcblxuXHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxu
XHQvLyBkZWZhdWx0IGVuZ2luZVxuXG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwg
dGFnLCBpZCwgY2xhc3NMaXN0LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIg
Y3VycmVudEl0ZW1zLCBjdXJyZW50RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhw
cmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAo
Y3VycmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1
cnJlbnRCaXQgPSBjdXJyZW50RXhwcmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9y
ID0gJ2NvbWJpbmF0b3I6JyArIGN1cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNb
Y29tYmluYXRvcl0pIGNvbnRpbnVlIHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5p
c1hNTERvY3VtZW50KSA/IGN1cnJlbnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNh
c2UoKTtcblx0XHRpZCAgICAgICAgID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0g
Y3VycmVudEJpdC5jbGFzc0xpc3Q7XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nl
cztcblx0XHRhdHRyaWJ1dGVzID0gY3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3Mg
ICAgPSBjdXJyZW50Qml0LnBzZXVkb3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVu
dEV4cHJlc3Npb24ubGVuZ3RoIC0gMSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5c
blx0XHRpZiAobGFzdEJpdCl7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0
dGhpcy5mb3VuZCA9IGZvdW5kO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7
fTtcblx0XHRcdHRoaXMuZm91bmQgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5c
dFx0XHR0aGlzW2NvbWJpbmF0b3JdKGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBm
b3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0
ICYmIGxhc3RCaXQpIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsg
bSsrKXtcblx0XHRcdFx0dGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChm
b3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0g
Y3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50
SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlz
dCk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8v
IHNob3VsZCBzb3J0IGlmIHRoZXJlIGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNz
IG11bHRpcGxlIGV4cHJlc3Npb25zLlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVz
c2lvbnMubGVuZ3RoID4gMSkpIHRoaXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkg
PyAoZm91bmRbMF0gfHwgbnVsbCkgOiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVp
ZHggPSAxO1xubG9jYWwudWlkayA9ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhN
TCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51
aWRrKTtcblx0aWYgKCF1aWQpe1xuXHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0
QXR0cmlidXRlKHRoaXMudWlkaywgdWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9j
YWwuZ2V0VUlESFRNTCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1i
ZXIgfHwgKG5vZGUudW5pcXVlTnVtYmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBi
YXNlZCBvbiB0aGUgc2V0RG9jdW1lbnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5z
b3J0ID0gZnVuY3Rpb24ocmVzdWx0cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0
dXJuIHJlc3VsdHM7XG5cdHJlc3VsdHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0
dXJuIHJlc3VsdHM7XG59O1xuXG4vKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1z
ZWxlY3RvcnM+Ki9cblxubG9jYWwuY2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAv
XihbKy1dP1xcZCopPyhbYS16XSspPyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJn
dW1lbnQgPSBmdW5jdGlvbihhcmd1bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRj
aCh0aGlzLm1hdGNoTlRIKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNw
ZWNpYWwgPSBwYXJzZWRbMl0gfHwgZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5c
dGlmIChhID09ICctJykgYSA9IC0xO1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFy
c2VkID1cblx0XHQoc3BlY2lhbCA9PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNp
YWwgPT0gJ29kZCcpXHQ/IHthOiAyLCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0
PyB7YTogMiwgYjogMH0gOiB7YTogMCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRI
W2FyZ3VtZW50XSA9IHBhcnNlZCk7XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5j
dGlvbihjaGlsZCwgc2libGluZywgcG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rp
b24obm9kZSwgYXJndW1lbnQpe1xuXHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0
XHRpZiAoIXRoaXNbcG9zaXRpb25zXVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBh
cmVudE5vZGU7XG5cdFx0XHRpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVs
ID0gcGFyZW50W2NoaWxkXSwgY291bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRc
dHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRp
ZiAoZWwubm9kZU5hbWUgIT0gbm9kZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9z
aXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVs
ID0gZWxbc2libGluZ10pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0
XHRpZiAoZWwubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlv
bnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBl
bFtzaWJsaW5nXSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8
ICduJztcblx0XHR2YXIgcGFyc2VkID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5w
YXJzZU5USEFyZ3VtZW50KGFyZ3VtZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNl
O1xuXHRcdHZhciBhID0gcGFyc2VkLmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlv
bnNdW3VpZF07XG5cdFx0aWYgKGEgPT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4g
MCl7XG5cdFx0XHRpZiAocG9zIDwgYikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHRpZiAoYiA8IHBvcykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBi
KSAlIGEpID09IDA7XG5cdH07XG59O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwv
cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hT
ZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhp
cy5mb3VuZC5wdXNoKG5vZGUpO1xufTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhp
cy5nZXRVSUQobm9kZSk7XG5cdGlmICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNl
bGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0
XHR0aGlzLnVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xu
XHR9XG59O1xuXG5sb2NhbC5tYXRjaE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5c
dGlmICh0aGlzLmlzSFRNTERvY3VtZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtc
blx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwo
bm9kZSwgc2VsZWN0b3IucmVwbGFjZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypc
XF0vZywgJ1skMT1cIiQyXCJdJykpO1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxu
XG5cdHZhciBwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJz
ZWQpIHJldHVybiB0cnVlO1xuXG5cdC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFy
IGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwg
aSwgY3VycmVudEV4cHJlc3Npb247XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9
IGV4cHJlc3Npb25zW2ldKTsgaSsrKXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3Ro
ID09IDEpe1xuXHRcdFx0dmFyIGV4cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYg
KHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcg
OiBleHAudGFnLnRvVXBwZXJDYXNlKCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1
dGVzLCBleHAucHNldWRvcykpIHJldHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisr
O1xuXHRcdH1cblx0fVxuXG5cdGlmIChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgp
IHJldHVybiBmYWxzZTtcblxuXHR2YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50
LCBwYXJzZWQpLCBpdGVtO1xuXHRmb3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRc
dGlmIChpdGVtID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59
O1xuXG5sb2NhbC5tYXRjaFBzZXVkbyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtc
blx0dmFyIHBzZXVkb05hbWUgPSAncHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9O
YW1lXSkgcmV0dXJuIHRoaXNbcHNldWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0
cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1l
bnQpID8gYXJndW1lbnQgPT0gYXR0cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5t
YXRjaFNlbGVjdG9yID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyl7XG5cdGlmICh0YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1M
RG9jdW1lbnQpID8gbm9kZS5ub2RlTmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtc
blx0XHRpZiAodGFnID09ICcqJyl7XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBm
YWxzZTsgLy8gRml4IGZvciBjb21tZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVs
c2Uge1xuXHRcdFx0aWYgKG5vZGVOYW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0
fVxuXG5cdGlmIChpZCAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZh
bHNlO1xuXG5cdHZhciBpLCBwYXJ0LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFz
c2VzLmxlbmd0aDsgaS0tOyl7XG5cdFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2Ns
YXNzJyk7XG5cdFx0aWYgKCEoY2xzICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJl
dHVybiBmYWxzZTtcblx0fVxuXHRpZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5s
ZW5ndGg7IGktLTspe1xuXHRcdHBhcnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9w
ZXJhdG9yID8gIXBhcnQudGVzdCh0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDog
IXRoaXMuaGFzQXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5c
dGlmIChwc2V1ZG9zKSBmb3IgKGkgPSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9
IHBzZXVkb3NbaV07XG5cdFx0aWYgKCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBw
YXJ0LnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFy
IGNvbWJpbmF0b3JzID0ge1xuXG5cdCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBh
bnkgbGV2ZWxcblxuXHRcdHZhciBpLCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlz
SFRNTERvY3VtZW50KXtcblx0XHRcdGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0
aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBu
b2RlLmFsbCkgfHwgKHRoaXMuaWRHZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRl
Tm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVy
bnMgYWxsIHRoZSBlbGVtZW50cyB3aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRc
dFx0XHRcdC8vIGlmIHRoZXJlcyBqdXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwg
ZWxzZSBpdCB3aWxsIGJlIGEgY29sbGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5h
bGxbaWRdO1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAo
IWNoaWxkcmVuWzBdKSBjaGlsZHJlbiA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0g
MDsgaXRlbSA9IGNoaWxkcmVuW2krK107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVt
LmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9k
ZS5ub2RlVmFsdWUgPT0gaWQpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBu
dWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7
XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0
fVxuXHRcdFx0XHRpZiAoIWl0ZW0pe1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGlu
IHRoZSBkb20gd2UgcmV0dXJuLCBlbHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUg
Z2V0QnlJZCBsYWJlbFxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9k
ZSkpIHJldHVybjtcblx0XHRcdFx0XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxz
ZSBpZiAodGhpcy5kb2N1bWVudCAhPT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVt
KSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0
QnlDbGFzczogaWYgKGNsYXNzZXMgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0
aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlD
bGFzc05hbWUoY2xhc3NMaXN0LmpvaW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYm
IGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7
IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dGdldEJ5VGFnOiB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
dGFnKTtcblx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdl
dEJ5VGFnO1xuXHRcdFx0aWYgKCF0aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0
XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQn
Pic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
eyAvLyBkaXJlY3QgY2hpbGRyZW5cblx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBk
byB7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBp
ZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nKSk7XG5cdH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hp
bGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xu
XHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5c
dFx0bm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9k
ZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQn
fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
eyAvLyBuZXh0IHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykp
e1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlk
ID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJy
ZWFrO1xuXHRcdFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNo
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0
fSxcblxuXHQnKysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhp
c1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0dGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFu
ZCBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6
IX4nXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxc
blxuXHQnISc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3MpeyAvLyBhbGwgcGFyZW50IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5wYXJlbnROb2RlKSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxc
blxuXHQnIT4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gZGlyZWN0IHBhcmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBh
cmVudE5vZGU7XG5cdFx0aWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsn
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gcHJldmlvdXMgc2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJs
aW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9
XG5cdH0sXG5cblx0JyFeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyl7IC8vIGxhc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7
XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNo
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxz
ZSB0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9k
ZS5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChu
b2RlKTtcblx0XHRcdGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlz
LmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAo
dmFyIGMgaW4gY29tYmluYXRvcnMpIGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0
b3JzW2NdO1xuXG52YXIgcHNldWRvcyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5c
blx0J2VtcHR5JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENo
aWxkO1xuXHRcdHJldHVybiAhKGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9k
ZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5c
dCdub3QnOiBmdW5jdGlvbihub2RlLCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0
Y2hOb2RlKG5vZGUsIGV4cHJlc3Npb24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9u
KG5vZGUsIHRleHQpe1xuXHRcdHJldHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29u
dGVudCB8fCAnJykuaW5kZXhPZih0ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5n
KSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVl
O1xuXHR9LFxuXG5cdCdsYXN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBm
YWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnBy
ZXZpb3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0
XHR2YXIgbmV4dCA9IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykp
IGlmIChuZXh0Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtc
blx0fSxcblxuXHQvKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBs
b2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRI
JyksXG5cblx0J250aC1sYXN0LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hp
bGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUn
OiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9z
TlRIVHlwZScsIHRydWUpLFxuXG5cdCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRI
UHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0Jywg
dHJ1ZSksXG5cblx0J2luZGV4JzogZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0
aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5c
blx0J2V2ZW4nOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1j
aGlsZCddKG5vZGUsICcybicpO1xuXHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5c
blx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cblx0J2ZpcnN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIg
bm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlv
dXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtc
blx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUg
PSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVy
biBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVu
Y3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5h
bWU7XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5u
b2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtc
blx0XHR3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUg
PT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQv
Kjwvb2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3Ncblxu
XHQnZW5hYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtc
blx0fSxcblxuXHQnZGlzYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5k
aXNhYmxlZDtcblx0fSxcblxuXHQnY2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVy
biBub2RlLmNoZWNrZWQgfHwgbm9kZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5j
dGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQgPT09IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwg
dGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290Jzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxu
XG5cdCdzZWxlY3RlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVk
O1xuXHR9XG5cblx0Lyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4g
cHNldWRvcykgbG9jYWxbJ3BzZXVkbzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1
dGVzIG1ldGhvZHNcblxudmFyIGF0dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0
ZXJzID0ge1xuXG5cdCdmb3InOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGlu
IHRoaXMpID8gdGhpcy5odG1sRm9yIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxu
XG5cdCdocmVmJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRo
aXMuZ2V0QXR0cmlidXRlKCdocmVmJywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xu
XHR9LFxuXG5cdCdzdHlsZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/
IHRoaXMuc3R5bGUuY3NzVGV4dCA6IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxu
XG5cdCd0YWJpbmRleCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlz
LmdldEF0dHJpYnV0ZU5vZGUoJ3RhYmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2Rl
ICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDog
bnVsbDtcblx0fSxcblxuXHQndHlwZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0
QXR0cmlidXRlKCd0eXBlJyk7XG5cdH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcp
O1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkg
PyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRl
R2V0dGVycy5NQVhMRU5HVEggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0
ZUdldHRlcnMubWF4bGVuZ3RoO1xuXG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGlj
ayA9ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8v
IFNsaWNrIGZpbmRlclxuXG5TbGljay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNz
aW9uLCBhcHBlbmQpe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24s
IGFwcGVuZCk7XG59O1xuXG5TbGljay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lv
bil7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1
ZSk7XG59O1xuXG4vLyBTbGljayBjb250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5z
ID0gZnVuY3Rpb24oY29udGFpbmVyLCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFp
bmVyKTtcblx0cmV0dXJuIGxvY2FsLmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4v
LyBTbGljayBhdHRyaWJ1dGUgZ2V0dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9u
KG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2Fs
LmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1
bmN0aW9uKG5vZGUsIG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJu
IGxvY2FsLmhhc0F0dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJc
blxuU2xpY2subWF0Y2ggPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUg
JiYgc2VsZWN0b3IpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3Ig
PT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0
dXJuIGxvY2FsLm1hdGNoTm9kZShub2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRy
aWJ1dGUgYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24o
bmFtZSwgZm4pe1xuXHRsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVy
biB0aGlzO1xufTtcblxuU2xpY2subG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFt
ZSl7XG5cdHJldHVybiBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xp
Y2sgcHNldWRvIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUs
IGZuKXtcblx0bG9jYWxbJ3BzZXVkbzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVu
dCl7XG5cdFx0cmV0dXJuIGZuLmNhbGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4g
dGhpcztcbn07XG5cblNsaWNrLmxvb2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIg
cHNldWRvID0gbG9jYWxbJ3BzZXVkbzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBm
dW5jdGlvbihhcmd1bWVudCl7XG5cdFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50
KTtcblx0fTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNz
b3JcblxuU2xpY2sub3ZlcnJpZGUgPSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3Zl
cnJpZGUocmVnZXhwLCBmbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBs
b2NhbC5pc1hNTDtcblxuU2xpY2sudWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxv
Y2FsLmdldFVJREhUTUwobm9kZSk7XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sg
PSBTbGljaztcblxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3Vu
ZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IEVsZW1lbnRcblxuZGVzY3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQg
aXRlbXMgaW4gTW9vVG9vbHMuIENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xs
YXJzIGZ1bmN0aW9uLCBhbmQgYW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVy
IG1ldGhvZHMgdG8gbGV0IHlvdSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxp
Y2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQs
IEFycmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBT
bGljay5GaW5kZXJdXG5cbnByb3ZpZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJh
bWUsIFNlbGVjdG9yc11cblxuLi4uXG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9
IGZ1bmN0aW9uKHRhZywgcHJvcHMpe1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0
cnVjdG9yc1t0YWddO1xuXHRpZiAoa29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9w
cyk7XG5cdGlmICh0eXBlb2YgdGFnICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFn
KS5zZXQocHJvcHMpO1xuXG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15b
XFx3LV0rJC8pLnRlc3QodGFnKSl7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZyku
ZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYn
IDogcGFyc2VkLnRhZztcblx0XHRpZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHBy
b3BzLmlkID0gcGFyc2VkLmlkO1xuXG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmli
dXRlcztcblx0XHRpZiAoYXR0cmlidXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRy
aWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtc
blx0XHRcdGlmIChwcm9wc1thdHRyLmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlm
IChhdHRyLnZhbHVlICE9IG51bGwgJiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIu
a2V5XSA9IGF0dHIudmFsdWU7XG5cdFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5v
cGVyYXRvcikgcHJvcHNbYXR0ci5rZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2Vk
LmNsYXNzTGlzdCAmJiBwcm9wc1snY2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBh
cnNlZC5jbGFzc0xpc3Quam9pbignICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0Vs
ZW1lbnQodGFnLCBwcm9wcyk7XG59O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVt
ZW50LnByb3RvdHlwZSA9IEJyb3dzZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQg
SUU5IHJlcXVpcmUgdGhlIHdyYXBwaW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50
ID0gKGZ1bmN0aW9uKGZpcmVFdmVudCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50
KXtcblx0XHRcdHJldHVybiBmaXJlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0
fTtcblx0fSkoRWxlbWVudC5wcm90b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0Vs
ZW1lbnQnLCBFbGVtZW50KS5taXJyb3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90
b3R5cGVbbmFtZV0pIHJldHVybjtcblxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVu
dHMgPSB0cnVlO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0g
ZWxlbWVudFtuYW1lXS5hcHBseShlbGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVs
ZW1lbnRzICYmIHR5cGVPZihyZXN1bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVy
biAoZWxlbWVudHMpID8gbmV3IEVsZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxu
XHRFbGVtZW50cy5pbXBsZW1lbnQob2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7
XG5cdEVsZW1lbnQucGFyZW50ID0gT2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xu
XHRcdCckY29uc3RydWN0b3InOiBFbGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29u
dmVydCgnZWxlbWVudCcpLmhpZGUoKVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9u
KG5hbWUsIG1ldGhvZCl7XG5cdFx0RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5c
dH0pO1xufVxuXG5FbGVtZW50LkNvbnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9
IG5ldyBUeXBlKCdJRnJhbWUnLCBmdW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGlu
ayhhcmd1bWVudHMsIHtcblx0XHRwcm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFt
ZTogZnVuY3Rpb24ob2JqKXtcblx0XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0
fSk7XG5cblx0dmFyIHByb3BzID0gcGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0
aWYgKHBhcmFtcy5pZnJhbWUpIGlmcmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xu
XHR2YXIgb25sb2FkID0gcHJvcHMub25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHBy
b3BzLm9ubG9hZDtcblx0cHJvcHMuaWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5u
YW1lLCBpZnJhbWUgPyAoaWZyYW1lLmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0
cmluZy51bmlxdWVJRCgpXS5waWNrKCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8
fCAnaWZyYW1lJywgcHJvcHMpO1xuXG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9u
bG9hZC5jYWxsKGlmcmFtZS5jb250ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZy
YW1lc1twcm9wcy5pZF0pIG9uTG9hZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9h
ZCcsIG9uTG9hZCk7XG5cdHJldHVybiBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhp
cy5FbGVtZW50cyA9IGZ1bmN0aW9uKG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0
aCl7XG5cdFx0dmFyIHVuaXF1ZXMgPSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9k
ZSA9IG5vZGVzW2krK107KXtcblx0XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0
XHRcdGlmICghdW5pcXVlc1t1aWRdKXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0
XHRcdFx0dGhpcy5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVu
dHMucHJvdG90eXBlID0ge2xlbmd0aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxu
bmV3IFR5cGUoJ0VsZW1lbnRzJywgRWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBm
dW5jdGlvbihmaWx0ZXIsIGJpbmQpe1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0
XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikg
PT0gJ3N0cmluZycpID8gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChm
aWx0ZXIpO1xuXHRcdH0gOiBmaWx0ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVz
aDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2
YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBp
dGVtID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xl
bmd0aCsrXSA9IGl0ZW07XG5cdFx0fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgp
O1xuXHR9LnByb3RlY3QoKSxcblxuXHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVt
cyA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7
IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0
XHRpZiAoaXRlbSkgaXRlbXMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnBy
b3RvdHlwZS51bnNoaWZ0LmFwcGx5KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0
Y29uY2F0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0
aGlzKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0Vu
dW1lcmFibGUoaXRlbSkpIG5ld0VsZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3
RWxlbWVudHMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9
LnByb3RlY3QoKSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAo
dmFyIGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChj
b2xsZWN0aW9uW2ldKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1w
dHk6IGZ1bmN0aW9uKCl7XG5cdFx0d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRo
aXMubGVuZ3RoXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxu
XG4oZnVuY3Rpb24oKXtcblxuLy8gRkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBl
LnNwbGljZSwgb2JqZWN0ID0geycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2Uu
Y2FsbChvYmplY3QsIDEsIDEpO1xuaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1l
bnQoJ3NwbGljZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0
dmFyIHJlc3VsdCA9IHNwbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVu
Z3RoID49IHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1
bHQ7XG59LnByb3RlY3QoKSk7XG5cbkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9k
LCBuYW1lKXtcblx0RWxlbWVudHMuaW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJy
YXkubWlycm9yKEVsZW1lbnRzKTtcblxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNj
ZXB0c0hUTUw7XG50cnkge1xuXHRjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnPGlucHV0IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChl
KXt9XG5cbnZhciBlc2NhcGVRdW90ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyAr
IGh0bWwpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xu
fTtcbi8qPC9sdElFOD4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNl
dCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rp
b24oKXtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0
ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7
bWFyZ2luOiAwcHg7fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAo
ZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1w
bGVtZW50KHtcblxuXHRuZXdFbGVtZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAo
cHJvcHMpe1xuXHRcdFx0aWYgKHByb3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENo
ZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2Jv
eCcgfHwgcHJvcHMudHlwZSA9PSAncmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9w
cy52YWx1ZSA9ICdvbic7XG5cdFx0XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0
byBiZSBzZXQgYmVmb3JlIGNoYW5naW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0
aWYgKCFjYW5DaGFuZ2VTdHlsZUhUTUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIg
c3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0
c3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRp
ZiAocHJvcHMudHlwZSkgZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlk
KHN0eWxlRWxlbWVudCkuc2V0KHByb3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xu
XHRcdFx0Lyo8bHRJRTg+Ki8vLyBGaXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVy
dGllcyBpbiBJRSA8IDhcblx0XHRcdGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRc
dFx0XHR0YWcgPSAnPCcgKyB0YWc7XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBu
YW1lPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChw
cm9wcy50eXBlKSB0YWcgKz0gJyB0eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSAr
ICdcIic7XG5cdFx0XHRcdHRhZyArPSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xu
XHRcdFx0XHRkZWxldGUgcHJvcHMudHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xu
XHRcdH1cblx0XHRyZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHBy
b3BzKTtcblx0fVxuXG59KTtcblxufSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9m
KHdpbmRvdyk7XG5TbGljay51aWRPZihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7
XG5cblx0bmV3VGV4dE5vZGU6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0
ZVRleHROb2RlKHRleHQpO1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy53aW5kb3c7XG5cdH0sXG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5
cGVzID0ge1xuXG5cdFx0XHRzdHJpbmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0
XHRcdGlkID0gU2xpY2suZmluZChkb2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxc
JDEnKSk7XG5cdFx0XHRcdHJldHVybiAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6
IG51bGw7XG5cdFx0XHR9LFxuXG5cdFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtc
blx0XHRcdFx0U2xpY2sudWlkT2YoZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZh
bWlseSAmJiAhKC9eKD86b2JqZWN0fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0
XHRcdFx0dmFyIGZpcmVFdmVudCA9IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGlu
ZyBuZWVkZWQgaW4gSUU3LCBvciBlbHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9
IGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlw
ZSwgZXZlbnQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxl
bWVudC5Qcm90b3R5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0s
XG5cblx0XHRcdG9iamVjdDogZnVuY3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlm
IChvYmoudG9FbGVtZW50KSByZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyks
IG5vY2FzaCk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRc
dHR5cGVzLnRleHRub2RlID0gdHlwZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVz
LmRvY3VtZW50ID0gZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xu
XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYg
ZWwuJGZhbWlseSAmJiBlbC51bmlxdWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBl
ID0gdHlwZU9mKGVsKTtcblx0XHRcdHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0o
ZWwsIG5vY2FzaCwgZG9jIHx8IGRvY3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5c
bn0pO1xuXG5pZiAod2luZG93LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0
aW9uKGVsLCBuYyl7XG5cdHJldHVybiBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQp
O1xufSk7XG5cbldpbmRvdy5pbXBsZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmRvY3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50
XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVz
c2lvbil7XG5cdFx0cmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxl
bWVudHMpO1xuXHR9LFxuXG5cdGdldEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxu
XG59KTtcblxudmFyIGNvbnRhaW5zID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0
cmV0dXJuIFNsaWNrLmNvbnRhaW5zKHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1l
bnQuY29udGFpbnMpIERvY3VtZW50LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlu
cyk7XG5cblxuXG4vLyB0cmVlIHdhbGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5j
dGlvbihleHByZXNzaW9uLCBjb21iaW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4g
Y29tYmluYXRvcjtcblxuXHRleHByZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4
cHJlc3Npb24pKTtcblxuXHR2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25z
O1xuXHRmb3IgKHZhciBpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Np
b25zW2ldWzBdLmNvbWJpbmF0b3IgPSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9u
O1xufTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3Vz
OiAnIX4nLFxuXHRnZXRQYXJlbnQ6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9k
KXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29t
YmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6
ICd+Jyxcblx0Z2V0QWxsUHJldmlvdXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRn
ZXRDaGlsZHJlbjogJz4nLFxuXHRnZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0
b3IsIG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVz
c2lvbil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHBy
ZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtc
blxuXHRnZXRGaXJzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50
LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+Jykp
WzBdKTtcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1
cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVz
c2lvbiwgJz4nKSkuZ2V0TGFzdCgpKTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9j
dW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxc
blxuXHRnZXRFbGVtZW50QnlJZDogZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5p
ZChTbGljay5maW5kKHRoaXMsICcjJyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxc
XCQxJykpKTtcblx0fSxcblxuXHRtYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0
dXJuICFleHByZXNzaW9uIHx8IFNsaWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5c
bn0pO1xuXG5cblxuaWYgKHdpbmRvdy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcs
IGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0
aWYgKHR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlz
LmRvY3VtZW50LCBzZWxlY3RvciwgbmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlz
RW51bWVyYWJsZShzZWxlY3RvcikpIHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9
XG5cdHJldHVybiBuZXcgRWxlbWVudHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNc
blxudmFyIGluc2VydGVycyA9IHtcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1l
bnQpe1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVu
dCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRl
cjogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQu
cGFyZW50Tm9kZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQs
IGVsZW1lbnQubmV4dFNpYmxpbmcpO1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4
dCwgZWxlbWVudCl7XG5cdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxu
XHR0b3A6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVm
b3JlKGNvbnRleHQsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJz
Lmluc2lkZSA9IGluc2VydGVycy5ib3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFBy
b3BlcnR5XG5cbnZhciBwcm9wZXJ0eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307
XG5cbi8vIHByb3BlcnRpZXNcblxudmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2go
W1xuXHQndHlwZScsICd2YWx1ZScsICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQ
YWRkaW5nJywgJ2NlbGxTcGFjaW5nJywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93
U3BhbicsICd0YWJJbmRleCcsICd1c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHBy
b3BlcnRpZXNbcHJvcGVydHkudG9Mb3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9w
ZXJ0aWVzLmh0bWwgPSAnaW5uZXJIVE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS50ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAn
dGV4dENvbnRlbnQnO1xuXG5PYmplY3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFs
LCBrZXkpe1xuXHRwcm9wZXJ0eVNldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtc
blx0XHRub2RlW3JlYWxdID0gdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0g
ZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8
bHRJRTk+Ki9cbnByb3BlcnR5U2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBm
dW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUn
KSBub2RlLnNldCgnaHRtbCcsIHZhbHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0
XSA9IHZhbHVlO1xuXHR9O1xufSkocHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdl
dHRlcnMudGV4dCA9IChmdW5jdGlvbihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7
XG5cdFx0cmV0dXJuIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRN
TCA6IGdldHRlcihub2RlKTtcblx0fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9s
dElFOT4qL1xuXG4vLyBCb29sZWFuc1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25v
d3JhcCcsICdpc21hcCcsICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNh
YmxlZCcsICdyZWFkT25seScsICdtdWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5c
dCdkZWZlcicsICdkZWZhdWx0Q2hlY2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0
b3BsYXknLFxuXHQnbG9vcCdcbl07XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFj
aChib29scywgZnVuY3Rpb24oYm9vbCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2Uo
KTtcblx0Ym9vbGVhbnNbbG93ZXJdID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9
IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtc
blx0cHJvcGVydHlHZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAh
IW5vZGVbYm9vbF07XG5cdH07XG59KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBw
ZW5kKHByb3BlcnR5U2V0dGVycywge1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KXtcblx0XHQoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8
fCAnJykgOiBub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zv
cic6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9k
ZS5odG1sRm9yID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9
LFxuXG5cdCdzdHlsZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkg
PyBub2RlLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScs
IHZhbHVlKTtcblx0fSxcblxuXHQndmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0
bm9kZS52YWx1ZSA9ICh2YWx1ZSAhPSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5c
bnByb3BlcnR5R2V0dGVyc1snY2xhc3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdj
bGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0
cmlidXRlKCdjbGFzcycpO1xufTtcblxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFu
ZCB0aHJvd3NcbnRyeSB7IGVsLnR5cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVs
LnR5cGUgIT0gJ2J1dHRvbicpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwg
dmFsdWUpe1xuXHRub2RlLnNldEF0dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51
bGw7XG4vKiA8L3dlYmtpdD4gKi9cblxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5
IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5
bGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdzdHlsZScpLFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1M
ID0gJyNqdXN0VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhU
TUw7XG5cdH0gY2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5Piov
XG5cbnZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxl
SW5wdXRWYWx1ZSwgaHRtbDVJbnB1dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9
ICd0JztcbmlucHV0LnR5cGUgPSAnc3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0
LnZhbHVlICE9ICd0JztcblxuLy8gIzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50
XCIgd2hlbiB0cnlpbmcgdG8gdXNlIGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52
YWx1ZSA9ICcnO1xuXHRpbnB1dC50eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQg
PSBpbnB1dC50eXBlID09ICdlbWFpbCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtc
blxuaWYgKHZvbGF0aWxlSW5wdXRWYWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5
U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZh
bHVlID0gbm9kZS52YWx1ZTtcblx0XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUg
PSB2YWx1ZTtcblx0fSBjYXRjaCAoZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0
eSwgc2V0UHJvcGVydHkgKi9cblxuLyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmli
dXRlID0gKGZ1bmN0aW9uKGRpdil7XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0
dXJuIChkaXYuZ2V0QXR0cmlidXRlKCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlv
bih0ZXN0KXtcblx0dGVzdC5pbm5lckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3Vs
ZF9maXhcIiB2YWx1ZT1cInRoZSB1bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVz
dC5jbG9uZU5vZGUodHJ1ZSkuZmlyc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSko
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhh
c0NsYXNzTGlzdCA9ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xu
XG52YXIgY2xhc3NlcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0g
KGNsYXNzTmFtZSB8fCAnJykuY2xlYW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJl
dHVybiBjbGFzc05hbWVzLmZpbHRlcihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFz
c05hbWUgIT09ICcnICYmICF1bmlxdWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNz
TmFtZV0gPSBjbGFzc05hbWU7XG5cdH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVu
Y3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1v
dmVGcm9tQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92
ZShuYW1lKTtcbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVu
Y3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFt
ZS50b0xvd2VyQ2FzZSgpXTtcblx0XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2
YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRy
aWJ1dEFsbG93TGlzdDtcblx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRB
bGxvd0xpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywge30pO1xuXHRc
dFx0LyogPC9sdElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHR0
aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRcdFx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dEFsbG93TGlzdFtuYW1l
XTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMu
c2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5c
dFx0XHRcdGlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0W25hbWVd
ID0gdHJ1ZTtcblx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7
XG5cdFx0Zm9yICh2YXIgYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHko
YXR0cmlidXRlLCBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdGdldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJv
cGVydHlHZXR0ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJu
IGdldHRlcih0aGlzKTtcblx0XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0
cmlidXRlKXtcblx0XHRcdHZhciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBh
dHRyaWJ1dGVBbGxvd0xpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlQWxsb3dMaXN0Jywg
e30pO1xuXHRcdFx0aWYgKCFhdHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFu
ZG8gJiYgIWF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRo
aXMub3V0ZXJIVE1MO1xuXHRcdFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQg
ZmluZCBtZW50aW9uIG9mIGF0dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIo
MCwgb3V0ZXIuc2VhcmNoKC9cXC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5h
bWUpIDwgMCkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9
IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3Vs
dCA9IFNsaWNrLmdldEF0dHJpYnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQg
JiYgIVNsaWNrLmhhc0F0dHJpYnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9
LFxuXG5cdGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5j
b252ZXJ0KGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHks
IHRoaXMpLmFzc29jaWF0ZShhcmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rp
b24obmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0s
XG5cblx0cmVtb3ZlUHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3Vt
ZW50cywgdGhpcy5yZW1vdmVQcm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0c2V0OiBmdW5jdGlvbihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxl
bWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8g
cHJvcGVydHkuc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2
YWx1ZSk7XG5cdH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xu
XHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4g
KHByb3BlcnR5ICYmIHByb3BlcnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0
aGlzLmdldFByb3BlcnR5KHByb3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6
IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1tw
cm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2Uu
YXBwbHkodGhpcykgOiB0aGlzLnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUp
e1xuXHRcdHJldHVybiB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDog
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSku
Y29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8g
ZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRU
b0NsYXNzTGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFz
c05hbWUpe1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0
aGlzLmNsYXNzTmFtZSkuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJl
bW92ZUNsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNz
ZXMoY2xhc3NOYW1lKS5mb3JFYWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1l
cyA9IGNsYXNzZXModGhpcy5jbGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JF
YWNoKGNsYXNzTmFtZXMuZXJhc2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0g
Y2xhc3NOYW1lcy5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xl
Q2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxs
KSBmb3JjZSA9ICF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkg
PyB0aGlzLmFkZENsYXNzKGNsYXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7
XG5cdH0sXG5cblx0YWRvcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZy
YWdtZW50LCBlbGVtZW50cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxl
bWVudHMubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50
c1tpXSwgdHJ1ZSk7XG5cdFx0XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1l
bnQpO1xuXHRcdH1cblxuXHRcdGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVu
dCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0
ZXh0LCB3aGVyZSl7XG5cdFx0cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3
VGV4dE5vZGUodGV4dCksIHdoZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hl
cmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRy
dWUpLCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9u
KGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1
bWVudC5pZChlbCwgdHJ1ZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2Vz
OiBmdW5jdGlvbihlbCl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwu
cGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdHdyYXBzOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQo
ZWwsIHRydWUpO1xuXHRcdHJldHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7
XG5cdH0sXG5cblx0Z2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZElu
ZGV4OyAvLyBTYWZhcmkgMy4yLjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZl
cnQodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBv
cHRpb24uc2VsZWN0ZWQ7XG5cdFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygn
aW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0
eXBlID0gZWwudHlwZTtcblx0XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBl
ID09ICdzdWJtaXQnIHx8IHR5cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBl
ID09ICdpbWFnZScpIHJldHVybjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykg
PT0gJ3NlbGVjdCcpID8gZWwuZ2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRc
dFx0Ly8gSUVcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xu
XHRcdFx0fSkgOiAoKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFl
bC5jaGVja2VkKSA/IG51bGwgOiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZl
cnQodmFsdWUpLmVhY2goZnVuY3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0g
J3VuZGVmaW5lZCcpIHF1ZXJ5U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUp
ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5c
dFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBl
bmRIVE1MXG5cbnZhciBhcHBlbmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2lu
Jyxcblx0YWZ0ZXI6ICdhZnRlckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDog
J2FmdGVyQmVnaW4nLFxuXHRpbnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxl
bWVudCgnYXBwZW5kSFRNTCcsICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSkgPyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0
QWRqYWNlbnRIVE1MKGFwcGVuZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xu
XHRyZXR1cm4gdGhpcztcbn0gOiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0g
bmV3IEVsZW1lbnQoJ2RpdicsIHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNo
aWxkTm9kZXMsXG5cdFx0ZnJhZ21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFn
bWVudCkgcmV0dXJuIHRoaXM7XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFn
bWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5h
cHBlbmRDaGlsZChjaGlsZHJlbltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJl
IHx8ICdib3R0b20nXShmcmFnbWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZh
ciBjb2xsZWN0ZWQgPSB7fSwgc3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlk
KXtcblx0cmV0dXJuIChzdG9yYWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xu
XG52YXIgY2xlYW4gPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVt
YmVyO1xuXHRpZiAoaXRlbS5yZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlm
IChpdGVtLmNsZWFyQXR0cmlidXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVp
ZCAhPSBudWxsKXtcblx0XHRkZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3Jh
Z2VbdWlkXTtcblx0fVxuXHRyZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5w
dXQ6ICdjaGVja2VkJywgb3B0aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5c
bkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBj
aGlsZHJlbiA9IGNsZWFuKHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJy
YXkuZWFjaChjaGlsZHJlbiwgY2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0
XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5j
b252ZXJ0KHRoaXMuY2hpbGROb2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlz
LnBhcmVudE5vZGUpID8gdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztc
blx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVu
dHMgPSBjb250ZW50cyAhPT0gZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUo
Y29udGVudHMpLCBjZSA9IFtjbG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRl
bnRzKXtcblx0XHRcdGNlLmFwcGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJykpKTtcblx0XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsg
aS0tOyl7XG5cdFx0XHR2YXIgbm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRp
ZiAoIWtlZXBpZCkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4q
L1xuXHRcdFx0aWYgKG5vZGUuY2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0
dHJpYnV0ZXMoKTtcblx0XHRcdFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0
XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5v
ZGUub3B0aW9ucyl7XG5cdFx0XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1l
bnQub3B0aW9ucztcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tq
XS5zZWxlY3RlZCA9IGVvW2pdLnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQv
KjwvbHRJRTk+Ki9cblx0XHRcdHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50
b0xvd2VyQ2FzZSgpXTtcblx0XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJv
cF0gPSBlbGVtZW50W3Byb3BdO1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhh
c0Nsb25lQnVnKXtcblx0XHRcdHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdv
YmplY3QnKSwgdG8gPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRc
dGZvciAoaSA9IGNvLmxlbmd0aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJI
VE1MO1xuXHRcdH1cblx0XHQvKjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xv
bmUpO1xuXHR9XG5cbn0pO1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdp
bXBsZW1lbnQnLCB7XG5cblx0YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRp
ZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0
XHRjb2xsZWN0ZWRbU2xpY2sudWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRo
aXMuYWRkRXZlbnRMaXN0ZW5lcikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFy
Z3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5
cGUsIGZuKXtcblx0XHRpZiAodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2
ZW50TGlzdGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0
YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRy
ZXRyaWV2ZTogZnVuY3Rpb24ocHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0
KFNsaWNrLnVpZE9mKHRoaXMpKSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChk
Zmx0ICE9IG51bGwgJiYgcHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBk
Zmx0O1xuXHRcdHJldHVybiBwcm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRz
dG9yZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChT
bGljay51aWRPZih0aGlzKSk7XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0
XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3Jh
Z2VbcHJvcGVydHldO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4q
L1xuaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xu
XHR2YXIgZ2MgPSBmdW5jdGlvbigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4p
O1xuXHRcdGlmICh3aW5kb3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0
d2luZG93LnJlbW92ZUxpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRM
aXN0ZW5lcigndW5sb2FkJywgZ2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVy
dGllcyA9IHt9O1xuXG5cblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDog
ZnVuY3Rpb24oc3R5bGUpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxu
XG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9
LFxuXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xu
XHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xu
XG5FbGVtZW50LlByb3BlcnRpZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xu
XHRcdGlmIChodG1sID09IG51bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRt
bCkgPT0gJ2FycmF5JykgaHRtbCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xu
XHRcdGlmICh0aGlzLnN0eWxlU2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHls
ZVNoZWV0LmNzc1RleHQgPSBodG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhU
TUwgPSBodG1sO1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRt
bCcsICcnKTtcblx0fVxuXG59O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwg
c3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVl
O1xuXG4vKjxsdElFOT4qL1xuLy8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJh
cnRsZXR0LmNvbS9pbm5lcnNoaXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7XG52YXIgZnJhZ21lbnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1
cHBvcnRzSFRNTDVFbGVtZW50cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAo
IXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lk
ZSBhdWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIg
aGVhZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1t
YXJ5IHRpbWUgdmlkZW8nLnNwbGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpLCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdt
ZW50LmNyZWF0ZUVsZW1lbnQodGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5Piov
XG5cbi8qPElFPiovXG5zdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChm
dW5jdGlvbigpe1xuXHR2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScp
O1xuXHR0YWJsZS5pbm5lckhUTUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRy
dWU7XG59KTtcblxuLyo8bHRGRjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3RyJyksIGh0bWwgPSAnPHRkPjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0
c1RSSW5uZXJIVE1MID0gKHRyLmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9s
dEZGND4qL1xuXG5pZiAoIXN1cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5l
ckhUTUwgfHwgIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVz
Lmh0bWwuc2V0ID0gKGZ1bmN0aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xu
XHRcdFx0dGFibGU6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBb
MSwgJzxzZWxlY3Q+JywgJzwvc2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0
Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9k
eT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0
aW9ucy50aGVhZCA9IHRyYW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxu
XHRcdHJldHVybiBmdW5jdGlvbihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlm
ICh0aGlzLnN0eWxlU2hlZXQpIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8q
PC9sdElFOT4qL1xuXHRcdFx0dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycp
XTtcblx0XHRcdGlmICghd3JhcCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAs
ICcnLCAnJ107XG5cdFx0XHRpZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtc
blxuXHRcdFx0dmFyIGxldmVsID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpLCB0YXJnZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1
RWxlbWVudHMpIGZyYWdtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5p
bm5lckhUTUwgPSBbd3JhcFsxXSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xu
XHRcdFx0d2hpbGUgKGxldmVsLS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0
dGhpcy5lbXB0eSgpLmFkb3B0KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9y
dHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdy
YXBwZXIgPSBudWxsO1xuXHRcdH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0
KTtcbn1cbi8qPC9JRT4qL1xuXG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZm9ybScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9w
dGlvbj5zPC9vcHRpb24+PC9zZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFs
dWUgIT0gJ3MnKSBFbGVtZW50LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0dmFyIHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9
ICdzZWxlY3QnKSByZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0
dmFyIG9wdGlvbnMgPSB0aGlzLmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0
cmluZyh2YWx1ZSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsr
KXtcblx0XHRcdHZhciBvcHRpb24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9u
LmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIg
JiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xu
XHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9
IHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9u
ID0gdGhpcywgdGFnID0gb3B0aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxl
Y3QnICYmIHRhZyAhPSAnb3B0aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7
XG5cblx0XHRpZiAodGFnID09ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVj
dGVkKClbMF0pKSByZXR1cm4gJyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1
dGVOb2RlKCd2YWx1ZScpO1xuXHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBv
cHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0g
bnVsbDtcbi8qPC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9
IHtcblx0c2V0OiBmdW5jdGlvbihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRl
Tm9kZSgnaWQnKS52YWx1ZSA9IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuIHRoaXMuaWQgfHwgbnVsbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhp
cy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xu
Lyo8L0lFPiovXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIHRoZSBFdmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jv
c3MtYnJvd3Nlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
V2luZG93LCBEb2N1bWVudCwgQXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJv
dmlkZXM6IEV2ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9
O1xudmFyIG5vcm1hbGl6ZVdoZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3Jt
YWxpemVkO1xuXHRpZiAoZXZlbnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50
LndoZWVsRGVsdGEgJSAxMjAgPT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53
aGVlbERlbHRhIC8gMTI7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRl
bHRhWSB8fCBldmVudC5kZXRhaWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQg
JSAzID09IDAgPyByYXdBbW91bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVy
biBub3JtYWxpemVkO1xufTtcblxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBU
eXBlKCdET01FdmVudCcsIGZ1bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0g
d2luZG93O1xuXHRldmVudCA9IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRl
bmRlZCkgcmV0dXJuIGV2ZW50O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVu
ZGVkID0gdHJ1ZTtcblx0dGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRy
b2wgPSBldmVudC5jdHJsS2V5O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5t
ZXRhID0gZXZlbnQubWV0YUtleTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBl
O1xuXHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdo
aWxlICh0YXJnZXQgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJl
bnROb2RlO1xuXHR0aGlzLnRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5
cGUuaW5kZXhPZigna2V5JykgPT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZl
bnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUg
IT0gJ2tleXByZXNzJykgdGhpcy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAn
a2V5ZG93bicgfHwgdHlwZSA9PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNv
ZGUgPCAxMjQpIHRoaXMua2V5ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAo
Y29kZSA+IDk1ICYmIGNvZGUgPCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0
XHRpZiAodGhpcy5rZXkgPT0gbnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNv
ZGUpLnRvTG93ZXJDYXNlKCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUg
PT0gJ2RibGNsaWNrJyB8fCB0eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwn
IHx8IHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0g
MCl7XG5cdFx0dmFyIGRvYyA9IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRN
b2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5i
b2R5O1xuXHRcdHRoaXMucGFnZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/
IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTog
KGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9j
LnNjcm9sbFRvcFxuXHRcdH07XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQu
cGFnZVggIT0gbnVsbCkgPyBldmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNs
aWVudFgsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdp
bi5wYWdlWU9mZnNldCA6IGV2ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdE
T01Nb3VzZVNjcm9sbCcgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwn
KSB0aGlzLndoZWVsID0gbm9ybWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdo
dENsaWNrID0gKGV2ZW50LndoaWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlm
ICh0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdt
b3VzZWVudGVyJyB8fCB0eXBlID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdl
dCA9IHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2
YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAn
ZnJvbScgOiAndG8nKSArICdFbGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxh
dGVkLm5vZGVUeXBlID09IDMpIHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0
aGlzLnJlbGF0ZWRUYXJnZXQgPSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxz
ZSBpZiAodHlwZS5pbmRleE9mKCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJl
JykgPT0gMCl7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMu
c2NhbGUgPSBldmVudC5zY2FsZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJn
ZXRUb3VjaGVzO1xuXHRcdHRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hl
cztcblx0XHR2YXIgdG91Y2hlcyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0
aWYgKHRvdWNoZXMgJiYgdG91Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBd
O1xuXHRcdFx0dGhpcy5wYWdlID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5c
dFx0XHR0aGlzLmNsaWVudCA9IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtc
blx0XHR9XG5cdH1cblxuXHRpZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRp
ZiAoIXRoaXMucGFnZSkgdGhpcy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50
KHtcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0
KCkuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlv
bigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9w
UHJvcGFnYXRpb24oKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtc
blx0XHRpZiAodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVm
YXVsdCgpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihj
b2RlLCBrZXkpe1xuXHRfa2V5c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5E
T01FdmVudC5kZWZpbmVLZXlzID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRy
dWUpO1xuXG5ET01FdmVudC5kZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24n
LCAnMzcnOiAnbGVmdCcsICczOSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3Bh
Y2UnLCAnOCc6ICdiYWNrc3BhY2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEz
JzogJ2VudGVyJ1xufSk7XG5cbn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVt
ZW50LkV2ZW50XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRl
YWxpbmcgd2l0aCBldmVudHMuIFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5k
IG1vdXNlbGVhdmUgY3VzdG9tIEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5w
cm92aWRlczogRWxlbWVudC5FdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMuZXZlbnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5h
ZGRFdmVudHMoZXZlbnRzKTtcbn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52
b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0
XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZl
bnRzW3R5cGVdKSBldmVudHNbdHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlm
IChldmVudHNbdHlwZV0ua2V5cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50
c1t0eXBlXS5rZXlzLnB1c2goZm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRj
dXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRc
dFx0c2VsZiA9IHRoaXM7XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRk
KSBjdXN0b20ub25BZGQuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNv
bmRpdGlvbil7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0
XHRpZiAoY3VzdG9tLmNvbmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZu
LmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xu
XHRcdFx0fVxuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZl
cnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0g
ZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFy
IG5hdGl2ZUV2ZW50ID0gRWxlbWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChu
YXRpdmVFdmVudCl7XG5cdFx0XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4g
PSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQs
IHNlbGYuZ2V0V2luZG93KCkpO1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBl
dmVudCkgPT09IGZhbHNlKSBldmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0
XHR0aGlzLmFkZExpc3RlbmVyKHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1c
blx0XHRldmVudHNbdHlwZV0udmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRz
ID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0
eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFy
IGluZGV4ID0gbGlzdC5rZXlzLmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0
dXJuIHRoaXM7XG5cdFx0dmFyIHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0
ZSBsaXN0LmtleXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0
dmFyIGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRc
dFx0aWYgKGN1c3RvbS5vblJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5
cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0
b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5h
dGl2ZUV2ZW50c1t0eXBlXSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1
bWVudHNbMl0pIDogdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdFx0Zm9yICh2YXIgZXZlbnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVu
dHNbZXZlbnRdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1
bmN0aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09
ICdvYmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQo
dHlwZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIg
YXR0YWNoZWQgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSBy
ZXR1cm4gdGhpcztcblx0XHRpZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNo
ZWQpIHRoaXMucmVtb3ZlRXZlbnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50
cycpO1xuXHRcdH0gZWxzZSBpZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtl
dmVudHNdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQo
ZXZlbnRzLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVu
dHNdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0
aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgn
ZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7
XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5
cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRo
aXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJv
bSwgdHlwZSl7XG5cdFx0ZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMg
PSBmcm9tLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7
XG5cdFx0aWYgKCF0eXBlKXtcblx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRo
aXMuY2xvbmVFdmVudHMoZnJvbSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0
eXBlXSl7XG5cdFx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRc
dFx0dGhpcy5hZGRFdmVudCh0eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRj
bGljazogMiwgZGJsY2xpY2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1l
bnU6IDIsIC8vbW91c2UgYnV0dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91
c2VTY3JvbGw6IDIsIC8vbW91c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwg
bW91c2Vtb3ZlOiAyLCBzZWxlY3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVt
ZW50XG5cdGtleWRvd246IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRv
cmllbnRhdGlvbmNoYW5nZTogMiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92
ZTogMiwgdG91Y2hlbmQ6IDIsIHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3Rh
cnQ6IDIsIGdlc3R1cmVjaGFuZ2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9j
dXM6IDIsIGJsdXI6IDIsIGNoYW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAy
LCBwYXN0ZTogMiwgaW5wdXQ6IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6
IDEsIGJlZm9yZXVubG9hZDogMiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVk
OiAxLCByZWFkeXN0YXRlY2hhbmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3Bz
dGF0ZTogMiwgcGFnZXNob3c6IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAx
LCBhYm9ydDogMSwgc2Nyb2xsOiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5F
dmVudHMgPSB7XG5cdG1vdXNld2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1l
bnQgPyAnd2hlZWwnIDogJ29ubW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcg
OiAnRE9NTW91c2VTY3JvbGwnXG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50
KXtcblx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9
PSBudWxsKSByZXR1cm4gdHJ1ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJl
dHVybiAocmVsYXRlZCAhPSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVP
Zih0aGlzKSAhPSAnZG9jdW1lbnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5c
bmlmICgnb25tb3VzZWVudGVyJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVt
ZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2Vs
ZWF2ZSA9IDI7XG5cdEVsZW1lbnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xu
XHRFbGVtZW50LkV2ZW50cy5tb3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxu
XHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZl
ID0ge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xu
fVxuXG4vKjxsdElFOT4qL1xuaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1l
bnQuTmF0aXZlRXZlbnRzLnByb3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hh
bmdlID0ge1xuXHRcdGJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlw
ZTtcblx0XHRcdHJldHVybiAodGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0g
J3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hh
bmdlJztcblx0XHR9LFxuXHRcdGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0
dXJuIGV2ZW50LnR5cGUgIT0gJ3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0
eU5hbWUgPT0gJ2NoZWNrZWQnO1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxu
fSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRp
b246IEV4dGVuZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxl
Z2F0ZSBtZXRob2QgZm9yIG1vcmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnBy
b3ZpZGVzOiBbRWxlbWVudC5EZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgZXZlbnRMaXN0ZW5lclN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xu
XG5FbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9j
dXNvdXQgPSAyO1xuXG52YXIgYnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2
ZW50LCB0YXJnZXQpe1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRp
ZiAobWF0Y2godGFyZ2V0LCBldmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRh
cmdldCk7XG5cdFx0dGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9
XG59O1xuXG52YXIgbWFwID0ge1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3Zl
cicsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3Vz
ZWxlYXZlOiB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQu
TW91c2VlbnRlckNoZWNrXG5cdH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChl
dmVudExpc3RlbmVyU3VwcG9ydCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9
LFxuXHRibHVyOiB7XG5cdFx0YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAn
Zm9jdXNvdXQnLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZh
ciBfa2V5ID0gJyRkZWxlZ2F0aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlw
ZSl7XG5cblx0cmV0dXJuIHtcblxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTog
ZnVuY3Rpb24oc2VsZiwgdWlkKXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5
ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3Qu
Zm9ybXMpIGZvciAodmFyIGkgPSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8v
IHRoZSBmb3JtIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxu
XHRcdFx0XHQvLyByZW1vdmVFdmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBl
dmVudCB3YXNcblx0XHRcdFx0Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5m
b3Jtc1tpXS5yZW1vdmVFdmVudCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0
LmZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwg
bWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0
LmdldCgndGFnJykgPT0gJ2Zvcm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQo
J2Zvcm0nKTtcblx0XHRcdGlmICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJz
ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRc
dGxpc3RlbmVyID0gbGlzdGVuZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0
XHRcdGZvcm1zID0gbGlzdGVuZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0
aWYgKGZvcm1zLmluZGV4T2YoZm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2go
Zm9ybSk7XG5cblx0XHRcdHZhciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJs
ZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9y
bS5hZGRFdmVudCh0eXBlLCBfZm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlz
dGVuZXJzW3VpZF0gPSBsaXN0ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAn
bGlzdGVuZXJzJywgbGlzdGVuZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNl
cnZlciA9IGZ1bmN0aW9uKHR5cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxc
blx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5c
dFx0XHR2YXIgZXZlbnRzID0ge2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3Zl
RXZlbnRzKGV2ZW50cyk7XG5cdFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9u
KGV2ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0
KTtcblx0XHRcdH07XG5cdFx0XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0
fVxuXHR9O1xufTtcblxuaWYgKCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZCht
YXAsIHtcblx0c3VibWl0OiBmb3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9i
c2VydmVyKCdyZXNldCcpLFxuXHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRz
ZWxlY3Q6IGlucHV0T2JzZXJ2ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIg
cHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxc
blx0cmVtb3ZlRXZlbnQgPSBwcm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rp
b24ob2xkLCBtZXRob2Qpe1xuXHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUp
e1xuXHRcdGlmICh0eXBlLmluZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwo
dGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJz
ZSh0eXBlKS5leHByZXNzaW9uc1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5
ICE9ICdyZWxheScpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7
XG5cdFx0dmFyIG5ld1R5cGUgPSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNl
KDEpLmVhY2goZnVuY3Rpb24ocHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRv
LmtleSArIChwc2V1ZG8udmFsdWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5c
dFx0fSk7XG5cdFx0b2xkLmNhbGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2Qu
Y2FsbCh0aGlzLCBuZXdUeXBlLCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xu
fTtcblxudmFyIGRlbGVnYXRpb24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1h
dGNoLCBmbil7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywg
e30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91
aWQgaW4gc3RvcmVkKXtcblx0XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVk
W191aWRdLm1hdGNoID09IG1hdGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5
cGUgPSB0eXBlLCBfbWF0Y2ggPSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwg
e307XG5cdFx0dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rp
b24odGFyZ2V0KXtcblx0XHRcdHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5c
dFx0fTtcblxuXHRcdHZhciBlbGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5c
dFx0aWYgKF9tYXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29u
ZGl0aW9uKXtcblx0XHRcdHZhciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29u
ZGl0aW9uIHx8IGVsZW1lbnRFdmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9u
KHRhcmdldCwgZXZlbnQpe1xuXHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAm
JiBjb25kaXRpb24uY2FsbCh0YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxu
XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIg
ZGVsZWdhdG9yID0gX21hcC5saXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRc
dGlmICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFy
Z2V0O1xuXHRcdFx0aWYgKHRhcmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVu
dCwgdGFyZ2V0LCB1aWQpO1xuXHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRc
dGlmICghdGFyZ2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFy
Z2V0O1xuXHRcdFx0aWYgKHRhcmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwg
dGFyZ2V0KTtcblx0XHR9O1xuXG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0
b3JlZFt1aWRdID0ge1xuXHRcdFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0
XHRkZWxlZ2F0b3I6IGRlbGVnYXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9y
ZWQ7XG5cdFx0cmV0dXJuIGFkZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFw
LmNhcHR1cmUpO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwg
Zm4sIF91aWQpe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycs
IHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRo
aXM7XG5cblx0XHRpZiAoX3VpZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3Ig
PSBzdG9yZWRbX3VpZF0uZGVsZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0
dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5y
ZW1vdmUodGhpcywgX3VpZCk7XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3Rv
cmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlz
LCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlk
LCBzO1xuXHRcdGlmIChmbikgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3Jl
ZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1
cm4gZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191
aWQpO1xuXHRcdH0gZWxzZSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVk
W19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2
ZW50LmNhbGwodGhpcywgdHlwZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9r
ZSgnaW1wbGVtZW50Jywge1xuXHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24u
YWRkRXZlbnQpLFxuXHRyZW1vdmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24u
cmVtb3ZlRXZlbnQpXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0
eWxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRo
IHRoZSBzdHlsZXMgb2YgRWxlbWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxl
bWVudC5TdHlsZVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3Vt
ZW50Lmh0bWwsIGVsO1xuXG4vLzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9l
cyBub3QgcmVtb3ZlIHN0eWxlcyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5
bGUuY29sb3IgPSBudWxsO1xudmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xv
ciA9PSAncmVkJztcblxuLy8gY2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciog
c2hvcnRoYW5kIHN0eWxlcyBpbiB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGlu
c3RlYWQgb2Ygd2lkdGgtc3R5bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIz
YWJjJztcbmVsLnN0eWxlLmJvcmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3Jv
bmdPcmRlciA9IGVsLnN0eWxlLmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJ
RTk+XG5cbnZhciBoYXNHZXRDb21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHls
ZSxcblx0c3VwcG9ydEJvcmRlclJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LnN0eWxlLmJvcmRlclJhZGl1cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVz
ID0ge3NldDogZnVuY3Rpb24oc3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19
O1xuXG52YXIgaGFzT3BhY2l0eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhh
c0ZpbHRlciA9IChodG1sLnN0eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBo
YVxcKG9wYWNpdHk9KFtcXGQuXSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rp
b24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0
eSk7XG5cdGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkg
PT0gbnVsbCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0
RmlsdGVyID0gZnVuY3Rpb24oZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9
IGVsZW1lbnQuc3R5bGUsXG5cdFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0
Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAu
dGVzdChmaWx0ZXIpID8gZmlsdGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAn
ICcgKyB2YWx1ZSkudHJpbSgpO1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0
cmlidXRlKCdmaWx0ZXInKTtcbn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhh
c09wYWNpdHkgPyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5v
cGFjaXR5ID0gb3BhY2l0eTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3Bh
Y2l0eSl7XG5cdGlmICghZWxlbWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0
eWxlLmhhc0xheW91dCkgZWxlbWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0g
bnVsbCB8fCBvcGFjaXR5ID09IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAn
Jyk7XG5cdFx0aWYgKG9wYWNpdHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNl
dEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxz
ZSB7XG5cdFx0c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAo
b3BhY2l0eSAqIDEwMCkubGltaXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNl
dFZpc2liaWxpdHkpKTtcblxudmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9u
KGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVt
ZW50LmdldENvbXB1dGVkU3R5bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcn
KSA/IDEgOiBvcGFjaXR5LnRvRmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxl
bWVudCl7XG5cdHZhciBmaWx0ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5n
ZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikg
b3BhY2l0eSA9IGZpbHRlci5tYXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51
bGwgfHwgZmlsdGVyID09IG51bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5j
dGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0
eScpO1xuXHRpZiAob3BhY2l0eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlz
aWJpbGl0eSA9PSAnaGlkZGVuJyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5c
bnZhciBmbG9hdE5hbWUgPSAoaHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZs
b2F0JyA6ICdjc3NGbG9hdCcsXG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDog
JzAlJywgY2VudGVyOiAnNTAlJywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRo
YXNCYWNrZ3JvdW5kUG9zaXRpb25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblgg
IT0gbnVsbCksXG5cdHByZWZpeFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2Ug
PSBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBh
dHRlcm4sICckMS0nKS5jYW1lbENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0
eWxlID0gZnVuY3Rpb24oc3R5bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNr
Z3JvdW5kUG9zaXRpb24nKXtcblx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAn
WCcpO1xuXHRcdHByb3BlcnR5ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUo
cHJvcGVydHkpO1xufTtcbi8vPC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdl
dENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1
dGVkU3R5bGUgJiYgdGhpcy5jdXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtj
YW1lbENhc2UocHJvcGVydHkpXTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERv
Y3VtZW50KHRoaXMpLmRlZmF1bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/
IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJl
dHVybiAoY29tcHV0ZWQpID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0g
ZmxvYXROYW1lKSA/ICdmbG9hdCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxc
blxuXHRzZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVy
dHkgPT0gJ29wYWNpdHknKXtcblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNl
RmxvYXQodmFsdWUpO1xuXHRcdFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1
cm4gdGhpcztcblx0XHR9XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zs
b2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAn
c3RyaW5nJyl7XG5cdFx0XHR2YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAn
QCcpLnNwbGl0KCcgJyk7XG5cdFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChm
dW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0
XHRyZXR1cm4gKHR5cGVPZih2YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywg
TWF0aC5yb3VuZCh2YWwpKSA6IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2Ug
aWYgKHZhbHVlID09IFN0cmluZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgu
cm91bmQodmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xu
XHRcdC8vPGx0SUU5PlxuXHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYg
ZG9lc05vdFJlbW92ZVN0eWxlcyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0
XHRyZW1vdmVTdHlsZSh0aGlzLnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElF
OT5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVy
dHkpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRo
aXMpO1xuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9h
dE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVy
dHkuaW5kZXhPZignYm9yZGVyUmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVy
VG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdo
dFJhZGl1cycsICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7
XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0
aGlzKS5qb2luKCcgJyk7XG5cdFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3Bl
cnR5XTtcblx0XHRpZiAoIXJlc3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRp
ZiAoRWxlbWVudC5TaG9ydFN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0
XHRyZXN1bHQgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVz
W3Byb3BlcnR5XSkgcmVzdWx0LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVy
biByZXN1bHQuam9pbignICcpO1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21w
dXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlv
blhZICYmIC9eYmFja2dyb3VuZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0
XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0
aW9uKHBvc2l0aW9uKXtcblx0XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtc
blx0XHRcdH0pIHx8ICcwcHgnO1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9
PSAnYmFja2dyb3VuZFBvc2l0aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0
KXtcblx0XHRcdHJlc3VsdCA9IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVz
dWx0Lm1hdGNoKC9yZ2JhP1xcKFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVz
dWx0ID0gcmVzdWx0LnJlcGxhY2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRc
dH1cblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHld
KXtcblx0XHRcdGlmICgoL14oaGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9w
eCQvLnRlc3QocmVzdWx0KSkpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3
aWR0aCcpID8gWydsZWZ0JywgJ3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7
XG5cdFx0XHRcdHZhbHVlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9
IHRoaXMuZ2V0U3R5bGUoJ2JvcmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRo
aXMuZ2V0U3R5bGUoJ3BhZGRpbmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlz
KTtcblx0XHRcdFx0cmV0dXJuIHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCld
IC0gc2l6ZSArICdweCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1h
cmdpbnxwYWRkaW5nLykudGVzdChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQp
KSl7XG5cdFx0XHRcdHJldHVybiAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+
XG5cdFx0aWYgKHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdo
dHxCb3R0b218TGVmdCk/JC8udGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xu
XHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAk
MyAkMScpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9
LFxuXG5cdHNldFN0eWxlczogZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBp
biBzdHlsZXMpIHRoaXMuc2V0U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0
ID0ge307XG5cdFx0QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtc
blx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xu
XHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRs
ZWZ0OiAnQHB4JywgdG9wOiAnQHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3
aWR0aDogJ0BweCcsIGhlaWdodDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAn
QHB4JywgbWluV2lkdGg6ICdAcHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29s
b3I6ICdyZ2IoQCwgQCwgQCknLCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3Np
dGlvbjogJ0BweCBAcHgnLCBjb2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4
JywgbGV0dGVyU3BhY2luZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChA
cHggQHB4IEBweCBAcHgpJyxcblx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzog
J0BweCBAcHggQHB4IEBweCcsIGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2Io
QCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBw
eCBAcHgnLCBib3JkZXJTdHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBA
KSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0An
LCAnem9vbSc6ICdAJywgZm9udFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0
eTogJ0AnLCBib3JkZXJSYWRpdXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVs
ZW1lbnQuU2hvcnRTdHlsZXMgPSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30s
IGJvcmRlcldpZHRoOiB7fSwgYm9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5b
J1RvcCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9u
KXtcblx0dmFyIFNob3J0ID0gRWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1l
bnQuU3R5bGVzO1xuXHRbJ21hcmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7
XG5cdFx0dmFyIHNkID0gc3R5bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9
IEFsbFtzZF0gPSAnQHB4Jztcblx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9u
O1xuXHRTaG9ydC5ib3JkZXJbYmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xu
XHR2YXIgYmR3ID0gYmQgKyAnV2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsg
J0NvbG9yJztcblx0U2hvcnRbYmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBT
aG9ydFtiZF1bYmR3XSA9IEFsbFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jk
c10gPSBTaG9ydFtiZF1bYmRzXSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xv
cltiZGNdID0gU2hvcnRbYmRdW2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7
XG5cbmlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNr
Z3JvdW5kUG9zaXRpb24gPSB7YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9z
aXRpb25ZOiAnQCd9O1xufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lv
bnNcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNj
cm9sbCwgb3IgcG9zaXRpb25pbmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBv
c2l0aW9uaW5nIGJhc2VkIG9uIHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29k
ZSBhbmQgc21hcnQgYnJvd3NlciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzL2xncGwuaHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBv
biBbWVVJXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vu
c2VdKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1
aXJlczogW0VsZW1lbnQsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1l
bnNpb25zXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpO1xuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENo
aWxkKGNoaWxkKTtcbnZhciBicm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50
ID09PSBlbGVtZW50KTtcbmVsZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21w
b25lbnRzID0gWydoZWlnaHQnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRl
clRvcFdpZHRoJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsn
d2lkdGgnLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcs
ICdib3JkZXJSaWdodFdpZHRoJ107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24o
ZWwpe1xuXG5cdHZhciBnQ1MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91
bmRzID0ge3g6IDAsIHk6IDB9O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihj
c3Mpe1xuXHRcdGJvdW5kcy55ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lk
dGhDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZs
b2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZz
ZXQgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykg
IT0gJ3N0YXRpYycgfHwgaXNCb2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1
bmN0aW9uKGVsKXtcblx0cmV0dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkk
L2kpLnRlc3QoZWwudGFnTmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Ny
b2xsVG86IGZ1bmN0aW9uKHgsIHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhp
cy5nZXRXaW5kb3coKS5zY3JvbGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5z
Y3JvbGxMZWZ0ID0geDtcblx0XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5
KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElF
OT5cblx0XHQvLyBUaGlzIGlmIGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0
ZSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRl
bi5cblx0XHRpZiAoIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zm
c2V0V2lkdGgsIHk6IHRoaXMub2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQv
LyBUaGlzIHN2ZyBzZWN0aW9uIHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBj
YW4gYmUgcmVtb3ZlZCB3aGVuIEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVn
IGluZm86IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4
NVxuXHRcdGlmICh0aGlzLmdldCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVT
aXplKHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5k
cy5oZWlnaHR9O1xuXHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtc
blx0XHR9XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNC
b2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0
cmV0dXJuIHt4OiB0aGlzLnNjcm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVy
biB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3Jv
bGxMZWZ0LCB5OiB0aGlzLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rp
b24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDog
MCwgeTogMH07XG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0
XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0g
ZWxlbWVudC5zY3JvbGxUb3A7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xu
XHRcdH1cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBi
cm9rZW5PZmZzZXRQYXJlbnQgPyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztc
blx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlv
bicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAo
c3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRT
dGF0aWMgOiBpc09mZnNldDtcblx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5v
ZGUpKXtcblx0XHRcdGlmIChpc09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtc
blx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVt
ZW50ID0gdGhpcztcblx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1l
bnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0
XHRcdHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0
cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIg
aGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5c
blx0XHRpZiAoaGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRo
aXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0
aGlzLmdldERvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9
IGh0bWwuZ2V0U2Nyb2xsKCksXG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxz
KCksXG5cdFx0XHRcdGlzRml4ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0g
J2ZpeGVkJyk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9h
dCgpICsgZWxlbVNjcm9sbHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0
bWwuY2xpZW50TGVmdCxcblx0XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3Jv
bGxzLnkgKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxu
XHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6
IDAsIHk6IDB9O1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRc
dHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCAr
PSBlbGVtZW50Lm9mZnNldExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0
VG9wO1xuXG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5c
dFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxh
dGl2ZSl7XG5cdFx0dmFyIG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xs
ID0gdGhpcy5nZXRTY3JvbGxzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zm
c2V0LnggLSBzY3JvbGwueCxcblx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xu
XG5cdFx0aWYgKHJlbGF0aXZlICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkp
e1xuXHRcdFx0dmFyIHJlbGF0aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xu
XHRcdFx0cmV0dXJuIHt4OiBwb3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJv
cmRlcihyZWxhdGl2ZSksIHk6IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BC
b3JkZXIocmVsYXRpdmUpfTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5c
dGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMp
KSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3Np
dGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRT
aXplKCk7XG5cdFx0dmFyIG9iaiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0
b3A6IHBvc2l0aW9uLnksXG5cdFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXpl
Lnlcblx0XHR9O1xuXHRcdG9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9i
ai5ib3R0b20gPSBvYmoudG9wICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxu
XG5cdGNvbXB1dGVQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0
bGVmdDogb2JqLnggLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRv
cDogb2JqLnkgLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxc
blxuXHRzZXRQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHls
ZXModGhpcy5jb21wdXRlUG9zaXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50
LCBXaW5kb3ddLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBk
b2MuY2xpZW50V2lkdGgsIHk6IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9s
bDogZnVuY3Rpb24oKXtcblx0XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0
Q29tcGF0RWxlbWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBk
b2Muc2Nyb2xsTGVmdCwgeTogd2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9
LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBh
dEVsZW1lbnQodGhpcyksXG5cdFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkg
PSB0aGlzLmdldERvY3VtZW50KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9j
LnNjcm9sbFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5z
Y3JvbGxIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBv
c2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0
Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUo
KTtcblx0XHRyZXR1cm4ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBz
aXplLngsIGhlaWdodDogc2l6ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8g
cHJpdmF0ZSBtZXRob2RzXG5cbnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRT
dHlsZTtcblxuZnVuY3Rpb24gc3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4g
c3R5bGVTdHJpbmcoZWxlbWVudCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0
aW9uIHRvcEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdi
b3JkZXItdG9wLXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5c
dHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxu
ZnVuY3Rpb24gaXNCb2R5KGVsZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSku
dGVzdChlbGVtZW50LnRhZ05hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVs
ZW1lbnQpe1xuXHR2YXIgZG9jID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFk
b2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0
bWwgOiBkb2MuYm9keTtcbn1cblxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtw
b3NpdGlvbjogJ3NldFBvc2l0aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9j
dW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0
aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRn
ZXRTY3JvbGxUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtc
blx0fSxcblxuXHRnZXRTY3JvbGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdl
dFNjcm9sbCgpLng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRo
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxu
XG5cdGdldFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7
XG5cdH0sXG5cblx0Z2V0TGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3Np
dGlvbigpLng7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIHRoZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkg
YWxsIG90aGVyIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92
aWRlczogRnhcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9
IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENs
YXNzLlRoZW5hYmxlXSxcblxuXHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWws
XG5cdFx0b25DYW5jZWw6IG5pbCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRm
cHM6IDYwLFxuXHRcdHVuaXQ6IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVz
OiBudWxsLFxuXHRcdGZyYW1lU2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxu
XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRo
aXMuc3ViamVjdCB8fCB0aGlzO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxc
blxuXHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtc
blx0XHRcdHJldHVybiAtKE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xu
XHR9LFxuXG5cdHN0ZXA6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFt
ZVNraXApe1xuXHRcdFx0dmFyIGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRo
aXMudGltZSkgOiAwLCBmcmFtZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0
dGhpcy50aW1lID0gbm93O1xuXHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNl
IHtcblx0XHRcdHRoaXMuZnJhbWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRo
aXMuZnJhbWVzKXtcblx0XHRcdHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1l
IC8gdGhpcy5mcmFtZXMpO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwg
dGhpcy50bywgZGVsdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMu
ZnJhbWVzO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywg
MSkpO1xuXHRcdFx0dGhpcy5zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24o
bm93KXtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20s
IHRvLCBkZWx0YSl7XG5cdFx0cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0
fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJl
dHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAn
Y2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6
IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZh
bHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9u
KGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztc
blx0XHR0aGlzLmZyb20gPSBmcm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1l
ID0gKHRoaXMub3B0aW9ucy5mcmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51
bGw7XG5cdFx0dGhpcy50cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFy
IGZyYW1lcyA9IHRoaXMub3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1
cmF0aW9uID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5E
dXJhdGlvbnNbZHVyYXRpb25dIHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUlu
dGVydmFsID0gMTAwMCAvIGZwcztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJv
dW5kKHRoaXMuZHVyYXRpb24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdl
dFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJs
ZSh0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5p
bmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwo
dGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5m
cmFtZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7
XG5cdFx0XHRcdGlmICghdGhpcy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29t
cGxldGUnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJl
RXZlbnQoJ3N0b3AnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZl
KHRoaXMuc3ViamVjdCA9PT0gdGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRo
aXMuZnJhbWVzO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCku
Y2xlYXJDaGFpbigpO1xuXHRcdFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRyZXN1bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQo
KSkgcHVzaEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0g
aW5zdGFuY2VzW3RoaXMub3B0aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29u
dGFpbnModGhpcyk7XG5cdH0sXG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5c
bn0pO1xuXG5GeC5jb21wdXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJu
ICh0byAtIGZyb20pICogZGVsdGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9y
dCc6IDI1MCwgJ25vcm1hbCc6IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVy
c1xuXG52YXIgaW5zdGFuY2VzID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0
aW9uKCl7XG5cdHZhciBub3cgPSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5n
dGg7IGktLTspe1xuXHRcdHZhciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNl
KSBpbnN0YW5jZS5zdGVwKG5vdyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5j
dGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBz
XSA9IFtdKTtcblx0bGlzdC5wdXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNb
ZnBzXSA9IGxvb3AucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07
XG5cbnZhciBwdWxsSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3Rh
bmNlc1tmcHNdO1xuXHRpZiAobGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAo
IWxpc3QubGVuZ3RoICYmIHRpbWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBz
XTtcblx0XHRcdHRpbWVyc1tmcHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0
fVxuXHR9XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlw
dGlvbjogQ29udGFpbnMgdGhlIENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4s
IEZ4Lk1vcnBoLCBGeC5FbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBbRngsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4u
XG4qL1xuXG5GeC5DU1MgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJl
cGFyZXMgdGhlIGJhc2UgZnJvbS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVt
ZW50LCBwcm9wZXJ0eSwgdmFsdWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVl
cyk7XG5cdFx0dmFyIGZyb20gPSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0
byA9PSBudWxsKXtcblx0XHRcdHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0
eWxlKHByb3BlcnR5KTtcblx0XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0
XHQvLyBhZGFwdGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21h
c3Rlci9meC5qcyNMMjk5XG5cdFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09
ICdzdHJpbmcnICYmIGZyb20uc2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxv
YXQoZnJvbSkgIT0gMCl7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsg
dW5pdCk7XG5cdFx0XHRcdHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9w
ZXJ0eSk7XG5cdFx0XHRcdC8vIElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhl
bFdpZHRoXG5cdFx0XHRcdGlmICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFs
dWUgPSBlbGVtZW50LnN0eWxlWygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5c
dFx0XHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9t
IERlYW4gRWR3YXJkcycgaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4
LjU0LjE1LyNjb21tZW50LTEwMjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0
eWxlLmxlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5c
dFx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0
ZWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRc
dFx0ZnJvbSA9ICh0byB8fCAxKSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZs
b2F0KGZyb20pIHx8IDApO1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9t
ICsgdW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShm
cm9tKSwgdG86IHRoaXMucGFyc2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGlu
dG8gYW4gYXJyYXlcblxuXHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVu
Y3Rpb24uY29udmVydCh2YWx1ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0
cmluZycpID8gdmFsdWUuc3BsaXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJl
dHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xu
XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2Vy
cywgZnVuY3Rpb24ocGFyc2VyKXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRc
dHZhciBwYXJzZWQgPSBwYXJzZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBw
YXJzZWQgPT09IDApIGZvdW5kID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0
XHRcdH0pO1xuXHRcdFx0Zm91bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5D
U1MuUGFyc2Vycy5TdHJpbmd9O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxu
XG5cdC8vY29tcHV0ZXMgYnkgYSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0
aGVpciBwYXJzZXJzLlxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5c
dFx0dmFyIGNvbXB1dGVkID0gW107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5n
dGgpKS50aW1lcyhmdW5jdGlvbihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9t
W2ldLnBhcnNlci5jb21wdXRlKGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBh
cnNlcjogZnJvbVtpXS5wYXJzZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0g
RnVuY3Rpb24uY29udmVydCgnZng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xu
XHR9LFxuXG5cdC8vc2VydmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5j
dGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1
ZScpIHZhbHVlID0gdGhpcy5wYXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5c
dFx0dmFsdWUuZWFjaChmdW5jdGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5j
b25jYXQoYml0LnBhcnNlci5zZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRy
ZXR1cm4gcmV0dXJuZWQ7XG5cdH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxl
bWVudFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0
KXtcblx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0
KSk7XG5cdH0sXG5cblx0Ly9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhl
IHZhbHVlcyBmb3IgYSBzZWxlY3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xu
XHRcdGlmIChGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVj
dG9yXTtcblx0XHR2YXIgdG8gPSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBz
ZWxlY3Rvci5lc2NhcGVSZWdFeHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0g
ZnVuY3Rpb24ocnVsZXMpe1xuXHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7
XG5cdFx0XHRcdGlmIChydWxlLm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5y
dWxlcyB8fCBydWxlLmNzc1J1bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0
XHRcdFx0aWYgKCFydWxlLnN0eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQg
PSAocnVsZS5zZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysv
LCBmdW5jdGlvbihtKXtcblx0XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0
XHR9KSA6IG51bGw7XG5cdFx0XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3Qu
dGVzdChzZWxlY3RvclRleHQpKSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQu
U3R5bGVzLCBmdW5jdGlvbih2YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHls
ZVtzdHlsZV0gfHwgRWxlbWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0
XHR2YWx1ZSA9IFN0cmluZyhydWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVd
ID0gKCgvXnJnYi8pLnRlc3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0
XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5z
dHlsZVNoZWV0cywgZnVuY3Rpb24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVm
O1xuXHRcdFx0aWYgKGhyZWYgJiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5k
ZXhPZihkb2N1bWVudC5kb21haW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBz
aGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7
XG5cdFx0fSk7XG5cdFx0cmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxu
XG59KTtcblxuRnguQ1NTLkNhY2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENv
bG9yOiB7XG5cdFx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRj
aCgvXiNbMC05YS1mXXszLDZ9JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRc
dFx0cmV0dXJuICgodmFsdWUgPSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihc
XGQrKS8pKSkgPyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9
LFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4g
ZnJvbS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChG
eC5jb21wdXRlKGZyb21baV0sIHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0
XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIp
O1xuXHRcdH1cblx0fSxcblxuXHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0
XHRjb21wdXRlOiBGeC5jb21wdXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7
XG5cdFx0XHRyZXR1cm4gKHVuaXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9
LFxuXG5cdFN0cmluZzoge1xuXHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0
XHRjb21wdXRlOiBmdW5jdGlvbih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9
LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1c
blx0fVxuXG59O1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlv
bjogRm9ybWVybHkgRnguU3R5bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9m
IENTUyBwcm9wZXJ0aWVzIGZvciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywg
b3IgQ1NTIGJhc2VkIHNlbGVjdG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xu
XG5GeC5Nb3JwaCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRp
YWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRo
aXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlv
bnMpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9
PSAnc3RyaW5nJykgbm93ID0gdGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5v
dykgdGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0
bywgZGVsdGEpe1xuXHRcdHZhciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5v
d1twXSA9IHRoaXMucGFyZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5v
dztcblx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlz
LmNoZWNrKHByb3BlcnRpZXMpKSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRp
ZXMgPT0gJ3N0cmluZycpIHByb3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0
XHR2YXIgZnJvbSA9IHt9LCB0byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7
XG5cdFx0XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVy
dGllc1twXSk7XG5cdFx0XHRmcm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBh
cnNlZC50bztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxu
XG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24o
b3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIG1vcnBoID0gdGhpcy5yZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0
XHRcdG1vcnBoID0gbmV3IEZ4Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0
dGhpcy5zdG9yZSgnbW9ycGgnLCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0
fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3Bz
KXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQg
d2l0aCBhbnkgb2YgdGhlIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5jcmVkaXRzOlxuICAtIEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0
dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXpl
ZCB0byBiZSB1c2VkIHdpdGggTW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczog
RnguVHJhbnNpdGlvbnNcblxuLi4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5z
aXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRp
b24gfHwgRnguVHJhbnNpdGlvbnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFu
cyA9PSAnc3RyaW5nJyl7XG5cdFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0
XHR0cmFucyA9IEZ4LlRyYW5zaXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8
fCB0cmFuc1tkYXRhWzBdLmNhcGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMg
PSB0cmFuc1snZWFzZScgKyBkYXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsy
XS5jYXBpdGFsaXplKCkgOiAnJyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxu
fSk7XG5cbkZ4LlRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRw
YXJhbXMgPSBBcnJheS5jb252ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihw
b3Mpe1xuXHRcdHJldHVybiB0cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJu
IE9iamVjdC5hcHBlbmQoZWFzZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91
dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBw
YXJhbXMpO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0
dXJuIChwb3MgPD0gMC41ID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFu
c2l0aW9uKDIgKiAoMSAtIHBvcyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5c
bkZ4LlRyYW5zaXRpb25zID0ge1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0
dXJuIHplcm87XG5cdH1cblxufTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0
aW9uKHRyYW5zaXRpb25zKXtcblx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykg
RnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9u
c1t0cmFuc2l0aW9uXSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzog
ZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtc
blx0fSxcblxuXHRFeHBvOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAq
IChwIC0gMSkpO1xuXHR9LFxuXG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0g
TWF0aC5zaW4oTWF0aC5hY29zKHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0
XHRyZXR1cm4gMSAtIE1hdGguY29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazog
ZnVuY3Rpb24ocCwgeCl7XG5cdFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4g
TWF0aC5wb3cocCwgMikgKiAoKHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1
bmN0aW9uKHApe1xuXHRcdHZhciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7
IGEgKz0gYiwgYiAvPSAyKXtcblx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRc
dFx0XHR2YWx1ZSA9IGIgKiBiIC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwg
Mik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5c
dH0sXG5cblx0RWxhc3RpYzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIs
IDEwICogLS1wKSAqIE1hdGguY29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEp
IC8gMyk7XG5cdH1cblxufSk7XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCdd
LmVhY2goZnVuY3Rpb24odHJhbnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRp
b25dID0gbmV3IEZ4LlRyYW5zaXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93
KHAsIGkgKyAyKTtcblx0fSk7XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5k
ZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBD
U1MgcHJvcGVydHkgZm9yIGFuIGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFk
ZSwgRWxlbWVudC5oaWdobGlnaHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Mo
e1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50
LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5p
ZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1
bmN0aW9uKHByb3BlcnR5LCBub3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xu
XHRcdFx0bm93ID0gcHJvcGVydHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwg
dGhpcy5vcHRpb25zLnByb3BlcnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1l
bnQsIHByb3BlcnR5LCBub3csIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAo
IXRoaXMuY2hlY2socHJvcGVydHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFy
Z3MgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMu
b3B0aW9ucy5wcm9wZXJ0eSB8fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMu
cHJlcGFyZSh0aGlzLmVsZW1lbnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0
aGlzLnBhcmVudChwYXJzZWQuZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVu
dC5Qcm9wZXJ0aWVzLnR3ZWVuID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0
dGhpcy5nZXQoJ3R3ZWVuJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhp
cy5yZXRyaWV2ZSgndHdlZW4nKTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3
IEZ4LlR3ZWVuKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdl
ZW4nLCB0d2Vlbik7XG5cdFx0fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVt
ZW50LmltcGxlbWVudCh7XG5cblx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7
XG5cdFx0dGhpcy5nZXQoJ3R3ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0g
dGhpcy5nZXQoJ3R3ZWVuJyksIG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1
bWVudHMpLCB0b2dnbGU7XG5cdFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dn
bGUnO1xuXHRcdHN3aXRjaCAoYXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdz
dGFydCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdz
dGFydCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAn
c2V0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdz
ZXQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2
YXIgZmxhZyA9IHRoaXMucmV0cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNp
dHknKSA9PSAxKTtcblx0XHRcdFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9
IGZsYWcgPyAwIDogMTtcblx0XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xu
XHRcdFx0XHR0b2dnbGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1l
dGhvZCA9ICdzdGFydCc7XG5cdFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgn
ZmFkZTpmbGFnJyk7XG5cdFx0ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZh
ciB0byA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcp
e1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6
ICd2aXNpYmxlJyk7XG5cdFx0fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRj
aGFpbi5sZW5ndGgpe1xuXHRcdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0
dGhpcy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0
XHR0aGlzLmNhbGxDaGFpbigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRc
dHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0g
ZWxzZSB7XG5cdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVs
ZW1lbnQuZ2V0U3R5bGUoJ29wYWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQu
c2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWlu
KCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdo
bGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9
IHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tn
cm91bmQtY29sb3InKSk7XG5cdFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNm
ZmYnIDogZW5kO1xuXHRcdH1cblx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0
XHR0d2Vlbi5zdGFydCgnYmFja2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5k
KS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xv
cicsIHRoaXMucmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNh
bGxDaGFpbigpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwg
YWxsIHB1cnBvc2UgUmVxdWVzdCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFp
biwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6
IFJlcXVlc3RcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rp
b24oKXt9LFxuXHRwcm9ncmVzc1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2Vy
LlJlcXVlc3QpO1xuXG52YXIgUmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5c
blx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxc
blxuXHRvcHRpb25zOiB7Lypcblx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxv
YWRzdGFydDogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlv
bihldmVudCwgeGhyKXt9LFxuXHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNh
bmNlbDogZnVuY3Rpb24oKXt9LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0
LCByZXNwb25zZVhNTCl7fSxcblx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRv
bkV4Y2VwdGlvbjogZnVuY3Rpb24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0
OiBmdW5jdGlvbigpe30sXG5cdFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdp
dGhDcmVkZW50aWFsczogZmFsc2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRc
dGhlYWRlcnM6IHtcblx0XHRcdCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxc
blx0XHRcdCdBY2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9u
L3htbCwgdGV4dC94bWwsICovKidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1h
dDogZmFsc2UsXG5cdFx0bWV0aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0
aXNTdWNjZXNzOiBudWxsLFxuXHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0
cnVlLFxuXHRcdGVuY29kaW5nOiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0
XHRldmFsUmVzcG9uc2U6IGZhbHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFs
c2Vcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnho
ciA9IG5ldyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7
XG5cdFx0dGhpcy5oZWFkZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25T
dGF0ZUNoYW5nZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYg
KHhoci5yZWFkeVN0YXRlICE9IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMu
cnVubmluZyA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRl
bXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRo
aXMuc3RhdHVzID0gKHN0YXR1cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQo
dGhpcykpO1xuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJv
Z3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xu
XHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0
XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4
dDogdGhpcy54aHIucmVzcG9uc2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1M
fTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVz
KSlcblx0XHRcdHRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2Uu
eG1sKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nl
c3M6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVy
biAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vz
c1NjcmlwdHM6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3Bv
bnNlIHx8ICgvKGVjbWF8amF2YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50
LXR5cGUnKSkpIHJldHVybiBCcm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3Ry
aXBTY3JpcHRzKHRoaXMub3B0aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2Vzczog
ZnVuY3Rpb24odGV4dCwgeG1sKXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3Jp
cHRzKHRleHQpLCB4bWwpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9
KTtcblx0fSxcblxuXHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQo
J2NvbXBsZXRlJywgYXJndW1lbnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNh
bGxDaGFpbigpO1xuXHR9LFxuXG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZh
aWx1cmUoKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54
aHJ9KTtcblx0fSxcblxuXHRvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZl
bnQoJ2NvbXBsZXRlJykuZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5c
dGxvYWRzdGFydDogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3Rh
cnQnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7
XG5cdH0sXG5cblx0dGltZW91dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGlt
ZW91dCcsIHRoaXMueGhyKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHho
cjogdGhpcy54aHJ9KTtcblx0fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVl
KXtcblx0XHR0aGlzLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5h
dHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFk
ZXIobmFtZSk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24o
KXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlz
Lm9wdGlvbnMubGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1
cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNz
KGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxz
ZTtcblx0fSxcblxuXHRzZW5kOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hl
Y2sob3B0aW9ucykpIHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9
IHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5u
aW5nID0gdHJ1ZTtcblxuXHRcdHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0
eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9w
dGlvbnN9O1xuXG5cdFx0dmFyIG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2Jq
ZWN0LmFwcGVuZCh7ZGF0YTogb2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0
aG9kfSwgb3B0aW9ucyk7XG5cdFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmlu
ZyhvcHRpb25zLnVybCksIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5c
blx0XHRzd2l0Y2ggKHR5cGVPZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9
IGRvY3VtZW50LmlkKGRhdGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdv
YmplY3QnOiBjYXNlICdoYXNoJzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xu
XHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQg
PSAnZm9ybWF0PScgKyB0aGlzLm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/
IGZvcm1hdCArICcmJyArIGRhdGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0
aW9ucy5lbXVsYXRpb24gJiYgIVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0
XHRcdHZhciBfbWV0aG9kID0gJ19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0
YSkgPyBfbWV0aG9kICsgJyYnICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9z
dCc7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcs
ICdwdXQnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9w
dGlvbnMuZW5jb2RpbmcpID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDog
Jyc7XG5cdFx0XHR0aGlzLmhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gt
d3d3LWZvcm0tdXJsZW5jb2RlZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkg
dXJsID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9u
ID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0
cmltUG9zaXRpb24gPSB1cmwuaW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAs
IHRyaW1Qb3NpdGlvbik7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1
cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVl
SUQoKTtcblxuXHRcdGlmIChkYXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdk
ZWxldGUnKSl7XG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/
JykgKyBkYXRhO1xuXHRcdFx0ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRo
aXMueGhyO1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0
ID0gdGhpcy5sb2Fkc3RhcnQuYmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhp
cy5wcm9ncmVzcy5iaW5kKHRoaXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1Vw
cGVyQ2FzZSgpLCB1cmwsIHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRo
aXMub3B0aW9ucy5wYXNzd29yZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRp
YWxzKSAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0
cnVlO1xuXG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5i
aW5kKHRoaXMpO1xuXG5cdFx0T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1
ZSwga2V5KXtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwg
dmFsdWUpO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNl
cHRpb24nLCBba2V5LCB2YWx1ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhj
ZXB0aW9uJywgeGhyOiB4aHIsIGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMp
O1xuXG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRc
dFx0dGhpcy5yZXNldFRoZW5hYmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlz
LmZpcmVFdmVudCgncmVxdWVzdCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhp
cy5vcHRpb25zLmFzeW5jKSB0aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlz
Lm9wdGlvbnMudGltZW91dCkgdGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9w
dGlvbnMudGltZW91dCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2Vs
OiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0
aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFi
b3J0KCk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGlt
ZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVz
cyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIu
UmVxdWVzdCgpO1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVj
dCh7cmVhc29uOiAnY2FuY2VsJywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxudmFyIG1ldGhvZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0
ZScsICdwYXRjaCcsICdoZWFkJywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFU
Q0gnLCAnSEVBRCddLmVhY2goZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0g
ZnVuY3Rpb24oZGF0YSl7XG5cdFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9k
XG5cdFx0fTtcblx0XHRpZiAoZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0
cmV0dXJuIHRoaXMuc2VuZChvYmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50
KG1ldGhvZHMpO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0
aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtc
blx0XHRzZW5kLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5c
blx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcp
O1xuXHRcdGlmICghc2VuZCl7XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRk
YXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwg
J3Bvc3QnLCB1cmw6IHRoaXMuZ2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0
b3JlKCdzZW5kJywgc2VuZCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5c
bkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBz
ZW5kZXIgPSB0aGlzLmdldCgnc2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1
cmw6IHVybCB8fCBzZW5kZXIub3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxu
XG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3Jp
cHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1l
dGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3Zp
ZGVzOiBSZXF1ZXN0LkhUTUxcblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Mo
e1xuXG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFs
c2UsXG5cdFx0YXBwZW5kOiBmYWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0
ZXI6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBw
bGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBm
dW5jdGlvbih0ZXh0KXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2Ug
PSB0aGlzLnJlc3BvbnNlO1xuXG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRz
KGZ1bmN0aW9uKHNjcmlwdCl7XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xu
XHRcdH0pO1xuXG5cdFx0dmFyIG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5d
Kj4oW1xcc1xcU10qPyk8XFwvYm9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1s
ID0gbWF0Y2hbMV07XG5cdFx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1s
JywgcmVzcG9uc2UuaHRtbCk7XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVz
O1xuXHRcdHJlc3BvbnNlLmVsZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRl
ciB8fCAnKicpO1xuXG5cdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVz
cG9uc2UuZWxlbWVudHM7XG5cdFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRh
dGUgPSBkb2N1bWVudC5pZChvcHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRp
b25zLmZpbHRlcikgdXBkYXRlLmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2Ug
dXBkYXRlLnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9u
cy5hcHBlbmQpe1xuXHRcdFx0dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5k
KTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgp
LmluamVjdChhcHBlbmQpO1xuXHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJl
bigpKTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhy
ZXNwb25zZS5qYXZhc2NyaXB0KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUs
IHJlc3BvbnNlLmVsZW1lbnRzLCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtc
blx0XHR0aGlzLnJlc29sdmUoe3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25z
ZS5lbGVtZW50cywgaHRtbDogcmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2
YXNjcmlwdH0pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxu
XHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQn
KS5jYW5jZWwoKTtcblx0XHRsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRy
aWV2ZSgnbG9hZCcpO1xuXHRcdGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3Qu
SFRNTCh7ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAn
Z2V0J30pO1xuXHRcdFx0dGhpcy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1
cm4gbG9hZDtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVu
Y3Rpb24oKXtcblx0XHR0aGlzLmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMs
IHtkYXRhOiBUeXBlLmlzT2JqZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlv
bjogSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5z
ZS5cblxuU2VlQWxzbzogPGh0dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5
LCBTdHJpbmcsIE51bWJlciwgRnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9c
blxuaWYgKHR5cGVvZiBKU09OID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5c
bihmdW5jdGlvbigpe1xuXG52YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdc
XFxcdCcsICdcXG4nOiAnXFxcXG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdc
IicgOiAnXFxcXFwiJywgJ1xcXFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0
aW9uKGNocil7XG5cdHJldHVybiBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBj
aHIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFs
aWRhdGUgPSBmdW5jdGlvbihzdHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxc
XCg/OltcIlxcXFxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRc
dHJlcGxhY2UoL1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpc
XC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2Uo
Lyg/Ol58OnwsKSg/OlxccypcXFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxz
XSokLykudGVzdChzdHJpbmcpO1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/
IGZ1bmN0aW9uKG9iail7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0
aW9uKG9iail7XG5cdGlmIChvYmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xu
XG5cdHN3aXRjaCAodHlwZU9mKG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1
cm4gJ1wiJyArIG9iai5yZXBsYWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAn
XCInO1xuXHRcdGNhc2UgJ2FycmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04u
ZW5jb2RlKS5jbGVhbigpICsgJ10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxu
XHRcdFx0dmFyIHN0cmluZyA9IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2
YWx1ZSwga2V5KXtcblx0XHRcdFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0
XHRcdGlmIChqc29uKSBzdHJpbmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7
XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAn
bnVtYmVyJzogY2FzZSAnYm9vbGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxs
JzogcmV0dXJuICdudWxsJztcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1
cmUgPSB0cnVlO1xuXG5cbkpTT04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xu
XHRpZiAoIXN0cmluZyB8fCB0eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7
XG5cblx0aWYgKHNlY3VyZSA9PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNl
Y3VyZSl7XG5cdFx0aWYgKEpTT04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5c
dFx0aWYgKCFKU09OLnZhbGlkYXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3Vs
ZCBub3QgZGVjb2RlIHRoZSBpbnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVl
IGlzIG5vdCBzZWN1cmUuJyk7XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAn
KScpO1xufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVz
Y3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFs
IG1ldGhvZHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3Zp
ZGVzOiBSZXF1ZXN0LkpTT05cblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Mo
e1xuXG5cdEV4dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjog
ZnVuY3Rpb24odGV4dCwgZXJyb3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRp
bml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtc
blx0XHRPYmplY3QuYXBwZW5kKHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBs
aWNhdGlvbi9qc29uJyxcblx0XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxc
blxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xu
XHRcdFx0anNvbiA9IHRoaXMucmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMu
b3B0aW9ucy5zZWN1cmUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2
ZW50KCdlcnJvcicsIFt0ZXh0LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRp
ZiAoanNvbiA9PSBudWxsKXtcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHR0aGlzLm9uU3VjY2Vzcyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNv
bjoganNvbiwgdGV4dDogdGV4dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5u
YW1lOiBDb29raWVcblxuZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywg
YW5kIGRlbGV0aW5nIGJyb3dzZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbmNyZWRpdHM6XG4gIC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVs
IEtvY2ggKGh0dHA6Ly9xdWlya3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJv
d3Nlcl1cblxucHJvdmlkZXM6IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcg
Q2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBh
dGg6ICcvJyxcblx0XHRkb21haW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRz
ZWN1cmU6IGZhbHNlLFxuXHRcdGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUs
XG5cdFx0aHR0cE9ubHk6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5
LCBvcHRpb25zKXtcblx0XHR0aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0
aW9ucyk7XG5cdH0sXG5cblx0d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5v
cHRpb25zLmVuY29kZSkgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZG9tYWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9u
cy5kb21haW47XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScg
KyB0aGlzLm9wdGlvbnMucGF0aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0
XHRcdHZhciBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRp
bWUoKSArIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRc
dFx0dmFsdWUgKz0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0
XHRpZiAodGhpcy5vcHRpb25zLnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAo
dGhpcy5vcHRpb25zLmh0dHBPbmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5v
cHRpb25zLmRvY3VtZW50LmNvb2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0
aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMu
a2V5LmVzY2FwZVJlZ0V4cCgpICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBk
ZWNvZGVVUklDb21wb25lbnQodmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBm
dW5jdGlvbigpe1xuXHRcdG5ldyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhp
cy5vcHRpb25zLCB7ZHVyYXRpb246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fVxuXG59KTtcblxuQ29va2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9u
cyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtc
blxuQ29va2llLnJlYWQgPSBmdW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkp
LnJlYWQoKTtcbn07XG5cbkNvb2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtc
blx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxu
LS0tXG5cbm5hbWU6IERPTVJlYWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9t
IGV2ZW50IGRvbXJlYWR5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWly
ZXM6IFtCcm93c2VyLCBFbGVtZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJl
YWR5LCBEb21SZWFkeV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7
XG5cbnZhciByZWFkeSxcblx0bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxc
blx0dGltZXIsXG5cdHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
XG5cbnZhciBkb21yZWFkeSA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5c
dGlmICghcmVhZHkpe1xuXHRcdEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRv
Y3VtZW50LnJlbW92ZUxpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92
ZUxpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVF
dmVudCgnZG9tcmVhZHknKTtcblx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9
XG5cdC8vIGNsZWFudXAgc2NvcGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVt
ZW50ID0gbnVsbDtcbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkg
PSBjaGVja3MubGVuZ3RoOyBpLS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwg
PSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRp
bWVyID0gc2V0VGltZW91dChwb2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcign
RE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xs
IHRlY2huaXF1ZSBieSBEaWVnbyBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lF
Q29udGVudExvYWRlZC9cbi8vIHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhl
IERPTSBpcyBub3QgcmVhZHksIG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdv
cmtzID0gZnVuY3Rpb24oKXtcblx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4v
LyBJZiBkb1Njcm9sbCB3b3JrcyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWlu
ZSBkb21yZWFkeVxuLy8gICBlLmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Ny
b2xsICYmICFkb1Njcm9sbFdvcmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtc
blx0c2hvdWxkUG9sbCA9IHRydWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJl
YWR5U3RhdGUpIGNoZWNrcy5wdXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50
LnJlYWR5U3RhdGU7XG5cdHJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2Nv
bXBsZXRlJyk7XG59KTtcblxuaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBk
b2N1bWVudC5hZGRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hv
dWxkUG9sbCA9IHRydWU7XG5cbmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZl
bnRzLmRvbXJlYWR5ID0ge1xuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkg
Zm4uY2FsbCh0aGlzKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmly
ZXMgYmVmb3JlIGxvYWRcbkVsZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxc
blx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93
KSBmbi5jYWxsKHRoaXMpO1xuXHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KHRoaXMgPT0gd2luZG93KXtcblx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVu
dC5FdmVudHMubG9hZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRo
aXMgaXMgYmFzZWQgb24gdGhlIGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xv
YWQnLCBmdW5jdGlvbigpe1xuXHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9j
dW1lbnQpO1xuIgogCiAvKioqLyB9KSwKIC8qIDQxMiAqLwpAQCAtMTEzODk0LDEzICsxMTM4OTQs
MTMgQEAgbW9kdWxlLmV4cG9ydHMgPSAiLypqc2hpbnQgcXVvdG1hcms6IGZhbAogLyogNDIwICov
CiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0g
Ii8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29w
eXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5M
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNl
bnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNlbnNlIGF0
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElTIENPREUg
SVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lU
SE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
VElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRBQkxJVFkg
T1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5z
ZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQgbGltaXRh
dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4vLyBU
eXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEwLnggLyAyLjAueFxuLy8g
UHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9ucyBieTogQm9yaXMgWWFu
a292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0aWFuIEhvZmZtZWlz
dGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3RldmUgRmVudG9uLCBEaXVs
bGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRhc3MgSWxpb3BvdWxvcyA8
aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNvbiBTd2VhcmluZ2VuLCBTZWFuIEhpbGwg
PGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8aHR0cHM6Ly9naXRo
dWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9rc3VtbWVy
bGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jhc2FyYXQ+LCBOaWNo
b2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVyc29uPiwgRGVyZWsgQ2lj
ZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwgQW5kcmV3IEdhc3BhciA8
aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJpc29uIEZpc2hlciA8
aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtvbmRvIDxodHRwczov
L2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRwczovL2dpdGh1Yi5j
b20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9naXRodWIuY29tL3Mw
OTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pvc2hTdHJvYmw+LCBKb2hu
IFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+XG4vLyBEZWZpbml0aW9u
czogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxuXG4vKlxu
ICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdpbGwgY29uZmlndXJlIHRo
ZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRpbmdzIHtcbiAgICAv
KipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHRo
YXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQgd2lsbCBhY2NlcHQg
aW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlmaWNhdGlvbiwgaXQg
aXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAoKSBtZXRob2Qu
XG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0
LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGkuZS4gdGhpcyBpcyBzZXQg
dG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25vdXMgcmVxdWVzdHMsIHNl
dCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3RzIGFuZCBkYXRhVHlw
ZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG9wZXJhdGlv
bi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1wb3JhcmlseSBsb2NrIHRo
ZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHJlcXVlc3QgaXMgYWN0
aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxzZSB3aXRoIGpxWEhS
ICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhlIHN1Y2Nlc3MvZXJy
b3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5n
IG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhSLmRvbmUoKSBvciB0aGUg
ZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAgICovXG4gICAgYXN5bmM/OiBib29sZWFu
O1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBj
YW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBS
ZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRvIHNldCBjdXN0b20g
aGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVjdHMgYXJlIHBhc3NlZCBh
cyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJuaW5nIGZhbHNlIGluIHRo
ZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0LiBBcyBvZiBqUXVl
cnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBv
ZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9yZVNlbmQ/IChqcVhIUjog
SlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogYW55O1xuICAgIC8qKlxu
ICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0ZWQgcGFnZXMgbm90
IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGluZyBjYWNoZSB0byBmYWxz
ZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQgcmVxdWVzdHMuIEl0
IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0aGUgR0VUIHBhcmFtZXRl
cnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgcmVxdWVz
dHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBhIFVSTCB0aGF0IGhhcyBh
bHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xuICAgIGNhY2hlPzogYm9v
bGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBy
ZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3MgYXJlIGV4
ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1bWVudHM6IFRoZSBqcVhI
UiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFuZCBhIHN0cmluZyBj
YXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNjZXNzXCIsIFwibm90
bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9ydFwiLCBvciBcInBhcnNl
cmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUgc2V0dGluZyBjYW4gYWNj
ZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBp
biB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgY29tcGxldGU/IChq
cVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAg
ICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24gcGFpcnMgdGhhdCBkZXRl
cm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2ZW4gaXRzIGNvbnRl
bnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb250ZW50cz86IHsg
W2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpRdWVyeS5hamF4IHNv
dXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBjb250ZW50VHlwZSB0byBz
ZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0Rl
ZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICogV2hlbiBzZW5kaW5nIGRh
dGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBEZWZhdWx0IGlzIFwiYXBw
bGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsIHdoaWNoIGlz
IGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBhc3MgaW4gYSBjb250ZW50
LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8gdGhlIHNlcnZlciAo
ZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1ZXN0IHNwZWNpZmlj
YXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMgVVRGLTg7IHNwZWNpZnlp
bmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93c2VyIHRvIGNoYW5nZSB0
aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVudFR5cGU/OiBhbnk7XG4gICAgLyoqXG4g
ICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0IG9mIGFsbCBBamF4LXJl
bGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBpcyBhbiBvYmplY3QgdGhh
dCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNhbGwgKCQuYWpheFNl
dHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5hamF4KS5cbiAgICAg
Ki9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2ggY29udmVydGVyJ3MgdmFs
dWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVkIHZhbHVlIG9mIHRo
ZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjb252ZXJ0ZXJz
PzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdpc2gg
dG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpTT05QKSBvbiB0aGUgc2Ft
ZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1ZS4gVGhpcyBhbGxv
d3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0byBhbm90aGVyIGRvbWFp
bi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9zc0RvbWFpbj86IGJvb2xl
YW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIEl0IGlz
IGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcuIEl0
J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBTZWUgcHJvY2Vzc0RhdGEg
b3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4gT2JqZWN0IG11c3Qg
YmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1ZXJ5IHNlcmlhbGl6
ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRo
ZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxuICAgICAqL1xuICAgIGRh
dGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSB1c2VkIHRvIGhhbmRs
ZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhpcyBpcyBhIHByZS1m
aWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZb3Ugc2hvdWxkIHJl
dHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVu
dHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHRoZSAnZGF0YVR5
cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAoZGF0YTogYW55LCB0eTog
YW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB5b3UncmUg
ZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlzIHNwZWNpZmllZCwgalF1
ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHJl
c3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAxLjQgSlNPTiB3aWxs
IHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQgd2lsbCBleGVjdXRlIHRo
ZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcp
LlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgZnVu
Y3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUgZnVuY3Rpb24gcmVj
ZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0
cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlcnJvciB0
aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2JqZWN0LCBpZiBvbmUgb2Nj
dXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCAoYmVzaWRlcyBu
dWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBhbmQgXCJwYXJzZXJl
cnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRocm93biByZWNlaXZlcyB0
aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3VjaCBhcyBcIk5vdCBGb3Vu
ZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBl
cnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0
aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxlciBpcyBub3QgY2Fs
bGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21haW4gSlNPTlAgcmVxdWVz
dHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBlcnJvcj8gKGpxWEhSOiBK
UXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzogc3RyaW5nKTogYW55O1xu
ICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWpheCBldmVudCBoYW5k
bGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBTZXQgdG8gZmFsc2Ug
dG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0IG9yIGFqYXhTdG9w
IGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91
cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9iYWw/OiBib29sZWFuO1xuICAgIC8qKlxu
ICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMgdG8g
c2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdCB0cmFuc3Bv
cnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlz
IGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUgY2FuIGJlIGNoYW5n
ZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFsc28gYmUgb3Zlcndy
aXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2ZXJzaW9uIGFkZGVk
OiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xu
ICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nlc3NmdWwgb25seSBp
ZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVxdWVzdC4gVGhpcyBp
cyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4gRGVmYXVsdCB2YWx1
ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5IDEuNCB0aGlzIHRlY2hu
aXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0aGUgc2VydmVyIHRvIGNh
dGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlmaWVkPzogYm9vbGVhbjtc
biAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCB0byBiZSByZWNv
Z25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBldmVuIGlmIGpRdWVy
eSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0LiBUaGUgZm9sbG93aW5n
IHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6IGZpbGUsICotZXh0
ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5lZWRzIG1vZGlmaWNh
dGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0dXAo
KSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBpc0xvY2FsPzog
Ym9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24g
bmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQg
b2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmlu
ZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291bGQgcmVzdWx0IGluICdv
bkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2YgalF1ZXJ5IDEuNSwgc2V0
dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpRdWVyeSBmcm9tIGFkZGlu
ZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBhdHRlbXB0aW5nIHRvIHVz
ZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgYWxz
byBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5nLiBGb3IgZXhhbXBsZSwg
eyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1lXCIgfVxuICAgICAq
L1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGNhbGxi
YWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJl
IHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
YnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2VuZXJhdGUgYSB1bmlx
dWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgdGhlIHJlcXVlc3RzIGFu
ZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBtYXkgd2FudCB0byBz
cGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBiZXR0ZXIgYnJvd3Nl
ciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwgeW91IGNhbiBhbHNv
IHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVl
IG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5j
dGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNrPzogYW55O1xuICAgIC8qKlxuICAgICAq
IEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBlLiAodmVyc2lvbiBhZGRl
ZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2Ug
dG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBw
YXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXRhIHBhc3Nl
ZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNobmljYWxseSwgYW55dGhp
bmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIHRyYW5zZm9ybWVk
IGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQgY29udGVudC10eXBl
IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElmIHlvdSB3YW50IHRvIHNl
bmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRhLCBzZXQgdGhpcyBv
cHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/OiBib29sZWFuO1xuICAg
IC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlwdFwiIHRyYW5zcG9ydCBp
cyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBcImpzb25wXCIgb3IgXCJz
Y3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUgY2hhcnNldCBhdHRy
aWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4gVXNlZCB3aGVuIHRo
ZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUg
b25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNjcmlwdENoYXJzZXQ/OiBz
dHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVyaWMgSFRUUCBjb2RlcyBh
bmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBoYXMgdGhlIGNvcnJl
c3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgc3RhdHVzIGNv
ZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgc3VjY2VzcyBjYWxs
YmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5nIDN4eCByZWRpcmVjdCks
IHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBjYWxsYmFjay4gKHZl
cnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2RlPzogeyBba2V5OiBzdHJp
bmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYg
dGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0aHJlZSBhcmd1
bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgZm9ybWF0dGVkIGFjY29y
ZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBz
dGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0cFJlcXVlc3QpIG9i
amVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBjYW4gYWNjZXB0IGFu
IGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0dXJu
LiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgc3VjY2Vzcz8gKGRhdGE6IGFu
eSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55O1xuICAgIC8qKlxu
ICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHRoZSByZXF1ZXN0LiBU
aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRoICQuYWpheFNldHVw
KCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50IHRoZSAkLmFqYXggY2Fs
bCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBpbiBwcm9ncmVzcyBhbmQg
dGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQgaXMgcG9zc2libGUg
Zm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQuIEluIGpRdWVy
eSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgd2lsbCBiZSBpbiBh
biBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNjZXNzaW5nIGFueSBv
YmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJlZm94IDMuMCsgb25s
eSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkIGJ5IGEgdGlt
ZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2ZXMgYWZ0ZXIgdGhlIHRp
bWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgLyoqXG4g
ICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHRyYWRpdGlvbmFs
IHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgdHJhZGl0aW9uYWw/
OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJlcXVlc3QgdG8gbWFrZSAo
XCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90ZTogT3RoZXIgSFRU
UCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNhbiBhbHNvIGJlIHVz
ZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzLlxuICAg
ICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgY29udGFp
bmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICovXG4gICAg
dXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUgdG8gYmUgdXNlZCB3aXRo
IFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0
aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4g
ICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QuIERl
ZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJRSksIHRoZSBYTUxI
dHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91ciBvd24gaW1wbGVt
ZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0byB0aGUgZmFjdG9y
eS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9m
IGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0aXZlIFhIUiBvYmpl
Y3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0aENyZWRlbnRpYWxzIHRv
IHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQuIEluIGpRdWVyeSAxLjUs
IHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9wYWdhdGVkIHRvIHRoZSBu
YXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0IHdvdWxkIGlnbm9y
ZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5kIHVzaW5nIGpRdWVyeSAx
LjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJzaW9uIGFkZGVkOiAx
LjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
bn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmplY3RcbiovXG5pbnRlcmZh
Y2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVyeVByb21pc2U8YW55PiB7
XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTogYW55O1xuICAgIGFib3J0
KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3Ig
dGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlDYWxsYmFjayB7XG4gICAg
YWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4gICAgZGlzYWJsZSgpOiBhbnk7XG4gICAg
ZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6IGFueTtcbiAgICBm
aXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55
W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFuO1xuICAgIGxvY2soKTog
YW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSguLi5jYWxsYmFja3M6IGFu
eVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJvbWlzZXMgdG8gaW50ZXJv
cCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVq
ZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4s
IG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47
XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVh
c29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFj
ZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFj
ZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNr
c1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47
XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAg
IGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9n
cmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAg
IGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAg
ICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBm
YWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBwcm9n
cmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4g
ICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBwaXBlKGRvbmVGaWx0ZXI/
OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIHByb2dyZXNz
RmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgdGhl
bjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczog
YW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkp
OiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+
IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkg
PT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVy
eVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25S
ZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBv
blByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlz
ZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVy
aWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55
KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5IFByb21pc2VzIFN1
Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVq
ZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNz
aW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVs
ZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJl
amVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9u
UmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwg
b25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21p
c2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGRlZmVycmVkLCBw
YXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZlcnJlZDxUPiBleHRlbmRz
IEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMgb2YgY2FsbGJhY2tz
XG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47
XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAg
ICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHBy
b2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxu
ICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47
XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAg
ICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAg
IG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4g
ICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJl
c29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlV2l0
aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAg
c3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkpOiBKUXVlcnlQcm9t
aXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5IGV4dGVuc2lvbiBv
ZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJhc2VKUXVlcnlFdmVudE9i
amVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAgZGVsZWdhdGVUYXJnZXQ6
IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47XG4gICAgaXNJbW1l
ZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBpc1Byb3BhZ2F0aW9uU3Rv
cHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIHByZXZlbnREZWZh
dWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xuICAgIHJlc3VsdDogYW55
O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHN0b3BQcm9wYWdh
dGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAg
ICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBK
UXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAg
ICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTogYm9vbGVhbjtcbiAgICBtZXRhS2V5OiBi
b29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGJ1dHRv
bjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1iZXI7XG4g
ICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBwYWdlWDogbnVt
YmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVtYmVyO1xuICAgIHNjcmVl
blk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2JqZWN0IGV4dGVuZHMg
SlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xuICAgIGNoYXJDb2RlOiBu
dW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVyO1xufVxuXG5pbnRlcmZh
Y2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVj
dCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1cblxuaW50ZXJmYWNlIEpR
dWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0LCBKUXVlcnlJbnB1
dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlLZXlFdmVudE9iamVj
dCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4gICAgQ29sbGVjdGlvbiBv
ZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5cbmludGVyZmFjZSBKUXVl
cnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hNb2RlbD86IGJvb2xlYW47
XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tDbG9uZT86IGJvb2xlYW47
XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xlYW47XG4gICAgY3NzRmxv
YXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVhbjtcbiAgICBodG1sU2Vy
aWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86IGJvb2xlYW47XG4gICAg
bm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86IGJvb2xlYW47XG4g
ICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIG9w
dFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTogYm9vbGVhbjtcbiAgICBz
dHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xlYW47XG4gICAgdGJvZHk/
OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAgIChvYmo6IGFueSk6
IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29sZWFuKTogc3RyaW5nO1xu
fVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1Y3QgalF1ZXJ5IGV2ZW50
cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9m
IGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRpbmcgdGhlIGNvbnN0
cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAqIHJldHVybmluZyBzcGVj
aWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRDb25zdHJ1Y3Rv
ciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZl
bnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6
IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBz
cGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlFYXNpbmcge1xu
ICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmcocDogbnVtYmVyKTogbnVt
YmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAodGhvc2Ugb24gJCBh
bmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7XG5cbiAg
ICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWly
cyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlv
bmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVw
KCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1
ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAgKEFq
YXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBz
ZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFqYXgg
cmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQg
Zm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgodXJs
OiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1ZXJ5WEhSO1xuXG4g
ICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4aXN0
aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhleSBh
cmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFUeXBl
cyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0
ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZh
dWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFBy
ZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxP
cHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7
XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3IgbW9kaWZ5IGV4
aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBiZWZvcmUgdGhl
eSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVz
dHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAob3B0czogYW55LCBvcmln
aW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTog
dm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzO1xuXG4gICAgIC8q
KlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLiBJ
dHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAgICogQHBhcmFtIG9wdGlv
bnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBkZWZhdWx0IEFq
YXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAgICAgKi9cbiAgICBhamF4
U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtcblxuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxi
YWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4g
ICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUg
c2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9y
IGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBh
bnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlw
ZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0
aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlz
IHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQg
aXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1
Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVj
dGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNv
biwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/
OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhS
OiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAg
LyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJl
cXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl
IFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEg
cGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRo
ZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhh
dCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0
YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6
IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICov
XG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFu
eSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBl
Pzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRo
ZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xu
ICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVz
OiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipc
biAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdF
VCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRh
aW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJh
bSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZl
ciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9c
biAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6
IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVl
cnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBz
ZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVy
bCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2Vu
dC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBz
ZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2Vz
cyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3Vj
Y2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywg
c3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhI
UikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgYSBKYXZhU2NyaXB0
IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdCwgdGhlbiBleGVj
dXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2Vz
cyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3Vj
Y2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKHNj
cmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtcblxuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRv
IHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBS
ZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQg
Y2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBm
cm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNj
cmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgc3VjY2Vz
cz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2Fk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9y
IHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAg
ICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBp
ZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQs
IGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRo
ZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxp
Z2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAg
IHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBz
dHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNl
cnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVy
bCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2Vu
dC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBz
ZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2Vz
cyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3Vj
Y2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwg
aW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4
cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwg
anNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5n
LCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5n
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhS
O1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNrcyBsaXN0IG9iamVj
dCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxsYmFjayBsaXN0cy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNl
cGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcy5c
biAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVlcnlDYWxsYmFjaztc
blxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBleGVjdXRpb24gb2YgalF1
ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9sZCBJbmRpY2F0ZXMg
d2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3IgcmVsZWFzZWRcbiAg
ICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAoc2VsZWN0
b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudDogRWxlbWVu
dCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAoZWxlbWVudEFycmF5
OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAg
IChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFueVtdKTogSlF1ZXJ5O1xu
ICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1aXNoIGpRdWVyeSdzIGNv
bnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVtb3ZlQWxs
IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBqUXVlcnkgdmFyaWFi
bGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVyeSBpdHNlbGYpLlxuICAg
ICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6IE9iamVjdDtcblxuICAg
IC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25z
IGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0
aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2Ny
aXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IEpRdWVyeUdl
bmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFBy
b3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBv
ciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBh
c3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUg
b3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4g
ICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47
XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5j
dGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmpl
Y3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEph
dmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogYW55
W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsgW2tleTogc3RyaW5nXTog
YW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3RvcmUgYXJi
aXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4gUmV0dXJu
cyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQg
VGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxuICAgICAqIEBwYXJh
bSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNldC5cbiAgICAgKiBA
cGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGE8VD4oZWxl
bWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtcbiAgICAvKipcbiAgICAg
KiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBhcyBz
ZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBkYXRh
IHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRo
ZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0g
a2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICovXG4g
ICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAg
ICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LCBh
cyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0aGUgZnVsbCBk
YXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50
IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKi9cbiAg
ICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKGVsZW1lbnQ6IEVs
ZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhhc0RhdGEoZWxlbWVudDog
RWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5h
bWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5h
bWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1v
dmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAv
LyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRlZmVycmVkOiBKUXVl
cnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICAvLyBFZmZl
Y3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51bWJlcjsgc3RvcDog
KCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDogbnVtYmVyOyB9OyBvZmY6
IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xuICAgIHByb3h5KGZuOiAo
Li4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFu
eTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10p
OiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3RvcjtcblxuICAgIC8vIElu
dGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2Nl
bGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8vVE9ETzogRGVjaWRlIGhv
dyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG5cbiAgICAvLyBQ
cm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxuICAgIC8vIFV0aWxpdGll
c1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFpbmVkOiBFbGVtZW50KTog
Ym9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxsYmFjazogKGluZGV4SW5B
cnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBhbnk7XG4gICAgZWFjaChj
b2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIsIHZhbHVl
T2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTogYW55O1xuICAgIGVhY2g8VD4oY29sbGVj
dGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVu
dDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDogYW55LCAuLi5vYmpzOiBh
bnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0OiBhbnksIC4uLm9i
anM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJpbmcpOiBhbnk7XG5c
biAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJ
bkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xlYW4pOiBUW107XG5cbiAg
ICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5kZXg/OiBudW1iZXIpOiBu
dW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0VtcHR5T2Jq
ZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9iajogYW55KTogYm9vbGVh
bjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgaXNQbGFpbk9iamVj
dChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBhbnkpOiBib29sZWFuO1xu
ICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAgbWFrZUFycmF5KG9iajog
YW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6IChlbGVt
ZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUpOiBVW107XG4gICAgbWFw
KGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFueSwgaW5kZXhJbkFycmF5
OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0OiBUW10sIHNlY29uZDog
VFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBVW10pOiBhbnlb
XTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93KCk6IG51bWJlcjtcblxuICAgIHBhcnNl
SlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJp
bmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YWEgd2Vs
bC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwYXJzZVhNTChk
YXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVsZW1lbnQs
IHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7XG5cbiAgICB0cmlt
KHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFueSk6IHN0cmluZztcblxu
ICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMg
YSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9kZXMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0gY29udGV4dCBE
T00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgSFRNTCBmcmFn
bWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNjcmlwdHMgQSBCb29sZWFu
IGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBIVE1M
IHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJpbmcsIGNvbnRleHQ/OiBI
VE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFuKTogYW55W107XG5cbiAgICBBbmltYXRp
b24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueTtcblxuICAg
IGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBqUXVlcnkgaW5zdGFuY2Ug
bWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFKQVhcbiAgICBhamF4Q29t
cGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJvcihoYW5kbGVyOiAoZXZl
bnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFu
eSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBh
amF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdG9wKGhhbmRs
ZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3VjY2VzcyhoYW5kbGVyOiAoZXZlbnQ6
IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNvbXBsZXRlPzog
YW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICBzZXJpYWxpemVB
cnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRDbGFzcyhjbGFzc05h
bWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGN1
cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvLyBodHRwOi8vYXBp
LmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1
ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICBh
dHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBhdHRy
KGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIGF0dHI6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5cbiAgICBoYXNDbGFz
cyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1sKCk6IHN0cmluZztcbiAg
ICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKGh0bWxDb250ZW50
OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4g
ICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3AocHJvcGVydHlOYW1lOiBz
dHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6
IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AocHJvcGVydHlO
YW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0eVZhbHVlOiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTog
SlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSkgPT4gYW55KTogSlF1
ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxu
ICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2ds
ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6IHN0cmluZ1tdKTogSlF1
ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogbnVt
YmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwgdmFsdWU6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1ZSBvZiBzdHlsZSBw
cm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5
LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgICAv
KipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2Yg
bWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBD
U1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9y
IHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZh
bHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENT
UyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBh
cmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAg
Y3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBt
YXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENT
UyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3Ig
dGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFs
dWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBD
U1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBw
YXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAg
IGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltdKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBv
ZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBB
IENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVy
bmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFJlY2Vp
dmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2V0IGFuZCB0aGUg
b2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBz
dHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBm
b3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBy
b3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1
bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVs
ZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUg
c2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikg
PT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1Mg
cHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5LXZhbHVlIHBhaXJzIHRv
IHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGllczogT2JqZWN0KTogSlF1ZXJ5O1xuXG4g
ICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtc
biAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoZWlnaHQoZnVuYzogKGlu
ZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBpbm5lckhlaWdo
dCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxu
ICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgodmFsdWU6IG51bWJlcik6
IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IH07
XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4gICAgb2Zmc2V0KGZ1bmM6
IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJI
ZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgb3V0ZXJIZWlnaHQo
dmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBv
dXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVyV2lk
dGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAg
ICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07XG5cbiAgICBzY3Jv
bGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7
XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVy
KTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdpZHRoKHZhbHVlOiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB3aWR0
aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxu
ICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgZGF0YShvYmo6
IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEoa2V5Pzogc3RyaW5n
KTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEZWZlcnJl
ZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxh
bnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJh
dGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHBy
b3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY29tcGxldGU/
OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgb3B0aW9u
czogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0ZT86IEZ1bmN0aW9u
OyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVhc2luZz86IGFueTsg
fSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1ZXVlTmFtZT86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcs
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJhdGlvbj86IGFueSwgZWFz
aW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUbyhkdXJh
dGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAg
IGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVhc2luZz86IHN0cmluZywg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55
LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55
LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmluaXNo
KCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTog
SlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86
IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcs
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55
LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24oZHVyYXRpb24/OiBhbnks
IGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVRv
Z2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVlPzogYm9vbGVhbiwganVt
cFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVlPzogYW55LCBjbGVhclF1
ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIHRvZ2ds
ZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKGR1
cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
ICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgLy8gRXZlbnRz
XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJp
bmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2ZW50QnViYmxlOiBib29s
ZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIHByZXZlbnRCdWJibGU6
IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFueVtdKTogSlF1ZXJ5O1xu
XG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICov
XG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0
aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNsaWNrKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZlbnREYXRhPzogYW55LCBo
YW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlja1wiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQg
ZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGlj
ayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNs
aWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGRibGNsaWNrKGV2
ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50VHlw
ZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImZvY3VzXCIgZXZl
bnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vz
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXMoZXZlbnREYXRh
PzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNv
dXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNvdXQoZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgdHdvIGhhbmRsZXJzIHRv
IHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBtb3VzZSBwb2lu
dGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIg
ZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0IEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAg
ICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmpl
Y3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBzaW5nbGUgaGFuZGxlciB0
byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9p
bnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50
ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5k
bGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93blwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25cIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93biho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBrZXlkb3du
XCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5ZG93bihldmVu
dERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXBy
ZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcygpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXBy
ZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAg
ICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4g
ICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRcIiBKYXZhU2Ny
aXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0YT86IGFueSwgaGFuZGxl
cj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
ZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZG93bihldmVu
dERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1v
dXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIo
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBm
aXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFu
IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZlbnREYXRhOiBPYmplY3Qs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWxlYXZlXCIgZXZl
bnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUg
bW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92
ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbW92ZShldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNl
b3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW91dCgpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
b3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
VHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50RGF0YTogT2JqZWN0LCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2V1cFwiIGV2ZW50IG9u
IGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0
IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3Vz
ZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChldmVudERh
dGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFu
ZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92
ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3Ig
bW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMs
IG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdp
blwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9y
IHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5vbigpIHdo
ZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFu
ZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRo
ZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywg
c2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhh
bmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1l
c3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15
UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZp
b3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFs
c2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
UmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEFu
IG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3JlIHNwYWNl
LXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5kIHRoZSB2
YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9y
IHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBz
aG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFj
aGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiB7IFtrZXk6IHN0
cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZl
bnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBu
YW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRo
YW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLiBSZXN0IHBh
cmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBqUXVlcnku
dHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9uIHRoZSBldmVudCBo
YW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFsICg/IHN5bnRheCkuXG4g
ICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3Jl
IGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9u
YWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIu
XG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUg
ZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZl
bnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdh
eXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5k
IGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xu
ICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50
cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFt
ZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAg
ICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2Vu
ZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElm
IHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJp
Z2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFy
YW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdo
ZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxz
ZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1w
bHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNl
bGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBl
dmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVj
dGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4g
d2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0
ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJl
cHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocyku
XG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUg
ZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBo
YW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBp
cyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVu
dC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogeyBb
a2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRhPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhl
IGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1l
bnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3RyaW5n
IGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBhcyBc
ImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4g
VGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVu
dCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5n
IG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9y
IFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gZGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0
IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhh
bmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0
ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5t
eVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBm
aWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdn
ZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZl
bnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1l
bnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBh
IHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5c
biAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVu
dHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIg
ZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3Bh
Y2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFz
IFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0
b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2Vs
ZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlz
IG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCBy
ZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8g
YmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dl
ZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBm
YWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcs
IGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBl
dmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9u
Y2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBt
b3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywg
YW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQg
Zm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJp
bmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhh
dCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0
ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxl
Y3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRo
ZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4g
ICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5n
LCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBET00g
aXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rpb24pOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3Qg
Y29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIu
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE6IE9i
amVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzY3JvbGxcIiBldmVudCBv
biBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xs
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xs
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzY3JvbGwoZXZlbnRE
YXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2VsZWN0XCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3QoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
InNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0
KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInN1
Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3VibWl0KCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBz
dWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVudFR5cGU6IHN0cmlu
ZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0cmlnZ2VyKGV2ZW50
OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXJIYW5kbGVyKGV2ZW50
VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogT2JqZWN0O1xuXG4gICAg
dW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZlbnRUeXBlOiBzdHJp
bmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBhbnkpOiBKUXVlcnk7
XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBh
bnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwg
ZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3BhY2U6IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0YT86IGFueSwgaGFu
ZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4gICAganF1ZXJ5OiBz
dHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRhOiBhbnksIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAg
IHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgcHVzaFN0YWNrKGVsZW1l
bnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpRdWVyeTtcblxuICAgIC8v
IE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAg
IGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmQo
Li4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6IChpbmRleDogYW55
LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZFRvKHRhcmdldDogYW55
KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAg
IGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvbmUo
d2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFBbmRFdmVudHM/OiBib29s
ZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0OiBhbnkpOiBKUXVl
cnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJlcGVu
ZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1bmM6IChpbmRleDog
YW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmRUbyh0YXJnZXQ6
IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxu
ICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlV2l0aChm
dW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztcbiAgICB0ZXh0KHRleHRT
dHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6IChpbmRleDogbnVtYmVy
LCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRvQXJyYXkoKTogYW55
W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFwcGluZ0VsZW1lbnQ6
IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuXG4gICAg
d3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXBJbm5lcihm
dW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91
c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1lbnQpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6IGFueTtcblxuICAgIGluZGV4KCk6IG51
bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyO1xuICAgIGluZGV4KGVs
ZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBsZW5ndGg6IG51
bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG4gICAg
W3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVyc2luZ1xuICAgIGFkZChz
ZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIGFkZCguLi5lbGVt
ZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJlbihzZWxlY3Rvcj86IGFu
eSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50KTogSlF1ZXJ5O1xu
ICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChlbGVtZW50OiBh
bnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwgY29udGV4dD86IEVsZW1l
bnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxuICAgIGVuZCgpOiBKUXVl
cnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgZmlsdGVyKHNlbGVj
dG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0
ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBK
UXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmluZChvYmo6IEpR
dWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxuICAgIGhhcyhzZWxlY3Rv
cjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVsZW1lbnQpOiBKUXVlcnk7
XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpcyhmdW5jOiAoaW5k
ZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50OiBhbnkpOiBib29sZWFu
O1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxhc3QoKTogSlF1ZXJ5O1xu
XG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVudDogRWxlbWVudCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxu
ICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0VW50aWwo
c2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0VW50
aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBuZXh0
VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBub3Qo
c2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzogKGluZGV4OiBhbnkpID0+
IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIG5vdChv
Ymo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgpOiBKUXVlcnk7XG5cbiAg
ICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzKHNlbGVj
dG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGlsKHNlbGVjdG9yPzogc3Ry
aW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKGVsZW1lbnQ/
OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1VudGlsKG9i
aj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldihzZWxlY3Rv
cj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0
cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6IEpRdWVyeTtcblxuICAg
IC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4g
ICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1
ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xufVxuZGVj
bGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtcbn1cbmRlY2xhcmUgdmFy
IGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5U3RhdGljO1xuLy8g
bGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgQW5ndWxh
ciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4vLyBEZWZpbml0aW9u
cyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdvdmlsYXI+XG4vLyBEZWZp
bml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlUeXBlZFxu
XG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7XG5cbi8vIFN1cHBv
cnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZhY2UgRnVuY3Rpb24g
e1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8v
IG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmRlY2xhcmUg
bW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBleHRlbmQgdGhpcyBp
bnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgICRnZXQ6
IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmd1bGFyU3Rh
dGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtcbiAgICAgICAgYmlu
ZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBGdW5jdGlvbjtc
biAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86IGFueVtdKTogYXV0
by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogSlF1ZXJ5LCBt
b2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJh
cChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZp
Y2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwgbW9kdWxlcz86IGFueVtd
KTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNvdXJjZTogYW55LCBkZXN0
aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1Z21lbnRlZEpRdWVyeVN0
YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSk6IGJvb2xlYW47
XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFu
eTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2YWx1ZTogYW55LCBrZXk6
IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55O1xuICAgICAgICBmcm9tSnNvbihqc29u
OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFueSk6IGFueTtcbiAgICAg
ICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAg
ICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0RhdGUodmFsdWU6
IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtc
biAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0Z1bmN0
aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc051bWJlcih2YWx1ZTogYW55KTog
Ym9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAg
IGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1VuZGVmaW5lZCh2YWx1
ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5n
O1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBsaWNhdGlvblxuXHRcdG9m
ZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciBtb2R1bGVzLlxu
XHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcblx0
XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAgICAvKiogbmFtZSBvZiB5b3VyIG1vZHVs
ZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAg
ICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAqL1xuICAgICAgICAg
ICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1bmN0aW9uPzogYW55
KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAg
IHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmluZztcbiAgICAgICAgdXBw
ZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAg
ICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBtYWpvcjogbnVtYmVyO1xuICAgICAgICAg
ICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVyO1xuICAgICAgICAgICAg
Y29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGFuaW1hdGlvbkZh
Y3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmlu
ZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgYW5p
bWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBl
eGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3
aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAg
ICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIC8qKiBj
b25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lz
dGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5c
dFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJ
TW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9k
dWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAg
IGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9u
KTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90
YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIob2Jq
ZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywg
ZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUo
bmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xu
ICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmYWN0
b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9k
dWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rp
b246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmplY3Q6IE9iamVjdCk6IElN
b2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZhY3RvcnlGdW5jdGlv
bjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBpbmxp
bmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIob2Jq
ZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNl
cnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHBy
b3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTog
SU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAg
ICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAg
ICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAg
ICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJ
TW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29u
c3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShvYmplY3Q6IE9iamVj
dCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElN
b2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcblxuICAgICAg
ICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcmVxdWlyZXM6
IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEF0dHJp
YnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBp
bGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRv
IGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkgZWxlZ2FudFxuXHQv
LyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5zdGVhZCBvZiBhdHRycy5m
b28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8gdGhpcyBzaG91bGQgcmVh
bGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3JlYXRlcyB0aGlzIHByb2Js
ZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2NTY1NlxuXHRbbmFtZTog
c3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVj
aWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAgICAgICAgLy8gZWxlbWVu
dC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRy
aWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxuICAgICAgICAkYWRk
Q2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gUmVtb3ZlcyB0aGUg
Q1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIGZyb20g
dGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBh
biBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8vIHRoZSBjbGFzcyBy
ZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5c
biAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgICAgJHNl
dChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgLy8gT2JzZXJ2ZXMg
YW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhlIG9ic2VydmVyIGZ1bmN0
aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAkZGlnZXN0XG4gICAgICAg
IC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlzIHRoZW4gaW52b2tlZCB3
aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAg
ICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkpPT5hbnkpOiBGdW5jdGlv
bjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8g
dGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAgICAgLy8gdG8gZG8gcmV2
ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS5cbiAg
ICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAgICAgICAkcHJpc3RpbmU6
IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29s
ZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4g
ICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6IHZvaWQ7
XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJvbGxlcik6
IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAgICAkc2V0UHJpc3RpbmUo
KTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBOZ01vZGVs
Q29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy5k
aXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAgICAgICAkcmVuZGVyKCk6
IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXk6IHN0cmluZywg
aXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVz
IHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBidXQgb3RoZXJcbiAgICAg
ICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21tb24gdG8gdXNlIHRoZW0uXG4gICAgICAg
ICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAgICR2aWV3VmFsdWU6IGFu
eTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAgICRwYXJzZXJzOiBJTW9k
ZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZvcm1hdHRlcltdO1xuICAg
ICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAk
ZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFs
aWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbFBhcnNlciB7XG4gICAg
ICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxGb3Jt
YXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRhcHBseSgpOiBhbnk7XG4gICAgICAgICRh
cHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogKHNjb3BlOiBJU2Nv
cGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5hbWU6IHN0cmluZywgLi4u
YXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVzdHJveSgpOiB2b2lkO1xu
ICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5hbWU6IHN0cmluZywgLi4u
YXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24g
c2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24g
aXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdzPzogT2JqZWN0KTogYW55
O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBhcmdz
PzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc2F5cyBleHAgaXMg
b3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24gaXRcbiAgICAgICAg
JGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICAkZXZhbEFzeW5j
KGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8v
IERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVja2luZyBzdHJhdGVn
eVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3BlO1xuXG4gICAgICAgICRv
bihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZlbnQsIC4uLmFyZ3M6
IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNz
aW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4p
OiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0
ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBh
bnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2go
d2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IHN0cmlu
Zywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3
YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3RlbmVyPzogKG5ld1Zh
bHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1
YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbih3
YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1
ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNo
Q29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3Rl
bmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55
KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDogSVNjb3BlO1xuXG4gICAgICAgICRpZDog
bnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAgICAgICQkaXNvbGF0ZUJp
bmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZh
Y2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJU2NvcGU7XG4gICAgICAg
IGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHBy
ZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVh
bjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBldmVudHMgdGhhdCB3ZXJlICRlbWl0LXRl
ZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cge31cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAgLy8gVE9ETyB1bmRv
Y3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElCcm93c2VyU2VydmljZSB7fVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6
IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21p
c2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFu
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVydmFsU2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJ2YWxc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVydmFsU2VydmljZSB7
XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwgY291bnQ/OiBudW1iZXIs
IGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNlbChw
cm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6IHN0cmluZyk6IEZ1
bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJvdmlkZXIgZXh0ZW5kcyBJ
U2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJG
YWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0cmluZztcblxuICAg
ICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgLy8gQ2hlY2sgYW5ndWxh
cidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9GT1JNQVRTOiBJTG9j
YWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJTUVfRk9STUFUUzogSUxv
Y2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1cmFsQ2F0OiAobnVtOiBh
bnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlckZvcm1h
dERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5nO1xuICAgICAgICBHUk9V
UF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVz
Y3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtcbiAgICAgICAgbWluSW50
OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAgICAgbWF4RnJhYzogbnVt
YmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9zU3VmOiBzdHJpbmc7XG4g
ICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0cmluZztcbiAgICAgICAg
Z1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBudW1iZXI7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBNT05USDog
c3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBEQVk6IHN0
cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5nW107XG4gICAgICAgIEFNUE1TOiBzdHJp
bmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNob3J0OiBzdHJpbmc7XG4g
ICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRlOiBzdHJpbmc7XG4gICAg
ICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRlOiBzdHJpbmc7XG4gICAg
ICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1lOiBzdHJpbmc7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAgICAgZGVidWc6IElMb2dD
YWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGluZm86IElMb2dDYWxsO1xu
ICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9nQ2FsbDtcbiAgICB9XG5c
biAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ugc28gd2UgY2FuIHJl
b3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5cbiAgICBpbnRlcmZh
Y2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBhcnNlU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAgICAgIChleHByZXNzaW9u
OiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJ
Q29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSwgbG9jYWxzPzogYW55
KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdW5kZWZpbmVk
IGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8vIGRv
ZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEgdmFsdWUgZm9yIGNvbnNp
c3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3aGFudHMgdG8gdW5kZWZpbmUgaXQsIHBh
c3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAgICBhc3NpZ24oY29udGV4
dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9uXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Uge1xuICAgICAgICBh
YnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6IHN0cmluZztcbiAgICAgICAgaGFzaChu
ZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBob3N0KCk6IHN0cmlu
ZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgobmV3UGF0aDogc3RyaW5n
KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1iZXI7XG4gICAgICAgIHBy
b3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9jYXRpb25TZXJ2aWNlO1xu
ICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBzZWFyY2gocGFyYW1ldGVyc01hcDogYW55
KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcjogc3RyaW5nLCBw
YXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgdXJsKCk6IHN0
cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2hQcmVmaXgo
cHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAgICAgaHRtbDVNb2RlKCk6
IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBwYXJhbWV0
ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gdGVzdHMgaXQgYXMg
Ym9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAvLyBzaW5jZSB0aGlzIGlz
IGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29sZWFuKTogSUxvY2F0aW9u
UHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRG9jdW1l
bnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRk
b2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRG9jdW1lbnRT
ZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7XG4gICAgICAgIChleGNl
cHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4dGVuZHMgSlF1ZXJ5
IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBhbGwocHJvbWlzZXM6IElQ
cm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAgZGVmZXI8VD4oKTogSURl
ZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogSVByb21pc2U8dm9pZD47
XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxs
YmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNh
bGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBh
bnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1
Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVy
cm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJhY2s/OiAoc3Rh
dGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3Vs
dD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVzdWx0LCBlcnJvckNh
bGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxsYmFjaz86IChzdGF0
ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4gICAgICAgIGNhdGNoPFRS
ZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQcm9taXNlPFRSZXN1bHQ+
KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6
IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0Pjtc
biAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBUUmVz
dWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxseTxUUmVzdWx0PihmaW5h
bGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGlu
dGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZhbHVlPzogVCk6IHZvaWQ7
XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAgICAgICBub3RpZnkoc3Rh
dGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6IElQcm9taXNlPFQ+O1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9sbFNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hvclNjcm9sbFxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xsU2VydmljZSB7
XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5jaG9yU2Nyb2xs
UHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgZGlzYWJsZUF1dG9T
Y3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRl
cmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBMZXRzIG5vdCBmb2NlIHRo
ZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4gRXZlbiB0aG91Z2hcbiAg
ICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBieSB0aGUgaW1wbGVtZW50
YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQgZmluZCBpdCB1c2VmdWwg
dG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUgb2JqZWN0LlxuICAg
ICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7
IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86
IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxuICAgICAgICAvLyBNZXRo
b2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5mbygpOiBhbnk7XG4gICAg
ICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xuICAgIH1cblxuICAgIGlu
dGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtcbiAgICAgICAgICAgIGlk
OiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAgICAgICAgICAgIC8vIE5v
dCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5kYXRvcnkgb3B0aW9uXG4g
ICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAgIHB1dChr
ZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBnZXQgKGtleTogc3RyaW5n
KTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgICAgICByZW1v
dmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9k
b2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAgICAgICAgKGVsZW1l
bnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJp
b3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVt
ZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uLCBtYXhQ
cmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtcbiAgICAgICAgKGVs
ZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4
UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtc
biAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rp
b24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9jdW1lbnRlZCwgYnV0IGl0
IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFwOiBhbnkpOiBJQ29t
cGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVtcGxhdGVMaW5raW5nRnVu
Y3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9yY2UgY2xvbmVBdHRhY2hG
bidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xvbmVBdHRhY2hGbj86IChj
bG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnRyb2xsZXJTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVy
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb250cm9sbGVy
UHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xs
ZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24n
dCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAgIChjb250cm9sbGVyQ29u
c3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIChjb250cm9s
bGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAg
ICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9u
KTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBkZXBlbmRlbmN5QW5ub3Rh
ZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0aG9kIGFuZCB1cmwgbXVz
dCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IElIdHRw
UHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAodXJsOiBzdHJpbmcsIFJl
cXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgaGVhZCh1cmw6
IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAg
ICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxh
bnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/
OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVybDogc3RyaW5nLCBkYXRh
OiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAg
ZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcsIEJV
VCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAgICAgcGVuZGluZ1JlcXVl
c3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGhpbnRpbmcuXG4g
ICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0
aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAgaW50ZXJmYWNlIElSZXF1
ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5n
O1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhYIGl0IGhhcyBpdCdzIG93
biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBpbiB0aGUgZnV0dXJl
XG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/OiBhbnk7XG4gICAgICAg
IHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gVGhlc2UgYWNjZXB0IG11
bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAgICAgICAgZGF0YT86
IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAgICAgICAgdHJhbnNmb3Jt
UmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51bWJlciB8IHByb21p
c2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4ge1xuICAg
ICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IChoZWFkZXJOYW1lOiBzdHJp
bmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAgICAgICAgZGF0YT86
IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVhZGVycz86IChoZWFkZXJO
YW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgY29uZmlnPzogSVJlcXVlc3RDb25maWc7
XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBleHRlbmRzIElQcm9taXNl
PFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4p
OiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNrOiBJSHR0cFByb21pc2VD
YWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNj
ZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IFRS
ZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJn
PFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0Pihz
dWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+
IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAg
ICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBpbnRlcmNlcHRvcnM6IGFu
eVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9yczogYW55W107XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFja2VuZFxuICAgIC8vIFlv
dSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5LlxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tlbmRTZXJ2aWNlIHtcbiAg
ICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVyZSBpbiB0aGUgZnV0
dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3Q/OiBhbnksIGNh
bGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBudW1iZXIsIHdpdGhD
cmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlU2VydmljZSB7XG4gICAgICAgICh0
ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJSW50ZXJwb2xhdGlv
bkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5
bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0aW9uRnVu
Y3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55KTogc3RyaW5nO1xuICAgIH1cblxuICAgIGlu
dGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKHZhbHVl
OiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0
cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92
aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUZW1wbGF0ZUNh
Y2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4k
dGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGVt
cGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRzIElTY29wZSB7fVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcs
IG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRDc3ModmFsdWU6IGFueSk6
IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0
ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1ZTog
YW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRwYXJz
ZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2Fs
czogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29u
dGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNIdG1sKGV4cHJlc3Np
b246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFy
c2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9
PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250
ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1VybChleHByZXNzaW9u
OiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHRydXN0
QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNIdG1sKHZhbHVl
OiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RB
c1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1VybCh2YWx1ZTogYW55
KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7XG4gICAgICAgIGdldFRy
dXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcbiAgICAgICAgdHJ1
c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAgIHZhbHVlT2YodmFs
dWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVy
IHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbGFja2xpc3QoYmxhY2tsaXN0OiBhbnlbXSk6IHZvaWQ7
XG4gICAgICAgIHJlc291cmNlVXJsV2hpdGVsaXN0KHdoaXRlbGlzdDogYW55W10pOiB2b2lkO1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERpcmVjdGl2ZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyI2Rp
cmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpcmVj
dGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJmYWNlIElEaXJlY3RpdmV7
XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRlRWxlbWVudDogYW55LFxu
ICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxcbiAgICAgICAgICAg
IHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdGbjogRnVuY3Rpb24pID0+
IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICBjb250cm9sbGVyPzogYW55O1xu
ICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxpbms/OlxuICAgICAgICAg
ICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1lbnQ6IGFueSxcbiAg
ICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBj
b250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgbmFtZT86IHN0
cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAgIHJlcGxhY2U/OiBib29s
ZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0cmljdD86IHN0cmluZztc
biAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzogYW55O1xuICAgICAgICB0
ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWluYWw/OiBib29sZWFuO1xuICAgICAgICB0
cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1bGFyLmVsZW1lbnQsIGFu
Z3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVnbWVudGVkIHdpdGggYWRk
aXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6IGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVuZHMgSlF1ZXJ5U3Rh
dGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBJQXVnbWVu
dGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCk6IElBdWdtZW50ZWRKUXVlcnk7
XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVsZW1l
bnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDog
SlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uKTogSUF1
Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBhbnlbXSk6IElBdWdtZW50ZWRKUXVlcnk7
XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJ
QXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8gVE9ETzogZXZlbnRz
LCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAgICAgICAgZmluZChzZWxl
Y3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChlbGVtZW50OiBh
bnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajogSlF1ZXJ5KTogSUF1Z21l
bnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmluZyk6IGFueTtcbiAg
ICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBzY29wZSgpOiBJU2NvcGU7XG5cbiAgICAg
ICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICAg
ICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xu
ICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuXG4gICAgfVxuXG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVsZSAoYW5ndWxhci5qcylc
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxlIGF1dG8ge1xuXG4gICAg
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIEluamVjdG9yU2VydmljZVxuICAgICAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5qZWN0b3JcbiAgICAg
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElJbmplY3RvclNlcnZpY2Uge1xu
ICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5nW107XG4gICAgICAgICAg
ICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBzdHJpbmdbXTtcbiAg
ICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICAgICAgaW5zdGFudGlh
dGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAg
ICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IGFueTtcbiAgICAg
ICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSwgbG9jYWxzPzogYW55
KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8g
UHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJm
YWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMg
aXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVhbFxuICAgICAgICAg
ICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICAgICAgICAg
ICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICAg
ICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAgICAg
ICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4g
ICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJbmxpbmU6IGFueVtd
KTogdm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9y
eUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBm
YWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogbmcu
SVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgcHJv
dmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAg
ICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3Rvcjog
RnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgc2VydmljZShuYW1l
OiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4g
ICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBuZy5JU2VydmljZVBy
b3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMvVG9kb0l0ZW0udHNcblxu
bW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnQgY2xhc3MgVG9k
b0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHB1YmxpYyB0aXRsZTog
c3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9vbGVhblxuICAgICAgICAg
ICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUudHNcblxubW9kdWxl
IHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVuZHMgbmcuSVNjb3Bl
IHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJpbmc7XG5cdFx0ZWRp
dGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRlbTtcblx0XHRyZW1h
aW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVyO1xuXHRcdGFsbENoZWNr
ZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3RhdHVzRmlsdGVyOiB7
IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2Vydmlj
ZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TdG9yYWdl
LnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TdG9yYWdlIHtc
blx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBUb2RvSXRlbVtdKTtcblx0
fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ug
c3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9uIHRo
ZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBiaW5kcyB0
byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRm9jdXMo
JHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJldHVy
biB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0
cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0cmlidXRlcy50b2Rv
Rm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xuXHRcdFx0XHRcdFx0
JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0
fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0dG9kb0ZvY3VzLiRpbmpl
Y3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVyLnRzXG5cbm1vZHVs
ZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogRGlyZWN0aXZl
IHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxp
ZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvZG9CbHVy
KCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluazog
KCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4g
e1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgpID0+IHsgJHNjb3BlLiRh
cHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAgICAgICAgJHNjb3BlLiRv
bignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7IH0pO1xuICAgICAg
ICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMvVG9kb0VzY2FwZS50
c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0Y29uc3QgRVNDQVBFX0tF
WSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxzIGVkaXRpbmcgYSB0
b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xuXHRleHBvcnQgZnVu
Y3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0
bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFu
eSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0
XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xuXHRcdFx0XHRcdFx0
JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0XHRcdH1cblx0XHRc
dFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQu
dW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn1cbi8vIHNlcnZp
Y2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xu
XG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBhbmQgcmV0cmlldmVzIFRP
RE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9ydCBjbGFzcyBUb2RvU3Rv
cmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAgU1RPUkFHRV9JRCA9ICd0
b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0ICgpOiBUb2RvSXRlbVtd
IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRo
aXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXQodG9kb3M6
IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RP
UkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn0vLyBj
b250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7
XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBhcHAuIFRoZSBjb250
cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZpYSB0aGUg
dG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVsIHRvIHRoZSB0ZW1w
bGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdGV4cG9ydCBjbGFzcyBU
b2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xuXG5cdFx0Ly8gJGlu
amVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmplY3RvciB3aXRoIGluZm9y
bWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBpbnRvIGNvbnN0cnVjdG9y
XG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhlIGNvbnN0cnVjdG9y
LCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQgYW5kIHR5cGUuXG5c
dFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlcblx0XHRwdWJsaWMg
c3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRcdCckbG9jYXRpb24nLFxu
XHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5cdFx0XTtcblxuXHRc
dC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAkaW5qZWN0b3Jcblx0
XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFwcGxpY2F0aW9uLnRzIGFu
ZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBpbiBpbmRleC5odG1sXG5c
dFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRvZG9TY29wZSxcblx0XHRc
dHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRcdFx0cHJpdmF0ZSB0
b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0ZXJGaWx0ZXJcblx0
XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0b2RvU3RvcmFnZS5nZXQo
KTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRzY29wZS5lZGl0ZWRUb2Rv
ID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1vZGVsJy4gV2UncmUg
YWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRoZSBzY29wZVxuXHRcdFx0
Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3IC8gSFRNTFxuXHRc
dFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9yIGV2ZW50cy9jaGFu
Z2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBpbnB1dFxuXHRcdFx0
Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBldmVudCB3aXRoIGxpZmV0aW1lIGxvbmdl
ciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNjcmliZS5cblx0XHRc
dCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9zKCksIHRydWUpO1xuXHRc
dFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9PiB0aGlzLm9uUGF0aChw
YXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcnKSAkbG9jYXRpb24ucGF0
aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9uO1xuXHRcdH1cblxuXHRc
dG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0YXR1c0ZpbHRlciA9
IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6IGZhbHNlIH0gOiAo
cGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiB0cnVlIH0gOiB7
fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUucmVtYWluaW5n
Q291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNvbXBsZXRlZDogZmFsc2Ug
fSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0gdGhpcy50b2Rvcy5sZW5n
dGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRoaXMuJHNjb3BlLmFsbENo
ZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRcdHRoaXMudG9kb1N0b3Jh
Z2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7XG5cdFx0XHR2YXIg
bmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJpbSgpO1xuXHRcdFx0aWYg
KCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRo
aXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2UpKTtcblx0XHRcdHRoaXMu
JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9kbyh0b2RvSXRlbTogVG9k
b0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvSXRlbTtcblxuXHRc
dFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5nIGlzIGNhbmNlbGxl
ZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCB0
b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06IFRvZG9JdGVtKSB7
XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSldID0gdGhpcy4k
c2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSB0cnVlO1xu
XHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhp
cy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRv
ZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVkKSB7XG5cdFx0XHRcdC8v
IFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRcdFx0dGhpcy4kc2Nv
cGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0b2Rv
SXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRcdGlmICghdG9kb0l0ZW0u
dGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtcblx0XHRcdH1cblx0
XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50
b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7XG5cdFx0fVxuXG5c
dFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50b2RvcyA9IHRoaXMudG9k
b3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0uY29tcGxldGVkKTtc
blx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikge1xuXHRcdFx0dGhpcy50
b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxldGVkID0gY29tcGxldGVk
OyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGljYXRpb24udHNcblxuLyoqXG4gKiBUaGUg
bWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2FuZ3VsYXIuTW9kdWxlfVxu
ICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0b2RvbXZj
ID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAgICAgIC5jb250cm9sbGVy
KCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0JsdXIn
LCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIHRvZG9Gb2N1
cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2RvRXNjYXBlKVxuICAg
ICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2UpO1xufVxuIgorbW9k
dWxlLmV4cG9ydHMgPSAiLy8gbGlicy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGVcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
XG5cblRISVMgQ09ERSBJUyBQUk9WSURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQs
IElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXG5N
RVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNoZSBWZXJz
aW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnNcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqICovXG5cbi8vIFR5cGluZyBmb3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9uIDEuMTAu
eCAvIDIuMC54XG4vLyBQcm9qZWN0OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmluaXRpb25z
IGJ5OiBCb3JpcyBZYW5rb3YgPGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+LCBDaHJp
c3RpYW4gSG9mZm1laXN0ZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+LCBTdGV2
ZSBGZW50b24sIERpdWxsZWkgR29tZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVpPiwgVGFz
cyBJbGlvcG91bG9zIDxodHRwczovL2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3ZWFyaW5n
ZW4sIFNlYW4gSGlsbCA8aHR0cHM6Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdvb3NzZW5z
IDxodHRwczovL2dpdGh1Yi5jb20vR3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6Ly9naXRo
dWIuY29tL2tzdW1tZXJsaW4+LCBCYXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1Yi5jb20v
YmFzYXJhdD4sIE5pY2hvbGFzIFdvbHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253b2x2ZXJz
b24+LCBEZXJlayBDaWNlcm9uZSA8aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJvbmU+LCBB
bmRyZXcgR2FzcGFyIDxodHRwczovL2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFtZXMgSGFy
cmlzb24gRmlzaGVyIDxodHRwczovL2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vpa2ljaGkg
S29uZG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2ttYW4gPGh0
dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxodHRwczov
L2dpdGh1Yi5jb20vczA5MzI5ND4sIEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5jb20vSm9z
aFN0cm9ibD4sIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVpbGx5Lz5c
bi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVs
eVR5cGVkXG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRoYXQgd2ls
bCBjb25maWd1cmUgdGhlIEFKQVggcmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlBamF4U2V0
dGluZ3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0aGUgcmVx
dWVzdCBoZWFkZXIgdGhhdCB0ZWxscyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNwb25zZSBp
dCB3aWxsIGFjY2VwdCBpbiByZXR1cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVlZHMgbW9k
aWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAkLmFqYXhT
ZXR1cCgpIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8qKlxuICAg
ICAqIEJ5IGRlZmF1bHQsIGFsbCByZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNseSAoaS5l
LiB0aGlzIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5jaHJvbm91
cyByZXF1ZXN0cywgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4gcmVxdWVz
dHMgYW5kIGRhdGFUeXBlOiBcImpzb25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQgc3luY2hy
b25vdXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5IHRlbXBv
cmFyaWx5IGxvY2sgdGhlIGJyb3dzZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGlsZSB0aGUg
cmVxdWVzdCBpcyBhY3RpdmUuIEFzIG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5bmM6IGZh
bHNlIHdpdGgganFYSFIgKCQuRGVmZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0IHVzZSB0
aGUgc3VjY2Vzcy9lcnJvci9jb21wbGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQgb2YgdGhl
IGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMganFYSFIu
ZG9uZSgpIG9yIHRoZSBkZXByZWNhdGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9cbiAgICBh
c3luYz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxsYmFjayBm
dW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpRdWVyeSAx
LjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNlIHRoaXMg
dG8gc2V0IGN1c3RvbSBoZWFkZXJzLCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mgb2JqZWN0
cyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBSZXR1cm5p
bmcgZmFsc2UgaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhlIHJlcXVl
c3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJlIGNhbGxl
ZCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAgYmVmb3Jl
U2VuZD8gKGpxWEhSOiBKUXVlcnlYSFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGluZ3MpOiBh
bnk7XG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNlIHJlcXVl
c3RlZCBwYWdlcyBub3QgdG8gYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBTZXR0aW5n
IGNhY2hlIHRvIGZhbHNlIHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQgYW5kIEdF
VCByZXF1ZXN0cy4gSXQgd29ya3MgYnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwiIHRvIHRo
ZSBHRVQgcGFyYW1ldGVycy4gVGhlIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBvdGhlciB0
eXBlcyBvZiByZXF1ZXN0cywgZXhjZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRlIHRvIGEg
VVJMIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAgICovXG4g
ICAgY2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2Fs
bGVkIHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVycm9yIGNh
bGxiYWNrcyBhcmUgZXhlY3V0ZWQpLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdvIGFyZ3Vt
ZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3Qg
YW5kIGEgc3RyaW5nIGNhdGVnb3JpemluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0IChcInN1
Y2Nlc3NcIiwgXCJub3Rtb2RpZmllZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBcImFib3J0
XCIsIG9yIFwicGFyc2VyZXJyb3JcIikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21wbGV0ZSBz
ZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdp
bGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAg
ICBjb21wbGV0ZT8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6IGFueTtc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVzc2lvbiBw
YWlycyB0aGF0IGRldGVybWluZSBob3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3BvbnNlLCBn
aXZlbiBpdHMgY29udGVudCB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAg
IGNvbnRlbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRpbmcgdG8g
alF1ZXJ5LmFqYXggc291cmNlIGNvZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxsb3dzIGNv
bnRlbnRUeXBlIHRvIHNldCB0byBcImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20v
Ym9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAgICAgKiBX
aGVuIHNlbmRpbmcgZGF0YSB0byB0aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5cGUuIERl
ZmF1bHQgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRG
LThcIiwgd2hpY2ggaXMgZmluZSBmb3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0bHkgcGFz
cyBpbiBhIGNvbnRlbnQtdHlwZSB0byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMgc2VudCB0
byB0aGUgc2VydmVyIChldmVuIGlmIG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1MSHR0cFJl
cXVlc3Qgc3BlY2lmaWNhdGlvbiBkaWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFsd2F5cyBV
VEYtODsgc3BlY2lmeWluZyBhbm90aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhlIGJyb3dz
ZXIgdG8gY2hhbmdlIHRoZSBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlwZT86IGFu
eTtcbiAgICAvKipcbiAgICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNvbnRleHQg
b2YgYWxsIEFqYXgtcmVsYXRlZCBjYWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250ZXh0IGlz
IGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBpbiB0aGUg
Y2FsbCAoJC5hamF4U2V0dGluZ3MgbWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3NlZCB0byAk
LmFqYXgpLlxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4gRWFjaCBj
b252ZXJ0ZXIncyB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJhbnNmb3Jt
ZWQgdmFsdWUgb2YgdGhlIHJlc3BvbnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xu
ICAgIGNvbnZlcnRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAg
KiBJZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2ggYXMgSlNP
TlApIG9uIHRoZSBzYW1lIGRvbWFpbiwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFpbiB0byB0
cnVlLiBUaGlzIGFsbG93cywgZm9yIGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0aW9uIHRv
IGFub3RoZXIgZG9tYWluLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGNyb3Nz
RG9tYWluPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQgdG8gdGhl
IHNlcnZlci4gSXQgaXMgY29udmVydGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3QgYWxyZWFk
eSBhIHN0cmluZy4gSXQncyBhcHBlbmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVzdHMuIFNl
ZSBwcm9jZXNzRGF0YSBvcHRpb24gdG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9jZXNzaW5n
LiBPYmplY3QgbXVzdCBiZSBLZXkvVmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFycmF5LCBq
UXVlcnkgc2VyaWFsaXplcyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNlZCBvbiB0
aGUgdmFsdWUgb2YgdGhlIHRyYWRpdGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxvdykuXG4g
ICAgICovXG4gICAgZGF0YT86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJl
IHVzZWQgdG8gaGFuZGxlIHRoZSByYXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVxdWVzdC5U
aGlzIGlzIGEgcHJlLWZpbHRlcmluZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVzcG9uc2Uu
IFlvdSBzaG91bGQgcmV0dXJuIHRoZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9uIGFjY2Vw
dHMgdHdvIGFyZ3VtZW50czogVGhlIHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciBh
bmQgdGhlICdkYXRhVHlwZScgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0ZXI/IChk
YXRhOiBhbnksIHR5OiBhbnkpOiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgZGF0
YSB0aGF0IHlvdSdyZSBleHBlY3RpbmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5vbmUgaXMg
c3BlY2lmaWVkLCBqUXVlcnkgd2lsbCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhlIE1JTUUg
dHlwZSBvZiB0aGUgcmVzcG9uc2UgKGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBYTUwsIGlu
IDEuNCBKU09OIHdpbGwgeWllbGQgYSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNjcmlwdCB3
aWxsIGV4ZWN1dGUgdGhlIHNjcmlwdCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSByZXR1cm5l
ZCBhcyBhIHN0cmluZykuXG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4gICAgLyoq
XG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFRo
ZSBmdW5jdGlvbiByZWNlaXZlcyB0aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5
IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0
eXBlIG9mIGVycm9yIHRoYXQgb2NjdXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlvbiBvYmpl
Y3QsIGlmIG9uZSBvY2N1cnJlZC4gUG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25kIGFyZ3Vt
ZW50IChiZXNpZGVzIG51bGwpIGFyZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFib3J0XCIs
IGFuZCBcInBhcnNlcmVycm9yXCIuIFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVycm9yVGhy
b3duIHJlY2VpdmVzIHRoZSB0ZXh0dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVzLCBzdWNo
IGFzIFwiTm90IEZvdW5kXCIgb3IgXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMgb2YgalF1
ZXJ5IDEuNSwgdGhlIGVycm9yIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlv
bnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhpcyBoYW5k
bGVyIGlzIG5vdCBjYWxsZWQgZm9yIGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3NzLWRvbWFp
biBKU09OUCByZXF1ZXN0cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGVy
cm9yPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRocm93OiBz
dHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGdsb2JhbCBB
amF4IGV2ZW50IGhhbmRsZXJzIGZvciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlzIHRydWUu
IFNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBhamF4U3Rh
cnQgb3IgYWpheFN0b3AgZnJvbSBiZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8g
Y29udHJvbCB2YXJpb3VzIEFqYXggRXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86IGJvb2xl
YW47XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVyIGtleS92
YWx1ZSBwYWlycyB0byBzZW5kIGFsb25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhNTEh0dHBS
ZXF1ZXN0IHRyYW5zcG9ydC4gVGhlIGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxIdHRwUmVx
dWVzdCBpcyBhbHdheXMgYWRkZWQsIGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVzdCB2YWx1
ZSBjYW4gYmUgY2hhbmdlZCBoZXJlLiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGluZyBjYW4g
YWxzbyBiZSBvdmVyd3JpdHRlbiBmcm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbi4g
KHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5OiBzdHJp
bmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8gYmUgc3Vj
Y2Vzc2Z1bCBvbmx5IGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBy
ZXF1ZXN0LiBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQgaGVhZGVy
LiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBqUXVlcnkg
MS40IHRoaXMgdGVjaG5pcXVlIGFsc28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVkIGJ5IHRo
ZSBzZXJ2ZXIgdG8gY2F0Y2ggdW5tb2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlmTW9kaWZp
ZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVudmlyb25t
ZW50IHRvIGJlIHJlY29nbml6ZWQgYXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5c3RlbSks
IGV2ZW4gaWYgalF1ZXJ5IGRvZXMgbm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRlZmF1bHQu
IFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBhcyBsb2Nh
bDogZmlsZSwgKi1leHRlbnNpb24sIGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNldHRpbmcg
bmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRo
ZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xu
ICAgIGlzTG9jYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBjYWxs
YmFjayBmdW5jdGlvbiBuYW1lIGluIGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3aWxsIGJl
IHVzZWQgaW5zdGVhZCBvZiAnY2FsbGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFydCBvZiB0
aGUgcXVlcnkgc3RyaW5nIGluIHRoZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQnfSB3b3Vs
ZCByZXN1bHQgaW4gJ29uSlNPTlBMb2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBBcyBvZiBq
UXVlcnkgMS41LCBzZXR0aW5nIHRoZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVudHMgalF1
ZXJ5IGZyb20gYWRkaW5nIHRoZSBcIj9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJMIG9yIGF0
dGVtcHRpbmcgdG8gdXNlIFwiPT9cIiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMgY2FzZSwg
eW91IHNob3VsZCBhbHNvIGV4cGxpY2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNldHRpbmcu
IEZvciBleGFtcGxlLCB7IGpzb25wOiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxsYmFja05h
bWVcIiB9XG4gICAgICovXG4gICAganNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU3Bl
Y2lmeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0LiBUaGlz
IHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBieSBqUXVlcnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpRdWVyeSBn
ZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1hbmFnZSB0
aGUgcmVxdWVzdHMgYW5kIHByb3ZpZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGluZy4gWW91
IG1heSB3YW50IHRvIHNwZWNpZnkgdGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8gZW5hYmxl
IGJldHRlciBicm93c2VyIGNhY2hpbmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVlcnkgMS41
LCB5b3UgY2FuIGFsc28gdXNlIGEgZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4gd2hpY2gg
Y2FzZSB0aGUgdmFsdWUgb2YganNvbnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVybiB2YWx1
ZSBvZiB0aGF0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBhbnk7XG4g
ICAgLyoqXG4gICAgICogQSBtaW1lIHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1lIHR5cGUu
ICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBBIHBhc3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVz
dCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0Llxu
ICAgICAqL1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1
bHQsIGRhdGEgcGFzc2VkIGluIHRvIHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3QgKHRlY2hu
aWNhbGx5LCBhbnl0aGluZyBvdGhlciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nlc3NlZCBh
bmQgdHJhbnNmb3JtZWQgaW50byBhIHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUgZGVmYXVs
dCBjb250ZW50LXR5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIi4gSWYg
eW91IHdhbnQgdG8gc2VuZCBhIERPTURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vzc2VkIGRh
dGEsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNzRGF0YT86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwic2NyaXB0
XCIgdHJhbnNwb3J0IGlzIHVzZWQgKGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3aXRoIFwi
anNvbnBcIiBvciBcInNjcmlwdFwiIGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBTZXRzIHRo
ZSBjaGFyc2V0IGF0dHJpYnV0ZSBvbiB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSByZXF1ZXN0
LiBVc2VkIHdoZW4gdGhlIGNoYXJhY3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMgbm90IHRo
ZSBzYW1lIGFzIHRoZSBvbmUgb24gdGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4gICAgc2Ny
aXB0Q2hhcnNldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgbnVtZXJp
YyBIVFRQIGNvZGVzIGFuZCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlc3BvbnNl
IGhhcyB0aGUgY29ycmVzcG9uZGluZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWws
IHRoZSBzdGF0dXMgY29kZSBmdW5jdGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRo
ZSBzdWNjZXNzIGNhbGxiYWNrOyBpZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNsdWRpbmcg
M3h4IHJlZGlyZWN0KSwgdGhleSB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIGVycm9y
IGNhbGxiYWNrLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1c0NvZGU/
OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRv
IGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdldHMgcGFz
c2VkIHRocmVlIGFyZ3VtZW50czogVGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLCBm
b3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3RyaW5nIGRl
c2NyaWJpbmcgdGhlIHN0YXR1czsgYW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxI
dHRwUmVxdWVzdCkgb2JqZWN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBzZXR0aW5n
IGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUg
Y2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBzdWNj
ZXNzPyAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpOiBh
bnk7XG4gICAgLyoqXG4gICAgICogU2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Ig
dGhlIHJlcXVlc3QuIFRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQgc2V0IHdp
dGggJC5hamF4U2V0dXAoKS4gVGhlIHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUgcG9pbnQg
dGhlICQuYWpheCBjYWxsIGlzIG1hZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMgYXJlIGlu
IHByb2dyZXNzIGFuZCB0aGUgYnJvd3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxhYmxlLCBp
dCBpcyBwb3NzaWJsZSBmb3IgYSByZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBjYW4gYmUg
c2VudC4gSW4galF1ZXJ5IDEuNC54IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVj
dCB3aWxsIGJlIGluIGFuIGludmFsaWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMgb3V0OyBh
Y2Nlc3NpbmcgYW55IG9iamVjdCBtZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24uIEluIEZp
cmVmb3ggMy4wKyBvbmx5LCBzY3JpcHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBiZSBjYW5j
ZWxsZWQgYnkgYSB0aW1lb3V0OyB0aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQgYXJyaXZl
cyBhZnRlciB0aGUgdGltZW91dCBwZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86IG51bWJl
cjtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRvIHVzZSB0
aGUgdHJhZGl0aW9uYWwgc3R5bGUgb2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAgKi9cbiAg
ICB0cmFkaXRpb25hbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgcmVx
dWVzdCB0byBtYWtlIChcIlBPU1RcIiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdFVFwiLiBO
b3RlOiBPdGhlciBIVFRQIHJlcXVlc3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERFTEVURSwg
Y2FuIGFsc28gYmUgdXNlZCBoZXJlLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBieSBhbGwg
YnJvd3NlcnMuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBB
IHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5c
biAgICAgKi9cbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2VybmFtZSB0
byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nl
c3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86IHN0cmlu
ZztcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0dHBSZXF1
ZXN0IG9iamVjdC4gRGVmYXVsdHMgdG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFpbGFibGUg
KElFKSwgdGhlIFhNTEh0dHBSZXF1ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJvdmlkZSB5
b3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5jZW1lbnRz
IHRvIHRoZSBmYWN0b3J5LlxuICAgICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipcbiAgICAg
KiBBbiBvYmplY3Qgb2YgZmllbGROYW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9uIHRoZSBu
YXRpdmUgWEhSIG9iamVjdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNldCB3aXRo
Q3JlZGVudGlhbHMgdG8gdHJ1ZSBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5lZWRlZC4g
SW4galF1ZXJ5IDEuNSwgdGhlIHdpdGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90IHByb3Bh
Z2F0ZWQgdG8gdGhlIG5hdGl2ZSBYSFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1aXJpbmcg
aXQgd291bGQgaWdub3JlIHRoaXMgZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNvbW1lbmQg
dXNpbmcgalF1ZXJ5IDEuNS4xKyBzaG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBpdC4gKHZl
cnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tleTogc3Ry
aW5nXTogYW55OyB9O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhSIG9iamVj
dFxuKi9cbmludGVyZmFjZSBKUXVlcnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwgSlF1ZXJ5
UHJvbWlzZTxhbnk+IHtcbiAgICBvdmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpOiBh
bnk7XG4gICAgYWJvcnQoc3RhdHVzVGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qXG4gICAg
SW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUNh
bGxiYWNrIHtcbiAgICBhZGQoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBkaXNhYmxl
KCk6IGFueTtcbiAgICBlbXB0eSgpOiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6IGFueVtd
KTogYW55O1xuICAgIGZpcmVkKCk6IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4dDogYW55
LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJvb2xlYW47
XG4gICAgbG9jaygpOiBhbnk7XG4gICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVtb3ZlKC4u
LmNhbGxiYWNrczogYW55W10pOiBhbnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVyeSBQcm9t
aXNlcyB0byBpbnRlcm9wIHdpdGggbm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVyZmFjZSBK
UXVlcnlHZW5lcmljUHJvbWlzZTxUPiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTog
VCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5lcmljUHJv
bWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBv
blJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9
PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpR
dWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2FsbGJhY2tz
XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lv
bnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVBy
b21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNl
PFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9t
aXNlPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9t
aXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9taXNl
PFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVBy
b21pc2U8VD47XG5cbiAgICAvLyBEZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xuICAgIHBp
cGUoZG9uZUZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBhbnkpID0+
IGFueSwgcHJvZ3Jlc3NGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPGFu
eT47XG5cbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86
ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjog
YW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6
ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJl
YXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkg
PT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVl
OiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkp
OiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+
IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkg
PT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246
IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVzZSBKUXVl
cnkgUHJvbWlzZXMgU3Vja1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlb
XSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/
OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAg
IHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNz
PzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAg
ICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4g
ICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVy
aWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55
KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVl
cnkgZGVmZXJyZWQsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeURlZmVy
cmVkPFQ+IGV4dGVuZHMgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9u
cyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVl
cnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBKUXVl
cnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuXG4gICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG4gICAgbm90aWZ5V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBKUXVlcnlE
ZWZlcnJlZDxUPjtcbiAgICByZWplY3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgcmVzb2x2ZSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIHJlc29sdmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcbiAgICBzdGF0ZSgpOiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdldD86IGFu
eSk6IEpRdWVyeVByb21pc2U8VD47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRoZSBKUXVl
cnkgZXh0ZW5zaW9uIG9mIHRoZSBXM0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZhY2UgQmFz
ZUpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtcbiAgICBk
ZWxlZ2F0ZVRhcmdldDogRWxlbWVudDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVh
bjtcbiAgICBpc0ltbWVkaWF0ZVByb3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIGlz
UHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4g
ICAgcHJldmVudERlZmF1bHQoKTogYW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQ7XG4g
ICAgcmVzdWx0OiBhbnk7XG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4g
ICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdl
WTogbnVtYmVyO1xuICAgIHdoaWNoOiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbn1c
blxuaW50ZXJmYWNlIEpRdWVyeUlucHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZl
bnRPYmplY3Qge1xuICAgIGFsdEtleTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29sZWFuO1xu
ICAgIG1ldGFLZXk6IGJvb2xlYW47XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5cbmludGVy
ZmFjZSBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVj
dCB7XG4gICAgYnV0dG9uOiBudW1iZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVu
dFk6IG51bWJlcjtcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xu
ICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5YOiBudW1i
ZXI7XG4gICAgc2NyZWVuWTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5RXZlbnRP
YmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBhbnk7XG4g
ICAgY2hhckNvZGU6IG51bWJlcjtcbiAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBudW1iZXI7
XG59XG5cbmludGVyZmFjZSBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpR
dWVyeUV2ZW50T2JqZWN0IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50O1xufVxu
XG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmpl
Y3QsIEpRdWVyeUlucHV0RXZlbnRPYmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QsIEpRdWVy
eUtleUV2ZW50T2JqZWN0LCBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxuLypcbiAg
ICBDb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3NlclxuKi9cblxu
aW50ZXJmYWNlIEpRdWVyeVN1cHBvcnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAgIGJveE1v
ZGVsPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBjaGVja0Ns
b25lPzogYm9vbGVhbjtcbiAgICBjaGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzogYm9vbGVh
bjtcbiAgICBjc3NGbG9hdD86IGJvb2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBib29sZWFu
O1xuICAgIGh0bWxTZXJpYWxpemU/OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNwYWNlPzog
Ym9vbGVhbjtcbiAgICBub0Nsb25lQ2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9uZUV2ZW50
PzogYm9vbGVhbjtcbiAgICBvcGFjaXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxlZD86IGJv
b2xlYW47XG4gICAgb3B0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/ICgpOiBi
b29sZWFuO1xuICAgIHN0eWxlPzogYm9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzogYm9vbGVh
bjtcbiAgICB0Ym9keT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJhbSB7XG4g
ICAgKG9iajogYW55KTogc3RyaW5nO1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6IGJvb2xl
YW4pOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNvbnN0cnVj
dCBqUXVlcnkgZXZlbnRzICh3aXRoICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBzZXBhcmF0
ZWx5IGluc3RlYWQgb2YgaW5saW5lIGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICogb3ZlcnJp
ZGluZyB0aGUgY29uc3RydWN0aW9uIGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5nc1xuICog
cmV0dXJuaW5nIHNwZWNpZmljIGV2ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBKUXVlcnlF
dmVudENvbnN0cnVjdG9yIHtcbiAgICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBh
bnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9w
ZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIGludGVy
ZmFjZSB1c2VkIHRvIHNwZWNpZnkgZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJmYWNlIEpR
dWVyeUVhc2luZyB7XG4gICAgbGluZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBzd2luZyhw
OiBudW1iZXIpOiBudW1iZXI7XG59XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2YgalF1ZXJ5
ICh0aG9zZSBvbiAkIGFuZCBqUXVlcnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5
U3RhdGljIHtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIEhUVFAg
KEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yg
a2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0
aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdp
dGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVlcnlBamF4
U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBhc3luY2hy
b25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZp
Z3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1
bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4gICAgICov
XG4gICAgYWpheCh1cmw6IHN0cmluZywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGluZ3MpOiBK
UXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9ucyBv
ciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQgYW5k
IGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZGF0YVR5cGVzIEFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3Jl
IHNwYWNlLXNlcGFyYXRlZCBkYXRhVHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRs
ZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAg
Ki9cbiAgICBhamF4UHJlZmlsdGVyKGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAob3B0czog
YW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0aW9u
cyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNlbnQg
YW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1
cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRsZXI6IChv
cHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGlu
Z3M7XG5cbiAgICAgLyoqXG4gICAgICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFq
YXggcmVxdWVzdHMuIEl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxuICAgICAg
KiBAcGFyYW0gb3B0aW9ucyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUg
dGhlIGRlZmF1bHQgQWpheCByZXF1ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwuXG4gICAg
ICAqL1xuICAgIGFqYXhTZXR1cChvcHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2b2lkO1xu
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
R0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBz
dWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVz
dCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBl
Y3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpz
b24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBzdWNj
ZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9
PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExv
YWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2gg
dGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBv
ciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAg
ICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQg
aWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBl
IG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBH
dWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6
IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6
IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpR
dWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5n
IGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUg
c2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAg
ICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNl
cnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBo
dG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nl
c3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+
IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9h
ZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBB
IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBh
bnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5
WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2Vy
dmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwg
QSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQu
XG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2Vu
dCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mg
QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1
Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIp
ID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBk
YXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUg
cmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0
cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAq
IEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0
aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBk
YXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBq
cVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9h
ZCBhIEphdmFTY3JpcHQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1
ZXN0LCB0aGVuIGV4ZWN1dGUgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5n
IGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAq
IEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0
aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBzdHJpbmcs
IHN1Y2Nlc3M/OiAoc2NyaXB0OiBzdHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpR
dWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBhcmFtO1xu
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
UE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWlu
aW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0g
c3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJl
IG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBk
YXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3Mg
KHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDog
c3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjog
SlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8q
KlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVx
dWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBw
bGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhl
IHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0
IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlw
ZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERl
ZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCku
XG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86
IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55
LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRh
dGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUg
cmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0
cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAq
IEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0
aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1
dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0
eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2Vu
dCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBv
c3QodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0
U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJp
bmcpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2UgY2FsbGJh
Y2tzIGxpc3Qgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFuYWdlIGNh
bGxiYWNrIGxpc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlvbmFsIGxp
c3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2FsbGJhY2sg
bGlzdCBiZWhhdmVzLlxuICAgICAqL1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmluZyk6IEpR
dWVyeUNhbGxiYWNrO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMgdGhlIGV4
ZWN1dGlvbiBvZiBqUXVlcnkncyByZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBo
b2xkIEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVlc3RlZCBv
ciByZWxlYXNlZFxuICAgICAqL1xuICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTogdm9pZDtc
blxuICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAgIChl
bGVtZW50OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5O1xuICAg
IChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBKUXVlcnkp
OiBKUXVlcnk7XG4gICAgKGZ1bmM6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJheTogYW55
W10pOiBKUXVlcnk7XG4gICAgKCk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbGlucXVp
c2ggalF1ZXJ5J3MgY29udHJvbCBvZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSByZW1vdmVBbGwgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1vdmUgYWxs
IGpRdWVyeSB2YXJpYWJsZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcgalF1ZXJ5
IGl0c2VsZikuXG4gICAgICovXG4gICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29sZWFuKTog
T2JqZWN0O1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxs
YmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZl
cnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9y
IHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVy
cmVkczogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAg
LyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMg
YmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmplY3RzIHRo
YXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEphdmFTY3Jp
cHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRl
IGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5
IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0
cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4u
ZGVmZXJyZWRzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29rczogeyBb
a2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAvKipcbiAg
ICAgKiBTdG9yZSBhcmJpdHJhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBl
bGVtZW50LiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEu
XG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8g
c2V0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAgICovXG4g
ICAgZGF0YTxUPihlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBUO1xu
ICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3IgdGhl
IGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSksIG9y
IHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxu
ICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNl
dC5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogYW55
O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBmb3Ig
dGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSks
IG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRh
LlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAgIGRlcXVl
dWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4gICAgaGFz
RGF0YShlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1lbnQ6IEVs
ZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1lbnQ6IEVs
ZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVy
eTtcblxuICAgIHJlbW92ZURhdGEoZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3RhcnQ/OiAo
ZGVmZXJyZWQ6IEpRdWVyeURlZmVycmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJlZDxUPjtc
blxuICAgIC8vIEVmZmVjdHNcbiAgICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRlcnZhbDog
bnVtYmVyOyBzdG9wOiAoKSA9PiB2b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBmYXN0OiBu
dW1iZXI7IH07IG9mZjogYm9vbGVhbjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZlbnRzXG4g
ICAgcHJveHkoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnksIC4uLmFy
Z3M6IGFueVtdKTogYW55O1xuICAgIHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3RyaW5nLCAu
Li5hcmdzOiBhbnlbXSk6IGFueTtcblxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0cnVjdG9y
O1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1ZXJ5O1xu
XG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55OyAgLy9U
T0RPOiBEZWNpZGUgaG93IHdlIHdhbnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTogYm9vbGVh
bjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0O1xuXG4g
ICAgLy8gVXRpbGl0aWVzXG4gICAgY29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBjb250YWlu
ZWQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnksIGNhbGxi
YWNrOiAoaW5kZXhJbkFycmF5OiBhbnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFueSk6IGFu
eTtcbiAgICBlYWNoKGNvbGxlY3Rpb246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6
IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7XG4gICAg
ZWFjaDxUPihjb2xsZWN0aW9uOiBUW10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBudW1iZXIs
IHZhbHVlT2ZFbGVtZW50OiBUKSA9PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFyZ2V0OiBh
bnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFuLCB0YXJn
ZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNvZGU6IHN0
cmluZyk6IGFueTtcblxuICAgIGdyZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1lbnRPZkFy
cmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0PzogYm9vbGVh
bik6IFRbXTtcblxuICAgIGluQXJyYXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZyb21JbmRl
eD86IG51bWJlcik6IG51bWJlcjtcblxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29sZWFuO1xu
ICAgIGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rpb24ob2Jq
OiBhbnkpOiBib29sZWFuO1xuICAgIGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAg
ICBpc1BsYWluT2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhvYmo6IGFu
eSk6IGJvb2xlYW47XG4gICAgaXNYTUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5cbiAgICBt
YWtlQXJyYXkob2JqOiBhbnkpOiBhbnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTogVFtdLCBj
YWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gVSk6
IFVbXTtcbiAgICBtYXAoYXJyYXk6IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJheTogYW55
LCBpbmRleEluQXJyYXk6IGFueSkgPT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4oZmlyc3Q6
IFRbXSwgc2Vjb25kOiBUW10pOiBUW107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtdLCBzZWNv
bmQ6IFVbXSk6IGFueVtdO1xuXG4gICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTogbnVtYmVy
O1xuXG4gICAgcGFyc2VKU09OKGpzb246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxuICAgICAq
IFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBkYXRhYSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqL1xu
ICAgIHBhcnNlWE1MKGRhdGE6IHN0cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVldWUoZWxl
bWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6IEpRdWVy
eTtcblxuICAgIHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9iajogYW55
KTogc3RyaW5nO1xuXG4gICAgdW5pcXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAgIC8qKlxu
ICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBkYXRhIEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAgICAqIEBw
YXJhbSBjb250ZXh0IERPTSBlbGVtZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGluIHdoaWNo
IHRoZSBIVE1MIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBrZWVwU2Ny
aXB0cyBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0cyBwYXNz
ZWQgaW4gdGhlIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6IHN0cmlu
ZywgY29udGV4dD86IEhUTUxFbGVtZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBhbnlbXTtc
blxuICAgIEFuaW1hdGlvbihlbGVtOiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9uczogYW55
KTogYW55O1xuXG4gICAgZWFzaW5nOiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAgVGhlIGpR
dWVyeSBpbnN0YW5jZSBtZW1iZXJzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAgLy8gQUpB
WFxuICAgIGFqYXhDb21wbGV0ZShoYW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheEVycm9y
KGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRp
b246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChldmVudDog
YW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIGFqYXhTdGFydChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
YWpheFN0b3AoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNjZXNzKGhh
bmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246
IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0YT86IGFu
eSwgY29tcGxldGU/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3RyaW5nO1xu
ICAgIHNlcmlhbGl6ZUFycmF5KCk6IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIGFk
ZENsYXNzKGNsYXNzTmFtZXM6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhmdW5jOiAo
aW5kZXg6IGFueSwgY3VycmVudENsYXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2VsZWN0b3I/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cblxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nKTog
c3RyaW5nO1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1
ZXJ5O1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6IGFueSwg
YXR0cjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpRdWVyeTtc
blxuICAgIGhhc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAgIGh0bWwo
KTogc3RyaW5nO1xuICAgIGh0bWwoaHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0
bWwoaHRtbENvbnRlbnQ6IChpbmRleDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+IHN0cmlu
Zyk6IEpRdWVyeTtcbiAgICBodG1sKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgcHJvcChw
cm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5n
LCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7XG4gICAg
cHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFByb3BlcnR5
VmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRyaWJ1dGVO
YW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/OiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgcmVtb3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55
KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTogc3RyaW5n
KTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3dGNoPzog
Ym9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgdG9nZ2xlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBzd3RjaDog
YW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2YWx1ZTog
c3RyaW5nW10pOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAg
dmFsKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDogYW55LCB2
YWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZh
bHVlIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZXQg
b2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUg
QSBDU1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nKTog
c3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBm
b3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBy
b3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZh
bHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5h
bWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQg
b25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFt
ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5c
biAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZv
ciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJv
cGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFs
dWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFt
ZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0
IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVu
dHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5h
bWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHku
XG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyW10p
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVz
IGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
cHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEg
ZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1cnJlbnQg
ZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRo
ZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGNzcyhw
cm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5n
KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENT
UyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBh
cmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMg
dGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBl
bGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAq
L1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2
YWx1ZTogbnVtYmVyKSA9PiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9u
ZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJvcGVydHkt
dmFsdWUgcGFpcnMgdG8gc2V0LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBPYmplY3Qp
OiBKUXVlcnk7XG5cbiAgICBoZWlnaHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1ZTogbnVt
YmVyKTogSlF1ZXJ5O1xuICAgIGhlaWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhl
aWdodChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxu
ICAgIGlubmVySGVpZ2h0KCk6IG51bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTogbnVtYmVy
KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJXaWR0aCh2
YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVtYmVyOyB0
b3A6IG51bWJlcjsgfTtcbiAgICBvZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVyeTtcbiAg
ICBvZmZzZXQoZnVuYzogKGluZGV4OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAg
ICBvdXRlckhlaWdodCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IEpR
dWVyeTtcblxuICAgIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7
XG4gICAgb3V0ZXJXaWR0aCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6
IEpRdWVyeTtcblxuICAgIHBvc2l0aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsg
fTtcblxuICAgIHNjcm9sbExlZnQoKTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFsdWU6IG51
bWJlcik6IEpRdWVyeTtcblxuICAgIHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Nyb2xsVG9w
KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4gICAgd2lk
dGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIHdpZHRoKGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLy8gRGF0YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzogc3RyaW5n
KTogSlF1ZXJ5O1xuXG4gICAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVyeTtc
biAgICBkYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgZGF0
YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8vIERlZmVycmVkXG4gICAgcHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBhbnkpOiBK
UXVlcnlQcm9taXNlPGFueT47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShwcm9wZXJ0
aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xu
ICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3Ry
aW5nLCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGll
czogYW55LCBvcHRpb25zOiB7IGR1cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7IGNvbXBs
ZXRlPzogRnVuY3Rpb247IHN0ZXA/OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBzcGVjaWFs
RWFzaW5nPzogYW55OyB9KTogSlF1ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51bWJlciwg
cXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55
LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGVh
c2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlT3V0KGR1
cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0KGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/OiBhbnkp
OiBKUXVlcnk7XG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgZWFz
aW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVUb2dnbGUo
ZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVUb2dnbGUo
ZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBmaW5pc2goKTogSlF1ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgY2Fs
bGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzog
c3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRpb24/OiBh
bnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBhbnksIGVh
c2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZURvd24o
ZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlRG93bihk
dXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
blxuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVhc2luZz86
IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFyUXVldWU/
OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3AocXVldWU/
OiBhbnksIGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5
O1xuXG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtc
biAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVlcnk7XG5c
biAgICAvLyBFdmVudHNcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE/OiBh
bnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnksIHByZXZl
bnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywg
cHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50czogYW55
W10pOiBKUXVlcnk7XG5cbiAgICBibHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFueSwgaGFu
ZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24gYW4gZWxl
bWVudC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNj
cmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29u
dGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4g
ICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/OiBhbnks
IGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAg
Y2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJj
bGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGljayhldmVu
dERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRibGNsaWNr
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRibGNsaWNr
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIGRibGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgZGJsY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2VsZWN0b3I6
IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhl
IFwiZm9jdXNcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgZm9jdXMoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBm
b2N1cyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50
IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcg
ZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNvdXRc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgZm9jdXNvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBmb2N1c291dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCB0
d28gaGFuZGxlcnMgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4g
dGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
bW91c2UgcG9pbnRlciBlbnRlcnMgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXJP
dXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVhdmVzIHRo
ZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhIHNp
bmdsZSBoYW5kbGVyIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVu
IHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGhvdmVyKGhhbmRsZXJJbk91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlkb3du
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5ZG93blwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBrZXlkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIGtleWRvd25cIlwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBrZXlkb3duKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5
S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwia2V5cHJlc3NcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtl
eXByZXNzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4gZWxlbWVu
dC5cbiAgICAgKi9cbiAgICBrZXl1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAq
XG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZhU2NyaXB0
IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55LCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxvYWRc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBsb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
bG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRh
IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZl
bnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZlbnREYXRh
PzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRvd25cIiBl
dmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlZG93blwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IG1vdXNlZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bW91c2Vkb3duKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwibW91c2VlbnRlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4g
ICAgbW91c2VlbnRlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBt
b3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEg
QW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVu
dCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihldmVu
dERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1v
dXNlbGVhdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUo
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBm
aXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFu
IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBPYmplY3Qs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVcIiBldmVu
dCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92ZVwiIEph
dmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlbW92ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91
c2Vtb3ZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1v
dXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwibW91c2VvdXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1v
dXNlb3V0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92
ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoZXZlbnRE
YXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3Vz
ZXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1
cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNldXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVy
IHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNz
ZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZXVwKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1v
dXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92
ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9u
YWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJr
ZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVj
dG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNz
ZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBl
dmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2
ZW50czogc3RyaW5nLCBzZWxlY3Rvcj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1v
dmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9y
IG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2Vz
LCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVn
aW5cIiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIg
ZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3Bl
Y2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudHMgQW4gb2JqZWN0IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25l
IG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3Bh
Y2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJldmlvdXNs
eSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2VkIHRvIC5v
bigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9mZihldmVu
dHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBv
bmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5t
eVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93
ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4g
ZmFsc2UuIFJlc3QgcGFyYW1ldGVyIGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRlcnMgcGFz
c2VkIHRvIGpRdWVyeS50cmlnZ2VyKCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFtZXRlcnMg
b24gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0aW9uYWwg
KD8gc3ludGF4KS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRv
d24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0
cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBl
bGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQg
YXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFs
c2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25l
IG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFu
ZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQ
bHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmls
dGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2Vy
IHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50
IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50
LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGlu
IGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4g
VGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5j
dGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVu
dHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50
cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBvciBtb3Jl
IHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgYW5k
IHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9y
IHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB3
aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQs
IHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3Rl
ZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBo
YW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICovXG4gICAg
b24oZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnksIGRhdGE/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFu
IGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qg
b25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5
cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZlbnQgbmFt
ZXMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0IHRoZSB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3Ry
aW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3Ig
dGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVs
ZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywgc3VjaCBh
cyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxuICAgICAq
IEBwYXJhbSBkYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAg
ICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFu
ZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRl
ZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIg
b3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0
b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1l
bnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9t
aXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUg
c2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxz
byBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMg
cmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2VsZWN0b3I6
IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQg
Zm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBl
ciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBP
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRh
bnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0
aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdn
ZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFt
IGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVu
IGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2Ug
aXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5
IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2Vs
ZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBo
YW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1
dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyByZXBy
ZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25h
bCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0aW9u
IHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBB
IHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3Rl
ZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9yIGlz
IG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0IHJl
YWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBi
ZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9jY3Vy
cy5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2Vs
ZWN0b3I/OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxuICAgICAq
IFNwZWNpZnkgYSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxseSBsb2Fk
ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
YWZ0ZXIgdGhlIERPTSBpcyByZWFkeS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVyOiBGdW5j
dGlvbik6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVzaXplXCIg
ZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IHJlc2l6ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
InJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRE
YXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
ZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXpl
KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNj
cm9sbFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2Nyb2xs
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBzY3JvbGwoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IHNjcm9sbChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0
aGUgXCJzZWxlY3RcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNlbGVjdCgp
OiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
InNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgc2VsZWN0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBzZWxlY3QoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwic3VibWl0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBz
dWJtaXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4g
ICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIHN1Ym1pdChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VyKGV2
ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5O1xuICAg
IHRyaWdnZXIoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dl
ckhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55W10pOiBP
YmplY3Q7XG5cbiAgICB1bmJpbmQoZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuYmluZChl
dmVudFR5cGU6IHN0cmluZywgZmxzOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmluZChldnQ6
IGFueSk6IEpRdWVyeTtcblxuICAgIHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdh
dGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShz
ZWxlY3RvcjogYW55LCBldmVudHM6IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKG5hbWVz
cGFjZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQoZXZlbnRE
YXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxlbWVudDtc
biAgICBqcXVlcnk6IHN0cmluZztcblxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVudERhdGE6
IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBw
dXNoU3RhY2soZWxlbWVudHM6IGFueVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55KTogSlF1
ZXJ5O1xuXG4gICAgLy8gTWFuaXB1bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDogYW55W10p
OiBKUXVlcnk7XG4gICAgYWZ0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIGFwcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBlbmQoZnVu
YzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5k
VG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDogYW55W10p
OiBKUXVlcnk7XG4gICAgYmVmb3JlKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBjbG9uZSh3aXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRoRGF0YUFu
ZEV2ZW50cz86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/OiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBlbXB0eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRlcih0YXJn
ZXQ6IGFueSk6IEpRdWVyeTtcbiAgICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBKUXVlcnk7
XG5cbiAgICBwcmVwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHByZXBlbmQo
ZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcHJl
cGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9yPzogYW55
KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAg
IHJlcGxhY2VXaXRoKGZ1bmM6IGFueSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3RyaW5nO1xu
ICAgIHRleHQodGV4dFN0cmluZzogYW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0cmluZzog
KGluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
dG9BcnJheSgpOiBhbnlbXTtcblxuICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3cmFwKHdy
YXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4OiBhbnkp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICB3cmFwSW5uZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4g
ICAgd3JhcElubmVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
LyBNaXNjZWxsYW5lb3VzXG4gICAgZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTogRWxlbWVu
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55O1xuXG4g
ICAgaW5kZXgoKTogbnVtYmVyO1xuICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBudW1iZXI7
XG4gICAgaW5kZXgoZWxlbWVudDogYW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllc1xu
ICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6IHN0cmlu
Z106IGFueTtcbiAgICBbeDogbnVtYmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBUcmF2ZXJz
aW5nXG4gICAgYWRkKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4g
ICAgYWRkKC4uLmVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIGFkZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNoaWxkcmVu
KHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IEVsZW1l
bnQpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICBjbG9z
ZXN0KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczogYW55LCBj
b250ZXh0PzogRWxlbWVudCk6IGFueVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5O1xuXG4g
ICAgZW5kKCk6IEpRdWVyeTtcblxuICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAg
ICBmaWx0ZXIoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVuYzogKGlu
ZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55KTogSlF1
ZXJ5O1xuICAgIGZpbHRlcihvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQoc2VsZWN0
b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAg
ICBmaW5kKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5O1xuXG4g
ICAgaGFzKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5lZDogRWxl
bWVudCk6IEpRdWVyeTtcblxuICAgIGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFuO1xuICAg
IGlzKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVsZW1lbnQ6
IGFueSk6IGJvb2xlYW47XG4gICAgaXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4gICAgbGFz
dCgpOiBKUXVlcnk7XG5cbiAgICBtYXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21FbGVtZW50
OiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzogc3RyaW5n
KTogSlF1ZXJ5O1xuXG4gICAgbmV4dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxu
ICAgIG5leHRVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5
O1xuICAgIG5leHRVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIG5leHRVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIG5vdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChmdW5jOiAo
aW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkpOiBKUXVl
cnk7XG4gICAgbm90KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFyZW50KCk6
IEpRdWVyeTtcblxuICAgIHBhcmVudChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAg
IHBhcmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRzVW50aWwo
c2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwYXJlbnRz
VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBw
YXJlbnRzVW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBwcmV2KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChzZWxlY3Rv
cj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0cmluZywg
ZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50PzogRWxlbWVu
dCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBKUXVlcnks
IGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9yPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyKTog
SlF1ZXJ5O1xuXG4gICAgLy8gVXRpbGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/OiBzdHJp
bmcpOiBhbnlbXTtcbiAgICBxdWV1ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxi
YWNrOiBhbnkpOiBKUXVlcnk7XG4gICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBK
UXVlcnk7XG59XG5kZWNsYXJlIG1vZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQgPSAkO1xu
fVxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAkOiBKUXVl
cnlTdGF0aWM7XG4vLyBsaWJzL2FuZ3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRlZmluaXRp
b25zIGZvciBBbmd1bGFyIEpTIDEuMFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJqcy5vcmdc
bi8vIERlZmluaXRpb25zIGJ5OiBEaWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20vZGllZ292
aWxhcj5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVm
aW5pdGVseVR5cGVkXG5cblxuXG5kZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxhclN0YXRp
YztcblxuLy8gU3VwcG9ydCBmb3IgcGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25cbmludGVy
ZmFjZSBGdW5jdGlvbiB7XG4gICAgJGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuLy8gbmcgbW9kdWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuZGVjbGFyZSBtb2R1bGUgbmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJvdmlkZXJz
IGV4dGVuZCB0aGlzIGludGVyZmFjZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3ZpZGVyIHtc
biAgICAgICAgJGdldDogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEFuZ3VsYXJTdGF0aWNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJTdGF0aWMg
e1xuICAgICAgICBiaW5kKGNvbnRleHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlb
XSk6IEZ1bmN0aW9uO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBtb2R1bGVz
PzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVt
ZW50OiBKUXVlcnksIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAg
ICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8u
SUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3VtZW50LCBt
b2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNvcHkoc291
cmNlOiBhbnksIGRlc3RpbmF0aW9uPzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50OiBJQXVn
bWVudGVkSlF1ZXJ5U3RhdGljO1xuICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZhbHVlMjog
YW55KTogYm9vbGVhbjtcbiAgICAgICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4uLnNvdXJj
ZXM6IGFueVtdKTogYW55O1xuICAgICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRvcjogKHZh
bHVlOiBhbnksIGtleTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4gICAgICAg
IGZyb21Kc29uKGpzb246IHN0cmluZyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJnPzogYW55
KTogYW55O1xuICAgICAgICBpbmplY3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3Rv
clNlcnZpY2U7XG4gICAgICAgIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAg
IGlzRGF0ZSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZhbHVlOiBh
bnkpOiBib29sZWFuO1xuICAgICAgICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzTnVtYmVy
KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55KTogYm9v
bGVhbjtcbiAgICAgICAgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlz
VW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uoc3RyOiBz
dHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFyIGFwcGxp
Y2F0aW9uXG5cdFx0b2ZmaWNpYWwgZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmluZyBhbmd1
bGFyIG1vZHVsZXMuXG5cdFx0c2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1
bGFyLk1vZHVsZVxuXHRcdCovXG4gICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8qKiBuYW1l
IG9mIHlvdXIgbW9kdWxlIHlvdSB3YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAgbmFtZTog
c3RyaW5nLFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBlbmRzIG9u
ICovXG4gICAgICAgICAgICByZXF1aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAgY29uZmln
RnVuY3Rpb24/OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFueVtdKTog
dm9pZDtcbiAgICAgICAgdG9Kc29uKG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTogc3RyaW5n
O1xuICAgICAgICB1cHBlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIHZlcnNp
b246IHtcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9yOiBudW1i
ZXI7XG4gICAgICAgICAgICBtaW5vcjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBudW1iZXI7
XG4gICAgICAgICAgICBjb2RlbmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIGludGVyZmFjZSBJTW9kdWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6IHN0cmlu
ZywgYW5pbWF0aW9uRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBhbmltYXRp
b24obmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxl
O1xuICAgICAgICBhbmltYXRpb24ob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICAv
KiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byBy
ZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGlu
Z1xuXHRcdCAqL1xuICAgICAgICBjb25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBt
ZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9k
dWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRlZEZ1bmN0
aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFs
dWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0KTogSU1v
ZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1
Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmlu
ZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAg
Y29udHJvbGxlcihvYmplY3QgOiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUo
bmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAg
ICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlb
XSk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7
XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBG
dW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVB
bm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG9iamVj
dDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgZmlsdGVy
RmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1l
OiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAg
ICAgIGZpbHRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG5h
bWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVs
ZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1
Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9iamVjdCk6
IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5jdGlvbik6
IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJ
TW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0cnVjdG9y
OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBpbmxp
bmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNl
KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3RyaW5nLCB2
YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3QpOiBJTW9k
dWxlO1xuXG4gICAgICAgIC8vIFByb3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAg
ICAgICByZXF1aXJlczogc3RyaW5nW107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gQXR0cmlidXRlc1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJQXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVjZXNzYXJ5
IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBub3QgdmVy
eSBlbGVnYW50XG5cdC8vIGJlY2F1c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28nXSBpbnN0
ZWFkIG9mIGF0dHJzLmZvbyBidXQgSSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxuXHQvLyB0
aGlzIHNob3VsZCByZWFsbHkgYmUgbGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBpdCBjcmVh
dGVzIHRoaXMgcHJvYmxlbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4NTQvMTY1
NjU2XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUgQ1NTIGNs
YXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRoZVxuICAg
ICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0
aW9uIHdpbGwgYmUgdHJpZ2dlcmVkXG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRkaXRpb24u
XG4gICAgICAgICRhZGRDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAv
LyBSZW1vdmVzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBw
YXJhbWV0ZXIgZnJvbSB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUg
ZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAgICAgICAg
Ly8gdGhlIGNsYXNzIHJlbW92YWwuXG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1ZhbDogc3Ry
aW5nKTogdm9pZDtcblxuICAgICAgICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRlIHZhbHVl
LlxuICAgICAgICAkc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxuICAgICAg
ICAvLyBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAvLyBUaGUg
b2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBuZXh0ICRk
aWdlc3RcbiAgICAgICAgLy8gZm9sbG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2ZXIgaXMg
dGhlbiBpbnZva2VkIHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQgdmFsdWUg
Y2hhbmdlcy5cbiAgICAgICAgJG9ic2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/OmFueSk9
PmFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50IGF0dHJp
YnV0ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxuICAgICAg
ICAvLyB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNrIHRvIGFj
dHVhbCBuYW1lLlxuICAgICAgICAkYXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIEZvcm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVyXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7XG4gICAg
ICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAg
ICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgICAgICAk
ZXJyb3I6IGFueTtcbiAgICAgICAgJGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9kZWxDb250
cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcuSU5nTW9k
ZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4gICAgICAg
ICRzZXRQcmlzdGluZSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIE5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7XG4gICAg
ICAgICRyZW5kZXIoKTogdm9pZDtcbiAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJv
cktleTogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8gRG9jdW1l
bnRhdGlvbiBzdGF0ZXMgdmlld1ZhbHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3RyaW5nIGJ1
dCBvdGhlclxuICAgICAgICAvLyB0eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0byB1c2Ug
dGhlbS5cbiAgICAgICAgJHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAgICAgICAg
JHZpZXdWYWx1ZTogYW55O1xuXG4gICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAgICAgICAg
JHBhcnNlcnM6IElNb2RlbFBhcnNlcltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1vZGVsRm9y
bWF0dGVyW107XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6IGJvb2xl
YW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29sZWFuO1xu
ICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVs
UGFyc2VyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElNb2RlbEZvcm1hdHRlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5KCk6IGFu
eTtcbiAgICAgICAgJGFwcGx5KGV4cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhw
OiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNhc3QobmFt
ZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAgICRkZXN0
cm95KCk6IHZvaWQ7XG4gICAgICAgICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVtaXQobmFt
ZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAgICAgLy8g
RG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRh
dG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcsIGFyZ3M/
OiBPYmplY3QpOiBhbnk7XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTogSVNjb3Bl
KSA9PiBhbnksIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlv
biBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNvdW50cyBv
biBpdFxuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7XG4gICAg
ICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IHZvaWQ7
XG5cbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0aW9uIGNo
ZWNraW5nIHN0cmF0ZWd5XG4gICAgICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJU2NvcGU7
XG5cbiAgICAgICAgJG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFuZ3VsYXJF
dmVudCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRj
aCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFs
aXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9u
OiBzdHJpbmcsIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3Bl
OiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4g
ICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxp
c3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAg
ICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlz
dGVuZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4g
YW55LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0
Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5ld1ZhbHVl
OiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xu
ICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUp
ID0+IGFueSwgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTog
SVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2NvcGU7XG5c
biAgICAgICAgJGlkOiBudW1iZXI7XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNcbiAgICAg
ICAgJCRpc29sYXRlQmluZGluZ3M6IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJQW5ndWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2NvcGU6IElT
Y29wZTtcbiAgICAgICAgY3VycmVudFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6IHN0cmlu
ZztcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZhdWx0UHJl
dmVudGVkOiBib29sZWFuO1xuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50cyB0aGF0
IHdlcmUgJGVtaXQtdGVkXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9uO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRzIFdpbmRv
dyB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZpY2VcbiAg
ICAvLyBUT0RPIHVuZG9jdW1lbnRlZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgc291
cmNlIGNvZGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJyb3dzZXJT
ZXJ2aWNlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0U2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGltZW91dFxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZpY2Uge1xu
ICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJv
b2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8
YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
SW50ZXJ2YWxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRpbnRlcnZhbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50
ZXJ2YWxTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyLCBj
b3VudD86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55PjtcbiAg
ICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAgICAobmFt
ZTogc3RyaW5nKTogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJQcm92
aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBz
dHJpbmcsIGZpbHRlckZhY3Rvcnk6IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAgICBpZDog
c3RyaW5nO1xuXG4gICAgICAgIC8vIFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICAv
LyBDaGVjayBhbmd1bGFyJ3MgaTE4biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAgTlVNQkVS
X0ZPUk1BVFM6IElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBEQVRFVElN
RV9GT1JNQVRTOiBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBwbHVy
YWxDYXQ6IChudW06IGFueSkgPT4gc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9j
YWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBzdHJpbmc7
XG4gICAgICAgIEdST1VQX1NFUDogc3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxvY2FsZU51
bWJlclBhdHRlcm5EZXNjcmlwdG9yW107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3RyaW5nO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3Ige1xu
ICAgICAgICBtaW5JbnQ6IG51bWJlcjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xuICAgICAg
ICBtYXhGcmFjOiBudW1iZXI7XG4gICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAgICBwb3NT
dWY6IHN0cmluZztcbiAgICAgICAgbmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1Zjogc3Ry
aW5nO1xuICAgICAgICBnU2l6ZTogbnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJlcjtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvciB7XG4g
ICAgICAgIE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5nW107XG4g
ICAgICAgIERBWTogc3RyaW5nW107XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtcbiAgICAg
ICAgQU1QTVM6IHN0cmluZ1tdO1xuICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAgICAgc2hv
cnQ6IHN0cmluZztcbiAgICAgICAgZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9uZ0RhdGU6
IHN0cmluZztcbiAgICAgICAgbWVkaXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9ydERhdGU6
IHN0cmluZztcbiAgICAgICAgbWVkaXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9ydFRpbWU6
IHN0cmluZztcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2dTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2dcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xuICAgICAg
ICBkZWJ1ZzogSUxvZ0NhbGw7XG4gICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAgICAgaW5m
bzogSUxvZ0NhbGw7XG4gICAgICAgIGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46IElMb2dD
YWxsO1xuICAgIH1cblxuICAgIC8vIFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGludGVyZmFj
ZSBzbyB3ZSBjYW4gcmVvcGVuIGl0IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sgbW9kdWxl
LlxuICAgIGludGVyZmFjZSBJTG9nQ2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlbXSk6IHZv
aWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJzZVxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtcbiAgICAg
ICAgKGV4cHJlc3Npb246IHN0cmluZyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElDb21waWxlZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4dDogYW55
LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90IHByb3Zp
ZGVkLCB1bmRlZmluZWQgaXMgZ29ubmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb25c
biAgICAgICAgLy8gZG9lcyBub3QgY2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9yY2UgYSB2
YWx1ZSBmb3IgY29uc2lzdGVuY3kuIElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50cyB0byB1
bmRlZmluZSBpdCwgcGFzcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4gICAgICAg
IGFzc2lnbihjb250ZXh0OiBhbnksIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4kbG9jYXRp
b25cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uU2Vydmlj
ZSB7XG4gICAgICAgIGFic1VybCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3RyaW5nO1xu
ICAgICAgICBoYXNoKG5ld0hhc2g6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAg
IGhvc3QoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAgcGF0aChu
ZXdQYXRoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6IG51bWJl
cjtcbiAgICAgICAgcHJvdG9jb2woKTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6IElMb2Nh
dGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJjaChwYXJh
bWV0ZXJzTWFwOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2gocGFyYW1l
dGVyOiBzdHJpbmcsIHBhcmFtZXRlclZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAg
ICAgICB1cmwoKTogc3RyaW5nO1xuICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9jYXRpb25T
ZXJ2aWNlO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBleHRlbmRz
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztcbiAgICAg
ICAgaGFzaFByZWZpeChwcmVmaXg6IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgICAg
ICBodG1sNU1vZGUoKTogYm9vbGVhbjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRl
cyB0aGF0IHBhcmFtZXRlciBpcyBzdHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1lbnRhdGlv
biB0ZXN0cyBpdCBhcyBib29sZWFuLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAgICAgIC8v
IHNpbmNlIHRoaXMgaXMgYSB0b2dnbGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6IGJvb2xl
YW4pOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBEb2N1bWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGRvY3VtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElEb2N1bWVudFNlcnZpY2UgZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gRXhjZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlIHtc
biAgICAgICAgKGV4Y2VwdGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZpY2VcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVtZW50XG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNlcnZpY2Ug
ZXh0ZW5kcyBKUXVlcnkge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFFTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRxXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAgICAgIGFs
bChwcm9taXNlczogSVByb21pc2U8YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAgICAgICBk
ZWZlcjxUPigpOiBJRGVmZXJyZWQ8VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiBJ
UHJvbWlzZTx2b2lkPjtcbiAgICAgICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNlPFQ+O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48VFJlc3Vs
dD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21pc2U8VFJl
c3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2FsbGJh
Y2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRo
ZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJUHJvbWlz
ZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlD
YWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAg
ICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IFRS
ZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5vdGlmeUNh
bGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuXG5cbiAg
ICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJSHR0cFBy
b21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3Vs
dD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29u
OiBhbnkpID0+IFRSZXN1bHQpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBmaW5hbGx5
PFRSZXN1bHQ+KGZpbmFsbHlDYWxsYmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3VsdD47XG4g
ICAgfVxuXG4gICAgaW50ZXJmYWNlIElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29sdmUodmFs
dWU/OiBUKTogdm9pZDtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7XG4gICAg
ICAgIG5vdGlmeShzdGF0ZT86YW55KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVByb21pc2U8
VD47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9yU2Nyb2xs
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kYW5j
aG9yU2Nyb2xsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmNob3JT
Y3JvbGxTZXJ2aWNlIHtcbiAgICAgICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElBbmNob3JTY3JvbGxQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAg
ICBkaXNhYmxlQXV0b1Njcm9sbGluZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIENhY2hlRmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJQ2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAgIC8vIExl
dHMgbm90IGZvY2UgdGhlIG9wdGlvbnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVtYmVyLiBF
dmVuIHRob3VnaFxuICAgICAgICAvLyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRlcmVkIGJ5
IHRoZSBpbXBsZW1lbnRhdGlvbiB0b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBtaWdodCBm
aW5kIGl0IHVzZWZ1bCB0byBhc3NvY2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRoZSBjYWNo
ZSBvYmplY3QuXG4gICAgICAgIC8vKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86IHsgY2Fw
YWNpdHk6IG51bWJlcjsgfSk6IENhY2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDogc3RyaW5n
LCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0O1xuXG4g
ICAgICAgIC8vIE1ldGhvZHMgYmVsbG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAgICBpbmZv
KCk6IGFueTtcbiAgICAgICAgZ2V0IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmplY3Q7XG4g
ICAgfVxuXG4gICAgaW50ZXJmYWNlIElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8oKToge1xu
ICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtcblxuICAg
ICAgICAgICAgLy8gTm90IGdhcmFudGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9uLW1hbmRh
dG9yeSBvcHRpb25cbiAgICAgICAgICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAgICAgfTtc
biAgICAgICAgcHV0KGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAgICAgIGdl
dCAoa2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQ7
XG4gICAgICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZpY2VcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlclxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZpY2Uge1xu
ICAgICAgICAoZWxlbWVudDogc3RyaW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1
bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtc
biAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5n
RnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9u
O1xuICAgICAgICAoZWxlbWVudDogSlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2lu
Z0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlv
bjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRzIElTZXJ2
aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVG
YWN0b3J5OiBGdW5jdGlvbik6IElDb21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8gVW5kb2N1
bWVudGVkLCBidXQgaXQgaXMgdGhlcmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVjdGl2ZXNN
YXA6IGFueSk6IElDb21waWxlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElUZW1w
bGF0ZUxpbmtpbmdGdW5jdGlvbiB7XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5vdCBmb3Jj
ZSBjbG9uZUF0dGFjaEZuJ3Mgc2lnbmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3BlLCBjbG9u
ZUF0dGFjaEZuPzogKGNsb25lZEVsZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3BlKSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29u
dHJvbGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJGNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJGNvbnRyb2xsZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJQ29udHJvbGxlclNlcnZpY2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1l
bnRhdGlvbiBkb2Vzbid0IHN0YXRlIHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAgICAgICAg
KGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAg
ICAgICAgKGNvbnRyb2xsZXJOYW1lOiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICB9
XG5cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJv
dmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJDb25zdHJ1
Y3RvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGRl
cGVuZGVuY3lBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElIdHRwU2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0IG1vZXRo
b2QgYW5kIHVybCBtdXN0IGJlIHByb3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElSZXF1ZXN0
Q29uZmlnKTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJpbmcsIFJl
cXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVsZXRlICh1
cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAg
ICAgICBoZWFkKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNl
PGFueT47XG4gICAgICAgIGpzb25wKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTog
SUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwg
UmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwdXQodXJs
OiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxh
bnk+O1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAgLy8gRm9y
IGRlYnVnZ2luZywgQlVUIGl0IGlzIGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxuICAgICAg
ICBwZW5kaW5nUmVxdWVzdHM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMganVzdCBm
b3IgaGludGluZy5cbiAgICAvLyBTb21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUg
ZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kaHR0cCNVc2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNcbiAgICBp
bnRlcmZhY2UgSVJlcXVlc3RDb25maWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztcbiAgICAg
ICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAvLyBYWFgg
aXQgaGFzIGl0J3Mgb3duIHN0cnVjdHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVmaW5lIGl0
IGluIHRoZSBmdXR1cmVcbiAgICAgICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBjYWNoZT86
IGFueTtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAgICAvLyBU
aGVzZSBhY2NlcHQgbXVsdGlwbGUgdHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFzIGFueVxu
ICAgICAgICBkYXRhPzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55O1xuICAg
ICAgICB0cmFuc2Zvcm1SZXNwb25zZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFueTsgLy8g
bnVtYmVyIHwgcHJvbWlzZVxuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2VDYWxs
YmFjazxUPiB7XG4gICAgICAgIChkYXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVyczogKGhl
YWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmlnKTogdm9p
ZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4ge1xu
ICAgICAgICBkYXRhPzogVDtcbiAgICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAgICBoZWFk
ZXJzPzogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25maWc/OiBJ
UmVxdWVzdENvbmZpZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlPFQ+IGV4
dGVuZHMgSVByb21pc2U8VD4ge1xuICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0cFByb21p
c2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2FsbGJhY2s6
IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAgICB0aGVu
PFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFj
a0FyZzxUPikgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9t
aXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0
aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxs
YmFja0FyZzxUPikgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9u
c2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0
PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElTZXJ2aWNl
UHJvdmlkZXIge1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAgICAgIGlu
dGVyY2VwdG9yczogYW55W107XG4gICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBhbnlbXTtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2VuZFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBCYWNr
ZW5kXG4gICAgLy8gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgZGly
ZWN0bHkuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwQmFja2Vu
ZFNlcnZpY2Uge1xuICAgICAgICAvLyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sgc2lnbmF0
dXJlIGluIHRoZSBmdXR1cmVcbiAgICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywg
cG9zdD86IGFueSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGltZW91dD86
IG51bWJlciwgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92aWRlclxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVTZXJ2aWNl
IHtcbiAgICAgICAgKHRleHQ6IHN0cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9vbGVhbik6
IElJbnRlcnBvbGF0aW9uRnVuY3Rpb247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4g
ICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUlu
dGVycG9sYXRpb25GdW5jdGlvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJpbmc7XG4g
ICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZp
Y2VQcm92aWRlciB7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3Rh
cnRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgICAgICBl
bmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJ
bnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIFRlbXBsYXRlQ2FjaGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiR0ZW1wbGF0ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElUZW1wbGF0ZUNhY2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVjdCB7fVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4dGVuZHMg
SVNjb3BlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cblx0aW50ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRUcnVzdGVk
KHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZENz
cyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkpOiBhbnk7
XG5cdFx0Z2V0VHJ1c3RlZEpzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFJlc291
cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTogYW55KTog
YW55O1xuXHRcdHBhcnNlKHR5cGU6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRl
eHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJlc3Npb246
IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VB
c0h0bWwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+
IGFueTtcblx0XHRwYXJzZUFzSnMoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwg
bG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVzc2lvbjog
c3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFz
VXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBh
bnk7XG5cdFx0dHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1
c3RBc0h0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFueSk6IGFu
eTtcblx0XHR0cnVzdEFzUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFz
VXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5cdH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVBy
b3ZpZGVyIHtcbiAgICAgICAgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2aWNlIHtc
biAgICAgICAgZ2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55
O1xuICAgICAgICB0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAg
ICAgdmFsdWVPZih2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRlbmRzIElT
ZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZXNvdXJjZVVybEJsb2NrbGlzdChibG9ja2xpc3Q6
IGFueVtdKTogdm9pZDtcbiAgICAgICAgcmVzb3VyY2VVcmxBbGxvd2xpc3QoYWxsb3dsaXN0OiBh
bnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRGly
ZWN0aXZlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21w
aWxlUHJvdmlkZXIjZGlyZWN0aXZlXG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvZ3VpZGUvZGlyZWN0aXZlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpbnRlcmZh
Y2UgSURpcmVjdGl2ZXtcbiAgICAgICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVtcGxhdGVF
bGVtZW50OiBhbnksXG4gICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVz
LFxuICAgICAgICAgICAgdHJhbnNjbHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlua2luZ0Zu
OiBGdW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIGNvbnRy
b2xsZXI/OiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAgICAgbGlu
az86XG4gICAgICAgICAgICAoc2NvcGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3RhbmNlRWxl
bWVudDogYW55LFxuICAgICAgICAgICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxc
biAgICAgICAgICAgIGNvbnRyb2xsZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lkO1xuICAg
ICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAgICAgICAg
cmVwbGFjZT86IGJvb2xlYW47XG4gICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAgIHJlc3Ry
aWN0Pzogc3RyaW5nO1xuICAgICAgICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGU/OiBh
bnk7XG4gICAgICAgIHRlbXBsYXRlVXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86IGJvb2xl
YW47XG4gICAgICAgIHRyYW5zY2x1ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gYW5ndWxhci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5nIGFuZ3Vs
YXIuZWxlbWVudCwgYW5ndWxhciByZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAvLyBhdWdt
ZW50ZWQgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAgIC8vIHNl
ZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0aWMgZXh0
ZW5kcyBKUXVlcnlTdGF0aWMge1xuICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86
IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50KTogSUF1
Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1ZXJ5O1xu
ICAgICAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAg
ICAgICAob2JqZWN0OiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZnVuYzog
RnVuY3Rpb24pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtdKTogSUF1
Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgfVxuXG4g
ICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAgICAgICAv
LyBUT0RPOiBldmVudHMsIGhvdyB0byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lcblxuICAg
ICAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBm
aW5kKGVsZW1lbnQ6IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQob2JqOiBK
UXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3Ry
aW5nKTogYW55O1xuICAgICAgICBpbmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3BlKCk6IElT
Y29wZTtcblxuICAgICAgICBpbmhlcml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTog
SlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7
IH0pOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTogYW55O1xu
XG5cbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8gbW9kdWxl
IChhbmd1bGFyLmpzKVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBtb2R1bGUg
YXV0byB7XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0b3JTZXJ2
aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRp
bmplY3RvclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2UgSUluamVj
dG9yU2VydmljZSB7XG4gICAgICAgICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBzdHJpbmdb
XTtcbiAgICAgICAgICAgIGFubm90YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6
IHN0cmluZ1tdO1xuICAgICAgICAgICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAg
ICAgICBpbnN0YW50aWF0ZSh0eXBlQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkp
OiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtd
KTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0PzogYW55
LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgICAgICAvLyBQcm92aWRlU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgICAgICBpbnRlcmZhY2UgSVByb3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8vIERvY3Vt
ZW50YXRpb24gc2F5cyBpdCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBidXQgYWN0
dWFsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4gYW55dGhp
bmcuXG4gICAgICAgICAgICAvLyBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBh
bnk7XG4gICAgICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lk
O1xuXG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6IEZ1bmN0
aW9uKTogdm9pZDtcbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRv
cklubGluZTogYW55W10pOiB2b2lkO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcs
IHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtc
biAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlv
bjogYW55W10pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFt
ZTogc3RyaW5nLCBwcm92aWRlcjogbmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2aWNlUHJv
dmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQcm92aWRl
ckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAg
ICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZp
Y2VQcm92aWRlcjtcbiAgICAgICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6
IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1vZGVscy9U
b2RvSXRlbS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGV4
cG9ydCBjbGFzcyBUb2RvSXRlbSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgICAg
cHVibGljIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVkOiBib29s
ZWFuXG4gICAgICAgICAgICApIHsgfVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRvZG9TY29w
ZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2NvcGUgZXh0
ZW5kcyBuZy5JU2NvcGUge1xuXHRcdHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1RvZG86IHN0
cmluZztcblx0XHRlZGl0ZWRUb2RvOiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86IFRvZG9J
dGVtO1xuXHRcdHJlbWFpbmluZ0NvdW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBudW1iZXI7
XG5cdFx0YWxsQ2hlY2tlZDogYm9vbGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtcblx0XHRz
dGF0dXNGaWx0ZXI6IHsgY29tcGxldGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9uOiBuZy5J
TG9jYXRpb25TZXJ2aWNlO1xuXHRcdHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50ZXJmYWNl
cy9JVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJ
VG9kb1N0b3JhZ2Uge1xuXHRcdGdldCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9kb3M6IFRv
ZG9JdGVtW10pO1xuXHR9XG59Ly8gZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9kdWxlIHRv
ZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBwbGFj
ZXMgZm9jdXMgb24gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBleHByZXNz
aW9uIGl0IGJpbmRzIHRvIGV2YWx1YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0
aW9uIHRvZG9Gb2N1cygkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURpcmVjdGl2
ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVu
dDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3YXRjaChh
dHRyaWJ1dGVzLnRvZG9Gb2N1cywgbmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3dmFsKSB7
XG5cdFx0XHRcdFx0XHQkdGltZW91dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAsIGZhbHNl
KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHR0
b2RvRm9jdXMuJGluamVjdCA9IFsnJHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMvVG9kb0Js
dXIudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAg
ICAgKiBEaXJlY3RpdmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhlIGVsZW1l
bnQgaXQgaXMgYXBwbGllZCB0byBsb3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBvcnQgZnVu
Y3Rpb24gdG9kb0JsdXIoKTogbmcuSURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAg
ICAgICAgICBsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwgYXR0cmli
dXRlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVyJywgKCkg
PT4geyAkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAgICAgICAg
ICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2JsdXIn
KTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGlyZWN0aXZl
cy9Ub2RvRXNjYXBlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHRj
b25zdCBFU0NBUEVfS0VZID0gMjc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IGNhbmNl
bHMgZWRpdGluZyBhIHRvZG8gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5cblx0ICov
XG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xuXHRcdHJl
dHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwg
YXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93bicsIChl
dmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVfS0VZKSB7
XG5cdFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7XG5cdFx0
XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJveScsICgp
ID0+IHsgZWxlbWVudC51bmJpbmQoJ2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0
fVxufVxuLy8gc2VydmljZXMvVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAn
dXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNpc3RzIGFu
ZCByZXRyaWV2ZXMgVE9ET3MgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAgZXhwb3J0
IGNsYXNzIFRvZG9TdG9yYWdlIGltcGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAgICAgICBT
VE9SQUdFX0lEID0gJ3RvZG9zLWFuZ3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAgICBnZXQg
KCk6IFRvZG9JdGVtW10ge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9y
YWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxuXG4gICAg
ICAgIHB1dCh0b2RvczogVG9kb0l0ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNl
dEl0ZW0odGhpcy5TVE9SQUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAgICAgICB9
XG4gICAgfVxufS8vIGNvbnRyb2xsZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5c
dCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBmb3IgdGhl
IGFwcC4gVGhlIGNvbnRyb2xsZXI6XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0cyB0aGUg
bW9kZWwgdmlhIHRoZSB0b2RvU3RvcmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0aGUgbW9k
ZWwgdG8gdGhlIHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQgKi9cblx0
ZXhwb3J0IGNsYXNzIFRvZG9DdHJsIHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9JdGVtW107
XG5cblx0XHQvLyAkaW5qZWN0IGFubm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMgJGluamVj
dG9yIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVjdGVkIGlu
dG8gY29uc3RydWN0b3Jcblx0XHQvLyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9zZSB0byB0
aGUgY29uc3RydWN0b3IsIGJlY2F1c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBpbiBjb3Vu
dCBhbmQgdHlwZS5cblx0XHQvLyBTZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9k
aVxuXHRcdHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxuXHRcdFx0
JyRsb2NhdGlvbicsXG5cdFx0XHQndG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZpbHRlcidc
blx0XHRdO1xuXG5cdFx0Ly8gZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5ndWxhckpT
ICRpbmplY3RvclxuXHRcdC8vIGNvbnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQgaW4gQXBw
bGljYXRpb24udHMgYW5kIHNwZWNpZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmlidXRlIGlu
IGluZGV4Lmh0bWxcblx0XHRjb25zdHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3BlOiBJVG9k
b1Njb3BlLFxuXHRcdFx0cHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXG5c
dFx0XHRwcml2YXRlIHRvZG9TdG9yYWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2YXRlIGZp
bHRlckZpbHRlclxuXHRcdCkge1xuXHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2RvcyA9IHRv
ZG9TdG9yYWdlLmdldCgpO1xuXG5cdFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdFx0JHNj
b3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3IgJ3ZpZXcg
bW9kZWwnLiBXZSdyZSBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIgdG8gdGhl
IHNjb3BlXG5cdFx0XHQvLyBmb3IgaXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIHZp
ZXcgLyBIVE1MXG5cdFx0XHQkc2NvcGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRjaGluZyBm
b3IgZXZlbnRzL2NoYW5nZXMgaW4gc2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmlldy91c2Vy
IGlucHV0XG5cdFx0XHQvLyBpZiB5b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50IHdpdGgg
bGlmZXRpbWUgbG9uZ2VyIHRoYW4gdGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91IHVuc3Vi
c2NyaWJlLlxuXHRcdFx0JHNjb3BlLiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9uVG9kb3Mo
KSwgdHJ1ZSk7XG5cdFx0XHQkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBwYXRoID0+
IHRoaXMub25QYXRoKHBhdGgpKVxuXG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9PT0gJycp
ICRsb2NhdGlvbi5wYXRoKCcvJyk7XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9jYXRpb247
XG5cdFx0fVxuXG5cdFx0b25QYXRoKHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4kc2NvcGUu
c3RhdHVzRmlsdGVyID0gKHBhdGggPT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRl
ZDogZmFsc2UgfSA6IChwYXRoID09PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBjb21wbGV0
ZWQ6IHRydWUgfSA6IHt9O1xuXHRcdH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRz
Y29wZS5yZW1haW5pbmdDb3VudCA9IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3MsIHsgY29t
cGxldGVkOiBmYWxzZSB9KS5sZW5ndGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291bnQgPSB0
aGlzLnRvZG9zLmxlbmd0aCAtIHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRcdFx0dGhp
cy4kc2NvcGUuYWxsQ2hlY2tlZCA9ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxuXHRcdFx0
dGhpcy50b2RvU3RvcmFnZS5wdXQodGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRkVG9kbygp
IHtcblx0XHRcdHZhciBuZXdUb2RvIDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9kby50cmlt
KCk7XG5cdFx0XHRpZiAoIW5ld1RvZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRc
dH1cblxuXHRcdFx0dGhpcy50b2Rvcy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBmYWxzZSkp
O1xuXHRcdFx0dGhpcy4kc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVkaXRUb2Rv
KHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IHRv
ZG9JdGVtO1xuXG5cdFx0XHQvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNlIGVkaXRp
bmcgaXMgY2FuY2VsbGVkLlxuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gYW5ndWxh
ci5leHRlbmQoe30sIHRvZG9JdGVtKTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0b2RvSXRl
bTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9mKHRvZG9J
dGVtKV0gPSB0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29wZS5yZXZl
cnRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRvZG9JdGVt
KSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRoaXMuJHNj
b3BlLm9yaWdpbmFsVG9kbyA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2ZXJ0ZWQp
IHtcblx0XHRcdFx0Ly8gVG9kbyBlZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZlLlxuXHRc
dFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtcblx0XHRc
dH1cblx0XHRcdHRvZG9JdGVtLnRpdGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xuXHRcdFx0
aWYgKCF0b2RvSXRlbS50aXRsZSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9kb0l0ZW0p
O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7
XG5cdFx0XHR0aGlzLnRvZG9zLnNwbGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pLCAx
KTtcblx0XHR9XG5cblx0XHRjbGVhckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnRv
ZG9zID0gdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0b2RvSXRl
bS5jb21wbGV0ZWQpO1xuXHRcdH1cblxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29sZWFuKSB7
XG5cdFx0XHR0aGlzLnRvZG9zLmZvckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5jb21wbGV0
ZWQgPSBjb21wbGV0ZWQ7IH0pO1xuXHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlvbi50c1xu
XG4vKipcbiAqIFRoZSBtYWluIFRvZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlwZSB7YW5n
dWxhci5Nb2R1bGV9XG4gKi9cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4g
ICAgdmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAgICAgICAg
ICAgLmNvbnRyb2xsZXIoJ3RvZG9DdHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAuZGlyZWN0
aXZlKCd0b2RvQmx1cicsIHRvZG9CbHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0Zv
Y3VzJywgdG9kb0ZvY3VzKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2FwZScsIHRv
ZG9Fc2NhcGUpXG4gICAgICAgICAgICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2RvU3RvcmFn
ZSk7XG59XG4iCiAKIC8qKiovIH0pLAogLyogNDIxICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzKSB7CiAKLW1vZHVsZS5leHBvcnRzID0gIi8vICAgICBVbmRlcnNjb3JlLmpzIDEu
OC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAwOS0yMDE1
IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRl
cnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5l
IHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9i
amVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUgc2VydmVy
LlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2Yg
dGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3QuXztcblxu
ICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9u
OlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3Qu
cHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRl
IHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3Rv
dHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gsXG4g
ICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgdG9TdHJpbmcgICAg
ICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90
by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVu
Y3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xh
cmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5LmlzQXJyYXks
XG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQmluZCAg
ICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRlICAgICAgID0gT2JqZWN0
LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1w
cm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENy
ZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJl
bG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBf
KSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBf
KG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhl
IFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMt
Y29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4g
IC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYgKHR5cGVv
ZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAn
dW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5l
eHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICBy
b290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAn
MS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2ll
bnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBj
YWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAg
Ly8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQs
IGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4g
ICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAgICBjYXNl
IDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNv
bnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbih2
YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwg
b3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBp
bmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZh
bHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiByZXR1cm4g
ZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAg
ICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNv
bGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xu
XG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0
aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24s
IHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxuICAvLyBpZGVudGl0eSwg
YW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkg
YWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkg
e1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtcbiAgICBpZiAoXy5p
c0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0Nv
dW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXIodmFsdWUp
O1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5pdGVyYXRlZSA9IGZ1
bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBjb250ZXh0LCBJ
bmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5n
IGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVyID0gZnVuY3Rpb24oa2V5
c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAg
ICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPCAyIHx8
IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2lu
ZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgICAg
bCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xu
ICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghdW5kZWZpbmVkT25s
eSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAg
ICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQW4g
aW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRz
IGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUpIHtc
biAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRp
dmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICBDdG9yLnByb3Rv
dHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5w
cm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIHByb3Bl
cnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAg
cmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxu
ICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBh
IGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFu
IG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRv
cmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5
IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0g
TWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHByb3BlcnR5KCdsZW5ndGgn
KTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHZhciBs
ZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5cGVvZiBsZW5ndGgg
PT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9BUlJBWV9JTkRFWDtc
biAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBh
a2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFy
cmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5
IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0
ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRl
eHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAg
ICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xu
ICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtc
biAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGgg
PSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtr
ZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtc
biAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVl
IHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7
XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAg
ICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJh
eShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4
KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7
XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVu
dEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ3Jl
YXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0
aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRlcmF0b3IgZnVuY3Rp
b24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRoZSBtYWluIGZ1bmN0aW9u
IHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5jdGlvbiBpdGVyYXRvcihv
YmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4gICAgICBmb3IgKDsg
aW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZh
ciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAgIG1lbW8g
PSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAg
ICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2Jq
LCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNi
KGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9i
aikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5n
dGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICAv
LyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1vID0gb2JqW2tleXMgPyBr
ZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAgfVxuICAg
ICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5n
dGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSBy
ZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xk
bGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRlUmVkdWNlKDEpO1xu
XG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93
biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNyZWF0ZVJlZHVjZSgt
MSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0
ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9u
KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAoaXNBcnJh
eUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5kSW5kZXgob2JqLCBwcmVkaWNhdGUsIGNv
bnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRLZXkob2JqLCBwcmVkaWNh
dGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5ICE9PSAt
MSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRz
IHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8u
ZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xu
ICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAg
ICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVl
KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxs
IHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9
IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVy
KG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIERl
dGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0Llxu
ICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmos
IHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29u
dGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxc
biAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkg
PSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRlKG9ialtj
dXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBy
ZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1l
bnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBg
YW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtl
eXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0g
KGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxl
bmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRl
eF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50
S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xu
XG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4g
aXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlc2AgYW5kIGBpbmNs
dWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbihv
YmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikp
IG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJl
cicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8uaW5kZXhPZihvYmosIGl0
ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGgg
YXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgXy5pbnZva2UgPSBm
dW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcbiAgICByZXR1
cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMg
PyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IGZ1
bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDb252
ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBh
IHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4g
Xy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZl
cnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5IG9i
amVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy53
aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBf
Lm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEg
Y29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0XG4gIC8v
IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdoZXJlID0g
ZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1hdGNoZXIo
YXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxl
bWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRl
ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9
IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9
PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8g
b2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmou
bGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAg
ICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAg
ICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBs
aXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtc
biAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSAtSW5m
aW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1
ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAg
fSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBt
aW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1pbiA9
IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gSW5m
aW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7
XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9
IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2
YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAg
cmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAg
aXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5j
dGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQg
fHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtcbiAgICAg
ICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtc
biAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5c
biAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0
aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUgPSBmdW5jdGlvbihvYmop
IHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7
XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNodWZmbGVkID0gQXJyYXko
bGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgpO1xuICAgICAgaWYgKHJh
bmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcbiAgICAgIHNo
dWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHNodWZmbGVkO1xu
ICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9u
LlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRv
bSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQg
dG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQp
IHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJyYXlMaWtl
KG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFuZG9tKG9i
ai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5zbGljZSgw
LCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVz
IGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJh
dGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVl
LFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1
ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmln
aHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQu
Y3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9
PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkg
cmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRl
eDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24g
dXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAg
PSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGNi
KGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBp
bmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xu
ICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICBy
ZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2
YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAv
LyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5c
biAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAg
aWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVz
dWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2
YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBidXQgZm9yXG4gIC8v
IHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAg
Xy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVz
dWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBv
YmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhl
ciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1
cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJl
c3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtr
ZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBTYWZlbHkgY3JlYXRl
IGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkg
PSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlz
QXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNBcnJheUxpa2Uo
b2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8udmFsdWVz
KG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4g
b2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwp
IHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IF8u
a2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0
d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhlIGdpdmVuXG4gIC8v
IHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlzZnkgdGhl
IHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29u
dGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFy
IHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBr
ZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFzcyA6IGZh
aWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07XG4gIH07
XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdl
dCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVy
biB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFk
YCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3Jr
IHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFy
cmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xu
ICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4g
Xy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5z
IGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1
c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCBy
ZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxh
c3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0
dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09
IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxl
bWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4g
IC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBn
dWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmIChu
ID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICBy
ZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH07
XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFy
cmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5IHVzZWZ1
bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVyblxu
ICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVzdCA9IF8udGFpbCA9
IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5j
YWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAgLy8gVHJp
bSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3QgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7XG4g
IH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0
ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBz
dHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sIGlkeCA9IDA7XG4gICAg
Zm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlm
IChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0FyZ3VtZW50
cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9y
IGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2YWx1ZSA9IGZsYXR0ZW4o
dmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAgIHZhciBqID0gMCwgbGVuID0gdmFsdWUu
bGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAgICAgICAgd2hpbGUgKGog
PCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgICAg
fVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgrK10gPSB2
YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICAvLyBG
bGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3Ig
anVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7
XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlKTtcbiAgfTtcblxuICAv
LyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhl
IHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAg
ICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xu
ICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJh
eS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0
aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBg
dW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQs
IGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtc
biAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4g
ICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkg
aXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xu
ICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0
aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0s
XG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJh
eSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgICBpZiAoIWkgfHwgc2Vl
biAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9IGNvbXB1
dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIV8uY29udGFp
bnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAg
ICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAo
IV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUp
O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFByb2R1
Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVu
dCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1
bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRy
dWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkg
aXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8u
aW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4g
ICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAw
LCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZh
ciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5jb250YWlucyhyZXN1bHQsIGl0ZW0pKSBj
b250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4g
ICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAg
IH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9
XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJl
dHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkg
dGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4u
XG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBmbGF0
dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5
LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUp
O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRv
IGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28g
dG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW56aXAoYXJn
dW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50IG9mIF8uemlwLiBVbnppcCBhY2NlcHRz
IGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50
cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2
YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoIHx8IDA7
XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9
IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gXy5w
bHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4g
IC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJy
YXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMg
b2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBj
b3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMp
IHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdl
dExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4g
ICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAg
ICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAg
IHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0
ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBj
cmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJy
YXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAg
dmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4
ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJl
ZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAg
fVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJz
dCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAg
Xy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiAgXy5maW5kTGFz
dEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNv
bXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hp
Y2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBv
cmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJy
YXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVl
LCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAgIHZhciBs
b3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkg
e1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBp
ZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdo
ID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBm
dW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9mIGZ1bmN0aW9uc1xu
ICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZElu
ZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZh
ciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4
ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgICBpID0g
aWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVs
c2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBs
ZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChz
b3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4
KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHgg
OiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9
IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgXy5pc05hTik7XG4g
ICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZv
ciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5n
dGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVy
biBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJl
dHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBh
biBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBh
cnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3Jk
ZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFy
Y2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNv
cnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZp
bmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmlu
ZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQ
eXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRh
dGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3Jhbmdl
KS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0
b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7
XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5t
YXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9
IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlk
eCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxu
XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlv
bnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRv
IGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1
bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhlY3V0ZUJvdW5kID0g
ZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwg
YXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkg
cmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBi
YXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNl
RnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpKSByZXR1
cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0
aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1l
bnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBu
YXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVu
Y3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMuYmluZCA9
PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2UuY2FsbChh
cmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5
cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgdmFyIGFy
Z3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24o
KSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlz
LCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9O1xuICAgIHJldHVy
biBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVh
dGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBw
cmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBf
IGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9m
IGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5j
KSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2
YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9
IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBi
b3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07
XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdz
LnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQo
ZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5k
O1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0
aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1l
cyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAg
Ly8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSBmdW5j
dGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwga2V5O1xu
ICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFz
c2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7
XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpb
a2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBNZW1vaXpl
IGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBfLm1lbW9p
emUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9u
KGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZhciBhZGRy
ZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrZXkp
O1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVu
Yy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xu
ICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9
O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxp
c2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBs
aWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBhcmdzID0g
c2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtc
biAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0
ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9
IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRo
YXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAg
Ly8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVk
IGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIg
Z29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlv
dSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBh
c3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUg
dHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0
LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgdGlt
ZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9w
dGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3Vz
ID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAgdGltZW91
dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAg
ICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1
cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlmICghcHJl
dmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAg
ICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0
ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9
IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAg
ICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAg
ICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5h
cHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJn
cyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcg
IT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5p
bmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8v
IFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUg
aW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBi
ZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vj
b25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0
aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJv
dW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0
LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1
bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAg
ICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRU
aW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1l
b3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICByZXN1bHQg
PSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlmICghdGltZW91dCkgY29u
dGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJl
dHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFy
Z3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2YXIgY2FsbE5vdyA9
IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91dCA9IHNl
dFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAgcmVz
dWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3Mg
PSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5c
biAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRv
IHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4g
Y29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRo
ZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3JhcHBlcikg
e1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH07XG5cbiAgLy8gUmV0
dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgXy5u
ZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4g
ICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9m
IGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFs
dWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21wb3NlID0gZnVuY3Rpb24o
KSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5n
dGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4g
ICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAg
ICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAg
ICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlv
biB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLlxu
ICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
KSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMg
YSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNs
dWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywgZnVuYykg
e1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRp
bWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xu
ICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJu
IG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxs
IGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4g
eW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5vbmNlID0g
Xy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0t
LS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJh
dGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1
ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xu
ICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAn
dG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScs
ICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1bmN0aW9uIGNvbGxl
Y3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1JZHggPSBub25FbnVt
ZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3Rv
cjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1
Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3IgaXMgYSBz
cGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlmIChfLmhh
cyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7
XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJs
ZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAh
PT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5
cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZlIHRoZSBu
YW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoq
RUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChu
YXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4g
ICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtl
eSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9u
RW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0
cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9
IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4g
ICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5
KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25F
bnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRy
aWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVu
Z3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2Jq
W2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVy
bnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBv
ZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJldHVybnMgYW4gb2Jq
ZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIF8u
a2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAgICAgIHJl
c3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5O1xuICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjdXJyZW50S2V5ID0ga2V5
c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3Vy
cmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0
cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwg
dmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlz
ID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBw
YWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4g
ICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVz
IG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZl
cnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMg
PSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7
IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ld
O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRl
ZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAg
Ly8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5j
dGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2Jq
KSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xu
ICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdp
dmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMp
LlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWdu
cyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3Nl
ZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3Mv
V2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG4g
IF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihfLmtleXMpO1xuXG4gIC8v
IFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSBwcmVkaWNh
dGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkg
e1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMg
PSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxl
bmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYg
KHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtc
blxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3
aGl0ZWxpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmplY3QsIG9pdGVy
YXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2JqID0gb2JqZWN0LCBpdGVy
YXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYg
KF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7
XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB9
IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEp
O1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsgcmV0dXJuIGtl
eSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2
YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAg
IHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICBp
ZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9
XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUg
b2JqZWN0IHdpdGhvdXQgdGhlIGJsYWNrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21pdCA9IGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0
ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgfSBl
bHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1bWVudHMsIGZhbHNlLCBm
YWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkp
IHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAg
IH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9O1xuXG4g
IC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8u
ZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0
ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVj
dC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkg
d2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIF8uY3JlYXRlID0g
ZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRl
KHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtc
biAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25l
ZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikge1xu
ICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBfLmlzQXJy
YXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5cbiAgLy8g
SW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxu
ICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9c
IiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9u
IGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0gZnVuY3Rp
b24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJu
IG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVu
IHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVuY3Rpb24ob2JqZWN0
LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVuZ3RoID0ga2V5cy5s
ZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIg
b2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0g
b2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1
cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1
bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywg
YlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBg
LCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVn
YWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJt
b255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0g
MSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBg
bnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1
cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAo
YSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNlb2YgXykg
YiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2
YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB0
b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtc
biAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRhdGVzLCBh
bmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBS
ZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29t
cGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0
IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5n
IG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAg
ICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAn
JyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAg
IC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8v
IE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAgIGlmICgrYSAhPT0gK2Ep
IHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBl
cmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiArYSA9PT0g
MCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IERh
dGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBDb2VyY2Ug
ZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJl
IGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9u
cy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlv
bnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgICByZXR1
cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09
ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlmICh0eXBl
b2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xu
XG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVx
dWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20gZGlmZmVy
ZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9
IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoXy5pc0Z1bmN0
aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJD
dG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYm
ICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxu
ICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUg
YWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFw
dGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2Au
XG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAg
Ly8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5k
IGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgICBiU3Rh
Y2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gICAg
d2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBp
cyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1
ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0
dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgZmlyc3Qg
b2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucHVz
aChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUg
b2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8vIENvbXBh
cmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVj
ZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9PSBi
Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50
cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChsZW5ndGgt
LSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ssIGJTdGFj
aykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBj
b21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhhKSwga2V5O1xuICAgICAg
bGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMg
Y29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRl
ZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1
cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21w
YXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAgICAgaWYg
KCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkg
cmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9i
amVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9w
KCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBl
cmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFs
LlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xu
ICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xu
ICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVz
LlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJl
dHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8
fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5n
dGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxu
ICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xu
ICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0
byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJy
YXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0g
J1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9i
amVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlw
ZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2Jq
ZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNB
cmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4
cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycs
ICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rpb24obmFtZSkge1xu
ICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJp
bmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICB9O1xuICB9KTtc
blxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3Nl
cnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJs
ZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7
XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaGFz
KG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlv
bmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3MgaW4gb2xkIHY4
LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS5cbiAgaWYgKHR5
cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnKSB7
XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9m
IG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICAvLyBJcyBhIGdp
dmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlvbihvYmop
IHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtc
biAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhlIG9ubHkg
bnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBmdW5jdGlv
bihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPT0gK29iajtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5pc0Jvb2xlYW4gPSBm
dW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2Ug
fHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07XG5cbiAg
Ly8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9u
KG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZl
biB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtc
biAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rp
b24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3Rs
eVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxu
ICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYm
IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVu
Y3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUuanMg
aW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xu
ICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29y
ZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9IHBy
ZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBLZWVwIHRo
ZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBfLmlk
ZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAg
Ly8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBv
ZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1
cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICBf
Lm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuXG4gIC8v
IEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBn
aXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICBy
ZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRl
IGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8g
YGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0
dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9
IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXko
TWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29u
dGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRl
cmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRv
bSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0g
ZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9
IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29y
KE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3Np
Ymx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdl
ci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERh
dGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3Ig
ZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8
JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwi
J1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4gIHZhciB1bmVzY2FwZU1h
cCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBh
bmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIg
Y3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0gZnVuY3Rp
b24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAgLy8gUmVn
ZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkXG4gICAg
dmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZh
ciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBS
ZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAg
IHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVy
biB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAs
IGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNj
YXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1h
cCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlzIGEgZnVu
Y3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29udGV4dDsg
b3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9w
ZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHZvaWQg
MCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAg
IHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odmFsdWUp
ID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1
bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9u
KS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9
IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lk
Q291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9
O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUg
ZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3Mg
dG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtc
biAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGUg
OiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xcc1xcU10r
PyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2As
IGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFs
dWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJh
bnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0
YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0
IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCIn
XCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHInOiAgICAg
J3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAn
XFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxc
bnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKG1hdGNo
KSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4gIC8vIEph
dmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVt
ZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBk
ZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2Nh
cGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGlu
Z3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgXy50ZW1wbGF0
ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0
dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGlu
Z3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAg
IC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFs
dGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5l
c2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8
IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5z
b3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRo
ZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5
LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAg
dGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRl
LCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwg
b2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZz
ZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291cmNl
ICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9f
dCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291
cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190
KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSAr
PSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAg
IC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3Jy
ZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0g
XCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFj
ZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxl
KSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuXG4gICAg
c291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xu
ICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xc
blwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB0cnkge1xuICAg
ICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywg
J18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNl
O1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihk
YXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtc
blxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZv
ciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZSB8
fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsg
Jyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxu
ICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBV
bmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBp
bnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVy
biBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gIC8v
IElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFw
cGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIg
aG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rp
b25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2YXIgcmVz
dWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZS5fY2hh
aW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBvd24gY3Vz
dG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBmdW5j
dGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkg
e1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5wcm90b3R5
cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBl
ZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJu
IHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4g
IH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdy
YXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJh
eSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3Jl
dmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihu
YW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5
cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xu
ICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0g
J3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRl
IG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtc
blxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5c
biAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xu
ICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVd
ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5hcHBseSh0
aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBFeHRyYWN0
cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAgXy5wcm90
b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAg
fTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9kcyB1c2Vk
IGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBz
dHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlwZS50b0pT
T04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0
aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gQU1E
IHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBB
TUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2VtYW50aWNz
IG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJhY3RpY2UgZm9yIEFNRCBy
ZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVyc1xuICAv
LyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNlIGxp
YnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGluIGEgdGhp
cmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1EIGxvYWQgcmVxdWVz
dC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhblxuICAvLyBhbm9u
eW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC5cbiAg
aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRl
ZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAg
IH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgorbW9kdWxlLmV4cG9ydHMgPSAiLy8gICAgIFVu
ZGVyc2NvcmUuanMgMS44LjNcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAg
IChjKSAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3Rp
Z2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVl
bHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5c
biAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxp
c2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4cG9ydHNg
IG9uIHRoZSBzZXJ2ZXIuXG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRoZSBwcmV2
aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRlcnNjb3Jl
ID0gcm9vdC5fO1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6
aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQ
cm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtc
blxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNz
IHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9IEFycmF5
UHJvdG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSxcbiAg
ICB0b1N0cmluZyAgICAgICAgID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3duUHJvcGVy
dHkgICA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQg
NSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxu
ICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAgICAgID0g
QXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5cyxcbiAg
ICBuYXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVDcmVhdGUg
ICAgICAgPSBPYmplY3QuY3JlYXRlO1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBm
b3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5jdGlvbigp
e307XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2Jq
ZWN0IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9i
aiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8p
KSByZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9O1xuXG4g
IC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3aXRoXG4g
IC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClgIEFQSS4g
SWYgd2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0
LlxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVv
ZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBv
cnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9
IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4g
IF8uVkVSU0lPTiA9ICcxLjguMyc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1
cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0
aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIg
VW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24o
ZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSBy
ZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQp
IHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVy
biBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMjogcmV0
dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNv
bnRleHQsIHZhbHVlLCBvdGhlcik7XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1cm4gZnVu
Y3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNh
bGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBj
YXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0
aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZh
bHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJh
dGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVtZW50IGlu
IGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyXG4g
IC8vIGlkZW50aXR5LCBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwg
b3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUsIGNvbnRl
eHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlkZW50aXR5
O1xuICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2YWx1ZSwg
Y29udGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIF8u
bWF0Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9O1xuICBf
Lml0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2IodmFs
dWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlv
biBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIg
PSBmdW5jdGlvbihrZXlzRnVuYywgdW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBmdW5jdGlv
bihvYmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYg
KGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3IgKHZhciBp
bmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2Ug
PSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNvdXJjZSks
XG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYg
KCF1bmRlZmluZWRPbmx5IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNl
W2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAg
fTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgb2JqZWN0
IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1bmN0aW9u
KHByb3RvdHlwZSkge1xuICAgIGlmICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1cm4ge307
XG4gICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpO1xu
ICAgIEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBuZXcgQ3Rv
cjtcbiAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtc
blxuICB2YXIgcHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
b2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAg
ICB9O1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVy
bWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4g
YXJyYXkgb3IgYXMgYW4gb2JqZWN0XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUubW96aWxs
YS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8vIEF2b2lk
cyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZhciBNQVhf
QVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3RoID0gcHJv
cGVydHkoJ2xlbmd0aCcpO1xuICB2YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xsZWN0aW9u
KSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4g
dHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGggPD0gTUFY
X0FSUkFZX0lOREVYO1xuICB9O1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4gIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFjaGAgaW1w
bGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVjdHMgaW4g
YWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFycmF5LWxp
a2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0gZnVuY3Rp
b24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihp
dGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNBcnJheUxp
a2Uob2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1c
biAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAgIGZvciAo
aSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAg
aXRlcmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAg
ICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWlu
ZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJh
dGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5
cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAg
cmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tp
bmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJl
bnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAg
fTtcblxuICAvLyBDcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVmdCBvciBy
aWdodC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGltaXplZCBp
dGVyYXRvciBmdW5jdGlvbiBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8gaW4gdGhl
IG1haW4gZnVuY3Rpb24gd2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAgIGZ1bmN0
aW9uIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5ndGgpIHtc
biAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIp
IHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtc
biAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtl
eSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIHJldHVy
biBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBpdGVyYXRl
ZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtleXMgPSAh
aXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSAoa2V5
cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3Ro
IC0gMTtcbiAgICAgIC8vIERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25lIGlzIHBy
b3ZpZGVkLlxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAgIG1lbW8g
PSBvYmpba2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBkaXI7
XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5
cywgaW5kZXgsIGxlbmd0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRz
IHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxc
biAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVh
dGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVk
dWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0g
Y3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBh
c3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0
ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5O1xu
ICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRleChvYmos
IHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8uZmluZEtl
eShvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09IHZvaWQg
MCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFs
bCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBg
c2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRl
LCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRl
eCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1
bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4g
IC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMu
XG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBy
ZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4g
IH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBh
IHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9
IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2Io
cHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYm
IF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2
YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFw
cmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7
XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBs
ZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAv
LyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJl
ZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0
KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAg
ICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9
IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtl
eXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVu
dEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4g
ZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29u
dGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1
ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVk
ZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNB
cnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21J
bmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5p
bmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBh
IG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxu
ICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGlj
ZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlvbihtZXRo
b2QpO1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIg
ZnVuYyA9IGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1cm4gZnVu
YyA9PSBudWxsID8gZnVuYyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9
O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1h
cGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkg
e1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8g
Q29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2Vs
ZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVg
IHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBf
LmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNl
IHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJz
dCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAg
Xy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChv
YmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBl
bGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlv
bihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwg
bGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAg
aWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJy
YXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAs
IGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9
IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0
ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0
ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2
YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwg
aW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29t
cHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAg
IHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAg
ICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAv
LyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlv
bikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZh
ciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZh
bHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkg
e1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4g
ICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCByZXN1bHQp
IHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0g
ZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8u
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRl
ZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA8
IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09PSBJbmZp
bml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRl
ZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJl
c3VsdDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhlIG1vZGVy
biB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1ZmZsZSA9
IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDog
Xy52YWx1ZXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2YXIgc2h1
ZmZsZWQgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFuZDsgaW5k
ZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBpbmRleCk7
XG4gICAgICBpZiAocmFuZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZmbGVkW3Jh
bmRdO1xuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1
cm4gc2h1ZmZsZWQ7XG4gIH07XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJv
bSBhIGNvbGxlY3Rpb24uXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMg
YSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3Vt
ZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVuY3Rpb24o
b2JqLCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAgICAgIGlm
ICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBv
YmpbXy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8uc2h1ZmZs
ZShvYmopLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0IHRoZSBv
YmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG4g
IF8uc29ydEJ5ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJh
dGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAg
ICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3JpdGVyaWE6
IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5j
dGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAg
dmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlm
IChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwg
YiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRl
eCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBBbiBpbnRl
cm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMu
XG4gIHZhciBncm91cCA9IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVu
Y3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwg
aW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAg
ICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBHcm91cHMg
dGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcg
YXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0
aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVl
LCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZh
bHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMg
dGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAs
IGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwg
YmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBr
ZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5z
dGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBh
c3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5j
dGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3Jv
dXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwg
a2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8v
IFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUu
XG4gIF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107
XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlm
IChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtcbiAgICBy
ZXR1cm4gXy52YWx1ZXMob2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBl
bGVtZW50cyBpbiBhbiBvYmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlm
IChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBv
YmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0IGEgY29s
bGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0aXNmeSB0
aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBu
b3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9iaiwgZnVu
Y3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBrZXksIG9i
aikgPyBwYXNzIDogZmFpbCkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtwYXNz
LCBmYWlsXTtcbiAgfTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0t
LS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoq
bioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFs
aWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxs
b3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtl
ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJl
dHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBd
O1xuICAgIHJldHVybiBfLmluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xuICB9O1xu
XG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5
LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2lu
ZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4
Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3Vh
cmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXku
bGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4gIC8vIEdl
dCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJu
IHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0gZnVuY3Rp
b24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lk
IDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0
aCAtIDFdO1xuICAgIHJldHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0
aCAtIG4pKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBl
bnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4gIC8vIEVz
cGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioq
IHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5y
ZXN0ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAg
cmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAg
fTtcblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIF8u
Y29tcGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBf
LmlkZW50aXR5KTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJl
Y3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5w
dXQsIHNoYWxsb3csIHN0cmljdCwgc3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQgPSBbXSwg
aWR4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGggPSBnZXRM
ZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0
W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZhbHVlKSB8
fCBfLmlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJlbnQgbGV2
ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxsb3cpIHZh
bHVlID0gZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFyIGogPSAw
LCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVuO1xuICAg
ICAgICB3aGlsZSAoaiA8IGxlbikge1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtq
KytdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgb3V0
cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xu
ICB9O1xuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5
IGRlZmF1bHQpLCBvciBqdXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rpb24oYXJy
YXksIHNoYWxsb3cpIHtcbiAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywgZmFsc2Up
O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBu
b3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBmdW5jdGlv
bihhcnJheSkge1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAxKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNp
b24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVlbiBzb3J0
ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuICAv
LyBBbGlhc2VkIGFzIGB1bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0aW9uKGFy
cmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNCb29sZWFu
KGlzU29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRlcmF0ZWUg
PSBpc1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpdGVy
YXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIg
cmVzdWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVu
Z3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFs
dWUgPSBhcnJheVtpXSxcbiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUo
dmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICAg
IGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAg
ICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAg
IGlmICghXy5jb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2go
Y29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAg
ICAgfSBlbHNlIGlmICghXy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1
bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07
XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBk
aXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxu
ICBfLnVuaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVuKGFyZ3Vt
ZW50cywgdHJ1ZSwgdHJ1ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBj
b250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWlu
IGFycmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBy
ZXN1bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkr
Kykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRhaW5zKHJl
c3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBhcmdzTGVu
Z3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkp
IGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNo
KGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5
cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJh
eSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2
YXIgcmVzdCA9IGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICByZXR1cm4g
Xy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5jb250YWlu
cyhyZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRp
cGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAv
LyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1
cm4gXy51bnppcChhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2YgXy56aXAu
IFVuemlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8gZWFjaCBh
cnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5jdGlvbihh
cnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3Ro
KS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3Vs
dFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1
bHQ7XG4gIH07XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhl
ciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3IgdHdvIHBh
cmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUg
b2ZcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9u
KGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlm
ICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAg
fSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAg
IH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVu
Y3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25z
XG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAgIHJldHVy
biBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChh
cnJheSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAg
ICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4g
ICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4g
aW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJl
dHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSBwcmVk
aWNhdGUgdGVzdFxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEp
O1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5c
biAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVz
dCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFz
IHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXgg
PSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9i
aik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxl
IChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkg
LyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQg
KyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAg
Ly8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4
T2YgZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJlZGljYXRl
RmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlk
eCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAg
aWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDApIHtcbiAg
ICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7
XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgu
bWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAg
ICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4
ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9
PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtc
biAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgp
LCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAg
ICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAw
ICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9
PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xu
ICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBv
ZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5j
bHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVh
ZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1
c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoMSwgXy5m
aW5kSW5kZXgsIF8uc29ydGVkSW5kZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRlSW5kZXhG
aW5kZXIoLTEsIF8uZmluZExhc3RJbmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBB
cnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICAv
LyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBbdGhlIFB5
dGhvbiBkb2N1bWVudGF0aW9uXShodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rp
b25zLmh0bWwjcmFuZ2UpLlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXAp
IHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAg
ICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAgIHZhciBs
ZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4g
ICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlk
eCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBz
dGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24g
KGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBEZXRlcm1p
bmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3JcbiAgLy8g
b3IgYSBub3JtYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4gIHZhciBl
eGVjdXRlQm91bmQgPSBmdW5jdGlvbihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNh
bGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5zdGFuY2Vv
ZiBib3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAg
ICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAgIHZhciBy
ZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlzT2JqZWN0
KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5cbiAgLy8g
Q3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhp
c2AsIGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8gKipFQ01B
U2NyaXB0IDUqKidzIG5hdGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxhYmxlLlxu
ICBfLmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2ZUJpbmQg
JiYgZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBseShmdW5j
LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMp
KSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24n
KTtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgYm91
bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQs
IGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAg
IH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1
bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAg
Ly8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRo
aXNgIGNvbnRleHQuIF8gYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2luZyBhbnkg
Y29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFydGlhbCA9
IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDEpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBvc2l0aW9u
ID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0gQXJyYXko
bGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAg
ICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlvbisrXSA6
IGJvdW5kQXJnc1tpXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFyZ3VtZW50
cy5sZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAgcmV0dXJu
IGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAgfTtcbiAg
ICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3Qn
cyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8vIGFyZSB0
aGUgbWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQgYWxs
IGNhbGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG4gIF8u
YmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1bWVudHMu
bGVuZ3RoLCBrZXk7XG4gICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRB
bGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwg
bGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9ialtrZXld
ID0gXy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xu
XG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3Vs
dHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1v
aXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xu
ICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVb
YWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2Fj
aGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJu
IG1lbW9pemU7XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBu
dW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRoIHRoZSBh
cmd1bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4g
ICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIHNldFRp
bWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xu
ICAgIH0sIHdhaXQpO1xuICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hlZHVsaW5n
IGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBjbGVhcmVk
LlxuICBfLmRlZmVyID0gXy5wYXJ0aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJldHVybnMg
YSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0
IG1vc3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHks
IHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBpdCBjYW4s
IHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xu
ICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxl
YWRpbmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhl
Y3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9IGZ1bmN0
aW9uKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0
O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlm
ICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xu
ICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7
XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAg
ICB9O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5vdygpO1xu
ICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91
cyA9IG5vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtc
biAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlm
IChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlmICh0aW1l
b3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVv
dXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgICBy
ZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRpbWVvdXQp
IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0
aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQo
bGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNv
bnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBm
dW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4g
IC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhl
IGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWls
aW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4g
ICAgdmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xuXG4gICAg
dmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkgLSB0aW1l
c3RhbXA7XG5cbiAgICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAgICAgICAg
dGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0gZWxzZSB7
XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAg
ICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgaWYg
KCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAg
ICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4g
ICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtcbiAgICAg
IHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0aW1lb3V0
KSB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2FsbE5vdykg
e1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBj
b250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4g
ICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMg
YW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBh
cmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25h
bGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihm
dW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAg
fTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJl
ZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBm
dW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUg
Y29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcg
dGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBv
c2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3Rh
cnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFy
IGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBh
cmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMs
IHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0
dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0
aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJl
dHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1
cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5c
biAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRv
IChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9u
KHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xu
ICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7
XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhv
d1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9u
LlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVjdCBGdW5j
dGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQg
d29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4g
IHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUo
J3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQ
cm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnR5
SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAg
ZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIgbm9uRW51
bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0g
b2JqLmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29uc3RydWN0
b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25z
dHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7
XG4gICAgaWYgKF8uaGFzKG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIGtl
eXMucHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAgIHByb3Ag
PSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBpbiBvYmog
JiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkg
e1xuICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g
UmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuICAvLyBE
ZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgXG4gIF8u
a2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4g
W107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFy
IGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkp
KSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1C
dWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAg
fTtcblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC5c
biAgXy5hbGxLZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikp
IHJldHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmop
IGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1
ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9
O1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5c
biAgXy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmop
O1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0gQXJyYXko
bGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2
YWx1ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07
XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8g
ZWFjaCBlbGVtZW50IG9mIHRoZSBvYmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5tYXAgaXQg
cmV0dXJucyBhbiBvYmplY3RcbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAg
dmFyIGtleXMgPSAgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgs
XG4gICAgICAgICAgcmVzdWx0cyA9IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4gICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGN1
cnJlbnRLZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0
ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAg
IHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBs
aXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5n
dGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpba2V5c1tp
XV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IHRoZSBr
ZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXph
YmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtc
biAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGgg
PSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW2tleXNb
aV1dXSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0
aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9ucyA9IF8u
bWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAo
dmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1l
cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07XG5cbiAg
Ly8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3Nl
ZC1pbiBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzKTtc
blxuICAvLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGll
cyBpbiB0aGUgcGFzc2VkLWluIG9iamVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2Jq
ZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8u
a2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBh
c3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGlj
YXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtc
biAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNb
aV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7
XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNv
bnRhaW5pbmcgdGhlIGFsbG93bGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1bmN0aW9u
KG9iamVjdCwgb2l0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBvYmog
PSBvYmplY3QsIGl0ZXJhdGVlLCBrZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJl
c3VsdDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtleXMgPSBf
LmFsbEtleXMob2JqKTtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0ZWUsIGNv
bnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVudHMsIGZh
bHNlLCBmYWxzZSwgMSk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9i
aikgeyByZXR1cm4ga2V5IGluIG9iajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuICAg
IH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7
IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUgPSBvYmpb
a2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9
IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBSZXR1cm4g
YSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgYmxvY2tsaXN0ZWQgcHJvcGVydGllcy5c
biAgXy5vbWl0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmIChf
LmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRlKGl0ZXJh
dGVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVuKGFyZ3Vt
ZW50cywgZmFsc2UsIGZhbHNlLCAxKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rp
b24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywga2V5KTtc
biAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4
dCk7XG4gIH07XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJv
cGVydGllcy5cbiAgXy5kZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywgdHJ1ZSk7
XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBw
cm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3Zp
ZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9iamVjdC5c
biAgXy5jcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFyIHJlc3Vs
dCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5kT3duKHJl
c3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3JlYXRlIGEg
KHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25lID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gICAg
cmV0dXJuIF8uaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwgb2JqKTtc
biAgfTtcblxuICAvLyBJbnZva2VzIGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5kIHRoZW4g
cmV0dXJucyBvYmouXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMg
dG8gXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBwZXJmb3Jt
IG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi5cbiAg
Xy50YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0b3Iob2Jq
KTtcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBhbiBvYmpl
Y3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0Y2ggPSBm
dW5jdGlvbihvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0cnMpLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVu
Z3RoO1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChh
dHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7XG4g
ICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZl
IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVuY3Rpb24o
YSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1
YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRo
ZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rv
a3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAw
IHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlzIG5lY2Vz
c2FyeSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBi
ID09IG51bGwpIHJldHVybiBhID09PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmpl
Y3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIg
aW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1g
IG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChj
bGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2gg
KGNsYXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHByZXNz
aW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgICBj
YXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBz
dHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICAg
IGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWly
IGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1
XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAg
ICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVjdCBOdW1i
ZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2
ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAgICAgICAg
aWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNv
bXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAg
cmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNh
c2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAg
ICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFs
dWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQg
cmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25k
IHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQu
XG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9
IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xu
ICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSBy
ZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0
b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAg
Ly8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3Ry
dWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3Ig
JiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9y
IGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3Ry
dWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFs
c2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0
cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1
Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBv
cGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQg
b2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBm
b3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8
IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNr
Lmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2gu
IFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxu
ICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5n
dGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8g
QWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxu
ICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJz
aXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xu
ICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29t
cGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlm
IChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBh
cmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAg
d2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0s
IGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4g
ICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEp
LCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0
IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9y
ZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9
PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAg
ICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhd
O1xuICAgICAgICBpZiAoIShfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3Rh
Y2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92
ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxu
ICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRydWU7XG4g
IH07XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2Jq
ZWN0cyBhcmUgZXF1YWwuXG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1
cm4gZXEoYSwgYik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBv
YmplY3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUg
b3duLXByb3BlcnRpZXMuXG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChv
YmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikgJiYgKF8u
aXNBcnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9iaikpKSBy
ZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVuZ3RoID09
PSAwO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbiAgXy5p
c0VsZW1lbnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2Rl
VHlwZSA9PT0gMSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT9cbiAg
Ly8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5pc0FycmF5
ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcu
Y2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4g
dmFyaWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
dmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8
IHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21lIGlzVHlw
ZSBtZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBp
c0RhdGUsIGlzUmVnRXhwLCBpc0Vycm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rp
b24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvciddLCBmdW5j
dGlvbihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtcbiAgICAg
IHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xu
ICAgIH07XG4gIH0pO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1l
dGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUgaXNuJ3Qg
YW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJndW1lbnRz
KGFyZ3VtZW50cykpIHtcbiAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
ICByZXR1cm4gXy5oYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGlt
aXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2Yg
YnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkgOCAoIzE5
MjkpLlxuICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkg
IT0gJ29iamVjdCcpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAg
IHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtcbiAgfVxu
XG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zpbml0ZSA9
IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJz
ZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5h
TiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5cbiAgXy5p
c05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2Jq
ICE9PSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBf
LmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRydWUgfHwg
b2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5d
JztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4gIF8uaXNO
dWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAgfTtcblxu
ICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5lZCA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxuICAvLyBT
aG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHBy
b3BlcnR5IGRpcmVjdGx5XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBh
IHByb3RvdHlwZSkuXG4gIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4g
b2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07XG5cbiAg
Ly8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4g
VW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFy
aWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRv
IHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4g
ICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xu
XG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVy
YXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1
ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVz
ZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1
ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9
O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5ID0gcHJv
cGVydHk7XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRo
YXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5jdGlvbihr
ZXkpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVy
bnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVu
IHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5tYXRjaGVz
ID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBhdHRycyk7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRjaChvYmos
IGF0dHJzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVz
LlxuICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIg
YWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNi
KGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykg
YWNjdW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5cbiAgLy8g
UmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVzaXZlKS5c
biAgXy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkg
e1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1p
biArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH07XG5c
biAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFt
cCBhcyBhbiBpbnRlZ2VyLlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICAg
IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBvZiBIVE1M
IGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcm
YW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZx
dW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAg
dmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMg
Zm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9s
YXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVz
Y2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAg
fTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJl
IGVzY2FwZWRcbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2luKCd8Jykg
KyAnKSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2YXIgcmVw
bGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0
cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5n
O1xuICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2Uo
cmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgXy5lc2Nh
cGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVhdGVFc2Nh
cGVyKHVuZXNjYXBlTWFwKTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGBwcm9w
ZXJ0eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBgb2JqZWN0
YCBhcyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBmdW5jdGlv
bihvYmplY3QsIHByb3BlcnR5LCBmYWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9
PSBudWxsID8gdm9pZCAwIDogb2JqZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUgPT09IHZv
aWQgMCkge1xuICAgICAgdmFsdWUgPSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNG
dW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtcblxuICAv
LyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUg
Y2xpZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxuICB2
YXIgaWRDb3VudGVyID0gMDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAg
IHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCAr
IGlkIDogaWQ7XG4gIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1z
dHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1w
bGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50ZW1wbGF0
ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAg
ICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAgICAgIDog
LzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1w
bGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVy
cG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQg
aXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4v
O1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0
aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBl
cyA9IHtcbiAgICBcIidcIjogICAgICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxcXCcsXG4g
ICAgJ1xccic6ICAgICAncicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIwMjgnOiAn
dTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVyID0g
L1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0g
ZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4g
IH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4g
UmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRs
ZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQg
Y29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8g
TkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7
XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5n
cztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0
dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhw
cmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAg
ICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3Mu
aW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRl
IHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAg
IC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxz
IGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJf
X3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2Fw
ZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0
LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7XG4gICAg
ICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2FwZSkge1xu
ICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/
Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkg
e1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIp
KT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAg
ICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAg
ICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHBy
b2R1Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xu
ICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBz
cGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlmICghc2V0
dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAn
fVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5
cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1
bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxu
ICAgIHRyeSB7XG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlh
YmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5z
b3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0
ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRh
LCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEg
Y29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRp
bmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbign
ICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBs
YXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5p
bmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRy
dWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0t
LS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQg
cmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUu
IFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5k
ZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3Vs
dHMuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAgcmV0dXJu
IGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4gIC8vIEFk
ZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAg
Xy5taXhpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBm
dW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07XG4g
ICAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9
IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xu
ICAgICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xuICAgICAg
fTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3JlIGZ1bmN0
aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8gQWRkIGFs
bCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsncG9w
JywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0
J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtc
biAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRo
aXMuX3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAg
aWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3Ro
ID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBvYmopO1xu
ICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRv
IHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5j
dGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5w
cm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywg
bWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xu
XG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2Jq
ZWN0LlxuICBfLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlz
Ll93cmFwcGVkO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBmb3Igc29t
ZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBhcml0aG1l
dGljIGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVPZiA9IF8u
cHJvdG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90eXBlLnRv
U3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBlZDtcbiAg
fTtcblxuICAvLyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3IgY29tcGF0
aWJpbGl0eSB3aXRoIEFNRCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNlIG5leHQt
dHVybiBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAvLyBwcmFj
dGljZSBmb3IgQU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVyc2NvcmUg
cmVnaXN0ZXJzXG4gIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1ZXJ5LCBp
dCBpcyBhIGJhc2UgbGlicmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRvIGJlIGJ1
bmRsZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAvLyBhbiBB
TUQgbG9hZCByZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVu
IGFuXG4gIC8vIGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIGxvYWRl
ciByZXF1ZXN0LlxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUu
YW1kKSB7XG4gICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iCiAKIC8qKiovIH0pLAog
LyogNDIyICovCkBAIC0xNDkwMjgsNyArMTQ5MDI4LDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlv
bigpIHsKIAogICBmdW5jdGlvbiBjb21iaW5lKGRlc3QsIHNyYykgewogICAgIE9iamVjdC5rZXlz
KHNyYykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7Ci0gICAgICBpZiAoXy5oYXMoSlNISU5ULmJs
YWNrbGlzdCwgbmFtZSkpIHJldHVybjsKKyAgICAgIGlmIChfLmhhcyhKU0hJTlQuYmxvY2tsaXN0
LCBuYW1lKSkgcmV0dXJuOwogICAgICAgZGVzdFtuYW1lXSA9IHNyY1tuYW1lXTsKICAgICB9KTsK
ICAgfQpAQCAtMTQ5MzEzLDcgKzE0OTMxMyw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICAgICAga2V5ID0ga2V5LnNsaWNlKDEpOwogICAgICAgICAgIHZhbCA9IGZhbHNlOwog
Ci0gICAgICAgICAgSlNISU5ULmJsYWNrbGlzdFtrZXldID0ga2V5OworICAgICAgICAgIEpTSElO
VC5ibG9ja2xpc3Rba2V5XSA9IGtleTsKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtrZXld
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHByZWRlZltrZXldID0gKHZhbCA9PT0gInRy
dWUiKTsKQEAgLTE1NDEyMCw3ICsxNTQxMjAsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgSlNISU5ULmVycm9ycyA9IFtdOwogICAgICAgSlNISU5ULnVuZGVmcyA9IFtdOwog
ICAgICAgSlNISU5ULmludGVybmFscyA9IFtdOwotICAgICAgSlNISU5ULmJsYWNrbGlzdCA9IHt9
OworICAgICAgSlNISU5ULmJsb2NrbGlzdCA9IHt9OwogICAgICAgSlNISU5ULnNjb3BlID0gIiht
YWluKSI7CiAgICAgfQogCkBAIC0xNTQxNDksNyArMTU0MTQ5LDcgQEAgdmFyIEpTSElOVCA9IChm
dW5jdGlvbigpIHsKIAogICAgICAgICBpZiAoaXRlbVswXSA9PT0gIi0iKSB7CiAgICAgICAgICAg
c2xpY2UgPSBpdGVtLnNsaWNlKDEpOwotICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rbc2xpY2Vd
ID0gc2xpY2U7CisgICAgICAgICAgSlNISU5ULmJsb2NrbGlzdFtzbGljZV0gPSBzbGljZTsKICAg
ICAgICAgICAvLyByZW1vdmUgZnJvbSBwcmVkZWZpbmVkIGlmIHRoZXJlCiAgICAgICAgICAgZGVs
ZXRlIHByZWRlZmluZWRbc2xpY2VdOwogICAgICAgICB9IGVsc2UgewpAQCAtMTk1ODI5LDcgKzE5
NTgyOSw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSAKIAl2YXIg
cmVnZXhTaW5nbGVFc2NhcGUgPSAvWyInXFxcYlxmXG5cclx0XS87CiAKIAl2YXIgcmVnZXhEaWdp
dCA9IC9bMC05XS87Ci0JdmFyIHJlZ2V4V2hpdGVsaXN0ID0gL1sgISMtJlwoLVxbXF0tfl0vOwor
CXZhciByZWdleEFsbG93bGlzdCA9IC9bICEjLSZcKC1cW1xdLX5dLzsKIAogCXZhciBqc2VzYyA9
IGZ1bmN0aW9uKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAJCS8vIEhhbmRsZSBvcHRpb25zCkBAIC0x
OTYwMDQsNyArMTk2MDA0LDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5v
ZGUpIAogCQkJCX0KIAkJCX0KIAkJCWlmICghb3B0aW9ucy5lc2NhcGVFdmVyeXRoaW5nKSB7Ci0J
CQkJaWYgKHJlZ2V4V2hpdGVsaXN0LnRlc3QoY2hhcmFjdGVyKSkgeworCQkJCWlmIChyZWdleEFs
bG93bGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKIAkJCQkJLy8gSXTigJlzIGEgcHJpbnRhYmxlIEFT
Q0lJIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBgImAsIGAnYCBvciBgXGAsCiAJCQkJCS8vIHNvIGRv
buKAmXQgZXNjYXBlIGl0LgogCQkJCQlyZXN1bHQgKz0gY2hhcmFjdGVyOwpAQCAtMjA5MzM0LDcg
KzIwOTMzNCw3IEBAIHZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXUKIAog
ZXhwb3J0cy5jYWxsID0gY2FsbDsKIGV4cG9ydHMuX2NhbGwgPSBfY2FsbDsKLWV4cG9ydHMuaXNC
bGFja2xpc3RlZCA9IGlzQmxhY2tsaXN0ZWQ7CitleHBvcnRzLmlzQmxvY2tsaXN0ZWQgPSBpc0Js
b2NrbGlzdGVkOwogZXhwb3J0cy52aXNpdCA9IHZpc2l0OwogZXhwb3J0cy5za2lwID0gc2tpcDsK
IGV4cG9ydHMuc2tpcEtleSA9IHNraXBLZXk7CkBAIC0yMDk0MTAsOSArMjA5NDEwLDkgQEAgZnVu
Y3Rpb24gX2NhbGwoZm5zKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotZnVuY3Rpb24gaXNCbGFj
a2xpc3RlZCgpIHsKLSAgdmFyIGJsYWNrbGlzdCA9IHRoaXMub3B0cy5ibGFja2xpc3Q7Ci0gIHJl
dHVybiBibGFja2xpc3QgJiYgYmxhY2tsaXN0LmluZGV4T2YodGhpcy5ub2RlLnR5cGUpID4gLTE7
CitmdW5jdGlvbiBpc0Jsb2NrbGlzdGVkKCkgeworICB2YXIgYmxvY2tsaXN0ID0gdGhpcy5vcHRz
LmJsb2NrbGlzdDsKKyAgcmV0dXJuIGJsb2NrbGlzdCAmJiBibG9ja2xpc3QuaW5kZXhPZih0aGlz
Lm5vZGUudHlwZSkgPiAtMTsKIH0KIAogZnVuY3Rpb24gdmlzaXQoKSB7CkBAIC0yMDk0MjAsNyAr
MjA5NDIwLDcgQEAgZnVuY3Rpb24gdmlzaXQoKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAK
LSAgaWYgKHRoaXMuaXNCbGFja2xpc3RlZCgpKSB7CisgIGlmICh0aGlzLmlzQmxvY2tsaXN0ZWQo
KSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC0yMTEwNzgsNyArMjExMDc4LDcgQEAg
ZnVuY3Rpb24gc2hvdWxkSWdub3JlS2V5KGtleSkgewogCiAgIGlmIChrZXkgPT09ICJlbnRlciIg
fHwga2V5ID09PSAiZXhpdCIgfHwga2V5ID09PSAic2hvdWxkU2tpcCIpIHJldHVybiB0cnVlOwog
Ci0gIGlmIChrZXkgPT09ICJibGFja2xpc3QiIHx8IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9
PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CisgIGlmIChrZXkgPT09ICJibG9ja2xpc3QiIHx8
IGtleSA9PT0gIm5vU2NvcGUiIHx8IGtleSA9PT0gInNraXBLZXlzIikgcmV0dXJuIHRydWU7CiAK
ICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjIyNzY4LDcgKzIyMjc2OCw3IEBAIGZ1bmN0aW9uIF9p
bnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyAKIAogY29uc3QgbGlmZWN5Y2xlTWV0aG9kcyA9
IG5ldyBTZXQoWyJjb21wb25lbnRXaWxsVW5tb3VudCIsICJjb21wb25lbnREaWRNb3VudCIsICJj
b21wb25lbnRXaWxsTW91bnQiLCAiY29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxV
cGRhdGUiLCAiY29tcG9uZW50RGlkQ2F0Y2giLCAiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyJd
KTsKIAotY29uc3Qgd2hpdGVsaXN0ZWRQcm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNv
bnRleHQiLCAicmVmcyJdKTsKK2NvbnN0IGFsbG93bGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQo
WyJwcm9wcyIsICJjb250ZXh0IiwgInJlZnMiXSk7CiAKIGZ1bmN0aW9uIGdldEluaXRpYWxQcm9w
cyhyZWFsbSwgY29tcG9uZW50VHlwZSkgewogICBsZXQgcHJvcHNOYW1lID0gbnVsbDsKQEAgLTIy
MjkzOCw3ICsyMjI5MzgsNyBAQCBmdW5jdGlvbiBldmFsdWF0ZUNsYXNzQ29uc3RydWN0b3IocmVh
bG0sCiAgICAgbGV0IGluc3RhbmNlID0gKDAsIF9pbmRleDIuQ29uc3RydWN0KShyZWFsbSwgY29u
c3RydWN0b3JGdW5jLCBbcHJvcHMsIGNvbnRleHRdKTsKICAgICAoMCwgX2ludmFyaWFudDIuZGVm
YXVsdCkoaW5zdGFuY2UgaW5zdGFuY2VvZiBfaW5kZXguT2JqZWN0VmFsdWUpOwogICAgIGZvciAo
bGV0IFtwcm9wZXJ0eU5hbWVdIG9mIGluc3RhbmNlLnByb3BlcnRpZXMpIHsKLSAgICAgIGlmICgh
d2hpdGVsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUpKSB7CisgICAgICBpZiAoIWFs
bG93bGlzdGVkUHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpbnN0YW5j
ZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7CiAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416904</attachid>
            <date>2021-01-02 15:11:48 -0800</date>
            <delta_ts>2021-01-03 10:43:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>test2.txt</filename>
            <type>text/plain</type>
            <size>1391244</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzExMjIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIxLTAxLTAyICBC
ZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbm9uLWluY2x1
c2l2ZSBsYW5ndWFnZSBmcm9tIEpldFN0cmVhbSAyLjAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3RyZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9y
LXBheWxvYWQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNwZWN0b3Iu
UmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2Zvcm1h
dFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuc3R5bGVGb3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRPTU5vZGUuV2ViSW5zcGVjdG9yLlJlc291cmNlLldlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLmlzQWxs
b3dsaXN0ZWRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5XZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUu
X2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuaXNXaGl0ZWxpc3RlZFByb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBKZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanM6
CisKIDIwMjAtMTItMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01vdGlvbk1hcmtdIEluY3JlYXNlIHRoZSB3YXJtLXVwIHRpbWUgZm9yIGVhY2ggc3Vi
LXRlc3QgZnJvbSAxMDBtcyB0byAxMDAwbXMKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi9jb2RlLWxvYWQvaW5zcGVjdG9yLXBheWxvYWQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9pbnNwZWN0b3ItcGF5bG9hZC5qcwkocmV2
aXNpb24gMjcxMTIyKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NvZGUtbG9hZC9p
bnNwZWN0b3ItcGF5bG9hZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNTgwOSw5ICs1ODA5LDkgQEAg
ZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqLHRva2VuKQogZnVuY3Rpb24gaW50ZWdlckZvcm1h
dHRlcihvYmopCiB7bGV0IHZhbHVlPXR5cGVvZiBvYmoudmFsdWU9PT0ibnVtYmVyIj9vYmoudmFs
dWU6b2JqLmRlc2NyaXB0aW9uO3JldHVybiBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzLmQodmFs
dWUpO30KIHZhciBjdXJyZW50U3R5bGU9bnVsbDtmdW5jdGlvbiBzdHlsZUZvcm1hdHRlcihvYmop
Ci17Y3VycmVudFN0eWxlPXt9O3ZhciBidWZmZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpO2J1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIixvYmouZGVzY3JpcHRpb24pO2Zvcih2YXIg
aT0wO2k8YnVmZmVyLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBwcm9wZXJ0eT1idWZmZXIuc3R5bGVb
aV07aWYoaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KSkKK3tjdXJyZW50U3R5bGU9e307
dmFyIGJ1ZmZlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7YnVmZmVyLnNldEF0dHJp
YnV0ZSgic3R5bGUiLG9iai5kZXNjcmlwdGlvbik7Zm9yKHZhciBpPTA7aTxidWZmZXIuc3R5bGUu
bGVuZ3RoO2krKyl7dmFyIHByb3BlcnR5PWJ1ZmZlci5zdHlsZVtpXTtpZihpc0FsbG93bGlzdGVk
UHJvcGVydHkocHJvcGVydHkpKQogY3VycmVudFN0eWxlW3Byb3BlcnR5XT1idWZmZXIuc3R5bGVb
cHJvcGVydHldO319Ci1mdW5jdGlvbiBpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCitm
dW5jdGlvbiBpc0FsbG93bGlzdGVkUHJvcGVydHkocHJvcGVydHkpCiB7Zm9yKHZhciBwcmVmaXgg
b2ZbImJhY2tncm91bmQiLCJib3JkZXIiLCJjb2xvciIsImZvbnQiLCJsaW5lIiwibWFyZ2luIiwi
cGFkZGluZyIsInRleHQiXSl7aWYocHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXgpfHxwcm9wZXJ0
eS5zdGFydHNXaXRoKCItd2Via2l0LSIrcHJlZml4KSkKIHJldHVybiB0cnVlO30KIHJldHVybiBm
YWxzZTt9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVu
Y2htYXJrL2Jyb3dzZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dlYi10b29saW5nLWJlbmNobWFyay9icm93c2VyLmpzCShyZXZpc2lvbiAyNzExMjIpCisr
KyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmctYmVuY2htYXJrL2Jyb3dz
ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwMzg4LDE1ICsxMDM4OCwxNSBAQCB0cmF2ZXJzZS5y
ZW1vdmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHRyCiAgIHJldHVybiB0cmVlOwogfTsKIAotZnVu
Y3Rpb24gaGFzQmxhY2tsaXN0ZWRUeXBlKHBhdGgsIHN0YXRlKSB7CitmdW5jdGlvbiBoYXNCbG9j
a2xpc3RlZFR5cGUocGF0aCwgc3RhdGUpIHsKICAgaWYgKHBhdGgubm9kZS50eXBlID09PSBzdGF0
ZS50eXBlKSB7CiAgICAgc3RhdGUuaGFzID0gdHJ1ZTsKICAgICBwYXRoLnN0b3AoKTsKICAgfQog
fQogCi10cmF2ZXJzZS5oYXNUeXBlID0gZnVuY3Rpb24gKHRyZWUsIHNjb3BlLCB0eXBlLCBibGFj
a2xpc3RUeXBlcykgewotICBpZiAoKDAsIF9pbmNsdWRlczIuZGVmYXVsdCkoYmxhY2tsaXN0VHlw
ZXMsIHRyZWUudHlwZSkpIHJldHVybiBmYWxzZTsKK3RyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlv
biAodHJlZSwgc2NvcGUsIHR5cGUsIGJsb2NrbGlzdFR5cGVzKSB7CisgIGlmICgoMCwgX2luY2x1
ZGVzMi5kZWZhdWx0KShibG9ja2xpc3RUeXBlcywgdHJlZS50eXBlKSkgcmV0dXJuIGZhbHNlOwog
CiAgIGlmICh0cmVlLnR5cGUgPT09IHR5cGUpIHJldHVybiB0cnVlOwogCkBAIC0xMDQwNiw4ICsx
MDQwNiw4IEBAIHRyYXZlcnNlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHJlZSwgc2NvcGUKICAgfTsK
IAogICB0cmF2ZXJzZSh0cmVlLCB7Ci0gICAgYmxhY2tsaXN0OiBibGFja2xpc3RUeXBlcywKLSAg
ICBlbnRlcjogaGFzQmxhY2tsaXN0ZWRUeXBlCisgICAgYmxvY2tsaXN0OiBibG9ja2xpc3RUeXBl
cywKKyAgICBlbnRlcjogaGFzQmxvY2tsaXN0ZWRUeXBlCiAgIH0sIHNjb3BlLCBzdGF0ZSk7CiAK
ICAgcmV0dXJuIHN0YXRlLmhhczsKQEAgLTM2OTczLDcgKzM2OTczLDcgQEAgZnVuY3Rpb24gVHlw
ZWRBcnJheVNwZWNpZXNDcmVhdGUocmVhbG0sIAogdmFyIHByb21pc2VFeGlzdHMgPSB0eXBlb2Yg
UHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJzsKIAogLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi8K
LXZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDogZ2xv
YmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsYWNrbGlzdAordmFyIGdsb2JhbE9iamVj
dCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1k
aXNhYmxlLWxpbmUgaWQtYmxvY2tsaXN0CiAKIHZhciBzeW1ib2xFeGlzdHMgPSB0eXBlb2YgU3lt
Ym9sICE9PSAndW5kZWZpbmVkJzsKIHZhciBtYXBFeGlzdHMgPSB0eXBlb2YgTWFwICE9PSAndW5k
ZWZpbmVkJzsKQEAgLTExMzU4Nyw3ICsxMTM1ODcsNyBAQCBtb2R1bGUuZXhwb3J0cyA9ICJ7XCJ2
ZXJzaW9uXCI6MyxcInNvdXJjCiAvKiA0MDUgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0
IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJp
Z2h0IChjKSAyMDA2LTIwMTcgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0
LykuKi8gXG4vKiFcbldlYiBCdWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVy
L2U0MjZhOWFlNzE2N2M1ODA3YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBD
b3JlXG5cbmRlc2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtW
YWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9y
czogVGhlIE1vb1Rvb2xzIHByb2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZl
bG9wZXJzLylcblxuaW5zcGlyYXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGly
ZWQgYnkgW0Jhc2UuanNdKGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9i
YXNlLykgQ29weXJpZ2h0IChjKSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGlj
ZW5zZS5waHApXG4gIC0gU29tZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUu
anNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBT
dGVwaGVuc29uLCBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9t
aXQtbGljZW5zZS5waHApXG5cbnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVP
ZiwgaW5zdGFuY2VPZiwgTmF0aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZh
c2NyaXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDog
Q29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHVi
LmNvbS9rYW1pY2FuZS8pLiovXG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0
dmVyc2lvbjogJzEuNi4wJyxcblx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2Yzdj
YTUxMTRlZTk1ZTJiJ1xufTtcblxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2Yg
PSB0aGlzLnR5cGVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1
cm4gJ251bGwnO1xuXHRpZiAoaXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1p
bHkoKTtcblxuXHRpZiAoaXRlbS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MSkgcmV0dXJuICdlbGVtZW50Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4g
KC9cXFMvKS50ZXN0KGl0ZW0ubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7
XG5cdH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAo
J2NhbGxlZScgaW4gaXRlbSkgcmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4g
aXRlbSkgcmV0dXJuICdjb2xsZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtc
bn07XG5cbnZhciBpbnN0YW5jZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwg
b2JqZWN0KXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3Ry
dWN0b3IgPSBpdGVtLiRjb25zdHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAo
Y29uc3RydWN0b3Ipe1xuXHRcdGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1
ZTtcblx0XHRjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElF
OD4qL1xuXHRpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0
SUU4PiovXG5cdHJldHVybiBpdGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093
blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+
Ki9cbnZhciBlbnVtZXJhYmxlcyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0p
IGVudW1lcmFibGVzID0gbnVsbDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hh
c093blByb3BlcnR5JywgJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51
bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xu
ZnVuY3Rpb24gZm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRpZiAoZW51bWVyYWJsZXMpIGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTsp
e1xuXHRcdHZhciBrID0gZW51bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXkt
dmFsdWUsIHNvIG92ZXJsb2FkU2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1l
dGhvZCBmdW5jdGlvbiwgd2l0aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093
blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xu
XHR9XG59XG4vKjwvbHRJRTg+Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1
bmN0aW9uID0gdGhpcy5GdW5jdGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0
dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4g
ZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYg
KHVzZVBsdXJhbCB8fCB0eXBlb2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGlu
IGEpIHNlbGYuY2FsbCh0aGlzLCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRm
b3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9h
ZEdldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0
dXJuIGZ1bmN0aW9uKGEpe1xuXHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBh
ICE9ICdzdHJpbmcnKSBhcmdzID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MSkgYXJncyA9IGFyZ3VtZW50cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07
XG5cdFx0aWYgKGFyZ3Mpe1xuXHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlz
LCBhcmdzW2ldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMs
IGEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJv
dG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1
ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9
IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59
Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlO1xuXG5BcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVt
ID09IG51bGwpIHJldHVybiBbXTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAm
JiB0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8g
aXRlbSA6IHNsaWNlLmNhbGwoaXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0
ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicp
ID8gaXRlbSA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51
bWJlci5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0
KGl0ZW0pO1xuXHRyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xu
XG5TdHJpbmcuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xu
fTtcblxuXG5cbkZ1bmN0aW9uLmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20g
PSBOdW1iZXIuY29udmVydDtcblN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhp
ZGUsIHByb3RlY3RcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuJGhpZGRlbiA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cHJvdGVjdDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBl
ID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9
IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7
XG5cdFx0XHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5
cGVbJ2lzJyArIG5hbWVdID0gdHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5c
dFx0XHRvYmplY3QucHJvdG90eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0
dXJuIGxvd2VyO1xuXHRcdFx0fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYg
KG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xu
XHRvYmplY3QuJGNvbnN0cnVjdG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3Ry
dWN0b3IgPSBvYmplY3Q7XG5cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9
IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rp
b24oaXRlbSl7XG5cdHJldHVybiAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9
PSAnbnVtYmVyJyAmJiB0b1N0cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScg
KTtcbn07XG5cbnZhciBob29rcyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdHZhciB0eXBlID0gdHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9v
a3NbdHlwZV0gfHwgKGhvb2tzW3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJl
dHVybjtcblxuXHR2YXIgaG9va3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAw
OyBpIDwgaG9va3MubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0
aWYgKHR5cGVPZihob29rKSA9PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1l
dGhvZCk7XG5cdFx0ZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5c
dHZhciBwcmV2aW91cyA9IHRoaXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0g
bnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRo
b2Q7XG5cblx0aWYgKHRoaXNbbmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVu
Y3Rpb24nKSBleHRlbmQuY2FsbCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1
cm4gbWV0aG9kLmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xu
fTtcblxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2Qg
JiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtc
blx0aWYgKHByZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFt
ZV0gPSBtZXRob2Q7XG59O1xuXG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBs
ZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRl
cigpLFxuXG5cdGFsaWFzOiBmdW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50
LmNhbGwodGhpcywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9h
ZFNldHRlcigpLFxuXG5cdG1pcnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlz
KS5wdXNoKGhvb2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgn
VHlwZScsIFR5cGUpO1xuXG4vLyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9u
KG5hbWUsIG9iamVjdCwgbWV0aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVj
dCksXG5cdFx0cHJvdG90eXBlID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBv
YmplY3QgPSBuZXcgVHlwZShuYW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0g
bWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxu
XHRcdFx0Z2VuZXJpYyA9IG9iamVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5
XTtcblxuXHRcdGlmIChnZW5lcmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBl
ICYmIHByb3RvKSBvYmplY3QuaW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxu
XG5cdGlmIChpc1R5cGUpe1xuXHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5w
cm9wZXJ0eUlzRW51bWVyYWJsZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhv
ZCA9IGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFy
IGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxs
KHByb3RvdHlwZSwgcHJvdG90eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1c
blx0XHRcdGZvciAodmFyIGtleSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90
b3R5cGVba2V5XSwga2V5KTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxu
Zm9yY2UoJ1N0cmluZycsIFN0cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29u
Y2F0JywgJ2NvbnRhaW5zJywgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVv
dGUnLCAncmVwbGFjZScsICdzZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywg
J3N1YnN0cmluZycsICd0cmltJywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0Fy
cmF5JywgQXJyYXksIFtcblx0J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdp
bmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21h
cCcsICdzb21lJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1i
ZXInLCBOdW1iZXIsIFtcblx0J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0
cmluZycsICd0b1ByZWNpc2lvbidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBs
eScsICdjYWxsJywgJ2JpbmQnXG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rl
c3QnXG5dKSgnT2JqZWN0JywgT2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHkn
LCAnZGVmaW5lUHJvcGVydGllcycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93
blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRF
eHRlbnNpb25zJywgJ2lzRXh0ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScs
ICdpc0Zyb3plbidcbl0pKCdEYXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQg
PSBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9u
KCl7XG5cdHJldHVybiArKG5ldyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJv
b2xlYW4pO1xuXG4vLyBmaXhlcyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJv
dG90eXBlLiRmYW1pbHkgPSBmdW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAn
bnVtYmVyJyA6ICdudWxsJztcbn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJl
ci5leHRlbmQoJ3JhbmRvbScsIGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxv
b3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9y
RWFjaCwgZWFjaCwga2V5c1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0
Zm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5k
LCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFj
aDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRr
ZXlzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIg
ayBpbiBvYmplY3Qpe1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkg
a2V5cy5wdXNoKGspO1xuXHRcdH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RF
bnVtYmVyYWJsZUtleShvYmplY3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xu
XHRcdH0pO1xuXHRcdC8qPC9sdElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZv
ckVhY2g6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVj
dCkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5
XSwga2V5LCBvYmplY3QpO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9i
amVjdC5mb3JFYWNoO1xuXG5cbi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJn
aW5nIGFuZCBhcHBlbmRpbmdcblxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dp
dGNoICh0eXBlT2YoaXRlbSkpe1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUo
KTtcblx0XHRjYXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRl
ZmF1bHQ6IHJldHVybiBpdGVtO1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywg
ZnVuY3Rpb24oKXtcblx0dmFyIGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7
XG5cdHdoaWxlIChpLS0pIGNsb25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNs
b25lO1xufSk7XG5cbnZhciBtZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50
KXtcblx0c3dpdGNoICh0eXBlT2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0
XHRpZiAodHlwZU9mKHNvdXJjZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJj
ZVtrZXldLCBjdXJyZW50KTtcblx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUo
Y3VycmVudCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0g
Y3VycmVudC5jbG9uZSgpOyBicmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJl
bnQ7XG5cdH1cblx0cmV0dXJuIHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1l
cmdlOiBmdW5jdGlvbihzb3VyY2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmlu
ZycpIHJldHVybiBtZXJnZU9uZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBs
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJn
dW1lbnRzW2ldO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNl
LCBrZXksIG9iamVjdFtrZXldKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxu
XHRjbG9uZTogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3Ig
KHZhciBrZXkgaW4gb2JqZWN0KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5c
dFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xu
XHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgZXh0ZW5kZWQgPSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBr
ZXkgaW4gZXh0ZW5kZWQpIG9yaWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0
XHRyZXR1cm4gb3JpZ2luYWw7XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5c
blsnT2JqZWN0JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1
bWVudHMnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4v
LyBVbmlxdWUgSURcblxudmFyIFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3Vu
aXF1ZUlEJywgZnVuY3Rpb24oKXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7
XG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBD
b250YWlucyBBcnJheSBQcm90b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5c
blxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJv
dmlkZXM6IEFycmF5XG5cbi4uLlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1
PiovXG5cdGV2ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgIWZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0
aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1
ZSA9IHRoaXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJl
c3VsdHMucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5c
dGluZGV4T2Y6IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aCA+Pj4gMDtcblx0XHRmb3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxl
bmd0aCArIGZyb20pIDogZnJvbSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRo
aXNbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5c
blx0bWFwOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3Ro
ID4+PiAwLCByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxs
KGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0
fSxcblxuXHRzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykg
JiYgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxu
XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1
cm4gaXRlbSAhPSBudWxsO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0
aG9kTmFtZSl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRc
dHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhv
ZE5hbWVdLmFwcGx5KGl0ZW0sIGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTog
ZnVuY3Rpb24oa2V5cyl7XG5cdFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlz
Lmxlbmd0aCwga2V5cy5sZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIG9ialtrZXlzW2ldXSA9IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRs
aW5rOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtl
eSBpbiBvYmplY3Qpe1xuXHRcdFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0
XHRcdHJlc3VsdFtrZXldID0gdGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07
XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHJlc3VsdDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0
cmV0dXJuIHRoaXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
ICh0aGlzLmxlbmd0aCkgPyB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5c
dGdldFJhbmRvbTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNb
TnVtYmVyLnJhbmRvbSgwLCB0aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5j
bHVkZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlz
LnB1c2goaXRlbSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rp
b24oYXJyYXkpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsg
aSsrKSB0aGlzLmluY2x1ZGUoYXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGVyYXNlOiBmdW5jdGlvbihpdGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGkt
LTspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0
aGlzLmxlbmd0aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVu
Y3Rpb24oKXtcblx0XHR2YXIgYXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0p
O1xuXHRcdFx0aWYgKHR5cGUgPT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJy
YXkuY29uY2F0KCh0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlw
ZSA9PSAnYXJndW1lbnRzJyB8fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5m
bGF0dGVuKHRoaXNbaV0pIDogdGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0
fSxcblxuXHRwaWNrOiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRo
aXNbaV07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5j
dGlvbihhcnJheSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRc
dHZhciByZ2IgPSB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVu
Z3RoID09IDEpIHZhbHVlICs9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAx
Nik7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAn
KSc7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5s
ZW5ndGggPCAzKSByZXR1cm4gbnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlz
WzNdID09IDAgJiYgIWFycmF5KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0g
W107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0
aGlzW2ldIC0gMCkudG9TdHJpbmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0g
MSkgPyAnMCcgKyBiaXQgOiBiaXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6
ICcjJyArIGhleC5qb2luKCcnKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTog
RnVuY3Rpb25cblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlr
ZSBjcmVhdGUsIGJpbmQsIHBhc3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiov
XG5cbkZ1bmN0aW9uLmV4dGVuZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3Ig
KHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5
IHtcblx0XHRcdFx0cmV0dXJuIGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxu
XHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50
KHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0
cmV0dXJuIHRoaXMuYXBwbHkoYmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRj
aCAoZSl7fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5c
dGJpbmQ6IGZ1bmN0aW9uKHRoYXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3Mg
PSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxs
LFxuXHRcdFx0RiA9IGZ1bmN0aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7
XG5cdFx0XHR2YXIgY29udGV4dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5c
dFx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBz
ZWxmLnByb3RvdHlwZTtcblx0XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0
dmFyIHJlc3VsdCA9ICghYXJncyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250
ZXh0KVxuXHRcdFx0XHQ6IHNlbGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdz
LmNvbmNhdChBcnJheS5zbGljZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0
XHRcdHJldHVybiBjb250ZXh0ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5c
dFx0cmV0dXJuIGJvdW5kO1xuXHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVu
Y3Rpb24oYXJncywgYmluZCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9
IG51bGwpIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigp
e1xuXHRcdFx0cmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRc
dH07XG5cdH0sXG5cblx0ZGVsYXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRy
ZXR1cm4gc2V0VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJp
bmQpLCBkZWxheSk7XG5cdH0sXG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwg
YmluZCwgYXJncyl7XG5cdFx0cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBu
dWxsID8gW10gOiBhcmdzKSwgYmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBOdW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQ
cm90b3R5cGVzIGxpa2UgbGltaXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVy
XG5cbi4uLlxuKi9cblxuTnVtYmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1p
biwgbWF4KXtcblx0XHRyZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtc
blx0fSxcblxuXHRyb3VuZDogZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBN
YXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVj
aXNpb24gOiAwKTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHBy
ZWNpc2lvbjtcblx0fSxcblxuXHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpczsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxu
XG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5c
dH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlz
LCBiYXNlIHx8IDEwKTtcblx0fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVz
Jyk7XG5cbihmdW5jdGlvbihtYXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNo
KGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNh
dChBcnJheS5jb252ZXJ0KGFyZ3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVt
ZW50KG1ldGhvZHMpO1xuXG59KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFu
MicsICdjZWlsJywgJ2NvcycsICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAn
cG93JywgJ3NpbicsICdzcXJ0JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNl
LCBjYXBpdGFsaXplLCB0ZXN0LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNl
bnNlLlxuXG5yZXF1aXJlczogW1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4u
LlxuKi9cblxuU3RyaW5nLmltcGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1
bmN0aW9uKHN0cmluZywgaW5kZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcyku
c2xpY2UoaW5kZXgpIDogU3RyaW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxc
blx0Ly88LyFFUzY+XG5cblx0dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0
dXJuICgodHlwZU9mKHJlZ2V4KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycg
KyByZWdleCwgcGFyYW1zKSkudGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xu
XHR9LFxuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVw
bGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1h
dGNoKXtcblx0XHRcdHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9
KTtcblx0fSxcblxuXHRoeXBoZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0
aGlzKS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCct
JyArIG1hdGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRj
YXBpdGFsaXplOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgv
XFxiW2Etel0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJD
YXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0p
L2csICdcXFxcJDEnKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0
dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6
IGZ1bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8o
XFx3ezEsMn0pKFxcd3sxLDJ9KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4
LnNsaWNlKDEpLmhleFRvUmdiKGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1
bmN0aW9uKGFycmF5KXtcblx0XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwz
fS9nKTtcblx0XHRyZXR1cm4gKHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0
fSxcblxuXHRzdWJzdGl0dXRlOiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyks
IGZ1bmN0aW9uKG1hdGNoLCBuYW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xc
XFwnKSByZXR1cm4gbWF0Y2guc2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAh
PSBudWxsKSA/IG9iamVjdFtuYW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxu
Lypcbi0tLVxuXG5uYW1lOiBCcm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmpl
Y3QuIENvbnRhaW5zIEJyb3dzZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQs
IGFuZCB0aGUgQnJvd3NlciBIYXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxu
cmVxdWlyZXM6IFtBcnJheSwgRnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczog
W0Jyb3dzZXIsIFdpbmRvdywgRG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2lu
ZG93ID0gdGhpcztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEg
PSB1YS50b0xvd2VyQ2FzZSgpO1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRv
TG93ZXJDYXNlKCkgOiAnJyk7XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdl
IFVBLCBzbyBuZWVkIHRvIGNoZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tp
bmcgaWYgaXQncyBjaHJvbWUuXG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0o
W1xcd1xcZFxcLl0rKS8pO1xuXHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8
aWV8ZmlyZWZveHxjaHJvbWV8dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxk
XFwuXSspPy4qPyhzYWZhcml8KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xc
ZFxcLl0rKXwkKS8pIHx8IFtudWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFd
ID09ICd0cmlkZW50Jyl7XG5cdFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0g
PSBVQVs0XTtcblx0fSBlbHNlIGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdj
aHJvbWUnO1xuXHR9XG5cblx0cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8p
ID8gJ2lvcycgOiAodWEubWF0Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21h
Y3x3aW58bGludXgvKSB8fCBbJ290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicp
IHBsYXRmb3JtID0gJ3dpbmRvd3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlv
bi5wcm90b3R5cGUuZXh0ZW5kLFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFb
M10gOiBVQVsxXSxcblx0XHR2ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYm
IFVBWzRdKSA/IFVBWzRdIDogVUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xu
fTtcblxudmFyIEJyb3dzZXIgPSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFn
ZW50LCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYg
ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9j
dW1lbnRNb2RlO1xufVxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBh
dGg6ICEhKGRvY3VtZW50LmV2YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxc
blx0XHRxdWVyeTogISEoZG9jdW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2lu
ZG93LkpTT04pXG5cdH0sXG5cdHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3Rc
blxuQnJvd3Nlci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIg
TVNYTUwyID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1M
Mi5YTUxIVFRQJyk7XG5cdH07XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0
dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0
dXJuIFhNTEhUVFA7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJu
IE1TWE1MMjtcblx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hN
TDtcblx0fSk7XG5cbn0pKCk7XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5S
ZXF1ZXN0KTtcblxuXG5cbi8vIFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0
aW9uKHRleHQpe1xuXHRpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNT
Y3JpcHQpe1xuXHRcdHdpbmRvdy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZh
ciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQu
c2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0
ID0gdGV4dDtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9j
dW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtc
blxuU3RyaW5nLmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZh
ciBzY3JpcHRzID0gJyc7XG5cdHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+
KFtcXHNcXFNdKj8pPFxcL3NjcmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2Ny
aXB0cyArPSBjb2RlICsgJ1xcbic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMg
PT09IHRydWUpIEJyb3dzZXIuZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMp
ID09ICdmdW5jdGlvbicpIGV4ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7
XG5cbi8vIFdpbmRvdywgRG9jdW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDog
dGhpcy5Eb2N1bWVudCxcblx0V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5F
bGVtZW50LFxuXHRFdmVudDogdGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4k
Y29uc3RydWN0b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4k
ZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWly
cm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0p
O1xuXG50aGlzLkRvY3VtZW50ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0Rv
Y3VtZW50JywgZnVuY3Rpb24oKXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNv
bnZlcnQoJ2RvY3VtZW50JykuaGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFt
ZSwgbWV0aG9kKXtcblx0ZG9jdW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQu
aHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9j
dW1lbnQuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5c
bmlmIChkb2N1bWVudC5leGVjQ29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J0JhY2tncm91bmRJbWFnZUNhY2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4v
KjxsdElFOT4qL1xuaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5l
cil7XG5cdHZhciB1bmxvYWRFdmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVu
dCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50
Lmh0bWwgPSBkb2N1bWVudC53aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93
ID0gZG9jdW1lbnQgPSBudWxsO1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcs
IHVubG9hZEV2ZW50KTtcbn1cblxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxl
Y3Q+Lm9wdGlvbnMgKHJlZmVycyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5j
b252ZXJ0O1xudHJ5IHtcblx0YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59
IGNhdGNoIChlKXtcblx0QXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0
eXBlb2YgaXRlbSAhPSAnc3RyaW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBl
T2YoaXRlbSkgIT0gJ2FycmF5Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9
IG5ldyBBcnJheShpKTtcblx0XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0
XHRcdHJldHVybiBhcnJheTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0
fTtcblxuXHR2YXIgcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJv
dG90eXBlLnNsaWNlO1xuXHRbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29y
dCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2go
ZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRB
cnJheVtuYW1lXSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShB
cnJheS5jb252ZXJ0KGl0ZW0pLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5c
dH0pO1xufVxuLyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENs
YXNzXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2ls
eSBjcmVhdGluZywgZXh0ZW5kaW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJp
bmcsIEZ1bmN0aW9uLCBOdW1iZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihm
dW5jdGlvbigpe1xuXG52YXIgQ2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywg
ZnVuY3Rpb24ocGFyYW1zKXtcblx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBh
cmFtcyA9IHtpbml0aWFsaXplOiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9u
KCl7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBu
dWxsO1xuXHRcdHZhciB2YWx1ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXpl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMu
Y2FsbGVyID0gbnVsbDtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxl
bWVudChwYXJhbXMpO1xuXG5cdG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3Rv
dHlwZS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBw
YXJlbnQgPSBmdW5jdGlvbigpe1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9y
KCdUaGUgbWV0aG9kIFwicGFyZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUg
PSB0aGlzLiRjYWxsZXIuJG5hbWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5w
YXJlbnQsXG5cdFx0cHJldmlvdXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0g
OiBudWxsO1xuXHRpZiAoIXByZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCIn
ICsgbmFtZSArICdcIiBoYXMgbm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5c
dGZvciAodmFyIGtleSBpbiBvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xu
XHRcdHN3aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0
XHR2YXIgRiA9IGZ1bmN0aW9uKCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0
XHRcdFx0b2JqZWN0W2tleV0gPSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0
Y2FzZSAnYXJyYXknOiBvYmplY3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1c
blx0fVxuXHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBr
ZXksIG1ldGhvZCl7XG5cdGlmIChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmln
aW47XG5cdHZhciB3cmFwcGVyID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0
ZWQgJiYgdGhpcy4kY2FsbGVyID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBc
IicgKyBrZXkgKyAnXCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhp
cy5jYWxsZXIsIGN1cnJlbnQgPSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJy
ZW50OyB0aGlzLiRjYWxsZXIgPSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBw
bHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNh
bGxlciA9IGNhbGxlcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBz
ZWxmLCAkb3JpZ2luOiBtZXRob2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59
O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYg
KENsYXNzLk11dGF0b3JzLmhhc093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3Mu
TXV0YXRvcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkg
cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtc
blx0XHRpZiAodmFsdWUuJGhpZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVb
a2V5XSA9IChyZXRhaW4pID8gdmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVs
c2Uge1xuXHRcdE9iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1c
blxuXHRyZXR1cm4gdGhpcztcbn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNz
KXtcblx0a2xhc3MuJHByb3RvdHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNz
O1xuXHRkZWxldGUga2xhc3MuJHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5D
bGFzcy5pbXBsZW1lbnQoJ2ltcGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtc
blxuQ2xhc3MuTXV0YXRvcnMgPSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0
XHR0aGlzLnBhcmVudCA9IHBhcmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNl
KHBhcmVudCk7XG5cdH0sXG5cblx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFy
cmF5LmNvbnZlcnQoaXRlbXMpLmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFu
Y2UgPSBuZXcgaXRlbTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50
LmNhbGwodGhpcywga2V5LCBpbnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0
fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIFV0aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBp
bnRvIHlvdXIgb3duIENsYXNzZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9u
IHRhc2tzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNz
XG5cbnByb3ZpZGVzOiBbQ2xhc3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4u
Li5cbiovXG5cbihmdW5jdGlvbigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQk
Y2hhaW46IFtdLFxuXG5cdGNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVu
ZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGNhbGxDaGFpbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkg
PyB0aGlzLiRjaGFpbi5zaGlmdCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0
fSxcblxuXHRjbGVhckNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9u
KHN0cmluZyl7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9u
KGZ1bGwsIGZpcnN0KXtcblx0XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59
O1xuXG50aGlzLkV2ZW50cyA9IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRk
RXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9u
KHR5cGUpO1xuXG5cdFx0XG5cblx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRz
W3R5cGVdIHx8IFtdKS5pbmNsdWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFs
ID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9u
KGV2ZW50cyl7XG5cdFx0Zm9yICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlw
ZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6
IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7
XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykg
cmV0dXJuIHRoaXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRz
LmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhp
cywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlz
LiRldmVudHNbdHlwZV07XG5cdFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0
dmFyIGluZGV4ID0gZXZlbnRzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBk
ZWxldGUgZXZlbnRzW2luZGV4XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0
eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0
aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztc
blx0XHR9XG5cdFx0aWYgKGV2ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRm
b3IgKHR5cGUgaW4gdGhpcy4kZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9
IHR5cGUpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0
XHRcdGZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0
XHR0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5c
dHNldE9wdGlvbnM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMg
PSBPYmplY3QubWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1
bWVudHMpKTtcblx0XHRpZiAodGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlv
bnMpe1xuXHRcdFx0aWYgKHR5cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwg
ISgvXm9uW0EtWl0vKS50ZXN0KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVu
dChvcHRpb24sIG9wdGlvbnNbb3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25d
O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0t
LVxuXG5uYW1lOiBDbGFzcy5UaGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGls
aXR5IENsYXNzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0
byBtYWtlIHRoZW0gXCJ0aGVuYWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVM
RklMTEVEID0gMSxcblx0U1RBVEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFz
cy5UaGVuYWJsZSA9IG5ldyBDbGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJ
TkcsXG5cdCR0aGVuYWJsZVJlc3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxc
blxuXHRyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xu
XHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dFRoZW5hYmxlU3RhdGU6IGZ1bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0
YXRlKXtcblx0XHRcdGNhc2UgU1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5n
JztcblxuXHRcdFx0Y2FzZSBTVEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmls
bGVkJztcblxuXHRcdFx0Y2FzZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWpl
Y3RlZCc7XG5cdFx0fVxuXHR9LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7
XG5cdFx0cmVqZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQp
e1xuXHRcdGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVk
ID0gJ0lkZW50aXR5Jztcblx0XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicp
IG9uUmVqZWN0ZWQgPSAnVGhyb3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFi
bGUoKTtcblxuXHRcdHRoaXMuJHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFi
bGU6IHRoZW5hYmxlLFxuXHRcdFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0
cmVqZWN0SGFuZGxlcjogb25SZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5h
YmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxu
XG5cdFx0cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVq
ZWN0ZWQpe1xuXHRcdHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxu
fSk7XG5cblRoZW5hYmxlLmV4dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0
XHR2YXIgdGhlbmFibGU7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRc
dFx0dGhlbmFibGUgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcg
VGhlbmFibGUoKTtcblx0XHRcdHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoZW5hYmxlO1xuXHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0
dmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFz
b24pO1xuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rp
b25zXG5cbmZ1bmN0aW9uIHJlc29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09
IHZhbHVlKXtcblx0XHRcdHJlamVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8g
cmVzb2x2ZSBhIHRoZW5hYmxlIHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVl
ICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0
aW9uJykpe1xuXHRcdFx0dmFyIHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFs
dWUudGhlbjtcblx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVu
YWJsZSwgZXhjZXB0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0XHRcdHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihm
dW5jdGlvbigpe1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0
XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRc
dFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQg
PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtc
blx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0
aW9uKHJlYXNvbil7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0
XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFi
bGUsIHJlYXNvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRc
dFx0XHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAo
IXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0
XHRyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUs
IHZhbHVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwg
dmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1
ZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5c
dFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5h
YmxlU3RhdGUgPSBTVEFURV9GVUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1c
bn1cblxuZnVuY3Rpb24gcmVqZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUu
JHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVJlc3VsdCA9IHJlYXNvbjtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JF
SkVDVEVEO1xuXG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0
KHRoZW5hYmxlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5E
SU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFj
dCh0aGVuYWJsZSl7XG5cdHZhciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRc
dHJlc3VsdCA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVu
YWJsZS4kdGhlbmFibGVSZWFjdGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNU
QVRFX0ZVTEZJTExFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5c
dFx0dHlwZSA9ICdmdWxmaWxsSGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVf
UkVKRUNURUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5
cGUgPSAncmVqZWN0SGFuZGxlcic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFu
ZGxlLnBhc3MoW3Jlc3VsdCwgcmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9u
IGhhbmRsZShyZXN1bHQsIHJlYWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0g
cmVhY3Rpb25zLmxlbmd0aDsgaSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rp
b25zW2ldLFxuXHRcdFx0aGFuZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRs
ZXIgPT09ICdJZGVudGl0eScpe1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVz
dWx0KTtcblx0XHR9IGVsc2UgaWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWpl
Y3QocmVhY3Rpb24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7
XG5cdFx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5c
dFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFi
bGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlm
ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRp
Y2sgPT09ICdmdW5jdGlvbicpe1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2Ug
aWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJ
bW1lZGlhdGU7XG59IGVsc2Uge1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1l
b3V0KGZuLCAwKTtcblx0fTtcbn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3Rc
blxuZGVzY3JpcHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNo
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJz
ZXQ6IGZ1bmN0aW9uKG9iamVjdCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBr
ID0ga2V5c1tpXTtcblx0XHRcdGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtr
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihv
YmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0g
T2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBm
bi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVy
biByZXN1bHRzO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7
XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVj
dCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZh
ciBrZXkgPSBrZXlzW2ldLCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwo
YmluZCwgdmFsdWUsIGtleSwgb2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZu
LCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2
YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ld
O1xuXHRcdFx0aWYgKCFmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9i
amVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0
XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9
IGtleXNbaV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0
dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1
bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2Jq
ZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBp
Kyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2td
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0
aW9uKG9iamVjdCl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9
LFxuXG5cdGtleU9mOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9i
amVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsg
aSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09
PSB2YWx1ZSkgcmV0dXJuIGtleTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0
Y29udGFpbnM6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5
T2Yob2JqZWN0LCB2YWx1ZSkgIT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5j
dGlvbihvYmplY3QsIGJhc2Upe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2Jq
ZWN0LmVhY2gob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBr
ZXkgPSBiYXNlICsgJ1snICsga2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3
aXRjaCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9i
amVjdC50b1F1ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJy
YXknOlxuXHRcdFx0XHRcdHZhciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rp
b24odmFsLCBpKXtcblx0XHRcdFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRc
dFx0XHRcdHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklD
b21wb25lbnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5
U3RyaW5nLnB1c2gocmVzdWx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5q
b2luKCcmJyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5QYXJzZXJcbmRlc2NyaXB0aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5w
cm92aWRlczogU2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBh
cnNlZCxcblx0c2VwYXJhdG9ySW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQs
XG5cdGNhY2hlID0ge30sXG5cdHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xc
XFwvZztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5c
dGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5T
bGljayA9PT0gdHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBl
eHByZXNzaW9uKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFp
c1JldmVyc2VkO1xuXHR2YXIgY3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNo
ZSA6IGNhY2hlO1xuXHRpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVu
dENhY2hlW2V4cHJlc3Npb25dO1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0
ZXhwcmVzc2lvbnM6IFtdLFxuXHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5j
dGlvbigpe1xuXHRcdFx0cmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07
XG5cdHNlcGFyYXRvckluZGV4ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNz
aW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVu
Z3RoID0gcGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtw
YXJzZWQucmF3XSA9IChyZXZlcnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xu
XG52YXIgcmV2ZXJzZUNvbWJpbmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNv
bWJpbmF0b3IgPT09ICchJykgcmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0g
JyAnKSByZXR1cm4gJyEnO1xuXHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0
dXJuIGNvbWJpbmF0b3IucmVwbGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNv
bWJpbmF0b3I7XG59O1xuXG52YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2
YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0g
MDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lv
bnNbaV07XG5cdFx0dmFyIGxhc3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjog
cmV2ZXJzZUNvbWJpbmF0b3IoZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGog
PSAwOyBqIDwgZXhwLmxlbmd0aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRc
dFx0aWYgKCFjZXhwLnJldmVyc2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0g
JyAnO1xuXHRcdFx0Y2V4cC5jb21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0
XHRcdGRlbGV0ZSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZl
cnNlKCkucHVzaChsYXN0KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBl
c2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAo
YykgMjAwNy0yMDA4IFN0ZXZlbiBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9y
ZWdleC94cmVnZXhwLz4gTUlUIExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtc
XF17fSgpKis/LlxcXFxeJHwsI1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAn
XFxcXCcgKyBtYXRjaDtcblx0fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8q
XG4jIS91c3IvYmluL2VudiBydWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1Yigv
XFwoXFw/eFxcKXxcXHMrIy4qJHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIo
P3gpXig/OlxcXG5cdCAgXFxcXHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJh
dG9yICAgICAgICAgIFxcblxcXG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAg
ICMgQ29tYmluYXRvciAgICAgICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAg
ICAgICAgICAjIENvbWJpbmF0b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4r
IHwgXFxcXCogKSAgICAgIyBUYWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8
dW5pY29kZT4rICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxc
XC4gICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxu
XHR8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxc
blxcXG5cdFxcXFxbICBcXFxuXHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0
XHRcXFxccyogKFsqXiQhfnxdPz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRc
dFx0XHRcdChbXFxcIiddPykoLio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxc
blx0XHQpPyAgXFxcXHMqICBcXFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8
dW5pY29kZT4rICkoPzpcXFxuXHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwx
Ml0qKVxcXFwxMil8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxc
blx0KT9cXFxuXHQpXCJcbiovXG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJp
bmF0b3I+KylcXFxccyp8KFxcXFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2Rl
PispfFxcXFwuKDx1bmljb2RlPispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihb
Kl4kIX58XT89KSg/OlxcXFxzKig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxd
KD8hXFxcXF0pfCg6KykoPHVuaWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwx
M10qKVxcXFwxMyl8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQu
cmVwbGFjZSgvPGNvbWJpbmF0b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9
XFxcXDs8LycpICsgJ10nKVxuXHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxc
dTAwYTEtXFxcXHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgv
PHVuaWNvZGUxPi9nLCAnKD86WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFte
XFxcXHMwLTlhLWZdKScpXG4pO1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5c
dHNlcGFyYXRvcixcblx0Y29tYmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRh
Z05hbWUsXG5cdGlkLFxuXHRjbGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1
dGVPcGVyYXRvcixcblx0YXR0cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBz
ZXVkb01hcmtlcixcblx0cHNldWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFz
c1F1b3RlZFZhbHVlLFxuXHRwc2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8
IHNlcGFyYXRvckluZGV4ID09PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJh
dG9ySW5kZXhdID0gW107XG5cdFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFy
YXRvcikgcmV0dXJuICcnO1xuXHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNo
aWxkcmVuIHx8IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21i
aW5hdG9yIHx8ICcgJztcblx0XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNz
aW9uc1tzZXBhcmF0b3JJbmRleF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0
b3JbY29tYmluYXRvckluZGV4XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvcklu
ZGV4XS5yZXZlcnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xu
XHRcdGN1cnJlbnRTZXBhcmF0b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNv
bWJpbmF0b3IsIHRhZzogJyonfTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2Vk
LmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0
YWdOYW1lKXtcblx0XHRjdXJyZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNj
YXBlLCAnJyk7XG5cblx0fSBlbHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlk
LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0
XHRjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRp
ZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtd
O1xuXHRcdGlmICghY3VycmVudFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0
Y3VycmVudFBhcnNlZC5jbGFzc2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0
XHRcdHJlZ2V4cDogbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05h
bWUpICsgJyhcXFxcc3wkKScpXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7
XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NR
dW90ZWRWYWx1ZTtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBz
ZXVkb0NsYXNzVmFsdWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYg
KCFjdXJyZW50UGFyc2VkLnBzZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRc
dGN1cnJlbnRQYXJzZWQucHNldWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVw
bGFjZShyZVVuZXNjYXBlLCAnJyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0
XHRcdHR5cGU6IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdc
blx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5
ID0gYXR0cmlidXRlS2V5LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZh
bHVlID0gKGF0dHJpYnV0ZVZhbHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxu
XHRcdHZhciB0ZXN0LCByZWdleHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtc
blx0XHRcdGNhc2UgJ149JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBl
UmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAn
JD0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmli
dXRlVmFsdWUpICsnJCcgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAg
PSBuZXcgUmVnRXhwKCAnKF58XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSAr
JyhcXFxcc3wkKScgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVn
RXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICAp
OyBicmVhaztcblx0XHRcdGNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
XHRcdHJldHVybiBhdHRyaWJ1dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnKj0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZh
bHVlICYmIHZhbHVlLmluZGV4T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVh
aztcblx0XHRcdGNhc2UgJyE9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJl
dHVybiBhdHRyaWJ1dGVWYWx1ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVm
YXVsdCAgIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7
XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15b
KiReXT0kLykudGVzdChhdHRyaWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRc
dFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlv
bih2YWx1ZSl7XG5cdFx0XHRyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRc
dH07XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5h
dHRyaWJ1dGVzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRc
dFx0a2V5OiBhdHRyaWJ1dGVLZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3Is
XG5cdFx0XHR2YWx1ZTogYXR0cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7
XG5cblx0fVxuXG5cdHJldHVybiAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9
ICh0aGlzLlNsaWNrIHx8IHt9KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0cmV0dXJuIHBhcnNlKGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhw
ID0gZXNjYXBlUmVnRXhwO1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztc
blxufSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcp
ID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGlj
ay5GaW5kZXJcbmRlc2NyaXB0aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVu
Z2luZS5cbnByb3ZpZGVzOiBTbGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4u
LlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNo
ZSA9IHt9LFxuXHR0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZl
YXR1cmUgLyBCdWcgZGV0ZWN0aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZu
KXtcblx0cmV0dXJuICgvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycg
KyBmbik7XG59O1xuXG5sb2NhbC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJu
ICghIWRvY3VtZW50LnhtbFZlcnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5n
LmNhbGwoZG9jdW1lbnQpID09ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVu
dC5ub2RlVHlwZSA9PSA5ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAn
SFRNTCcpO1xufTtcblxubG9jYWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5c
blx0Ly8gY29udmVydCBlbGVtZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlm
IGRvY3VtZW50IGNhbm5vdCBiZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxu
XHR2YXIgbm9kZVR5cGUgPSBkb2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkp
OyAvLyBkb2N1bWVudFxuXHRlbHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5v
d25lckRvY3VtZW50OyAvLyBub2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9j
dW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5c
dC8vIGNoZWNrIGlmIGl0J3MgdGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50
ID09PSBkb2N1bWVudCkgcmV0dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0
Ly8gY2hlY2sgaWYgd2UgaGF2ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1l
bnQgYmVmb3JlXG5cblx0dmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0
cm9vdFVpZCA9IHRoaXMuZ2V0VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXND
YWNoZVtyb290VWlkXSxcblx0XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9y
IChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tm
ZWF0dXJlXTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJl
c0NhY2hlW3Jvb3RVaWRdID0ge307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1
cmVzLmlzWE1MRG9jdW1lbnQgPSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5i
cm9rZW5TdGFyR0VCVE5cblx0PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZl
YXR1cmVzLmlkR2V0c05hbWVcblx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5HRUJDTlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBm
ZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3Vt
ZW50XG5cdD0gZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0
dmFyIHN0YXJTZWxlY3RzQ2xvc2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNl
Y29uZENsYXNzTmFtZUdFQkNOLCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJy
b2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191
bmlxdWVpZCc7XG5cdHZhciB0ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
O1xuXG5cdHZhciB0ZXN0Um9vdCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2JvZHknKVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0
ZXN0Tm9kZSk7XG5cblx0Ly8gb24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0
RWxlbWVudHNCeUlkIGRvZXNudCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJzxhIGlkPVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1M
RG9jdW1lbnQgPSAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7
fVxuXG5cdGlmIChmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZv
ciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3RO
b2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2Vs
ZWN0c0NvbW1lbnRzID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3Ro
ID4gMSk7XG5cblx0XHQvLyBJRSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikg
Zm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5
IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0
ZWQgPSB0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVj
dHNDbG9zZWQgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0u
bm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZl
YXR1cmVzLmJyb2tlblN0YXJHRUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVj
dHNDbG9zZWQ7XG5cblx0XHQvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5z
dGVhZCBvZiBqdXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5c
dFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydc
Ij48L2E+PGIgaWQ9XCInKyBpZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFt
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtc
blx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSl7XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNo
ZXMgcmVzdWx0c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxh
IGNsYXNzPVwiZlwiPjwvYT48YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmly
c3RDaGlsZC5jbGFzc05hbWUgPSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFz
c05hbWUgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAy
KTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50
c0J5Q2xhc3NOYW1lIGRvZXNudCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJz
dCBvbmVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFz
cz1cImFcIj48L2E+PGEgY2xhc3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNv
bmRDbGFzc05hbWVHRUJDTiA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJyku
bGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9r
ZW5HRUJDTiA9IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xh
c3NOYW1lR0VCQ047XG5cdFx0fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwp
e1xuXHRcdFx0Ly8gSUUgOCByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9y
IHF1ZXJ5U2VsZWN0b3JBbGwoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5c
dFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3Rl
ZCA9IHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3Rh
clNlbGVjdHNDbG9zZWRRU0EgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2Vs
ZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9
XG5cblx0XHRcdC8vIFNhZmFyaSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRo
IG1peGVkY2FzZSBvbiBxdWlya3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5p
bm5lckhUTUwgPSAnPGEgY2xhc3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuTWl4ZWRDYXNlUVNBID0gIXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5n
dGg7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9u
dCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkg
e1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVk
PVwic2VsZWN0ZWRcIj5hPC9vcHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJv
a2VuQ2hlY2tlZFFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxl
bmd0aCA9PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMg
aW5jb3JyZWN0IHJlc3VsdHMgZm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNl
bGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEg
Y2xhc3M9XCJcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVR
U0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAh
PSAwKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBh
IGZvcm0gaGFzIGFuIGlucHV0IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMg
YSByZWZlcmVuY2UgdG8gdGhlIGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8Zm9ybSBhY3Rpb249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4n
O1xuXHRcdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxk
LmdldEF0dHJpYnV0ZSgnYWN0aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0
XHQvLyBuYXRpdmUgbWF0Y2hlc1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRp
dmVNYXRjaGVzU2VsZWN0b3IgPSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVj
dG9yIHx8Ki8gcm9vdC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2Vs
ZWN0b3I7XG5cdFx0aWYgKGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0
XHRcdC8vIGlmIG1hdGNoZXNTZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRh
eGVzIHdlIGNhbiB1c2UgaXRcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5j
YWxsKHJvb3QsICc6c2xpY2snKTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ciA9IG51bGw7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Qu
c2xpY2tfZXhwYW5kbyA9IDE7XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRm
ZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZl
YXR1cmVzLmdldFVJRCA9IHRoaXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3Zl
Q2hpbGQodGVzdE5vZGUpO1xuXHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxs
O1xuXG5cdC8vIGdldEF0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0
dXJlcy5pc0hUTUxEb2N1bWVudCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0
aW9uKG5vZGUsIG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNb
bmFtZV07XG5cdFx0aWYgKG1ldGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZh
ciBhdHRyaWJ1dGVOb2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVy
biAoYXR0cmlidXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0g
OiBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVH
ZXR0ZXJzW25hbWVdO1xuXHRcdHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDog
bm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0
ZmVhdHVyZXMuaGFzQXR0cmlidXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5o
YXNBdHRyaWJ1dGUpKSA/IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5v
ZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1
dGUpe1xuXHRcdG5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRy
ZXR1cm4gISEobm9kZSAmJiAobm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0
fTtcblxuXHQvLyBjb250YWluc1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlu
cyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIg
bmF0aXZlUm9vdENvbnRhaW5zID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRh
aW5zKSxcblx0XHRuYXRpdmVEb2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05h
dGl2ZUNvZGUoZG9jdW1lbnQuY29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5h
dGl2ZVJvb3RDb250YWlucyAmJiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNv
bnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDog
KG5hdGl2ZVJvb3RDb250YWlucyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlv
bihjb250ZXh0LCBub2RlKXtcblx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24g
ZG9jdW1lbnQuXG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBk
b2N1bWVudCkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhu
b2RlKTtcblx0fSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVu
Y3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEo
Y29udGV4dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0
aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9
PT0gY29udGV4dCkgcmV0dXJuIHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVu
dE5vZGUpKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIg
c29ydGluZ1xuXHQvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5c
blx0ZmVhdHVyZXMuZG9jdW1lbnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bikgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24g
fHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9
IDogKCdzb3VyY2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEu
c291cmNlSW5kZXggfHwgIWIuc291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNv
dXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkg
PyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRv
Y3VtZW50KSByZXR1cm4gMDtcblx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0
ZVJhbmdlKCksIGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFS
YW5nZS5zZXRTdGFydChhLCAwKTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5n
ZS5zZXRTdGFydChiLCAwKTtcblx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBh
UmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtc
blx0fSA6IG51bGw7XG5cblx0cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1
cmVzKXtcblx0XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5c
bi8vIE1haW4gTWV0aG9kXG5cbnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/Oltc
XHctXSt8XFwqKSkkLyxcblx0cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8
JycpP1xcXS8sXG5cdHFzYUZhaWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5j
dGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQg
PSB0aGlzLmZvdW5kID0gKGZpcnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAo
IWNvbnRleHQpIHJldHVybiBmb3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNv
bnRleHQgPSBjb250ZXh0LmRvY3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5k
b3cgdG8gYSBkb2N1bWVudFxuXHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZv
dW5kO1xuXG5cdC8vIHNldHVwXG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0
dW5pcXVlcyA9IHRoaXMudW5pcXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAm
JiBhcHBlbmQubGVuZ3RoKSxcblx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVU
eXBlID09IDkpO1xuXG5cdGlmICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQg
PyBjb250ZXh0IDogY29udGV4dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250
ZXh0KTtcblxuXHQvLyBhdm9pZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBl
bmQgYXJyYXlcblx0aWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1
bmlxdWVzW3RoaXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24g
Y2hlY2tzXG5cblx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVz
c2lvbiBpcyBhIHN0cmluZ1xuXG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xu
XHRcdHZhciBzaW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rv
cik7XG5cdFx0c2ltcGxlU2VsZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2
YXIgc3ltYm9sID0gc2ltcGxlU2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxl
Y3RvclsyXTtcblxuXHRcdFx0aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcq
JyAmJiB0aGlzLmJyb2tlblN0YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0
XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlm
IChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNb
dGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0
XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxE
b2N1bWVudCB8fCAhY29udGV4dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0
XHRcdFx0bm9kZSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICgh
bm9kZSkgcmV0dXJuIGZvdW5kO1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUu
Z2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2Vs
ZWN0b3JzO1xuXHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRc
dGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1
c2gobm9kZSk7XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0
aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSB8fCB0aGlzLmJyb2tlbkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBi
cmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0
dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVz
W2krK107KXtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0
VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVs
c2Uge1xuXHRcdFx0XHRcdHZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysg
U2xpY2suZXNjYXBlUmVnRXhwKG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMg
PSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0g
MDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xh
c3NOYW1lO1xuXHRcdFx0XHRcdFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChj
bGFzc05hbWUpKSkgY29udGludWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rl
O1xuXHRcdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9k
ZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IChmaXJzdCkgPyBudWxsIDogZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3Rv
cnMtb3ZlcnJpZGU+Ki9cblxuXHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0
cXVlcnlTZWxlY3RvcjogaWYgKGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlm
ICghdGhpcy5pc0hUTUxEb2N1bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVz
c2lvbl1cblx0XHRcdFx0Ly9UT0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVh
bGx5IG1peGVkIGNhc2Vcblx0XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRc
dFx0fHwgKHRoaXMuYnJva2VuQ2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVj
a2VkJykgPiAtMSlcblx0XHRcdFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYg
cmVFbXB0eUF0dHJpYnV0ZS50ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJ
c0RvY3VtZW50IC8vQWJvcnQgd2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRc
dFx0Ly8gIHRoZXJlIGFyZSBtdWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0
XHRcdFx0XHQvLyAgc2luY2Ugd2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290
ZWQgUVNBIGZvciBzaW5nbGUgZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHBy
ZXNzaW9uLmluZGV4T2YoJywnKSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlz
YWJsZVFTQVxuXHRcdFx0KSBicmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJl
c3Npb24gPSBleHByZXNzaW9uLCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRc
dGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVk
IFFTQVxuXHRcdFx0XHQvLyBjcmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVu
dElkID0gX2NvbnRleHQuZ2V0QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7
XG5cdFx0XHRcdF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0
X2V4cHJlc3Npb24gPSAnIycgKyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRc
dGNvbnRleHQgPSBfY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Np
b24pIHx8IG51bGw7XG5cdFx0XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwoX2V4cHJlc3Npb24pO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBD
YWNoZVtleHByZXNzaW9uXSA9IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0
XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0
XHRpZiAoY3VycmVudElkKSBfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtc
blx0XHRcdFx0XHRlbHNlIF9jb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0
XHRjb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRo
aXMuc3RhclNlbGVjdHNDbG9zZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7
XG5cdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1
ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBm
b3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMg
JiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0
fVxuXG5cdFx0XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJu
IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5c
dFx0cGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNl
ZC5sZW5ndGgpIHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwp
eyAvLyB0aGVyZSBpcyBubyBleHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2Ug
aWYgKGV4cHJlc3Npb24uU2xpY2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9i
amVjdFxuXHRcdHBhcnNlZCA9IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlu
cyhjb250ZXh0LmRvY3VtZW50RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4
cHJlc3Npb24gaXMgYSBub2RlXG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikg
OiBmb3VuZCA9IGV4cHJlc3Npb247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBv
dGhlciBqdW5rXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qLy8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9y
IHRoZSBudGggc2VsZWN0b3JzXG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhM
YXN0ID0ge307XG5cdHRoaXMucG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0
ID0ge307XG5cblx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3Rv
cnM+Ki9cblxuXHQvLyBpZiBhcHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmds
ZSBzZWxlY3RvciB3aXRoIG9uZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1
c2hVSURcblx0dGhpcy5wdXNoID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVu
Z3RoID09IDEgJiYgcGFyc2VkLmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5w
dXNoQXJyYXkgOiB0aGlzLnB1c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0g
W107XG5cblx0Ly8gZGVmYXVsdCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJp
bmF0b3IsIHRhZywgaWQsIGNsYXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztc
blx0dmFyIGN1cnJlbnRJdGVtcywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RC
aXQsIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChp
ID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9
IDA7IChjdXJyZW50Qml0ID0gY3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29t
YmluYXRvciA9ICdjb21iaW5hdG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYg
KCF0aGlzW2NvbWJpbmF0b3JdKSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0g
KHRoaXMuaXNYTUxEb2N1bWVudCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRv
VXBwZXJDYXNlKCk7XG5cdFx0aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NM
aXN0ICA9IGN1cnJlbnRCaXQuY2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0
LmNsYXNzZXM7XG5cdFx0YXR0cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRw
c2V1ZG9zICAgID0gY3VycmVudEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0g
KGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9
IHt9O1xuXG5cdFx0aWYgKGxhc3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztc
blx0XHRcdHRoaXMuZm91bmQgPSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlx
dWVzID0ge307XG5cdFx0XHR0aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09
IDApe1xuXHRcdFx0dGhpc1tjb21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RC
aXQgJiYgZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlm
IChmaXJzdCAmJiBsYXN0Qml0KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsg
bSA8IG47IG0rKyl7XG5cdFx0XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0
XHRpZiAoZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0g
MCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0o
Y3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBj
bGFzc0xpc3QpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1c
blxuXHQvLyBzaG91bGQgc29ydCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5
b3UgcGFzcyBtdWx0aXBsZSBleHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2Vk
LmV4cHJlc3Npb25zLmxlbmd0aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAo
Zmlyc3QpID8gKGZvdW5kWzBdIHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5s
b2NhbC51aWR4ID0gMTtcbmxvY2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5n
ZXRVSURYTUwgPSBmdW5jdGlvbihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRl
KHRoaXMudWlkayk7XG5cdGlmICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRu
b2RlLnNldEF0dHJpYnV0ZSh0aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07
XG5cbmxvY2FsLmdldFVJREhUTUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5p
cXVlTnVtYmVyIHx8IChub2RlLnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8v
IHNvcnQgYmFzZWQgb24gdGhlIHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxu
bG9jYWwuc29ydCA9IGZ1bmN0aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0
ZXIpIHJldHVybiByZXN1bHRzO1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7
XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1w
c2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNo
TlRIID0gL14oWystXT9cXGQqKT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJz
ZU5USEFyZ3VtZW50ID0gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1l
bnQubWF0Y2godGhpcy5tYXRjaE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5c
dHZhciBzcGVjaWFsID0gcGFyc2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8
fCAxO1xuXHRpZiAoYSA9PSAnLScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7
XG5cdHBhcnNlZCA9XG5cdFx0KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRc
dChzcGVjaWFsID09ICdvZGQnKVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdl
dmVuJylcdD8ge2E6IDIsIGI6IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5j
YWNoZU5USFthcmd1bWVudF0gPSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRv
ID0gZnVuY3Rpb24oY2hpbGQsIHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJu
IGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9k
ZSk7XG5cdFx0aWYgKCF0aGlzW3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRc
dHZhciBlbCA9IHBhcmVudFtjaGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xu
XHRcdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0
XHRcdFx0aWYgKGVsLm5vZGVOYW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0
aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hp
bGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5c
dFx0XHRcdFx0aWYgKGVsLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNb
cG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAo
KGVsID0gZWxbc2libGluZ10pKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1
bWVudCB8fCAnbic7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8
IHRoaXMucGFyc2VOVEhBcmd1bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVy
biBmYWxzZTtcblx0XHR2YXIgYSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNb
cG9zaXRpb25zXVt1aWRdO1xuXHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRp
ZiAoYSA+IDApe1xuXHRcdFx0aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Ug
e1xuXHRcdFx0aWYgKGIgPCBwb3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgo
cG9zIC0gYikgJSBhKSA9PSAwO1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3Jz
PiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24o
bm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlz
Lm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cykpIHRoaXMuZm91bmQucHVzaChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlv
bihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMu
bWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KSl7XG5cdFx0dGhpcy51bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChu
b2RlKTtcblx0fVxufTtcblxubG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0
b3Ipe1xuXHRpZiAodGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxl
Y3Rvcil7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rv
ci5jYWxsKG5vZGUsIHNlbGVjdG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0r
PylcXHMqXFxdL2csICdbJDE9XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9
XG5cdH1cblxuXHR2YXIgcGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlm
ICghcGFyc2VkKSByZXR1cm4gdHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3Jz
XG5cdHZhciBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRl
ciA9IDAsIGksIGN1cnJlbnRFeHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJl
c3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9u
Lmxlbmd0aCA9PSAxKXtcblx0XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0
XHRcdGlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBl
eHAudGFnIDogZXhwLnRhZy50b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAu
YXR0cmlidXRlcywgZXhwLnBzZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENv
dW50ZXIrKztcblx0XHR9XG5cdH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQu
bGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5k
b2N1bWVudCwgcGFyc2VkKSwgaXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107
KXtcblx0XHRpZiAoaXRlbSA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZh
bHNlO1xufTtcblxubG9jYWwubWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1
bWVudCl7XG5cdHZhciBwc2V1ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNb
cHNldWRvTmFtZV0pIHJldHVybiB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0
dmFyIGF0dHJpYnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4g
KGFyZ3VtZW50KSA/IGFyZ3VtZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxu
bG9jYWwubWF0Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhp
cy5pc1hNTERvY3VtZW50KSA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJD
YXNlKCk7XG5cdFx0aWYgKHRhZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSBy
ZXR1cm4gZmFsc2U7IC8vIEZpeCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdH1cblxuXHRpZiAoaWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJl
dHVybiBmYWxzZTtcblxuXHR2YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChp
ID0gY2xhc3Nlcy5sZW5ndGg7IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsICdjbGFzcycpO1xuXHRcdGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNs
cykpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJp
YnV0ZXMubGVuZ3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAo
cGFydC5vcGVyYXRvciA/ICFwYXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5r
ZXkpKSA6ICF0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtc
blx0fVxuXHRpZiAocHNldWRvcykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRc
dHBhcnQgPSBwc2V1ZG9zW2ldO1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0
LmtleSwgcGFydC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07
XG5cbnZhciBjb21iaW5hdG9ycyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBu
b2RlcywgYW55IGxldmVsXG5cblx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAo
dGhpcy5pc0hUTUxEb2N1bWVudCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRp
dGVtID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0
ZW0gJiYgbm9kZS5hbGwpIHx8ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0
dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lk
XSByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5v
ZGVcblx0XHRcdFx0XHQvLyBpZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVs
ZW1lbnQsIGVsc2UgaXQgd2lsbCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9
IG5vZGUuYWxsW2lkXTtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRc
dFx0aWYgKCFjaGlsZHJlblswXSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZv
ciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2Rl
ID0gaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAm
JiBpZE5vZGUubm9kZVZhbHVlID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0s
IHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRc
dGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5c
dFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4
dCBpcyBpbiB0aGUgZG9tIHdlIHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtp
bmcgdGhlIGdldEJ5SWQgbGFiZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJv
b3QsIG5vZGUpKSByZXR1cm47XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0
XHR9IGVsc2UgaWYgKHRoaXMuZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9k
ZSwgaXRlbSkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0
XHRcdGdldEJ5Q2xhc3M6IGlmIChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKGNsYXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGls
ZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBu
dWxsLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRnZXRCeVRhZzoge1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKHRhZyk7XG5cdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBi
cmVhayBnZXRCeVRhZztcblx0XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51
bGw7XG5cdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChp
dGVtLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0Jz4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gZGlyZWN0IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENo
aWxkKSkgZG8ge1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChu
b2RlID0gbm9kZS5uZXh0U2libGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9
PSAxKXtcblx0XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBj
aGlsZFxuXHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0J34nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNp
YmxpbmcpKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0
dmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1
aWRdKSBicmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHR9XG5cdH0sXG5cblx0JysrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xu
XHRcdHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJs
aW5ncyBhbmQgcHJldmlvdXMgc2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21i
aW5hdG9yOiF+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyEnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1
dGVzLCBwc2V1ZG9zKXsgLy8gYWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50
KSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdH0sXG5cblx0JyE+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmli
dXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0g
bm9kZS5wYXJlbnROb2RlO1xuXHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5c
blx0JyErJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZp
b3VzU2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5v
ZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7
XG5cdFx0fVxuXHR9LFxuXG5cdCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFz
dENoaWxkO1xuXHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGVsc2UgdGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2li
bGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0
aWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5n
ZXRVSUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRc
dFx0dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xu
XG5mb3IgKHZhciBjIGluIGNvbWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBj
b21iaW5hdG9yc1tjXTtcblxudmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9y
cz4qL1xuXG5cdCdlbXB0eSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUu
Zmlyc3RDaGlsZDtcblx0XHRyZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAm
JiAhKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0
fSxcblxuXHQnbm90JzogZnVuY3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0
aGlzLm1hdGNoTm9kZShub2RlLCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBm
dW5jdGlvbihub2RlLCB0ZXh0KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUu
dGV4dENvbnRlbnQgfHwgJycpLmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3Qt
Y2hpbGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3Vz
U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1
cm4gdHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdo
aWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSBy
ZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBm
dW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0g
cHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFs
c2U7XG5cdFx0dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNp
YmxpbmcpKSBpZiAobmV4dC5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJu
IHRydWU7XG5cdH0sXG5cblx0Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNo
aWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywg
J3Bvc05USCcpLFxuXG5cdCdudGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygn
bGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1v
Zi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5n
JywgJ3Bvc05USFR5cGUnLCB0cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNy
ZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBl
TGFzdCcsIHRydWUpLFxuXG5cdCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRy
ZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xu
XHR9LFxuXG5cdCdldmVuJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVk
bzpudGgtY2hpbGQnXShub2RlLCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xu
XHR9LFxuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNl
dWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5c
dFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2Rl
LnByZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4g
ZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUg
KChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1l
KSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlw
ZSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2Rl
Lm5vZGVOYW1lO1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYg
KHByZXYubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9
IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5v
ZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0s
XG5cblx0Lyo8L29mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1
ZG9zXG5cblx0J2VuYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlz
YWJsZWQ7XG5cdH0sXG5cblx0J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
IG5vZGUuZGlzYWJsZWQ7XG5cdH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0
XHRyZXR1cm4gbm9kZS5jaGVja2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3Vz
JzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhp
cy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50
eXBlIHx8IHRoaXMuaGFzQXR0cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQn
cm9vdCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtc
blx0fSxcblxuXHQnc2VsZWN0ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5z
ZWxlY3RlZDtcblx0fVxuXG5cdC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZh
ciBwIGluIHBzZXVkb3MpIGxvY2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8g
YXR0cmlidXRlcyBtZXRob2RzXG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmli
dXRlR2V0dGVycyA9IHtcblxuXHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1s
Rm9yJyBpbiB0aGlzKSA/IHRoaXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtc
blx0fSxcblxuXHQnaHJlZic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhp
cykgPyB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hy
ZWYnKTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5z
dHlsZSkgPyB0aGlzLnN0eWxlLmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtc
blx0fSxcblxuXHQndGFiaW5kZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2Rl
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVW
YWx1ZSA6IG51bGw7XG5cdH0sXG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldEF0dHJpYnV0ZSgndHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlv
bigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhM
ZW5ndGgnKTtcblx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVj
aWZpZWQpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0
dHJpYnV0ZUdldHRlcnMuTUFYTEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBh
dHRyaWJ1dGVHZXR0ZXJzLm1heGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9j
YWwuU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcn
O1xuXG4vLyBTbGljayBmaW5kZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwg
ZXhwcmVzc2lvbiwgYXBwZW5kKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBhcHBlbmQpO1xufTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4
cHJlc3Npb24pe1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51
bGwsIHRydWUpO1xufTtcblxuLy8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5j
b250YWlucyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KGNvbnRhaW5lcik7XG5cdHJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xu
fTtcblxuLy8gU2xpY2sgYXR0cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBm
dW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVy
biBsb2NhbC5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1
dGUgPSBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5c
dHJldHVybiBsb2NhbC5oYXNBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBt
YXRjaGVyXG5cblNsaWNrLm1hdGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAo
IShub2RlICYmIHNlbGVjdG9yKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNl
bGVjdG9yID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7
XG5cdHJldHVybiBsb2NhbC5tYXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xp
Y2sgYXR0cmlidXRlIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1
bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xu
XHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0
aW9uKG5hbWUpe1xuXHRyZXR1cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5c
bi8vIFNsaWNrIHBzZXVkbyBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlv
bihuYW1lLCBmbil7XG5cdGxvY2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwg
YXJndW1lbnQpe1xuXHRcdHJldHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0
cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtc
blx0dmFyIHBzZXVkbyA9IGxvY2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSBy
ZXR1cm4gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBh
cmd1bWVudCk7XG5cdH07XG5cdHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVz
IGFjY2Vzc29yXG5cblNsaWNrLm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxv
Y2FsLm92ZXJyaWRlKHJlZ2V4cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlz
WE1MID0gbG9jYWwuaXNYTUw7XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJl
dHVybiBsb2NhbC5nZXRVSURIVE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlz
LlNsaWNrID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRz
ICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypc
bi0tLVxuXG5uYW1lOiBFbGVtZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1w
b3J0YW50IGl0ZW1zIGluIE1vb1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0
aGUgZG9sbGFycyBmdW5jdGlvbiwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGlt
ZS1zYXZlciBtZXRob2RzIHRvIGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRz
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERv
Y3VtZW50LCBBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBh
cnNlciwgU2xpY2suRmluZGVyXVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAk
JCwgSUZyYW1lLCBTZWxlY3RvcnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVs
ZW1lbnQgPSBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVu
dC5Db25zdHJ1Y3RvcnNbdGFnXTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0
b3IocHJvcHMpO1xuXHRpZiAodHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50
LmlkKHRhZykuc2V0KHByb3BzKTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlm
ICghKC9eW1xcdy1dKyQvKS50ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJz
ZSh0YWcpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykg
PyAnZGl2JyA6IHBhcnNlZC50YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBu
dWxsKSBwcm9wcy5pZCA9IHBhcnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2Vk
LmF0dHJpYnV0ZXM7XG5cdFx0aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBs
ID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0
ZXNbaV07XG5cdFx0XHRpZiAocHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5c
dFx0XHRpZiAoYXR0ci52YWx1ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9w
c1thdHRyLmtleV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYg
IWF0dHIub3BlcmF0b3IpIHByb3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYg
KHBhcnNlZC5jbGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNz
J10gPSBwYXJzZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVu
dC5uZXdFbGVtZW50KHRhZywgcHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtc
blx0RWxlbWVudC5wcm90b3R5cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJ
RTggYW5kIElFOSByZXF1aXJlIHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2Zp
cmVFdmVudCA9IChmdW5jdGlvbihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBl
LCBldmVudCl7XG5cdFx0XHRyZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQp
O1xuXHRcdH07XG5cdH0pKEVsZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBU
eXBlKCdFbGVtZW50JywgRWxlbWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJy
YXkucHJvdG90eXBlW25hbWVdKSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFt
ZV0gPSBmdW5jdGlvbigpe1xuXHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMs
IGVsZW1lbnRzID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0
c1tpXSA9IGVsZW1lbnRbbmFtZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50
cyA9IChlbGVtZW50cyAmJiB0eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5c
dH07XG5cblx0RWxlbWVudHMuaW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVs
ZW1lbnQpe1xuXHRFbGVtZW50LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlw
ZSA9IHtcblx0XHQnJGNvbnN0cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0
aW9uLmNvbnZlcnQoJ2VsZW1lbnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihm
dW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0
aG9kO1xuXHR9KTtcbn1cblxuRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJ
RnJhbWUgPSBuZXcgVHlwZSgnSUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFy
cmF5LmxpbmsoYXJndW1lbnRzLCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0
XHRpZnJhbWU6IGZ1bmN0aW9uKG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0
XHR9XG5cdH0pO1xuXG5cdHZhciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJh
bWU7XG5cdGlmIChwYXJhbXMuaWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZy
YW1lKTtcblx0dmFyIG9ubG9hZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRl
bGV0ZSBwcm9wcy5vbmxvYWQ7XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwg
cHJvcHMubmFtZSwgaWZyYW1lID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1l
XycgKyBTdHJpbmcudW5pcXVlSUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChp
ZnJhbWUgfHwgJ2lmcmFtZScsIHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtc
blx0XHRvbmxvYWQuY2FsbChpZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdp
bmRvdy5mcmFtZXNbcHJvcHMuaWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVu
ZXIoJ2xvYWQnLCBvbkxvYWQpO1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50
cyA9IHRoaXMuRWxlbWVudHMgPSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rl
cy5sZW5ndGgpe1xuXHRcdHZhciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9
IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9k
ZSk7XG5cdFx0XHRpZiAoIXVuaXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRy
dWU7XG5cdFx0XHRcdHRoaXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5c
bkVsZW1lbnRzLnByb3RvdHlwZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJy
YXk7XG5cbm5ldyBUeXBlKCdFbGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZp
bHRlcjogZnVuY3Rpb24oZmlsdGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRo
aXM7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihm
aWx0ZXIpID09ICdzdHJpbmcnKSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0u
bWF0Y2goZmlsdGVyKTtcblx0XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdHB1c2g6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkg
dGhpc1tsZW5ndGgrK10gPSBpdGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0g
bGVuZ3RoKTtcblx0fS5wcm90ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgaXRlbXMgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0p
O1xuXHRcdFx0aWYgKGl0ZW0pIGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBB
cnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgp
LFxuXG5cdGNvbmNhdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxl
bWVudHModGhpcyk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBp
IDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5
cGUuaXNFbnVtZXJhYmxlKGl0ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRl
bHNlIG5ld0VsZW1lbnRzLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50
cztcblx0fS5wcm90ZWN0KCksXG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0
XHRmb3IgKHZhciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlz
LnB1c2goY29sbGVjdGlvbltpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxu
XG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRo
aXNbLS10aGlzLmxlbmd0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0p
O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnBy
b3RvdHlwZS5zcGxpY2UsIG9iamVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxu
c3BsaWNlLmNhbGwob2JqZWN0LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMu
aW1wbGVtZW50KCdzcGxpY2UnLCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5n
dGg7XG5cdHZhciByZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hp
bGUgKGxlbmd0aCA+PSB0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1
cm4gcmVzdWx0O1xufS5wcm90ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9u
KG1ldGhvZCwgbmFtZSl7XG5cdEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7
XG5cbkFycmF5Lm1pcnJvcihFbGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxl
bWVudEFjY2VwdHNIVE1MO1xudHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBj
YXRjaCAoZSl7fVxuXG52YXIgZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVy
biAoJycgKyBodG1sKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVv
dDsnKTtcbn07XG4vKjwvbHRJRTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENh
bm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0g
KGZ1bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScp
LFxuXHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0
VGVzaW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0g
Y2F0Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3Vt
ZW50LmltcGxlbWVudCh7XG5cblx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5c
dFx0aWYgKHByb3BzKXtcblx0XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRl
ZmF1bHRDaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAn
Y2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVs
bCkgcHJvcHMudmFsdWUgPSAnb24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhl
IHR5cGUgdG8gYmUgc2V0IGJlZm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRc
blx0XHRcdGlmICghY2FuQ2hhbmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRc
dFx0dmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5c
dFx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0
XHRcdFx0aWYgKHByb3BzLnR5cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4g
dGhpcy5pZChzdHlsZUVsZW1lbnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTk+Ki9cblx0XHRcdC8qPGx0SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBl
IHByb3BlcnRpZXMgaW4gSUUgPCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1M
KXtcblx0XHRcdFx0dGFnID0gJzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFn
ICs9ICcgbmFtZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0
XHRpZiAocHJvcHMudHlwZSkgdGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMu
dHlwZSkgKyAnXCInO1xuXHRcdFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMu
bmFtZTtcblx0XHRcdFx0ZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJ
RTg+Ki9cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykp
LnNldChwcm9wcyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGlj
ay51aWRPZih3aW5kb3cpO1xuU2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBs
ZW1lbnQoe1xuXG5cdG5ld1RleHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhp
cy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHRoaXMud2luZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRc
dHZhciB0eXBlcyA9IHtcblxuXHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mp
e1xuXHRcdFx0XHRpZCA9IFNsaWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9n
LCAnXFxcXCQxJykpO1xuXHRcdFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5v
Y2FzaCkgOiBudWxsO1xuXHRcdFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5v
Y2FzaCl7XG5cdFx0XHRcdFNsaWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYg
IWVsLiRmYW1pbHkgJiYgISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkp
e1xuXHRcdFx0XHRcdHZhciBmaXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8g
d3JhcHBpbmcgbmVlZGVkIGluIElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJl
RXZlbnQgPSBmdW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2
ZW50KHR5cGUsIGV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQo
ZWwsIEVsZW1lbnQuUHJvdG90eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5c
dFx0XHR9LFxuXG5cdFx0XHRvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRc
dFx0XHRpZiAob2JqLnRvRWxlbWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVu
dChkb2MpLCBub2Nhc2gpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07
XG5cblx0XHR0eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cg
PSB0eXBlcy5kb2N1bWVudCA9IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5c
dFx0fTtcblxuXHRcdHJldHVybiBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYg
KGVsICYmIGVsLiRmYW1pbHkgJiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2
YXIgdHlwZSA9IHR5cGVPZihlbCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVz
W3R5cGVdKGVsLCBub2Nhc2gsIGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0
fSkoKVxuXG59KTtcblxuaWYgKHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQn
LCBmdW5jdGlvbihlbCwgbmMpe1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRv
Y3VtZW50KTtcbn0pO1xuXG5XaW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwg
RWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwg
bmV3IEVsZW1lbnRzKTtcblx0fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9u
KXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7
XG5cdH1cblxufSk7XG5cbnZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVu
dCl7XG5cdHJldHVybiBTbGljay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAo
IWRvY3VtZW50LmNvbnRhaW5zKSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQo
Y29udGFpbnMpO1xuXG5cblxuLy8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9y
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikg
cmV0dXJuIGNvbWJpbmF0b3I7XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5w
YXJzZShleHByZXNzaW9uKSk7XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHBy
ZXNzaW9ucztcblx0Zm9yICh2YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRl
eHByZXNzaW9uc1tpXVswXS5jb21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhw
cmVzc2lvbjtcbn07XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQ
cmV2aW91czogJyF+Jyxcblx0Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3Is
IG1ldGhvZCl7XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lv
bil7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Np
b24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRB
bGxOZXh0OiAnficsXG5cdGdldEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+
Jyxcblx0Z2V0Q2hpbGRyZW46ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0
b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxl
bWVudCh7XG5cblx0Z2V0Rmlyc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBk
b2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9u
LCAnPicpKVswXSk7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5c
dFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9y
KGV4cHJlc3Npb24sICc+JykpLmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5c
dGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7
XG5cdH0sXG5cblx0Z2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9j
dW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykv
ZywgJ1xcXFwkMScpKSk7XG5cdH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xu
XHRcdHJldHVybiAhZXhwcmVzc2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtc
blx0fVxuXG59KTtcblxuXG5cbmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVu
dCgnJCQnLCBmdW5jdGlvbihzZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp
e1xuXHRcdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFy
Y2godGhpcy5kb2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAo
VHlwZS5pc0VudW1lcmFibGUoc2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9y
KTtcblx0fVxuXHRyZXR1cm4gbmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5z
ZXJ0ZXJzXG5cbnZhciBpbnNlcnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0
LCBlbGVtZW50KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlm
IChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5c
blx0YWZ0ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShj
b250ZXh0LCBlbGVtZW50Lm5leHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9u
KGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5c
dH0sXG5cblx0dG9wOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmlu
c2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmlu
c2VydGVycy5pbnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkg
LyBzZXRQcm9wZXJ0eVxuXG52YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVy
cyA9IHt9O1xuXG4vLyBwcm9wZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5m
b3JFYWNoKFtcblx0J3R5cGUnLCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScs
ICdjZWxsUGFkZGluZycsICdjZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVy
JywgJ3Jvd1NwYW4nLCAndGFiSW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkp
e1xuXHRwcm9wZXJ0aWVzW3Byb3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtc
blxucHJvcGVydGllcy5odG1sID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJU
ZXh0JzogJ3RleHRDb250ZW50JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rp
b24ocmVhbCwga2V5KXtcblx0cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2
YWx1ZSl7XG5cdFx0bm9kZVtyZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNb
a2V5XSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7
XG5cbi8qPGx0SUU5PiovXG5wcm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRy
ZXR1cm4gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0g
J3N0eWxlJykgbm9kZS5zZXQoJ2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRp
ZXMudGV4dF0gPSB2YWx1ZTtcblx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJv
cGVydHlHZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHJldHVybiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5p
bm5lckhUTUwgOiBnZXR0ZXIobm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7
XG4vKjwvbHRJRTk+Ki9cblxuLy8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFj
dCcsICdub3dyYXAnLCAnaXNtYXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxu
XHQnZGlzYWJsZWQnLCAncmVhZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNp
emUnLFxuXHQnZGVmZXInLCAnZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xz
JywgJ2F1dG9wbGF5Jyxcblx0J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5
LmZvckVhY2goYm9vbHMsIGZ1bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93
ZXJDYXNlKCk7XG5cdGJvb2xlYW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1ts
b3dlcl0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7
XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRy
ZXR1cm4gISFub2RlW2Jvb2xdO1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2Jq
ZWN0LmFwcGVuZChwcm9wZXJ0eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2Rl
LCB2YWx1ZSl7XG5cdFx0KCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAo
dmFsdWUgfHwgJycpIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxu
XG5cdCdmb3InOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2Rl
KSA/IG5vZGUuaHRtbEZvciA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVl
KTtcblx0fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUu
c3R5bGUpID8gbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgn
c3R5bGUnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUp
e1xuXHRcdG5vZGUudmFsdWUgPSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5c
bn0pO1xuXG5wcm9wZXJ0eUdldHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0
dXJuICgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2Rl
LmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFk
b25seSBhbmQgdGhyb3dzXG50cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31c
bmlmIChlbC50eXBlICE9ICdidXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9u
KG5vZGUsIHZhbHVlKXtcblx0bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xu
ZWwgPSBudWxsO1xuLyogPC93ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4v
LyAjMjQ3OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNo
YW5nZVN0eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2Lmlu
bmVySFRNTCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYu
aW5uZXJIVE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9s
dElFOT4qL1xuXG52YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2
b2xhdGlsZUlucHV0VmFsdWUsIGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQu
dmFsdWUgPSAndCc7XG5pbnB1dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUg
PSBpbnB1dC52YWx1ZSAhPSAndCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBB
cmd1bWVudFwiIHdoZW4gdHJ5aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0
aW5wdXQudmFsdWUgPSAnJztcblx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRT
dXBwb3J0ID0gaW5wdXQudHlwZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9
IG51bGw7XG5cbmlmICh2b2xhdGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBw
cm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRc
dHZhciB2YWx1ZSA9IG5vZGUudmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2Rl
LnZhbHVlID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0
UHJvcGVydHksIHNldFByb3BlcnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dl
dEF0dHJpYnV0ZSA9IChmdW5jdGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7
XG5cdHJldHVybiAoZGl2LmdldEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xu
fSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAo
ZnVuY3Rpb24odGVzdCl7XG5cdHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9
XCJzaG91bGRfZml4XCIgdmFsdWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0
dXJuIHRlc3QuY2xvbmVOb2RlKHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0g
MTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5c
bnZhciBoYXNDbGFzc0xpc3QgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNz
TGlzdDtcblxudmFyIGNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NO
YW1lcyA9IChjbGFzc05hbWUgfHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9
O1xuXHRyZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRp
ZiAoY2xhc3NOYW1lICE9PSAnJyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVl
c1tjbGFzc05hbWVdID0gY2xhc3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlz
dCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52
YXIgcmVtb3ZlRnJvbUNsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlz
dC5yZW1vdmUobmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0
ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIo
dGhpcywgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2
YXIgYXR0cmlidXRlV2hpdGVMaXN0O1xuXHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBh
dHRyaWJ1dGVXaGl0ZUxpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywg
e30pO1xuXHRcdFx0LyogPC9sdElFOT4gKi9cblxuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpe1xu
XHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGRlbGV0ZSBhdHRyaWJ1dGVXaGl0
ZUxpc3RbbmFtZV07XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRc
dFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0
SUU5PiAqL1xuXHRcdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRl
TGlzdFtuYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0
dHJpYnV0ZXMpe1xuXHRcdGZvciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNl
dFByb3BlcnR5KGF0dHJpYnV0ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdl
dHRlciA9IHByb3BlcnR5R2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0
ZXIpIHJldHVybiBnZXR0ZXIodGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xs
dXRlc0dldEF0dHJpYnV0ZSl7XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9k
ZShuYW1lKSwgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdo
aXRlTGlzdCcsIHt9KTtcblx0XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAo
YXR0ci5leHBhbmRvICYmICFhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIg
b3V0ZXIgPSB0aGlzLm91dGVySFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3Blbmlu
ZyB0YWcgYW5kIGZpbmQgbWVudGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0
ZXIuc3Vic3RyKDAsIG91dGVyLnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSku
aW5kZXhPZihuYW1lKSA8IDApIHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVXaGl0ZUxp
c3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dHZhciByZXN1bHQgPSBTbGljay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJu
ICghcmVzdWx0ICYmICFTbGljay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJl
c3VsdDtcblx0fSxcblxuXHRnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdz
ID0gQXJyYXkuY29udmVydChhcmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdl
dFByb3BlcnR5LCB0aGlzKS5hc3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVy
dHk6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51
bGwpO1xuXHR9LFxuXG5cdHJlbW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXku
ZWFjaChhcmd1bWVudHMsIHRoaXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9w
ZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVy
dHkuc2V0KSA/IHByb3BlcnR5LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVy
dHkocHJvcCwgdmFsdWUpO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlv
bihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5c
dFx0cmV0dXJuIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5
KHRoaXMpIDogdGhpcy5nZXRQcm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxu
XG5cdGVyYXNlOiBmdW5jdGlvbihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlBy
b3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3Bl
cnR5LmVyYXNlLmFwcGx5KHRoaXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24o
Y2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1l
KTtcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5j
bGFzc05hbWUpLmNvbnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0Ns
YXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZv
ckVhY2goYWRkVG9DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVu
Y3Rpb24oY2xhc3NOYW1lKXtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1l
ICsgJyAnICsgdGhpcy5jbGFzc05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRyZW1vdmVDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFy
IGNsYXNzTmFtZXMgPSBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNz
TmFtZSkuZm9yRWFjaChjbGFzc05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNs
YXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9y
Y2UgPT0gbnVsbCkgZm9yY2UgPSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVy
biAoZm9yY2UpID8gdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhj
bGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQg
PSB0aGlzLCBmcmFnbWVudCwgZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJh
Z21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
aWQoZWxlbWVudHNbaV0sIHRydWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRD
aGlsZChlbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hp
bGQoZnJhZ21lbnQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDog
ZnVuY3Rpb24odGV4dCwgd2hlcmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1
bWVudCgpLm5ld1RleHROb2RlKHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rp
b24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50
LmlkKGVsLCB0cnVlKSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0
OiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10o
dGhpcywgZG9jdW1lbnQuaWQoZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRyZXBsYWNlczogZnVuY3Rpb24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUp
O1xuXHRcdGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHR3cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRv
Y3VtZW50LmlkKGVsLCB0cnVlKTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihl
bCwgd2hlcmUpO1xuXHR9LFxuXG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
c2VsZWN0ZWRJbmRleDsgLy8gU2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhB
cnJheS5jb252ZXJ0KHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0
XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3Ry
aW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0
RWxlbWVudHMoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5c
dFx0XHR2YXIgdHlwZSA9IGVsLnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJs
ZWQgfHwgdHlwZSA9PSAnc3VibWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmls
ZScgfHwgdHlwZSA9PSAnaW1hZ2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5n
ZXQoJ3RhZycpID09ICdzZWxlY3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9w
dCl7XG5cdFx0XHRcdC8vIElFXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgn
dmFsdWUnKTtcblx0XHRcdH0pIDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2ti
b3gnKSAmJiAhZWwuY2hlY2tlZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRB
cnJheS5jb252ZXJ0KHZhbHVlKS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBl
b2YgdmFsICE9ICd1bmRlZmluZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVu
dChlbC5uYW1lKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xu
XHRcdH0pO1xuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5c
blxuLy8gYXBwZW5kSFRNTFxuXG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdi
ZWZvcmVCZWdpbicsXG5cdGFmdGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQn
LFxuXHR0b3A6ICdhZnRlckJlZ2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoJ2FwcGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0
aGlzLmluc2VydEFkamFjZW50SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSdd
LCBodG1sKTtcblx0cmV0dXJuIHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2
YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVu
ID0gdGVtcC5jaGlsZE5vZGVzLFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5c
dGlmICghZnJhZ21lbnQpIHJldHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7
XG5cdFx0ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2Vy
dGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztc
bn0pO1xuXG52YXIgY29sbGVjdGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1
bmN0aW9uKHVpZCl7XG5cdHJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7
fSkpO1xufTtcblxudmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVt
LnVuaXF1ZU51bWJlcjtcblx0aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50
cygpO1xuXHRpZiAoaXRlbS5jbGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7
XG5cdGlmICh1aWQgIT0gbnVsbCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3VpZF07XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVBy
b3BzID0ge2lucHV0OiAnY2hlY2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2
YWx1ZSd9O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtc
blx0XHR2YXIgY2hpbGRyZW4gPSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicp
O1xuXHRcdEFycmF5LmVhY2goY2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2Uo
dGhpcyk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5c
dFx0QXJyYXkuY29udmVydCh0aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiAodGhpcy5wYXJlbnROb2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlz
KSA6IHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xu
XHRcdGNvbnRlbnRzID0gY29udGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMu
Y2xvbmVOb2RlKGNvbnRlbnRzKSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRc
dGlmIChjb250ZW50cyl7XG5cdFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0
aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBj
ZS5sZW5ndGg7IGktLTspe1xuXHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ld
O1xuXHRcdFx0aWYgKCFrZWVwaWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0
Lyo8bHRJRTk+Ki9cblx0XHRcdGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5v
ZGUuY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1l
bnQpO1xuXHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0
XHRcdGlmIChub2RlLm9wdGlvbnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywg
ZW8gPSBlbGVtZW50Lm9wdGlvbnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsg
ai0tOykgbm9bal0uc2VsZWN0ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0
fVxuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50
LnRhZ05hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3Bd
KSBub2RlW3Byb3BdID0gZWxlbWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xu
XHRcdGlmIChoYXNDbG9uZUJ1Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnb2JqZWN0JyksIHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0
Jyk7XG5cdFx0XHRmb3IgKGkgPSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRv
W2ldLm91dGVySFRNTDtcblx0XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3Vt
ZW50LmlkKGNsb25lKTtcblx0fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRd
Lmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBm
bil7XG5cdFx0aWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIpe1xuXHRcdFx0Y29sbGVjdGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxu
XHRcdGlmICh0aGlzLmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBl
LCBmbiwgISFhcmd1bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsg
dHlwZSwgZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBm
dW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxz
ZSB0aGlzLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0cmV0cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3Rv
cmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtc
blx0XHRpZiAoZGZsdCAhPSBudWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJv
cGVydHldID0gZGZsdDtcblx0XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5c
dH0sXG5cblx0c3RvcmU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3Jh
Z2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFs
dWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9w
ZXJ0eSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRl
bGV0ZSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
Lyo8bHRJRTk+Ki9cbmlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKXtcblx0dmFyIGdjID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0
ZWQsIGNsZWFuKTtcblx0XHRpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFn
ZSgpO1xuXHRcdHdpbmRvdy5yZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3
aW5kb3cuYWRkTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVt
ZW50LlByb3BlcnRpZXMgPSB7fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtc
blxuXHRzZXQ6IGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHls
ZTtcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3Nz
VGV4dDtcblx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1Rl
eHQgPSAnJztcblx0fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5c
dH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bihodG1sKXtcblx0XHRpZiAoaHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAo
dHlwZU9mKGh0bWwpID09ICdhcnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAodGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwp
IHRoaXMuc3R5bGVTaGVldC5jc3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3Ro
aXMuaW5uZXJIVE1MID0gaHRtbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhp
cy5zZXQoJ2h0bWwnLCAnJyk7XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50
cyA9IHRydWUsIHN1cHBvcnRzVGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJI
VE1MID0gdHJ1ZTtcblxuLyo8bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBo
dHRwOi8vamRiYXJ0bGV0dC5jb20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpO1xudmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2Pjwv
bmF2Pic7XG5zdXBwb3J0c0hUTUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09
IDEpO1xuaWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFy
dGljbGUgYXNpZGUgYXVkaW8gY2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1
cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNl
Y3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAo
bC0tKSBmcmFnbWVudC5jcmVhdGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8q
PC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9u
LmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgndGFibGUnKTtcblx0dGFibGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5c
dHJldHVybiB0cnVlO1xufSk7XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0cicpLCBodG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1s
O1xuc3VwcG9ydHNUUklubmVySFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51
bGw7XG4vKjwvbHRGRjQ+Ki9cblxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBw
b3J0c1RSSW5uZXJIVE1MIHx8ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQu
UHJvcGVydGllcy5odG1sLnNldCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0
aW9ucyA9IHtcblx0XHRcdHRhYmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRc
dHNlbGVjdDogWzEsICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwg
Jzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0
YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0
XHR0cmFuc2xhdGlvbnMudGhlYWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMu
dGJvZHk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5Piov
XG5cdFx0XHRpZiAodGhpcy5zdHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7
XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMu
Z2V0KCd0YWcnKV07XG5cdFx0XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykg
d3JhcCA9IFswLCAnJywgJyddO1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhp
cywgaHRtbCk7XG5cblx0XHRcdHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3Vw
cG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRc
dHdyYXBwZXIuaW5uZXJIVE1MID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5q
b2luKCcnKTtcblx0XHRcdHdoaWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGls
ZDtcblx0XHRcdHRoaXMuZW1wdHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRp
ZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7
XG5cdFx0XHR3cmFwcGVyID0gbnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGll
cy5odG1sLnNldCk7XG59XG4vKjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8
c2VsZWN0PjxvcHRpb24+czwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJz
dENoaWxkLnZhbHVlICE9ICdzJykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0
aWYgKHRhZyAhPSAnc2VsZWN0JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFs
dWUpO1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0
dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5s
ZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0
ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1
ZSA9IChhdHRyICYmIGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQo
J3RleHQnKTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24u
c2VsZWN0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIG9wdGlvbiA9IHRoaXMsIHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRh
ZyAhPSAnc2VsZWN0JyAmJiB0YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5
KCd2YWx1ZScpO1xuXG5cdFx0aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlv
bi5nZXRTZWxlY3RlZCgpWzBdKSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24u
Z2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVj
aWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50
ZXN0Rm9ybSA9IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3Bl
cnRpZXMuaWQgPSB7XG5cdHNldDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdl
dEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiB0aGlzLmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztc
blx0fVxufTtcbi8qPC9JRT4qL1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQg
b2JqZWN0IGNyb3NzLWJyb3dzZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmpl
Y3RdXG5cbnByb3ZpZGVzOiBFdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIg
X2tleXMgPSB7fTtcbnZhciBub3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xu
XHR2YXIgbm9ybWFsaXplZDtcblx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6
ZWQgPSBldmVudC53aGVlbERlbHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIw
IDogZXZlbnQud2hlZWxEZWx0YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQg
PSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0o
cmF3QW1vdW50ICUgMyA9PSAwID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0
fVxuXHRyZXR1cm4gbm9ybWFsaXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZl
bnQgPSBuZXcgVHlwZSgnRE9NRXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3
aW4pIHdpbiA9IHdpbmRvdztcblx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChl
dmVudC4kZXh0ZW5kZWQpIHJldHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0
aGlzLiRleHRlbmRlZCA9IHRydWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0
dGhpcy5jb250cm9sID0gZXZlbnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7
XG5cdHRoaXMubWV0YSA9IGV2ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0g
ZXZlbnQudHlwZTtcblx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVt
ZW50O1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0
YXJnZXQucGFyZW50Tm9kZTtcblx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xu
XG5cdGlmICh0eXBlLmluZGV4T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5j
b2RlID0gKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlm
dCB8fCB0eXBlICE9ICdrZXlwcmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYg
KHR5cGUgPT0gJ2tleWRvd24nIHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+
IDExMSAmJiBjb2RlIDwgMTI0KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRc
dGVsc2UgaWYgKGNvZGUgPiA5NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtc
blx0XHR9XG5cdFx0aWYgKHRoaXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlKS50b0xvd2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNr
JyB8fCB0eXBlID09ICdkYmxjbGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUg
PT0gJ3doZWVsJyB8fCB0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdt
b3VzZScpID09IDApe1xuXHRcdHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFk
b2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0
bWwgOiBkb2MuYm9keTtcblx0XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVgg
IT0gbnVsbCkgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxc
blx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xp
ZW50WSArIGRvYy5zY3JvbGxUb3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0
eDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQg
OiBldmVudC5jbGllbnRYLFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQu
cGFnZVkgLSB3aW4ucGFnZVlPZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAo
dHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdt
b3VzZXdoZWVsJykgdGhpcy53aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRc
dHRoaXMucmlnaHRDbGljayA9IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAy
KTtcblx0XHRpZiAodHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwg
dHlwZSA9PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFy
IG92ZXJUYXJnZXQgPSB0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXIn
O1xuXHRcdFx0dmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVy
VGFyZ2V0ID8gJ2Zyb20nIDogJ3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0
ZWQgJiYgcmVsYXRlZC5ub2RlVHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2Rl
O1xuXHRcdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0
fVxuXHR9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhP
ZignZ2VzdHVyZScpID09IDApe1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtc
blx0XHR0aGlzLnNjYWxlID0gZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0g
ZXZlbnQudGFyZ2V0VG91Y2hlcztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hh
bmdlZFRvdWNoZXM7XG5cdFx0dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3Vj
aGVzO1xuXHRcdGlmICh0b3VjaGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0g
dG91Y2hlc1swXTtcblx0XHRcdHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gu
cGFnZVl9O1xuXHRcdFx0dGhpcy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2gu
Y2xpZW50WX07XG5cdFx0fVxuXHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQg
PSB7fTtcblx0aWYgKCF0aGlzLnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50
LmltcGxlbWVudCh7XG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2
ZW50RGVmYXVsdCgpLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlv
bjogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMu
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJs
ZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1
bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQu
cHJldmVudERlZmF1bHQoKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxz
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0g
ZnVuY3Rpb24oY29kZSwga2V5KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlz
O1xufTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9h
ZFNldHRlcih0cnVlKTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0
MCc6ICdkb3duJywgJzM3JzogJ2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywg
JzMyJzogJ3NwYWNlJywgJzgnOiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2Rl
bGV0ZScsICcxMyc6ICdlbnRlcidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxu
bmFtZTogRWxlbWVudC5FdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRo
b2RzIGZvciBkZWFsaW5nIHdpdGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3Vz
ZWVudGVyIGFuZCBtb3VzZWxlYXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBF
dmVudF1cblxucHJvdmlkZXM6IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdHRoaXMuYWRkRXZlbnRzKGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9j
dW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0
XHRpZiAoIWV2ZW50c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtd
fTtcblx0XHRpZiAoZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztc
blx0XHRldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBl
LFxuXHRcdFx0Y3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24g
PSBmbixcblx0XHRcdHNlbGYgPSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1
c3RvbS5vbkFkZCkgY3VzdG9tLm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYg
KGN1c3RvbS5jb25kaXRpb24pe1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkp
IHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0
XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5j
dGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2
YXIgZGVmbiA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9
O1xuXHRcdHZhciBuYXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtc
blx0XHRpZiAobmF0aXZlRXZlbnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRc
dFx0XHRkZWZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2
ZW50KGV2ZW50LCBzZWxmLmdldFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNh
bGwoc2VsZiwgZXZlbnQpID09PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRc
dFx0fVxuXHRcdFx0dGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJd
KTtcblx0XHR9XG5cdFx0ZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0
dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8
ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVd
O1xuXHRcdHZhciBpbmRleCA9IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXgg
PT0gLTEpIHJldHVybiB0aGlzO1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtc
blx0XHRkZWxldGUgbGlzdC5rZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5k
ZXhdO1xuXHRcdHZhciBjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3Vz
dG9tKXtcblx0XHRcdGlmIChjdXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRo
aXMsIGZuLCB0eXBlKTtcblx0XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNv
bnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAo
RWxlbWVudC5OYXRpdmVFdmVudHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2
YWx1ZSwgYXJndW1lbnRzWzJdKSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlv
bihldmVudHMpe1xuXHRcdGZvciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChl
dmVudCwgZXZlbnRzW2V2ZW50XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3Zl
RXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2Yo
ZXZlbnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJl
bW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9
XG5cdFx0dmFyIGF0dGFjaGVkID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFh
dHRhY2hlZCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBl
IGluIGF0dGFjaGVkKSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWlu
YXRlKCdldmVudHMnKTtcblx0XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0
YXR0YWNoZWRbZXZlbnRzXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJl
bW92ZUV2ZW50KGV2ZW50cywgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0
YWNoZWRbZXZlbnRzXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2
ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMu
cmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJl
dHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRz
W3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5
KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5c
dFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1
bmN0aW9uKGZyb20sIHR5cGUpe1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2
YXIgZXZlbnRzID0gZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJl
dHVybiB0aGlzO1xuXHRcdGlmICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4g
ZXZlbnRzKSB0aGlzLmNsb25lRXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlm
IChldmVudHNbdHlwZV0pe1xuXHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihm
bil7XG5cdFx0XHRcdHRoaXMuYWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50
cyA9IHtcblx0Y2xpY2s6IDIsIGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIs
IGNvbnRleHRtZW51OiAyLCAvL21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6
IDIsIERPTU1vdXNlU2Nyb2xsOiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91
c2VvdXQ6IDIsIG1vdXNlbW92ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9t
b3VzZSBtb3ZlbWVudFxuXHRrZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5
Ym9hcmRcblx0b3JpZW50YXRpb25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAy
LCB0b3VjaG1vdmU6IDIsIHRvdWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0
Z2VzdHVyZXN0YXJ0OiAyLCBnZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0
dXJlXG5cdGZvY3VzOiAyLCBibHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIs
IHN1Ym1pdDogMiwgcGFzdGU6IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDog
MiwgdW5sb2FkOiAxLCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29u
dGVudExvYWRlZDogMSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5n
ZTogMSwgcG9wc3RhdGU6IDIsIHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxu
XHRlcnJvcjogMSwgYWJvcnQ6IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5c
bkVsZW1lbnQuRXZlbnRzID0ge1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwn
IGluIGRvY3VtZW50ID8gJ3doZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21v
dXNld2hlZWwnIDogJ0RPTU1vdXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5j
dGlvbihldmVudCl7XG5cdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYg
KHJlbGF0ZWQgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZh
bHNlO1xuXHRyZXR1cm4gKHJlbGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVs
JyAmJiB0eXBlT2YodGhpcykgIT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVk
KSk7XG59O1xuXG5pZiAoJ29ubW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZl
bnRzLm1vdXNlbGVhdmUgPSAyO1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xu
fSBlbHNlIHtcblx0RWxlbWVudC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91
c2VvdmVyJyxcblx0XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMu
bW91c2VsZWF2ZSA9IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hl
Y2tcblx0fTtcbn1cblxuLyo8bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIp
e1xuXHRFbGVtZW50Lk5hdGl2ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQu
RXZlbnRzLmNoYW5nZSA9IHtcblx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUg
PSB0aGlzLnR5cGU7XG5cdFx0XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYm
ICh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFu
Z2UnIDogJ2NoYW5nZSc7XG5cdFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtc
blx0XHRcdHJldHVybiBldmVudC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZl
bnQucHJvcGVydHlOYW1lID09ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+
Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5c
bmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVk
ZSB0aGUgZGVsZWdhdGUgbWV0aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50
LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2
ZW50XVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVu
Y3Rpb24oKXtcblxudmFyIGV2ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcjtcblxuRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZl
RXZlbnRzLmZvY3Vzb3V0ID0gMjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0
Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2Vs
Zil7XG5cdFx0aWYgKG1hdGNoKHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQs
IGV2ZW50LCB0YXJnZXQpO1xuXHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnRO
b2RlKTtcblx0fVxufTtcblxudmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6
ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0
fSxcblx0bW91c2VsZWF2ZToge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9u
OiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdm
b2N1cycgKyAoZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6
IHRydWVcblx0fSxcblx0Ymx1cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8g
J2JsdXInIDogJ2ZvY3Vzb3V0Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0
SUU5PiovXG52YXIgX2tleSA9ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1
bmN0aW9uKHR5cGUpe1xuXG5cdHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0
XHRyZW1vdmU6IGZ1bmN0aW9uKHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0
cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlz
dCAmJiBsaXN0LmZvcm1zKSBmb3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xu
XHRcdFx0XHQvLyB0aGUgZm9ybSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3Qg
aGF2ZSB0aGVcblx0XHRcdFx0Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQg
Y2FzZSB0aGUgZXZlbnQgd2FzXG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0
aWYgKGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQo
dHlwZSwgbGlzdC5mbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0
aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3Jt
ID0gKHRhcmdldC5nZXQoJ3RhZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQu
Z2V0UGFyZW50KCdmb3JtJyk7XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFy
IGxpc3RlbmVycyA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30p
LFxuXHRcdFx0XHRsaXN0ZW5lciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczog
W119LFxuXHRcdFx0XHRmb3JtcyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7
XG5cblx0XHRcdGlmIChmb3Jtcy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRm
b3Jtcy5wdXNoKGZvcm0pO1xuXG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRc
dFx0XHRidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtc
blx0XHRcdGZvcm0uYWRkRXZlbnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5c
blx0XHRcdGxpc3RlbmVyc1t1aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkg
KyB0eXBlICsgJ2xpc3RlbmVycycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFy
IGlucHV0T2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAn
Zm9jdXNpbicsXG5cdFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0
YXJnZXQpe1xuXHRcdFx0dmFyIGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0
aGlzLnJlbW92ZUV2ZW50cyhldmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0g
PSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZl
bnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVu
dHMpO1xuXHRcdH1cblx0fTtcbn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVj
dC5hcHBlbmQobWFwLCB7XG5cdHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVz
ZXQ6IGZvcm1PYnNlcnZlcigncmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFu
Z2UnKSxcblx0c2VsZWN0OiBpbnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+
Ki9cblxudmFyIHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8u
YWRkRXZlbnQsXG5cdHJlbW92ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxh
eSA9IGZ1bmN0aW9uKG9sZCwgbWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1
c2VDYXB0dXJlKXtcblx0XHRpZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJu
IG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1
ZG9zWzBdLmtleSAhPSAncmVsYXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVz
ZUNhcHR1cmUpO1xuXHRcdHZhciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNl
dWRvcy5zbGljZSgxKS5lYWNoKGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6
JyArIHBzZXVkby5rZXkgKyAocHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJykn
IDogJycpO1xuXHRcdH0pO1xuXHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1
cm4gbWV0aG9kLmNhbGwodGhpcywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZu
KTtcblx0fTtcbn07XG5cbnZhciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlv
bih0eXBlLCBtYXRjaCwgZm4pe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRl
bGVnYXRlcycsIHt9KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBm
b3IgKHZhciBfdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZu
ICYmIHN0b3JlZFtfdWlkXS5tYXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5c
dFx0dmFyIF90eXBlID0gdHlwZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFw
W3R5cGVdIHx8IHt9O1xuXHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRj
aCA9IGZ1bmN0aW9uKHRhcmdldCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBf
bWF0Y2gpO1xuXHRcdH07XG5cblx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNb
X3R5cGVdO1xuXHRcdGlmIChfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVu
dEV2ZW50LmNvbmRpdGlvbil7XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24g
PSBfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2gg
PSBmdW5jdGlvbih0YXJnZXQsIGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0
LCBldmVudCkgJiYgY29uZGl0aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9
O1xuXHRcdH1cblxuXHRcdHZhciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7
XG5cdFx0dmFyIGRlbGVnYXRvciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNo
LCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdl
dCl7XG5cdFx0XHRpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9
IGV2ZW50LnRhcmdldDtcblx0XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBm
biwgZXZlbnQsIHRhcmdldCk7XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7
fTtcblx0XHRzdG9yZWRbdWlkXSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjog
X2ZuLFxuXHRcdFx0ZGVsZWdhdG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5
cGVdID0gc3RvcmVkO1xuXHRcdHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVn
YXRvciwgX21hcC5jYXB0dXJlKTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlw
ZSwgbWF0Y2gsIGZuLCBfdWlkKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRk
ZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQp
IHJldHVybiB0aGlzO1xuXG5cdFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwg
ZGVsZWdhdG9yID0gc3RvcmVkW191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7
fTtcblx0XHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1v
dmUpIF9tYXAucmVtb3ZlKHRoaXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtc
blx0XHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50
LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRc
dHZhciBfX3VpZCwgcztcblx0XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRc
dHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9
PSBmbikgcmV0dXJuIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRj
aCwgZm4sIF9fdWlkKTtcblx0XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0
cyA9IHN0b3JlZFtfX3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlv
bi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3Vt
ZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBk
ZWxlZ2F0aW9uLmFkZEV2ZW50KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBk
ZWxlZ2F0aW9uLnJlbW92ZUV2ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTog
RWxlbWVudC5TdHlsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJh
Y3Rpbmcgd2l0aCB0aGUgc3R5bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5Llxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJv
dmlkZXM6IEVsZW1lbnQuU3R5bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0
bWwgPSBkb2N1bWVudC5odG1sLCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUs
IHdoaWNoIGRvZXMgbm90IHJlbW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5l
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVk
JztcbmVsLnN0eWxlLmNvbG9yID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwu
c3R5bGUuY29sb3IgPT0gJ3JlZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJu
cyBib3JkZXIqIHNob3J0aGFuZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0
aC1zdHlsZSBpbnN0ZWFkIG9mIHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHgg
c29saWQgIzEyM2FiYyc7XG5lbC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0Jv
cmRlcnNJbldyb25nT3JkZXIgPSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxs
O1xuLy88L2x0SUU5PlxuXG52YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENv
bXB1dGVkU3R5bGUsXG5cdHN1cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5zdHlsZS5ib3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0
aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0
eWxlcyk7XG59fTtcblxudmFyIGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51
bGwpLFxuXHRoYXNGaWx0ZXIgPSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxw
aGEgPSAvYWxwaGFcXChvcGFjaXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0
eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0
eScsIG9wYWNpdHkpO1xuXHRlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8
fCBvcGFjaXR5ID09IG51bGwgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5
PlxudmFyIHNldEZpbHRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2
YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBl
bGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIg
PSAocmVnZXhwLnRlc3QoZmlsdGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDog
ZmlsdGVyICsgJyAnICsgdmFsdWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxl
LnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3Bh
Y2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1l
bnQuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVs
ZW1lbnQsIG9wYWNpdHkpe1xuXHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50
LmN1cnJlbnRTdHlsZS5oYXNMYXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChv
cGFjaXR5ID09IG51bGwgfHwgb3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwg
cmVBbHBoYSwgJycpO1xuXHRcdGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50
KSAhPSAxKSBzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScp
O1xuXHR9IGVsc2Uge1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3Bh
Y2l0eT0nICsgKG9wYWNpdHkgKiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5c
dH1cbn0gOiBzZXRWaXNpYmlsaXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkg
PyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNp
dHkgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSAnJykgPyAxIDogb3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1
bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8
IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlm
IChmaWx0ZXIpIG9wYWNpdHkgPSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3Bh
Y2l0eSA9PSBudWxsIHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7
XG59IDogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2
ZSgnJG9wYWNpdHknKTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50
LnN0eWxlLnZpc2liaWxpdHkgPT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5
O1xufSkpO1xuXG52YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkg
PyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAn
MCUnLCB0b3A6ICcwJScsIGNlbnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEw
MCUnfSxcblx0aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5k
UG9zaXRpb25YICE9IG51bGwpLFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIg
Y2FtZWxDYXNlID0gZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFj
ZShwcmVmaXhQYXR0ZXJuLCAnJDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZh
ciByZW1vdmVTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0
eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHBy
b3BlcnR5ICsgJ1gnKTtcblx0XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3Zl
QXR0cmlidXRlKHByb3BlcnR5KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50
KHtcblxuXHRnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFo
YXNHZXRDb21wdXRlZFN0eWxlICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJy
ZW50U3R5bGVbY2FtZWxDYXNlKHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxl
bWVudC5nZXREb2N1bWVudCh0aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVm
YXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVs
bDtcblx0XHRyZXR1cm4gKGNvbXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHBy
b3BlcnR5ID09IGZsb2F0TmFtZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDog
Jyc7XG5cdH0sXG5cblx0c2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0
aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFs
dWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xu
XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3Bl
cnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2
YWx1ZSkgIT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9w
ZXJ0eV0gfHwgJ0AnKS5zcGxpdCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZh
bHVlKS5tYXAoZnVuY3Rpb24odmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAn
Jztcblx0XHRcdFx0cmV0dXJuICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVw
bGFjZSgnQCcsIE1hdGgucm91bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5c
dFx0fSBlbHNlIGlmICh2YWx1ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFs
dWUgPSBNYXRoLnJvdW5kKHZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0g
PSB2YWx1ZTtcblx0XHQvLzxsdElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09
IG51bGwpICYmIGRvZXNOb3RSZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1
dGUpe1xuXHRcdFx0cmVtb3ZlU3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0
XHQvLzwvbHRJRTk+XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0
aW9uKHByb3BlcnR5KXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0
T3BhY2l0eSh0aGlzKTtcblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxv
YXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVz
ICYmIHByb3BlcnR5LmluZGV4T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVy
biBbJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlv
bihjb3JuZXIpe1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xu
XHRcdFx0fSwgdGhpcykuam9pbignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5z
dHlsZVtwcm9wZXJ0eV07XG5cdFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcp
e1xuXHRcdFx0aWYgKEVsZW1lbnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkp
KXtcblx0XHRcdFx0cmVzdWx0ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5T
aG9ydFN0eWxlc1twcm9wZXJ0eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRc
dFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRo
aXMuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSAmJiAvXmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0
eSkpe1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0
KS9nLCBmdW5jdGlvbihwb3NpdGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1tw
b3NpdGlvbl07XG5cdFx0XHR9KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYg
cHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0
aWYgKHJlc3VsdCl7XG5cdFx0XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBj
b2xvciA9IHJlc3VsdC5tYXRjaCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAo
Y29sb3IpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hl
eCgpKTtcblx0XHR9XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxl
W3Byb3BlcnR5XSl7XG5cdFx0XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0
eSkgJiYgISgvcHgkLy50ZXN0KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9w
ZXJ0eSA9PSAnd2lkdGgnKSA/IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10s
IHNpemUgPSAwO1xuXHRcdFx0XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dFx0c2l6ZSArPSB0aGlzLmdldFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRv
SW50KCkgKyB0aGlzLmdldFN0eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRc
dFx0fSwgdGhpcyk7XG5cdFx0XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2Fw
aXRhbGl6ZSgpXSAtIHNpemUgKyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlcigu
KylXaWR0aHxtYXJnaW58cGFkZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxv
YXQocmVzdWx0KSkpe1xuXHRcdFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRc
dC8vPGx0SUU5PlxuXHRcdGlmIChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRl
cihUb3B8UmlnaHR8Qm90dG9tfExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChy
ZXN1bHQpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4r
KSQvLCAnJDIgJDMgJDEnKTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJl
c3VsdDtcblx0fSxcblxuXHRzZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2
YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIHJlc3VsdCA9IHt9O1xuXHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0
aW9uKGtleSl7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9
LCB0aGlzKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxl
cyA9IHtcblx0bGVmdDogJ0BweCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAn
QHB4Jyxcblx0d2lkdGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1h
eEhlaWdodDogJ0BweCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFj
a2dyb3VuZENvbG9yOiAncmdiKEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNr
Z3JvdW5kUG9zaXRpb246ICdAcHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250
U2l6ZTogJ0BweCcsIGxldHRlclNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xp
cDogJ3JlY3QoQHB4IEBweCBAcHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcs
IHBhZGRpbmc6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkg
QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAn
QHB4IEBweCBAcHggQHB4JywgYm9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdy
Z2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6
SW5kZXg6ICdAJywgJ3pvb20nOiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0Bw
eCcsIG9wYWNpdHk6ICdAJywgYm9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxu
XG5cblxuXG5FbGVtZW50LlNob3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBi
b3JkZXI6IHt9LCBib3JkZXJXaWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6
IHt9fTtcblxuWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9u
KGRpcmVjdGlvbil7XG5cdHZhciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBB
bGwgPSBFbGVtZW50LlN0eWxlcztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rp
b24oc3R5bGUpe1xuXHRcdHZhciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0
eWxlXVtzZF0gPSBBbGxbc2RdID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyAr
IGRpcmVjdGlvbjtcblx0U2hvcnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAs
IEAsIEApJztcblx0dmFyIGJkdyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBi
ZGMgPSBiZCArICdDb2xvcic7XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0
aFtiZHddID0gU2hvcnRbYmRdW2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3Jk
ZXJTdHlsZVtiZHNdID0gU2hvcnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQu
Ym9yZGVyQ29sb3JbYmRjXSA9IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAs
IEApJztcbn0pO1xuXG5pZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRT
dHlsZXMuYmFja2dyb3VuZFBvc2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFj
a2dyb3VuZFBvc2l0aW9uWTogJ0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVu
dC5EaW1lbnNpb25zXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0
aCBzaXplLCBzY3JvbGwsIG9yIHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93
IG9iamVjdC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0g
RWxlbWVudCBwb3NpdGlvbmluZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9v
Lm9yZy8pIGNvZGUgYW5kIHNtYXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6
Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lv
bnMgYmFzZWQgb24gW1lVSV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwg
W0JTRCBMaWNlbnNlXShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1s
KS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0Vs
ZW1lbnQuRGltZW5zaW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVu
dC5hcHBlbmRDaGlsZChjaGlsZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9m
ZnNldFBhcmVudCA9PT0gZWxlbWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIg
aGVpZ2h0Q29tcG9uZW50cyA9IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRv
bScsICdib3JkZXJUb3BXaWR0aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBv
bmVudHMgPSBbJ3dpZHRoJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJM
ZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9
IGZ1bmN0aW9uKGVsKXtcblxuXHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwp
LFxuXHRcdGJvdW5kcyA9IHt4OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2go
ZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0
fSk7XG5cdHdpZHRoQ29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLngg
Kz0gcGFyc2VGbG9hdChnQ1NbY3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxu
dmFyIGlzT2Zmc2V0ID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdw
b3NpdGlvbicpICE9ICdzdGF0aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRT
dGF0aWMgPSBmdW5jdGlvbihlbCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFi
bGV8dGR8dGgpJC9pKS50ZXN0KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQo
e1xuXG5cdHNjcm9sbFRvOiBmdW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtc
blx0XHRcdHRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdHRoaXMuc2Nyb2xsTGVmdCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0
fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0
aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5c
dFx0Ly88bHRJRTk+XG5cdFx0Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5v
dCBjYWxjdWxhdGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJp
bGl0eSBoaWRkZW4uXG5cdFx0aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4
OiB0aGlzLm9mZnNldFdpZHRoLCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5
PlxuXG5cdFx0Ly8gVGhpcyBzdmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRl
U2l6ZSgpYCwgY2FuIGJlIHJlbW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxu
XHRcdC8vIEJ1ZyBpbmZvOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzA5ODVcblx0XHRpZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3Zn
Q2FsY3VsYXRlU2l6ZSh0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhp
cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRo
LCB5OiBib3VuZHMuaGVpZ2h0fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDog
MCwgeTogMH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6
ZSgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWln
aHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRo
aXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6
IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9s
bHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0
aW9uID0ge3g6IDAsIHk6IDB9O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVu
dCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3Np
dGlvbi55ICs9IGVsZW1lbnQuc2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNl
dFBhcmVudDogYnJva2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVu
dCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50
LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNl
dENoZWNrID0gKHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/
IGlzT2Zmc2V0U3RhdGljIDogaXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVu
dC5wYXJlbnROb2RlKSl7XG5cdFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJu
IGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0
cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRc
dHRyeSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7
XG5cdFx0dmFyIGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0O1xuXG5cdFx0aWYgKGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIg
Ym91bmQgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9j
dW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0
bWxTY3JvbGwgPSBodG1sLmdldFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMu
Z2V0U2Nyb2xscygpLFxuXHRcdFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3Np
dGlvbicpID09ICdmaXhlZCcpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5s
ZWZ0LnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3Jv
bGwueCkgLSBodG1sLmNsaWVudExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkg
KyBlbGVtU2Nyb2xscy55ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5j
bGllbnRUb3Bcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3Np
dGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRp
b247XG5cblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBv
c2l0aW9uLnggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVt
ZW50Lm9mZnNldFRvcDtcblxuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xu
XHRcdH1cblxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVu
Y3Rpb24ocmVsYXRpdmUpe1xuXHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0
XHRcdHNjcm9sbCA9IHRoaXMuZ2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0
XHRcdHg6IG9mZnNldC54IC0gc2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55
XG5cdFx0fTtcblxuXHRcdGlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChy
ZWxhdGl2ZSkpKXtcblx0XHRcdHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9z
aXRpb24oKTtcblx0XHRcdHJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24u
eCAtIGxlZnRCb3JkZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlv
bi55IC0gdG9wQm9yZGVyKHJlbGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtc
blx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlz
Qm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0
XHR2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9
IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54
LFxuXHRcdFx0dG9wOiBwb3NpdGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhl
aWdodDogc2l6ZS55XG5cdFx0fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0
aDtcblx0XHRvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9i
ajtcblx0fSxcblxuXHRjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJu
IHtcblx0XHRcdGxlZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0Jyks
XG5cdFx0XHR0b3A6IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRc
dH07XG5cdH0sXG5cblx0c2V0UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRo
aXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5c
bltEb2N1bWVudCwgV2luZG93XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJl
dHVybiB7eDogZG9jLmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxu
XHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCks
IGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhP
ZmZzZXQgfHwgZG9jLnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xs
VG9wfTtcblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2Mg
PSBnZXRDb21wYXRFbGVtZW50KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5c
dFx0XHRib2R5ID0gdGhpcy5nZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1h
dGgubWF4KGRvYy5zY3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRo
Lm1heChkb2Muc2Nyb2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxc
blxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xu
XHR9LFxuXG5cdGdldENvb3JkaW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhp
cy5nZXRTaXplKCk7XG5cdFx0cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55
LCByaWdodDogc2l6ZS54LCBoZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxu
fSk7XG5cbi8vIHByaXZhdGUgbWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50Lmdl
dENvbXB1dGVkU3R5bGU7XG5cbmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtc
blx0cmV0dXJuIHN0eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5c
blxuXG5mdW5jdGlvbiB0b3BCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihl
bGVtZW50LCAnYm9yZGVyLXRvcC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVs
ZW1lbnQpe1xuXHRyZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRo
Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8
aHRtbCkkL2kpLnRlc3QoZWxlbWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0
RWxlbWVudChlbGVtZW50KXtcblx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0
cmV0dXJuICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVu
dC5hbGlhcyh7cG9zaXRpb246ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltX
aW5kb3csIERvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRI
ZWlnaHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5c
blx0Z2V0V2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNj
cm9sbCgpLnk7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gdGhpcy5nZXRTY3JvbGwoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRT
Y3JvbGxXaWR0aDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCku
eDtcblx0fSxcblxuXHRnZXRUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9z
aXRpb24oKS55O1xuXHR9LFxuXG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRo
aXMuZ2V0UG9zaXRpb24oKS54O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5c
bmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4
dGVuZGVkIGJ5IGFsbCBvdGhlciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJs
ZV1cblxucHJvdmlkZXM6IEZ4XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9
IHRoaXMuRnggPSBuZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBP
cHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25T
dGFydDogbmlsLFxuXHRcdG9uQ2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRc
dCovXG5cdFx0ZnBzOiA2MCxcblx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxu
XHRcdGZyYW1lczogbnVsbCxcblx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9y
ZSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1
YmplY3QgPSB0aGlzLnN1YmplY3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdH0sXG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24ocCl7XG5cdFx0XHRyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7
XG5cdFx0fTtcblx0fSxcblxuXHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZnJhbWVTa2lwKXtcblx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/
IChub3cgLSB0aGlzLnRpbWUpIDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZh
bDtcblx0XHRcdHRoaXMudGltZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xu
XHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMu
ZnJhbWUgPCB0aGlzLmZyYW1lcyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24o
dGhpcy5mcmFtZSAvIHRoaXMuZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0
aGlzLmZyb20sIHRoaXMudG8sIGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJh
bWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20s
IHRoaXMudG8sIDEpKTtcblx0XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6
IGZ1bmN0aW9uKG5vdyl7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5j
dGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBk
ZWx0YSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVu
bmluZygpKSByZXR1cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0
XHRcdGNhc2UgJ2NhbmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2Fz
ZSAnY2hhaW4nOiB0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7
IHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0
OiBmdW5jdGlvbihmcm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0
dXJuIHRoaXM7XG5cdFx0dGhpcy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0
dGhpcy5mcmFtZSA9ICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlz
LnRpbWUgPSBudWxsO1xuXHRcdHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigp
O1xuXHRcdHZhciBmcmFtZXMgPSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlv
bnMuZnBzLCBkdXJhdGlvbiA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0
aW9uID0gRnguRHVyYXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRo
aXMuZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMg
fHwgTWF0aC5yb3VuZCh0aGlzLmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRp
ZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJl
c2V0VGhlbmFibGUodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0
YXJ0JywgdGhpcy5zdWJqZWN0KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRo
aXMuaXNSdW5uaW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0
YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVz
ID09IHRoaXMuZnJhbWUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlz
LnN1YmplY3QpO1xuXHRcdFx0XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50
KCdjaGFpbkNvbXBsZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRc
dHRoaXMuZmlyZUV2ZW50KCdzdG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRo
aXMucmVzb2x2ZSh0aGlzLnN1YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtc
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMu
ZnJhbWUgPSB0aGlzLmZyYW1lcztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlz
LnN1YmplY3QpLmNsZWFyQ2hhaW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7
XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmlzUGF1c2VkKCkpIHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2
YXIgbGlzdCA9IGluc3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAm
JiBsaXN0LmNvbnRhaW5zKHRoaXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmco
KTtcblx0fVxuXG59KTtcblxuRnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7
XG5cdHJldHVybiAodG8gLSBmcm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9u
cyA9IHsnc2hvcnQnOiAyNTAsICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGds
b2JhbCB0aW1lcnNcblxudmFyIGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxv
b3AgPSBmdW5jdGlvbigpe1xuXHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9
IHRoaXMubGVuZ3RoOyBpLS07KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlm
IChpbnN0YW5jZSkgaW5zdGFuY2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3Rh
bmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5z
dGFuY2VzW2Zwc10gPSBbXSk7XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBz
XSkgdGltZXJzW2Zwc10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwg
bGlzdCk7XG59O1xuXG52YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxp
c3QgPSBpbnN0YW5jZXNbZnBzXTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7
XG5cdFx0aWYgKCFsaXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5z
dGFuY2VzW2Zwc107XG5cdFx0XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zw
c10pO1xuXHRcdH1cblx0fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1Nc
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5
IEZ4LlR3ZWVuLCBGeC5Nb3JwaCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRngu
Q1NTXG5cbi4uLlxuKi9cblxuRnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxc
blxuXHQvL3ByZXBhcmVzIHRoZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVu
Y3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29u
dmVydCh2YWx1ZXMpO1xuXHRcdHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtc
blx0XHRpZiAodG8gPT0gbnVsbCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxl
bWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51
bml0O1xuXHRcdFx0Ly8gYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIv
ZngvYmxvYi9tYXN0ZXIvZnguanMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBl
b2YgZnJvbSA9PSAnc3RyaW5nJyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAm
JiBwYXJzZUZsb2F0KGZyb20pICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3Bl
cnR5LCB0byArIHVuaXQpO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVk
U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExl
ZnQgb3IgcGl4ZWxXaWR0aFxuXHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRc
dFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxD
YXNlKCldO1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFk
YXB0ZWQgZnJvbSBEZWFuIEVkd2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAw
Ny8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0g
ZWxlbWVudC5zdHlsZS5sZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8g
KyB1bml0O1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0
XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0
XHR9XG5cdFx0XHRcdGZyb20gPSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkg
KiAocGFyc2VGbG9hdChmcm9tKSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9w
ZXJ0eSwgZnJvbSArIHVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRo
aXMucGFyc2UoZnJvbSksIHRvOiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMg
YSB2YWx1ZSBpbnRvIGFuIGFycmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2
YWx1ZSA9IEZ1bmN0aW9uLmNvbnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZh
bHVlID09ICdzdHJpbmcnKSA/IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVl
KTtcblx0XHRyZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJp
bmcodmFsKTtcblx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRngu
Q1NTLlBhcnNlcnMsIGZ1bmN0aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJu
O1xuXHRcdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChw
YXJzZWQgfHwgcGFyc2VkID09PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBh
cnNlcn07XG5cdFx0XHR9KTtcblx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBh
cnNlcjogRnguQ1NTLlBhcnNlcnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9
KTtcblx0fSxcblxuXHQvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0
cywgdXNpbmcgdGhlaXIgcGFyc2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywg
ZGVsdGEpe1xuXHRcdHZhciBjb21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0
aCwgdG8ubGVuZ3RoKSkudGltZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2
YWx1ZTogZnJvbVtpXS5wYXJzZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwg
ZGVsdGEpLCBwYXJzZXI6IGZyb21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQu
JGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBj
b21wdXRlZDtcblx0fSxcblxuXHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRz
ZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdm
eDpjc3M6dmFsdWUnKSB2YWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5l
ZCA9IFtdO1xuXHRcdHZhbHVlLmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0g
cmV0dXJuZWQuY29uY2F0KGJpdC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0
fSk7XG5cdFx0cmV0dXJuIHJldHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdl
IHRvIGFuIGVsZW1lbnRcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2
YWx1ZSwgdW5pdCl7XG5cdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2
YWx1ZSwgdW5pdCkpO1xuXHR9LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0
byBmaW5kIHRoZSB2YWx1ZXMgZm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNl
bGVjdG9yKXtcblx0XHRpZiAoRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5D
YWNoZVtzZWxlY3Rvcl07XG5cdFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdF
eHAoJ14nICsgc2VsZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJj
aFN0eWxlcyA9IGZ1bmN0aW9uKHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0
aW9uKHJ1bGUpe1xuXHRcdFx0XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5
bGVzKHJ1bGUucnVsZXMgfHwgcnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRc
dFx0XHR9XG5cdFx0XHRcdGlmICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2Vs
ZWN0b3JUZXh0ID0gKHJ1bGUuc2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxh
Y2UoL15cXHcrLywgZnVuY3Rpb24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2Uo
KTtcblx0XHRcdFx0fSkgOiBudWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2Vs
ZWN0b3JUZXN0LnRlc3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFj
aChFbGVtZW50LlN0eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAo
IXJ1bGUuc3R5bGVbc3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47
XG5cdFx0XHRcdFx0dmFsdWUgPSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRc
dHRvW3N0eWxlXSA9ICgoL15yZ2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDog
dmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2go
ZG9jdW1lbnQuc3R5bGVTaGVldHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0g
c2hlZXQuaHJlZjtcblx0XHRcdGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAm
JiBocmVmLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFy
IHJ1bGVzID0gc2hlZXQucnVsZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHls
ZXMocnVsZXMpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0g
dG87XG5cdH1cblxufSk7XG5cbkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9
IHtcblxuXHRDb2xvcjoge1xuXHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAo
dmFsdWUubWF0Y2goL14jWzAtOWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0
cnVlKTtcblx0XHRcdHJldHVybiAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxc
ZCspLFxccyooXFxkKykvKSkpID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFs
c2U7XG5cdFx0fSxcblx0XHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRc
dFx0cmV0dXJuIGZyb20ubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1h
dGgucm91bmQoRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xu
XHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5t
YXAoTnVtYmVyKTtcblx0XHR9XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNl
RmxvYXQsXG5cdFx0Y29tcHV0ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFs
dWUsIHVuaXQpe1xuXHRcdFx0cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xu
XHRcdH1cblx0fSxcblxuXHRTdHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChm
YWxzZSksXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBv
bmU7XG5cdFx0fSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVy
bztcblx0XHR9XG5cdH1cblxufTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxu
ZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55
IG51bWJlciBvZiBDU1MgcHJvcGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qg
b2YgcnVsZXMsIG9yIENTUyBiYXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5c
bi4uLlxuKi9cblxuRnguTW9ycGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxc
blxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVs
ZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBh
cmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5
cGVvZiBub3cgPT0gJ3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2
YXIgcCBpbiBub3cpIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9w
dGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rp
b24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBp
biBmcm9tKSBub3dbcF0gPSB0aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRc
dHJldHVybiBub3c7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRc
dGlmICghdGhpcy5jaGVjayhwcm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVv
ZiBwcm9wZXJ0aWVzID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVy
dGllcyk7XG5cdFx0dmFyIGZyb20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHBy
b3BlcnRpZXMpe1xuXHRcdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQs
IHAsIHByb3BlcnRpZXNbcF0pO1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0
dG9bcF0gPSBwYXJzZWQudG87XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0
byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6
IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9w
dGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFt
b3JwaCl7XG5cdFx0XHRtb3JwaCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9
KTtcblx0XHRcdHRoaXMuc3RvcmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4g
bW9ycGg7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5j
dGlvbihwcm9wcyl7XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25z
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0
byBiZSB1c2VkIHdpdGggYW55IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQ
ZW5uZXIsIDxodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFu
ZCBvcHRpbWl6ZWQgdG8gYmUgdXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxu
cHJvdmlkZXM6IEZ4LlRyYW5zaXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxu
XHRnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9u
cy50cmFuc2l0aW9uIHx8IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0
eXBlb2YgdHJhbnMgPT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgn
OicpO1xuXHRcdFx0dHJhbnMgPSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNb
ZGF0YVswXV0gfHwgdHJhbnNbZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFb
MV0pIHRyYW5zID0gdHJhbnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsy
XSA/IGRhdGFbMl0uY2FwaXRhbGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5z
O1xuXHR9XG5cbn0pO1xuXG5GeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFy
YW1zKXtcblx0cGFyYW1zID0gQXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0g
ZnVuY3Rpb24ocG9zKXtcblx0XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07
XG5cdHJldHVybiBPYmplY3QuYXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxu
XHRcdGVhc2VPdXQ6IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24o
MSAtIHBvcywgcGFyYW1zKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtc
blx0XHRcdHJldHVybiAocG9zIDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6
ICgyIC0gdHJhbnNpdGlvbigyICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0
fSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8p
e1xuXHRcdHJldHVybiB6ZXJvO1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRl
bmQgPSBmdW5jdGlvbih0cmFuc2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJh
bnNpdGlvbnMpIEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24o
dHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtc
blxuXHRQb3c6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhb
MF0gfHwgNik7XG5cdH0sXG5cblx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgu
cG93KDIsIDggKiAocCAtIDEpKTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRy
ZXR1cm4gMSAtIE1hdGguc2luKE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rp
b24ocCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxu
XG5cdEJhY2s6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5c
dFx0cmV0dXJuIE1hdGgucG93KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0
Qm91bmNlOiBmdW5jdGlvbihwKXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAs
IGIgPSAxOyAxOyBhICs9IGIsIGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAv
IDExKXtcblx0XHRcdFx0dmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEg
KiBwKSAvIDQsIDIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHZhbHVlO1xuXHR9LFxuXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBN
YXRoLnBvdygyLCAxMCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYg
eFswXSB8fCAxKSAvIDMpO1xuXHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQn
LCAnUXVpbnQnXS5lYWNoKGZ1bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9u
c1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVy
biBNYXRoLnBvdyhwLCBpICsgMik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRngu
VHdlZW5cblxuZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNp
dGlvbiBhbnkgQ1NTIHByb3BlcnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBF
bGVtZW50LmZhZGUsIEVsZW1lbnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rp
b24oZWxlbWVudCwgb3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0g
ZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5c
blx0c2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0
aCA9PSAxKXtcblx0XHRcdG5vdyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnBy
b3BlcnR5IHx8IHRoaXMub3B0aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIo
dGhpcy5lbGVtZW50LCBwcm9wZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7
XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xu
XHRcdHZhciBhcmdzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVy
dHkgPSB0aGlzLm9wdGlvbnMucHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJz
ZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0
XHRyZXR1cm4gdGhpcy5wYXJlbnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7
XG5cbkVsZW1lbnQuUHJvcGVydGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0
d2VlbiA9IHRoaXMucmV0cmlldmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0
d2VlbiA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMu
c3RvcmUoJ3R3ZWVuJywgdHdlZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxu
fTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdHRoaXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0
byk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2
YXIgZmFkZSA9IHRoaXMuZ2V0KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5h
cHBlbmQoYXJndW1lbnRzKSwgdG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3Nb
MV0gPSAndG9nZ2xlJztcblx0XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBt
ZXRob2QgPSAnc3RhcnQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93Jzog
bWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBt
ZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpc
blx0XHRcdFx0dmFyIGZsYWcgPSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0
eWxlKCdvcGFjaXR5JykgPT0gMSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRc
dGFyZ3NbMV0gPSBmbGFnID8gMCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycs
ICFmbGFnKTtcblx0XHRcdFx0dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRk
ZWZhdWx0OiBtZXRob2QgPSAnc3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5l
bGltaW5hdGUoJ2ZhZGU6ZmxhZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdz
KTtcblx0XHR2YXIgdG8gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9k
ID09ICdzZXQnKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8g
J2hpZGRlbicgOiAndmlzaWJsZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRp
ZiAoZmFkZS4kY2hhaW4ubGVuZ3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xu
XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7
XG5cdFx0XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRc
dH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRp
ZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhp
cy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlz
LmNhbGxDaGFpbigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0aGlnaGxpZ2h0OiBmdW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5c
dFx0XHRlbmQgPSB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJl
bnQnKSA/ICcjZmZmJyA6IGVuZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3
ZWVuJyk7XG5cdFx0dHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2Zm
ZmY4OCcsIGVuZCkuY2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tn
cm91bmQtY29sb3InLCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0
XHR0d2Vlbi5jYWxsQ2hhaW4oKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246
IFBvd2VyZnVsIGFsbCBwdXJwb3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3Qu
XG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxl
bWVudCwgQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5c
bnByb3ZpZGVzOiBSZXF1ZXN0XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0
eSA9IGZ1bmN0aW9uKCl7fSxcblx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBu
ZXcgQnJvd3Nlci5SZXF1ZXN0KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcg
Q2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5U
aGVuYWJsZV0sXG5cblx0b3B0aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30s
XG5cdFx0b25Mb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVz
czogZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30s
XG5cdFx0b25DYW5jZWw6IGZ1bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJl
c3BvbnNlVGV4dCwgcmVzcG9uc2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIp
e30sXG5cdFx0b25FeGNlcHRpb246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRc
dG9uVGltZW91dDogZnVuY3Rpb24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAn
Jyxcblx0XHR3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRh
OiAnJyxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRw
UmVxdWVzdCcsXG5cdFx0XHQnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBh
cHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxc
blx0XHRmb3JtYXQ6IGZhbHNlLFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25v
cmUnLFxuXHRcdGlzU3VjY2VzczogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJs
RW5jb2RlZDogdHJ1ZSxcblx0XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czog
ZmFsc2UsXG5cdFx0ZXZhbFJlc3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5v
Q2FjaGU6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHRoaXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9
LFxuXG5cdG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhy
O1xuXHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtc
blx0XHR0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVu
Y3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7
XG5cdFx0XHR0aGlzLnN0YXR1cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5c
dFx0fS5iaW5kKHRoaXMpKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5c
dFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQg
PSBlbXB0eTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50
aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3Bv
bnNlID0ge3RleHQ6IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5y
ZXNwb25zZVhNTH07XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0
aGlzLnN0YXR1cykpXG5cdFx0XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlz
LnJlc3BvbnNlLnhtbCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5c
blx0aXNTdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztc
blx0XHRyZXR1cm4gKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRp
c1J1bm5pbmc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxu
XG5cdHByb2Nlc3NTY3JpcHRzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25z
LmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRl
cignQ29udGVudC10eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVy
biB0ZXh0LnN0cmlwU2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5c
dHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5w
cm9jZXNzU2NyaXB0cyh0ZXh0KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQs
IHhtbDogeG1sfSk7XG5cdH0sXG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJn
dW1lbnRzKS5jYWxsQ2hhaW4oKTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMub25GYWlsdXJlKCk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4
aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuZmlyZUV2ZW50KCdjb21wbGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtc
blx0fSxcblxuXHRsb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVu
dCgnbG9hZHN0YXJ0JywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBm
dW5jdGlvbihldmVudCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0
aGlzLnhocl0pO1xuXHR9LFxuXG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJl
RXZlbnQoJ3RpbWVvdXQnLCB0aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3Rp
bWVvdXQnLCB4aHI6IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihu
YW1lLCB2YWx1ZSl7XG5cdFx0dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4g
RnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJl
c3BvbnNlSGVhZGVyKG5hbWUpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6
IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3
aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5j
ZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5j
YWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRy
ZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYg
KCF0aGlzLmNoZWNrKG9wdGlvbnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5p
c1N1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRc
dHRoaXMucnVubmluZyA9IHRydWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtc
blx0XHRpZiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9
IHtkYXRhOiBvcHRpb25zfTtcblxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0
aW9ucyA9IE9iamVjdC5hcHBlbmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhv
ZDogb2xkLm1ldGhvZH0sIG9wdGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1
cmwgPSBTdHJpbmcob3B0aW9ucy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2Vy
Q2FzZSgpO1xuXG5cdFx0c3dpdGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVu
dCc6IGRhdGEgPSBkb2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRc
dFx0Y2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmlu
ZyhkYXRhKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2
YXIgZm9ybWF0ID0gJ2Zvcm1hdD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEg
PSAoZGF0YSkgPyBmb3JtYXQgKyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlm
ICh0aGlzLm9wdGlvbnMuZW11bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0
aG9kKSl7XG5cdFx0XHR2YXIgX21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRk
YXRhID0gKGRhdGEpID8gX21ldGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0
aG9kID0gJ3Bvc3QnO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAm
JiBbJ3Bvc3QnLCAncHV0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2Rpbmcg
PSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5l
bmNvZGluZyA6ICcnO1xuXHRcdFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0
aWYgKCF1cmwpIHVybCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRy
aW1Qb3NpdGlvbiA9IHVybC5sYXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24g
PiAtMSAmJiAodHJpbVBvc2l0aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJs
LnN1YnN0cigwLCB0cmltUG9zaXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hl
KVxuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3Ry
aW5nLnVuaXF1ZUlEKCk7XG5cblx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1l
dGhvZCA9PSAnZGVsZXRlJykpe1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEg
PyAnJicgOiAnPycpICsgZGF0YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZh
ciB4aHIgPSB0aGlzLnhocjtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5v
bmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9n
cmVzcyA9IHRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3Blbiht
ZXRob2QudG9VcHBlckNhc2UoKSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9u
cy51c2VyLCB0aGlzLm9wdGlvbnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndp
dGhDcmVkZW50aWFscykgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRl
bnRpYWxzID0gdHJ1ZTtcblxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3Rh
dGVDaGFuZ2UuYmluZCh0aGlzKTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVu
Y3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhl
YWRlcihrZXksIHZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVF
dmVudCgnZXhjZXB0aW9uJywgW2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3Jl
YXNvbjogJ2V4Y2VwdGlvbicsIHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0
XHR9LCB0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRp
bmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9
XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0
XHRpZiAoIXRoaXMub3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxz
ZSBpZiAodGhpcy5vcHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVs
YXkodGhpcy5vcHRpb25zLnRpbWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGNhbmNlbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRo
aXM7XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xu
XHRcdHhoci5hYm9ydCgpO1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91
dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIu
b25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhy
Lm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5l
dyBCcm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0
dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1
dCcsICdkZWxldGUnLCAncGF0Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVM
RVRFJywgJ1BBVENIJywgJ0hFQUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNb
bWV0aG9kXSA9IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRo
b2Q6IG1ldGhvZFxuXHRcdH07XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBk
YXRhO1xuXHRcdHJldHVybiB0aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0
LmltcGxlbWVudChtZXRob2RzKTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0
c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJyku
Y2FuY2VsKCk7XG5cdFx0c2VuZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmll
dmUoJ3NlbmQnKTtcblx0XHRpZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtc
blx0XHRcdFx0ZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21l
dGhvZCcpIHx8ICdwb3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRc
dFx0dGhpcy5zdG9yZSgnc2VuZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0
fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtc
blx0XHR2YXIgc2VuZGVyID0gdGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0
YTogdGhpcywgdXJsOiB1cmwgfHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1M
XG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRk
aXRpb25hbCBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0
XVxuXG5wcm92aWRlczogUmVxdWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1
cGRhdGU6IGZhbHNlLFxuXHRcdGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUs
XG5cdFx0ZmlsdGVyOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0
L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0
c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMs
IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0
cmlwU2NyaXB0cyhmdW5jdGlvbihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9
IHNjcmlwdDtcblx0XHR9KTtcblxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2go
Lzxib2R5W14+XSo+KFtcXHNcXFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVz
cG9uc2UuaHRtbCA9IG1hdGNoWzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2Rpdicp
LnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAu
Y2hpbGROb2Rlcztcblx0XHRyZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0
aW9ucy5maWx0ZXIgfHwgJyonKTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2Uu
dHJlZSA9IHJlc3BvbnNlLmVsZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0
XHR2YXIgdXBkYXRlID0gZG9jdW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0
XHRpZiAob3B0aW9ucy5maWx0ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5c
dFx0XHRlbHNlIHVwZGF0ZS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2Ug
aWYgKG9wdGlvbnMuYXBwZW5kKXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRp
b25zLmFwcGVuZCk7XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRz
LnJldmVyc2UoKS5pbmplY3QoYXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAu
Z2V0Q2hpbGRyZW4oKSk7XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93
c2VyLmV4ZWMocmVzcG9uc2UuamF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNw
b25zZS50cmVlLCByZXNwb25zZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2
YXNjcmlwdCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50
czogcmVzcG9uc2UuZWxlbWVudHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJl
c3BvbnNlLmphdmFzY3JpcHR9KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxv
YWQgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMu
Z2V0KCdsb2FkJykuY2FuY2VsKCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9
IHRoaXMucmV0cmlldmUoJ2xvYWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5l
dyBSZXF1ZXN0LkhUTUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMs
IG1ldGhvZDogJ2dldCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9
XG5cdFx0cmV0dXJuIGxvYWQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dGxvYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5Lmxpbmso
YXJndW1lbnRzLCB7ZGF0YTogVHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxu
ZGVzY3JpcHRpb246IEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cblNlZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWly
ZXM6IFtBcnJheSwgU3RyaW5nLCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxu
XG4uLi5cbiovXG5cbmlmICh0eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0g
e307XG5cblxuXG4oZnVuY3Rpb24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYics
ICdcXHQnOiAnXFxcXHQnLCAnXFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAn
XFxcXHInLCAnXCInIDogJ1xcXFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2Nh
cGUgPSBmdW5jdGlvbihjaHIpe1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAo
JzAwMDAnICsgY2hyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xu
XG5KU09OLnZhbGlkYXRlID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJl
cGxhY2UoL1xcXFwoPzpbXCJcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5c
blx0XHRcdFx0XHRyZXBsYWNlKC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8
LT9cXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0
XHRyZXBsYWNlKC8oPzpefDp8LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15b
XFxdLDp7fVxcc10qJC8pLnRlc3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5z
dHJpbmdpZnkgPyBmdW5jdGlvbihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtc
bn0gOiBmdW5jdGlvbihvYmope1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50
b0pTT04oKTtcblxuXHRzd2l0Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxu
XHRcdFx0cmV0dXJuICdcIicgKyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBl
c2NhcGUpICsgJ1wiJztcblx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2Jq
Lm1hcChKU09OLmVuY29kZSkuY2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNl
ICdoYXNoJzpcblx0XHRcdHZhciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFs
dWUpO1xuXHRcdFx0XHRpZiAoanNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6
JyArIGpzb24pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xu
XHRcdGNhc2UgJ251bWJlcic6IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0
Y2FzZSAnbnVsbCc6IHJldHVybiAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5c
bkpTT04uc2VjdXJlID0gdHJ1ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywg
c2VjdXJlKXtcblx0aWYgKCFzdHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJl
dHVybiBudWxsO1xuXG5cdGlmIChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7
XG5cdGlmIChzZWN1cmUpe1xuXHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShz
dHJpbmcpO1xuXHRcdGlmICghSlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3Io
J0pTT04gY291bGQgbm90IGRlY29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5k
IHRoZSB2YWx1ZSBpcyBub3Qgc2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsg
c3RyaW5nICsgJyknKTtcbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5K
U09OXG5cbmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGgg
YWRkaXRpb25hbCBtZXRob2RzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09O
XVxuXG5wcm92aWRlczogUmVxdWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0g
bmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
Km9uRXJyb3I6IGZ1bmN0aW9uKHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5c
dH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQo
b3B0aW9ucyk7XG5cdFx0T2JqZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2Nl
cHQnOiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0
fSk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5c
dFx0dHJ5IHtcblx0XHRcdGpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0
ZXh0LCB0aGlzLm9wdGlvbnMuc2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0
aGlzLmZpcmVFdmVudCgnZXJyb3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0
XHR9XG5cdFx0aWYgKGpzb24gPT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9
IGVsc2Uge1xuXHRcdFx0dGhpcy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJl
c29sdmUoe2pzb246IGpzb24sIHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogQ29va2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcs
IHJlYWRpbmcsIGFuZCBkZWxldGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5jcmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkg
UGV0ZXItUGF1bCBLb2NoIChodHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09w
dGlvbnMsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29v
a2llID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6
IHtcblx0XHRwYXRoOiAnLycsXG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFs
c2UsXG5cdFx0c2VjdXJlOiBmYWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5j
b2RlOiB0cnVlLFxuXHRcdGh0dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRP
cHRpb25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5lbmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVl
KTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0
aGlzLm9wdGlvbnMuZG9tYWluO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0g
JzsgcGF0aD0nICsgdGhpcy5vcHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJh
dGlvbil7XG5cdFx0XHR2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUo
ZGF0ZS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAx
MDAwKTtcblx0XHRcdHZhbHVlICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtc
blx0XHR9XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xu
XHRcdHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVl
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IHZhbHVlID0gdGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxz
KicgKyB0aGlzLmtleS5lc2NhcGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAo
dmFsdWUpID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0
ZGlzcG9zZTogZnVuY3Rpb24oKXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVy
Z2Uoe30sIHRoaXMub3B0aW9ucywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUsIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZh
bHVlKTtcbn07XG5cbkNvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBD
b29raWUoa2V5KS5yZWFkKCk7XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwg
b3B0aW9ucyl7XG5cdHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xu
fTtcblxuLypcbi0tLVxuXG5uYW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMg
dGhlIGN1c3RvbSBldmVudCBkb21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBbQnJvd3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlk
ZXM6IFtET01SZWFkeSwgRG9tUmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywg
ZG9jdW1lbnQpe1xuXG52YXIgcmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNo
b3VsZFBvbGwsXG5cdHRpbWVyLFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpO1xuXG52YXIgZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQo
dGltZXIpO1xuXHRpZiAoIXJlYWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1
ZTtcblx0XHRkb2N1bWVudC5yZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJl
YWR5KS5yZW1vdmVMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1
bWVudC5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVh
ZHknKTtcblx0fVxuXHQvLyBjbGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cg
PSB0ZXN0RWxlbWVudCA9IG51bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRm
b3IgKHZhciBpID0gY2hlY2tzLmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRk
b21yZWFkeSgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5c
bnZhciBwb2xsID0gZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFj
aGVjaygpKSB0aW1lciA9IHNldFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRk
TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4v
LyBkb1Njcm9sbCB0ZWNobmlxdWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53
Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93
cyB3aGVuIHRoZSBET00gaXMgbm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIg
ZG9TY3JvbGxXb3JrcyA9IGZ1bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9T
Y3JvbGwoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuLy8gSWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0
byBkZXRlcm1pbmUgZG9tcmVhZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxl
bWVudC5kb1Njcm9sbCAmJiAhZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3Jv
bGxXb3Jrcyk7XG5cdHNob3VsZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChk
b2N1bWVudC5yZWFkeVN0YXRlKSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUg
PSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0
YXRlID09ICdjb21wbGV0ZScpO1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBk
b2N1bWVudCkgZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5lbHNlIHNob3VsZFBvbGwgPSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5F
bGVtZW50LkV2ZW50cy5kb21yZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRp
ZiAocmVhZHkpIGZuLmNhbGwodGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRv
bXJlYWR5IGZpcmVzIGJlZm9yZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNl
OiAnbG9hZCcsXG5cdG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlz
ID09IHdpbmRvdykgZm4uY2FsbCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigp
e1xuXHRcdGlmICh0aGlzID09IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVs
ZXRlIEVsZW1lbnQuRXZlbnRzLmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59
O1xuXG4vLyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFk
ZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3
aW5kb3csIGRvY3VtZW50KTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8qIE1vb1Rvb2xzOiB0aGUg
amF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmln
aHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE3IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL21v
b3Rvb2xzLm5ldC8pLiovIFxuLyohXG5XZWIgQnVpbGQ6IGh0dHBzOi8vbW9vdG9vbHMubmV0L2Nv
cmUvYnVpbGRlci9lNDI2YTlhZTcxNjdjNTgwN2IxNzNkNWRlZmY2NzNmY1xuKi9cbi8qXG4tLS1c
blxubmFtZTogQ29yZVxuXG5kZXNjcmlwdGlvbjogVGhlIGhlYXJ0IG9mIE1vb1Rvb2xzLlxuXG5s
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIw
MDYtMjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLyku
XG5cbmF1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0dHA6Ly9tb290b29s
cy5uZXQvZGV2ZWxvcGVycy8pXG5cbmluc3BpcmF0aW9uOlxuICAtIENsYXNzIGltcGxlbWVudGF0
aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9n
LzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2FyZHMsIFtHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl
cy9sZ3BsLWxpY2Vuc2UucGhwKVxuICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBpbnNwaXJlZCBieSBb
UHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmlnaHQgKGMpIDIwMDUt
MjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuXG5wcm92aWRlczogW0NvcmUsIE1vb1Rvb2xzLCBU
eXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV1cblxuLi4uXG4qL1xuLyohIE1vb1Rvb2xz
OiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBj
b3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXShodHRw
czovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4qL1xuKGZ1bmN0aW9uKCl7XG5cbnRoaXMuTW9vVG9v
bHMgPSB7XG5cdHZlcnNpb246ICcxLjYuMCcsXG5cdGJ1aWxkOiAnNTI5NDIyODcyYWRmZmY0MDFi
OTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYidcbn07XG5cbi8vIHR5cGVPZiwgaW5zdGFuY2VPZlxuXG52
YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0g
bnVsbCkgcmV0dXJuICdudWxsJztcblx0aWYgKGl0ZW0uJGZhbWlseSAhPSBudWxsKSByZXR1cm4g
aXRlbS4kZmFtaWx5KCk7XG5cblx0aWYgKGl0ZW0ubm9kZU5hbWUpe1xuXHRcdGlmIChpdGVtLm5v
ZGVUeXBlID09IDEpIHJldHVybiAnZWxlbWVudCc7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0g
MykgcmV0dXJuICgvXFxTLykudGVzdChpdGVtLm5vZGVWYWx1ZSkgPyAndGV4dG5vZGUnIDogJ3do
aXRlc3BhY2UnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyl7
XG5cdFx0aWYgKCdjYWxsZWUnIGluIGl0ZW0pIHJldHVybiAnYXJndW1lbnRzJztcblx0XHRpZiAo
J2l0ZW0nIGluIGl0ZW0pIHJldHVybiAnY29sbGVjdGlvbic7XG5cdH1cblxuXHRyZXR1cm4gdHlw
ZW9mIGl0ZW07XG59O1xuXG52YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFuY2VPZiA9IGZ1bmN0
aW9uKGl0ZW0sIG9iamVjdCl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiBmYWxzZTtcblx0
dmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5jb25zdHJ1Y3Rvcjtc
blx0d2hpbGUgKGNvbnN0cnVjdG9yKXtcblx0XHRpZiAoY29uc3RydWN0b3IgPT09IG9iamVjdCkg
cmV0dXJuIHRydWU7XG5cdFx0Y29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5wYXJlbnQ7XG5cdH1c
blx0Lyo8bHRJRTg+Ki9cblx0aWYgKCFpdGVtLmhhc093blByb3BlcnR5KSByZXR1cm4gZmFsc2U7
XG5cdC8qPC9sdElFOD4qL1xuXHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVjdDtcbn07XG5c
bnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5c
bi8qPGx0SUU4PiovXG52YXIgZW51bWVyYWJsZXMgPSB0cnVlO1xuZm9yICh2YXIgaSBpbiB7dG9T
dHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7XG5pZiAoZW51bWVyYWJsZXMpIGVudW1lcmFi
bGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAncHJv
cGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAnY29uc3Ry
dWN0b3InXTtcbmZ1bmN0aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmplY3QsIGZu
LCBiaW5kKXtcblx0aWYgKGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51bWVyYWJsZXMubGVu
Z3RoOyBpLS07KXtcblx0XHR2YXIgayA9IGVudW1lcmFibGVzW2ldO1xuXHRcdC8vIHNpZ25hdHVy
ZSBoYXMga2V5LXZhbHVlLCBzbyBvdmVybG9hZFNldHRlciBjYW4gZGlyZWN0bHkgcGFzcyB0aGVc
blx0XHQvLyBtZXRob2QgZnVuY3Rpb24sIHdpdGhvdXQgc3dhcHBpbmcgYXJndW1lbnRzLlxuXHRc
dGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwoYmluZCwgaywgb2Jq
ZWN0W2tdKTtcblx0fVxufVxuLyo8L2x0SUU4PiovXG5cbi8vIEZ1bmN0aW9uIG92ZXJsb2FkaW5n
XG5cbnZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5v
dmVybG9hZFNldHRlciA9IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztc
blx0cmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmIChhID09IG51bGwpIHJldHVybiB0aGlz
O1xuXHRcdGlmICh1c2VQbHVyYWwgfHwgdHlwZW9mIGEgIT0gJ3N0cmluZycpe1xuXHRcdFx0Zm9y
ICh2YXIgayBpbiBhKSBzZWxmLmNhbGwodGhpcywgaywgYVtrXSk7XG5cdFx0XHQvKjxsdElFOD4q
L1xuXHRcdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KGEsIHNlbGYsIHRoaXMpO1xuXHRc
dFx0Lyo8L2x0SUU4PiovXG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuY2FsbCh0aGlzLCBhLCBi
KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5
cGUub3ZlcmxvYWRHZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRo
aXM7XG5cdHJldHVybiBmdW5jdGlvbihhKXtcblx0XHR2YXIgYXJncywgcmVzdWx0O1xuXHRcdGlm
ICh0eXBlb2YgYSAhPSAnc3RyaW5nJykgYXJncyA9IGE7XG5cdFx0ZWxzZSBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0ZWxzZSBpZiAodXNlUGx1cmFsKSBh
cmdzID0gW2FdO1xuXHRcdGlmIChhcmdzKXtcblx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJnc1tpXV0gPSBzZWxm
LmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IHNlbGYu
Y2FsbCh0aGlzLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn07XG5cbkZ1
bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpc1tr
ZXldID0gdmFsdWU7XG59Lm92ZXJsb2FkU2V0dGVyKCk7XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5p
bXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcblx0dGhpcy5wcm90b3R5cGVba2V5XSA9
IHZhbHVlO1xufS5vdmVybG9hZFNldHRlcigpO1xuXG4vLyBGcm9tXG5cbnZhciBzbGljZSA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZTtcblxuQXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xu
XHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107XG5cdHJldHVybiAoVHlwZS5pc0VudW1lcmFi
bGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVPZihpdGVtKSA9PSAn
YXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dO1xufTtcblxuRnVuY3Rp
b24uY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSAn
ZnVuY3Rpb24nKSA/IGl0ZW0gOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBpdGVtO1xuXHR9O1xu
fTtcblxuXG5OdW1iZXIuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIgbnVtYmVyID0g
cGFyc2VGbG9hdChpdGVtKTtcblx0cmV0dXJuIGlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiBu
dWxsO1xufTtcblxuU3RyaW5nLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJuIGl0
ZW0gKyAnJztcbn07XG5cblxuXG5GdW5jdGlvbi5mcm9tID0gRnVuY3Rpb24uY29udmVydDtcbk51
bWJlci5mcm9tID0gTnVtYmVyLmNvbnZlcnQ7XG5TdHJpbmcuZnJvbSA9IFN0cmluZy5jb252ZXJ0
O1xuXG4vLyBoaWRlLCBwcm90ZWN0XG5cbkZ1bmN0aW9uLmltcGxlbWVudCh7XG5cblx0aGlkZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRoaWRkZW4gPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHByb3RlY3Q6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kcHJvdGVjdGVkID0gdHJ1
ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLy8gVHlwZVxuXG52YXIgVHlwZSA9
IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCl7XG5cdGlmIChuYW1lKXtcblx0XHR2
YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHR5cGVDaGVjayA9IGZ1bmN0
aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gbG93ZXIpO1xuXHRcdH07
XG5cblx0XHRUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVDaGVjaztcblx0XHRpZiAob2JqZWN0ICE9
IG51bGwpe1xuXHRcdFx0b2JqZWN0LnByb3RvdHlwZS4kZmFtaWx5ID0gKGZ1bmN0aW9uKCl7XG5c
dFx0XHRcdHJldHVybiBsb3dlcjtcblx0XHRcdH0pLmhpZGUoKTtcblx0XHRcdFxuXHRcdH1cblx0
fVxuXG5cdGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0b2JqZWN0LmV4dGVu
ZCh0aGlzKTtcblx0b2JqZWN0LiRjb25zdHJ1Y3RvciA9IFR5cGU7XG5cdG9iamVjdC5wcm90b3R5
cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0O1xuXG5cdHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIg
dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5UeXBlLmlzRW51bWVyYWJs
ZSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gKGl0ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRl
bS5sZW5ndGggPT0gJ251bWJlcicgJiYgdG9TdHJpbmcuY2FsbChpdGVtKSAhPSAnW29iamVjdCBG
dW5jdGlvbl0nICk7XG59O1xuXG52YXIgaG9va3MgPSB7fTtcblxudmFyIGhvb2tzT2YgPSBmdW5j
dGlvbihvYmplY3Qpe1xuXHR2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90eXBlKTtcblx0
cmV0dXJuIGhvb2tzW3R5cGVdIHx8IChob29rc1t0eXBlXSA9IFtdKTtcbn07XG5cbnZhciBpbXBs
ZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kICYmIG1ldGhvZC4k
aGlkZGVuKSByZXR1cm47XG5cblx0dmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTtcblxuXHRmb3Ig
KHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgaG9vayA9IGhvb2tz
W2ldO1xuXHRcdGlmICh0eXBlT2YoaG9vaykgPT0gJ3R5cGUnKSBpbXBsZW1lbnQuY2FsbChob29r
LCBuYW1lLCBtZXRob2QpO1xuXHRcdGVsc2UgaG9vay5jYWxsKHRoaXMsIG5hbWUsIG1ldGhvZCk7
XG5cdH1cblxuXHR2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTtcblx0aWYgKHBy
ZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXMucHJvdG90eXBlW25h
bWVdID0gbWV0aG9kO1xuXG5cdGlmICh0aGlzW25hbWVdID09IG51bGwgJiYgdHlwZU9mKG1ldGhv
ZCkgPT0gJ2Z1bmN0aW9uJykgZXh0ZW5kLmNhbGwodGhpcywgbmFtZSwgZnVuY3Rpb24oaXRlbSl7
XG5cdFx0cmV0dXJuIG1ldGhvZC5hcHBseShpdGVtLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkp
O1xuXHR9KTtcbn07XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRp
ZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47XG5cdHZhciBwcmV2aW91cyA9IHRo
aXNbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4kcHJvdGVjdGVk
KSB0aGlzW25hbWVdID0gbWV0aG9kO1xufTtcblxuVHlwZS5pbXBsZW1lbnQoe1xuXG5cdGltcGxl
bWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0ZXh0ZW5kOiBleHRlbmQub3Zl
cmxvYWRTZXR0ZXIoKSxcblxuXHRhbGlhczogZnVuY3Rpb24obmFtZSwgZXhpc3Rpbmcpe1xuXHRc
dGltcGxlbWVudC5jYWxsKHRoaXMsIG5hbWUsIHRoaXMucHJvdG90eXBlW2V4aXN0aW5nXSk7XG5c
dH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRtaXJyb3I6IGZ1bmN0aW9uKGhvb2spe1xuXHRcdGhv
b2tzT2YodGhpcykucHVzaChob29rKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
bmV3IFR5cGUoJ1R5cGUnLCBUeXBlKTtcblxuLy8gRGVmYXVsdCBUeXBlc1xuXG52YXIgZm9yY2Ug
PSBmdW5jdGlvbihuYW1lLCBvYmplY3QsIG1ldGhvZHMpe1xuXHR2YXIgaXNUeXBlID0gKG9iamVj
dCAhPSBPYmplY3QpLFxuXHRcdHByb3RvdHlwZSA9IG9iamVjdC5wcm90b3R5cGU7XG5cblx0aWYg
KGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTtcblxuXHRmb3IgKHZhciBp
ID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHR2YXIga2V5ID0gbWV0
aG9kc1tpXSxcblx0XHRcdGdlbmVyaWMgPSBvYmplY3Rba2V5XSxcblx0XHRcdHByb3RvID0gcHJv
dG90eXBlW2tleV07XG5cblx0XHRpZiAoZ2VuZXJpYykgZ2VuZXJpYy5wcm90ZWN0KCk7XG5cdFx0
aWYgKGlzVHlwZSAmJiBwcm90bykgb2JqZWN0LmltcGxlbWVudChrZXksIHByb3RvLnByb3RlY3Qo
KSk7XG5cdH1cblxuXHRpZiAoaXNUeXBlKXtcblx0XHR2YXIgbWV0aG9kc0VudW1lcmFibGUgPSBw
cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUobWV0aG9kc1swXSk7XG5cdFx0b2JqZWN0LmZv
ckVhY2hNZXRob2QgPSBmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoIW1ldGhvZHNFbnVtZXJhYmxl
KSBmb3IgKHZhciBpID0gMCwgbCA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRc
dFx0Zm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVttZXRob2RzW2ldXSwgbWV0aG9kc1tpXSk7
XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gcHJvdG90eXBlKSBmbi5jYWxsKHByb3Rv
dHlwZSwgcHJvdG90eXBlW2tleV0sIGtleSk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBmb3Jj
ZTtcbn07XG5cbmZvcmNlKCdTdHJpbmcnLCBTdHJpbmcsIFtcblx0J2NoYXJBdCcsICdjaGFyQ29k
ZUF0JywgJ2NvbmNhdCcsICdjb250YWlucycsICdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ21h
dGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNoJyxcblx0J3NsaWNlJywgJ3NwbGl0Jywg
J3N1YnN0cicsICdzdWJzdHJpbmcnLCAndHJpbScsICd0b0xvd2VyQ2FzZScsICd0b1VwcGVyQ2Fz
ZSdcbl0pKCdBcnJheScsIEFycmF5LCBbXG5cdCdwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnLFxuXHQnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdmaWx0ZXInLCAnZm9yRWFjaCcsICdl
dmVyeScsICdtYXAnLCAnc29tZScsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAnY29udGFpbnMn
XG5dKSgnTnVtYmVyJywgTnVtYmVyLCBbXG5cdCd0b0V4cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAn
dG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nXG5dKSgnRnVuY3Rpb24nLCBGdW5jdGlvbiwg
W1xuXHQnYXBwbHknLCAnY2FsbCcsICdiaW5kJ1xuXSkoJ1JlZ0V4cCcsIFJlZ0V4cCwgW1xuXHQn
ZXhlYycsICd0ZXN0J1xuXSkoJ09iamVjdCcsIE9iamVjdCwgW1xuXHQnY3JlYXRlJywgJ2RlZmlu
ZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAna2V5cycsXG5cdCdnZXRQcm90b3R5cGVP
ZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsXG5c
dCdwcmV2ZW50RXh0ZW5zaW9ucycsICdpc0V4dGVuc2libGUnLCAnc2VhbCcsICdpc1NlYWxlZCcs
ICdmcmVlemUnLCAnaXNGcm96ZW4nXG5dKSgnRGF0ZScsIERhdGUsIFsnbm93J10pO1xuXG5PYmpl
Y3QuZXh0ZW5kID0gZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCk7XG5cbkRhdGUuZXh0ZW5kKCdub3cn
LCBmdW5jdGlvbigpe1xuXHRyZXR1cm4gKyhuZXcgRGF0ZSk7XG59KTtcblxubmV3IFR5cGUoJ0Jv
b2xlYW4nLCBCb29sZWFuKTtcblxuLy8gZml4ZXMgTmFOIHJldHVybmluZyBhcyBOdW1iZXJcblxu
TnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXtcblx0cmV0dXJuIGlzRmluaXRl
KHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7XG59LmhpZGUoKTtcblxuLy8gTnVtYmVyLnJhbmRv
bVxuXG5OdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1heCl7XG5cdHJldHVy
biBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xufSk7
XG5cbi8vIGZvckVhY2gsIGVhY2gsIGtleXNcblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwh
RVM1PiovXG5cdGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIGZu
LmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxuXHQvKjwvIUVTNT4q
L1xuXG5cdGVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHRBcnJheS5mb3JFYWNoKHRoaXMs
IGZuLCBiaW5kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuT2JqZWN0LmV4dGVu
ZCh7XG5cblx0a2V5czogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIga2V5cyA9IFtdO1xuXHRc
dGZvciAodmFyIGsgaW4gb2JqZWN0KXtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
amVjdCwgaykpIGtleXMucHVzaChrKTtcblx0XHR9XG5cdFx0Lyo8bHRJRTg+Ki9cblx0XHRmb3JF
YWNoT2JqZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmdW5jdGlvbihrKXtcblx0XHRcdGtleXMu
cHVzaChrKTtcblx0XHR9KTtcblx0XHQvKjwvbHRJRTg+Ki9cblx0XHRyZXR1cm4ga2V5cztcblx0
fSxcblxuXHRmb3JFYWNoOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHRPYmplY3Qu
a2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdGZuLmNhbGwoYmluZCwg
b2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9KTtcblx0fVxuXG59KTtcblxuT2JqZWN0
LmVhY2ggPSBPYmplY3QuZm9yRWFjaDtcblxuXG4vLyBBcnJheSAmIE9iamVjdCBjbG9uaW5nLCBP
YmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nXG5cbnZhciBjbG9uZU9mID0gZnVuY3Rpb24oaXRl
bSl7XG5cdHN3aXRjaCAodHlwZU9mKGl0ZW0pKXtcblx0XHRjYXNlICdhcnJheSc6IHJldHVybiBp
dGVtLmNsb25lKCk7XG5cdFx0Y2FzZSAnb2JqZWN0JzogcmV0dXJuIE9iamVjdC5jbG9uZShpdGVt
KTtcblx0XHRkZWZhdWx0OiByZXR1cm4gaXRlbTtcblx0fVxufTtcblxuQXJyYXkuaW1wbGVtZW50
KCdjbG9uZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBpID0gdGhpcy5sZW5ndGgsIGNsb25lID0gbmV3
IEFycmF5KGkpO1xuXHR3aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2YodGhpc1tpXSk7XG5c
dHJldHVybiBjbG9uZTtcbn0pO1xuXG52YXIgbWVyZ2VPbmUgPSBmdW5jdGlvbihzb3VyY2UsIGtl
eSwgY3VycmVudCl7XG5cdHN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXtcblx0XHRjYXNlICdvYmpl
Y3QnOlxuXHRcdFx0aWYgKHR5cGVPZihzb3VyY2Vba2V5XSkgPT0gJ29iamVjdCcpIE9iamVjdC5t
ZXJnZShzb3VyY2Vba2V5XSwgY3VycmVudCk7XG5cdFx0XHRlbHNlIHNvdXJjZVtrZXldID0gT2Jq
ZWN0LmNsb25lKGN1cnJlbnQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXknOiBzb3Vy
Y2Vba2V5XSA9IGN1cnJlbnQuY2xvbmUoKTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogc291cmNlW2tl
eV0gPSBjdXJyZW50O1xuXHR9XG5cdHJldHVybiBzb3VyY2U7XG59O1xuXG5PYmplY3QuZXh0ZW5k
KHtcblxuXHRtZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXtcblx0XHRpZiAodHlwZU9mKGsp
ID09ICdzdHJpbmcnKSByZXR1cm4gbWVyZ2VPbmUoc291cmNlLCBrLCB2KTtcblx0XHRmb3IgKHZh
ciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIG9i
amVjdCA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1lcmdl
T25lKHNvdXJjZSwga2V5LCBvYmplY3Rba2V5XSk7XG5cdFx0fVxuXHRcdHJldHVybiBzb3VyY2U7
XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKG9iamVjdCl7XG5cdFx0dmFyIGNsb25lID0ge307
XG5cdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgY2xvbmVba2V5XSA9IGNsb25lT2Yob2JqZWN0
W2tleV0pO1xuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKG9y
aWdpbmFsKXtcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBs
OyBpKyspe1xuXHRcdFx0dmFyIGV4dGVuZGVkID0gYXJndW1lbnRzW2ldIHx8IHt9O1xuXHRcdFx0
Zm9yICh2YXIga2V5IGluIGV4dGVuZGVkKSBvcmlnaW5hbFtrZXldID0gZXh0ZW5kZWRba2V5XTtc
blx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsO1xuXHR9XG5cbn0pO1xuXG4vLyBPYmplY3QtbGVz
cyB0eXBlc1xuXG5bJ09iamVjdCcsICdXaGl0ZVNwYWNlJywgJ1RleHROb2RlJywgJ0NvbGxlY3Rp
b24nLCAnQXJndW1lbnRzJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0bmV3IFR5cGUobmFtZSk7
XG59KTtcblxuLy8gVW5pcXVlIElEXG5cbnZhciBVSUQgPSBEYXRlLm5vdygpO1xuXG5TdHJpbmcu
ZXh0ZW5kKCd1bmlxdWVJRCcsIGZ1bmN0aW9uKCl7XG5cdHJldHVybiAoVUlEKyspLnRvU3RyaW5n
KDM2KTtcbn0pO1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBBcnJheVxuXG5kZXNj
cmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gsIGNvbnRhaW5zLCBh
bmQgZXJhc2UuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1R5
cGVdXG5cbnByb3ZpZGVzOiBBcnJheVxuXG4uLi5cbiovXG5cbkFycmF5LmltcGxlbWVudCh7XG5c
blx0Lyo8IUVTNT4qL1xuXHRldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChp
IGluIHRoaXMpICYmICFmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpKSByZXR1cm4gZmFs
c2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24o
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0gW107XG5cdFx0Zm9yICh2YXIgdmFsdWUsIGkg
PSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspIGlmIChpIGluIHRoaXMpe1xu
XHRcdFx0dmFsdWUgPSB0aGlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFsdWUsIGks
IHRoaXMpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztc
blx0fSxcblxuXHRpbmRleE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHR2YXIgbGVuZ3Ro
ID0gdGhpcy5sZW5ndGggPj4+IDA7XG5cdFx0Zm9yICh2YXIgaSA9IChmcm9tIDwgMCkgPyBNYXRo
Lm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0aDsgaSsrKXtcblx0
XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0dXJuIC0x
O1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdHZhciBsZW5ndGggPSB0
aGlzLmxlbmd0aCA+Pj4gMCwgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG5cdFx0Zm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSByZXN1bHRzW2ld
ID0gZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJl
c3VsdHM7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKChp
IGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiB0cnVl
O1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0Y2xl
YW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe1xu
XHRcdFx0cmV0dXJuIGl0ZW0gIT0gbnVsbDtcblx0XHR9KTtcblx0fSxcblxuXHRpbnZva2U6IGZ1
bmN0aW9uKG1ldGhvZE5hbWUpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRz
LCAxKTtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4g
aXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdzKTtcblx0XHR9KTtcblx0fSxcblxuXHRh
c3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpe1xuXHRcdHZhciBvYmogPSB7fSwgbGVuZ3RoID0gTWF0
aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSBvYmpba2V5c1tpXV0gPSB0aGlzW2ldO1xuXHRcdHJldHVybiBvYmo7XG5c
dH0sXG5cblx0bGluazogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5c
dFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRm
b3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHRcdFx0aWYgKG9iamVjdFtrZXldKHRoaXNbaV0p
KXtcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHRoaXNbaV07XG5cdFx0XHRcdFx0ZGVsZXRlIG9i
amVjdFtrZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKGl0ZW0sIGZy
b20pe1xuXHRcdHJldHVybiB0aGlzLmluZGV4T2YoaXRlbSwgZnJvbSkgIT0gLTE7XG5cdH0sXG5c
blx0YXBwZW5kOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFy
cmF5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRMYXN0OiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIDogbnVsbDtc
blx0fSxcblxuXHRnZXRSYW5kb206IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxlbmd0
aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0gOiBudWxsO1xuXHR9
LFxuXG5cdGluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICghdGhpcy5jb250YWlucyhp
dGVtKSkgdGhpcy5wdXNoKGl0ZW0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbWJp
bmU6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0
aDsgaSA8IGw7IGkrKykgdGhpcy5pbmNsdWRlKGFycmF5W2ldKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRlcmFzZTogZnVuY3Rpb24oaXRlbSl7XG5cdFx0Zm9yICh2YXIgaSA9IHRoaXMu
bGVuZ3RoOyBpLS07KXtcblx0XHRcdGlmICh0aGlzW2ldID09PSBpdGVtKSB0aGlzLnNwbGljZShp
LCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9u
KCl7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZs
YXR0ZW46IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgdHlwZSA9IHR5cGVP
Zih0aGlzW2ldKTtcblx0XHRcdGlmICh0eXBlID09ICdudWxsJykgY29udGludWU7XG5cdFx0XHRh
cnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ2NvbGxlY3Rp
b24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlzW2ldLCBBcnJheSkp
ID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNbaV0pO1xuXHRcdH1cblx0XHRyZXR1cm4g
YXJyYXk7XG5cdH0sXG5cblx0cGljazogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICh0aGlzW2ldICE9IG51bGwp
IHJldHVybiB0aGlzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRoZXhU
b1JnYjogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCAhPSAzKSByZXR1cm4g
bnVsbDtcblx0XHR2YXIgcmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0aWYg
KHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybiBwYXJzZUlu
dCh2YWx1ZSwgMTYpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoYXJyYXkpID8gcmdiIDogJ3JnYign
ICsgcmdiICsgJyknO1xuXHR9LFxuXG5cdHJnYlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0
aWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRoaXMubGVuZ3RoID09
IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3BhcmVudCc7XG5cdFx0
dmFyIGhleCA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKXtcblx0XHRcdHZh
ciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2KTtcblx0XHRcdGhleC5wdXNoKChiaXQu
bGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhcnJh
eSkgPyBoZXggOiAnIycgKyBoZXguam9pbignJyk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0t
XG5cbm5hbWU6IEZ1bmN0aW9uXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBGdW5jdGlvbiBQcm90
b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuXG5cbmxpY2Vuc2U6IE1J
VC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogRnVuY3Rpb25c
blxuLi4uXG4qL1xuXG5GdW5jdGlvbi5leHRlbmQoe1xuXG5cdGF0dGVtcHQ6IGZ1bmN0aW9uKCl7
XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtc
blx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhcmd1bWVudHNbaV0oKTtcblx0XHRcdH0gY2F0
Y2ggKGUpe31cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxufSk7XG5cbkZ1bmN0aW9u
LmltcGxlbWVudCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oYXJncywgYmluZCl7XG5cdFx0dHJ5
IHtcblx0XHRcdHJldHVybiB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZlcnQoYXJncykpO1xu
XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdC8qPCFFUzUt
YmluZD4qL1xuXHRiaW5kOiBmdW5jdGlvbih0aGF0KXtcblx0XHR2YXIgc2VsZiA9IHRoaXMsXG5c
dFx0XHRhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGljZShhcmd1bWVudHMs
IDEpIDogbnVsbCxcblx0XHRcdEYgPSBmdW5jdGlvbigpe307XG5cblx0XHR2YXIgYm91bmQgPSBm
dW5jdGlvbigpe1xuXHRcdFx0dmFyIGNvbnRleHQgPSB0aGF0LCBsZW5ndGggPSBhcmd1bWVudHMu
bGVuZ3RoO1xuXHRcdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCl7XG5cdFx0XHRcdEYucHJv
dG90eXBlID0gc2VsZi5wcm90b3R5cGU7XG5cdFx0XHRcdGNvbnRleHQgPSBuZXcgRjtcblx0XHRc
dH1cblx0XHRcdHZhciByZXN1bHQgPSAoIWFyZ3MgJiYgIWxlbmd0aClcblx0XHRcdFx0PyBzZWxm
LmNhbGwoY29udGV4dClcblx0XHRcdFx0OiBzZWxmLmFwcGx5KGNvbnRleHQsIGFyZ3MgJiYgbGVu
Z3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBhcmdzIHx8IGFyZ3Vt
ZW50cyk7XG5cdFx0XHRyZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0IDogY29udGV4dDtc
blx0XHR9O1xuXHRcdHJldHVybiBib3VuZDtcblx0fSxcblx0Lyo8LyFFUzUtYmluZD4qL1xuXG5c
dHBhc3M6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRp
ZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRyZXR1cm4g
ZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBzZWxmLmFwcGx5KGJpbmQsIGFyZ3MgfHwgYXJndW1l
bnRzKTtcblx0XHR9O1xuXHR9LFxuXG5cdGRlbGF5OiBmdW5jdGlvbihkZWxheSwgYmluZCwgYXJn
cyl7XG5cdFx0cmV0dXJuIHNldFRpbWVvdXQodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6
IGFyZ3MpLCBiaW5kKSwgZGVsYXkpO1xuXHR9LFxuXG5cdHBlcmlvZGljYWw6IGZ1bmN0aW9uKHBl
cmlvZGljYWwsIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRJbnRlcnZhbCh0aGlzLnBhc3Mo
KGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBwZXJpb2RpY2FsKTtcblx0fVxuXG59
KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogTnVtYmVyXG5cbmRlc2NyaXB0aW9uOiBDb250YWlu
cyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMsIGFuZCBjZWlsLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFR5cGVcblxucHJvdmlk
ZXM6IE51bWJlclxuXG4uLi5cbiovXG5cbk51bWJlci5pbXBsZW1lbnQoe1xuXG5cdGxpbWl0OiBm
dW5jdGlvbihtaW4sIG1heCl7XG5cdFx0cmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWlu
LCB0aGlzKSk7XG5cdH0sXG5cblx0cm91bmQ6IGZ1bmN0aW9uKHByZWNpc2lvbil7XG5cdFx0cHJl
Y2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVkKHByZWNpc2lvbiA8
IDAgPyAtcHJlY2lzaW9uIDogMCk7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQodGhpcyAqIHByZWNp
c2lvbikgLyBwcmVjaXNpb247XG5cdH0sXG5cblx0dGltZXM6IGZ1bmN0aW9uKGZuLCBiaW5kKXtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChiaW5kLCBpLCB0aGlz
KTtcblx0fSxcblxuXHR0b0Zsb2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0
KHRoaXMpO1xuXHR9LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFy
c2VJbnQodGhpcywgYmFzZSB8fCAxMCk7XG5cdH1cblxufSk7XG5cbk51bWJlci5hbGlhcygnZWFj
aCcsICd0aW1lcycpO1xuXG4oZnVuY3Rpb24obWF0aCl7XG5cbnZhciBtZXRob2RzID0ge307XG5c
bm1hdGguZWFjaChmdW5jdGlvbihuYW1lKXtcblx0aWYgKCFOdW1iZXJbbmFtZV0pIG1ldGhvZHNb
bmFtZV0gPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBNYXRoW25hbWVdLmFwcGx5KG51bGwsIFt0
aGlzXS5jb25jYXQoQXJyYXkuY29udmVydChhcmd1bWVudHMpKSk7XG5cdH07XG59KTtcblxuTnVt
YmVyLmltcGxlbWVudChtZXRob2RzKTtcblxufSkoWydhYnMnLCAnYWNvcycsICdhc2luJywgJ2F0
YW4nLCAnYXRhbjInLCAnY2VpbCcsICdjb3MnLCAnZXhwJywgJ2Zsb29yJywgJ2xvZycsICdtYXgn
LCAnbWluJywgJ3BvdycsICdzaW4nLCAnc3FydCcsICd0YW4nXSk7XG5cbi8qXG4tLS1cblxubmFt
ZTogU3RyaW5nXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJvdG90eXBlcyBsaWtl
IGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlLCBBcnJheV1cblxucHJvdmlkZXM6IFN0
cmluZ1xuXG4uLi5cbiovXG5cblN0cmluZy5pbXBsZW1lbnQoe1xuXG5cdC8vPCFFUzY+XG5cdGNv
bnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIGluZGV4KXtcblx0XHRyZXR1cm4gKGluZGV4ID8gU3Ry
aW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhPZihzdHJpbmcpID4g
LTE7XG5cdH0sXG5cdC8vPC8hRVM2PlxuXG5cdHRlc3Q6IGZ1bmN0aW9uKHJlZ2V4LCBwYXJhbXMp
e1xuXHRcdHJldHVybiAoKHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8gcmVnZXggOiBuZXcg
UmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7XG5cdH0sXG5cblx0dHJpbTog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15cXHMrfFxccysk
L2csICcnKTtcblx0fSxcblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5n
KHRoaXMpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5cdH0sXG5cblx0Y2FtZWxDYXNl
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvLVxcRC9nLCBm
dW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNl
KCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aHlwaGVuYXRlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0
cmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0fSk7XG5c
dH0sXG5cblx0Y2FwaXRhbGl6ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UoL1xcYlthLXpdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiBtYXRj
aC50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGVzY2FwZVJlZ0V4cDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xc
XVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cdH0sXG5cblx0dG9JbnQ6IGZ1bmN0aW9uKGJhc2Up
e1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTtcblx0fSxcblxuXHR0b0Zs
b2F0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KHRoaXMpO1xuXHR9LFxuXG5c
dGhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIGhleCA9IFN0cmluZyh0aGlzKS5t
YXRjaCgvXiM/KFxcd3sxLDJ9KShcXHd7MSwyfSkoXFx3ezEsMn0pJC8pO1xuXHRcdHJldHVybiAo
aGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHJn
YlRvSGV4OiBmdW5jdGlvbihhcnJheSl7XG5cdFx0dmFyIHJnYiA9IFN0cmluZyh0aGlzKS5tYXRj
aCgvXFxkezEsM30vZyk7XG5cdFx0cmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSGV4KGFycmF5KSA6
IG51bGw7XG5cdH0sXG5cblx0c3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdleHApe1xu
XHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZShyZWdleHAgfHwgKC9cXFxcP1xceyhbXnt9
XSspXFx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7XG5cdFx0XHRpZiAobWF0Y2guY2hhckF0
KDApID09ICdcXFxcJykgcmV0dXJuIG1hdGNoLnNsaWNlKDEpO1xuXHRcdFx0cmV0dXJuIChvYmpl
Y3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0gOiAnJztcblx0XHR9KTtcblx0fVxuXG59
KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogQnJvd3NlclxuXG5kZXNjcmlwdGlvbjogVGhlIEJy
b3dzZXIgT2JqZWN0LiBDb250YWlucyBCcm93c2VyIGluaXRpYWxpemF0aW9uLCBXaW5kb3cgYW5k
IERvY3VtZW50LCBhbmQgdGhlIEJyb3dzZXIgSGFzaC5cblxubGljZW5zZTogTUlULXN0eWxlIGxp
Y2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIEZ1bmN0aW9uLCBOdW1iZXIsIFN0cmluZ11cblxu
cHJvdmlkZXM6IFtCcm93c2VyLCBXaW5kb3csIERvY3VtZW50XVxuXG4uLi5cbiovXG5cbihmdW5j
dGlvbigpe1xuXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xudmFyIHdpbmRvdyA9IGRv
Y3VtZW50LndpbmRvdyA9IHRoaXM7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKHVhLCBwbGF0Zm9y
bSl7XG5cdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcblx0cGxhdGZvcm0gPSAocGxhdGZvcm0gPyBw
bGF0Zm9ybS50b0xvd2VyQ2FzZSgpIDogJycpO1xuXG5cdC8vIGNocm9tZSBpcyBpbmNsdWRlZCBp
biB0aGUgZWRnZSBVQSwgc28gbmVlZCB0byBjaGVjayBmb3IgZWRnZSBmaXJzdCxcblx0Ly8gYmVm
b3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLlxuXHR2YXIgVUEgPSB1YS5tYXRjaCgvKGVkZ2Up
W1xcc1xcLzpdKFtcXHdcXGRcXC5dKykvKTtcblx0aWYgKCFVQSl7XG5cdFx0VUEgPSB1YS5tYXRj
aCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVyc2lvbilbXFxzXFwv
Ol0oW1xcd1xcZFxcLl0rKT8uKj8oc2FmYXJpfCg/OnJ2W1xcc1xcLzpdfHZlcnNpb25bXFxzXFwv
Ol0pKFtcXHdcXGRcXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXTtcblx0fVxuXG5c
dGlmIChVQVsxXSA9PSAndHJpZGVudCcpe1xuXHRcdFVBWzFdID0gJ2llJztcblx0XHRpZiAoVUFb
NF0pIFVBWzJdID0gVUFbNF07XG5cdH0gZWxzZSBpZiAoVUFbMV0gPT0gJ2NyaW9zJyl7XG5cdFx0
VUFbMV0gPSAnY2hyb21lJztcblx0fVxuXG5cdHBsYXRmb3JtID0gdWEubWF0Y2goL2lwKD86YWR8
b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRyb2lkKS8pIHx8IHVh
Lm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhlciddKVswXTtcblx0aWYgKHBsYXRmb3Jt
ID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJztcblxuXHRyZXR1cm4ge1xuXHRcdGV4dGVu
ZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxcblx0XHRuYW1lOiAoVUFbMV0gPT0gJ3ZlcnNp
b24nKSA/IFVBWzNdIDogVUFbMV0sXG5cdFx0dmVyc2lvbjogcGFyc2VGbG9hdCgoVUFbMV0gPT0g
J29wZXJhJyAmJiBVQVs0XSkgPyBVQVs0XSA6IFVBWzJdKSxcblx0XHRwbGF0Zm9ybTogcGxhdGZv
cm1cblx0fTtcbn07XG5cbnZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0gcGFyc2UobmF2aWdh
dG9yLnVzZXJBZ2VudCwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuaWYgKEJyb3dzZXIubmFtZSA9
PSAnaWUnICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSl7XG5cdEJyb3dzZXIudmVyc2lvbiA9IGRv
Y3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuQnJvd3Nlci5leHRlbmQoe1xuXHRGZWF0dXJlczog
e1xuXHRcdHhwYXRoOiAhIShkb2N1bWVudC5ldmFsdWF0ZSksXG5cdFx0YWlyOiAhISh3aW5kb3cu
cnVudGltZSksXG5cdFx0cXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpLFxuXHRcdGpz
b246ICEhKHdpbmRvdy5KU09OKVxuXHR9LFxuXHRwYXJzZVVBOiBwYXJzZVxufSk7XG5cblxuXG4v
LyBSZXF1ZXN0XG5cbkJyb3dzZXIuUmVxdWVzdCA9IChmdW5jdGlvbigpe1xuXG5cdHZhciBYTUxI
VFRQID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdH07
XG5cblx0dmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2Jq
ZWN0KCdNU1hNTDIuWE1MSFRUUCcpO1xuXHR9O1xuXG5cdHZhciBNU1hNTCA9IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuXHR9
O1xuXG5cdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdFx0WE1MSFRUUCgp
O1xuXHRcdHJldHVybiBYTUxIVFRQO1xuXHR9LCBmdW5jdGlvbigpe1xuXHRcdE1TWE1MMigpO1xu
XHRcdHJldHVybiBNU1hNTDI7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwoKTtcblx0XHRy
ZXR1cm4gTVNYTUw7XG5cdH0pO1xuXG59KSgpO1xuXG5Ccm93c2VyLkZlYXR1cmVzLnhociA9ICEh
KEJyb3dzZXIuUmVxdWVzdCk7XG5cblxuXG4vLyBTdHJpbmcgc2NyaXB0c1xuXG5Ccm93c2VyLmV4
ZWMgPSBmdW5jdGlvbih0ZXh0KXtcblx0aWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcblx0aWYgKHdp
bmRvdy5leGVjU2NyaXB0KXtcblx0XHR3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTtcblx0fSBlbHNl
IHtcblx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5c
dFx0c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRz
Y3JpcHQudGV4dCA9IHRleHQ7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQp
O1xuXHRcdGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0fVxuXHRyZXR1cm4g
dGV4dDtcbn07XG5cblN0cmluZy5pbXBsZW1lbnQoJ3N0cmlwU2NyaXB0cycsIGZ1bmN0aW9uKGV4
ZWMpe1xuXHR2YXIgc2NyaXB0cyA9ICcnO1xuXHR2YXIgdGV4dCA9IHRoaXMucmVwbGFjZSgvPHNj
cmlwdFtePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUp
e1xuXHRcdHNjcmlwdHMgKz0gY29kZSArICdcXG4nO1xuXHRcdHJldHVybiAnJztcblx0fSk7XG5c
dGlmIChleGVjID09PSB0cnVlKSBCcm93c2VyLmV4ZWMoc2NyaXB0cyk7XG5cdGVsc2UgaWYgKHR5
cGVPZihleGVjKSA9PSAnZnVuY3Rpb24nKSBleGVjKHNjcmlwdHMsIHRleHQpO1xuXHRyZXR1cm4g
dGV4dDtcbn0pO1xuXG4vLyBXaW5kb3csIERvY3VtZW50XG5cbkJyb3dzZXIuZXh0ZW5kKHtcblx0
RG9jdW1lbnQ6IHRoaXMuRG9jdW1lbnQsXG5cdFdpbmRvdzogdGhpcy5XaW5kb3csXG5cdEVsZW1l
bnQ6IHRoaXMuRWxlbWVudCxcblx0RXZlbnQ6IHRoaXMuRXZlbnRcbn0pO1xuXG50aGlzLldpbmRv
dyA9IHRoaXMuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ1dpbmRvdycsIGZ1bmN0aW9uKCl7fSk7
XG5cbnRoaXMuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ3dpbmRvdycpLmhpZGUoKTtcblxu
V2luZG93Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHR3aW5kb3dbbmFtZV0gPSBt
ZXRob2Q7XG59KTtcblxudGhpcy5Eb2N1bWVudCA9IGRvY3VtZW50LiRjb25zdHJ1Y3RvciA9IG5l
dyBUeXBlKCdEb2N1bWVudCcsIGZ1bmN0aW9uKCl7fSk7XG5cbmRvY3VtZW50LiRmYW1pbHkgPSBG
dW5jdGlvbi5jb252ZXJ0KCdkb2N1bWVudCcpLmhpZGUoKTtcblxuRG9jdW1lbnQubWlycm9yKGZ1
bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGRvY3VtZW50W25hbWVdID0gbWV0aG9kO1xufSk7XG5c
bmRvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5pZiAoIWRvY3VtZW50
LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVh
ZCcpWzBdO1xuXG5pZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7XG5cdGRvY3VtZW50LmV4
ZWNDb21tYW5kKCdCYWNrZ3JvdW5kSW1hZ2VDYWNoZScsIGZhbHNlLCB0cnVlKTtcbn0gY2F0Y2gg
KGUpe31cblxuLyo8bHRJRTk+Ki9cbmlmICh0aGlzLmF0dGFjaEV2ZW50ICYmICF0aGlzLmFkZEV2
ZW50TGlzdGVuZXIpe1xuXHR2YXIgdW5sb2FkRXZlbnQgPSBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
ZGV0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xuXHRcdGRvY3VtZW50LmhlYWQg
PSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDtcblx0XHR3aW5kb3cgPSB0
aGlzLldpbmRvdyA9IGRvY3VtZW50ID0gbnVsbDtcblx0fTtcblx0dGhpcy5hdHRhY2hFdmVudCgn
b251bmxvYWQnLCB1bmxvYWRFdmVudCk7XG59XG5cbi8vIElFIGZhaWxzIG9uIGNvbGxlY3Rpb25z
IGFuZCA8c2VsZWN0Pi5vcHRpb25zIChyZWZlcnMgdG8gPHNlbGVjdD4pXG52YXIgYXJyYXlGcm9t
ID0gQXJyYXkuY29udmVydDtcbnRyeSB7XG5cdGFycmF5RnJvbShkb2N1bWVudC5odG1sLmNoaWxk
Tm9kZXMpO1xufSBjYXRjaCAoZSl7XG5cdEFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtc
blx0XHRpZiAodHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycgJiYgVHlwZS5pc0VudW1lcmFibGUoaXRl
bSkgJiYgdHlwZU9mKGl0ZW0pICE9ICdhcnJheScpe1xuXHRcdFx0dmFyIGkgPSBpdGVtLmxlbmd0
aCwgYXJyYXkgPSBuZXcgQXJyYXkoaSk7XG5cdFx0XHR3aGlsZSAoaS0tKSBhcnJheVtpXSA9IGl0
ZW1baV07XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheUZyb20o
aXRlbSk7XG5cdH07XG5cblx0dmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSxcblx0XHRz
bGljZSA9IHByb3RvdHlwZS5zbGljZTtcblx0Wydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3No
aWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xp
Y2UnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSBwcm90b3R5cGVbbmFt
ZV07XG5cdFx0QXJyYXlbbmFtZV0gPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBtZXRo
b2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtc
blx0XHR9O1xuXHR9KTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxuLypcbi0tLVxu
XG5uYW1lOiBDbGFzc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9u
IGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGluZyByZXVzYWJs
ZSBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtB
cnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXVxuXG5wcm92aWRlczogQ2xhc3NcblxuLi4u
XG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIENsYXNzID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBl
KCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7XG5cdGlmIChpbnN0YW5jZU9mKHBhcmFtcywgRnVu
Y3Rpb24pKSBwYXJhbXMgPSB7aW5pdGlhbGl6ZTogcGFyYW1zfTtcblxuXHR2YXIgbmV3Q2xhc3Mg
PSBmdW5jdGlvbigpe1xuXHRcdHJlc2V0KHRoaXMpO1xuXHRcdGlmIChuZXdDbGFzcy4kcHJvdG90
eXBpbmcpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IG51bGw7XG5cdFx0dGhpcy4k
ZmFtaWx5ID0gbnVsbDtcblx0XHR2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXplKSA/IHRoaXMu
aW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcztcblx0XHR0aGlzLiRjYWxs
ZXIgPSB0aGlzLmNhbGxlciA9IG51bGw7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LmV4dGVuZCh0
aGlzKS5pbXBsZW1lbnQocGFyYW1zKTtcblxuXHRuZXdDbGFzcy4kY29uc3RydWN0b3IgPSBDbGFz
cztcblx0bmV3Q2xhc3MucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG5ld0NsYXNzO1xuXHRuZXdD
bGFzcy5wcm90b3R5cGUucGFyZW50ID0gcGFyZW50O1xuXG5cdHJldHVybiBuZXdDbGFzcztcbn0p
O1xuXG52YXIgcGFyZW50ID0gZnVuY3Rpb24oKXtcblx0aWYgKCF0aGlzLiRjYWxsZXIpIHRocm93
IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcInBhcmVudFwiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5c
dHZhciBuYW1lID0gdGhpcy4kY2FsbGVyLiRuYW1lLFxuXHRcdHBhcmVudCA9IHRoaXMuJGNhbGxl
ci4kb3duZXIucGFyZW50LFxuXHRcdHByZXZpb3VzID0gKHBhcmVudCkgPyBwYXJlbnQucHJvdG90
eXBlW25hbWVdIDogbnVsbDtcblx0aWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVycm9yKCdUaGUg
bWV0aG9kIFwiJyArIG5hbWUgKyAnXCIgaGFzIG5vIHBhcmVudC4nKTtcblx0cmV0dXJuIHByZXZp
b3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgcmVzZXQgPSBmdW5jdGlvbihv
YmplY3Qpe1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXtcblx0XHR2YXIgdmFsdWUgPSBvYmpl
Y3Rba2V5XTtcblx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0Y2FzZSAnb2JqZWN0
Jzpcblx0XHRcdFx0dmFyIEYgPSBmdW5jdGlvbigpe307XG5cdFx0XHRcdEYucHJvdG90eXBlID0g
dmFsdWU7XG5cdFx0XHRcdG9iamVjdFtrZXldID0gcmVzZXQobmV3IEYpO1xuXHRcdFx0XHRicmVh
aztcblx0XHRcdGNhc2UgJ2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5jbG9uZSgpOyBicmVh
aztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB3cmFwID0gZnVuY3Rp
b24oc2VsZiwga2V5LCBtZXRob2Qpe1xuXHRpZiAobWV0aG9kLiRvcmlnaW4pIG1ldGhvZCA9IG1l
dGhvZC4kb3JpZ2luO1xuXHR2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKG1ldGhv
ZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1Ro
ZSBtZXRob2QgXCInICsga2V5ICsgJ1wiIGNhbm5vdCBiZSBjYWxsZWQuJyk7XG5cdFx0dmFyIGNh
bGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyO1xuXHRcdHRoaXMuY2Fs
bGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3JhcHBlcjtcblx0XHR2YXIgcmVzdWx0ID0g
bWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0dGhpcy4kY2FsbGVyID0gY3VycmVu
dDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fS5leHRlbmQo
eyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7XG5cdHJldHVybiB3
cmFwcGVyO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIHJldGFp
bil7XG5cdGlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcblx0XHR2YWx1
ZSA9IENsYXNzLk11dGF0b3JzW2tleV0uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKHZhbHVl
ID09IG51bGwpIHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKHR5cGVPZih2YWx1ZSkgPT0gJ2Z1
bmN0aW9uJyl7XG5cdFx0aWYgKHZhbHVlLiRoaWRkZW4pIHJldHVybiB0aGlzO1xuXHRcdHRoaXMu
cHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlzLCBrZXksIHZhbHVl
KTtcblx0fSBlbHNlIHtcblx0XHRPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5cGUsIGtleSwgdmFs
dWUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG52YXIgZ2V0SW5zdGFuY2UgPSBmdW5j
dGlvbihrbGFzcyl7XG5cdGtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7XG5cdHZhciBwcm90byA9
IG5ldyBrbGFzcztcblx0ZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZztcblx0cmV0dXJuIHByb3Rv
O1xufTtcblxuQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1lbnQub3ZlcmxvYWRT
ZXR0ZXIoKSk7XG5cbkNsYXNzLk11dGF0b3JzID0ge1xuXG5cdEV4dGVuZHM6IGZ1bmN0aW9uKHBh
cmVudCl7XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5wcm90b3R5cGUgPSBn
ZXRJbnN0YW5jZShwYXJlbnQpO1xuXHR9LFxuXG5cdEltcGxlbWVudHM6IGZ1bmN0aW9uKGl0ZW1z
KXtcblx0XHRBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0
dmFyIGluc3RhbmNlID0gbmV3IGl0ZW07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gaW5zdGFuY2Up
IGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1ZSk7XG5cdFx0fSwg
dGhpcyk7XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuRXh0cmFz
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhhdCBjYW4gYmUgaW1w
bGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4ZWN1dGlvbiBvZiBt
YW55IGNvbW1vbiB0YXNrcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVp
cmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4sIEV2ZW50cywgT3B0
aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudGhpcy5DaGFpbiA9IG5ldyBDbGFz
cyh7XG5cblx0JGNoYWluOiBbXSxcblxuXHRjaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRj
aGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRjYWxsQ2hhaW46IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLiRjaGFp
bi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDog
ZmFsc2U7XG5cdH0sXG5cblx0Y2xlYXJDaGFpbjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRjaGFp
bi5lbXB0eSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgcmVtb3ZlT24g
PSBmdW5jdGlvbihzdHJpbmcpe1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15vbihbQS1aXSkv
LCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7XG5cdFx0cmV0dXJuIGZpcnN0LnRvTG93ZXJDYXNlKCk7
XG5cdH0pO1xufTtcblxudGhpcy5FdmVudHMgPSBuZXcgQ2xhc3Moe1xuXG5cdCRldmVudHM6IHt9
LFxuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwpe1xuXHRcdHR5cGUg
PSByZW1vdmVPbih0eXBlKTtcblxuXHRcdFxuXG5cdFx0dGhpcy4kZXZlbnRzW3R5cGVdID0gKHRo
aXMuJGV2ZW50c1t0eXBlXSB8fCBbXSkuaW5jbHVkZShmbik7XG5cdFx0aWYgKGludGVybmFsKSBm
bi5pbnRlcm5hbCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRz
OiBmdW5jdGlvbihldmVudHMpe1xuXHRcdGZvciAodmFyIHR5cGUgaW4gZXZlbnRzKSB0aGlzLmFk
ZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
ZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dHlwZSA9IHJlbW92
ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07XG5cdFx0aWYg
KCFldmVudHMpIHJldHVybiB0aGlzO1xuXHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xu
XHRcdGV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXko
ZGVsYXksIHRoaXMsIGFyZ3MpO1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0
XHR9LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZl
bnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmIChldmVudHMgJiYgIWZuLmludGVybmFs
KXtcblx0XHRcdHZhciBpbmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTtcblx0XHRcdGlmIChpbmRl
eCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtc
blx0XHRpZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGlu
IGV2ZW50cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0
dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmIChldmVudHMpIGV2ZW50cyA9IHJlbW92ZU9uKGV2ZW50
cyk7XG5cdFx0Zm9yICh0eXBlIGluIHRoaXMuJGV2ZW50cyl7XG5cdFx0XHRpZiAoZXZlbnRzICYm
IGV2ZW50cyAhPSB0eXBlKSBjb250aW51ZTtcblx0XHRcdHZhciBmbnMgPSB0aGlzLiRldmVudHNb
dHlwZV07XG5cdFx0XHRmb3IgKHZhciBpID0gZm5zLmxlbmd0aDsgaS0tOykgaWYgKGkgaW4gZm5z
KXtcblx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudCh0eXBlLCBmbnNbaV0pO1xuXHRcdFx0fVxuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxudGhpcy5PcHRpb25zID0gbmV3IENs
YXNzKHtcblxuXHRzZXRPcHRpb25zOiBmdW5jdGlvbigpe1xuXHRcdHZhciBvcHRpb25zID0gdGhp
cy5vcHRpb25zID0gT2JqZWN0Lm1lcmdlLmFwcGx5KG51bGwsIFt7fSwgdGhpcy5vcHRpb25zXS5h
cHBlbmQoYXJndW1lbnRzKSk7XG5cdFx0aWYgKHRoaXMuYWRkRXZlbnQpIGZvciAodmFyIG9wdGlv
biBpbiBvcHRpb25zKXtcblx0XHRcdGlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAhPSAnZnVu
Y3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTtcblx0XHRcdHRo
aXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pO1xuXHRcdFx0ZGVsZXRlIG9wdGlv
bnNbb3B0aW9uXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbn0pKCk7
XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3MuVGhlbmFibGVcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIGEgVXRpbGl0eSBDbGFzcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIgb3du
IENsYXNzZXMgdG8gbWFrZSB0aGVtIFwidGhlbmFibGVcIi5cblxubGljZW5zZTogTUlULXN0eWxl
IGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBDbGFzc1xuXG5wcm92aWRlczogW0NsYXNzLlRoZW5hYmxl
XVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgU1RBVEVfUEVORElORyA9IDAsXG5c
dFNUQVRFX0ZVTEZJTExFRCA9IDEsXG5cdFNUQVRFX1JFSkVDVEVEID0gMjtcblxudmFyIFRoZW5h
YmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3Moe1xuXG5cdCR0aGVuYWJsZVN0YXRlOiBT
VEFURV9QRU5ESU5HLFxuXHQkdGhlbmFibGVSZXN1bHQ6IG51bGwsXG5cdCR0aGVuYWJsZVJlYWN0
aW9uczogW10sXG5cblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHJlc29sdmUodGhp
cywgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlamVjdDogZnVuY3Rpb24o
cmVhc29uKXtcblx0XHRyZWplY3QodGhpcywgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0
fSxcblxuXHRnZXRUaGVuYWJsZVN0YXRlOiBmdW5jdGlvbigpe1xuXHRcdHN3aXRjaCAodGhpcy4k
dGhlbmFibGVTdGF0ZSl7XG5cdFx0XHRjYXNlIFNUQVRFX1BFTkRJTkc6XG5cdFx0XHRcdHJldHVy
biAncGVuZGluZyc7XG5cblx0XHRcdGNhc2UgU1RBVEVfRlVMRklMTEVEOlxuXHRcdFx0XHRyZXR1
cm4gJ2Z1bGZpbGxlZCc7XG5cblx0XHRcdGNhc2UgU1RBVEVfUkVKRUNURUQ6XG5cdFx0XHRcdHJl
dHVybiAncmVqZWN0ZWQnO1xuXHRcdH1cblx0fSxcblxuXHRyZXNldFRoZW5hYmxlOiBmdW5jdGlv
bihyZWFzb24pe1xuXHRcdHJlamVjdCh0aGlzLCByZWFzb24pO1xuXHRcdHJlc2V0KHRoaXMpO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBv
blJlamVjdGVkKXtcblx0XHRpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAnZnVuY3Rpb24nKSBv
bkZ1bGZpbGxlZCA9ICdJZGVudGl0eSc7XG5cdFx0aWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAn
ZnVuY3Rpb24nKSBvblJlamVjdGVkID0gJ1Rocm93ZXInO1xuXG5cdFx0dmFyIHRoZW5hYmxlID0g
bmV3IFRoZW5hYmxlKCk7XG5cblx0XHR0aGlzLiR0aGVuYWJsZVJlYWN0aW9ucy5wdXNoKHtcblx0
XHRcdHRoZW5hYmxlOiB0aGVuYWJsZSxcblx0XHRcdGZ1bGZpbGxIYW5kbGVyOiBvbkZ1bGZpbGxl
ZCxcblx0XHRcdHJlamVjdEhhbmRsZXI6IG9uUmVqZWN0ZWRcblx0XHR9KTtcblxuXHRcdGlmICh0
aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0XHRcdHJlYWN0KHRoaXMp
O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblxuXHQnY2F0Y2gnOiBmdW5j
dGlvbihvblJlamVjdGVkKXtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQp
O1xuXHR9XG5cbn0pO1xuXG5UaGVuYWJsZS5leHRlbmQoe1xuXHRyZXNvbHZlOiBmdW5jdGlvbih2
YWx1ZSl7XG5cdFx0dmFyIHRoZW5hYmxlO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRoZW5h
YmxlKXtcblx0XHRcdHRoZW5hYmxlID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoZW5h
YmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGVuYWJsZTtcblx0fSxcblx0cmVqZWN0OiBmdW5jdGlvbihyZWFz
b24pe1xuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdHJlamVjdCh0aGVu
YWJsZSwgcmVhc29uKTtcblx0XHRyZXR1cm4gdGhlbmFibGU7XG5cdH1cbn0pO1xuXG4vLyBQcml2
YXRlIGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiByZXNvbHZlKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlm
ICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0aWYgKHRo
ZW5hYmxlID09PSB2YWx1ZSl7XG5cdFx0XHRyZWplY3QodGhlbmFibGUsIG5ldyBUeXBlRXJyb3Io
J1RyaWVkIHRvIHJlc29sdmUgYSB0aGVuYWJsZSB3aXRoIGl0c2VsZi4nKSk7XG5cdFx0fSBlbHNl
IGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUg
PT09ICdmdW5jdGlvbicpKXtcblx0XHRcdHZhciB0aGVuO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGhlbiA9IHZhbHVlLnRoZW47XG5cdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRy
ZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIHRo
ZW4gPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHR2YXIgcmVzb2x2ZWQgPSBmYWxzZTtcblx0XHRc
dFx0ZGVmZXIoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhlbi5j
YWxsKFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24obmV4dFZh
bHVlKXtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRc
dHJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodGhlbmFibGUsIG5l
eHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRc
dFx0XHRmdW5jdGlvbihyZWFzb24pe1xuXHRcdFx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xu
XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVq
ZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0
fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChleGNlcHRpb24pe1xuXHRcdFx0
XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0
XHRcdFx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0XHRcdFx0fVxu
XHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxs
KHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZ1bGZpbGwo
dGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZnVsZmlsbCh0aGVu
YWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09IFNUQVRFX1BF
TkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVlO1xuXHRcdHRoZW5h
YmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfRlVMRklMTEVEO1xuXG5cdFx0cmVhY3QodGhlbmFi
bGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKXtcblx0aWYg
KHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJs
ZS4kdGhlbmFibGVSZXN1bHQgPSByZWFzb247XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUg
PSBTVEFURV9SRUpFQ1RFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5j
dGlvbiByZXNldCh0aGVuYWJsZSl7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSAhPT0g
U1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gbnVsbDtcblx0
XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG5cdH1cbn1cblxuZnVu
Y3Rpb24gcmVhY3QodGhlbmFibGUpe1xuXHR2YXIgc3RhdGUgPSB0aGVuYWJsZS4kdGhlbmFibGVT
dGF0ZSxcblx0XHRyZXN1bHQgPSB0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQsXG5cdFx0cmVhY3Rp
b25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zLFxuXHRcdHR5cGU7XG5cblx0aWYgKHN0
YXRlID09PSBTVEFURV9GVUxGSUxMRUQpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9u
cyA9IFtdO1xuXHRcdHR5cGUgPSAnZnVsZmlsbEhhbmRsZXInO1xuXHR9IGVsc2UgaWYgKHN0YXRl
ID09IFNUQVRFX1JFSkVDVEVEKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBb
XTtcblx0XHR0eXBlID0gJ3JlamVjdEhhbmRsZXInO1xuXHR9XG5cblx0aWYgKHR5cGUpe1xuXHRc
dGRlZmVyKGhhbmRsZS5wYXNzKFtyZXN1bHQsIHJlYWN0aW9ucywgdHlwZV0pKTtcblx0fVxufVxu
XG5mdW5jdGlvbiBoYW5kbGUocmVzdWx0LCByZWFjdGlvbnMsIHR5cGUpe1xuXHRmb3IgKHZhciBp
ID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpe1xuXHRcdHZhciByZWFjdGlv
biA9IHJlYWN0aW9uc1tpXSxcblx0XHRcdGhhbmRsZXIgPSByZWFjdGlvblt0eXBlXTtcblxuXHRc
dGlmIChoYW5kbGVyID09PSAnSWRlbnRpdHknKXtcblx0XHRcdHJlc29sdmUocmVhY3Rpb24udGhl
bmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGlmIChoYW5kbGVyID09PSAnVGhyb3dlcicpe1xu
XHRcdFx0cmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSB7XG5c
dFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCBoYW5kbGVyKHJl
c3VsdCkpO1xuXHRcdFx0fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHJlYWN0
aW9uLnRoZW5hYmxlLCBleGNlcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG52YXIg
ZGVmZXI7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9j
ZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKXtcblx0ZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNr
O1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyl7XG5cdGRl
ZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIHtcblx0ZGVmZXIgPSBmdW5jdGlvbihmbil7XG5c
dFx0c2V0VGltZW91dChmbiwgMCk7XG5cdH07XG59XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogT2JqZWN0XG5cbmRlc2NyaXB0aW9uOiBPYmplY3QgZ2VuZXJpYyBtZXRob2RzXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogW09i
amVjdCwgSGFzaF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuT2JqZWN0LmV4dGVuZCh7
XG5cblx0c3Vic2V0OiBmdW5jdGlvbihvYmplY3QsIGtleXMpe1xuXHRcdHZhciByZXN1bHRzID0g
e307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5c
dFx0XHR2YXIgayA9IGtleXNbaV07XG5cdFx0XHRpZiAoayBpbiBvYmplY3QpIHJlc3VsdHNba10g
PSBvYmplY3Rba107XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdG1hcDog
ZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHR2
YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBr
ZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0cmVzdWx0
c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xuXHRcdH1c
blx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKG9iamVjdCwg
Zm4sIGJpbmQpe1xuXHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qu
a2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7
XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5XTtcblx0XHRcdGlm
IChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNba2V5XSA9IHZhbHVl
O1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRldmVyeTogZnVuY3Rpb24o
b2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xu
XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5
ID0ga2V5c1tpXTtcblx0XHRcdGlmICghZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkg
cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRzb21lOiBm
dW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9i
amVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRc
dHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0s
IGtleSkpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0
dmFsdWVzOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHR2YXIg
a2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlz
Lmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tpXTtcblx0XHRcdHZhbHVlcy5wdXNo
KG9iamVjdFtrXSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0Z2V0TGVu
Z3RoOiBmdW5jdGlvbihvYmplY3Qpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxl
bmd0aDtcblx0fSxcblxuXHRrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7XG5cdFx0dmFy
IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5
cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmIChvYmpl
Y3Rba2V5XSA9PT0gdmFsdWUpIHJldHVybiBrZXk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xu
XHR9LFxuXG5cdGNvbnRhaW5zOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHRyZXR1cm4g
T2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7XG5cdH0sXG5cblx0dG9RdWVyeVN0
cmluZzogZnVuY3Rpb24ob2JqZWN0LCBiYXNlKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtc
blxuXHRcdE9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7XG5cdFx0XHRp
ZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJztcblx0XHRcdHZhciByZXN1bHQ7
XG5cdFx0XHRzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpe1xuXHRcdFx0XHRjYXNlICdvYmplY3QnOiBy
ZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1ZSwga2V5KTsgYnJlYWs7XG5cdFx0XHRc
dGNhc2UgJ2FycmF5Jzpcblx0XHRcdFx0XHR2YXIgcXMgPSB7fTtcblx0XHRcdFx0XHR2YWx1ZS5l
YWNoKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdFx0XHRxc1tpXSA9IHZhbDtcblx0XHRcdFx0
XHR9KTtcblx0XHRcdFx0XHRyZXN1bHQgPSBPYmplY3QudG9RdWVyeVN0cmluZyhxcywga2V5KTtc
blx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogcmVzdWx0ID0ga2V5ICsgJz0nICsg
ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZSAhPSBu
dWxsKSBxdWVyeVN0cmluZy5wdXNoKHJlc3VsdCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcXVl
cnlTdHJpbmcuam9pbignJicpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG5cblxuLypcbi0tLVxu
bmFtZTogU2xpY2suUGFyc2VyXG5kZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBDU1MzIFNlbGVjdG9y
IHBhcnNlclxucHJvdmlkZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9uKCl7
XG5cbnZhciBwYXJzZWQsXG5cdHNlcGFyYXRvckluZGV4LFxuXHRjb21iaW5hdG9ySW5kZXgsXG5c
dHJldmVyc2VkLFxuXHRjYWNoZSA9IHt9LFxuXHRyZXZlcnNlQ2FjaGUgPSB7fSxcblx0cmVVbmVz
Y2FwZSA9IC9cXFxcL2c7XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGlzUmV2
ZXJzZWQpe1xuXHRpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0aWYgKGV4
cHJlc3Npb24uU2xpY2sgPT09IHRydWUpIHJldHVybiBleHByZXNzaW9uO1xuXHRleHByZXNzaW9u
ID0gKCcnICsgZXhwcmVzc2lvbikucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHRyZXZl
cnNlZCA9ICEhaXNSZXZlcnNlZDtcblx0dmFyIGN1cnJlbnRDYWNoZSA9IChyZXZlcnNlZCkgPyBy
ZXZlcnNlQ2FjaGUgOiBjYWNoZTtcblx0aWYgKGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXSkgcmV0
dXJuIGN1cnJlbnRDYWNoZVtleHByZXNzaW9uXTtcblx0cGFyc2VkID0ge1xuXHRcdFNsaWNrOiB0
cnVlLFxuXHRcdGV4cHJlc3Npb25zOiBbXSxcblx0XHRyYXc6IGV4cHJlc3Npb24sXG5cdFx0cmV2
ZXJzZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiBwYXJzZSh0aGlzLnJhdywgdHJ1ZSk7XG5c
dFx0fVxuXHR9O1xuXHRzZXBhcmF0b3JJbmRleCA9IC0xO1xuXHR3aGlsZSAoZXhwcmVzc2lvbiAh
PSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNlcikpKTtcblx0
cGFyc2VkLmxlbmd0aCA9IHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGg7XG5cdHJldHVybiBjdXJy
ZW50Q2FjaGVbcGFyc2VkLnJhd10gPSAocmV2ZXJzZWQpID8gcmV2ZXJzZShwYXJzZWQpIDogcGFy
c2VkO1xufTtcblxudmFyIHJldmVyc2VDb21iaW5hdG9yID0gZnVuY3Rpb24oY29tYmluYXRvcil7
XG5cdGlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7XG5cdGVsc2UgaWYgKGNvbWJp
bmF0b3IgPT09ICcgJykgcmV0dXJuICchJztcblx0ZWxzZSBpZiAoKC9eIS8pLnRlc3QoY29tYmlu
YXRvcikpIHJldHVybiBjb21iaW5hdG9yLnJlcGxhY2UoL14hLywgJycpO1xuXHRlbHNlIHJldHVy
biAnIScgKyBjb21iaW5hdG9yO1xufTtcblxudmFyIHJldmVyc2UgPSBmdW5jdGlvbihleHByZXNz
aW9uKXtcblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztcblx0Zm9y
ICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIGV4cCA9
IGV4cHJlc3Npb25zW2ldO1xuXHRcdHZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAnKicsIGNv
bWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07XG5cblx0XHRm
b3IgKHZhciBqID0gMDsgaiA8IGV4cC5sZW5ndGg7IGorKyl7XG5cdFx0XHR2YXIgY2V4cCA9IGV4
cFtqXTtcblx0XHRcdGlmICghY2V4cC5yZXZlcnNlQ29tYmluYXRvcikgY2V4cC5yZXZlcnNlQ29t
YmluYXRvciA9ICcgJztcblx0XHRcdGNleHAuY29tYmluYXRvciA9IGNleHAucmV2ZXJzZUNvbWJp
bmF0b3I7XG5cdFx0XHRkZWxldGUgY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHR9XG5cblx0
XHRleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Npb247XG59
O1xuXG52YXIgZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyaW5nKXsvLyBDcmVkaXQ6IFhSZWdF
eHAgMC42LjEgKGMpIDIwMDctMjAwOCBTdGV2ZW4gTGV2aXRoYW4gPGh0dHA6Ly9zdGV2ZW5sZXZp
dGhhbi5jb20vcmVnZXgveHJlZ2V4cC8+IE1JVCBMaWNlbnNlXG5cdHJldHVybiBzdHJpbmcucmVw
bGFjZSgvWy1bXFxde30oKSorPy5cXFxcXiR8LCNcXHNdL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0
XHRyZXR1cm4gJ1xcXFwnICsgbWF0Y2g7XG5cdH0pO1xufTtcblxudmFyIHJlZ2V4cCA9IG5ldyBS
ZWdFeHAoXG4vKlxuIyEvdXNyL2Jpbi9lbnYgcnVieVxucHV0cyBcIlxcdFxcdFwiICsgREFUQS5y
ZWFkLmdzdWIoL1xcKFxcP3hcXCl8XFxzKyMuKiR8XFxzK3xcXFxcJHxcXFxcbi8sJycpXG5fX0VO
RF9fXG5cdFwiKD94KV4oPzpcXFxuXHQgIFxcXFxzKiAoICwgKSBcXFxccyogICAgICAgICAgICAg
ICAjIFNlcGFyYXRvciAgICAgICAgICBcXG5cXFxuXHR8IFxcXFxzKiAoIDxjb21iaW5hdG9yPisg
KSBcXFxccyogICAjIENvbWJpbmF0b3IgICAgICAgICBcXG5cXFxuXHR8ICAgICAgKCBcXFxccysg
KSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXFxuXFxcblx0fCAgICAgICgg
PHVuaWNvZGU+KyB8IFxcXFwqICkgICAgICMgVGFnICAgICAgICAgICAgICAgIFxcblxcXG5cdHwg
XFxcXCMgICggPHVuaWNvZGU+KyAgICAgICApICAgICAjIElEICAgICAgICAgICAgICAgICBcXG5c
XFxuXHR8IFxcXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05hbWUgICAgICAg
ICAgXFxuXFxcblx0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSAg
ICAgICAgICBcXG5cXFxuXHRcXFxcWyAgXFxcblx0XHRcXFxccyogKDx1bmljb2RlMT4rKSAgKD86
ICBcXFxuXHRcdFx0XFxcXHMqIChbKl4kIX58XT89KSAgKD86ICBcXFxuXHRcdFx0XHRcXFxccyog
KD86XFxcblx0XHRcdFx0XHQoW1xcXCInXT8pKC4qPylcXFxcOSBcXFxuXHRcdFx0XHQpXFxcblx0
XHRcdCkgIFxcXG5cdFx0KT8gIFxcXFxzKiAgXFxcblx0XFxcXF0oPyFcXFxcXSkgXFxuXFxcblx0
fCAgIDorICggPHVuaWNvZGU+KyApKD86XFxcblx0XFxcXCggKD86XFxcblx0XHQoPzooW1xcXCIn
XSkoW15cXFxcMTJdKilcXFxcMTIpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspXFxcblx0
KSBcXFxcKVxcXG5cdCk/XFxcblx0KVwiXG4qL1xuXHRcIl4oPzpcXFxccyooLClcXFxccyp8XFxc
XHMqKDxjb21iaW5hdG9yPispXFxcXHMqfChcXFxccyspfCg8dW5pY29kZT4rfFxcXFwqKXxcXFxc
Iyg8dW5pY29kZT4rKXxcXFxcLig8dW5pY29kZT4rKXxcXFxcW1xcXFxzKig8dW5pY29kZTE+Kyko
PzpcXFxccyooWypeJCF+fF0/PSkoPzpcXFxccyooPzooW1xcXCInXT8pKC4qPylcXFxcOSkpKT9c
XFxccypcXFxcXSg/IVxcXFxdKXwoOispKDx1bmljb2RlPispKD86XFxcXCgoPzooPzooW1xcXCIn
XSkoW15cXFxcMTNdKilcXFxcMTMpfCgoPzpcXFxcKFteKV0rXFxcXCl8W14oKV0qKSspKVxcXFwp
KT8pXCJcblx0LnJlcGxhY2UoLzxjb21iaW5hdG9yPi8sICdbJyArIGVzY2FwZVJlZ0V4cCgnPit+
YCFAJCVeJj17fVxcXFw7PC8nKSArICddJylcblx0LnJlcGxhY2UoLzx1bmljb2RlPi9nLCAnKD86
W1xcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcblx0
LnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFxcXHdcXFxcdTAwYTEtXFxcXHVGRkZGLV18
XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuKTtcblxuZnVuY3Rpb24gcGFyc2VyKFxuXHRyYXdN
YXRjaCxcblxuXHRzZXBhcmF0b3IsXG5cdGNvbWJpbmF0b3IsXG5cdGNvbWJpbmF0b3JDaGlsZHJl
bixcblxuXHR0YWdOYW1lLFxuXHRpZCxcblx0Y2xhc3NOYW1lLFxuXG5cdGF0dHJpYnV0ZUtleSxc
blx0YXR0cmlidXRlT3BlcmF0b3IsXG5cdGF0dHJpYnV0ZVF1b3RlLFxuXHRhdHRyaWJ1dGVWYWx1
ZSxcblxuXHRwc2V1ZG9NYXJrZXIsXG5cdHBzZXVkb0NsYXNzLFxuXHRwc2V1ZG9RdW90ZSxcblx0
cHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSxcblx0cHNldWRvQ2xhc3NWYWx1ZVxuKXtcblx0aWYgKHNl
cGFyYXRvciB8fCBzZXBhcmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdHBhcnNlZC5leHByZXNzaW9u
c1srK3NlcGFyYXRvckluZGV4XSA9IFtdO1xuXHRcdGNvbWJpbmF0b3JJbmRleCA9IC0xO1xuXHRc
dGlmIChzZXBhcmF0b3IpIHJldHVybiAnJztcblx0fVxuXG5cdGlmIChjb21iaW5hdG9yIHx8IGNv
bWJpbmF0b3JDaGlsZHJlbiB8fCBjb21iaW5hdG9ySW5kZXggPT09IC0xKXtcblx0XHRjb21iaW5h
dG9yID0gY29tYmluYXRvciB8fCAnICc7XG5cdFx0dmFyIGN1cnJlbnRTZXBhcmF0b3IgPSBwYXJz
ZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdO1xuXHRcdGlmIChyZXZlcnNlZCAmJiBjdXJy
ZW50U2VwYXJhdG9yW2NvbWJpbmF0b3JJbmRleF0pXG5cdFx0XHRjdXJyZW50U2VwYXJhdG9yW2Nv
bWJpbmF0b3JJbmRleF0ucmV2ZXJzZUNvbWJpbmF0b3IgPSByZXZlcnNlQ29tYmluYXRvcihjb21i
aW5hdG9yKTtcblx0XHRjdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4XSA9IHtjb21i
aW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307XG5cdH1cblxuXHR2YXIgY3VycmVudFBhcnNl
ZCA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBhcmF0b3JJbmRleF1bY29tYmluYXRvckluZGV4XTtc
blxuXHRpZiAodGFnTmFtZSl7XG5cdFx0Y3VycmVudFBhcnNlZC50YWcgPSB0YWdOYW1lLnJlcGxh
Y2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoaWQpe1xuXHRcdGN1cnJlbnRQYXJz
ZWQuaWQgPSBpZC5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVsc2UgaWYgKGNsYXNz
TmFtZSl7XG5cdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UocmVVbmVzY2FwZSwgJycp
O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCkgY3VycmVudFBhcnNlZC5jbGFz
c0xpc3QgPSBbXTtcblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3VycmVudFBhcnNl
ZC5jbGFzc2VzID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5jbGFzc0xpc3QucHVzaChjbGFzc05h
bWUpO1xuXHRcdGN1cnJlbnRQYXJzZWQuY2xhc3Nlcy5wdXNoKHtcblx0XHRcdHZhbHVlOiBjbGFz
c05hbWUsXG5cdFx0XHRyZWdleHA6IG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBlc2NhcGVSZWdF
eHAoY2xhc3NOYW1lKSArICcoXFxcXHN8JCknKVxuXHRcdH0pO1xuXG5cdH0gZWxzZSBpZiAocHNl
dWRvQ2xhc3Mpe1xuXHRcdHBzZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlIHx8IHBz
ZXVkb0NsYXNzUXVvdGVkVmFsdWU7XG5cdFx0cHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNz
VmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpIDogbnVsbDtc
blxuXHRcdGlmICghY3VycmVudFBhcnNlZC5wc2V1ZG9zKSBjdXJyZW50UGFyc2VkLnBzZXVkb3Mg
PSBbXTtcblx0XHRjdXJyZW50UGFyc2VkLnBzZXVkb3MucHVzaCh7XG5cdFx0XHRrZXk6IHBzZXVk
b0NsYXNzLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpLFxuXHRcdFx0dmFsdWU6IHBzZXVkb0NsYXNz
VmFsdWUsXG5cdFx0XHR0eXBlOiBwc2V1ZG9NYXJrZXIubGVuZ3RoID09IDEgPyAnY2xhc3MnIDog
J2VsZW1lbnQnXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChhdHRyaWJ1dGVLZXkpe1xuXHRcdGF0
dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblx0XHRh
dHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8fCAnJykucmVwbGFjZShyZVVuZXNjYXBl
LCAnJyk7XG5cblx0XHR2YXIgdGVzdCwgcmVnZXhwO1xuXG5cdFx0c3dpdGNoIChhdHRyaWJ1dGVP
cGVyYXRvcil7XG5cdFx0XHRjYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAn
XicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBicmVhaztcblx0
XHRcdGNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAgZXNjYXBlUmVn
RXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfj0n
IDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxcXFxzKScrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1
dGVWYWx1ZSkgKycoXFxcXHN8JCknICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnfD0nIDogcmVnZXhw
ID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsn
KC18JCknICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICAnPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFs
dWUpe1xuXHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgPT0gdmFsdWU7XG5cdFx0XHR9OyBi
cmVhaztcblx0XHRcdGNhc2UgJyo9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRc
dHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0xO1xuXHRc
dFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlVmFsdWUgIT0gdmFsdWU7XG5cdFx0XHR9OyBicmVhaztc
blx0XHRcdGRlZmF1bHQgICA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVy
biAhIXZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRlVmFsdWUgPT0g
JycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rp
b24oKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0aWYgKCF0ZXN0KSB0ZXN0
ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlICYmIHJlZ2V4cC50ZXN0KHZh
bHVlKTtcblx0XHR9O1xuXG5cdFx0aWYgKCFjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMpIGN1cnJl
bnRQYXJzZWQuYXR0cmlidXRlcyA9IFtdO1xuXHRcdGN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcy5w
dXNoKHtcblx0XHRcdGtleTogYXR0cmlidXRlS2V5LFxuXHRcdFx0b3BlcmF0b3I6IGF0dHJpYnV0
ZU9wZXJhdG9yLFxuXHRcdFx0dmFsdWU6IGF0dHJpYnV0ZVZhbHVlLFxuXHRcdFx0dGVzdDogdGVz
dFxuXHRcdH0pO1xuXG5cdH1cblxuXHRyZXR1cm4gJyc7XG59O1xuXG4vLyBTbGljayBOU1xuXG52
YXIgU2xpY2sgPSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnBhcnNlID0gZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdHJldHVybiBwYXJzZShleHByZXNzaW9uKTtcbn07XG5cblNsaWNrLmVz
Y2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNr
ID0gU2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1
bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxu
bmFtZTogU2xpY2suRmluZGVyXG5kZXNjcmlwdGlvbjogVGhlIG5ldywgc3VwZXJmYXN0IGNzcyBz
ZWxlY3RvciBlbmdpbmUuXG5wcm92aWRlczogU2xpY2suRmluZGVyXG5yZXF1aXJlczogU2xpY2su
UGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIGxvY2FsID0ge30sXG5cdGZl
YXR1cmVzQ2FjaGUgPSB7fSxcblx0dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
O1xuXG4vLyBGZWF0dXJlIC8gQnVnIGRldGVjdGlvblxuXG5sb2NhbC5pc05hdGl2ZUNvZGUgPSBm
dW5jdGlvbihmbil7XG5cdHJldHVybiAoL1xce1xccypcXFtuYXRpdmUgY29kZVxcXVxccypcXH0v
KS50ZXN0KCcnICsgZm4pO1xufTtcblxubG9jYWwuaXNYTUwgPSBmdW5jdGlvbihkb2N1bWVudCl7
XG5cdHJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1bWVudC54bWwpIHx8
ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1bWVudF0nKSB8fFxu
XHQoZG9jdW1lbnQubm9kZVR5cGUgPT0gOSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9k
ZU5hbWUgIT0gJ0hUTUwnKTtcbn07XG5cbmxvY2FsLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9j
dW1lbnQpe1xuXG5cdC8vIGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJndW1lbnRzIHRvIGRv
Y3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0aGUgZnVuY3Rpb24g
cmV0dXJucy5cblx0dmFyIG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7XG5cdGlmIChub2Rl
VHlwZSA9PSA5KTsgLy8gZG9jdW1lbnRcblx0ZWxzZSBpZiAobm9kZVR5cGUpIGRvY3VtZW50ID0g
ZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZVxuXHRlbHNlIGlmIChkb2N1bWVudC5uYXZp
Z2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRvd1xuXHRlbHNlIHJl
dHVybjtcblxuXHQvLyBjaGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnRcblxuXHRpZiAodGhp
cy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjtcblx0dGhpcy5kb2N1bWVudCA9IGRvY3Vt
ZW50O1xuXG5cdC8vIGNoZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRldGVjdGlvbiBvbiB0
aGlzIGRvY3VtZW50IGJlZm9yZVxuXG5cdHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LFxuXHRcdHJvb3RVaWQgPSB0aGlzLmdldFVJRFhNTChyb290KSxcblx0XHRmZWF0dXJlcyA9
IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0sXG5cdFx0ZmVhdHVyZTtcblxuXHRpZiAoZmVhdHVyZXMp
e1xuXHRcdGZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7XG5cdFx0XHR0aGlzW2ZlYXR1cmVdID0g
ZmVhdHVyZXNbZmVhdHVyZV07XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdGZlYXR1cmVz
ID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9O1xuXG5cdGZlYXR1cmVzLnJvb3QgPSByb290
O1xuXHRmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1bWVudCk7XG5cblx0
ZmVhdHVyZXMuYnJva2VuU3RhckdFQlROXG5cdD0gZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRR
U0Fcblx0PSBmZWF0dXJlcy5pZEdldHNOYW1lXG5cdD0gZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNl
UVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuR0VCQ05cblx0PSBmZWF0dXJlcy5icm9rZW5DaGVja2Vk
UVNBXG5cdD0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0Fcblx0PSBmZWF0dXJlcy5p
c0hUTUxEb2N1bWVudFxuXHQ9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvclxuXHQ9IGZh
bHNlO1xuXG5cdHZhciBzdGFyU2VsZWN0c0Nsb3NlZCwgc3RhclNlbGVjdHNDb21tZW50cyxcblx0
XHRicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSxcblx0XHRicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyO1xuXG5cdHZhciBzZWxlY3RlZCwgaWQg
PSAnc2xpY2tfdW5pcXVlaWQnO1xuXHR2YXIgdGVzdE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTtcblxuXHR2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDtcblx0dGVzdFJvb3QuYXBw
ZW5kQ2hpbGQodGVzdE5vZGUpO1xuXG5cdC8vIG9uIG5vbi1IVE1MIGRvY3VtZW50cyBpbm5lckhU
TUwgYW5kIGdldEVsZW1lbnRzQnlJZCBkb2VzbnQgd29yayBwcm9wZXJseVxuXHR0cnkge1xuXHRc
dHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBpZD1cIicraWQrJ1wiPjwvYT4nO1xuXHRcdGZlYXR1
cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdH0g
Y2F0Y2ggKGUpe31cblxuXHRpZiAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQpe1xuXG5cdFx0dGVz
dE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuXHRcdC8vIElFIHJldHVybnMgY29tbWVu
dCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNc
blx0XHR0ZXN0Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCcnKSk7XG5c
dFx0c3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
KicpLmxlbmd0aCA+IDEpO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwi
PC9mb28+XCIpIGZvciBnZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50
c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0
XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcblx0XHRc
dHN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNl
bGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdH0gY2F0Y2ggKGUpe307
XG5cblx0XHRmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4gPSBzdGFyU2VsZWN0c0NvbW1lbnRzIHx8
IHN0YXJTZWxlY3RzQ2xvc2VkO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBlbGVtZW50cyB3aXRoIHRo
ZSBuYW1lIGluc3RlYWQgb2YganVzdCBpZCBmb3IgZ2V0RWxlbWVudHNCeUlkIGZvciBzb21lIGRv
Y3VtZW50c1xuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgbmFtZT1c
IicrIGlkICsnXCI+PC9hPjxiIGlkPVwiJysgaWQgKydcIj48L2I+Jztcblx0XHRcdGZlYXR1cmVz
LmlkR2V0c05hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgPT09IHRlc3ROb2RlLmZp
cnN0Q2hpbGQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0aWYgKHRlc3ROb2RlLmdldEVsZW1l
bnRzQnlDbGFzc05hbWUpe1xuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIGdldEVsZW1lbnRzQnlDbGFz
c05hbWUgY2FjaGVzIHJlc3VsdHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVy
SFRNTCA9ICc8YSBjbGFzcz1cImZcIj48L2E+PGEgY2xhc3M9XCJiXCI+PC9hPic7XG5cdFx0XHRc
dHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5sZW5ndGg7XG5cdFx0XHRcdHRl
c3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InO1xuXHRcdFx0XHRjYWNoZWRHZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2InKS5s
ZW5ndGggIT0gMik7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBPcGVyYSA5LjYg
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSBkb2VzbnQgZGV0ZWN0cyB0aGUgY2xhc3MgaWYgaXRzIG5v
dCB0aGUgZmlyc3Qgb25lXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGEgY2xhc3M9XCJhXCI+PC9hPjxhIGNsYXNzPVwiZiBiIGFcIj48L2E+Jztcblx0XHRcdFx0
YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04gPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgnYScpLmxlbmd0aCAhPSAyKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0ZmVh
dHVyZXMuYnJva2VuR0VCQ04gPSBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IGJyb2tl
blNlY29uZENsYXNzTmFtZUdFQkNOO1xuXHRcdH1cblxuXHRcdGlmICh0ZXN0Tm9kZS5xdWVyeVNl
bGVjdG9yQWxsKXtcblx0XHRcdC8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOlwiPC9m
b28+XCIpIGZvciBxdWVyeVNlbGVjdG9yQWxsKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0
XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+Jztcblx0XHRc
dFx0c2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XG5cdFx0XHRcdGZl
YXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVu
Z3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpO1xuXHRcdFx0fSBj
YXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBTYWZhcmkgMy4yIHF1ZXJ5U2VsZWN0b3JBbGwgZG9lc250
IHdvcmsgd2l0aCBtaXhlZGNhc2Ugb24gcXVpcmtzbW9kZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0
dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiTWlYXCI+PC9hPic7XG5cdFx0XHRcdGZl
YXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcu
TWlYJykubGVuZ3RoO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHQvLyBXZWJraXQgYW5k
IE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlTZWxlY3RvckFsbFxu
XHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlv
biBzZWxlY3RlZD1cInNlbGVjdGVkXCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cdFx0XHRcdGZl
YXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnOmNo
ZWNrZWQnKS5sZW5ndGggPT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0XHQvLyBJ
RSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09XCJcIiBzZWxlY3RvcnMg
b24gcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJI
VE1MID0gJzxhIGNsYXNzPVwiXCI+PC9hPic7XG5cdFx0XHRcdGZlYXR1cmVzLmJyb2tlbkVtcHR5
QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9XCJcIl0n
KS5sZW5ndGggIT0gMCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHR9XG5cblx0XHQvLyBJ
RTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdldEF0dHJpYnV0ZSh4
KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dFxuXHRcdHRyeSB7XG5cdFx0XHR0ZXN0
Tm9kZS5pbm5lckhUTUwgPSAnPGZvcm0gYWN0aW9uPVwic1wiPjxpbnB1dCBpZD1cImFjdGlvblwi
Lz48L2Zvcm0+Jztcblx0XHRcdGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIgPSAodGVzdE5vZGUu
Zmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7XG5cdFx0fSBjYXRjaCAo
ZSl7fVxuXG5cdFx0Ly8gbmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlvblxuXG5cdFx0ZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8IC8qcm9vdC5tc01h
dGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0
TWF0Y2hlc1NlbGVjdG9yO1xuXHRcdGlmIChmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ip
IHRyeSB7XG5cdFx0XHQvLyBpZiBtYXRjaGVzU2VsZWN0b3IgdHJvd3MgZXJyb3JzIG9uIGluY29y
cmVjdCBzaW50YXhlcyB3ZSBjYW4gdXNlIGl0XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVz
U2VsZWN0b3IuY2FsbChyb290LCAnOnNsaWNrJyk7XG5cdFx0XHRmZWF0dXJlcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IgPSBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHR9XG5cblx0dHJ5IHtc
blx0XHRyb290LnNsaWNrX2V4cGFuZG8gPSAxO1xuXHRcdGRlbGV0ZSByb290LnNsaWNrX2V4cGFu
ZG87XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MO1xuXHR9IGNhdGNoIChl
KXtcblx0XHRmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDtcblx0fVxuXG5cdHRlc3RS
b290LnJlbW92ZUNoaWxkKHRlc3ROb2RlKTtcblx0dGVzdE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RS
b290ID0gbnVsbDtcblxuXHQvLyBnZXRBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5nZXRBdHRyaWJ1
dGUgPSAoZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQgJiYgYnJva2VuRm9ybUF0dHJpYnV0ZUdldHRl
cikgPyBmdW5jdGlvbihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1
dGVHZXR0ZXJzW25hbWVdO1xuXHRcdGlmIChtZXRob2QpIHJldHVybiBtZXRob2QuY2FsbChub2Rl
KTtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtc
blx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUpID8gYXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBu
dWxsO1xuXHR9IDogZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHRoaXMu
YXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRyZXR1cm4gKG1ldGhvZCkgPyBtZXRob2QuY2Fs
bChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9O1xuXG5cdC8vIGhhc0F0dHJp
YnV0ZVxuXG5cdGZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMuaXNOYXRpdmVD
b2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRc
dHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHR9IDogZnVuY3Rpb24obm9k
ZSwgYXR0cmlidXRlKXtcblx0XHRub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0
ZSk7XG5cdFx0cmV0dXJuICEhKG5vZGUgJiYgKG5vZGUuc3BlY2lmaWVkIHx8IG5vZGUubm9kZVZh
bHVlKSk7XG5cdH07XG5cblx0Ly8gY29udGFpbnNcblx0Ly8gRklYTUU6IEFkZCBzcGVjczogbG9j
YWwuY29udGFpbnMgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgeG1sIGFuZCBodG1sIGRvY3VtZW50
cz9cblx0dmFyIG5hdGl2ZVJvb3RDb250YWlucyA9IHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUo
cm9vdC5jb250YWlucyksXG5cdFx0bmF0aXZlRG9jdW1lbnRDb250YWlucyA9IGRvY3VtZW50ICYm
IHRoaXMuaXNOYXRpdmVDb2RlKGRvY3VtZW50LmNvbnRhaW5zKTtcblxuXHRmZWF0dXJlcy5jb250
YWlucyA9IChuYXRpdmVSb290Q29udGFpbnMgJiYgbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBm
dW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRyZXR1cm4gY29udGV4dC5jb250YWlucyhub2Rl
KTtcblx0fSA6IChuYXRpdmVSb290Q29udGFpbnMgJiYgIW5hdGl2ZURvY3VtZW50Q29udGFpbnMp
ID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0Ly8gSUU4IGRvZXMgbm90IGhhdmUgLmNv
bnRhaW5zIG9uIGRvY3VtZW50LlxuXHRcdHJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICgoY29u
dGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogY29udGV4dCku
Y29udGFpbnMobm9kZSk7XG5cdH0gOiAocm9vdCAmJiByb290LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xuXHRcdHJldHVybiBjb250ZXh0ID09PSBu
b2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiAxNik7XG5c
dH0gOiBmdW5jdGlvbihjb250ZXh0LCBub2RlKXtcblx0XHRpZiAobm9kZSkgZG8ge1xuXHRcdFx0
aWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlO1xuXHRcdH0gd2hpbGUgKChub2RlID0g
bm9kZS5wYXJlbnROb2RlKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdC8vIGRvY3Vt
ZW50IG9yZGVyIHNvcnRpbmdcblx0Ly8gY3JlZGl0cyB0byBTaXp6bGUgKGh0dHA6Ly9zaXp6bGVq
cy5jb20vKVxuXG5cdGZlYXR1cmVzLmRvY3VtZW50U29ydGVyID0gKHJvb3QuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSByZXR1cm4gMDtcblx0XHRy
ZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEgPT09IGIgPyAw
IDogMTtcblx0fSA6ICgnc291cmNlSW5kZXgnIGluIHJvb3QpID8gZnVuY3Rpb24oYSwgYil7XG5c
dFx0aWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4gMDtcblx0XHRy
ZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cdH0gOiAoZG9jdW1lbnQuY3Jl
YXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7XG5cdFx0aWYgKCFhLm93bmVyRG9jdW1lbnQgfHwg
IWIub3duZXJEb2N1bWVudCkgcmV0dXJuIDA7XG5cdFx0dmFyIGFSYW5nZSA9IGEub3duZXJEb2N1
bWVudC5jcmVhdGVSYW5nZSgpLCBiUmFuZ2UgPSBiLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTtcblx0XHRhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7XG5cdFx0YVJhbmdlLnNldEVuZChhLCAwKTtc
blx0XHRiUmFuZ2Uuc2V0U3RhcnQoYiwgMCk7XG5cdFx0YlJhbmdlLnNldEVuZChiLCAwKTtcblx0
XHRyZXR1cm4gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19FTkQs
IGJSYW5nZSk7XG5cdH0gOiBudWxsO1xuXG5cdHJvb3QgPSBudWxsO1xuXG5cdGZvciAoZmVhdHVy
ZSBpbiBmZWF0dXJlcyl7XG5cdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xu
XHR9XG59O1xuXG4vLyBNYWluIE1ldGhvZFxuXG52YXIgcmVTaW1wbGVTZWxlY3RvciA9IC9eKFsj
Ll0/KSgoPzpbXFx3LV0rfFxcKikpJC8sXG5cdHJlRW1wdHlBdHRyaWJ1dGUgPSAvXFxbLitbKiRe
XT0oPzpcIlwifCcnKT9cXF0vLFxuXHRxc2FGYWlsRXhwQ2FjaGUgPSB7fTtcblxubG9jYWwuc2Vh
cmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBmaXJzdCl7XG5cblx0
dmFyIGZvdW5kID0gdGhpcy5mb3VuZCA9IChmaXJzdCkgPyBudWxsIDogKGFwcGVuZCB8fCBbXSk7
XG5cblx0aWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7XG5cdGVsc2UgaWYgKGNvbnRleHQubmF2
aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVydCB0aGUgbm9kZSBm
cm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnRcblx0ZWxzZSBpZiAoIWNvbnRleHQubm9kZVR5cGUp
IHJldHVybiBmb3VuZDtcblxuXHQvLyBzZXR1cFxuXG5cdHZhciBwYXJzZWQsIGksIG5vZGUsIG5v
ZGVzLFxuXHRcdHVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSxcblx0XHRoYXNPdGhlcnMgPSAh
IShhcHBlbmQgJiYgYXBwZW5kLmxlbmd0aCksXG5cdFx0Y29udGV4dElzRG9jdW1lbnQgPSAoY29u
dGV4dC5ub2RlVHlwZSA9PSA5KTtcblxuXHRpZiAodGhpcy5kb2N1bWVudCAhPT0gKGNvbnRleHRJ
c0RvY3VtZW50ID8gY29udGV4dCA6IGNvbnRleHQub3duZXJEb2N1bWVudCkpIHRoaXMuc2V0RG9j
dW1lbnQoY29udGV4dCk7XG5cblx0Ly8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMgYWxyZWFkeSBp
biB0aGUgYXBwZW5kIGFycmF5XG5cdGlmIChoYXNPdGhlcnMpIGZvciAoaSA9IGZvdW5kLmxlbmd0
aDsgaS0tOykgdW5pcXVlc1t0aGlzLmdldFVJRChmb3VuZFtpXSldID0gdHJ1ZTtcblxuXHQvLyBl
eHByZXNzaW9uIGNoZWNrc1xuXG5cdGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7
IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmdcblxuXHRcdC8qPHNpbXBsZS1zZWxlY3RvcnMtb3Zl
cnJpZGU+Ki9cblx0XHR2YXIgc2ltcGxlU2VsZWN0b3IgPSBleHByZXNzaW9uLm1hdGNoKHJlU2lt
cGxlU2VsZWN0b3IpO1xuXHRcdHNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNlbGVjdG9yKXtc
blxuXHRcdFx0dmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLFxuXHRcdFx0XHRuYW1lID0g
c2ltcGxlU2VsZWN0b3JbMl07XG5cblx0XHRcdGlmICghc3ltYm9sKXtcblxuXHRcdFx0XHRpZiAo
bmFtZSA9PSAnKicgJiYgdGhpcy5icm9rZW5TdGFyR0VCVE4pIGJyZWFrIHNpbXBsZVNlbGVjdG9y
cztcblx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRmb3Ig
KGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRcdGlmICghKGhhc090aGVycyAm
JiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRc
dH1cblxuXHRcdFx0fSBlbHNlIGlmIChzeW1ib2wgPT0gJyMnKXtcblxuXHRcdFx0XHRpZiAoIXRo
aXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVhayBzaW1wbGVTZWxl
Y3RvcnM7XG5cdFx0XHRcdG5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG5hbWUpO1xuXHRc
dFx0XHRpZiAoIW5vZGUpIHJldHVybiBmb3VuZDtcblx0XHRcdFx0aWYgKHRoaXMuaWRHZXRzTmFt
ZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IG5hbWUpIGJyZWFr
IHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZSB8fCBudWxs
O1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0p
KSBmb3VuZC5wdXNoKG5vZGUpO1xuXG5cdFx0XHR9IGVsc2UgaWYgKHN5bWJvbCA9PSAnLicpe1xu
XG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250ZXh0LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4dC5xdWVyeVNlbGVj
dG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRpZiAoY29udGV4dC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXtcblx0XHRcdFx0XHRub2Rl
cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTtcblx0XHRcdFx0XHRpZiAo
Zmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7IG5v
ZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVl
c1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0
XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2hDbGFzcyA9IG5ldyBSZWdFeHAoJyhe
fFxcXFxzKScrIFNsaWNrLmVzY2FwZVJlZ0V4cChuYW1lKSArJyhcXFxcc3wkKScpO1xuXHRcdFx0
XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0XHRc
dGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUg
PSBub2RlLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRcdGlmICghKGNsYXNzTmFtZSAmJiBtYXRjaENs
YXNzLnRlc3QoY2xhc3NOYW1lKSkpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aWYgKGZpcnN0KSBy
ZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMu
Z2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9
XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0
XHRcdHJldHVybiAoZmlyc3QpID8gbnVsbCA6IGZvdW5kO1xuXG5cdFx0fVxuXHRcdC8qPC9zaW1w
bGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cblx0XHQvKjxxdWVyeS1zZWxlY3Rvci1vdmVycmlk
ZT4qL1xuXHRcdHF1ZXJ5U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpe1xu
XG5cdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnRcblx0XHRcdFx0fHwgcXNhRmFpbEV4cENh
Y2hlW2V4cHJlc3Npb25dXG5cdFx0XHRcdC8vVE9ETzogb25seSBza2lwIHdoZW4gZXhwcmVzc2lv
biBpcyBhY3R1YWxseSBtaXhlZCBjYXNlXG5cdFx0XHRcdHx8IHRoaXMuYnJva2VuTWl4ZWRDYXNl
UVNBXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhwcmVzc2lvbi5pbmRl
eE9mKCc6Y2hlY2tlZCcpID4gLTEpXG5cdFx0XHRcdHx8ICh0aGlzLmJyb2tlbkVtcHR5QXR0cmli
dXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSlcblx0XHRcdFx0fHwg
KCFjb250ZXh0SXNEb2N1bWVudCAvL0Fib3J0IHdoZW4gIWNvbnRleHRJc0RvY3VtZW50IGFuZC4u
LlxuXHRcdFx0XHRcdC8vICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNl
bGVjdG9yXG5cdFx0XHRcdFx0Ly8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5IGZpeCBub24tZG9j
dW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0b3JzXG5cdFx0XHRc
dFx0JiYgZXhwcmVzc2lvbi5pbmRleE9mKCcsJykgPiAtMVxuXHRcdFx0XHQpXG5cdFx0XHRcdHx8
IFNsaWNrLmRpc2FibGVRU0Fcblx0XHRcdCkgYnJlYWsgcXVlcnlTZWxlY3RvcjtcblxuXHRcdFx0
dmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250ZXh0LCBjdXJyZW50
SWQ7XG5cdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0Ly8gbm9uLWRvY3Vt
ZW50IHJvb3RlZCBRU0Fcblx0XHRcdFx0Ly8gY3JlZGl0cyB0byBBbmRyZXcgRHVwb250XG5cdFx0
XHRcdGN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2xpY2tpZCA9ICdz
bGlja2lkX18nO1xuXHRcdFx0XHRfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2xpY2tpZCk7
XG5cdFx0XHRcdF9leHByZXNzaW9uID0gJyMnICsgc2xpY2tpZCArICcgJyArIF9leHByZXNzaW9u
O1xuXHRcdFx0XHRjb250ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRc
dFx0dHJ5IHtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9y
KF9leHByZXNzaW9uKSB8fCBudWxsO1xuXHRcdFx0XHRlbHNlIG5vZGVzID0gY29udGV4dC5xdWVy
eVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHRx
c2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxO1xuXHRcdFx0XHRicmVhayBxdWVyeVNlbGVj
dG9yO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1bWVudCl7
XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRJZCkgX2NvbnRleHQuc2V0QXR0cmlidXRlKCdpZCcsIGN1
cnJlbnRJZCk7XG5cdFx0XHRcdFx0ZWxzZSBfY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7
XG5cdFx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0
XHRcdGlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAwOyBub2RlID0gbm9k
ZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA+ICdAJyAmJiAhKGhhc090aGVy
cyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0
XHR9IGVsc2UgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKCEo
aGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2Rl
KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTtcblx0
XHRcdHJldHVybiBmb3VuZDtcblxuXHRcdH1cblx0XHQvKjwvcXVlcnktc2VsZWN0b3Itb3ZlcnJp
ZGU+Ki9cblxuXHRcdHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVzc2lvbik7XG5cdFx0
aWYgKCFwYXJzZWQubGVuZ3RoKSByZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lv
biA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVzc2lvblxuXHRcdHJldHVybiBmb3VuZDtc
blx0fSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHBhcnNl
ZCBTbGljayBvYmplY3Rcblx0XHRwYXJzZWQgPSBleHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKHRo
aXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4dCwgZXhwcmVzc2lv
bikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZVxuXHRcdChmb3VuZCkgPyBmb3VuZC5wdXNoKGV4
cHJlc3Npb24pIDogZm91bmQgPSBleHByZXNzaW9uO1xuXHRcdHJldHVybiBmb3VuZDtcblx0fSBl
bHNlIHsgLy8gb3RoZXIganVua1xuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdC8qPHBzZXVk
by1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGNhY2hlIGVs
ZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9yc1xuXG5cdHRoaXMucG9zTlRIID0ge307XG5cdHRo
aXMucG9zTlRITGFzdCA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGUgPSB7fTtcblx0dGhpcy5wb3NO
VEhUeXBlTGFzdCA9IHt9O1xuXG5cdC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1
ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gaWYgYXBwZW5kIGlzIG51bGwgYW5kIHRoZXJlIGlzIG9u
bHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2UgcHVzaEFycmF5LCBl
bHNlIHVzZSBwdXNoVUlEXG5cdHRoaXMucHVzaCA9ICghaGFzT3RoZXJzICYmIChmaXJzdCB8fCAo
cGFyc2VkLmxlbmd0aCA9PSAxICYmIHBhcnNlZC5leHByZXNzaW9uc1swXS5sZW5ndGggPT0gMSkp
KSA/IHRoaXMucHVzaEFycmF5IDogdGhpcy5wdXNoVUlEO1xuXG5cdGlmIChmb3VuZCA9PSBudWxs
KSBmb3VuZCA9IFtdO1xuXG5cdC8vIGRlZmF1bHQgZW5naW5lXG5cblx0dmFyIGosIG0sIG47XG5c
dHZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3M7XG5cdHZhciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNzaW9uLCBjdXJyZW50
Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucztcblxuXHRzZWFy
Y2g6IGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsr
KSBmb3IgKGogPSAwOyAoY3VycmVudEJpdCA9IGN1cnJlbnRFeHByZXNzaW9uW2pdKTsgaisrKXtc
blxuXHRcdGNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJpdC5jb21iaW5hdG9y
O1xuXHRcdGlmICghdGhpc1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNoO1xuXG5cdFx0dGFn
ICAgICAgICA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8gY3VycmVudEJpdC50YWcgOiBjdXJyZW50
Qml0LnRhZy50b1VwcGVyQ2FzZSgpO1xuXHRcdGlkICAgICAgICAgPSBjdXJyZW50Qml0LmlkO1xu
XHRcdGNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNzTGlzdDtcblx0XHRjbGFzc2VzICAgID0g
Y3VycmVudEJpdC5jbGFzc2VzO1xuXHRcdGF0dHJpYnV0ZXMgPSBjdXJyZW50Qml0LmF0dHJpYnV0
ZXM7XG5cdFx0cHNldWRvcyAgICA9IGN1cnJlbnRCaXQucHNldWRvcztcblx0XHRsYXN0Qml0ICAg
ID0gKGogPT09IChjdXJyZW50RXhwcmVzc2lvbi5sZW5ndGggLSAxKSk7XG5cblx0XHR0aGlzLmJp
dFVuaXF1ZXMgPSB7fTtcblxuXHRcdGlmIChsYXN0Qml0KXtcblx0XHRcdHRoaXMudW5pcXVlcyA9
IHVuaXF1ZXM7XG5cdFx0XHR0aGlzLmZvdW5kID0gZm91bmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRc
dHRoaXMudW5pcXVlcyA9IHt9O1xuXHRcdFx0dGhpcy5mb3VuZCA9IFtdO1xuXHRcdH1cblxuXHRc
dGlmIChqID09PSAwKXtcblx0XHRcdHRoaXNbY29tYmluYXRvcl0oY29udGV4dCwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHRcdGlmIChmaXJz
dCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCkgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVt
cy5sZW5ndGg7IG0gPCBuOyBtKyspe1xuXHRcdFx0XHR0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJ
dGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0
KTtcblx0XHRcdFx0aWYgKGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoO1xuXHRcdFx0fSBlbHNl
IGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKSB0aGlzW2Nv
bWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcywgY2xhc3NMaXN0KTtcblx0XHR9XG5cblx0XHRjdXJyZW50SXRlbXMgPSB0aGlzLmZv
dW5kO1xuXHR9XG5cblx0Ly8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5vZGVzIGluIGFwcGVu
ZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuXG5cdGlmIChoYXNPdGhlcnMg
fHwgKHBhcnNlZC5leHByZXNzaW9ucy5sZW5ndGggPiAxKSkgdGhpcy5zb3J0KGZvdW5kKTtcblxu
XHRyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5kO1xufTtcblxuLy8g
VXRpbHNcblxubG9jYWwudWlkeCA9IDE7XG5sb2NhbC51aWRrID0gJ3NsaWNrLXVuaXF1ZWlkJztc
blxubG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHZhciB1aWQgPSBub2RlLmdl
dEF0dHJpYnV0ZSh0aGlzLnVpZGspO1xuXHRpZiAoIXVpZCl7XG5cdFx0dWlkID0gdGhpcy51aWR4
Kys7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpO1xuXHR9XG5cdHJldHVy
biB1aWQ7XG59O1xuXG5sb2NhbC5nZXRVSURIVE1MID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVy
biBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0aGlzLnVpZHgrKyk7
XG59O1xuXG4vLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1bWVudFNvcnRlciBt
ZXRob2QuXG5cbmxvY2FsLnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXtcblx0aWYgKCF0aGlzLmRv
Y3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0cztcblx0cmVzdWx0cy5zb3J0KHRoaXMuZG9jdW1l
bnRTb3J0ZXIpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qPHBzZXVkby1zZWxlY3RvcnM+
Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5sb2NhbC5jYWNoZU5USCA9IHt9O1xuXG5s
b2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XFxkKik/KFthLXpdKyk/KFsrLV1cXGQrKT8kLztcblxu
bG9jYWwucGFyc2VOVEhBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0dmFyIHBhcnNl
ZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJu
IGZhbHNlO1xuXHR2YXIgc3BlY2lhbCA9IHBhcnNlZFsyXSB8fCBmYWxzZTtcblx0dmFyIGEgPSBw
YXJzZWRbMV0gfHwgMTtcblx0aWYgKGEgPT0gJy0nKSBhID0gLTE7XG5cdHZhciBiID0gK3BhcnNl
ZFszXSB8fCAwO1xuXHRwYXJzZWQgPVxuXHRcdChzcGVjaWFsID09ICduJylcdD8ge2E6IGEsIGI6
IGJ9IDpcblx0XHQoc3BlY2lhbCA9PSAnb2RkJylcdD8ge2E6IDIsIGI6IDF9IDpcblx0XHQoc3Bl
Y2lhbCA9PSAnZXZlbicpXHQ/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBhfTtcblxuXHRyZXR1
cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFyc2VkKTtcbn07XG5cbmxvY2FsLmNyZWF0
ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlvbnMsIG9mVHlwZSl7
XG5cdHJldHVybiBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0dmFyIHVpZCA9IHRoaXMu
Z2V0VUlEKG5vZGUpO1xuXHRcdGlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0pe1xuXHRcdFx0dmFy
IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1cm4gZmFs
c2U7XG5cdFx0XHR2YXIgZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7XG5cdFx0XHRpZiAo
b2ZUeXBlKXtcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHRcdFx0
ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkgY29udGludWU7XG5c
dFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRc
dFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRc
dFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTtcblx0XHRc
dFx0XHR0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRc
dH0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFyZ3Vt
ZW50ID0gYXJndW1lbnQgfHwgJ24nO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLmNhY2hlTlRIW2Fy
Z3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpO1xuXHRcdGlmICghcGFy
c2VkKSByZXR1cm4gZmFsc2U7XG5cdFx0dmFyIGEgPSBwYXJzZWQuYSwgYiA9IHBhcnNlZC5iLCBw
b3MgPSB0aGlzW3Bvc2l0aW9uc11bdWlkXTtcblx0XHRpZiAoYSA9PSAwKSByZXR1cm4gYiA9PSBw
b3M7XG5cdFx0aWYgKGEgPiAwKXtcblx0XHRcdGlmIChwb3MgPCBiKSByZXR1cm4gZmFsc2U7XG5c
dFx0fSBlbHNlIHtcblx0XHRcdGlmIChiIDwgcG9zKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRc
dHJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDtcblx0fTtcbn07XG5cbi8qPC9udGgtcHNldWRv
LXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG5cbmxvY2FsLnB1c2hBcnJheSA9
IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xu
XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpKSB0aGlzLmZvdW5kLnB1c2gobm9kZSk7XG59O1xuXG5sb2NhbC5wdXNoVUlE
ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
XG5cdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0aWYgKCF0aGlzLnVuaXF1ZXNbdWlk
XSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcykpe1xuXHRcdHRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHR0aGlzLmZv
dW5kLnB1c2gobm9kZSk7XG5cdH1cbn07XG5cbmxvY2FsLm1hdGNoTm9kZSA9IGZ1bmN0aW9uKG5v
ZGUsIHNlbGVjdG9yKXtcblx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5uYXRpdmVN
YXRjaGVzU2VsZWN0b3Ipe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cXFsoW149XSspPVxccyoo
W14nXCJcXF1dKz8pXFxzKlxcXS9nLCAnWyQxPVwiJDJcIl0nKSk7XG5cdFx0fSBjYXRjaCAobWF0
Y2hFcnJvcil7fVxuXHR9XG5cblx0dmFyIHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2Uoc2VsZWN0
b3IpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7XG5cblx0Ly8gc2ltcGxlIChzaW5nbGUp
IHNlbGVjdG9yc1xuXHR2YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnMsIHNpbXBs
ZUV4cENvdW50ZXIgPSAwLCBpLCBjdXJyZW50RXhwcmVzc2lvbjtcblx0Zm9yIChpID0gMDsgKGN1
cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspe1xuXHRcdGlmIChjdXJyZW50
RXhwcmVzc2lvbi5sZW5ndGggPT0gMSl7XG5cdFx0XHR2YXIgZXhwID0gY3VycmVudEV4cHJlc3Np
b25bMF07XG5cdFx0XHRpZiAodGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUsICh0aGlzLmlzWE1MRG9j
dW1lbnQpID8gZXhwLnRhZyA6IGV4cC50YWcudG9VcHBlckNhc2UoKSwgZXhwLmlkLCBleHAuY2xh
c3NlcywgZXhwLmF0dHJpYnV0ZXMsIGV4cC5wc2V1ZG9zKSkgcmV0dXJuIHRydWU7XG5cdFx0XHRz
aW1wbGVFeHBDb3VudGVyKys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNpbXBsZUV4cENvdW50ZXIg
PT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZhciBub2RlcyA9IHRoaXMuc2Vh
cmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07XG5cdGZvciAoaSA9IDA7IGl0ZW0gPSBu
b2Rlc1tpKytdOyl7XG5cdFx0aWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0cnVlO1xuXHR9XG5c
dHJldHVybiBmYWxzZTtcbn07XG5cbmxvY2FsLm1hdGNoUHNldWRvID0gZnVuY3Rpb24obm9kZSwg
bmFtZSwgYXJndW1lbnQpe1xuXHR2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86JyArIG5hbWU7XG5c
dGlmICh0aGlzW3BzZXVkb05hbWVdKSByZXR1cm4gdGhpc1twc2V1ZG9OYW1lXShub2RlLCBhcmd1
bWVudCk7XG5cdHZhciBhdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtc
blx0cmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUgOiAhIWF0dHJpYnV0
ZTtcbn07XG5cbmxvY2FsLm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRhZyl7XG5cdFx0dmFyIG5vZGVO
YW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDogbm9kZS5ub2RlTmFt
ZS50b1VwcGVyQ2FzZSgpO1xuXHRcdGlmICh0YWcgPT0gJyonKXtcblx0XHRcdGlmIChub2RlTmFt
ZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9kZXMgYW5kIGNsb3Nl
ZCBub2Rlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAobm9kZU5hbWUgIT0gdGFnKSByZXR1cm4g
ZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlkICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcp
ICE9IGlkKSByZXR1cm4gZmFsc2U7XG5cblx0dmFyIGksIHBhcnQsIGNscztcblx0aWYgKGNsYXNz
ZXMpIGZvciAoaSA9IGNsYXNzZXMubGVuZ3RoOyBpLS07KXtcblx0XHRjbHMgPSB0aGlzLmdldEF0
dHJpYnV0ZShub2RlLCAnY2xhc3MnKTtcblx0XHRpZiAoIShjbHMgJiYgY2xhc3Nlc1tpXS5yZWdl
eHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChhdHRyaWJ1dGVzKSBmb3Ig
KGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IGF0dHJpYnV0ZXNbaV07
XG5cdFx0aWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG5v
ZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSByZXR1
cm4gZmFsc2U7XG5cdH1cblx0aWYgKHBzZXVkb3MpIGZvciAoaSA9IHBzZXVkb3MubGVuZ3RoOyBp
LS07KXtcblx0XHRwYXJ0ID0gcHNldWRvc1tpXTtcblx0XHRpZiAoIXRoaXMubWF0Y2hQc2V1ZG8o
bm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJu
IHRydWU7XG59O1xuXG52YXIgY29tYmluYXRvcnMgPSB7XG5cblx0JyAnOiBmdW5jdGlvbihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpeyAvLyBh
bGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbFxuXG5cdFx0dmFyIGksIGl0ZW0sIGNoaWxkcmVuO1xu
XG5cdFx0aWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpe1xuXHRcdFx0Z2V0QnlJZDogaWYgKGlkKXtc
blx0XHRcdFx0aXRlbSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0
XHRpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1lICYmIGl0ZW0gJiYg
aXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkpe1xuXHRcdFx0XHRc
dC8vIGFsbFtpZF0gcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIHdpdGggdGhhdCBuYW1lIG9yIGlk
IGluc2lkZSBub2RlXG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmVzIGp1c3Qgb25lIGl0IHdpbGwgcmV0
dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0
Y2hpbGRyZW4gPSBub2RlLmFsbFtpZF07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZHJlbikgcmV0dXJu
O1xuXHRcdFx0XHRcdGlmICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcblx0
XHRcdFx0XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspe1xuXHRcdFx0XHRcdFx0
dmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTtcblx0XHRcdFx0XHRcdGlm
IChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBpZCl7XG5cdFx0XHRcdFx0XHRcdHRoaXMu
cHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRc
dFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0
cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXRlbSl7XG5cdFx0XHRcdFx0Ly8gaWYg
dGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ugd2lsbCB0cnkgR0VC
VE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsXG5cdFx0XHRcdFx0aWYgKHRoaXMuY29udGFp
bnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuO1xuXHRcdFx0XHRcdGVsc2UgYnJlYWsgZ2V0QnlJ
ZDtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2RlICYmICF0aGlzLmNv
bnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47XG5cdFx0XHRcdHRoaXMucHVzaChpdGVtLCB0YWcs
IG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5c
dFx0XHR9XG5cdFx0XHRnZXRCeUNsYXNzOiBpZiAoY2xhc3NlcyAmJiBub2RlLmdldEVsZW1lbnRz
QnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRjaGlsZHJlbiA9IG5v
ZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcpKTtcblx0XHRcdFx0
aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlDbGFzcztcblx0
XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwg
dGFnLCBpZCwgbnVsbCwgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0
XHRcdH1cblx0XHR9XG5cdFx0Z2V0QnlUYWc6IHtcblx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuXHRcdFx0aWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4u
bGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7XG5cdFx0XHRpZiAoIXRoaXMuYnJva2VuU3RhckdFQlRO
KSB0YWcgPSBudWxsO1xuXHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0
aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0fVxuXHR9LFxuXG5cdCc+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBjaGlsZHJlblxuXHRcdGlmICgobm9kZSA9IG5v
ZGUuZmlyc3RDaGlsZCkpIGRvIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMu
cHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9
IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKTtcblx0fSxcblxuXHQnKyc6IGZ1bmN0
aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0
IHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0J14n
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gZmlyc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdGlmIChub2Rl
KXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2UgdGhpc1snY29tYmlu
YXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5c
dFx0fVxuXHR9LFxuXG5cdCd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3Ncblx0XHR3aGlsZSAoKG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51
ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRcdGlmICh0aGlzLmJp
dFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7
XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0fVxuXHR9LFxuXG5cdCcrKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcgYW5kIHByZXZpb3Vz
IHNpYmxpbmdcblx0XHR0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0J35+Jzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxpbmdzXG5cdFx0dGhpc1snY29tYmluYXRv
cjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
dGhpc1snY29tYmluYXRvcjohfiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMgdXAgdG8gZG9jdW1l
bnRcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAobm9kZSAhPT0gdGhp
cy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCchPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgcGFyZW50IChvbmUgbGV2ZWwpXG5c
dFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVu
dCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mp
O1xuXHR9LFxuXG5cdCchKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJp
YnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0g
bm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0XHRcdHRo
aXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0
XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnIV4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbGFzdCBjaGlsZFxuXHRcdG5vZGUg
PSBub2RlLmxhc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlw
ZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0JyF+JzogZnVu
Y3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHBy
ZXZpb3VzIHNpYmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcp
KXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVp
ZCA9IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBi
cmVhaztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVz
aChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5c
dH1cblxufTtcblxuZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxbJ2NvbWJpbmF0b3I6
JyArIGNdID0gY29tYmluYXRvcnNbY107XG5cbnZhciBwc2V1ZG9zID0ge1xuXG5cdC8qPHBzZXVk
by1zZWxlY3RvcnM+Ki9cblxuXHQnZW1wdHknOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgY2hp
bGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0cmV0dXJuICEoY2hpbGQgJiYgY2hpbGQubm9kZVR5
cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5s
ZW5ndGg7XG5cdH0sXG5cblx0J25vdCc6IGZ1bmN0aW9uKG5vZGUsIGV4cHJlc3Npb24pe1xuXHRc
dHJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7XG5cdH0sXG5cblx0J2Nv
bnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7XG5cdFx0cmV0dXJuIChub2RlLmlubmVyVGV4
dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5pbmRleE9mKHRleHQpID4gLTE7XG5cdH0sXG5c
blx0J2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9k
ZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7
XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2Rl
KXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5
cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdvbmx5
LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIHByZXYgPSBub2RlO1xuXHRcdHdoaWxl
ICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZVR5cGUgPT0gMSkg
cmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAoKG5leHQgPSBu
ZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5c
blx0J250aC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0
U2libGluZycsICdwb3NOVEgnKSxcblxuXHQnbnRoLWxhc3QtY2hpbGQnOiBsb2NhbC5jcmVhdGVO
VEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRITGFzdCcpLFxu
XG5cdCdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICdu
ZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSksXG5cblx0J250aC1sYXN0LW9mLXR5cGUn
OiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAn
cG9zTlRIVHlwZUxhc3QnLCB0cnVlKSxcblxuXHQnaW5kZXgnOiBmdW5jdGlvbihub2RlLCBpbmRl
eCl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnJyArIChpbmRl
eCArIDEpKTtcblx0fSxcblxuXHQnZXZlbic6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0
aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuJyk7XG5cdH0sXG5cblx0J29kZCc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwg
JzJuKzEnKTtcblx0fSxcblxuXHQvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvKjxv
Zi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnZmlyc3Qtb2YtdHlwZSc6IGZ1bmN0aW9u
KG5vZGUpe1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChu
b2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFt
ZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdsYXN0LW9mLXR5
cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xu
XHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9
PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdCdv
bmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGUsIG5vZGVO
YW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2li
bGluZykpIGlmIChwcmV2Lm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0
dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBp
ZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0
cnVlO1xuXHR9LFxuXG5cdC8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQvLyBj
dXN0b20gcHNldWRvc1xuXG5cdCdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
ICFub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHJldHVybiBub2RlLmRpc2FibGVkO1xuXHR9LFxuXG5cdCdjaGVja2VkJzogZnVuY3Rpb24o
bm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVjdGVkO1xuXHR9LFxu
XG5cdCdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiB0aGlzLmlzSFRNTERvY3Vt
ZW50ICYmIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSAmJiAobm9kZS5ocmVm
IHx8IG5vZGUudHlwZSB8fCB0aGlzLmhhc0F0dHJpYnV0ZShub2RlLCAndGFiaW5kZXgnKSk7XG5c
dH0sXG5cblx0J3Jvb3QnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUgPT09IHRo
aXMucm9vdCk7XG5cdH0sXG5cblx0J3NlbGVjdGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0
dXJuIG5vZGUuc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xufTtc
blxuZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBwXSA9IHBzZXVkb3Nb
cF07XG5cbi8vIGF0dHJpYnV0ZXMgbWV0aG9kc1xuXG52YXIgYXR0cmlidXRlR2V0dGVycyA9IGxv
Y2FsLmF0dHJpYnV0ZUdldHRlcnMgPSB7XG5cblx0J2Zvcic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0
dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlzLmdldEF0dHJpYnV0
ZSgnZm9yJyk7XG5cdH0sXG5cblx0J2hyZWYnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2hy
ZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6IHRoaXMuZ2V0QXR0
cmlidXRlKCdocmVmJyk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gKHRoaXMuc3R5bGUpID8gdGhpcy5zdHlsZS5jc3NUZXh0IDogdGhpcy5nZXRBdHRyaWJ1dGUo
J3N0eWxlJyk7XG5cdH0sXG5cblx0J3RhYmluZGV4JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0
cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTtcblx0XHRyZXR1
cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8gYXR0cmlidXRl
Tm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9LFxuXG5cdCd0eXBlJzogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcblx0fSxcblxuXHQnbWF4bGVuZ3Ro
JzogZnVuY3Rpb24oKXtcblx0XHR2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRl
Tm9kZSgnbWF4TGVuZ3RoJyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0
ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fVxu
XG59O1xuXG5hdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4
TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5ndGg7XG5cbi8vIFNsaWNrXG5cbnZhciBT
bGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pO1xuXG5TbGljay52ZXJzaW9u
ID0gJzEuMS43JztcblxuLy8gU2xpY2sgZmluZGVyXG5cblNsaWNrLnNlYXJjaCA9IGZ1bmN0aW9u
KGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7XG5cdHJldHVybiBsb2NhbC5zZWFyY2goY29u
dGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kKTtcbn07XG5cblNsaWNrLmZpbmQgPSBmdW5jdGlvbihj
b250ZXh0LCBleHByZXNzaW9uKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHBy
ZXNzaW9uLCBudWxsLCB0cnVlKTtcbn07XG5cbi8vIFNsaWNrIGNvbnRhaW5tZW50IGNoZWNrZXJc
blxuU2xpY2suY29udGFpbnMgPSBmdW5jdGlvbihjb250YWluZXIsIG5vZGUpe1xuXHRsb2NhbC5z
ZXREb2N1bWVudChjb250YWluZXIpO1xuXHRyZXR1cm4gbG9jYWwuY29udGFpbnMoY29udGFpbmVy
LCBub2RlKTtcbn07XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBnZXR0ZXJcblxuU2xpY2suZ2V0QXR0
cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KG5vZGUp
O1xuXHRyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxuU2xpY2su
aGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5cdGxvY2FsLnNldERvY3VtZW50
KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwuaGFzQXR0cmlidXRlKG5vZGUsIG5hbWUpO1xufTtcblxu
Ly8gU2xpY2sgbWF0Y2hlclxuXG5TbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9y
KXtcblx0aWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTtcblx0aWYgKCFzZWxl
Y3RvciB8fCBzZWxlY3RvciA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdGxvY2FsLnNldERvY3Vt
ZW50KG5vZGUpO1xuXHRyZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNlbGVjdG9yKTtcbn07
XG5cbi8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVBdHRyaWJ1dGVH
ZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7XG5cdGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV0gPSBmbjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TbGljay5sb29rdXBBdHRyaWJ1dGVHZXR0
ZXIgPSBmdW5jdGlvbihuYW1lKXtcblx0cmV0dXJuIGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFt
ZV07XG59O1xuXG4vLyBTbGljayBwc2V1ZG8gYWNjZXNzb3JcblxuU2xpY2suZGVmaW5lUHNldWRv
ID0gZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRsb2NhbFsncHNldWRvOicgKyBuYW1lXSA9IGZ1bmN0
aW9uKG5vZGUsIGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gZm4uY2FsbChub2RlLCBhcmd1bWVudCk7
XG5cdH07XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2subG9va3VwUHNldWRvID0gZnVuY3Rp
b24obmFtZSl7XG5cdHZhciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBuYW1lXTtcblx0aWYg
KHBzZXVkbykgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50KXtcblx0XHRyZXR1cm4gcHNldWRvLmNh
bGwodGhpcywgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbi8vIFNsaWNr
IG92ZXJyaWRlcyBhY2Nlc3NvclxuXG5TbGljay5vdmVycmlkZSA9IGZ1bmN0aW9uKHJlZ2V4cCwg
Zm4pe1xuXHRsb2NhbC5vdmVycmlkZShyZWdleHAsIGZuKTtcblx0cmV0dXJuIHRoaXM7XG59O1xu
XG5TbGljay5pc1hNTCA9IGxvY2FsLmlzWE1MO1xuXG5TbGljay51aWRPZiA9IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChub2RlKTtcbn07XG5cbmlmICghdGhpcy5T
bGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBl
b2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhp
cyk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudFxuXG5kZXNjcmlwdGlvbjogT25lIG9mIHRo
ZSBtb3N0IGltcG9ydGFudCBpdGVtcyBpbiBNb29Ub29scy4gQ29udGFpbnMgdGhlIGRvbGxhciBm
dW5jdGlvbiwgdGhlIGRvbGxhcnMgZnVuY3Rpb24sIGFuZCBhbiBoYW5kZnVsIG9mIGNyb3NzLWJy
b3dzZXIsIHRpbWUtc2F2ZXIgbWV0aG9kcyB0byBsZXQgeW91IGVhc2lseSB3b3JrIHdpdGggSFRN
TCBFbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
V2luZG93LCBEb2N1bWVudCwgQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE9iamVjdCwgTnVtYmVy
LCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl1cblxucHJvdmlkZXM6IFtFbGVtZW50LCBFbGVt
ZW50cywgJCwgJCQsIElGcmFtZSwgU2VsZWN0b3JzXVxuXG4uLi5cbiovXG5cbnZhciBFbGVtZW50
ID0gdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdHZhciBrb25zdHJ1Y3Rv
ciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107XG5cdGlmIChrb25zdHJ1Y3RvcikgcmV0dXJu
IGtvbnN0cnVjdG9yKHByb3BzKTtcblx0aWYgKHR5cGVvZiB0YWcgIT0gJ3N0cmluZycpIHJldHVy
biBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7XG5cblx0aWYgKCFwcm9wcykgcHJvcHMgPSB7
fTtcblxuXHRpZiAoISgvXltcXHctXSskLykudGVzdCh0YWcpKXtcblx0XHR2YXIgcGFyc2VkID0g
U2xpY2sucGFyc2UodGFnKS5leHByZXNzaW9uc1swXVswXTtcblx0XHR0YWcgPSAocGFyc2VkLnRh
ZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnO1xuXHRcdGlmIChwYXJzZWQuaWQgJiYgcHJv
cHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQuaWQ7XG5cblx0XHR2YXIgYXR0cmlidXRl
cyA9IHBhcnNlZC5hdHRyaWJ1dGVzO1xuXHRcdGlmIChhdHRyaWJ1dGVzKSBmb3IgKHZhciBhdHRy
LCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGF0dHIg
PSBhdHRyaWJ1dGVzW2ldO1xuXHRcdFx0aWYgKHByb3BzW2F0dHIua2V5XSAhPSBudWxsKSBjb250
aW51ZTtcblxuXHRcdFx0aWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJhdG9yID09
ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTtcblx0XHRcdGVsc2UgaWYgKCFhdHRy
LnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVlO1xuXHRcdH1c
blxuXHRcdGlmIChwYXJzZWQuY2xhc3NMaXN0ICYmIHByb3BzWydjbGFzcyddID09IG51bGwpIHBy
b3BzWydjbGFzcyddID0gcGFyc2VkLmNsYXNzTGlzdC5qb2luKCcgJyk7XG5cdH1cblxuXHRyZXR1
cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTtcbn07XG5cblxuaWYgKEJyb3dzZXIu
RWxlbWVudCl7XG5cdEVsZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVtZW50LnByb3RvdHlw
ZTtcblx0Ly8gSUU4IGFuZCBJRTkgcmVxdWlyZSB0aGUgd3JhcHBpbmcuXG5cdEVsZW1lbnQucHJv
dG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXtcblx0XHRyZXR1cm4gZnVu
Y3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGZpcmVFdmVudC5jYWxsKHRoaXMsIHR5
cGUsIGV2ZW50KTtcblx0XHR9O1xuXHR9KShFbGVtZW50LnByb3RvdHlwZS5maXJlRXZlbnQpO1xu
fVxuXG5uZXcgVHlwZSgnRWxlbWVudCcsIEVsZW1lbnQpLm1pcnJvcihmdW5jdGlvbihuYW1lKXtc
blx0aWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuO1xuXG5cdHZhciBvYmogPSB7fTtc
blx0b2JqW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0cyA9IFtdLCBhcmdzID0g
YXJndW1lbnRzLCBlbGVtZW50cyA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXNbaV0sIHJlc3Vs
dCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3MpO1xuXHRc
dFx0ZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTtc
blx0XHR9XG5cdFx0cmV0dXJuIChlbGVtZW50cykgPyBuZXcgRWxlbWVudHMocmVzdWx0cykgOiBy
ZXN1bHRzO1xuXHR9O1xuXG5cdEVsZW1lbnRzLmltcGxlbWVudChvYmopO1xufSk7XG5cbmlmICgh
QnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVudC5wYXJlbnQgPSBPYmplY3Q7XG5cblx0RWxlbWVu
dC5Qcm90b3R5cGUgPSB7XG5cdFx0JyRjb25zdHJ1Y3Rvcic6IEVsZW1lbnQsXG5cdFx0JyRmYW1p
bHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50JykuaGlkZSgpXG5cdH07XG5cblx0RWxlbWVu
dC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0XHRFbGVtZW50LlByb3RvdHlwZVtu
YW1lXSA9IG1ldGhvZDtcblx0fSk7XG59XG5cbkVsZW1lbnQuQ29uc3RydWN0b3JzID0ge307XG5c
blxuXG52YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9uKCl7XG5cdHZhciBw
YXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge1xuXHRcdHByb3BlcnRpZXM6IFR5cGUuaXNP
YmplY3QsXG5cdFx0aWZyYW1lOiBmdW5jdGlvbihvYmope1xuXHRcdFx0cmV0dXJuIChvYmogIT0g
bnVsbCk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgcHJvcHMgPSBwYXJhbXMucHJvcGVydGllcyB8
fCB7fSwgaWZyYW1lO1xuXHRpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0gZG9jdW1lbnQuaWQo
cGFyYW1zLmlmcmFtZSk7XG5cdHZhciBvbmxvYWQgPSBwcm9wcy5vbmxvYWQgfHwgZnVuY3Rpb24o
KXt9O1xuXHRkZWxldGUgcHJvcHMub25sb2FkO1xuXHRwcm9wcy5pZCA9IHByb3BzLm5hbWUgPSBb
cHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwgaWZyYW1lLm5hbWUp
IDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTtcblx0aWZyYW1lID0gbmV3
IEVsZW1lbnQoaWZyYW1lIHx8ICdpZnJhbWUnLCBwcm9wcyk7XG5cblx0dmFyIG9uTG9hZCA9IGZ1
bmN0aW9uKCl7XG5cdFx0b25sb2FkLmNhbGwoaWZyYW1lLmNvbnRlbnRXaW5kb3cpO1xuXHR9O1xu
XG5cdGlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7XG5cdGVsc2UgaWZyYW1l
LmFkZExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcblx0cmV0dXJuIGlmcmFtZTtcbn0pO1xuXG52
YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMpe1xuXHRpZiAobm9k
ZXMgJiYgbm9kZXMubGVuZ3RoKXtcblx0XHR2YXIgdW5pcXVlcyA9IHt9LCBub2RlO1xuXHRcdGZv
ciAodmFyIGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0dmFyIHVpZCA9IFNsaWNr
LnVpZE9mKG5vZGUpO1xuXHRcdFx0aWYgKCF1bmlxdWVzW3VpZF0pe1xuXHRcdFx0XHR1bmlxdWVz
W3VpZF0gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxu
XHR9XG59O1xuXG5FbGVtZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTtcbkVsZW1lbnRzLnBh
cmVudCA9IEFycmF5O1xuXG5uZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50cykuaW1wbGVtZW50
KHtcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlciwgYmluZCl7XG5cdFx0aWYgKCFmaWx0ZXIp
IHJldHVybiB0aGlzO1xuXHRcdHJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVyKHRoaXMs
ICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJl
dHVybiBpdGVtLm1hdGNoKGZpbHRlcik7XG5cdFx0fSA6IGZpbHRlciwgYmluZCkpO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRwdXNoOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxl
bmd0aDtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0
aWYgKGl0ZW0pIHRoaXNbbGVuZ3RoKytdID0gaXRlbTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlz
Lmxlbmd0aCA9IGxlbmd0aCk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHVuc2hpZnQ6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJn
dW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0
XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywgaXRlbXMpO1xuXHR9
LnByb3RlY3QoKSxcblxuXHRjb25jYXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG5ld0VsZW1lbnRz
ID0gbmV3IEVsZW1lbnRzKHRoaXMpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTtcblx0
XHRcdGlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMuYXBwZW5kKGl0ZW0p
O1xuXHRcdFx0ZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0XHRyZXR1cm4g
bmV3RWxlbWVudHM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oY29sbGVj
dGlvbil7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7
IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnBy
b3RlY3QoKSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR3aGlsZSAodGhpcy5sZW5ndGgp
IGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LnByb3Rl
Y3QoKVxuXG59KTtcblxuXG5cbihmdW5jdGlvbigpe1xuXG4vLyBGRiwgSUVcbnZhciBzcGxpY2Ug
PSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBvYmplY3QgPSB7JzAnOiAwLCAnMSc6IDEsIGxlbmd0
aDogMn07XG5cbnNwbGljZS5jYWxsKG9iamVjdCwgMSwgMSk7XG5pZiAob2JqZWN0WzFdID09IDEp
IEVsZW1lbnRzLmltcGxlbWVudCgnc3BsaWNlJywgZnVuY3Rpb24oKXtcblx0dmFyIGxlbmd0aCA9
IHRoaXMubGVuZ3RoO1xuXHR2YXIgcmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7XG5cdHdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzW2xlbmd0aC0t
XTtcblx0cmV0dXJuIHJlc3VsdDtcbn0ucHJvdGVjdCgpKTtcblxuQXJyYXkuZm9yRWFjaE1ldGhv
ZChmdW5jdGlvbihtZXRob2QsIG5hbWUpe1xuXHRFbGVtZW50cy5pbXBsZW1lbnQobmFtZSwgbWV0
aG9kKTtcbn0pO1xuXG5BcnJheS5taXJyb3IoRWxlbWVudHMpO1xuXG4vKjxsdElFOD4qL1xudmFy
IGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTDtcbnRyeSB7XG5cdGNyZWF0ZUVsZW1lbnRBY2NlcHRz
SFRNTCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aW5wdXQgbmFtZT14PicpLm5hbWUgPT0g
J3gnKTtcbn0gY2F0Y2ggKGUpe31cblxudmFyIGVzY2FwZVF1b3RlcyA9IGZ1bmN0aW9uKGh0bWwp
e1xuXHRyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC9c
Ii9nLCAnJnF1b3Q7Jyk7XG59O1xuLyo8L2x0SUU4PiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3
OSAtIElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0
eWxlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRN
TCA9ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJI
VE1MO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4q
L1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xuXG5cdG5ld0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywg
cHJvcHMpe1xuXHRcdGlmIChwcm9wcyl7XG5cdFx0XHRpZiAocHJvcHMuY2hlY2tlZCAhPSBudWxs
KSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cdFx0XHRpZiAoKHByb3Bz
LnR5cGUgPT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09ICdyYWRpbycpICYmIHByb3BzLnZh
bHVlID09IG51bGwpIHByb3BzLnZhbHVlID0gJ29uJztcblx0XHRcdC8qPGx0SUU5PiovIC8vIElF
IG5lZWRzIHRoZSB0eXBlIHRvIGJlIHNldCBiZWZvcmUgY2hhbmdpbmcgY29udGVudCBvZiBzdHls
ZSBlbGVtZW50XG5cdFx0XHRpZiAoIWNhbkNoYW5nZVN0eWxlSFRNTCAmJiB0YWcgPT0gJ3N0eWxl
Jyl7XG5cdFx0XHRcdHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
dHlsZScpO1xuXHRcdFx0XHRzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQv
Y3NzJyk7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSBkZWxldGUgcHJvcHMudHlwZTtcblx0XHRc
dFx0cmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpO1xuXHRcdFx0fVxuXHRc
dFx0Lyo8L2x0SUU5PiovXG5cdFx0XHQvKjxsdElFOD4qLy8vIEZpeCBmb3IgcmVhZG9ubHkgbmFt
ZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOFxuXHRcdFx0aWYgKGNyZWF0ZUVsZW1lbnRB
Y2NlcHRzSFRNTCl7XG5cdFx0XHRcdHRhZyA9ICc8JyArIHRhZztcblx0XHRcdFx0aWYgKHByb3Bz
Lm5hbWUpIHRhZyArPSAnIG5hbWU9XCInICsgZXNjYXBlUXVvdGVzKHByb3BzLm5hbWUpICsgJ1wi
Jztcblx0XHRcdFx0aWYgKHByb3BzLnR5cGUpIHRhZyArPSAnIHR5cGU9XCInICsgZXNjYXBlUXVv
dGVzKHByb3BzLnR5cGUpICsgJ1wiJztcblx0XHRcdFx0dGFnICs9ICc+Jztcblx0XHRcdFx0ZGVs
ZXRlIHByb3BzLm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0fVxuXHRc
dFx0Lyo8L2x0SUU4PiovXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlkKHRoaXMuY3JlYXRlRWxl
bWVudCh0YWcpKS5zZXQocHJvcHMpO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4oZnVuY3Rpb24o
KXtcblxuU2xpY2sudWlkT2Yod2luZG93KTtcblNsaWNrLnVpZE9mKGRvY3VtZW50KTtcblxuRG9j
dW1lbnQuaW1wbGVtZW50KHtcblxuXHRuZXdUZXh0Tm9kZTogZnVuY3Rpb24odGV4dCl7XG5cdFx0
cmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5j
dGlvbigpe1xuXHRcdHJldHVybiB0aGlzLndpbmRvdztcblx0fSxcblxuXHRpZDogKGZ1bmN0aW9u
KCl7XG5cblx0XHR2YXIgdHlwZXMgPSB7XG5cblx0XHRcdHN0cmluZzogZnVuY3Rpb24oaWQsIG5v
Y2FzaCwgZG9jKXtcblx0XHRcdFx0aWQgPSBTbGljay5maW5kKGRvYywgJyMnICsgaWQucmVwbGFj
ZSgvKFxcVykvZywgJ1xcXFwkMScpKTtcblx0XHRcdFx0cmV0dXJuIChpZCkgPyB0eXBlcy5lbGVt
ZW50KGlkLCBub2Nhc2gpIDogbnVsbDtcblx0XHRcdH0sXG5cblx0XHRcdGVsZW1lbnQ6IGZ1bmN0
aW9uKGVsLCBub2Nhc2gpe1xuXHRcdFx0XHRTbGljay51aWRPZihlbCk7XG5cdFx0XHRcdGlmICgh
bm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQpJC9pKS50ZXN0KGVs
LnRhZ05hbWUpKXtcblx0XHRcdFx0XHR2YXIgZmlyZUV2ZW50ID0gZWwuZmlyZUV2ZW50O1xuXHRc
dFx0XHRcdC8vIHdyYXBwaW5nIG5lZWRlZCBpbiBJRTcsIG9yIGVsc2UgY3Jhc2hcblx0XHRcdFx0
XHRlbC5fZmlyZUV2ZW50ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpe1xuXHRcdFx0XHRcdFx0cmV0
dXJuIGZpcmVFdmVudCh0eXBlLCBldmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRPYmpl
Y3QuYXBwZW5kKGVsLCBFbGVtZW50LlByb3RvdHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0
dXJuIGVsO1xuXHRcdFx0fSxcblxuXHRcdFx0b2JqZWN0OiBmdW5jdGlvbihvYmosIG5vY2FzaCwg
ZG9jKXtcblx0XHRcdFx0aWYgKG9iai50b0VsZW1lbnQpIHJldHVybiB0eXBlcy5lbGVtZW50KG9i
ai50b0VsZW1lbnQoZG9jKSwgbm9jYXNoKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9
XG5cblx0XHR9O1xuXG5cdFx0dHlwZXMudGV4dG5vZGUgPSB0eXBlcy53aGl0ZXNwYWNlID0gdHlw
ZXMud2luZG93ID0gdHlwZXMuZG9jdW1lbnQgPSBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVy
biB6ZXJvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWwsIG5vY2FzaCwgZG9jKXtc
blx0XHRcdGlmIChlbCAmJiBlbC4kZmFtaWx5ICYmIGVsLnVuaXF1ZU51bWJlcikgcmV0dXJuIGVs
O1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YoZWwpO1xuXHRcdFx0cmV0dXJuICh0eXBlc1t0eXBl
XSkgPyB0eXBlc1t0eXBlXShlbCwgbm9jYXNoLCBkb2MgfHwgZG9jdW1lbnQpIDogbnVsbDtcblx0
XHR9O1xuXG5cdH0pKClcblxufSk7XG5cbmlmICh3aW5kb3cuJCA9PSBudWxsKSBXaW5kb3cuaW1w
bGVtZW50KCckJywgZnVuY3Rpb24oZWwsIG5jKXtcblx0cmV0dXJuIGRvY3VtZW50LmlkKGVsLCBu
YywgdGhpcy5kb2N1bWVudCk7XG59KTtcblxuV2luZG93LmltcGxlbWVudCh7XG5cblx0Z2V0RG9j
dW1lbnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQ7XG5cdH0sXG5cblx0
Z2V0V2luZG93OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5b
RG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEVsZW1lbnRz
OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMsIGV4
cHJlc3Npb24sIG5ldyBFbGVtZW50cyk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudDogZnVuY3Rpb24o
ZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgZXhw
cmVzc2lvbikpO1xuXHR9XG5cbn0pO1xuXG52YXIgY29udGFpbnMgPSB7Y29udGFpbnM6IGZ1bmN0
aW9uKGVsZW1lbnQpe1xuXHRyZXR1cm4gU2xpY2suY29udGFpbnModGhpcywgZWxlbWVudCk7XG59
fTtcblxuaWYgKCFkb2N1bWVudC5jb250YWlucykgRG9jdW1lbnQuaW1wbGVtZW50KGNvbnRhaW5z
KTtcbmlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY29udGFpbnMpIEVsZW1lbnQu
aW1wbGVtZW50KGNvbnRhaW5zKTtcblxuXG5cbi8vIHRyZWUgd2Fsa2luZ1xuXG52YXIgaW5qZWN0
Q29tYmluYXRvciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNvbWJpbmF0b3Ipe1xuXHRpZiAoIWV4
cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yO1xuXG5cdGV4cHJlc3Npb24gPSBPYmplY3QuY2xv
bmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpO1xuXG5cdHZhciBleHByZXNzaW9ucyA9IGV4cHJl
c3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGkt
LTspXG5cdFx0ZXhwcmVzc2lvbnNbaV1bMF0uY29tYmluYXRvciA9IGNvbWJpbmF0b3I7XG5cblx0
cmV0dXJuIGV4cHJlc3Npb247XG59O1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldE5leHQ6ICd+
Jyxcblx0Z2V0UHJldmlvdXM6ICchficsXG5cdGdldFBhcmVudDogJyEnXG59LCBmdW5jdGlvbihj
b21iaW5hdG9yLCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9u
KGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5qZWN0Q29tYmluYXRv
cihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbk9iamVjdC5mb3JFYWNo
KHtcblx0Z2V0QWxsTmV4dDogJ34nLFxuXHRnZXRBbGxQcmV2aW91czogJyF+Jyxcblx0Z2V0U2li
bGluZ3M6ICd+ficsXG5cdGdldENoaWxkcmVuOiAnPicsXG5cdGdldFBhcmVudHM6ICchJ1xufSwg
ZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVudC5pbXBsZW1lbnQobWV0aG9k
LCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbGVtZW50cyhpbmpl
Y3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTtcblx0fSk7XG59KTtcblxuRWxl
bWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldEZpcnN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0
XHRyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3Io
ZXhwcmVzc2lvbiwgJz4nKSlbMF0pO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKGV4cHJl
c3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0
Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKS5nZXRMYXN0KCkpO1xuXHR9LFxuXG5cdGdldFdp
bmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LndpbmRvdztc
blx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5vd25l
ckRvY3VtZW50O1xuXHR9LFxuXG5cdGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbihpZCl7XG5cdFx0
cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcnICsgaWQpLnJlcGxh
Y2UoLyhcXFcpL2csICdcXFxcJDEnKSkpO1xuXHR9LFxuXG5cdG1hdGNoOiBmdW5jdGlvbihleHBy
ZXNzaW9uKXtcblx0XHRyZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0Y2godGhpcywgZXhw
cmVzc2lvbik7XG5cdH1cblxufSk7XG5cblxuXG5pZiAod2luZG93LiQkID09IG51bGwpIFdpbmRv
dy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRpZiAoYXJndW1lbnRzLmxl
bmd0aCA9PSAxKXtcblx0XHRpZiAodHlwZW9mIHNlbGVjdG9yID09ICdzdHJpbmcnKSByZXR1cm4g
U2xpY2suc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHNlbGVjdG9yLCBuZXcgRWxlbWVudHMpO1xuXHRc
dGVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50
cyhzZWxlY3Rvcik7XG5cdH1cblx0cmV0dXJuIG5ldyBFbGVtZW50cyhhcmd1bWVudHMpO1xufSk7
XG5cbi8vIEluc2VydGVyc1xuXG52YXIgaW5zZXJ0ZXJzID0ge1xuXG5cdGJlZm9yZTogZnVuY3Rp
b24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9k
ZTtcblx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQp
O1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHR2YXIg
cGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQpIHBhcmVudC5pbnNl
cnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2libGluZyk7XG5cdH0sXG5cblx0Ym90dG9t
OiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNv
bnRleHQpO1xuXHR9LFxuXG5cdHRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7XG5cdFx0
ZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENoaWxkKTtcblx0fVxu
XG59O1xuXG5pbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTtcblxuXG5cbi8vIGdl
dFByb3BlcnR5IC8gc2V0UHJvcGVydHlcblxudmFyIHByb3BlcnR5R2V0dGVycyA9IHt9LCBwcm9w
ZXJ0eVNldHRlcnMgPSB7fTtcblxuLy8gcHJvcGVydGllc1xuXG52YXIgcHJvcGVydGllcyA9IHt9
O1xuQXJyYXkuZm9yRWFjaChbXG5cdCd0eXBlJywgJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZScsICdh
Y2Nlc3NLZXknLCAnY2VsbFBhZGRpbmcnLCAnY2VsbFNwYWNpbmcnLCAnY29sU3BhbicsXG5cdCdm
cmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCdcbl0sIGZ1bmN0aW9u
KHByb3BlcnR5KXtcblx0cHJvcGVydGllc1twcm9wZXJ0eS50b0xvd2VyQ2FzZSgpXSA9IHByb3Bl
cnR5O1xufSk7XG5cbnByb3BlcnRpZXMuaHRtbCA9ICdpbm5lckhUTUwnO1xucHJvcGVydGllcy50
ZXh0ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnRleHRDb250ZW50ID09IG51bGwp
ID8gJ2lubmVyVGV4dCc6ICd0ZXh0Q29udGVudCc7XG5cbk9iamVjdC5mb3JFYWNoKHByb3BlcnRp
ZXMsIGZ1bmN0aW9uKHJlYWwsIGtleSl7XG5cdHByb3BlcnR5U2V0dGVyc1trZXldID0gZnVuY3Rp
b24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbcmVhbF0gPSB2YWx1ZTtcblx0fTtcblx0cHJvcGVy
dHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZVtyZWFsXTtc
blx0fTtcbn0pO1xuXG4vKjxsdElFOT4qL1xucHJvcGVydHlTZXR0ZXJzLnRleHQgPSAoZnVuY3Rp
b24oKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRpZiAobm9kZS5nZXQo
J3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpO1xuXHRcdGVsc2Ugbm9k
ZVtwcm9wZXJ0aWVzLnRleHRdID0gdmFsdWU7XG5cdH07XG59KShwcm9wZXJ0eVNldHRlcnMudGV4
dCk7XG5cbnByb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRlcil7XG5cdHJldHVy
biBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUn
KSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUpO1xuXHR9O1xufSkocHJvcGVydHlHZXR0
ZXJzLnRleHQpO1xuLyo8L2x0SUU5PiovXG5cbi8vIEJvb2xlYW5zXG5cbnZhciBib29scyA9IFtc
blx0J2NvbXBhY3QnLCAnbm93cmFwJywgJ2lzbWFwJywgJ2RlY2xhcmUnLCAnbm9zaGFkZScsICdj
aGVja2VkJyxcblx0J2Rpc2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxlJywgJ3NlbGVjdGVk
JywgJ25vcmVzaXplJyxcblx0J2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywgJ2F1dG9mb2N1cycs
ICdjb250cm9scycsICdhdXRvcGxheScsXG5cdCdsb29wJ1xuXTtcblxudmFyIGJvb2xlYW5zID0g
e307XG5BcnJheS5mb3JFYWNoKGJvb2xzLCBmdW5jdGlvbihib29sKXtcblx0dmFyIGxvd2VyID0g
Ym9vbC50b0xvd2VyQ2FzZSgpO1xuXHRib29sZWFuc1tsb3dlcl0gPSBib29sO1xuXHRwcm9wZXJ0
eVNldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5vZGVbYm9vbF0g
PSAhIXZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuICEhbm9kZVtib29sXTtcblx0fTtcbn0pO1xuXG4vLyBTcGVjaWFsIGNh
c2VzXG5cbk9iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7XG5cblx0J2NsYXNzJzogZnVu
Y3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xh
c3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVl
KTtcblx0fSxcblxuXHQnZm9yJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdCgnaHRtbEZv
cicgaW4gbm9kZSkgPyBub2RlLmh0bWxGb3IgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdm
b3InLCB2YWx1ZSk7XG5cdH0sXG5cblx0J3N0eWxlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xu
XHRcdChub2RlLnN0eWxlKSA/IG5vZGUuc3R5bGUuY3NzVGV4dCA9IHZhbHVlIDogbm9kZS5zZXRB
dHRyaWJ1dGUoJ3N0eWxlJywgdmFsdWUpO1xuXHR9LFxuXG5cdCd2YWx1ZSc6IGZ1bmN0aW9uKG5v
ZGUsIHZhbHVlKXtcblx0XHRub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwpID8gdmFsdWUgOiAn
Jztcblx0fVxuXG59KTtcblxucHJvcGVydHlHZXR0ZXJzWydjbGFzcyddID0gZnVuY3Rpb24obm9k
ZSl7XG5cdHJldHVybiAoJ2NsYXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSB8fCBu
dWxsIDogbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG59O1xuXG4vKiA8d2Via2l0PiAqL1xu
dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyBJRSBzZXRzIHR5
cGUgYXMgcmVhZG9ubHkgYW5kIHRocm93c1xudHJ5IHsgZWwudHlwZSA9ICdidXR0b24nOyB9IGNh
dGNoIChlKXt9XG5pZiAoZWwudHlwZSAhPSAnYnV0dG9uJykgcHJvcGVydHlTZXR0ZXJzLnR5cGUg
PSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdG5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgdmFs
dWUpO1xufTtcbmVsID0gbnVsbDtcbi8qIDwvd2Via2l0PiAqL1xuXG4vKjxJRT4qL1xuXG4vKjxs
dElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnRc
bnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNlO1xuXHR0cnkge1xu
XHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7XG5cdFx0Zmxh
ZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmxhZztcbn0p
KCk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aW5wdXQnKSwgdm9sYXRpbGVJbnB1dFZhbHVlLCBodG1sNUlucHV0U3VwcG9ydDtcblxuLy8gIzIx
NzhcbmlucHV0LnZhbHVlID0gJ3QnO1xuaW5wdXQudHlwZSA9ICdzdWJtaXQnO1xudm9sYXRpbGVJ
bnB1dFZhbHVlID0gaW5wdXQudmFsdWUgIT0gJ3QnO1xuXG4vLyAjMjQ0MyAtIElFIHRocm93cyBc
IkludmFsaWQgQXJndW1lbnRcIiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUgaW5wdXQgdHlwZXNc
bnRyeSB7XG5cdGlucHV0LnZhbHVlID0gJyc7XG5cdGlucHV0LnR5cGUgPSAnZW1haWwnO1xuXHRo
dG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJztcbn0gY2F0Y2ggKGUpe31c
blxuaW5wdXQgPSBudWxsO1xuXG5pZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8ICFodG1sNUlucHV0
U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKXtcblx0
dHJ5IHtcblx0XHR2YXIgdmFsdWUgPSBub2RlLnZhbHVlO1xuXHRcdG5vZGUudHlwZSA9IHR5cGU7
XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKXt9XG59O1xuLyo8L0lFPiov
XG5cbi8qIGdldFByb3BlcnR5LCBzZXRQcm9wZXJ0eSAqL1xuXG4vKiA8bHRJRTk+ICovXG52YXIg
cG9sbHV0ZXNHZXRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oZGl2KXtcblx0ZGl2LnJhbmRvbSA9ICdh
dHRyaWJ1dGUnO1xuXHRyZXR1cm4gKGRpdi5nZXRBdHRyaWJ1dGUoJ3JhbmRvbScpID09ICdhdHRy
aWJ1dGUnKTtcbn0pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxudmFyIGhhc0Ns
b25lQnVnID0gKGZ1bmN0aW9uKHRlc3Qpe1xuXHR0ZXN0LmlubmVySFRNTCA9ICc8b2JqZWN0Pjxw
YXJhbSBuYW1lPVwic2hvdWxkX2ZpeFwiIHZhbHVlPVwidGhlIHVua25vd25cIiAvPjwvb2JqZWN0
Pic7XG5cdHJldHVybiB0ZXN0LmNsb25lTm9kZSh0cnVlKS5maXJzdENoaWxkLmNoaWxkTm9kZXMu
bGVuZ3RoICE9IDE7XG59KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4vKiA8L2x0
SUU5PiAqL1xuXG52YXIgaGFzQ2xhc3NMaXN0ID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKS5jbGFzc0xpc3Q7XG5cbnZhciBjbGFzc2VzID0gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0
dmFyIGNsYXNzTmFtZXMgPSAoY2xhc3NOYW1lIHx8ICcnKS5jbGVhbigpLnNwbGl0KCcgJyksIHVu
aXF1ZXMgPSB7fTtcblx0cmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFt
ZSl7XG5cdFx0aWYgKGNsYXNzTmFtZSAhPT0gJycgJiYgIXVuaXF1ZXNbY2xhc3NOYW1lXSkgcmV0
dXJuIHVuaXF1ZXNbY2xhc3NOYW1lXSA9IGNsYXNzTmFtZTtcblx0fSk7XG59O1xuXG52YXIgYWRk
VG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKG5hbWUp
O1xufTtcblxudmFyIHJlbW92ZUZyb21DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXtcblx0dGhp
cy5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5c
dHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIHNldHRlciA9IHBy
b3BlcnR5U2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChzZXR0ZXIpe1xuXHRc
dFx0c2V0dGVyKHRoaXMsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogPGx0SUU5PiAq
L1xuXHRcdFx0dmFyIGF0dHJpYnV0ZUFsbG93TGlzdDtcblx0XHRcdGlmIChwb2xsdXRlc0dldEF0
dHJpYnV0ZSkgYXR0cmlidXRlQWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFs
bG93TGlzdCcsIHt9KTtcblx0XHRcdC8qIDwvbHRJRTk+ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9
PSBudWxsKXtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8q
IDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0
cmlidXRlQWxsb3dMaXN0W25hbWVdO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdFx0fSBl
bHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2YWx1ZSk7XG5cdFx0
XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBhdHRy
aWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvKiA8L2x0SUU5PiAqL1xuXHRc
dFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXRQcm9wZXJ0aWVzOiBm
dW5jdGlvbihhdHRyaWJ1dGVzKXtcblx0XHRmb3IgKHZhciBhdHRyaWJ1dGUgaW4gYXR0cmlidXRl
cykgdGhpcy5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbYXR0cmlidXRlXSk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpe1xu
XHRcdHZhciBnZXR0ZXIgPSBwcm9wZXJ0eUdldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0
XHRpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMpO1xuXHRcdC8qIDxsdElFOT4gKi9cblx0
XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpe1xuXHRcdFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0
dHJpYnV0ZU5vZGUobmFtZSksIGF0dHJpYnV0ZUFsbG93TGlzdCA9IHRoaXMucmV0cmlldmUoJyRh
dHRyaWJ1dGVBbGxvd0xpc3QnLCB7fSk7XG5cdFx0XHRpZiAoIWF0dHIpIHJldHVybiBudWxsO1xu
XHRcdFx0aWYgKGF0dHIuZXhwYW5kbyAmJiAhYXR0cmlidXRlQWxsb3dMaXN0W25hbWVdKXtcblx0
XHRcdFx0dmFyIG91dGVyID0gdGhpcy5vdXRlckhUTUw7XG5cdFx0XHRcdC8vIHNlZ21lbnQgYnkg
dGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRlIG5hbWVcblx0XHRc
dFx0aWYgKG91dGVyLnN1YnN0cigwLCBvdXRlci5zZWFyY2goL1xcLz9bJ1wiXT8+KD8hW148XSo8
WydcIl0pLykpLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0YXR0cmli
dXRlQWxsb3dMaXN0W25hbWVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyogPC9sdElF
OT4gKi9cblx0XHR2YXIgcmVzdWx0ID0gU2xpY2suZ2V0QXR0cmlidXRlKHRoaXMsIG5hbWUpO1xu
XHRcdHJldHVybiAoIXJlc3VsdCAmJiAhU2xpY2suaGFzQXR0cmlidXRlKHRoaXMsIG5hbWUpKSA/
IG51bGwgOiByZXN1bHQ7XG5cdH0sXG5cblx0Z2V0UHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gYXJncy5t
YXAodGhpcy5nZXRQcm9wZXJ0eSwgdGhpcykuYXNzb2NpYXRlKGFyZ3MpO1xuXHR9LFxuXG5cdHJl
bW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0
eShuYW1lLCBudWxsKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xu
XHRcdEFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5LCB0aGlzKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKXtcblx0
XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0KHByb3BlcnR5
ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB0aGlz
LnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTtcblx0fS5vdmVybG9hZFNldHRlcigpLFxuXG5cdGdl
dDogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVz
W3Byb3BdO1xuXHRcdHJldHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5
LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7XG5cdH0ub3ZlcmxvYWRH
ZXR0ZXIoKSxcblxuXHRlcmFzZTogZnVuY3Rpb24ocHJvcCl7XG5cdFx0dmFyIHByb3BlcnR5ID0g
RWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lcmFz
ZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3ZlUHJvcGVydHkocHJv
cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGhhc0NsYXNzTGlzdCA/
IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5z
KGNsYXNzTmFtZSk7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJldHVybiBjbGFz
c2VzKHRoaXMuY2xhc3NOYW1lKS5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9LFxuXG5cdGFkZENs
YXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xh
c3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc2Vz
KGNsYXNzTmFtZSArICcgJyArIHRoaXMuY2xhc3NOYW1lKS5qb2luKCcgJyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNs
YXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2gocmVtb3ZlRnJvbUNsYXNz
TGlzdCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUp
e1xuXHRcdHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSk7XG5cdFx0Y2xh
c3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xhc3NOYW1lcyk7XG5c
dFx0dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVzLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3JjZSl7XG5c
dFx0aWYgKGZvcmNlID09IG51bGwpIGZvcmNlID0gIXRoaXMuaGFzQ2xhc3MoY2xhc3NOYW1lKTtc
blx0XHRyZXR1cm4gKGZvcmNlKSA/IHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1lKSA6IHRoaXMucmVt
b3ZlQ2xhc3MoY2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZG9wdDogZnVuY3Rpb24oKXtcblx0XHR2
YXIgcGFyZW50ID0gdGhpcywgZnJhZ21lbnQsIGVsZW1lbnRzID0gQXJyYXkuZmxhdHRlbihhcmd1
bWVudHMpLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCA+IDEpIHBh
cmVudCA9IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG5c
dFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgZWxlbWVudCA9
IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTtcblx0XHRcdGlmIChlbGVtZW50KSBwYXJl
bnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZyYWdtZW50KSB0aGlz
LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGFw
cGVuZFRleHQ6IGZ1bmN0aW9uKHRleHQsIHdoZXJlKXtcblx0XHRyZXR1cm4gdGhpcy5ncmFiKHRo
aXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZSh0ZXh0KSwgd2hlcmUpO1xuXHR9LFxuXG5cdGdy
YWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20n
XShkb2N1bWVudC5pZChlbCwgdHJ1ZSksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwg
J2JvdHRvbSddKHRoaXMsIGRvY3VtZW50LmlkKGVsLCB0cnVlKSk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXtcblx0XHRlbCA9IGRvY3VtZW50Lmlk
KGVsLCB0cnVlKTtcblx0XHRlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLCBlbCk7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcHM6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7XG5c
dFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZXMo
ZWwpLmdyYWIoZWwsIHdoZXJlKTtcblx0fSxcblxuXHRnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLnNlbGVjdGVkSW5kZXg7IC8vIFNhZmFyaSAzLjIuMVxuXHRcdHJldHVybiBuZXcg
RWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5jdGlvbihvcHRp
b24pe1xuXHRcdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZDtcblx0XHR9KSk7XG5cdH0sXG5cblx0
dG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgcXVlcnlTdHJpbmcgPSBbXTtcblx0
XHR0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rp
b24oZWwpe1xuXHRcdFx0dmFyIHR5cGUgPSBlbC50eXBlO1xuXHRcdFx0aWYgKCFlbC5uYW1lIHx8
IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAncmVzZXQnIHx8IHR5
cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG5cdFx0XHR2YXIgdmFs
dWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxlY3RlZCgpLm1hcChm
dW5jdGlvbihvcHQpe1xuXHRcdFx0XHQvLyBJRVxuXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuaWQo
b3B0KS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHR9KSA6ICgodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUg
PT0gJ2NoZWNrYm94JykgJiYgIWVsLmNoZWNrZWQpID8gbnVsbCA6IGVsLmdldCgndmFsdWUnKTtc
blxuXHRcdFx0QXJyYXkuY29udmVydCh2YWx1ZSkuZWFjaChmdW5jdGlvbih2YWwpe1xuXHRcdFx0
XHRpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVzaChlbmNvZGVV
UklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsKSk7XG5c
dFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpO1xuXHR9
XG5cbn0pO1xuXG5cbi8vIGFwcGVuZEhUTUxcblxudmFyIGFwcGVuZEluc2VydGVycyA9IHtcblx0
YmVmb3JlOiAnYmVmb3JlQmVnaW4nLFxuXHRhZnRlcjogJ2FmdGVyRW5kJyxcblx0Ym90dG9tOiAn
YmVmb3JlRW5kJyxcblx0dG9wOiAnYWZ0ZXJCZWdpbicsXG5cdGluc2lkZTogJ2JlZm9yZUVuZCdc
bn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNlcnRBZGphY2VudEhU
TUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0aW9uKGh0bWwsIHdo
ZXJlKXtcblx0dGhpcy5pbnNlcnRBZGphY2VudEhUTUwoYXBwZW5kSW5zZXJ0ZXJzW3doZXJlIHx8
ICdib3R0b20nXSwgaHRtbCk7XG5cdHJldHVybiB0aGlzO1xufSA6IGZ1bmN0aW9uKGh0bWwsIHdo
ZXJlKXtcblx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6IGh0bWx9KSxcblx0
XHRjaGlsZHJlbiA9IHRlbXAuY2hpbGROb2Rlcyxcblx0XHRmcmFnbWVudCA9IHRlbXAuZmlyc3RD
aGlsZDtcblxuXHRpZiAoIWZyYWdtZW50KSByZXR1cm4gdGhpcztcblx0aWYgKGNoaWxkcmVuLmxl
bmd0aCA+IDEpe1xuXHRcdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcblx0XHR9XG5cdH1c
blxuXHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGZyYWdtZW50LCB0aGlzKTtcblx0cmV0
dXJuIHRoaXM7XG59KTtcblxudmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0ge307XG5cbnZh
ciBnZXQgPSBmdW5jdGlvbih1aWQpe1xuXHRyZXR1cm4gKHN0b3JhZ2VbdWlkXSB8fCAoc3RvcmFn
ZVt1aWRdID0ge30pKTtcbn07XG5cbnZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHR2YXIg
dWlkID0gaXRlbS51bmlxdWVOdW1iZXI7XG5cdGlmIChpdGVtLnJlbW92ZUV2ZW50cykgaXRlbS5y
ZW1vdmVFdmVudHMoKTtcblx0aWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBpdGVtLmNsZWFyQXR0
cmlidXRlcygpO1xuXHRpZiAodWlkICE9IG51bGwpe1xuXHRcdGRlbGV0ZSBjb2xsZWN0ZWRbdWlk
XTtcblx0XHRkZWxldGUgc3RvcmFnZVt1aWRdO1xuXHR9XG5cdHJldHVybiBpdGVtO1xufTtcblxu
dmFyIGZvcm1Qcm9wcyA9IHtpbnB1dDogJ2NoZWNrZWQnLCBvcHRpb246ICdzZWxlY3RlZCcsIHRl
eHRhcmVhOiAndmFsdWUnfTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGRlc3Ryb3k6IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkcmVuID0gY2xlYW4odGhpcykuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKTtcblx0XHRBcnJheS5lYWNoKGNoaWxkcmVuLCBjbGVhbik7XG5cdFx0RWxlbWVu
dC5kaXNwb3NlKHRoaXMpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5j
dGlvbigpe1xuXHRcdEFycmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQu
ZGlzcG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQodGhpcykgOiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihjb250ZW50cywg
a2VlcGlkKXtcblx0XHRjb250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTtcblx0XHR2YXIgY2xv
bmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwgdGUgPSBbdGhpc10s
IGk7XG5cblx0XHRpZiAoY29udGVudHMpe1xuXHRcdFx0Y2UuYXBwZW5kKEFycmF5LmNvbnZlcnQo
Y2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpO1xuXHRcdFx0dGUuYXBwZW5kKEFycmF5
LmNvbnZlcnQodGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKSk7XG5cdFx0fVxuXG5cdFx0
Zm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXtcblx0XHRcdHZhciBub2RlID0gY2VbaV0sIGVsZW1l
bnQgPSB0ZVtpXTtcblx0XHRcdGlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnaWQn
KTtcblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAobm9kZS5jbGVhckF0dHJpYnV0ZXMpe1xu
XHRcdFx0XHRub2RlLmNsZWFyQXR0cmlidXRlcygpO1xuXHRcdFx0XHRub2RlLm1lcmdlQXR0cmli
dXRlcyhlbGVtZW50KTtcblx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3VuaXF1ZU51bWJl
cicpO1xuXHRcdFx0XHRpZiAobm9kZS5vcHRpb25zKXtcblx0XHRcdFx0XHR2YXIgbm8gPSBub2Rl
Lm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zO1xuXHRcdFx0XHRcdGZvciAodmFyIGogPSBu
by5sZW5ndGg7IGotLTspIG5vW2pdLnNlbGVjdGVkID0gZW9bal0uc2VsZWN0ZWQ7XG5cdFx0XHRc
dH1cblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0dmFyIHByb3AgPSBmb3JtUHJv
cHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdFx0aWYgKHByb3AgJiYgZWxl
bWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07XG5cdFx0fVxuXG5cdFx0Lyo8
bHRJRTk+Ki9cblx0XHRpZiAoaGFzQ2xvbmVCdWcpe1xuXHRcdFx0dmFyIGNvID0gY2xvbmUuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ29iamVjdCcpO1xuXHRcdFx0Zm9yIChpID0gY28ubGVuZ3RoOyBpLS07KSBjb1tpXS5vdXRl
ckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7XG5cdFx0fVxuXHRcdC8qPC9sdElFOT4qL1xuXHRcdHJl
dHVybiBkb2N1bWVudC5pZChjbG9uZSk7XG5cdH1cblxufSk7XG5cbltFbGVtZW50LCBXaW5kb3cs
IERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRMaXN0ZW5lcjogZnVuY3Rp
b24odHlwZSwgZm4pe1xuXHRcdGlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKXtcblx0XHRcdGNvbGxlY3RlZFtTbGljay51aWRPZih0aGlzKV0gPSB0aGlz
O1xuXHRcdH1cblx0XHRpZiAodGhpcy5hZGRFdmVudExpc3RlbmVyKSB0aGlzLmFkZEV2ZW50TGlz
dGVuZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuYXR0YWNoRXZl
bnQoJ29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVM
aXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4pe1xuXHRcdGlmICh0aGlzLnJlbW92ZUV2ZW50TGlz
dGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0p
O1xuXHRcdGVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0eSwgZGZsdCl7XG5c
dFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9wID0gc3RvcmFnZVtw
cm9wZXJ0eV07XG5cdFx0aWYgKGRmbHQgIT0gbnVsbCAmJiBwcm9wID09IG51bGwpIHByb3AgPSBz
dG9yYWdlW3Byb3BlcnR5XSA9IGRmbHQ7XG5cdFx0cmV0dXJuIHByb3AgIT0gbnVsbCA/IHByb3Ag
OiBudWxsO1xuXHR9LFxuXG5cdHN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpe1xuXHRc
dHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMpKTtcblx0XHRzdG9yYWdlW3Byb3Bl
cnR5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVsaW1pbmF0ZTogZnVu
Y3Rpb24ocHJvcGVydHkpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVpZE9mKHRoaXMp
KTtcblx0XHRkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1c
blxufSk7XG5cbi8qPGx0SUU5PiovXG5pZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZhciBnYyA9IGZ1bmN0aW9uKCl7XG5cdFx0T2JqZWN0LmVh
Y2goY29sbGVjdGVkLCBjbGVhbik7XG5cdFx0aWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFnZSkgQ29s
bGVjdEdhcmJhZ2UoKTtcblx0XHR3aW5kb3cucmVtb3ZlTGlzdGVuZXIoJ3VubG9hZCcsIGdjKTtc
blx0fTtcblx0d2luZG93LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG59XG4vKjwvbHRJRTk+
Ki9cblxuRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307XG5cblxuXG5FbGVtZW50LlByb3BlcnRpZXMu
c3R5bGUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihzdHlsZSl7XG5cdFx0dGhpcy5zdHlsZS5jc3NU
ZXh0ID0gc3R5bGU7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
LnN0eWxlLmNzc1RleHQ7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5z
dHlsZS5jc3NUZXh0ID0gJyc7XG5cdH1cblxufTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnRhZyA9
IHtcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudGFnTmFtZS50b0xvd2Vy
Q2FzZSgpO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuUHJvcGVydGllcy5odG1sID0ge1xuXG5cdHNl
dDogZnVuY3Rpb24oaHRtbCl7XG5cdFx0aWYgKGh0bWwgPT0gbnVsbCkgaHRtbCA9ICcnO1xuXHRc
dGVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRtbC5qb2luKCcnKTtc
blxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKHRoaXMuc3R5bGVTaGVldCAmJiAhY2FuQ2hhbmdl
U3R5bGVIVE1MKSB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGh0bWw7XG5cdFx0ZWxzZSAvKjwv
bHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuc2V0KCdodG1sJywgJycpO1xuXHR9XG5cbn07XG5cbnZhciBzdXBwb3J0c0hU
TUw1RWxlbWVudHMgPSB0cnVlLCBzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gdHJ1ZSwgc3VwcG9y
dHNUUklubmVySFRNTCA9IHRydWU7XG5cbi8qPGx0SUU5PiovXG4vLyB0ZWNobmlxdWUgYnkgamRi
YXJsZXR0IC0gaHR0cDovL2pkYmFydGxldHQuY29tL2lubmVyc2hpdi9cbnZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBmcmFnbWVudDtcbmRpdi5pbm5lckhUTUwg
PSAnPG5hdj48L25hdj4nO1xuc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gKGRpdi5jaGlsZE5vZGVz
Lmxlbmd0aCA9PSAxKTtcbmlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblx0dmFyIHRhZ3Mg
PSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2Nh
cHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBw
cm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAnKTtcblx0ZnJhZ21l
bnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGwgPSB0YWdzLmxlbmd0aDtc
blx0d2hpbGUgKGwtLSkgZnJhZ21lbnQuY3JlYXRlRWxlbWVudCh0YWdzW2xdKTtcbn1cbmRpdiA9
IG51bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbnN1cHBvcnRzVGFibGVJbm5lckhUTUwg
PSBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7XG5cdHZhciB0YWJsZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG5cdHRhYmxlLmlubmVySFRNTCA9ICc8dHI+PHRkPjwvdGQ+
PC90cj4nO1xuXHRyZXR1cm4gdHJ1ZTtcbn0pO1xuXG4vKjxsdEZGND4qL1xudmFyIHRyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwgaHRtbCA9ICc8dGQ+PC90ZD4nO1xudHIuaW5uZXJI
VE1MID0gaHRtbDtcbnN1cHBvcnRzVFJJbm5lckhUTUwgPSAodHIuaW5uZXJIVE1MID09IGh0bWwp
O1xudHIgPSBudWxsO1xuLyo8L2x0RkY0PiovXG5cbmlmICghc3VwcG9ydHNUYWJsZUlubmVySFRN
TCB8fCAhc3VwcG9ydHNUUklubmVySFRNTCB8fCAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKXtcblxu
XHRFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0KXtcblxuXHRcdHZh
ciB0cmFuc2xhdGlvbnMgPSB7XG5cdFx0XHR0YWJsZTogWzEsICc8dGFibGU+JywgJzwvdGFibGU+
J10sXG5cdFx0XHRzZWxlY3Q6IFsxLCAnPHNlbGVjdD4nLCAnPC9zZWxlY3Q+J10sXG5cdFx0XHR0
Ym9keTogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG5cdFx0XHR0
cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J11cblx0
XHR9O1xuXG5cdFx0dHJhbnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25zLnRmb290ID0gdHJh
bnNsYXRpb25zLnRib2R5O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGh0bWwpe1xuXG5cdFx0XHQv
KjxsdElFOT4qL1xuXHRcdFx0aWYgKHRoaXMuc3R5bGVTaGVldCkgcmV0dXJuIHNldC5jYWxsKHRo
aXMsIGh0bWwpO1xuXHRcdFx0Lyo8L2x0SUU5PiovXG5cdFx0XHR2YXIgd3JhcCA9IHRyYW5zbGF0
aW9uc1t0aGlzLmdldCgndGFnJyldO1xuXHRcdFx0aWYgKCF3cmFwICYmICFzdXBwb3J0c0hUTUw1
RWxlbWVudHMpIHdyYXAgPSBbMCwgJycsICcnXTtcblx0XHRcdGlmICghd3JhcCkgcmV0dXJuIHNl
dC5jYWxsKHRoaXMsIGh0bWwpO1xuXG5cdFx0XHR2YXIgbGV2ZWwgPSB3cmFwWzBdLCB3cmFwcGVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHRhcmdldCA9IHdyYXBwZXI7XG5cdFx0
XHRpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcHBl
cik7XG5cdFx0XHR3cmFwcGVyLmlubmVySFRNTCA9IFt3cmFwWzFdLCBodG1sLCB3cmFwWzJdXS5m
bGF0dGVuKCkuam9pbignJyk7XG5cdFx0XHR3aGlsZSAobGV2ZWwtLSkgdGFyZ2V0ID0gdGFyZ2V0
LmZpcnN0Q2hpbGQ7XG5cdFx0XHR0aGlzLmVtcHR5KCkuYWRvcHQodGFyZ2V0LmNoaWxkTm9kZXMp
O1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LnJlbW92ZUNoaWxk
KHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlciA9IG51bGw7XG5cdFx0fTtcblxuXHR9KShFbGVtZW50
LlByb3BlcnRpZXMuaHRtbC5zZXQpO1xufVxuLyo8L0lFPiovXG5cbi8qPGx0SUU5PiovXG52YXIg
dGVzdEZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG50ZXN0Rm9ybS5pbm5l
ckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uPnM8L29wdGlvbj48L3NlbGVjdD4nO1xuXG5pZiAodGVz
dEZvcm0uZmlyc3RDaGlsZC52YWx1ZSAhPSAncycpIEVsZW1lbnQuUHJvcGVydGllcy52YWx1ZSA9
IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGFnID0gdGhpcy5nZXQoJ3Rh
ZycpO1xuXHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcpIHJldHVybiB0aGlzLnNldFByb3BlcnR5KCd2
YWx1ZScsIHZhbHVlKTtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxlbWVudHMoJ29wdGlv
bicpO1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IG9wdGlvbnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIG9wdGlvbiA9IG9wdGlvbnNbaV0sXG5c
dFx0XHRcdGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKSxcblx0XHRcdFx0
b3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBv
cHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IHZhbHVlKSByZXR1
cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlv
bigpe1xuXHRcdHZhciBvcHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0KCd0YWcnKTtcblxu
XHRcdGlmICh0YWcgIT0gJ3NlbGVjdCcgJiYgdGFnICE9ICdvcHRpb24nKSByZXR1cm4gdGhpcy5n
ZXRQcm9wZXJ0eSgndmFsdWUnKTtcblxuXHRcdGlmICh0YWcgPT0gJ3NlbGVjdCcgJiYgIShvcHRp
b24gPSBvcHRpb24uZ2V0U2VsZWN0ZWQoKVswXSkpIHJldHVybiAnJztcblxuXHRcdHZhciBhdHRy
ID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7XG5cdFx0cmV0dXJuIChhdHRyICYm
IGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0
fVxuXG59O1xudGVzdEZvcm0gPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElFPiovXG5pZiAo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKSkgRWxl
bWVudC5Qcm9wZXJ0aWVzLmlkID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKGlkKXtcblx0XHR0aGlzLmlk
ID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7XG5cdH0sXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5pZCB8fCBudWxsO1xuXHR9LFxuXHRlcmFzZTog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZh
bHVlID0gJyc7XG5cdH1cbn07XG4vKjwvSUU+Ki9cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1l
OiBFdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5cGUsIHRvIG1ha2Ug
dGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGlj
ZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgRnVuY3Rpb24sIFN0
cmluZywgT2JqZWN0XVxuXG5wcm92aWRlczogRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24o
KXtcblxudmFyIF9rZXlzID0ge307XG52YXIgbm9ybWFsaXplV2hlZWxTcGVlZCA9IGZ1bmN0aW9u
KGV2ZW50KXtcblx0dmFyIG5vcm1hbGl6ZWQ7XG5cdGlmIChldmVudC53aGVlbERlbHRhKXtcblx0
XHRub3JtYWxpemVkID0gZXZlbnQud2hlZWxEZWx0YSAlIDEyMCA9PSAwID8gZXZlbnQud2hlZWxE
ZWx0YSAvIDEyMCA6IGV2ZW50LndoZWVsRGVsdGEgLyAxMjtcblx0fSBlbHNlIHtcblx0XHR2YXIg
cmF3QW1vdW50ID0gZXZlbnQuZGVsdGFZIHx8IGV2ZW50LmRldGFpbCB8fCAwO1xuXHRcdG5vcm1h
bGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMgOiByYXdBbW91bnQg
KiAxMCk7XG5cdH1cblx0cmV0dXJuIG5vcm1hbGl6ZWQ7XG59O1xuXG52YXIgRE9NRXZlbnQgPSB0
aGlzLkRPTUV2ZW50ID0gbmV3IFR5cGUoJ0RPTUV2ZW50JywgZnVuY3Rpb24oZXZlbnQsIHdpbil7
XG5cdGlmICghd2luKSB3aW4gPSB3aW5kb3c7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luLmV2ZW50
O1xuXHRpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7XG5cdHRoaXMuZXZlbnQgPSBl
dmVudDtcblx0dGhpcy4kZXh0ZW5kZWQgPSB0cnVlO1xuXHR0aGlzLnNoaWZ0ID0gZXZlbnQuc2hp
ZnRLZXk7XG5cdHRoaXMuY29udHJvbCA9IGV2ZW50LmN0cmxLZXk7XG5cdHRoaXMuYWx0ID0gZXZl
bnQuYWx0S2V5O1xuXHR0aGlzLm1ldGEgPSBldmVudC5tZXRhS2V5O1xuXHR2YXIgdHlwZSA9IHRo
aXMudHlwZSA9IGV2ZW50LnR5cGU7XG5cdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZl
bnQuc3JjRWxlbWVudDtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykg
dGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQo
dGFyZ2V0KTtcblxuXHRpZiAodHlwZS5pbmRleE9mKCdrZXknKSA9PSAwKXtcblx0XHR2YXIgY29k
ZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtcblx0XHRpZiAo
IXRoaXMuc2hpZnQgfHwgdHlwZSAhPSAna2V5cHJlc3MnKSB0aGlzLmtleSA9IF9rZXlzW2NvZGVd
O1xuXHRcdGlmICh0eXBlID09ICdrZXlkb3duJyB8fCB0eXBlID09ICdrZXl1cCcpe1xuXHRcdFx0
aWYgKGNvZGUgPiAxMTEgJiYgY29kZSA8IDEyNCkgdGhpcy5rZXkgPSAnZicgKyAoY29kZSAtIDEx
MSk7XG5cdFx0XHRlbHNlIGlmIChjb2RlID4gOTUgJiYgY29kZSA8IDEwNikgdGhpcy5rZXkgPSBj
b2RlIC0gOTY7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmtleSA9PSBudWxsKSB0aGlzLmtleSA9IFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKTtcblx0fSBlbHNlIGlmICh0eXBl
ID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0gJ2NvbnRleHRtZW51
JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUu
aW5kZXhPZignbW91c2UnKSA9PSAwKXtcblx0XHR2YXIgZG9jID0gd2luLmRvY3VtZW50O1xuXHRc
dGRvYyA9ICghZG9jLmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQn
KSA/IGRvYy5odG1sIDogZG9jLmJvZHk7XG5cdFx0dGhpcy5wYWdlID0ge1xuXHRcdFx0eDogKGV2
ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYICsgZG9jLnNj
cm9sbExlZnQsXG5cdFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSA6
IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wXG5cdFx0fTtcblx0XHR0aGlzLmNsaWVudCA9
IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBh
Z2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCxcblx0XHRcdHk6IChldmVudC5wYWdlWSAhPSBudWxs
KSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xpZW50WVxuXHRcdH07
XG5cdFx0aWYgKHR5cGUgPT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlID09ICd3aGVlbCcgfHwg
dHlwZSA9PSAnbW91c2V3aGVlbCcpIHRoaXMud2hlZWwgPSBub3JtYWxpemVXaGVlbFNwZWVkKGV2
ZW50KTtcblx0XHR0aGlzLnJpZ2h0Q2xpY2sgPSAoZXZlbnQud2hpY2ggPT0gMyB8fCBldmVudC5i
dXR0b24gPT0gMik7XG5cdFx0aWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91
c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21vdXNlbGVhdmUnKXtc
blx0XHRcdHZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdt
b3VzZWVudGVyJztcblx0XHRcdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBl
dmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQnXTtcblx0XHRcdHdo
aWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQu
cGFyZW50Tm9kZTtcblx0XHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3VtZW50LmlkKHJlbGF0
ZWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNoJykgPT0gMCB8fCB0
eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXtcblx0XHR0aGlzLnJvdGF0aW9uID0gZXZlbnQu
cm90YXRpb247XG5cdFx0dGhpcy5zY2FsZSA9IGV2ZW50LnNjYWxlO1xuXHRcdHRoaXMudGFyZ2V0
VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7XG5cdFx0dGhpcy5jaGFuZ2VkVG91Y2hlcyA9
IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuXHRcdHZhciB0b3VjaGVzID0gdGhpcy50b3VjaGVzID0g
ZXZlbnQudG91Y2hlcztcblx0XHRpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXtcblx0XHRcdHZh
ciB0b3VjaCA9IHRvdWNoZXNbMF07XG5cdFx0XHR0aGlzLnBhZ2UgPSB7eDogdG91Y2gucGFnZVgs
IHk6IHRvdWNoLnBhZ2VZfTtcblx0XHRcdHRoaXMuY2xpZW50ID0ge3g6IHRvdWNoLmNsaWVudFgs
IHk6IHRvdWNoLmNsaWVudFl9O1xuXHRcdH1cblx0fVxuXG5cdGlmICghdGhpcy5jbGllbnQpIHRo
aXMuY2xpZW50ID0ge307XG5cdGlmICghdGhpcy5wYWdlKSB0aGlzLnBhZ2UgPSB7fTtcbn0pO1xu
XG5ET01FdmVudC5pbXBsZW1lbnQoe1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMucHJldmVudERlZmF1bHQoKS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fSxcblxuXHRzdG9w
UHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGVsc2UgdGhpcy5ldmVudC5j
YW5jZWxCdWJibGUgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByZXZlbnRE
ZWZhdWx0OiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KSB0
aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LnJldHVyblZh
bHVlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbkRPTUV2ZW50LmRl
ZmluZUtleSA9IGZ1bmN0aW9uKGNvZGUsIGtleSl7XG5cdF9rZXlzW2NvZGVdID0ga2V5O1xuXHRy
ZXR1cm4gdGhpcztcbn07XG5cbkRPTUV2ZW50LmRlZmluZUtleXMgPSBET01FdmVudC5kZWZpbmVL
ZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7XG5cbkRPTUV2ZW50LmRlZmluZUtleXMoe1xuXHQnMzgn
OiAndXAnLCAnNDAnOiAnZG93bicsICczNyc6ICdsZWZ0JywgJzM5JzogJ3JpZ2h0Jyxcblx0JzI3
JzogJ2VzYycsICczMic6ICdzcGFjZScsICc4JzogJ2JhY2tzcGFjZScsICc5JzogJ3RhYicsXG5c
dCc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInXG59KTtcblxufSkoKTtcblxuXG5cblxuXG4v
KlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEVs
ZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBmaWxlIGFsc28gaW5j
bHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVudCBFdmVudHMsIGlm
IG5lY2Vzc2FyeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudCwgRXZlbnRdXG5cbnByb3ZpZGVzOiBFbGVtZW50LkV2ZW50XG5cbi4uLlxuKi9cblxu
KGZ1bmN0aW9uKCl7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5jdGlv
bihldmVudHMpe1xuXHR0aGlzLmFkZEV2ZW50cyhldmVudHMpO1xufX07XG5cbltFbGVtZW50LCBX
aW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRhZGRFdmVudDogZnVu
Y3Rpb24odHlwZSwgZm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMn
LCB7fSk7XG5cdFx0aWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwg
dmFsdWVzOiBbXX07XG5cdFx0aWYgKGV2ZW50c1t0eXBlXS5rZXlzLmNvbnRhaW5zKGZuKSkgcmV0
dXJuIHRoaXM7XG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMucHVzaChmbik7XG5cdFx0dmFyIHJlYWxU
eXBlID0gdHlwZSxcblx0XHRcdGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdLFxuXHRcdFx0
Y29uZGl0aW9uID0gZm4sXG5cdFx0XHRzZWxmID0gdGhpcztcblx0XHRpZiAoY3VzdG9tKXtcblx0
XHRcdGlmIChjdXN0b20ub25BZGQpIGN1c3RvbS5vbkFkZC5jYWxsKHRoaXMsIGZuLCB0eXBlKTtc
blx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uKXtcblx0XHRcdFx0Y29uZGl0aW9uID0gZnVuY3Rp
b24oZXZlbnQpe1xuXHRcdFx0XHRcdGlmIChjdXN0b20uY29uZGl0aW9uLmNhbGwodGhpcywgZXZl
bnQsIHR5cGUpKSByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdFx0cmV0dXJu
IHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHJlYWxU
eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSkuY2FsbCh0aGlzLCB0eXBlKTtcblx0
XHR9XG5cdFx0dmFyIGRlZm4gPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIGZuLmNhbGwoc2Vs
Zik7XG5cdFx0fTtcblx0XHR2YXIgbmF0aXZlRXZlbnQgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50c1ty
ZWFsVHlwZV07XG5cdFx0aWYgKG5hdGl2ZUV2ZW50KXtcblx0XHRcdGlmIChuYXRpdmVFdmVudCA9
PSAyKXtcblx0XHRcdFx0ZGVmbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRldmVudCA9
IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5kb3coKSk7XG5cdFx0XHRcdFx0aWYgKGNv
bmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0b3AoKTtcblx0XHRc
dFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWRkTGlzdGVuZXIocmVhbFR5cGUsIGRlZm4sIGFy
Z3VtZW50c1syXSk7XG5cdFx0fVxuXHRcdGV2ZW50c1t0eXBlXS52YWx1ZXMucHVzaChkZWZuKTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwg
Zm4pe1xuXHRcdHZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAo
IWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHR2YXIgbGlzdCA9IGV2
ZW50c1t0eXBlXTtcblx0XHR2YXIgaW5kZXggPSBsaXN0LmtleXMuaW5kZXhPZihmbik7XG5cdFx0
aWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpcztcblx0XHR2YXIgdmFsdWUgPSBsaXN0LnZhbHVl
c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qua2V5c1tpbmRleF07XG5cdFx0ZGVsZXRlIGxpc3Qu
dmFsdWVzW2luZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV07XG5c
dFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uUmVtb3ZlKSBjdXN0b20ub25SZW1v
dmUuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmJhc2UpIHR5cGUgPSBG
dW5jdGlvbi5jb252ZXJ0KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0
XHRyZXR1cm4gKEVsZW1lbnQuTmF0aXZlRXZlbnRzW3R5cGVdKSA/IHRoaXMucmVtb3ZlTGlzdGVu
ZXIodHlwZSwgdmFsdWUsIGFyZ3VtZW50c1syXSkgOiB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50
czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMu
YWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHR2YXIgdHlwZTtcblx0XHRp
ZiAodHlwZU9mKGV2ZW50cykgPT0gJ29iamVjdCcpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGV2ZW50
cykgdGhpcy5yZW1vdmVFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xuXHRcdFx0cmV0dXJuIHRo
aXM7XG5cdFx0fVxuXHRcdHZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xu
XHRcdGlmICghYXR0YWNoZWQpIHJldHVybiB0aGlzO1xuXHRcdGlmICghZXZlbnRzKXtcblx0XHRc
dGZvciAodHlwZSBpbiBhdHRhY2hlZCkgdGhpcy5yZW1vdmVFdmVudHModHlwZSk7XG5cdFx0XHR0
aGlzLmVsaW1pbmF0ZSgnZXZlbnRzJyk7XG5cdFx0fSBlbHNlIGlmIChhdHRhY2hlZFtldmVudHNd
KXtcblx0XHRcdGF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRc
dFx0dGhpcy5yZW1vdmVFdmVudChldmVudHMsIGZuKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0
ZGVsZXRlIGF0dGFjaGVkW2V2ZW50c107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpe1xuXHRcdHZhciBldmVu
dHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRz
W3R5cGVdKSByZXR1cm4gdGhpcztcblx0XHRhcmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblxu
XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5
KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMs
IGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25l
RXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXtcblx0XHRmcm9tID0gZG9jdW1lbnQuaWQoZnJv
bSk7XG5cdFx0dmFyIGV2ZW50cyA9IGZyb20ucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICgh
ZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRpZiAoIXR5cGUpe1xuXHRcdFx0Zm9yICh2YXIgZXZl
bnRUeXBlIGluIGV2ZW50cykgdGhpcy5jbG9uZUV2ZW50cyhmcm9tLCBldmVudFR5cGUpO1xuXHRc
dH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdKXtcblx0XHRcdGV2ZW50c1t0eXBlXS5rZXlzLmVhY2go
ZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50KHR5cGUsIGZuKTtcblx0XHRcdH0s
IHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuRWxlbWVudC5O
YXRpdmVFdmVudHMgPSB7XG5cdGNsaWNrOiAyLCBkYmxjbGljazogMiwgbW91c2V1cDogMiwgbW91
c2Vkb3duOiAyLCBjb250ZXh0bWVudTogMiwgLy9tb3VzZSBidXR0b25zXG5cdHdoZWVsOiAyLCBt
b3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVlbFxuXHRtb3VzZW92
ZXI6IDIsIG1vdXNlb3V0OiAyLCBtb3VzZW1vdmU6IDIsIHNlbGVjdHN0YXJ0OiAyLCBzZWxlY3Rl
bmQ6IDIsIC8vbW91c2UgbW92ZW1lbnRcblx0a2V5ZG93bjogMiwga2V5cHJlc3M6IDIsIGtleXVw
OiAyLCAvL2tleWJvYXJkXG5cdG9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBtb2JpbGVcblx0dG91
Y2hzdGFydDogMiwgdG91Y2htb3ZlOiAyLCB0b3VjaGVuZDogMiwgdG91Y2hjYW5jZWw6IDIsIC8v
IHRvdWNoXG5cdGdlc3R1cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwgZ2VzdHVyZWVuZDog
MiwgLy8gZ2VzdHVyZVxuXHRmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAyLCByZXNldDogMiwg
c2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9mb3JtIGVsZW1lbnRz
XG5cdGxvYWQ6IDIsIHVubG9hZDogMSwgYmVmb3JldW5sb2FkOiAyLCByZXNpemU6IDEsIG1vdmU6
IDEsIERPTUNvbnRlbnRMb2FkZWQ6IDEsIHJlYWR5c3RhdGVjaGFuZ2U6IDEsIC8vd2luZG93XG5c
dGhhc2hjaGFuZ2U6IDEsIHBvcHN0YXRlOiAyLCBwYWdlc2hvdzogMiwgcGFnZWhpZGU6IDIsIC8v
IGhpc3Rvcnlcblx0ZXJyb3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1lc3NhZ2U6IDIgLy9t
aXNjXG59O1xuXG5FbGVtZW50LkV2ZW50cyA9IHtcblx0bW91c2V3aGVlbDoge1xuXHRcdGJhc2U6
ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdoZWVsJyBpbiBkb2N1
bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNjcm9sbCdcblx0fVxufTtcblxudmFyIGNo
ZWNrID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJn
ZXQ7XG5cdGlmIChyZWxhdGVkID09IG51bGwpIHJldHVybiB0cnVlO1xuXHRpZiAoIXJlbGF0ZWQp
IHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYgcmVsYXRlZC5wcmVm
aXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYgIXRoaXMuY29udGFp
bnMocmVsYXRlZCkpO1xufTtcblxuaWYgKCdvbm1vdXNlZW50ZXInIGluIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCl7XG5cdEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50ZXIgPSBFbGVtZW50
Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjtcblx0RWxlbWVudC5Nb3VzZWVudGVyQ2hlY2sg
PSBjaGVjaztcbn0gZWxzZSB7XG5cdEVsZW1lbnQuRXZlbnRzLm1vdXNlZW50ZXIgPSB7XG5cdFx0
YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xuXG5cdEVsZW1l
bnQuRXZlbnRzLm1vdXNlbGVhdmUgPSB7XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25k
aXRpb246IGNoZWNrXG5cdH07XG59XG5cbi8qPGx0SUU5PiovXG5pZiAoIXdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKXtcblx0RWxlbWVudC5OYXRpdmVFdmVudHMucHJvcGVydHljaGFuZ2UgPSAyO1xu
XHRFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7XG5cdFx0YmFzZTogZnVuY3Rpb24oKXtcblx0XHRc
dHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHRcdFx0cmV0dXJuICh0aGlzLmdldCgndGFnJykgPT0g
J2lucHV0JyAmJiAodHlwZSA9PSAncmFkaW8nIHx8IHR5cGUgPT0gJ2NoZWNrYm94JykpID8gJ3By
b3BlcnR5Y2hhbmdlJyA6ICdjaGFuZ2UnO1xuXHRcdH0sXG5cdFx0Y29uZGl0aW9uOiBmdW5jdGlv
bihldmVudCl7XG5cdFx0XHRyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVydHljaGFuZ2UnIHx8
IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7XG5cdFx0fVxuXHR9O1xufVxu
Lyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1lbnQuRGVs
ZWdhdGlvblxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0
IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZpY2llbnQgZXZlbnQg
bWFuYWdlbWVudC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
RWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRpb25dXG5cbi4uLlxu
Ki9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBldmVudExpc3RlbmVyU3VwcG9ydCA9ICEhd2luZG93
LmFkZEV2ZW50TGlzdGVuZXI7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3VzaW4gPSBFbGVt
ZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7XG5cbnZhciBidWJibGVVcCA9IGZ1bmN0aW9u
KHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdHdoaWxlICh0YXJnZXQgJiYgdGFy
Z2V0ICE9IHNlbGYpe1xuXHRcdGlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkgcmV0dXJuIGZuLmNh
bGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTtcblx0XHR0YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJn
ZXQucGFyZW50Tm9kZSk7XG5cdH1cbn07XG5cbnZhciBtYXAgPSB7XG5cdG1vdXNlZW50ZXI6IHtc
blx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRl
ckNoZWNrXG5cdH0sXG5cdG1vdXNlbGVhdmU6IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRc
dGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0Zm9jdXM6IHtcblx0
XHRiYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycgOiAnaW4nKSxcblx0
XHRjYXB0dXJlOiB0cnVlXG5cdH0sXG5cdGJsdXI6IHtcblx0XHRiYXNlOiBldmVudExpc3RlbmVy
U3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9XG59
O1xuXG4vKjxsdElFOT4qL1xudmFyIF9rZXkgPSAnJGRlbGVnYXRpb246JztcbnZhciBmb3JtT2Jz
ZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXtcblxuXHRyZXR1cm4ge1xuXG5cdFx0YmFzZTogJ2ZvY3Vz
aW4nLFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxmLCB1aWQpe1xuXHRcdFx0dmFyIGxpc3Qg
PSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIHt9KVt1aWRdO1xuXHRc
dFx0aWYgKGxpc3QgJiYgbGlzdC5mb3JtcykgZm9yICh2YXIgaSA9IGxpc3QuZm9ybXMubGVuZ3Ro
OyBpLS07KXtcblx0XHRcdFx0Ly8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNv
IGl0IHdvbid0IGhhdmUgdGhlXG5cdFx0XHRcdC8vIHJlbW92ZUV2ZW50IG1ldGhvZCBhbnltb3Jl
LiBJbiB0aGF0IGNhc2UgdGhlIGV2ZW50IHdhc1xuXHRcdFx0XHQvLyByZW1vdmVkIGFzIHdlbGwu
XG5cdFx0XHRcdGlmIChsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0LmZvcm1zW2ldLnJl
bW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bGlz
dGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCl7XG5cdFx0
XHR2YXIgZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8gdGFyZ2V0IDogZXZl
bnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpO1xuXHRcdFx0aWYgKCFmb3JtKSByZXR1cm47XG5c
blx0XHRcdHZhciBsaXN0ZW5lcnMgPSBzZWxmLnJldHJpZXZlKF9rZXkgKyB0eXBlICsgJ2xpc3Rl
bmVycycsIHt9KSxcblx0XHRcdFx0bGlzdGVuZXIgPSBsaXN0ZW5lcnNbdWlkXSB8fCB7Zm9ybXM6
IFtdLCBmbnM6IFtdfSxcblx0XHRcdFx0Zm9ybXMgPSBsaXN0ZW5lci5mb3JtcywgZm5zID0gbGlz
dGVuZXIuZm5zO1xuXG5cdFx0XHRpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAhPSAtMSkgcmV0dXJu
O1xuXHRcdFx0Zm9ybXMucHVzaChmb3JtKTtcblxuXHRcdFx0dmFyIF9mbiA9IGZ1bmN0aW9uKGV2
ZW50KXtcblx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtc
blx0XHRcdH07XG5cdFx0XHRmb3JtLmFkZEV2ZW50KHR5cGUsIF9mbik7XG5cdFx0XHRmbnMucHVz
aChfZm4pO1xuXG5cdFx0XHRsaXN0ZW5lcnNbdWlkXSA9IGxpc3RlbmVyO1xuXHRcdFx0c2VsZi5z
dG9yZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCBsaXN0ZW5lcnMpO1xuXHRcdH1cblx0fTtc
bn07XG5cbnZhciBpbnB1dE9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cdHJldHVybiB7XG5c
dFx0YmFzZTogJ2ZvY3VzaW4nLFxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZu
LCBldmVudCwgdGFyZ2V0KXtcblx0XHRcdHZhciBldmVudHMgPSB7Ymx1cjogZnVuY3Rpb24oKXtc
blx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudHMoZXZlbnRzKTtcblx0XHRcdH19O1xuXHRcdFx0ZXZl
bnRzW3R5cGVdID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVVcChzZWxmLCBtYXRj
aCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGV2ZW50LnRhcmdldC5hZGRF
dmVudHMoZXZlbnRzKTtcblx0XHR9XG5cdH07XG59O1xuXG5pZiAoIWV2ZW50TGlzdGVuZXJTdXBw
b3J0KSBPYmplY3QuYXBwZW5kKG1hcCwge1xuXHRzdWJtaXQ6IGZvcm1PYnNlcnZlcignc3VibWl0
JyksXG5cdHJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksXG5cdGNoYW5nZTogaW5wdXRPYnNl
cnZlcignY2hhbmdlJyksXG5cdHNlbGVjdDogaW5wdXRPYnNlcnZlcignc2VsZWN0Jylcbn0pO1xu
Lyo8L2x0SUU5PiovXG5cbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLFxuXHRhZGRFdmVu
dCA9IHByb3RvLmFkZEV2ZW50LFxuXHRyZW1vdmVFdmVudCA9IHByb3RvLnJlbW92ZUV2ZW50O1xu
XG52YXIgcmVsYXkgPSBmdW5jdGlvbihvbGQsIG1ldGhvZCl7XG5cdHJldHVybiBmdW5jdGlvbih0
eXBlLCBmbiwgdXNlQ2FwdHVyZSl7XG5cdFx0aWYgKHR5cGUuaW5kZXhPZignOnJlbGF5JykgPT0g
LTEpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFy
IHBhcnNlZCA9IFNsaWNrLnBhcnNlKHR5cGUpLmV4cHJlc3Npb25zWzBdWzBdO1xuXHRcdGlmIChw
YXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5
cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgbmV3VHlwZSA9IHBhcnNlZC50YWc7XG5cdFx0
cGFyc2VkLnBzZXVkb3Muc2xpY2UoMSkuZWFjaChmdW5jdGlvbihwc2V1ZG8pe1xuXHRcdFx0bmV3
VHlwZSArPSAnOicgKyBwc2V1ZG8ua2V5ICsgKHBzZXVkby52YWx1ZSA/ICcoJyArIHBzZXVkby52
YWx1ZSArICcpJyA6ICcnKTtcblx0XHR9KTtcblx0XHRvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbik7
XG5cdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIG5ld1R5cGUsIHBhcnNlZC5wc2V1ZG9zWzBd
LnZhbHVlLCBmbik7XG5cdH07XG59O1xuXG52YXIgZGVsZWdhdGlvbiA9IHtcblxuXHRhZGRFdmVu
dDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0
cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYg
KHN0b3JlZCkgZm9yICh2YXIgX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0aWYgKHN0b3JlZFtfdWlk
XS5mbiA9PSBmbiAmJiBzdG9yZWRbX3VpZF0ubWF0Y2ggPT0gbWF0Y2gpIHJldHVybiB0aGlzO1xu
XHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IHR5cGUsIF9tYXRjaCA9IG1hdGNoLCBfZm4gPSBmbiwg
X21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xu
XG5cdFx0bWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpe1xuXHRcdFx0cmV0dXJuIFNsaWNrLm1hdGNo
KHRhcmdldCwgX21hdGNoKTtcblx0XHR9O1xuXG5cdFx0dmFyIGVsZW1lbnRFdmVudCA9IEVsZW1l
bnQuRXZlbnRzW190eXBlXTtcblx0XHRpZiAoX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50
ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24pe1xuXHRcdFx0dmFyIF9fbWF0Y2ggPSBtYXRjaCwg
Y29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNvbmRpdGlvbjtcblx0
XHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVudCl7XG5cdFx0XHRcdHJldHVybiBfX21h
dGNoKHRhcmdldCwgZXZlbnQpICYmIGNvbmRpdGlvbi5jYWxsKHRhcmdldCwgZXZlbnQsIHR5cGUp
O1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR2YXIgc2VsZiA9IHRoaXMsIHVpZCA9IFN0cmluZy51
bmlxdWVJRCgpO1xuXHRcdHZhciBkZWxlZ2F0b3IgPSBfbWFwLmxpc3RlbiA/IGZ1bmN0aW9uKGV2
ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0
KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBfbWFwLmxpc3Rlbihz
ZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQsIHVpZCk7XG5cdFx0fSA6IGZ1bmN0aW9uKGV2
ZW50LCB0YXJnZXQpe1xuXHRcdFx0aWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0
KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRpZiAodGFyZ2V0KSBidWJibGVVcChzZWxm
LCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdH07XG5cblx0XHRpZiAoIXN0b3JlZCkg
c3RvcmVkID0ge307XG5cdFx0c3RvcmVkW3VpZF0gPSB7XG5cdFx0XHRtYXRjaDogX21hdGNoLFxu
XHRcdFx0Zm46IF9mbixcblx0XHRcdGRlbGVnYXRvcjogZGVsZWdhdG9yXG5cdFx0fTtcblx0XHRz
dG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRyZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0
eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1
bmN0aW9uKHR5cGUsIG1hdGNoLCBmbiwgX3VpZCl7XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJl
dHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlm
ICghc3RvcmVkKSByZXR1cm4gdGhpcztcblxuXHRcdGlmIChfdWlkKXtcblx0XHRcdHZhciBfdHlw
ZSA9IHR5cGUsIGRlbGVnYXRvciA9IHN0b3JlZFtfdWlkXS5kZWxlZ2F0b3IsIF9tYXAgPSBtYXBb
dHlwZV0gfHwge307XG5cdFx0XHR0eXBlID0gX21hcC5iYXNlIHx8IF90eXBlO1xuXHRcdFx0aWYg
KF9tYXAucmVtb3ZlKSBfbWFwLnJlbW92ZSh0aGlzLCBfdWlkKTtcblx0XHRcdGRlbGV0ZSBzdG9y
ZWRbX3VpZF07XG5cdFx0XHRzdG9yYWdlW190eXBlXSA9IHN0b3JlZDtcblx0XHRcdHJldHVybiBy
ZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5jYXB0dXJlKTtcblx0
XHR9XG5cblx0XHR2YXIgX191aWQsIHM7XG5cdFx0aWYgKGZuKSBmb3IgKF9fdWlkIGluIHN0b3Jl
ZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtcblx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNo
ICYmIHMuZm4gPT0gZm4pIHJldHVybiBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwodGhpcywg
dHlwZSwgbWF0Y2gsIGZuLCBfX3VpZCk7XG5cdFx0fSBlbHNlIGZvciAoX191aWQgaW4gc3RvcmVk
KXtcblx0XHRcdHMgPSBzdG9yZWRbX191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2gp
IGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgcy5mbiwgX191
aWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59O1xuXG5bRWxlbWVudCwgV2lu
ZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cdGFkZEV2ZW50OiByZWxheShh
ZGRFdmVudCwgZGVsZWdhdGlvbi5hZGRFdmVudCksXG5cdHJlbW92ZUV2ZW50OiByZWxheShyZW1v
dmVFdmVudCwgZGVsZWdhdGlvbi5yZW1vdmVFdmVudClcbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0t
XG5cbm5hbWU6IEVsZW1lbnQuU3R5bGVcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMg
Zm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBpbiBhIGZhc2hpb25h
YmxlIHdheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBFbGVt
ZW50XG5cbnByb3ZpZGVzOiBFbGVtZW50LlN0eWxlXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7
XG5cbnZhciBodG1sID0gZG9jdW1lbnQuaHRtbCwgZWw7XG5cbi8vPGx0SUU5PlxuLy8gQ2hlY2sg
Zm9yIG9sZElFLCB3aGljaCBkb2VzIG5vdCByZW1vdmUgc3R5bGVzIHdoZW4gdGhleSdyZSBzZXQg
dG8gbnVsbFxuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmVsLnN0eWxlLmNv
bG9yID0gJ3JlZCc7XG5lbC5zdHlsZS5jb2xvciA9IG51bGw7XG52YXIgZG9lc05vdFJlbW92ZVN0
eWxlcyA9IGVsLnN0eWxlLmNvbG9yID09ICdyZWQnO1xuXG4vLyBjaGVjayBmb3Igb2xkSUUsIHdo
aWNoIHJldHVybnMgYm9yZGVyKiBzaG9ydGhhbmQgc3R5bGVzIGluIHRoZSB3cm9uZyBvcmRlciAo
Y29sb3Itd2lkdGgtc3R5bGUgaW5zdGVhZCBvZiB3aWR0aC1zdHlsZS1jb2xvcilcbnZhciBib3Jk
ZXIgPSAnMXB4IHNvbGlkICMxMjNhYmMnO1xuZWwuc3R5bGUuYm9yZGVyID0gYm9yZGVyO1xudmFy
IHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyID0gZWwuc3R5bGUuYm9yZGVyICE9IGJvcmRlcjtc
bmVsID0gbnVsbDtcbi8vPC9sdElFOT5cblxudmFyIGhhc0dldENvbXB1dGVkU3R5bGUgPSAhIXdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlLFxuXHRzdXBwb3J0Qm9yZGVyUmFkaXVzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51bGw7XG5cbkVsZW1l
bnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMpe1xuXHR0aGlzLnNl
dFN0eWxlcyhzdHlsZXMpO1xufX07XG5cbnZhciBoYXNPcGFjaXR5ID0gKGh0bWwuc3R5bGUub3Bh
Y2l0eSAhPSBudWxsKSxcblx0aGFzRmlsdGVyID0gKGh0bWwuc3R5bGUuZmlsdGVyICE9IG51bGwp
LFxuXHRyZUFscGhhID0gL2FscGhhXFwob3BhY2l0eT0oW1xcZC5dKylcXCkvaTtcblxudmFyIHNl
dFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdG9y
ZSgnJG9wYWNpdHknLCBvcGFjaXR5KTtcblx0ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gb3Bh
Y2l0eSA+IDAgfHwgb3BhY2l0eSA9PSBudWxsID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG59O1xu
XG4vLzxsdElFOT5cbnZhciBzZXRGaWx0ZXIgPSBmdW5jdGlvbihlbGVtZW50LCByZWdleHAsIHZh
bHVlKXtcblx0dmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRmaWx0ZXIgPSBzdHlsZS5m
aWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8fCAnJztcblx0c3R5
bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVwbGFjZShyZWdleHAs
IHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50cmltKCk7XG5cdGlmICghc3R5bGUuZmls
dGVyKSBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xufTtcbi8vPC9sdElFOT5cblxu
dmFyIHNldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNpdHkp
e1xuXHRlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5O1xufSA6IChoYXNGaWx0ZXIgPyBm
dW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0aWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8
fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxlLnpvb20gPSAx
O1xuXHRpZiAob3BhY2l0eSA9PSBudWxsIHx8IG9wYWNpdHkgPT0gMSl7XG5cdFx0c2V0RmlsdGVy
KGVsZW1lbnQsIHJlQWxwaGEsICcnKTtcblx0XHRpZiAob3BhY2l0eSA9PSAxICYmIGdldE9wYWNp
dHkoZWxlbWVudCkgIT0gMSkgc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFj
aXR5PTEwMCknKTtcblx0fSBlbHNlIHtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwg
J2FscGhhKG9wYWNpdHk9JyArIChvcGFjaXR5ICogMTAwKS5saW1pdCgwLCAxMDApLnJvdW5kKCkg
KyAnKScpO1xuXHR9XG59IDogc2V0VmlzaWJpbGl0eSkpO1xuXG52YXIgZ2V0T3BhY2l0eSA9ICho
YXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5z
dHlsZS5vcGFjaXR5IHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnb3BhY2l0eScpO1xuXHRy
ZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNpdHkudG9GbG9hdCgpO1xufSA6IChoYXNG
aWx0ZXIgPyBmdW5jdGlvbihlbGVtZW50KXtcblx0dmFyIGZpbHRlciA9IChlbGVtZW50LnN0eWxl
LmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpKSxcblx0XHRvcGFj
aXR5O1xuXHRpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJlQWxwaGEpO1xuXHRy
ZXR1cm4gKG9wYWNpdHkgPT0gbnVsbCB8fCBmaWx0ZXIgPT0gbnVsbCkgPyAxIDogKG9wYWNpdHlb
MV0gLyAxMDApO1xufSA6IGZ1bmN0aW9uKGVsZW1lbnQpe1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1l
bnQucmV0cmlldmUoJyRvcGFjaXR5Jyk7XG5cdGlmIChvcGFjaXR5ID09IG51bGwpIG9wYWNpdHkg
PSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6IDEpO1xuXHRyZXR1
cm4gb3BhY2l0eTtcbn0pKTtcblxudmFyIGZsb2F0TmFtZSA9IChodG1sLnN0eWxlLmNzc0Zsb2F0
ID09IG51bGwpID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyxcblx0bmFtZWRQb3NpdGlvbnMg
PSB7bGVmdDogJzAlJywgdG9wOiAnMCUnLCBjZW50ZXI6ICc1MCUnLCByaWdodDogJzEwMCUnLCBi
b3R0b206ICcxMDAlJ30sXG5cdGhhc0JhY2tncm91bmRQb3NpdGlvblhZID0gKGh0bWwuc3R5bGUu
YmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSxcblx0cHJlZml4UGF0dGVybiA9IC9eLShtcykt
LztcblxudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0cmV0dXJuIHByb3Bl
cnR5LnJlcGxhY2UocHJlZml4UGF0dGVybiwgJyQxLScpLmNhbWVsQ2FzZSgpO1xufTtcblxuLy88
bHRJRTk+XG52YXIgcmVtb3ZlU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcHJvcGVydHkpe1xuXHRp
ZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpe1xuXHRcdHN0eWxlLnJlbW92ZUF0
dHJpYnV0ZShwcm9wZXJ0eSArICdYJyk7XG5cdFx0cHJvcGVydHkgKz0gJ1knO1xuXHR9XG5cdHN0
eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG59O1xuLy88L2x0SUU5PlxuXG5FbGVtZW50
LmltcGxlbWVudCh7XG5cblx0Z2V0Q29tcHV0ZWRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xu
XHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJu
IHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldO1xuXHRcdHZhciBkZWZhdWx0
VmlldyA9IEVsZW1lbnQuZ2V0RG9jdW1lbnQodGhpcykuZGVmYXVsdFZpZXcsXG5cdFx0XHRjb21w
dXRlZCA9IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLCBu
dWxsKSA6IG51bGw7XG5cdFx0cmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRlZC5nZXRQcm9wZXJ0
eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHByb3BlcnR5Lmh5cGhl
bmF0ZSgpKSA6ICcnO1xuXHR9LFxuXG5cdHNldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFs
dWUpe1xuXHRcdGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpe1xuXHRcdFx0aWYgKHZhbHVlICE9
IG51bGwpIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cdFx0XHRzZXRPcGFjaXR5KHRoaXMs
IHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRwcm9wZXJ0eSA9IGNhbWVs
Q2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpO1xuXHRcdGlm
ICh0eXBlT2YodmFsdWUpICE9ICdzdHJpbmcnKXtcblx0XHRcdHZhciBtYXAgPSAoRWxlbWVudC5T
dHlsZXNbcHJvcGVydHldIHx8ICdAJykuc3BsaXQoJyAnKTtcblx0XHRcdHZhbHVlID0gQXJyYXku
Y29udmVydCh2YWx1ZSkubWFwKGZ1bmN0aW9uKHZhbCwgaSl7XG5cdFx0XHRcdGlmICghbWFwW2ld
KSByZXR1cm4gJyc7XG5cdFx0XHRcdHJldHVybiAodHlwZU9mKHZhbCkgPT0gJ251bWJlcicpID8g
bWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsO1xuXHRcdFx0fSkuam9p
bignICcpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJlcih2YWx1ZSkpKXtc
blx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3R5bGVb
cHJvcGVydHldID0gdmFsdWU7XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYgKCh2YWx1ZSA9PSAnJyB8
fCB2YWx1ZSA9PSBudWxsKSAmJiBkb2VzTm90UmVtb3ZlU3R5bGVzICYmIHRoaXMuc3R5bGUucmVt
b3ZlQXR0cmlidXRlKXtcblx0XHRcdHJlbW92ZVN0eWxlKHRoaXMuc3R5bGUsIHByb3BlcnR5KTtc
blx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFN0
eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKHByb3BlcnR5ID09ICdvcGFjaXR5Jykg
cmV0dXJuIGdldE9wYWNpdHkodGhpcyk7XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVy
dHkgPT0gJ2Zsb2F0JyA/IGZsb2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAoc3VwcG9ydEJv
cmRlclJhZGl1cyAmJiBwcm9wZXJ0eS5pbmRleE9mKCdib3JkZXJSYWRpdXMnKSAhPSAtMSl7XG5c
dFx0XHRyZXR1cm4gWydib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVz
JywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnXS5t
YXAoZnVuY3Rpb24oY29ybmVyKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVbY29ybmVyXSB8
fCAnMHB4Jztcblx0XHRcdH0sIHRoaXMpLmpvaW4oJyAnKTtcblx0XHR9XG5cdFx0dmFyIHJlc3Vs
dCA9IHRoaXMuc3R5bGVbcHJvcGVydHldO1xuXHRcdGlmICghcmVzdWx0IHx8IHByb3BlcnR5ID09
ICd6SW5kZXgnKXtcblx0XHRcdGlmIChFbGVtZW50LlNob3J0U3R5bGVzLmhhc093blByb3BlcnR5
KHByb3BlcnR5KSl7XG5cdFx0XHRcdHJlc3VsdCA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBzIGlu
IEVsZW1lbnQuU2hvcnRTdHlsZXNbcHJvcGVydHldKSByZXN1bHQucHVzaCh0aGlzLmdldFN0eWxl
KHMpKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRy
ZXN1bHQgPSB0aGlzLmdldENvbXB1dGVkU3R5bGUocHJvcGVydHkpO1xuXHRcdH1cblx0XHRpZiAo
aGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRpb25bWFldPyQvLnRl
c3QocHJvcGVydHkpKXtcblx0XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvKHRvcHxyaWdodHxi
b3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24pe1xuXHRcdFx0XHRyZXR1cm4gbmFtZWRQ
b3NpdGlvbnNbcG9zaXRpb25dO1xuXHRcdFx0fSkgfHwgJzBweCc7XG5cdFx0fVxuXHRcdGlmICgh
cmVzdWx0ICYmIHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9zaXRpb24nKSByZXR1cm4gJzBweCAw
cHgnO1xuXHRcdGlmIChyZXN1bHQpe1xuXHRcdFx0cmVzdWx0ID0gU3RyaW5nKHJlc3VsdCk7XG5c
dFx0XHR2YXIgY29sb3IgPSByZXN1bHQubWF0Y2goL3JnYmE/XFwoW1xcZFxccyxdK1xcKS8pO1xu
XHRcdFx0aWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xvclswXSwgY29sb3Jb
MF0ucmdiVG9IZXgoKSk7XG5cdFx0fVxuXHRcdGlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiAh
dGhpcy5zdHlsZVtwcm9wZXJ0eV0pe1xuXHRcdFx0aWYgKCgvXihoZWlnaHR8d2lkdGgpJC8pLnRl
c3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1bHQpKSl7XG5cdFx0XHRcdHZhciB2YWx1
ZXMgPSAocHJvcGVydHkgPT0gJ3dpZHRoJykgPyBbJ2xlZnQnLCAncmlnaHQnXSA6IFsndG9wJywg
J2JvdHRvbSddLCBzaXplID0gMDtcblx0XHRcdFx0dmFsdWVzLmVhY2goZnVuY3Rpb24odmFsdWUp
e1xuXHRcdFx0XHRcdHNpemUgKz0gdGhpcy5nZXRTdHlsZSgnYm9yZGVyLScgKyB2YWx1ZSArICct
d2lkdGgnKS50b0ludCgpICsgdGhpcy5nZXRTdHlsZSgncGFkZGluZy0nICsgdmFsdWUpLnRvSW50
KCk7XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gdGhpc1snb2Zmc2V0JyArIHBy
b3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4Jztcblx0XHRcdH1cblx0XHRcdGlmICgo
L15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5KSAmJiBpc05h
TihwYXJzZUZsb2F0KHJlc3VsdCkpKXtcblx0XHRcdFx0cmV0dXJuICcwcHgnO1xuXHRcdFx0fVxu
XHRcdH1cblx0XHQvLzxsdElFOT5cblx0XHRpZiAocmV0dXJuc0JvcmRlcnNJbldyb25nT3JkZXIg
JiYgL15ib3JkZXIoVG9wfFJpZ2h0fEJvdHRvbXxMZWZ0KT8kLy50ZXN0KHByb3BlcnR5KSAmJiAv
XiMvLnRlc3QocmVzdWx0KSl7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlcGxhY2UoL14oLispXFxz
KC4rKVxccyguKykkLywgJyQyICQzICQxJyk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblxuXHRc
dHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0c2V0U3R5bGVzOiBmdW5jdGlvbihzdHlsZXMpe1xu
XHRcdGZvciAodmFyIHN0eWxlIGluIHN0eWxlcykgdGhpcy5zZXRTdHlsZShzdHlsZSwgc3R5bGVz
W3N0eWxlXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGVzOiBmdW5jdGlv
bigpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyku
ZWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtl
eSk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG59KTtcblxuRWxl
bWVudC5TdHlsZXMgPSB7XG5cdGxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgn
LCByaWdodDogJ0BweCcsXG5cdHdpZHRoOiAnQHB4JywgaGVpZ2h0OiAnQHB4JywgbWF4V2lkdGg6
ICdAcHgnLCBtYXhIZWlnaHQ6ICdAcHgnLCBtaW5XaWR0aDogJ0BweCcsIG1pbkhlaWdodDogJ0Bw
eCcsXG5cdGJhY2tncm91bmRDb2xvcjogJ3JnYihALCBALCBAKScsIGJhY2tncm91bmRTaXplOiAn
QHB4JywgYmFja2dyb3VuZFBvc2l0aW9uOiAnQHB4IEBweCcsIGNvbG9yOiAncmdiKEAsIEAsIEAp
Jyxcblx0Zm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4JywgbGluZUhlaWdodDog
J0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBweCknLFxuXHRtYXJnaW46ICdAcHggQHB4
IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyOiAnQHB4IEAgcmdi
KEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCknLFxuXHRib3Jk
ZXJXaWR0aDogJ0BweCBAcHggQHB4IEBweCcsIGJvcmRlclN0eWxlOiAnQCBAIEAgQCcsIGJvcmRl
ckNvbG9yOiAncmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAs
IEApJyxcblx0ekluZGV4OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0OiAnQCcsIHRleHRJ
bmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0BweCBAcHggQHB4IEBw
eCdcbn07XG5cblxuXG5cblxuRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJnaW46IHt9LCBwYWRk
aW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJTdHlsZToge30sIGJv
cmRlckNvbG9yOiB7fX07XG5cblsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J10uZWFj
aChmdW5jdGlvbihkaXJlY3Rpb24pe1xuXHR2YXIgU2hvcnQgPSBFbGVtZW50LlNob3J0U3R5bGVz
O1xuXHR2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7XG5cdFsnbWFyZ2luJywgJ3BhZGRpbmcnXS5l
YWNoKGZ1bmN0aW9uKHN0eWxlKXtcblx0XHR2YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlvbjtcblx0
XHRTaG9ydFtzdHlsZV1bc2RdID0gQWxsW3NkXSA9ICdAcHgnO1xuXHR9KTtcblx0dmFyIGJkID0g
J2JvcmRlcicgKyBkaXJlY3Rpb247XG5cdFNob3J0LmJvcmRlcltiZF0gPSBBbGxbYmRdID0gJ0Bw
eCBAIHJnYihALCBALCBAKSc7XG5cdHZhciBiZHcgPSBiZCArICdXaWR0aCcsIGJkcyA9IGJkICsg
J1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InO1xuXHRTaG9ydFtiZF0gPSB7fTtcblx0U2hvcnQu
Ym9yZGVyV2lkdGhbYmR3XSA9IFNob3J0W2JkXVtiZHddID0gQWxsW2Jkd10gPSAnQHB4Jztcblx0
U2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7
XG5cdFNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFsbFtiZGNdID0g
J3JnYihALCBALCBAKSc7XG59KTtcblxuaWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZKSBFbGVt
ZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3JvdW5kUG9zaXRpb25Y
OiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307XG59KSgpO1xuXG4vKlxuLS0tXG5cbm5h
bWU6IEVsZW1lbnQuRGltZW5zaW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyB0
byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVtZW50cyBhbmQg
dGhlIHdpbmRvdyBvYmplY3QuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVk
aXRzOlxuICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRw
Oi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNl
bnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS5cbiAgLSBWaWV3cG9y
dCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1
aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xp
Y2Vuc2UuaHRtbCkuXG5cbnJlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHlsZV1cblxucHJv
dmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5c
bnZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG5cdGNoaWxkID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcw
JztcbmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xudmFyIGJyb2tlbk9mZnNldFBhcmVudCA9
IChjaGlsZC5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQpO1xuZWxlbWVudCA9IGNoaWxkID0gbnVs
bDtcblxudmFyIGhlaWdodENvbXBvbmVudHMgPSBbJ2hlaWdodCcsICdwYWRkaW5nVG9wJywgJ3Bh
ZGRpbmdCb3R0b20nLCAnYm9yZGVyVG9wV2lkdGgnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcblx0
d2lkdGhDb21wb25lbnRzID0gWyd3aWR0aCcsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQn
LCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnXTtcblxudmFyIHN2Z0NhbGN1
bGF0ZVNpemUgPSBmdW5jdGlvbihlbCl7XG5cblx0dmFyIGdDUyA9IHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlKGVsKSxcblx0XHRib3VuZHMgPSB7eDogMCwgeTogMH07XG5cblx0aGVpZ2h0Q29tcG9u
ZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnkgKz0gcGFyc2VGbG9hdChnQ1Nb
Y3NzXSk7XG5cdH0pO1xuXHR3aWR0aENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRc
dGJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0cmV0dXJuIGJvdW5k
cztcbn07XG5cbnZhciBpc09mZnNldCA9IGZ1bmN0aW9uKGVsKXtcblx0cmV0dXJuIHN0eWxlU3Ry
aW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpO1xufTtcblxudmFy
IGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gaXNPZmZzZXQoZWwpIHx8
ICgvXig/OnRhYmxlfHRkfHRoKSQvaSkudGVzdChlbC50YWdOYW1lKTtcbn07XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSl7XG5cdFx0aWYgKGlzQm9k
eSh0aGlzKSl7XG5cdFx0XHR0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKHgsIHkpO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExlZnQgPSB4O1xuXHRcdFx0dGhpcy5zY3JvbGxUb3Ag
PSB5O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTaXplOiBmdW5jdGlv
bigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNp
emUoKTtcblxuXHRcdC8vPGx0SUU5PlxuXHRcdC8vIFRoaXMgaWYgY2xhdXNlIGlzIGJlY2F1c2Ug
SUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvZiBlbGVtZW50cyB3
aXRoIHZpc2liaWxpdHkgaGlkZGVuLlxuXHRcdGlmICghd2luZG93LmdldENvbXB1dGVkU3R5bGUp
IHJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRIZWlnaHR9O1xuXHRc
dC8vPC9sdElFOT5cblxuXHRcdC8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIsIGNhbGxpbmcgYHN2
Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4ZWQgdGhlIHN2ZyBz
aXplIGJ1Zy5cblx0XHQvLyBCdWcgaW5mbzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTMwOTg1XG5cdFx0aWYgKHRoaXMuZ2V0KCd0YWcnKSA9PSAnc3ZnJykg
cmV0dXJuIHN2Z0NhbGN1bGF0ZVNpemUodGhpcyk7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIGJv
dW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRyZXR1cm4ge3g6IGJv
dW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07XG5cdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRy
ZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHRcdH1cblx0fSxcblxuXHRnZXRTY3JvbGxTaXplOiBmdW5j
dGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdl
dFNjcm9sbFNpemUoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsV2lkdGgsIHk6IHRoaXMu
c2Nyb2xsSGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYg
KGlzQm9keSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7XG5cdFx0
cmV0dXJuIHt4OiB0aGlzLnNjcm9sbExlZnQsIHk6IHRoaXMuc2Nyb2xsVG9wfTtcblx0fSxcblxu
XHRnZXRTY3JvbGxzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5wYXJlbnRO
b2RlLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcblx0XHR3aGlsZSAoZWxlbWVudCAmJiAhaXNC
b2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0gZWxlbWVudC5zY3JvbGxMZWZ0O1xu
XHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdGVsZW1lbnQgPSBl
bGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxu
XHRnZXRPZmZzZXRQYXJlbnQ6IGJyb2tlbk9mZnNldFBhcmVudCA/IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJp
bmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7XG5cblx0XHR2
YXIgaXNPZmZzZXRDaGVjayA9IChzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24nKSA9PSAn
c3RhdGljJykgPyBpc09mZnNldFN0YXRpYyA6IGlzT2Zmc2V0O1xuXHRcdHdoaWxlICgoZWxlbWVu
dCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpe1xuXHRcdFx0aWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVu
dCkpIHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSA6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdGlmIChpc0JvZHkoZWxlbWVudCkg
fHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51
bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRc
dH0gY2F0Y2ggKGUpe31cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRnZXRPZmZzZXRzOiBm
dW5jdGlvbigpe1xuXHRcdHZhciBoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdDtcblxuXHRcdGlmIChoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3Qpe1xu
XHRcdFx0dmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcblx0XHRcdFx0
aHRtbCA9IGRvY3VtZW50LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQpLFxu
XHRcdFx0XHRodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3JvbGwoKSxcblx0XHRcdFx0ZWxlbVNjcm9s
bHMgPSB0aGlzLmdldFNjcm9sbHMoKSxcblx0XHRcdFx0aXNGaXhlZCA9IChzdHlsZVN0cmluZyh0
aGlzLCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKTtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0
eDogYm91bmQubGVmdC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xscy54ICsgKChpc0ZpeGVkKSA/IDAg
OiBodG1sU2Nyb2xsLngpIC0gaHRtbC5jbGllbnRMZWZ0LFxuXHRcdFx0XHR5OiBib3VuZC50b3Au
dG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC55
KSAtIGh0bWwuY2xpZW50VG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBlbGVtZW50ID0g
dGhpcywgcG9zaXRpb24gPSB7eDogMCwgeTogMH07XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkgcmV0
dXJuIHBvc2l0aW9uO1xuXG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7
XG5cdFx0XHRwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDtcblx0XHRcdHBvc2l0aW9u
LnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7XG5cblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNl
dFBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0UG9z
aXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlKXtcblx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZz
ZXRzKCksXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmdldFNjcm9sbHMoKTtcblx0XHR2YXIgcG9zaXRp
b24gPSB7XG5cdFx0XHR4OiBvZmZzZXQueCAtIHNjcm9sbC54LFxuXHRcdFx0eTogb2Zmc2V0Lnkg
LSBzY3JvbGwueVxuXHRcdH07XG5cblx0XHRpZiAocmVsYXRpdmUgJiYgKHJlbGF0aXZlID0gZG9j
dW1lbnQuaWQocmVsYXRpdmUpKSl7XG5cdFx0XHR2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IHJlbGF0
aXZlLmdldFBvc2l0aW9uKCk7XG5cdFx0XHRyZXR1cm4ge3g6IHBvc2l0aW9uLnggLSByZWxhdGl2
ZVBvc2l0aW9uLnggLSBsZWZ0Qm9yZGVyKHJlbGF0aXZlKSwgeTogcG9zaXRpb24ueSAtIHJlbGF0
aXZlUG9zaXRpb24ueSAtIHRvcEJvcmRlcihyZWxhdGl2ZSl9O1xuXHRcdH1cblx0XHRyZXR1cm4g
cG9zaXRpb247XG5cdH0sXG5cblx0Z2V0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGVsZW1lbnQpe1xu
XHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5h
dGVzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihlbGVtZW50KSxcblx0
XHRcdHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHR2YXIgb2JqID0ge1xuXHRcdFx0bGVmdDog
cG9zaXRpb24ueCxcblx0XHRcdHRvcDogcG9zaXRpb24ueSxcblx0XHRcdHdpZHRoOiBzaXplLngs
XG5cdFx0XHRoZWlnaHQ6IHNpemUueVxuXHRcdH07XG5cdFx0b2JqLnJpZ2h0ID0gb2JqLmxlZnQg
KyBvYmoud2lkdGg7XG5cdFx0b2JqLmJvdHRvbSA9IG9iai50b3AgKyBvYmouaGVpZ2h0O1xuXHRc
dHJldHVybiBvYmo7XG5cdH0sXG5cblx0Y29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xu
XHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBvYmoueCAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJn
aW4tbGVmdCcpLFxuXHRcdFx0dG9wOiBvYmoueSAtIHN0eWxlTnVtYmVyKHRoaXMsICdtYXJnaW4t
dG9wJylcblx0XHR9O1xuXHR9LFxuXG5cdHNldFBvc2l0aW9uOiBmdW5jdGlvbihvYmope1xuXHRc
dHJldHVybiB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihvYmopKTtcblx0fVxu
XG59KTtcblxuXG5bRG9jdW1lbnQsIFdpbmRvd10uaW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0
Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlz
KTtcblx0XHRyZXR1cm4ge3g6IGRvYy5jbGllbnRXaWR0aCwgeTogZG9jLmNsaWVudEhlaWdodH07
XG5cdH0sXG5cblx0Z2V0U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdHZhciB3aW4gPSB0aGlzLmdl
dFdpbmRvdygpLCBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDog
d2luLnBhZ2VYT2Zmc2V0IHx8IGRvYy5zY3JvbGxMZWZ0LCB5OiB3aW4ucGFnZVlPZmZzZXQgfHwg
ZG9jLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKSxcblx0XHRcdG1pbiA9IHRoaXMuZ2V0
U2l6ZSgpLFxuXHRcdFx0Ym9keSA9IHRoaXMuZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdFx0cmV0
dXJuIHt4OiBNYXRoLm1heChkb2Muc2Nyb2xsV2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIG1pbi54
KSwgeTogTWF0aC5tYXgoZG9jLnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIG1pbi55
KX07XG5cdH0sXG5cblx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHt4OiAw
LCB5OiAwfTtcblx0fSxcblxuXHRnZXRDb29yZGluYXRlczogZnVuY3Rpb24oKXtcblx0XHR2YXIg
c2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXHRcdHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwLCBib3R0
b206IHNpemUueSwgcmlnaHQ6IHNpemUueCwgaGVpZ2h0OiBzaXplLnksIHdpZHRoOiBzaXplLnh9
O1xuXHR9XG5cbn0pO1xuXG4vLyBwcml2YXRlIG1ldGhvZHNcblxudmFyIHN0eWxlU3RyaW5nID0g
RWxlbWVudC5nZXRDb21wdXRlZFN0eWxlO1xuXG5mdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50
LCBzdHlsZSl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbGVtZW50LCBzdHlsZSkudG9JbnQoKSB8
fCAwO1xufVxuXG5cblxuZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpe1xuXHRyZXR1cm4gc3R5
bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24gbGVm
dEJvcmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXIt
bGVmdC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7XG5cdHJldHVybiAo
L14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7XG59XG5cbmZ1bmN0aW9u
IGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7XG5cdHZhciBkb2MgPSBlbGVtZW50LmdldERvY3Vt
ZW50KCk7XG5cdHJldHVybiAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdD
U1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xufVxuXG59KSgpO1xuXG4vL2FsaWFz
ZXNcbkVsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7IC8vY29tcGF0YWJp
bGl0eVxuXG5bV2luZG93LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7
XG5cblx0Z2V0SGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNpemUoKS55
O1xuXHR9LFxuXG5cdGdldFdpZHRoOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNp
emUoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
dGhpcy5nZXRTY3JvbGwoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxIZWln
aHQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLnk7XG5cdH0s
XG5cblx0Z2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Ny
b2xsU2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0VG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldFBvc2l0aW9uKCkueTtcblx0fSxcblxuXHRnZXRMZWZ0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDtcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5u
YW1lOiBGeFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGJhc2ljIGFuaW1hdGlvbiBsb2dp
YyB0byBiZSBleHRlbmRlZCBieSBhbGwgb3RoZXIgRnggQ2xhc3Nlcy5cblxubGljZW5zZTogTUlU
LXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xh
c3MuVGhlbmFibGVdXG5cbnByb3ZpZGVzOiBGeFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4s
IEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHtcblx0XHQv
KlxuXHRcdG9uU3RhcnQ6IG5pbCxcblx0XHRvbkNhbmNlbDogbmlsLFxuXHRcdG9uQ29tcGxldGU6
IG5pbCxcblx0XHQqL1xuXHRcdGZwczogNjAsXG5cdFx0dW5pdDogZmFsc2UsXG5cdFx0ZHVyYXRp
b246IDUwMCxcblx0XHRmcmFtZXM6IG51bGwsXG5cdFx0ZnJhbWVTa2lwOiB0cnVlLFxuXHRcdGxp
bms6ICdpZ25vcmUnXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5c
dFx0dGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7XG5cdFx0dGhpcy5zZXRPcHRp
b25zKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIGZ1bmN0aW9uKHApe1xuXHRcdFx0cmV0dXJuIC0oTWF0aC5jb3MoTWF0aC5QSSAqIHAp
IC0gMSkgLyAyO1xuXHRcdH07XG5cdH0sXG5cblx0c3RlcDogZnVuY3Rpb24obm93KXtcblx0XHRp
ZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7XG5cdFx0XHR2YXIgZGlmZiA9ICh0aGlzLnRpbWUg
IT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRpZmYgLyB0aGlzLmZy
YW1lSW50ZXJ2YWw7XG5cdFx0XHR0aGlzLnRpbWUgPSBub3c7XG5cdFx0XHR0aGlzLmZyYW1lICs9
IGZyYW1lcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSsrO1xuXHRcdH1cblxuXHRc
dGlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpe1xuXHRcdFx0dmFyIGRlbHRhID0gdGhpcy50
cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7XG5cdFx0XHR0aGlzLnNldCh0aGlz
LmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLnNldCh0aGlzLmNvbXB1dGUo
dGhpcy5mcm9tLCB0aGlzLnRvLCAxKSk7XG5cdFx0XHR0aGlzLnN0b3AoKTtcblx0XHR9XG5cdH0s
XG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xuXHRcdHJldHVybiBub3c7XG5cdH0sXG5cblx0Y29t
cHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0XHRyZXR1cm4gRnguY29tcHV0ZShm
cm9tLCB0bywgZGVsdGEpO1xuXHR9LFxuXG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICgh
dGhpcy5pc1J1bm5pbmcoKSkgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMu
bGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtc
blx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50
cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxc
blxuXHRzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhmcm9t
LCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZnJvbSA9IGZyb207XG5cdFx0dGhpcy50byA9
IHRvO1xuXHRcdHRoaXMuZnJhbWUgPSAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCkgPyAwIDogLTE7
XG5cdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHR0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmdldFRy
YW5zaXRpb24oKTtcblx0XHR2YXIgZnJhbWVzID0gdGhpcy5vcHRpb25zLmZyYW1lcywgZnBzID0g
dGhpcy5vcHRpb25zLmZwcywgZHVyYXRpb24gPSB0aGlzLm9wdGlvbnMuZHVyYXRpb247XG5cdFx0
dGhpcy5kdXJhdGlvbiA9IEZ4LkR1cmF0aW9uc1tkdXJhdGlvbl0gfHwgZHVyYXRpb24udG9JbnQo
KTtcblx0XHR0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXHRcdHRoaXMuZnJhbWVz
ID0gZnJhbWVzIHx8IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbiAvIHRoaXMuZnJhbWVJbnRlcnZh
bCk7XG5cdFx0aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRc
dFx0dGhpcy5yZXNldFRoZW5hYmxlKHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRcdHRoaXMuZmly
ZUV2ZW50KCdzdGFydCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0cHVzaEluc3RhbmNlLmNhbGwodGhp
cywgZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpe1xu
XHRcdGlmICh0aGlzLmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
XHRwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdGlmICh0
aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBs
ZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdFx0aWYgKCF0aGlzLmNhbGxDaGFpbigpKSB0aGlz
LmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9IGVsc2Ug
e1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHR9
XG5cdFx0XHR0aGlzLnJlc29sdmUodGhpcy5zdWJqZWN0ID09PSB0aGlzID8gbnVsbCA6IHRoaXMu
c3ViamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
dWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5c
dFx0XHR0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7XG5cdFx0XHR0aGlzLmZpcmVFdmVudCgnY2Fu
Y2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7XG5cdFx0XHR0aGlzLnJlamVjdCh0aGlz
LnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwYXVzZTogZnVu
Y3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5cdFx0XHR0aGlzLnRpbWUgPSBu
dWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5c
dFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlc3VtZTogZnVuY3Rpb24oKXtcblx0
XHRpZiAodGhpcy5pc1BhdXNlZCgpKSBwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlv
bnMuZnBzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbdGhpcy5vcHRpb25zLmZwc107XG5cdFx0cmV0
dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTtcblx0fSxcblxuXHRpc1BhdXNlZDogZnVu
Y3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuZnJhbWUgPCB0aGlzLmZyYW1lcykgJiYgIXRoaXMu
aXNSdW5uaW5nKCk7XG5cdH1cblxufSk7XG5cbkZ4LmNvbXB1dGUgPSBmdW5jdGlvbihmcm9tLCB0
bywgZGVsdGEpe1xuXHRyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207XG59O1xuXG5G
eC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9
O1xuXG4vLyBnbG9iYWwgdGltZXJzXG5cbnZhciBpbnN0YW5jZXMgPSB7fSwgdGltZXJzID0ge307
XG5cbnZhciBsb29wID0gZnVuY3Rpb24oKXtcblx0dmFyIG5vdyA9IERhdGUubm93KCk7XG5cdGZv
ciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGluc3RhbmNlID0gdGhpc1tp
XTtcblx0XHRpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTtcblx0fVxufTtcblxudmFy
IHB1c2hJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zw
c10gfHwgKGluc3RhbmNlc1tmcHNdID0gW10pO1xuXHRsaXN0LnB1c2godGhpcyk7XG5cdGlmICgh
dGltZXJzW2Zwc10pIHRpbWVyc1tmcHNdID0gbG9vcC5wZXJpb2RpY2FsKE1hdGgucm91bmQoMTAw
MCAvIGZwcyksIGxpc3QpO1xufTtcblxudmFyIHB1bGxJbnN0YW5jZSA9IGZ1bmN0aW9uKGZwcyl7
XG5cdHZhciBsaXN0ID0gaW5zdGFuY2VzW2Zwc107XG5cdGlmIChsaXN0KXtcblx0XHRsaXN0LmVy
YXNlKHRoaXMpO1xuXHRcdGlmICghbGlzdC5sZW5ndGggJiYgdGltZXJzW2Zwc10pe1xuXHRcdFx0
ZGVsZXRlIGluc3RhbmNlc1tmcHNdO1xuXHRcdFx0dGltZXJzW2Zwc10gPSBjbGVhckludGVydmFs
KHRpbWVyc1tmcHNdKTtcblx0XHR9XG5cdH1cbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFt
ZTogRnguQ1NTXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ1NTIGFuaW1hdGlvbiBsb2dp
Yy4gVXNlZCBieSBGeC5Ud2VlbiwgRnguTW9ycGgsIEZ4LkVsZW1lbnRzLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtGeCwgRWxlbWVudC5TdHlsZV1cblxucHJv
dmlkZXM6IEZ4LkNTU1xuXG4uLi5cbiovXG5cbkZ4LkNTUyA9IG5ldyBDbGFzcyh7XG5cblx0RXh0
ZW5kczogRngsXG5cblx0Ly9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVjdFxuXG5cdHBy
ZXBhcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpe1xuXHRcdHZhbHVlcyA9
IEFycmF5LmNvbnZlcnQodmFsdWVzKTtcblx0XHR2YXIgZnJvbSA9IHZhbHVlc1swXSwgdG8gPSB2
YWx1ZXNbMV07XG5cdFx0aWYgKHRvID09IG51bGwpe1xuXHRcdFx0dG8gPSBmcm9tO1xuXHRcdFx0
ZnJvbSA9IGVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpO1xuXHRcdFx0dmFyIHVuaXQgPSB0aGlz
Lm9wdGlvbnMudW5pdDtcblx0XHRcdC8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29t
L3J5YW5tb3JyL2Z4L2Jsb2IvbWFzdGVyL2Z4LmpzI0wyOTlcblx0XHRcdGlmICh1bml0ICYmIGZy
b20gJiYgdHlwZW9mIGZyb20gPT0gJ3N0cmluZycgJiYgZnJvbS5zbGljZSgtdW5pdC5sZW5ndGgp
ICE9IHVuaXQgJiYgcGFyc2VGbG9hdChmcm9tKSAhPSAwKXtcblx0XHRcdFx0ZWxlbWVudC5zZXRT
dHlsZShwcm9wZXJ0eSwgdG8gKyB1bml0KTtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxlbWVudC5n
ZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gSUUgYW5kIE9wZXJhIHN1cHBv
cnQgcGl4ZWxMZWZ0IG9yIHBpeGVsV2lkdGhcblx0XHRcdFx0aWYgKCEoL3B4JC8udGVzdCh2YWx1
ZSkpKXtcblx0XHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbKCdwaXhlbC0nICsgcHJvcGVy
dHkpLmNhbWVsQ2FzZSgpXTtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRc
dFx0XHQvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJpay5lYWUubmV0L2Fy
Y2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxXG5cdFx0XHRcdFx0XHR2
YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUu
bGVmdCA9IHRvICsgdW5pdDtcblx0XHRcdFx0XHRcdHZhbHVlID0gZWxlbWVudC5zdHlsZS5waXhl
bExlZnQ7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0O1xuXHRcdFx0XHRc
dH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmcm9tID0gKHRvIHx8IDEpIC8gKHBhcnNlRmxvYXQodmFs
dWUpIHx8IDEpICogKHBhcnNlRmxvYXQoZnJvbSkgfHwgMCk7XG5cdFx0XHRcdGVsZW1lbnQuc2V0
U3R5bGUocHJvcGVydHksIGZyb20gKyB1bml0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJu
IHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9O1xuXHR9LFxuXG5c
dC8vcGFyc2VzIGEgdmFsdWUgaW50byBhbiBhcnJheVxuXG5cdHBhcnNlOiBmdW5jdGlvbih2YWx1
ZSl7XG5cdFx0dmFsdWUgPSBGdW5jdGlvbi5jb252ZXJ0KHZhbHVlKSgpO1xuXHRcdHZhbHVlID0g
KHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDogQXJyYXkuY29u
dmVydCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2YWwpe1xuXHRcdFx0
dmFsID0gU3RyaW5nKHZhbCk7XG5cdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdE9iamVj
dC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpe1xuXHRcdFx0XHRpZiAoZm91
bmQpIHJldHVybjtcblx0XHRcdFx0dmFyIHBhcnNlZCA9IHBhcnNlci5wYXJzZSh2YWwpO1xuXHRc
dFx0XHRpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBhcnNlZCwg
cGFyc2VyOiBwYXJzZXJ9O1xuXHRcdFx0fSk7XG5cdFx0XHRmb3VuZCA9IGZvdW5kIHx8IHt2YWx1
ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307XG5cdFx0XHRyZXR1cm4gZm91
bmQ7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly9jb21wdXRlcyBieSBhIGZyb20gYW5kIHRvIHByZXBh
cmVkIG9iamVjdHMsIHVzaW5nIHRoZWlyIHBhcnNlcnMuXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24o
ZnJvbSwgdG8sIGRlbHRhKXtcblx0XHR2YXIgY29tcHV0ZWQgPSBbXTtcblx0XHQoTWF0aC5taW4o
ZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpe1xuXHRcdFx0Y29tcHV0
ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9b
aV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pO1xuXHRcdH0pO1xuXHRc
dGNvbXB1dGVkLiRmYW1pbHkgPSBGdW5jdGlvbi5jb252ZXJ0KCdmeDpjc3M6dmFsdWUnKTtcblx0
XHRyZXR1cm4gY29tcHV0ZWQ7XG5cdH0sXG5cblx0Ly9zZXJ2ZXMgdGhlIHZhbHVlIGFzIHNldHRh
YmxlXG5cblx0c2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRpZiAodHlwZU9mKHZh
bHVlKSAhPSAnZng6Y3NzOnZhbHVlJykgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcblx0XHR2
YXIgcmV0dXJuZWQgPSBbXTtcblx0XHR2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7XG5cdFx0XHRy
ZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5p
dCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXR1cm5lZDtcblx0fSxcblxuXHQvL3JlbmRlcnMg
dGhlIGNoYW5nZSB0byBhbiBlbGVtZW50XG5cblx0cmVuZGVyOiBmdW5jdGlvbihlbGVtZW50LCBw
cm9wZXJ0eSwgdmFsdWUsIHVuaXQpe1xuXHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRo
aXMuc2VydmUodmFsdWUsIHVuaXQpKTtcblx0fSxcblxuXHQvL3NlYXJjaGVzIGluc2lkZSB0aGUg
cGFnZSBjc3MgdG8gZmluZCB0aGUgdmFsdWVzIGZvciBhIHNlbGVjdG9yXG5cblx0c2VhcmNoOiBm
dW5jdGlvbihzZWxlY3Rvcil7XG5cdFx0aWYgKEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0pIHJldHVy
biBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdO1xuXHRcdHZhciB0byA9IHt9LCBzZWxlY3RvclRlc3Qg
PSBuZXcgUmVnRXhwKCdeJyArIHNlbGVjdG9yLmVzY2FwZVJlZ0V4cCgpICsgJyQnKTtcblxuXHRc
dHZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRBcnJheS5lYWNoKHJ1
bGVzLCBmdW5jdGlvbihydWxlKXtcblx0XHRcdFx0aWYgKHJ1bGUubWVkaWEpe1xuXHRcdFx0XHRc
dHNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpO1xuXHRcdFx0XHRcdHJl
dHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGUpIHJldHVybjtcblx0XHRc
dFx0dmFyIHNlbGVjdG9yVGV4dCA9IChydWxlLnNlbGVjdG9yVGV4dCkgPyBydWxlLnNlbGVjdG9y
VGV4dC5yZXBsYWNlKC9eXFx3Ky8sIGZ1bmN0aW9uKG0pe1xuXHRcdFx0XHRcdHJldHVybiBtLnRv
TG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pIDogbnVsbDtcblx0XHRcdFx0aWYgKCFzZWxlY3RvclRl
eHQgfHwgIXNlbGVjdG9yVGVzdC50ZXN0KHNlbGVjdG9yVGV4dCkpIHJldHVybjtcblx0XHRcdFx0
T2JqZWN0LmVhY2goRWxlbWVudC5TdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBzdHlsZSl7XG5cdFx0
XHRcdFx0aWYgKCFydWxlLnN0eWxlW3N0eWxlXSB8fCBFbGVtZW50LlNob3J0U3R5bGVzW3N0eWxl
XSkgcmV0dXJuO1xuXHRcdFx0XHRcdHZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTtc
blx0XHRcdFx0XHR0b1tzdHlsZV0gPSAoKC9ecmdiLykudGVzdCh2YWx1ZSkpID8gdmFsdWUucmdi
VG9IZXgoKSA6IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRB
cnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVldCl7XG5cdFx0XHR2
YXIgaHJlZiA9IHNoZWV0LmhyZWY7XG5cdFx0XHRpZiAoaHJlZiAmJiBocmVmLmluZGV4T2YoJzov
LycpID4gLTEgJiYgaHJlZi5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgPT0gLTEpIHJldHVybjtc
blx0XHRcdHZhciBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuXHRcdFx0
c2VhcmNoU3R5bGVzKHJ1bGVzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gRnguQ1NTLkNhY2hlW3Nl
bGVjdG9yXSA9IHRvO1xuXHR9XG5cbn0pO1xuXG5GeC5DU1MuQ2FjaGUgPSB7fTtcblxuRnguQ1NT
LlBhcnNlcnMgPSB7XG5cblx0Q29sb3I6IHtcblx0XHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xu
XHRcdFx0aWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUu
aGV4VG9SZ2IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXFxk
KyksXFxzKihcXGQrKSxcXHMqKFxcZCspLykpKSA/IFt2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVl
WzNdXSA6IGZhbHNlO1xuXHRcdH0sXG5cdFx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRl
bHRhKXtcblx0XHRcdHJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7XG5cdFx0XHRc
dHJldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0sIGRlbHRhKSk7XG5c
dFx0XHR9KTtcblx0XHR9LFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRyZXR1
cm4gdmFsdWUubWFwKE51bWJlcik7XG5cdFx0fVxuXHR9LFxuXG5cdE51bWJlcjoge1xuXHRcdHBh
cnNlOiBwYXJzZUZsb2F0LFxuXHRcdGNvbXB1dGU6IEZ4LmNvbXB1dGUsXG5cdFx0c2VydmU6IGZ1
bmN0aW9uKHZhbHVlLCB1bml0KXtcblx0XHRcdHJldHVybiAodW5pdCkgPyB2YWx1ZSArIHVuaXQg
OiB2YWx1ZTtcblx0XHR9XG5cdH0sXG5cblx0U3RyaW5nOiB7XG5cdFx0cGFyc2U6IEZ1bmN0aW9u
LmNvbnZlcnQoZmFsc2UpLFxuXHRcdGNvbXB1dGU6IGZ1bmN0aW9uKHplcm8sIG9uZSl7XG5cdFx0
XHRyZXR1cm4gb25lO1xuXHRcdH0sXG5cdFx0c2VydmU6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0
cmV0dXJuIHplcm87XG5cdFx0fVxuXHR9XG5cbn07XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4
Lk1vcnBoXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0byB0cmFu
c2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcg
YW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBG
eC5Nb3JwaFxuXG4uLi5cbiovXG5cbkZ4Lk1vcnBoID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRz
OiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7XG5c
dFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7XG5c
dFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5jdGlvbihub3cpe1xu
XHRcdGlmICh0eXBlb2Ygbm93ID09ICdzdHJpbmcnKSBub3cgPSB0aGlzLnNlYXJjaChub3cpO1xu
XHRcdGZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHAsIG5vd1tw
XSwgdGhpcy5vcHRpb25zLnVuaXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbXB1
dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIG5vdyA9IHt9O1xuXHRcdGZv
ciAodmFyIHAgaW4gZnJvbSkgbm93W3BdID0gdGhpcy5wYXJlbnQoZnJvbVtwXSwgdG9bcF0sIGRl
bHRhKTtcblx0XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0
aWVzKXtcblx0XHRpZiAoIXRoaXMuY2hlY2socHJvcGVydGllcykpIHJldHVybiB0aGlzO1xuXHRc
dGlmICh0eXBlb2YgcHJvcGVydGllcyA9PSAnc3RyaW5nJykgcHJvcGVydGllcyA9IHRoaXMuc2Vh
cmNoKHByb3BlcnRpZXMpO1xuXHRcdHZhciBmcm9tID0ge30sIHRvID0ge307XG5cdFx0Zm9yICh2
YXIgcCBpbiBwcm9wZXJ0aWVzKXtcblx0XHRcdHZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUodGhp
cy5lbGVtZW50LCBwLCBwcm9wZXJ0aWVzW3BdKTtcblx0XHRcdGZyb21bcF0gPSBwYXJzZWQuZnJv
bTtcblx0XHRcdHRvW3BdID0gcGFyc2VkLnRvO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJl
bnQoZnJvbSwgdG8pO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubW9ycGggPSB7
XG5cblx0c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgnbW9ycGgnKS5jYW5j
ZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbW9ycGggPSB0aGlzLnJldHJpZXZlKCdtb3JwaCcpO1xu
XHRcdGlmICghbW9ycGgpe1xuXHRcdFx0bW9ycGggPSBuZXcgRnguTW9ycGgodGhpcywge2xpbms6
ICdjYW5jZWwnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTtcblx0XHR9XG5c
dFx0cmV0dXJuIG1vcnBoO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRt
b3JwaDogZnVuY3Rpb24ocHJvcHMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLnN0YXJ0KHByb3Bz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5U
cmFuc2l0aW9uc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2YgYWR2YW5jZWQgdHJh
bnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nlcy5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWFzaW5nIEVxdWF0aW9ucyBi
eSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2luZy8+LCBt
b2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29scy5cblxucmVxdWly
ZXM6IEZ4XG5cbnByb3ZpZGVzOiBGeC5UcmFuc2l0aW9uc1xuXG4uLi5cbiovXG5cbkZ4LmltcGxl
bWVudCh7XG5cblx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHR2YXIgdHJhbnMgPSB0
aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJbk91dDtc
blx0XHRpZiAodHlwZW9mIHRyYW5zID09ICdzdHJpbmcnKXtcblx0XHRcdHZhciBkYXRhID0gdHJh
bnMuc3BsaXQoJzonKTtcblx0XHRcdHRyYW5zID0gRnguVHJhbnNpdGlvbnM7XG5cdFx0XHR0cmFu
cyA9IHRyYW5zW2RhdGFbMF1dIHx8IHRyYW5zW2RhdGFbMF0uY2FwaXRhbGl6ZSgpXTtcblx0XHRc
dGlmIChkYXRhWzFdKSB0cmFucyA9IHRyYW5zWydlYXNlJyArIGRhdGFbMV0uY2FwaXRhbGl6ZSgp
ICsgKGRhdGFbMl0gPyBkYXRhWzJdLmNhcGl0YWxpemUoKSA6ICcnKV07XG5cdFx0fVxuXHRcdHJl
dHVybiB0cmFucztcblx0fVxuXG59KTtcblxuRnguVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5z
aXRpb24sIHBhcmFtcyl7XG5cdHBhcmFtcyA9IEFycmF5LmNvbnZlcnQocGFyYW1zKTtcblx0dmFy
IGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHRyYW5zaXRpb24ocG9zLCBwYXJh
bXMpO1xuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHtcblx0XHRlYXNlSW46
IGVhc2VJbixcblx0XHRlYXNlT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIDEgLSB0
cmFuc2l0aW9uKDEgLSBwb3MsIHBhcmFtcyk7XG5cdFx0fSxcblx0XHRlYXNlSW5PdXQ6IGZ1bmN0
aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0aW9uKDIgKiBwb3Ms
IHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFyYW1zKSkpIC8gMjtc
blx0XHR9XG5cdH0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMgPSB7XG5cblx0bGluZWFyOiBmdW5j
dGlvbih6ZXJvKXtcblx0XHRyZXR1cm4gemVybztcblx0fVxuXG59O1xuXG5cblxuRnguVHJhbnNp
dGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpe1xuXHRmb3IgKHZhciB0cmFuc2l0
aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5U
cmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTtcbn07XG5cbkZ4LlRyYW5zaXRpb25z
LmV4dGVuZCh7XG5cblx0UG93OiBmdW5jdGlvbihwLCB4KXtcblx0XHRyZXR1cm4gTWF0aC5wb3co
cCwgeCAmJiB4WzBdIHx8IDYpO1xuXHR9LFxuXG5cdEV4cG86IGZ1bmN0aW9uKHApe1xuXHRcdHJl
dHVybiBNYXRoLnBvdygyLCA4ICogKHAgLSAxKSk7XG5cdH0sXG5cblx0Q2lyYzogZnVuY3Rpb24o
cCl7XG5cdFx0cmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpO1xuXHR9LFxuXG5cdFNp
bmU6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MocCAqIE1hdGguUEkgLyAy
KTtcblx0fSxcblxuXHRCYWNrOiBmdW5jdGlvbihwLCB4KXtcblx0XHR4ID0geCAmJiB4WzBdIHx8
IDEuNjE4O1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEpICogcCAtIHgpO1xu
XHR9LFxuXG5cdEJvdW5jZTogZnVuY3Rpb24ocCl7XG5cdFx0dmFyIHZhbHVlO1xuXHRcdGZvciAo
dmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89IDIpe1xuXHRcdFx0aWYgKHAgPj0gKDcg
LSA0ICogYSkgLyAxMSl7XG5cdFx0XHRcdHZhbHVlID0gYiAqIGIgLSBNYXRoLnBvdygoMTEgLSA2
ICogYSAtIDExICogcCkgLyA0LCAyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxu
XHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblxuXHRFbGFzdGljOiBmdW5jdGlvbihwLCB4KXtcblx0
XHRyZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAtLXApICogTWF0aC5jb3MoMjAgKiBwICogTWF0aC5Q
SSAqICh4ICYmIHhbMF0gfHwgMSkgLyAzKTtcblx0fVxuXG59KTtcblxuWydRdWFkJywgJ0N1Ymlj
JywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBpKXtcblx0Rngu
VHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihwKXtc
blx0XHRyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpO1xuXHR9KTtcbn0pO1xuXG4vKlxuLS0tXG5c
bm5hbWU6IEZ4LlR3ZWVuXG5cbmRlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZSwgZWZmZWN0
IHRvIHRyYW5zaXRpb24gYW55IENTUyBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVudC5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IFtG
eC5Ud2VlbiwgRWxlbWVudC5mYWRlLCBFbGVtZW50LmhpZ2hsaWdodF1cblxuLi4uXG4qL1xuXG5G
eC5Ud2VlbiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxp
emU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMu
c3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMp
O1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7XG5cdFx0aWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0XHRub3cgPSBwcm9wZXJ0eTtcblx0XHRcdHByb3BlcnR5
ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7XG5cdFx0fVxuXHRcdHRo
aXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRpb25zLnVuaXQp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0eSwg
ZnJvbSwgdG8pe1xuXHRcdGlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1
cm4gdGhpcztcblx0XHR2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTtcblx0XHR0
aGlzLnByb3BlcnR5ID0gdGhpcy5vcHRpb25zLnByb3BlcnR5IHx8IGFyZ3Muc2hpZnQoKTtcblx0
XHR2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhpcy5wcm9wZXJ0eSwg
YXJncyk7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBwYXJzZWQudG8pO1xu
XHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7XG5cblx0c2V0OiBmdW5j
dGlvbihvcHRpb25zKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwoKS5zZXRPcHRpb25z
KG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtc
blx0XHR2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpO1xuXHRcdGlmICghdHdlZW4p
e1xuXHRcdFx0dHdlZW4gPSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdjYW5jZWwnfSk7XG5c
dFx0XHR0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR3ZWVu
O1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHR0d2VlbjogZnVuY3Rpb24o
cHJvcGVydHksIGZyb20sIHRvKXtcblx0XHR0aGlzLmdldCgndHdlZW4nKS5zdGFydChwcm9wZXJ0
eSwgZnJvbSwgdG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZhZGU6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGZhZGUgPSB0aGlzLmdldCgndHdlZW4nKSwgbWV0aG9kLCBhcmdzID0gWydv
cGFjaXR5J10uYXBwZW5kKGFyZ3VtZW50cyksIHRvZ2dsZTtcblx0XHRpZiAoYXJnc1sxXSA9PSBu
dWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7XG5cdFx0c3dpdGNoIChhcmdzWzFdKXtcblx0XHRcdGNh
c2UgJ2luJzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnb3V0JzogbWV0aG9kID0gJ3N0YXJ0JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAnc2hvdyc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNl
ICdoaWRlJzogbWV0aG9kID0gJ3NldCc7IGFyZ3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2Ug
J3RvZ2dsZSc6XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywg
dGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpO1xuXHRcdFx0XHRtZXRob2QgPSAnc3RhcnQn
O1xuXHRcdFx0XHRhcmdzWzFdID0gZmxhZyA/IDAgOiAxO1xuXHRcdFx0XHR0aGlzLnN0b3JlKCdm
YWRlOmZsYWcnLCAhZmxhZyk7XG5cdFx0XHRcdHRvZ2dsZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFr
O1xuXHRcdFx0ZGVmYXVsdDogbWV0aG9kID0gJ3N0YXJ0Jztcblx0XHR9XG5cdFx0aWYgKCF0b2dn
bGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTtcblx0XHRmYWRlW21ldGhvZF0uYXBwbHko
ZmFkZSwgYXJncyk7XG5cdFx0dmFyIHRvID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuXG5cdFx0
aWYgKG1ldGhvZCA9PSAnc2V0Jyl7XG5cdFx0XHR0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5Jywg
dG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtcblx0XHR9IGVsc2UgaWYgKHRvICE9IDAp
e1xuXHRcdFx0aWYgKGZhZGUuJGNoYWluLmxlbmd0aCl7XG5cdFx0XHRcdGZhZGUuY2hhaW4oZnVu
Y3Rpb24oKXtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAn
dmlzaWJsZScpO1xuXHRcdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0XHRcdH0pO1xuXHRc
dFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxl
Jyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhZGUuY2hhaW4oZnVuY3Rpb24oKXtc
blx0XHRcdFx0aWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpKSByZXR1cm47XG5c
dFx0XHRcdHRoaXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblx0
XHRcdFx0dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGhpZ2hsaWdodDogZnVuY3Rpb24oc3RhcnQsIGVuZCl7XG5cdFx0aWYg
KCFlbmQpe1xuXHRcdFx0ZW5kID0gdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFsJywg
dGhpcy5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpKTtcblx0XHRcdGVuZCA9IChlbmQgPT0g
J3RyYW5zcGFyZW50JykgPyAnI2ZmZicgOiBlbmQ7XG5cdFx0fVxuXHRcdHZhciB0d2VlbiA9IHRo
aXMuZ2V0KCd0d2VlbicpO1xuXHRcdHR3ZWVuLnN0YXJ0KCdiYWNrZ3JvdW5kLWNvbG9yJywgc3Rh
cnQgfHwgJyNmZmZmODgnLCBlbmQpLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnNldFN0
eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy5yZXRyaWV2ZSgnaGlnaGxpZ2h0Om9yaWdpbmFs
JykpO1xuXHRcdFx0dHdlZW4uY2FsbENoYWluKCk7XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0XG5cbmRl
c2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhU
VFBSZXF1ZXN0LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtP
YmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlLCBC
cm93c2VyXVxuXG5wcm92aWRlczogUmVxdWVzdFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xu
XG52YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sXG5cdHByb2dyZXNzU3VwcG9ydCA9ICgnb25wcm9n
cmVzcycgaW4gbmV3IEJyb3dzZXIuUmVxdWVzdCk7XG5cbnZhciBSZXF1ZXN0ID0gdGhpcy5SZXF1
ZXN0ID0gbmV3IENsYXNzKHtcblxuXHRJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9u
cywgQ2xhc3MuVGhlbmFibGVdLFxuXG5cdG9wdGlvbnM6IHsvKlxuXHRcdG9uUmVxdWVzdDogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uTG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCwgeGhyKXt9LFxuXHRc
dG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Db21wbGV0ZTogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sXG5cdFx0b25TdWNjZXNzOiBm
dW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKXt9LFxuXHRcdG9uRmFpbHVyZTogZnVu
Y3Rpb24oeGhyKXt9LFxuXHRcdG9uRXhjZXB0aW9uOiBmdW5jdGlvbihoZWFkZXJOYW1lLCB2YWx1
ZSl7fSxcblx0XHRvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSxcblx0XHR1c2VyOiAnJyxcblx0XHRw
YXNzd29yZDogJycsXG5cdFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqL1xuXHRcdHVybDogJycs
XG5cdFx0ZGF0YTogJycsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0J1gtUmVxdWVzdGVkLVdpdGgn
OiAnWE1MSHR0cFJlcXVlc3QnLFxuXHRcdFx0J0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRl
eHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH0sXG5cdFx0YXN5
bmM6IHRydWUsXG5cdFx0Zm9ybWF0OiBmYWxzZSxcblx0XHRtZXRob2Q6ICdwb3N0Jyxcblx0XHRs
aW5rOiAnaWdub3JlJyxcblx0XHRpc1N1Y2Nlc3M6IG51bGwsXG5cdFx0ZW11bGF0aW9uOiB0cnVl
LFxuXHRcdHVybEVuY29kZWQ6IHRydWUsXG5cdFx0ZW5jb2Rpbmc6ICd1dGYtOCcsXG5cdFx0ZXZh
bFNjcmlwdHM6IGZhbHNlLFxuXHRcdGV2YWxSZXNwb25zZTogZmFsc2UsXG5cdFx0dGltZW91dDog
MCxcblx0XHRub0NhY2hlOiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpO1xuXHRcdHRoaXMu
c2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVh
ZGVycztcblx0fSxcblxuXHRvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpe1xuXHRcdHZhciB4aHIg
PSB0aGlzLnhocjtcblx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCB8fCAhdGhpcy5ydW5uaW5n
KSByZXR1cm47XG5cdFx0dGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0dXMgPSAw
O1xuXHRcdEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBzdGF0dXMgPSB4
aHIuc3RhdHVzO1xuXHRcdFx0dGhpcy5zdGF0dXMgPSAoc3RhdHVzID09IDEyMjMpID8gMjA0IDog
c3RhdHVzO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9u
bG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1l
b3V0KHRoaXMudGltZXIpO1xuXHRcdFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXG5cdFx0
dGhpcy5yZXNwb25zZSA9IHt0ZXh0OiB0aGlzLnhoci5yZXNwb25zZVRleHQgfHwgJycsIHhtbDog
dGhpcy54aHIucmVzcG9uc2VYTUx9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNh
bGwodGhpcywgdGhpcy5zdGF0dXMpKVxuXHRcdFx0dGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2Uu
dGV4dCwgdGhpcy5yZXNwb25zZS54bWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuZmFpbHVyZSgp
O1xuXHR9LFxuXG5cdGlzU3VjY2VzczogZnVuY3Rpb24oKXtcblx0XHR2YXIgc3RhdHVzID0gdGhp
cy5zdGF0dXM7XG5cdFx0cmV0dXJuIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCk7XG5c
dH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAhIXRoaXMucnVubmlu
Zztcblx0fSxcblxuXHRwcm9jZXNzU2NyaXB0czogZnVuY3Rpb24odGV4dCl7XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5ldmFsUmVzcG9uc2UgfHwgKC8oZWNtYXxqYXZhKXNjcmlwdC8pLnRlc3QodGhp
cy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpKSkgcmV0dXJuIEJyb3dzZXIuZXhlYyh0ZXh0KTtc
blx0XHRyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKTtc
blx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0ZXh0LCB4bWwpe1xuXHRcdHRoaXMub25TdWNj
ZXNzKHRoaXMucHJvY2Vzc1NjcmlwdHModGV4dCksIHhtbCk7XG5cdFx0dGhpcy5yZXNvbHZlKHt0
ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pO1xuXHR9LFxuXG5cdG9uU3VjY2VzczogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVFdmVudCgnc3Vj
Y2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7XG5cdH0sXG5cblx0ZmFpbHVyZTogZnVuY3Rp
b24oKXtcblx0XHR0aGlzLm9uRmFpbHVyZSgpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdm
YWlsdXJlJywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdG9uRmFpbHVyZTogZnVuY3Rpb24o
KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnKS5maXJlRXZlbnQoJ2ZhaWx1cmUnLCB0
aGlzLnhocik7XG5cdH0sXG5cblx0bG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCl7XG5cdFx0dGhp
cy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHRw
cm9ncmVzczogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdwcm9ncmVzcycs
IFtldmVudCwgdGhpcy54aHJdKTtcblx0fSxcblxuXHR0aW1lb3V0OiBmdW5jdGlvbigpe1xuXHRc
dHRoaXMuZmlyZUV2ZW50KCd0aW1lb3V0JywgdGhpcy54aHIpO1xuXHRcdHRoaXMucmVqZWN0KHty
ZWFzb246ICd0aW1lb3V0JywgeGhyOiB0aGlzLnhocn0pO1xuXHR9LFxuXG5cdHNldEhlYWRlcjog
ZnVuY3Rpb24obmFtZSwgdmFsdWUpe1xuXHRcdHRoaXMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSl7XG5c
dFx0cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlz
Lnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHR9LFxu
XG5cdGNoZWNrOiBmdW5jdGlvbigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdHJ1
ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2NhbmNlbCc6
IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0aGlzLmNo
YWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxzZTtcblx0
XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHNlbmQ6IGZ1bmN0aW9uKG9wdGlvbnMp
e1xuXHRcdGlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7XG5cblx0XHR0aGlz
Lm9wdGlvbnMuaXNTdWNjZXNzID0gdGhpcy5vcHRpb25zLmlzU3VjY2VzcyB8fCB0aGlzLmlzU3Vj
Y2Vzcztcblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0dmFyIHR5cGUgPSB0eXBlT2Yo
b3B0aW9ucyk7XG5cdFx0aWYgKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnZWxlbWVudCcp
IG9wdGlvbnMgPSB7ZGF0YTogb3B0aW9uc307XG5cblx0XHR2YXIgb2xkID0gdGhpcy5vcHRpb25z
O1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQu
dXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTtcblx0XHR2YXIgZGF0YSA9IG9wdGlv
bnMuZGF0YSwgdXJsID0gU3RyaW5nKG9wdGlvbnMudXJsKSwgbWV0aG9kID0gb3B0aW9ucy5tZXRo
b2QudG9Mb3dlckNhc2UoKTtcblxuXHRcdHN3aXRjaCAodHlwZU9mKGRhdGEpKXtcblx0XHRcdGNh
c2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVyeVN0cmluZygpOyBi
cmVhaztcblx0XHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRhID0gT2JqZWN0LnRv
UXVlcnlTdHJpbmcoZGF0YSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mb3JtYXQp
e1xuXHRcdFx0dmFyIGZvcm1hdCA9ICdmb3JtYXQ9JyArIHRoaXMub3B0aW9ucy5mb3JtYXQ7XG5c
dFx0XHRkYXRhID0gKGRhdGEpID8gZm9ybWF0ICsgJyYnICsgZGF0YSA6IGZvcm1hdDtcblx0XHR9
XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAncG9zdCddLmNv
bnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9k
O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21ldGhvZDtc
blx0XHRcdG1ldGhvZCA9ICdwb3N0Jztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLnVy
bEVuY29kZWQgJiYgWydwb3N0JywgJ3B1dCddLmNvbnRhaW5zKG1ldGhvZCkpe1xuXHRcdFx0dmFy
IGVuY29kaW5nID0gKHRoaXMub3B0aW9ucy5lbmNvZGluZykgPyAnOyBjaGFyc2V0PScgKyB0aGlz
Lm9wdGlvbnMuZW5jb2RpbmcgOiAnJztcblx0XHRcdHRoaXMuaGVhZGVyc1snQ29udGVudC10eXBl
J10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyArIGVuY29kaW5nO1xuXHRc
dH1cblxuXHRcdGlmICghdXJsKSB1cmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTtcblxu
XHRcdHZhciB0cmltUG9zaXRpb24gPSB1cmwubGFzdEluZGV4T2YoJy8nKTtcblx0XHRpZiAodHJp
bVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9mKCcjJykpID4gLTEp
IHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9uKTtcblxuXHRcdGlmICh0aGlzLm9wdGlv
bnMubm9DYWNoZSlcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDog
Jz8nKSArIFN0cmluZy51bmlxdWVJRCgpO1xuXG5cdFx0aWYgKGRhdGEgJiYgKG1ldGhvZCA9PSAn
Z2V0JyB8fCBtZXRob2QgPT0gJ2RlbGV0ZScpKXtcblx0XHRcdHVybCArPSAodXJsLmluZGV4T2Yo
Jz8nKSA+IC0xID8gJyYnIDogJz8nKSArIGRhdGE7XG5cdFx0XHRkYXRhID0gbnVsbDtcblx0XHR9
XG5cblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCl7XG5c
dFx0XHR4aHIub25sb2Fkc3RhcnQgPSB0aGlzLmxvYWRzdGFydC5iaW5kKHRoaXMpO1xuXHRcdFx0
eGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7XG5cdFx0fVxuXG5cdFx0
eGhyLm9wZW4obWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCwgdGhpcy5vcHRpb25zLmFzeW5jLCB0
aGlzLm9wdGlvbnMudXNlciwgdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtcblx0XHRpZiAoKHRoaXMu
b3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpICYmICd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikgeGhy
LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG5cblx0XHRPYmplY3QuZWFjaCh0aGlzLmhl
YWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0eGhyLnNl
dFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0
dGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7XG5cdFx0XHRcdHRoaXMu
cmVqZWN0KHtyZWFzb246ICdleGNlcHRpb24nLCB4aHI6IHhociwgZXhjZXB0aW9uOiBlfSk7XG5c
dFx0XHR9XG5cdFx0fSwgdGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkg
IT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUoe3JlYXNvbjogJ3NlbmQn
fSk7XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7XG5cdFx0eGhyLnNlbmQo
ZGF0YSk7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXN5bmMpIHRoaXMub25TdGF0ZUNoYW5nZSgp
O1xuXHRcdGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aW1lb3V0KSB0aGlzLnRpbWVyID0gdGhpcy50
aW1lb3V0LmRlbGF5KHRoaXMub3B0aW9ucy50aW1lb3V0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcp
IHJldHVybiB0aGlzO1xuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXHRcdHZhciB4aHIgPSB0
aGlzLnhocjtcblx0XHR4aHIuYWJvcnQoKTtcblx0XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRj
bGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9
XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5O1xuXHRcdGlmIChwcm9ncmVzc1N1
cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7XG5cdFx0dGhp
cy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNl
bCcpO1xuXHRcdHRoaXMucmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6IHhocn0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuWydnZXQnLCAn
cG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VUJywgJ1BPU1QnLCAn
UFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlvbihtZXRob2Qpe1xu
XHRtZXRob2RzW21ldGhvZF0gPSBmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIgb2JqZWN0ID0ge1xu
XHRcdFx0bWV0aG9kOiBtZXRob2Rcblx0XHR9O1xuXHRcdGlmIChkYXRhICE9IG51bGwpIG9iamVj
dC5kYXRhID0gZGF0YTtcblx0XHRyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7XG5cdH07XG59KTtc
blxuUmVxdWVzdC5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5zZW5k
ID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIHNlbmQgPSB0aGlzLmdl
dCgnc2VuZCcpLmNhbmNlbCgpO1xuXHRcdHNlbmQuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNlbmQgPSB0
aGlzLnJldHJpZXZlKCdzZW5kJyk7XG5cdFx0aWYgKCFzZW5kKXtcblx0XHRcdHNlbmQgPSBuZXcg
UmVxdWVzdCh7XG5cdFx0XHRcdGRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCBtZXRob2Q6IHRo
aXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2FjdGlvbicpXG5cdFx0
XHR9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTtcblx0XHR9XG5cdFx0cmV0dXJu
IHNlbmQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNlbmQ6IGZ1bmN0
aW9uKHVybCl7XG5cdFx0dmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7XG5cdFx0c2VuZGVy
LnNlbmQoe2RhdGE6IHRoaXMsIHVybDogdXJsIHx8IHNlbmRlci5vcHRpb25zLnVybH0pO1xuXHRc
dHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJl
cXVlc3QuSFRNTFxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBDbGFz
cyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIVE1MIHJlc3Bv
bnNlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbRWxlbWVu
dCwgUmVxdWVzdF1cblxucHJvdmlkZXM6IFJlcXVlc3QuSFRNTFxuXG4uLi5cbiovXG5cblJlcXVl
c3QuSFRNTCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25z
OiB7XG5cdFx0dXBkYXRlOiBmYWxzZSxcblx0XHRhcHBlbmQ6IGZhbHNlLFxuXHRcdGV2YWxTY3Jp
cHRzOiB0cnVlLFxuXHRcdGZpbHRlcjogZmFsc2UsXG5cdFx0aGVhZGVyczoge1xuXHRcdFx0QWNj
ZXB0OiAndGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fVxu
XHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZhciBvcHRpb25zID0gdGhp
cy5vcHRpb25zLCByZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRyZXNwb25zZS5odG1s
ID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2NyaXB0KXtcblx0XHRcdHJlc3BvbnNlLmph
dmFzY3JpcHQgPSBzY3JpcHQ7XG5cdFx0fSk7XG5cblx0XHR2YXIgbWF0Y2ggPSByZXNwb25zZS5o
dG1sLm1hdGNoKC88Ym9keVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9pKTtcblx0XHRpZiAo
bWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTtcblx0XHR2YXIgdGVtcCA9IG5ldyBFbGVt
ZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblxuXHRcdHJlc3BvbnNlLnRy
ZWUgPSB0ZW1wLmNoaWxkTm9kZXM7XG5cdFx0cmVzcG9uc2UuZWxlbWVudHMgPSB0ZW1wLmdldEVs
ZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7XG5cblx0XHRpZiAob3B0aW9ucy5maWx0ZXIp
IHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50cztcblx0XHRpZiAob3B0aW9ucy51cGRh
dGUpe1xuXHRcdFx0dmFyIHVwZGF0ZSA9IGRvY3VtZW50LmlkKG9wdGlvbnMudXBkYXRlKS5lbXB0
eSgpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB1cGRhdGUuYWRvcHQocmVzcG9uc2UuZWxl
bWVudHMpO1xuXHRcdFx0ZWxzZSB1cGRhdGUuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7XG5c
dFx0fSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7XG5cdFx0XHR2YXIgYXBwZW5kID0gZG9jdW1l
bnQuaWQob3B0aW9ucy5hcHBlbmQpO1xuXHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25z
ZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVuZCk7XG5cdFx0XHRlbHNlIGFwcGVuZC5h
ZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpO1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5ldmFsU2Ny
aXB0cykgQnJvd3Nlci5leGVjKHJlc3BvbnNlLmphdmFzY3JpcHQpO1xuXG5cdFx0dGhpcy5vblN1
Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0bWwsIHJl
c3BvbnNlLmphdmFzY3JpcHQpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dHJlZTogcmVzcG9uc2UudHJl
ZSwgZWxlbWVudHM6IHJlc3BvbnNlLmVsZW1lbnRzLCBodG1sOiByZXNwb25zZS5odG1sLCBqYXZh
c2NyaXB0OiByZXNwb25zZS5qYXZhc2NyaXB0fSk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuUHJv
cGVydGllcy5sb2FkID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dmFyIGxv
YWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpO1xuXHRcdGxvYWQuc2V0T3B0aW9ucyhvcHRp
b25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0
dmFyIGxvYWQgPSB0aGlzLnJldHJpZXZlKCdsb2FkJyk7XG5cdFx0aWYgKCFsb2FkKXtcblx0XHRc
dGxvYWQgPSBuZXcgUmVxdWVzdC5IVE1MKHtkYXRhOiB0aGlzLCBsaW5rOiAnY2FuY2VsJywgdXBk
YXRlOiB0aGlzLCBtZXRob2Q6ICdnZXQnfSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdsb2FkJywgbG9h
ZCk7XG5cdFx0fVxuXHRcdHJldHVybiBsb2FkO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQuaW1wbGVt
ZW50KHtcblxuXHRsb2FkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZ2V0KCdsb2FkJykuc2VuZChB
cnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDogVHlwZS5pc1N0
cmluZ30pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1l
OiBKU09OXG5cbmRlc2NyaXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5TZWVBbHNvOiA8aHR0cDovL3d3dy5qc29uLm9yZy8+
XG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl1cblxucHJvdmlk
ZXM6IEpTT05cblxuLi4uXG4qL1xuXG5pZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRo
aXMuSlNPTiA9IHt9O1xuXG5cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBzcGVjaWFsID0geydcXGIn
OiAnXFxcXGInLCAnXFx0JzogJ1xcXFx0JywgJ1xcbic6ICdcXFxcbicsICdcXGYnOiAnXFxcXGYn
LCAnXFxyJzogJ1xcXFxyJywgJ1wiJyA6ICdcXFxcXCInLCAnXFxcXCc6ICdcXFxcXFxcXCd9O1xu
XG52YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXtcblx0cmV0dXJuIHNwZWNpYWxbY2hyXSB8fCAn
XFxcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2Uo
LTQpO1xufTtcblxuSlNPTi52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7XG5cdHN0cmluZyA9
IHN0cmluZy5yZXBsYWNlKC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0p
L2csICdAJykuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXCJbXlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxm
YWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/L2csICddJyku
XG5cdFx0XHRcdFx0cmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csICcnKTtcblxuXHRy
ZXR1cm4gKC9eW1xcXSw6e31cXHNdKiQvKS50ZXN0KHN0cmluZyk7XG59O1xuXG5KU09OLmVuY29k
ZSA9IEpTT04uc3RyaW5naWZ5ID8gZnVuY3Rpb24ob2JqKXtcblx0cmV0dXJuIEpTT04uc3RyaW5n
aWZ5KG9iaik7XG59IDogZnVuY3Rpb24ob2JqKXtcblx0aWYgKG9iaiAmJiBvYmoudG9KU09OKSBv
YmogPSBvYmoudG9KU09OKCk7XG5cblx0c3dpdGNoICh0eXBlT2Yob2JqKSl7XG5cdFx0Y2FzZSAn
c3RyaW5nJzpcblx0XHRcdHJldHVybiAnXCInICsgb2JqLnJlcGxhY2UoL1tcXHgwMC1cXHgxZlxc
XFxcIl0vZywgZXNjYXBlKSArICdcIic7XG5cdFx0Y2FzZSAnYXJyYXknOlxuXHRcdFx0cmV0dXJu
ICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7XG5cdFx0Y2FzZSAnb2Jq
ZWN0JzogY2FzZSAnaGFzaCc6XG5cdFx0XHR2YXIgc3RyaW5nID0gW107XG5cdFx0XHRPYmplY3Qu
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0XHR2YXIganNvbiA9IEpTT04u
ZW5jb2RlKHZhbHVlKTtcblx0XHRcdFx0aWYgKGpzb24pIHN0cmluZy5wdXNoKEpTT04uZW5jb2Rl
KGtleSkgKyAnOicgKyBqc29uKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICd7JyArIHN0cmlu
ZyArICd9Jztcblx0XHRjYXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzogcmV0dXJuICcnICsg
b2JqO1xuXHRcdGNhc2UgJ251bGwnOiByZXR1cm4gJ251bGwnO1xuXHR9XG5cblx0cmV0dXJuIG51
bGw7XG59O1xuXG5KU09OLnNlY3VyZSA9IHRydWU7XG5cblxuSlNPTi5kZWNvZGUgPSBmdW5jdGlv
bihzdHJpbmcsIHNlY3VyZSl7XG5cdGlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJpbmcpICE9ICdz
dHJpbmcnKSByZXR1cm4gbnVsbDtcblxuXHRpZiAoc2VjdXJlID09IG51bGwpIHNlY3VyZSA9IEpT
T04uc2VjdXJlO1xuXHRpZiAoc2VjdXJlKXtcblx0XHRpZiAoSlNPTi5wYXJzZSkgcmV0dXJuIEpT
T04ucGFyc2Uoc3RyaW5nKTtcblx0XHRpZiAoIUpTT04udmFsaWRhdGUoc3RyaW5nKSkgdGhyb3cg
bmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0eSBpcyBl
bmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4nKTtcblx0fVxuXG5cdHJldHVybiBl
dmFsKCcoJyArIHN0cmluZyArICcpJyk7XG59O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6
IFJlcXVlc3QuSlNPTlxuXG5kZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgYmFzaWMgUmVxdWVzdCBD
bGFzcyB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIEpT
T04gZGF0YS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbUmVx
dWVzdCwgSlNPTl1cblxucHJvdmlkZXM6IFJlcXVlc3QuSlNPTlxuXG4uLi5cbiovXG5cblJlcXVl
c3QuSlNPTiA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogUmVxdWVzdCxcblxuXHRvcHRpb25z
OiB7XG5cdFx0LypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqL1xuXHRcdHNlY3Vy
ZTogdHJ1ZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRo
aXMucGFyZW50KG9wdGlvbnMpO1xuXHRcdE9iamVjdC5hcHBlbmQodGhpcy5oZWFkZXJzLCB7XG5c
dFx0XHQnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0J1gtUmVxdWVzdCc6ICdK
U09OJ1xuXHRcdH0pO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHZh
ciBqc29uO1xuXHRcdHRyeSB7XG5cdFx0XHRqc29uID0gdGhpcy5yZXNwb25zZS5qc29uID0gSlNP
Ti5kZWNvZGUodGV4dCwgdGhpcy5vcHRpb25zLnNlY3VyZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3Ip
e1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7XG5cdFx0XHRy
ZXR1cm47XG5cdFx0fVxuXHRcdGlmIChqc29uID09IG51bGwpe1xuXHRcdFx0dGhpcy5mYWlsdXJl
KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub25TdWNjZXNzKGpzb24sIHRleHQpO1xuXHRc
dFx0dGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7XG5cdFx0fVxuXHR9XG5c
bn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENvb2tpZVxuXG5kZXNjcmlwdGlvbjogQ2xhc3MgZm9y
IGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29raWVzLlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBCYXNlZCBvbiB0aGUgZnVu
Y3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3JnKS5cblxucmVx
dWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXVxuXG5wcm92aWRlczogQ29va2llXG5cbi4uLlxuKi9c
blxudmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVtZW50czogT3B0aW9ucyxcblxu
XHRvcHRpb25zOiB7XG5cdFx0cGF0aDogJy8nLFxuXHRcdGRvbWFpbjogZmFsc2UsXG5cdFx0ZHVy
YXRpb246IGZhbHNlLFxuXHRcdHNlY3VyZTogZmFsc2UsXG5cdFx0ZG9jdW1lbnQ6IGRvY3VtZW50
LFxuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRodHRwT25seTogZmFsc2Vcblx0fSxcblxuXHRpbml0
aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpe1xuXHRcdHRoaXMua2V5ID0ga2V5O1xuXHRc
dHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHR3cml0ZTogZnVuY3Rpb24odmFs
dWUpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZW5jb2RlKSB2YWx1ZSA9IGVuY29kZVVSSUNvbXBv
bmVudCh2YWx1ZSk7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kb21haW4pIHZhbHVlICs9ICc7IGRv
bWFpbj0nICsgdGhpcy5vcHRpb25zLmRvbWFpbjtcblx0XHRpZiAodGhpcy5vcHRpb25zLnBhdGgp
IHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoO1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZHVyYXRpb24pe1xuXHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0ZGF0
ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogMjQgKiA2
MCAqIDYwICogMTAwMCk7XG5cdFx0XHR2YWx1ZSArPSAnOyBleHBpcmVzPScgKyBkYXRlLnRvR01U
U3RyaW5nKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAn
OyBzZWN1cmUnO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuaHR0cE9ubHkpIHZhbHVlICs9ICc7IEh0
dHBPbmx5Jztcblx0XHR0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0gdGhpcy5rZXkgKyAn
PScgKyB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFkOiBmdW5jdGlvbigp
e1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUubWF0Y2goJyg/
Ol58OylcXFxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtdKiknKTtcblx0
XHRyZXR1cm4gKHZhbHVlKSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVsxXSkgOiBudWxsO1xu
XHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0bmV3IENvb2tpZSh0aGlzLmtleSwg
T2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9KSkud3JpdGUoJycp
O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5Db29raWUud3JpdGUgPSBmdW5jdGlv
bihrZXksIHZhbHVlLCBvcHRpb25zKXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25z
KS53cml0ZSh2YWx1ZSk7XG59O1xuXG5Db29raWUucmVhZCA9IGZ1bmN0aW9uKGtleSl7XG5cdHJl
dHVybiBuZXcgQ29va2llKGtleSkucmVhZCgpO1xufTtcblxuQ29va2llLmRpc3Bvc2UgPSBmdW5j
dGlvbihrZXksIG9wdGlvbnMpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLmRp
c3Bvc2UoKTtcbn07XG5cbi8qXG4tLS1cblxubmFtZTogRE9NUmVhZHlcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRd
XG5cbnByb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XVxuXG4uLi5cbiovXG5cbihmdW5jdGlv
bih3aW5kb3csIGRvY3VtZW50KXtcblxudmFyIHJlYWR5LFxuXHRsb2FkZWQsXG5cdGNoZWNrcyA9
IFtdLFxuXHRzaG91bGRQb2xsLFxuXHR0aW1lcixcblx0dGVzdEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIGRvbXJlYWR5ID0gZnVuY3Rpb24oKXtcblx0Y2xl
YXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFyZWFkeSl7XG5cdFx0QnJvd3Nlci5sb2FkZWQgPSBy
ZWFkeSA9IHRydWU7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2Fk
ZWQnLCBkb21yZWFkeSkucmVtb3ZlTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7
XG5cdFx0ZG9jdW1lbnQuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHRcdHdpbmRvdy5maXJlRXZl
bnQoJ2RvbXJlYWR5Jyk7XG5cdH1cblx0Ly8gY2xlYW51cCBzY29wZSB2YXJzXG5cdGRvY3VtZW50
ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsO1xufTtcblxudmFyIGNoZWNrID0gZnVuY3Rp
b24oKXtcblx0Zm9yICh2YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlmIChjaGVja3NbaV0o
KSl7XG5cdFx0ZG9tcmVhZHkoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFs
c2U7XG59O1xuXG52YXIgcG9sbCA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7
XG5cdGlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEwKTtcbn07XG5cbmRv
Y3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpO1xuXG4vKjxs
dElFOD4qL1xuLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmluaSBodHRwOi8vamF2
YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkL1xuLy8gdGVzdEVsZW1lbnQuZG9TY3Jv
bGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBpbiB0aGUgdG9wIHdp
bmRvd1xudmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlvbigpe1xuXHR0cnkge1xuXHRcdHRlc3RF
bGVtZW50LmRvU2Nyb2xsKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpe31cblx0
cmV0dXJuIGZhbHNlO1xufTtcbi8vIElmIGRvU2Nyb2xsIHdvcmtzIGFscmVhZHksIGl0IGNhbid0
IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGRvbXJlYWR5XG4vLyAgIGUuZy4gaW4gYW4gaWZyYW1lXG5p
ZiAodGVzdEVsZW1lbnQuZG9TY3JvbGwgJiYgIWRvU2Nyb2xsV29ya3MoKSl7XG5cdGNoZWNrcy5w
dXNoKGRvU2Nyb2xsV29ya3MpO1xuXHRzaG91bGRQb2xsID0gdHJ1ZTtcbn1cbi8qPC9sdElFOD4q
L1xuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24oKXtcblx0
dmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcblx0cmV0dXJuIChzdGF0ZSA9PSAnbG9h
ZGVkJyB8fCBzdGF0ZSA9PSAnY29tcGxldGUnKTtcbn0pO1xuXG5pZiAoJ29ucmVhZHlzdGF0ZWNo
YW5nZScgaW4gZG9jdW1lbnQpIGRvY3VtZW50LmFkZExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdl
JywgY2hlY2spO1xuZWxzZSBzaG91bGRQb2xsID0gdHJ1ZTtcblxuaWYgKHNob3VsZFBvbGwpIHBv
bGwoKTtcblxuRWxlbWVudC5FdmVudHMuZG9tcmVhZHkgPSB7XG5cdG9uQWRkOiBmdW5jdGlvbihm
bil7XG5cdFx0aWYgKHJlYWR5KSBmbi5jYWxsKHRoaXMpO1xuXHR9XG59O1xuXG4vLyBNYWtlIHN1
cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZFxuRWxlbWVudC5FdmVudHMubG9hZCA9
IHtcblx0YmFzZTogJ2xvYWQnLFxuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChsb2Fk
ZWQgJiYgdGhpcyA9PSB3aW5kb3cpIGZuLmNhbGwodGhpcyk7XG5cdH0sXG5cdGNvbmRpdGlvbjog
ZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcyA9PSB3aW5kb3cpe1xuXHRcdFx0ZG9tcmVhZHkoKTtc
blx0XHRcdGRlbGV0ZSBFbGVtZW50LkV2ZW50cy5sb2FkO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1
ZTtcblx0fVxufTtcblxuLy8gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY3VzdG9tIGxvYWQgZXZlbnRc
bndpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9uKCl7XG5cdGxvYWRlZCA9IHRydWU7XG59
KTtcblxufSkod2luZG93LCBkb2N1bWVudCk7XG4iCiAKIC8qKiovIH0pLAogLyogNDA2ICovCkBA
IC0xMTM2NDEsMTMgKzExMzY0MSwxMyBAQCBtb2R1bGUuZXhwb3J0cyA9ICIvKmpzaGludCBxdW90
bWFyazogZmFsCiAvKiA0MTQgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsK
IAotbW9kdWxlLmV4cG9ydHMgPSAiLy8gbGlicy9qcXVlcnkvanF1ZXJ5LmQudHNcbi8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9WSURFRCAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElN
UExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNo
ZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqICovXG5cbi8vIFR5cGluZyBmb3IgdGhlIGpRdWVyeSBsaWJyYXJ5LCB2ZXJzaW9u
IDEuMTAueCAvIDIuMC54XG4vLyBQcm9qZWN0OiBodHRwOi8vanF1ZXJ5LmNvbS9cbi8vIERlZmlu
aXRpb25zIGJ5OiBCb3JpcyBZYW5rb3YgPGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi8+
LCBDaHJpc3RpYW4gSG9mZm1laXN0ZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9mZm1laXN0ZXI+
LCBTdGV2ZSBGZW50b24sIERpdWxsZWkgR29tZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9EaXVsbGVp
PiwgVGFzcyBJbGlvcG91bG9zIDxodHRwczovL2dpdGh1Yi5jb20vdGFzb2lsaT4sIEphc29uIFN3
ZWFyaW5nZW4sIFNlYW4gSGlsbCA8aHR0cHM6Ly9naXRodWIuY29tL3NlYW5za2k+LCBHdXVzIEdv
b3NzZW5zIDxodHRwczovL2dpdGh1Yi5jb20vR3V1ej4sIEtlbGx5IFN1bW1lcmxpbiA8aHR0cHM6
Ly9naXRodWIuY29tL2tzdW1tZXJsaW4+LCBCYXNhcmF0IEFsaSBTeWVkIDxodHRwczovL2dpdGh1
Yi5jb20vYmFzYXJhdD4sIE5pY2hvbGFzIFdvbHZlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL253
b2x2ZXJzb24+LCBEZXJlayBDaWNlcm9uZSA8aHR0cHM6Ly9naXRodWIuY29tL2RlcmVrY2ljZXJv
bmU+LCBBbmRyZXcgR2FzcGFyIDxodHRwczovL2dpdGh1Yi5jb20vQW5kcmV3R2FzcGFyPiwgSmFt
ZXMgSGFycmlzb24gRmlzaGVyIDxodHRwczovL2dpdGh1Yi5jb20vamFtZXNoZmlzaGVyPiwgU2Vp
a2ljaGkgS29uZG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWlraWNoaT4sIEJlbmphbWluIEphY2tt
YW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmphY2ttYW4+LCBQb3VsIFNvcmVuc2VuIDxo
dHRwczovL2dpdGh1Yi5jb20vczA5MzI5ND4sIEpvc2ggU3Ryb2JsIDxodHRwczovL2dpdGh1Yi5j
b20vSm9zaFN0cm9ibD4sIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVp
bGx5Lz5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvRGVm
aW5pdGVseVR5cGVkXG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgQUpBWCBzZXR0aW5nIHRo
YXQgd2lsbCBjb25maWd1cmUgdGhlIEFKQVggcmVxdWVzdFxuKi9cbmludGVyZmFjZSBKUXVlcnlB
amF4U2V0dGluZ3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc2VudCBpbiB0
aGUgcmVxdWVzdCBoZWFkZXIgdGhhdCB0ZWxscyB0aGUgc2VydmVyIHdoYXQga2luZCBvZiByZXNw
b25zZSBpdCB3aWxsIGFjY2VwdCBpbiByZXR1cm4uIElmIHRoZSBhY2NlcHRzIHNldHRpbmcgbmVl
ZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNlIGluIHRoZSAk
LmFqYXhTZXR1cCgpIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhY2NlcHRzPzogYW55O1xuICAgIC8q
KlxuICAgICAqIEJ5IGRlZmF1bHQsIGFsbCByZXF1ZXN0cyBhcmUgc2VudCBhc3luY2hyb25vdXNs
eSAoaS5lLiB0aGlzIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQpLiBJZiB5b3UgbmVlZCBzeW5j
aHJvbm91cyByZXF1ZXN0cywgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLiBDcm9zcy1kb21haW4g
cmVxdWVzdHMgYW5kIGRhdGFUeXBlOiBcImpzb25wXCIgcmVxdWVzdHMgZG8gbm90IHN1cHBvcnQg
c3luY2hyb25vdXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgc3luY2hyb25vdXMgcmVxdWVzdHMgbWF5
IHRlbXBvcmFyaWx5IGxvY2sgdGhlIGJyb3dzZXIsIGRpc2FibGluZyBhbnkgYWN0aW9ucyB3aGls
ZSB0aGUgcmVxdWVzdCBpcyBhY3RpdmUuIEFzIG9mIGpRdWVyeSAxLjgsIHRoZSB1c2Ugb2YgYXN5
bmM6IGZhbHNlIHdpdGgganFYSFIgKCQuRGVmZXJyZWQpIGlzIGRlcHJlY2F0ZWQ7IHlvdSBtdXN0
IHVzZSB0aGUgc3VjY2Vzcy9lcnJvci9jb21wbGV0ZSBjYWxsYmFjayBvcHRpb25zIGluc3RlYWQg
b2YgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZiB0aGUganFYSFIgb2JqZWN0IHN1Y2ggYXMg
anFYSFIuZG9uZSgpIG9yIHRoZSBkZXByZWNhdGVkIGpxWEhSLnN1Y2Nlc3MoKS5cbiAgICAgKi9c
biAgICBhc3luYz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQSBwcmUtcmVxdWVzdCBjYWxs
YmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUganFYSFIgKGluIGpR
dWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBiZWZvcmUgaXQgaXMgc2VudC4gVXNl
IHRoaXMgdG8gc2V0IGN1c3RvbSBoZWFkZXJzLCBldGMuIFRoZSBqcVhIUiBhbmQgc2V0dGluZ3Mg
b2JqZWN0cyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LiBS
ZXR1cm5pbmcgZmFsc2UgaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24gd2lsbCBjYW5jZWwgdGhl
IHJlcXVlc3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBiZWZvcmVTZW5kIG9wdGlvbiB3aWxsIGJl
IGNhbGxlZCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHJlcXVlc3QuXG4gICAgICovXG4gICAg
YmVmb3JlU2VuZD8gKGpxWEhSOiBKUXVlcnlYSFIsIHNldHRpbmdzOiBKUXVlcnlBamF4U2V0dGlu
Z3MpOiBhbnk7XG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCBpdCB3aWxsIGZvcmNl
IHJlcXVlc3RlZCBwYWdlcyBub3QgdG8gYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyLiBOb3RlOiBT
ZXR0aW5nIGNhY2hlIHRvIGZhbHNlIHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEhFQUQg
YW5kIEdFVCByZXF1ZXN0cy4gSXQgd29ya3MgYnkgYXBwZW5kaW5nIFwiXz17dGltZXN0YW1wfVwi
IHRvIHRoZSBHRVQgcGFyYW1ldGVycy4gVGhlIHBhcmFtZXRlciBpcyBub3QgbmVlZGVkIGZvciBv
dGhlciB0eXBlcyBvZiByZXF1ZXN0cywgZXhjZXB0IGluIElFOCB3aGVuIGEgUE9TVCBpcyBtYWRl
IHRvIGEgVVJMIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgYnkgYSBHRVQuXG4gICAg
ICovXG4gICAgY2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMgKGFmdGVyIHN1Y2Nlc3MgYW5kIGVy
cm9yIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQpLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdHdv
IGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEhUVFBSZXF1ZXN0KSBv
YmplY3QgYW5kIGEgc3RyaW5nIGNhdGVnb3JpemluZyB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0
IChcInN1Y2Nlc3NcIiwgXCJub3Rtb2RpZmllZFwiLCBcImVycm9yXCIsIFwidGltZW91dFwiLCBc
ImFib3J0XCIsIG9yIFwicGFyc2VyZXJyb3JcIikuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBjb21w
bGV0ZSBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0
aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAg
Ki9cbiAgICBjb21wbGV0ZT8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZyk6
IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Ygc3RyaW5nL3JlZ3VsYXItZXhwcmVz
c2lvbiBwYWlycyB0aGF0IGRldGVybWluZSBob3cgalF1ZXJ5IHdpbGwgcGFyc2UgdGhlIHJlc3Bv
bnNlLCBnaXZlbiBpdHMgY29udGVudCB0eXBlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAq
L1xuICAgIGNvbnRlbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLy9BY2NvcmRp
bmcgdG8galF1ZXJ5LmFqYXggc291cmNlIGNvZGUsIGFqYXgncyBvcHRpb24gYWN0dWFsbHkgYWxs
b3dzIGNvbnRlbnRUeXBlIHRvIHNldCB0byBcImZhbHNlXCJcbiAgICAvLyBodHRwczovL2dpdGh1
Yi5jb20vYm9yaXN5YW5rb3YvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy83NDJcbiAgICAvKipcbiAg
ICAgKiBXaGVuIHNlbmRpbmcgZGF0YSB0byB0aGUgc2VydmVyLCB1c2UgdGhpcyBjb250ZW50IHR5
cGUuIERlZmF1bHQgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJz
ZXQ9VVRGLThcIiwgd2hpY2ggaXMgZmluZSBmb3IgbW9zdCBjYXNlcy4gSWYgeW91IGV4cGxpY2l0
bHkgcGFzcyBpbiBhIGNvbnRlbnQtdHlwZSB0byAkLmFqYXgoKSwgdGhlbiBpdCBpcyBhbHdheXMg
c2VudCB0byB0aGUgc2VydmVyIChldmVuIGlmIG5vIGRhdGEgaXMgc2VudCkuIFRoZSBXM0MgWE1M
SHR0cFJlcXVlc3Qgc3BlY2lmaWNhdGlvbiBkaWN0YXRlcyB0aGF0IHRoZSBjaGFyc2V0IGlzIGFs
d2F5cyBVVEYtODsgc3BlY2lmeWluZyBhbm90aGVyIGNoYXJzZXQgd2lsbCBub3QgZm9yY2UgdGhl
IGJyb3dzZXIgdG8gY2hhbmdlIHRoZSBlbmNvZGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50VHlw
ZT86IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIG1hZGUgdGhlIGNv
bnRleHQgb2YgYWxsIEFqYXgtcmVsYXRlZCBjYWxsYmFja3MuIEJ5IGRlZmF1bHQsIHRoZSBjb250
ZXh0IGlzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGFqYXggc2V0dGluZ3MgdXNlZCBp
biB0aGUgY2FsbCAoJC5hamF4U2V0dGluZ3MgbWVyZ2VkIHdpdGggdGhlIHNldHRpbmdzIHBhc3Nl
ZCB0byAkLmFqYXgpLlxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBhbnk7XG4gICAgLyoqXG4gICAg
ICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YVR5cGUtdG8tZGF0YVR5cGUgY29udmVydGVycy4g
RWFjaCBjb252ZXJ0ZXIncyB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHJh
bnNmb3JtZWQgdmFsdWUgb2YgdGhlIHJlc3BvbnNlLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAg
ICAqL1xuICAgIGNvbnZlcnRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipc
biAgICAgKiBJZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNyb3NzRG9tYWluIHJlcXVlc3QgKHN1Y2gg
YXMgSlNPTlApIG9uIHRoZSBzYW1lIGRvbWFpbiwgc2V0IHRoZSB2YWx1ZSBvZiBjcm9zc0RvbWFp
biB0byB0cnVlLiBUaGlzIGFsbG93cywgZm9yIGV4YW1wbGUsIHNlcnZlci1zaWRlIHJlZGlyZWN0
aW9uIHRvIGFub3RoZXIgZG9tYWluLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAg
IGNyb3NzRG9tYWluPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEYXRhIHRvIGJlIHNlbnQg
dG8gdGhlIHNlcnZlci4gSXQgaXMgY29udmVydGVkIHRvIGEgcXVlcnkgc3RyaW5nLCBpZiBub3Qg
YWxyZWFkeSBhIHN0cmluZy4gSXQncyBhcHBlbmRlZCB0byB0aGUgdXJsIGZvciBHRVQtcmVxdWVz
dHMuIFNlZSBwcm9jZXNzRGF0YSBvcHRpb24gdG8gcHJldmVudCB0aGlzIGF1dG9tYXRpYyBwcm9j
ZXNzaW5nLiBPYmplY3QgbXVzdCBiZSBLZXkvVmFsdWUgcGFpcnMuIElmIHZhbHVlIGlzIGFuIEFy
cmF5LCBqUXVlcnkgc2VyaWFsaXplcyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzYW1lIGtleSBiYXNl
ZCBvbiB0aGUgdmFsdWUgb2YgdGhlIHRyYWRpdGlvbmFsIHNldHRpbmcgKGRlc2NyaWJlZCBiZWxv
dykuXG4gICAgICovXG4gICAgZGF0YT86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9u
IHRvIGJlIHVzZWQgdG8gaGFuZGxlIHRoZSByYXcgcmVzcG9uc2UgZGF0YSBvZiBYTUxIdHRwUmVx
dWVzdC5UaGlzIGlzIGEgcHJlLWZpbHRlcmluZyBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgcmVz
cG9uc2UuIFlvdSBzaG91bGQgcmV0dXJuIHRoZSBzYW5pdGl6ZWQgZGF0YS4gVGhlIGZ1bmN0aW9u
IGFjY2VwdHMgdHdvIGFyZ3VtZW50czogVGhlIHJhdyBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNl
cnZlciBhbmQgdGhlICdkYXRhVHlwZScgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGRhdGFGaWx0
ZXI/IChkYXRhOiBhbnksIHR5OiBhbnkpOiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUg
b2YgZGF0YSB0aGF0IHlvdSdyZSBleHBlY3RpbmcgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIElmIG5v
bmUgaXMgc3BlY2lmaWVkLCBqUXVlcnkgd2lsbCB0cnkgdG8gaW5mZXIgaXQgYmFzZWQgb24gdGhl
IE1JTUUgdHlwZSBvZiB0aGUgcmVzcG9uc2UgKGFuIFhNTCBNSU1FIHR5cGUgd2lsbCB5aWVsZCBY
TUwsIGluIDEuNCBKU09OIHdpbGwgeWllbGQgYSBKYXZhU2NyaXB0IG9iamVjdCwgaW4gMS40IHNj
cmlwdCB3aWxsIGV4ZWN1dGUgdGhlIHNjcmlwdCwgYW5kIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSBy
ZXR1cm5lZCBhcyBhIHN0cmluZykuXG4gICAgICovXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XG4g
ICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3QgZmFp
bHMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aHJlZSBhcmd1bWVudHM6IFRoZSBqcVhIUiAoaW4g
alF1ZXJ5IDEuNC54LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LCBhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgb2NjdXJyZWQgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlv
biBvYmplY3QsIGlmIG9uZSBvY2N1cnJlZC4gUG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25k
IGFyZ3VtZW50IChiZXNpZGVzIG51bGwpIGFyZSBcInRpbWVvdXRcIiwgXCJlcnJvclwiLCBcImFi
b3J0XCIsIGFuZCBcInBhcnNlcmVycm9yXCIuIFdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMsIGVy
cm9yVGhyb3duIHJlY2VpdmVzIHRoZSB0ZXh0dWFsIHBvcnRpb24gb2YgdGhlIEhUVFAgc3RhdHVz
LCBzdWNoIGFzIFwiTm90IEZvdW5kXCIgb3IgXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXCIgQXMg
b2YgalF1ZXJ5IDEuNSwgdGhlIGVycm9yIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBm
dW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gTm90ZTogVGhp
cyBoYW5kbGVyIGlzIG5vdCBjYWxsZWQgZm9yIGNyb3NzLWRvbWFpbiBzY3JpcHQgYW5kIGNyb3Nz
LWRvbWFpbiBKU09OUCByZXF1ZXN0cy4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xu
ICAgIGVycm9yPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nLCBlcnJvclRo
cm93OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB0cmlnZ2VyIGds
b2JhbCBBamF4IGV2ZW50IGhhbmRsZXJzIGZvciB0aGlzIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGlz
IHRydWUuIFNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBnbG9iYWwgaGFuZGxlcnMgbGlrZSBh
amF4U3RhcnQgb3IgYWpheFN0b3AgZnJvbSBiZWluZyB0cmlnZ2VyZWQuIFRoaXMgY2FuIGJlIHVz
ZWQgdG8gY29udHJvbCB2YXJpb3VzIEFqYXggRXZlbnRzLlxuICAgICAqL1xuICAgIGdsb2JhbD86
IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgaGVhZGVy
IGtleS92YWx1ZSBwYWlycyB0byBzZW5kIGFsb25nIHdpdGggcmVxdWVzdHMgdXNpbmcgdGhlIFhN
TEh0dHBSZXF1ZXN0IHRyYW5zcG9ydC4gVGhlIGhlYWRlciBYLVJlcXVlc3RlZC1XaXRoOiBYTUxI
dHRwUmVxdWVzdCBpcyBhbHdheXMgYWRkZWQsIGJ1dCBpdHMgZGVmYXVsdCBYTUxIdHRwUmVxdWVz
dCB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBoZXJlLiBWYWx1ZXMgaW4gdGhlIGhlYWRlcnMgc2V0dGlu
ZyBjYW4gYWxzbyBiZSBvdmVyd3JpdHRlbiBmcm9tIHdpdGhpbiB0aGUgYmVmb3JlU2VuZCBmdW5j
dGlvbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBoZWFkZXJzPzogeyBba2V5
OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8g
YmUgc3VjY2Vzc2Z1bCBvbmx5IGlmIHRoZSByZXNwb25zZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUg
bGFzdCByZXF1ZXN0LiBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIExhc3QtTW9kaWZpZWQg
aGVhZGVyLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLCBpZ25vcmluZyB0aGUgaGVhZGVyLiBJbiBq
UXVlcnkgMS40IHRoaXMgdGVjaG5pcXVlIGFsc28gY2hlY2tzIHRoZSAnZXRhZycgc3BlY2lmaWVk
IGJ5IHRoZSBzZXJ2ZXIgdG8gY2F0Y2ggdW5tb2RpZmllZCBkYXRhLlxuICAgICAqL1xuICAgIGlm
TW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSBjdXJyZW50IGVu
dmlyb25tZW50IHRvIGJlIHJlY29nbml6ZWQgYXMgXCJsb2NhbCxcIiAoZS5nLiB0aGUgZmlsZXN5
c3RlbSksIGV2ZW4gaWYgalF1ZXJ5IGRvZXMgbm90IHJlY29nbml6ZSBpdCBhcyBzdWNoIGJ5IGRl
ZmF1bHQuIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBjdXJyZW50bHkgcmVjb2duaXplZCBh
cyBsb2NhbDogZmlsZSwgKi1leHRlbnNpb24sIGFuZCB3aWRnZXQuIElmIHRoZSBpc0xvY2FsIHNl
dHRpbmcgbmVlZHMgbW9kaWZpY2F0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyBvbmNl
IGluIHRoZSAkLmFqYXhTZXR1cCgpIG1ldGhvZC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAg
ICAqL1xuICAgIGlzTG9jYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGluIGEganNvbnAgcmVxdWVzdC4gVGhpcyB2YWx1ZSB3
aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAnY2FsbGJhY2snIGluIHRoZSAnY2FsbGJhY2s9PycgcGFy
dCBvZiB0aGUgcXVlcnkgc3RyaW5nIGluIHRoZSB1cmwuIFNvIHtqc29ucDonb25KU09OUExvYWQn
fSB3b3VsZCByZXN1bHQgaW4gJ29uSlNPTlBMb2FkPT8nIHBhc3NlZCB0byB0aGUgc2VydmVyLiBB
cyBvZiBqUXVlcnkgMS41LCBzZXR0aW5nIHRoZSBqc29ucCBvcHRpb24gdG8gZmFsc2UgcHJldmVu
dHMgalF1ZXJ5IGZyb20gYWRkaW5nIHRoZSBcIj9jYWxsYmFja1wiIHN0cmluZyB0byB0aGUgVVJM
IG9yIGF0dGVtcHRpbmcgdG8gdXNlIFwiPT9cIiBmb3IgdHJhbnNmb3JtYXRpb24uIEluIHRoaXMg
Y2FzZSwgeW91IHNob3VsZCBhbHNvIGV4cGxpY2l0bHkgc2V0IHRoZSBqc29ucENhbGxiYWNrIHNl
dHRpbmcuIEZvciBleGFtcGxlLCB7IGpzb25wOiBmYWxzZSwganNvbnBDYWxsYmFjazogXCJjYWxs
YmFja05hbWVcIiB9XG4gICAgICovXG4gICAganNvbnA/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAg
ICogU3BlY2lmeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBmb3IgYSBKU09OUCByZXF1ZXN0
LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSByYW5kb20gbmFtZSBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBieSBqUXVlcnkuIEl0IGlzIHByZWZlcmFibGUgdG8gbGV0IGpR
dWVyeSBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGFzIGl0J2xsIG1ha2UgaXQgZWFzaWVyIHRvIG1h
bmFnZSB0aGUgcmVxdWVzdHMgYW5kIHByb3ZpZGUgY2FsbGJhY2tzIGFuZCBlcnJvciBoYW5kbGlu
Zy4gWW91IG1heSB3YW50IHRvIHNwZWNpZnkgdGhlIGNhbGxiYWNrIHdoZW4geW91IHdhbnQgdG8g
ZW5hYmxlIGJldHRlciBicm93c2VyIGNhY2hpbmcgb2YgR0VUIHJlcXVlc3RzLiBBcyBvZiBqUXVl
cnkgMS41LCB5b3UgY2FuIGFsc28gdXNlIGEgZnVuY3Rpb24gZm9yIHRoaXMgc2V0dGluZywgaW4g
d2hpY2ggY2FzZSB0aGUgdmFsdWUgb2YganNvbnBDYWxsYmFjayBpcyBzZXQgdG8gdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGpzb25wQ2FsbGJhY2s/OiBh
bnk7XG4gICAgLyoqXG4gICAgICogQSBtaW1lIHR5cGUgdG8gb3ZlcnJpZGUgdGhlIFhIUiBtaW1l
IHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICBtaW1lVHlwZT86IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBBIHBhc3N3b3JkIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRw
UmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0LlxuICAgICAqL1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ5
IGRlZmF1bHQsIGRhdGEgcGFzc2VkIGluIHRvIHRoZSBkYXRhIG9wdGlvbiBhcyBhbiBvYmplY3Qg
KHRlY2huaWNhbGx5LCBhbnl0aGluZyBvdGhlciB0aGFuIGEgc3RyaW5nKSB3aWxsIGJlIHByb2Nl
c3NlZCBhbmQgdHJhbnNmb3JtZWQgaW50byBhIHF1ZXJ5IHN0cmluZywgZml0dGluZyB0byB0aGUg
ZGVmYXVsdCBjb250ZW50LXR5cGUgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRc
Ii4gSWYgeW91IHdhbnQgdG8gc2VuZCBhIERPTURvY3VtZW50LCBvciBvdGhlciBub24tcHJvY2Vz
c2VkIGRhdGEsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcm9jZXNz
RGF0YT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogT25seSBhcHBsaWVzIHdoZW4gdGhlIFwi
c2NyaXB0XCIgdHJhbnNwb3J0IGlzIHVzZWQgKGUuZy4sIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyB3
aXRoIFwianNvbnBcIiBvciBcInNjcmlwdFwiIGRhdGFUeXBlIGFuZCBcIkdFVFwiIHR5cGUpLiBT
ZXRzIHRoZSBjaGFyc2V0IGF0dHJpYnV0ZSBvbiB0aGUgc2NyaXB0IHRhZyB1c2VkIGluIHRoZSBy
ZXF1ZXN0LiBVc2VkIHdoZW4gdGhlIGNoYXJhY3RlciBzZXQgb24gdGhlIGxvY2FsIHBhZ2UgaXMg
bm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgb24gdGhlIHJlbW90ZSBzY3JpcHQuXG4gICAgICovXG4g
ICAgc2NyaXB0Q2hhcnNldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2Yg
bnVtZXJpYyBIVFRQIGNvZGVzIGFuZCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJl
c3BvbnNlIGhhcyB0aGUgY29ycmVzcG9uZGluZyBjb2RlLiBmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nl
c3NmdWwsIHRoZSBzdGF0dXMgY29kZSBmdW5jdGlvbnMgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJz
IGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrOyBpZiBpdCByZXN1bHRzIGluIGFuIGVycm9yIChpbmNs
dWRpbmcgM3h4IHJlZGlyZWN0KSwgdGhleSB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhl
IGVycm9yIGNhbGxiYWNrLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIHN0YXR1
c0NvZGU/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gVGhlIGZ1bmN0aW9uIGdl
dHMgcGFzc2VkIHRocmVlIGFyZ3VtZW50czogVGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2Vy
dmVyLCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkYXRhVHlwZSBwYXJhbWV0ZXI7IGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIHN0YXR1czsgYW5kIHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54
LCBYTUxIdHRwUmVxdWVzdCkgb2JqZWN0LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgc3VjY2VzcyBz
ZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIHdp
bGwgYmUgY2FsbGVkIGluIHR1cm4uIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAg
ICBzdWNjZXNzPyAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpOiBhbnk7XG4gICAgLyoqXG4gICAgICogU2V0IGEgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRz
KSBmb3IgdGhlIHJlcXVlc3QuIFRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHRpbWVvdXQg
c2V0IHdpdGggJC5hamF4U2V0dXAoKS4gVGhlIHRpbWVvdXQgcGVyaW9kIHN0YXJ0cyBhdCB0aGUg
cG9pbnQgdGhlICQuYWpheCBjYWxsIGlzIG1hZGU7IGlmIHNldmVyYWwgb3RoZXIgcmVxdWVzdHMg
YXJlIGluIHByb2dyZXNzIGFuZCB0aGUgYnJvd3NlciBoYXMgbm8gY29ubmVjdGlvbnMgYXZhaWxh
YmxlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSByZXF1ZXN0IHRvIHRpbWUgb3V0IGJlZm9yZSBpdCBj
YW4gYmUgc2VudC4gSW4galF1ZXJ5IDEuNC54IGFuZCBiZWxvdywgdGhlIFhNTEh0dHBSZXF1ZXN0
IG9iamVjdCB3aWxsIGJlIGluIGFuIGludmFsaWQgc3RhdGUgaWYgdGhlIHJlcXVlc3QgdGltZXMg
b3V0OyBhY2Nlc3NpbmcgYW55IG9iamVjdCBtZW1iZXJzIG1heSB0aHJvdyBhbiBleGNlcHRpb24u
IEluIEZpcmVmb3ggMy4wKyBvbmx5LCBzY3JpcHQgYW5kIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBi
ZSBjYW5jZWxsZWQgYnkgYSB0aW1lb3V0OyB0aGUgc2NyaXB0IHdpbGwgcnVuIGV2ZW4gaWYgaXQg
YXJyaXZlcyBhZnRlciB0aGUgdGltZW91dCBwZXJpb2QuXG4gICAgICovXG4gICAgdGltZW91dD86
IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3aXNoIHRv
IHVzZSB0aGUgdHJhZGl0aW9uYWwgc3R5bGUgb2YgcGFyYW0gc2VyaWFsaXphdGlvbi5cbiAgICAg
Ki9cbiAgICB0cmFkaXRpb25hbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUg
b2YgcmVxdWVzdCB0byBtYWtlIChcIlBPU1RcIiBvciBcIkdFVFwiKSwgZGVmYXVsdCBpcyBcIkdF
VFwiLiBOb3RlOiBPdGhlciBIVFRQIHJlcXVlc3QgbWV0aG9kcywgc3VjaCBhcyBQVVQgYW5kIERF
TEVURSwgY2FuIGFsc28gYmUgdXNlZCBoZXJlLCBidXQgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBi
eSBhbGwgYnJvd3NlcnMuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAg
ICAgKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMg
c2VudC5cbiAgICAgKi9cbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSB1c2Vy
bmFtZSB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYW4gSFRU
UCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICB1c2VybmFtZT86
IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmb3IgY3JlYXRpbmcgdGhlIFhNTEh0
dHBSZXF1ZXN0IG9iamVjdC4gRGVmYXVsdHMgdG8gdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBhdmFp
bGFibGUgKElFKSwgdGhlIFhNTEh0dHBSZXF1ZXN0IG90aGVyd2lzZS4gT3ZlcnJpZGUgdG8gcHJv
dmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MSHR0cFJlcXVlc3Qgb3IgZW5oYW5j
ZW1lbnRzIHRvIHRoZSBmYWN0b3J5LlxuICAgICAqL1xuICAgIHhocj86IGFueTtcbiAgICAvKipc
biAgICAgKiBBbiBvYmplY3Qgb2YgZmllbGROYW1lLWZpZWxkVmFsdWUgcGFpcnMgdG8gc2V0IG9u
IHRoZSBuYXRpdmUgWEhSIG9iamVjdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IHRvIHNl
dCB3aXRoQ3JlZGVudGlhbHMgdG8gdHJ1ZSBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIGlmIG5l
ZWRlZC4gSW4galF1ZXJ5IDEuNSwgdGhlIHdpdGhDcmVkZW50aWFscyBwcm9wZXJ0eSB3YXMgbm90
IHByb3BhZ2F0ZWQgdG8gdGhlIG5hdGl2ZSBYSFIgYW5kIHRodXMgQ09SUyByZXF1ZXN0cyByZXF1
aXJpbmcgaXQgd291bGQgaWdub3JlIHRoaXMgZmxhZy4gRm9yIHRoaXMgcmVhc29uLCB3ZSByZWNv
bW1lbmQgdXNpbmcgalF1ZXJ5IDEuNS4xKyBzaG91bGQgeW91IHJlcXVpcmUgdGhlIHVzZSBvZiBp
dC4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAgIHhockZpZWxkcz86IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIGpxWEhS
IG9iamVjdFxuKi9cbmludGVyZmFjZSBKUXVlcnlYSFIgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCwg
SlF1ZXJ5UHJvbWlzZTxhbnk+IHtcbiAgICBvdmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJp
bmcpOiBhbnk7XG4gICAgYWJvcnQoc3RhdHVzVGV4dD86IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8q
XG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IGNhbGxiYWNrXG4qL1xuaW50ZXJmYWNlIEpR
dWVyeUNhbGxiYWNrIHtcbiAgICBhZGQoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbiAgICBk
aXNhYmxlKCk6IGFueTtcbiAgICBlbXB0eSgpOiBhbnk7XG4gICAgZmlyZSguLi5hcmd1bWVudHM6
IGFueVtdKTogYW55O1xuICAgIGZpcmVkKCk6IGJvb2xlYW47XG4gICAgZmlyZVdpdGgoY29udGV4
dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcbiAgICBoYXMoY2FsbGJhY2s6IGFueSk6IGJv
b2xlYW47XG4gICAgbG9jaygpOiBhbnk7XG4gICAgbG9ja2VkKCk6IGJvb2xlYW47XG4gICAgcmVt
b3ZlKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG59XG5cbi8qXG4gICAgQWxsb3dzIGpRdWVy
eSBQcm9taXNlcyB0byBpbnRlcm9wIHdpdGggbm9uLWpRdWVyeSBwcm9taXNlc1xuKi9cbmludGVy
ZmFjZSBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPiB7XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2
YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IFUpOiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9
PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4p
OiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVl
OiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAocmVhc29uOiBhbnkp
ID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT47XG59
XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5IHByb21pc2UsIHBhcnQgb2YgY2Fs
bGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMg
dmVyc2lvbnMgb2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10pOiBK
UXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVl
cnlQcm9taXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlQ
cm9taXNlPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeVByb21pc2U8VD47XG5cbiAgICAvLyBEZXByZWNhdGVkIC0gZ2l2ZW4gbm8gdHlwaW5nc1xu
ICAgIHBpcGUoZG9uZUZpbHRlcj86ICh4OiBhbnkpID0+IGFueSwgZmFpbEZpbHRlcj86ICh4OiBh
bnkpID0+IGFueSwgcHJvZ3Jlc3NGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnkpOiBKUXVlcnlQcm9t
aXNlPGFueT47XG5cbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJl
amVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDog
KHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9
PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuXG4gICAgLy8gQmVjYXVz
ZSBKUXVlcnkgUHJvbWlzZXMgU3Vja1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVz
OiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJv
Z3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+
O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2Vu
ZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblBy
b2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxV
PjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IFUsIG9uUmVq
ZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Q
cm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8
VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlH
ZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVy
eUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkg
PT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBKUXVlcnkgZGVmZXJyZWQsIHBhcnQgb2YgY2FsbGJhY2tzXG4qL1xuaW50ZXJmYWNlIEpRdWVy
eURlZmVycmVkPFQ+IGV4dGVuZHMgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2
ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogYW55W10p
OiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBhbnlb
XSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgbm90aWZ5KC4uLmFyZ3M6IGFueVtdKTogSlF1
ZXJ5RGVmZXJyZWQ8VD47XG4gICAgbm90aWZ5V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFu
eVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZWplY3QoLi4uYXJnczogYW55W10pOiBK
UXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZWplY3RXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczog
YW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlc29sdmUodmFsOiBUKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIHJlc29sdmVXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVl
cnlEZWZlcnJlZDxUPjtcbiAgICBzdGF0ZSgpOiBzdHJpbmc7XG5cbiAgICBwcm9taXNlKHRhcmdl
dD86IGFueSk6IEpRdWVyeVByb21pc2U8VD47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIG9mIHRo
ZSBKUXVlcnkgZXh0ZW5zaW9uIG9mIHRoZSBXM0MgZXZlbnQgb2JqZWN0XG4qL1xuXG5pbnRlcmZh
Y2UgQmFzZUpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgRXZlbnQge1xuICAgIGRhdGE6IGFueTtc
biAgICBkZWxlZ2F0ZVRhcmdldDogRWxlbWVudDtcbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTog
Ym9vbGVhbjtcbiAgICBpc0ltbWVkaWF0ZVByb3BvZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xu
ICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgbmFtZXNwYWNlOiBzdHJp
bmc7XG4gICAgcHJldmVudERlZmF1bHQoKTogYW55O1xuICAgIHJlbGF0ZWRUYXJnZXQ6IEVsZW1l
bnQ7XG4gICAgcmVzdWx0OiBhbnk7XG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IHZv
aWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAg
ICBwYWdlWTogbnVtYmVyO1xuICAgIHdoaWNoOiBudW1iZXI7XG4gICAgbWV0YUtleTogYm9vbGVh
bjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUlucHV0RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1
ZXJ5RXZlbnRPYmplY3Qge1xuICAgIGFsdEtleTogYm9vbGVhbjtcbiAgICBjdHJsS2V5OiBib29s
ZWFuO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG4gICAgc2hpZnRLZXk6IGJvb2xlYW47XG59XG5c
bmludGVyZmFjZSBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVu
dE9iamVjdCB7XG4gICAgYnV0dG9uOiBudW1iZXI7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAg
IGNsaWVudFk6IG51bWJlcjtcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVt
YmVyO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6IG51bWJlcjtcbiAgICBzY3JlZW5Y
OiBudW1iZXI7XG4gICAgc2NyZWVuWTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5S2V5
RXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBjaGFyOiBh
bnk7XG4gICAgY2hhckNvZGU6IG51bWJlcjtcbiAgICBrZXk6IGFueTtcbiAgICBrZXlDb2RlOiBu
dW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IGV4dGVuZHMg
QmFzZUpRdWVyeUV2ZW50T2JqZWN0IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBQb3BTdGF0ZUV2ZW50
O1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZl
bnRPYmplY3QsIEpRdWVyeUlucHV0RXZlbnRPYmplY3QsIEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qs
IEpRdWVyeUtleUV2ZW50T2JqZWN0LCBKUXVlcnlQb3BTdGF0ZUV2ZW50T2JqZWN0IHtcbn1cblxu
LypcbiAgICBDb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3Nlclxu
Ki9cblxuaW50ZXJmYWNlIEpRdWVyeVN1cHBvcnQge1xuICAgIGFqYXg/OiBib29sZWFuO1xuICAg
IGJveE1vZGVsPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VCdWJibGVzPzogYm9vbGVhbjtcbiAgICBj
aGVja0Nsb25lPzogYm9vbGVhbjtcbiAgICBjaGVja09uPzogYm9vbGVhbjtcbiAgICBjb3JzPzog
Ym9vbGVhbjtcbiAgICBjc3NGbG9hdD86IGJvb2xlYW47XG4gICAgaHJlZk5vcm1hbGl6ZWQ/OiBi
b29sZWFuO1xuICAgIGh0bWxTZXJpYWxpemU/OiBib29sZWFuO1xuICAgIGxlYWRpbmdXaGl0ZXNw
YWNlPzogYm9vbGVhbjtcbiAgICBub0Nsb25lQ2hlY2tlZD86IGJvb2xlYW47XG4gICAgbm9DbG9u
ZUV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGFjaXR5PzogYm9vbGVhbjtcbiAgICBvcHREaXNhYmxl
ZD86IGJvb2xlYW47XG4gICAgb3B0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIHNjcmlwdEV2YWw/
ICgpOiBib29sZWFuO1xuICAgIHN0eWxlPzogYm9vbGVhbjtcbiAgICBzdWJtaXRCdWJibGVzPzog
Ym9vbGVhbjtcbiAgICB0Ym9keT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKUXVlcnlQYXJh
bSB7XG4gICAgKG9iajogYW55KTogc3RyaW5nO1xuICAgIChvYmo6IGFueSwgdHJhZGl0aW9uYWw6
IGJvb2xlYW4pOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGludGVyZmFjZSB1c2VkIHRvIGNv
bnN0cnVjdCBqUXVlcnkgZXZlbnRzICh3aXRoICQuRXZlbnQpLiBJdCBpc1xuICogZGVmaW5lZCBz
ZXBhcmF0ZWx5IGluc3RlYWQgb2YgaW5saW5lIGluIEpRdWVyeVN0YXRpYyB0byBhbGxvd1xuICog
b3ZlcnJpZGluZyB0aGUgY29uc3RydWN0aW9uIGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgc3RyaW5n
c1xuICogcmV0dXJuaW5nIHNwZWNpZmljIGV2ZW50IG9iamVjdHMuXG4gKi9cbmludGVyZmFjZSBK
UXVlcnlFdmVudENvbnN0cnVjdG9yIHtcbiAgICAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRp
ZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbiAgICBuZXcgKG5hbWU6IHN0cmluZywgZXZl
bnRQcm9wZXJ0aWVzPzogYW55KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG59XG5cbi8qKlxuICogVGhl
IGludGVyZmFjZSB1c2VkIHRvIHNwZWNpZnkgZWFzaW5nIGZ1bmN0aW9ucy5cbiAqL1xuaW50ZXJm
YWNlIEpRdWVyeUVhc2luZyB7XG4gICAgbGluZWFyKHA6IG51bWJlcik6IG51bWJlcjtcbiAgICBz
d2luZyhwOiBudW1iZXIpOiBudW1iZXI7XG59XG5cbi8qXG4gICAgU3RhdGljIG1lbWJlcnMgb2Yg
alF1ZXJ5ICh0aG9zZSBvbiAkIGFuZCBqUXVlcnkgdGhlbXNlbHZlcylcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5U3RhdGljIHtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9ub3Vz
IEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBz
ZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFs
bCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0
aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHNldHRpbmdzOiBKUXVl
cnlBamF4U2V0dGluZ3MpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBhbiBh
c3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0
IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGluZ3MgYXJlIG9wdGlvbmFsLiBB
IGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRoICQuYWpheFNldHVwKCkuXG4g
ICAgICovXG4gICAgYWpheCh1cmw6IHN0cmluZywgc2V0dGluZ3M/OiBKUXVlcnlBamF4U2V0dGlu
Z3MpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXggb3B0
aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlzIHNl
bnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZGF0YVR5cGVzIEFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBkYXRhVHlwZXNcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy5c
biAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGRhdGFUeXBlczogc3RyaW5nLCBoYW5kbGVyOiAo
b3B0czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVy
eVhIUikgPT4gYW55KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY3VzdG9tIEFqYXgg
b3B0aW9ucyBvciBtb2RpZnkgZXhpc3Rpbmcgb3B0aW9ucyBiZWZvcmUgZWFjaCByZXF1ZXN0IGlz
IHNlbnQgYW5kIGJlZm9yZSB0aGV5IGFyZSBwcm9jZXNzZWQgYnkgJC5hamF4KCkuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZv
ciBmdXR1cmUgQWpheCByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBhamF4UHJlZmlsdGVyKGhhbmRs
ZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjog
SlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuXG4gICAgYWpheFNldHRpbmdzOiBKUXVlcnlBamF4
U2V0dGluZ3M7XG5cbiAgICAgLyoqXG4gICAgICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0
dXJlIEFqYXggcmVxdWVzdHMuIEl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgKlxu
ICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25m
aWd1cmUgdGhlIGRlZmF1bHQgQWpheCByZXF1ZXN0LiBBbGwgb3B0aW9ucyBhcmUgb3B0aW9uYWwu
XG4gICAgICAqL1xuICAgIGFqYXhTZXR1cChvcHRpb25zOiBKUXVlcnlBamF4U2V0dGluZ3MpOiB2
b2lkO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUg
cmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0
YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4
bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAg
ICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8g
d2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9i
amVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVz
dC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhl
Y3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRo
ZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxp
Z2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdl
dCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRT
dGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmlu
Zyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVy
IHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0
byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBj
YWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRz
LlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20g
dGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0
LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcs
IHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlY
SFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgc3VjY2Vzcz86IChk
YXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTog
SlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0
aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlz
IHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQg
aXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1
Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBPYmpl
Y3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5j
b2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3Ry
aW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3Ry
aW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAg
ICogTG9hZCBhIEphdmFTY3JpcHQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRU
UCByZXF1ZXN0LCB0aGVuIGV4ZWN1dGUgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRTY3JpcHQodXJsOiBz
dHJpbmcsIHN1Y2Nlc3M/OiAoc2NyaXB0OiBzdHJpbmcsIHRleHRTdGF0dXM6IHN0cmluZywganFY
SFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuXG4gICAgcGFyYW06IEpRdWVyeVBh
cmFtO1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBj
b250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBA
cGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQg
Y2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlw
ZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQg
R3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0
KHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBq
cVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xu
ICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBP
U1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRh
dGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdp
dGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlv
biB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBk
YXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAg
KiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2
ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwg
aHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3Vj
Y2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikg
PT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBM
b2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGlj
aCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0
IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0Llxu
ICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRl
ZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlk
ZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBl
IFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRl
bGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xu
ICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/
OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG5cbiAgICAvKipcbiAgICAgKiBBIG11bHRpLXB1cnBvc2Ug
Y2FsbGJhY2tzIGxpc3Qgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBwb3dlcmZ1bCB3YXkgdG8gbWFu
YWdlIGNhbGxiYWNrIGxpc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZsYWdzIEFuIG9wdGlv
bmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIGZsYWdzIHRoYXQgY2hhbmdlIGhvdyB0aGUgY2Fs
bGJhY2sgbGlzdCBiZWhhdmVzLlxuICAgICAqL1xuICAgIENhbGxiYWNrcyhmbGFncz86IHN0cmlu
Zyk6IEpRdWVyeUNhbGxiYWNrO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgb3IgcmVsZWFzZXMg
dGhlIGV4ZWN1dGlvbiBvZiBqUXVlcnkncyByZWFkeSBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBob2xkIEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWFkeSBob2xkIGlzIGJlaW5nIHJlcXVl
c3RlZCBvciByZWxlYXNlZFxuICAgICAqL1xuICAgIGhvbGRSZWFkeShob2xkOiBib29sZWFuKTog
dm9pZDtcblxuICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xu
ICAgIChlbGVtZW50OiBFbGVtZW50KTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IHt9KTogSlF1ZXJ5
O1xuICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiBK
UXVlcnkpOiBKUXVlcnk7XG4gICAgKGZ1bmM6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIChhcnJh
eTogYW55W10pOiBKUXVlcnk7XG4gICAgKCk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFJl
bGlucXVpc2ggalF1ZXJ5J3MgY29udHJvbCBvZiB0aGUgJCB2YXJpYWJsZS5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSByZW1vdmVBbGwgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byByZW1v
dmUgYWxsIGpRdWVyeSB2YXJpYWJsZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIChpbmNsdWRpbmcg
alF1ZXJ5IGl0c2VsZikuXG4gICAgICovXG4gICAgbm9Db25mbGljdChyZW1vdmVBbGw/OiBib29s
ZWFuKTogT2JqZWN0O1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0
ZSBjYWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxs
eSBEZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVj
dHMsIG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4u
LmRlZmVycmVkczogSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VD5bXSk6IEpRdWVyeVByb21pc2U8VD47
XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBjYWxsYmFjayBmdW5j
dGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBEZWZlcnJlZCBvYmpl
Y3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMsIG9yIHBsYWluIEph
dmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRlZmVycmVkczogVFtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBl
eGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1
c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50
cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQg
b2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48
VD4oLi4uZGVmZXJyZWRzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBjc3NIb29r
czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgY3NzTnVtYmVyOiBhbnk7XG5cbiAgICAv
KipcbiAgICAgKiBTdG9yZSBhcmJpdHJhcnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNp
ZmllZCBlbGVtZW50LiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhl
IGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRh
dGEgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGRhdGEgdmFsdWUuXG4gICAg
ICovXG4gICAgZGF0YTxUPihlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IFQp
OiBUO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9yZSBm
b3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2YWx1
ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBk
YXRhLlxuICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRh
IHRvIHNldC5cbiAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5n
KTogYW55O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgYXQgbmFtZWQgZGF0YSBzdG9y
ZSBmb3IgdGhlIGVsZW1lbnQsIGFzIHNldCBieSBqUXVlcnkuZGF0YShlbGVtZW50LCBuYW1lLCB2
YWx1ZSksIG9yIHRoZSBmdWxsIGRhdGEgc3RvcmUgZm9yIHRoZSBlbGVtZW50LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRo
ZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVudCk6IGFueTtcblxuICAg
IGRlcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55O1xuXG4g
ICAgaGFzRGF0YShlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6
IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEoZWxlbWVudDogRWxlbWVudCwgbmFtZT86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgRGVmZXJyZWQ8VD4oYmVmb3JlU3Rh
cnQ/OiAoZGVmZXJyZWQ6IEpRdWVyeURlZmVycmVkPFQ+KSA9PiBhbnkpOiBKUXVlcnlEZWZlcnJl
ZDxUPjtcblxuICAgIC8vIEVmZmVjdHNcbiAgICBmeDogeyB0aWNrOiAoKSA9PiB2b2lkOyBpbnRl
cnZhbDogbnVtYmVyOyBzdG9wOiAoKSA9PiB2b2lkOyBzcGVlZHM6IHsgc2xvdzogbnVtYmVyOyBm
YXN0OiBudW1iZXI7IH07IG9mZjogYm9vbGVhbjsgc3RlcDogYW55OyB9O1xuXG4gICAgLy8gRXZl
bnRzXG4gICAgcHJveHkoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBjb250ZXh0OiBhbnks
IC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIHByb3h5KGNvbnRleHQ6IGFueSwgbmFtZTogc3Ry
aW5nLCAuLi5hcmdzOiBhbnlbXSk6IGFueTtcblxuICAgIEV2ZW50OiBKUXVlcnlFdmVudENvbnN0
cnVjdG9yO1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgZXJyb3IobWVzc2FnZTogYW55KTogSlF1
ZXJ5O1xuXG4gICAgLy8gTWlzY2VsbGFuZW91c1xuICAgIGV4cHI6IGFueTtcbiAgICBmbjogYW55
OyAgLy9UT0RPOiBEZWNpZGUgaG93IHdlIHdhbnQgdG8gdHlwZSB0aGlzXG4gICAgaXNSZWFkeTog
Ym9vbGVhbjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICBzdXBwb3J0OiBKUXVlcnlTdXBwb3J0
O1xuXG4gICAgLy8gVXRpbGl0aWVzXG4gICAgY29udGFpbnMoY29udGFpbmVyOiBFbGVtZW50LCBj
b250YWluZWQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4gICAgZWFjaChjb2xsZWN0aW9uOiBhbnks
IGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBhbnksIHZhbHVlT2ZFbGVtZW50OiBhbnkpID0+IGFu
eSk6IGFueTtcbiAgICBlYWNoKGNvbGxlY3Rpb246IEpRdWVyeSwgY2FsbGJhY2s6IChpbmRleElu
QXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBhbnkpOiBhbnk7
XG4gICAgZWFjaDxUPihjb2xsZWN0aW9uOiBUW10sIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBu
dW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBUKSA9PiBhbnkpOiBhbnk7XG5cbiAgICBleHRlbmQodGFy
Z2V0OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuICAgIGV4dGVuZChkZWVwOiBib29sZWFu
LCB0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG5cbiAgICBnbG9iYWxFdmFsKGNv
ZGU6IHN0cmluZyk6IGFueTtcblxuICAgIGdyZXA8VD4oYXJyYXk6IFRbXSwgZnVuYzogKGVsZW1l
bnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikgPT4gYm9vbGVhbiwgaW52ZXJ0Pzog
Ym9vbGVhbik6IFRbXTtcblxuICAgIGluQXJyYXk8VD4odmFsdWU6IFQsIGFycmF5OiBUW10sIGZy
b21JbmRleD86IG51bWJlcik6IG51bWJlcjtcblxuICAgIGlzQXJyYXkob2JqOiBhbnkpOiBib29s
ZWFuO1xuICAgIGlzRW1wdHlPYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzRnVuY3Rp
b24ob2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzTnVtZXJpYyh2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICBpc1BsYWluT2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1dpbmRvdyhv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNYTUxEb2Mobm9kZTogTm9kZSk6IGJvb2xlYW47XG5c
biAgICBtYWtlQXJyYXkob2JqOiBhbnkpOiBhbnlbXTtcblxuICAgIG1hcDxULCBVPihhcnJheTog
VFtdLCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBULCBpbmRleEluQXJyYXk6IG51bWJlcikg
PT4gVSk6IFVbXTtcbiAgICBtYXAoYXJyYXk6IGFueSwgY2FsbGJhY2s6IChlbGVtZW50T2ZBcnJh
eTogYW55LCBpbmRleEluQXJyYXk6IGFueSkgPT4gYW55KTogYW55O1xuXG4gICAgbWVyZ2U8VD4o
Zmlyc3Q6IFRbXSwgc2Vjb25kOiBUW10pOiBUW107XG4gICAgbWVyZ2U8VCxVPihmaXJzdDogVFtd
LCBzZWNvbmQ6IFVbXSk6IGFueVtdO1xuXG4gICAgbm9vcCgpOiBhbnk7XG5cbiAgICBub3coKTog
bnVtYmVyO1xuXG4gICAgcGFyc2VKU09OKGpzb246IHN0cmluZyk6IGFueTtcblxuICAgIC8qKlxu
ICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIFhNTCBkb2N1bWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBkYXRhYSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAg
ICAqL1xuICAgIHBhcnNlWE1MKGRhdGE6IHN0cmluZyk6IFhNTERvY3VtZW50O1xuXG4gICAgcXVl
dWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlOiBhbnlbXSk6
IEpRdWVyeTtcblxuICAgIHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICB0eXBlKG9i
ajogYW55KTogc3RyaW5nO1xuXG4gICAgdW5pcXVlKGFycjogYW55W10pOiBhbnlbXTtcblxuICAg
IC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIEhUTUwgc3RyaW5nIHRvIGJlIHBhcnNlZFxuICAg
ICAqIEBwYXJhbSBjb250ZXh0IERPTSBlbGVtZW50IHRvIHNlcnZlIGFzIHRoZSBjb250ZXh0IGlu
IHdoaWNoIHRoZSBIVE1MIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBr
ZWVwU2NyaXB0cyBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGluY2x1ZGUgc2NyaXB0
cyBwYXNzZWQgaW4gdGhlIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VIVE1MKGRhdGE6
IHN0cmluZywgY29udGV4dD86IEhUTUxFbGVtZW50LCBrZWVwU2NyaXB0cz86IGJvb2xlYW4pOiBh
bnlbXTtcblxuICAgIEFuaW1hdGlvbihlbGVtOiBhbnksIHByb3BlcnRpZXM6IGFueSwgb3B0aW9u
czogYW55KTogYW55O1xuXG4gICAgZWFzaW5nOiBKUXVlcnlFYXNpbmc7XG59XG5cbi8qXG4gICAg
VGhlIGpRdWVyeSBpbnN0YW5jZSBtZW1iZXJzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeSB7XG4gICAg
Ly8gQUpBWFxuICAgIGFqYXhDb21wbGV0ZShoYW5kbGVyOiBhbnkpOiBKUXVlcnk7XG4gICAgYWph
eEVycm9yKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBl
eGNlcHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTZW5kKGhhbmRsZXI6IChl
dmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNlcHRpb246IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdGFydChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFN0b3AoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhTdWNj
ZXNzKGhhbmRsZXI6IChldmVudDogYW55LCBqcVhIUjogYW55LCBzZXR0aW5nczogYW55LCBleGNl
cHRpb246IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbG9hZCh1cmw6IHN0cmluZywgZGF0
YT86IGFueSwgY29tcGxldGU/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzZXJpYWxpemUoKTogc3Ry
aW5nO1xuICAgIHNlcmlhbGl6ZUFycmF5KCk6IGFueVtdO1xuXG4gICAgLy8gQXR0cmlidXRlc1xu
ICAgIGFkZENsYXNzKGNsYXNzTmFtZXM6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBhZGRDbGFzcyhm
dW5jOiAoaW5kZXg6IGFueSwgY3VycmVudENsYXNzOiBhbnkpID0+IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRCYWNrL1xuICAgIGFkZEJhY2soc2Vs
ZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cblxuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3Ry
aW5nKTogc3RyaW5nO1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55
KTogSlF1ZXJ5O1xuICAgIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6
IGFueSwgYXR0cjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihtYXA6IGFueSk6IEpR
dWVyeTtcblxuICAgIGhhc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAg
IGh0bWwoKTogc3RyaW5nO1xuICAgIGh0bWwoaHRtbFN0cmluZzogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGh0bWwoaHRtbENvbnRlbnQ6IChpbmRleDogbnVtYmVyLCBvbGRodG1sOiBzdHJpbmcpID0+
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1sKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAg
cHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIHByb3AobWFwOiBhbnkpOiBKUXVlcnk7
XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIG9sZFBy
b3BlcnR5VmFsdWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWU/
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcmVtb3ZlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNs
czogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVQcm9wKHByb3BlcnR5TmFtZTog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHN3
dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhzd3RjaD86IGJvb2xlYW4p
OiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3MoZnVuYzogKGluZGV4OiBhbnksIGNsczogYW55LCBz
d3RjaDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB2YWwoKTogYW55O1xuICAgIHZhbCh2
YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7
XG4gICAgdmFsKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgdmFsKGZ1bmM6IChpbmRleDog
YW55LCB2YWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXQg
dGhlIHZhbHVlIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRo
ZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0
eU5hbWUgQSBDU1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3Ry
aW5nKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVy
dGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1
ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9w
ZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9w
ZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1i
ZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0
aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVl
IEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3Bl
cnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQg
ZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3Bl
cnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJv
cGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVt
YmVyW10pOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9w
ZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZh
bHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRoaXMgaXMgdGhlIGN1
cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50
IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxuICAgICAqL1xuICAg
IGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVtYmVyLCB2YWx1ZTog
c3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSB2YWx1ZSB0byBzZXQuIHRo
aXMgaXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gUmVjZWl2ZXMgdGhlIGluZGV4IHBvc2l0aW9uIG9m
IHRoZSBlbGVtZW50IGluIHRoZSBzZXQgYW5kIHRoZSBvbGQgdmFsdWUgYXMgYXJndW1lbnRzLlxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IChpbmRleDogbnVt
YmVyLCB2YWx1ZTogbnVtYmVyKSA9PiBudW1iZXIpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
U2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3Qgb2YgcHJv
cGVydHktdmFsdWUgcGFpcnMgdG8gc2V0LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0aWVzOiBP
YmplY3QpOiBKUXVlcnk7XG5cbiAgICBoZWlnaHQoKTogbnVtYmVyO1xuICAgIGhlaWdodCh2YWx1
ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIGhlaWdodCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGhlaWdodChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIGlubmVySGVpZ2h0KCk6IG51bWJlcjtcbiAgICBpbm5lckhlaWdodCh2YWx1ZTog
bnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJXaWR0aCgpOiBudW1iZXI7XG4gICAgaW5uZXJX
aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0KCk6IHsgbGVmdDogbnVt
YmVyOyB0b3A6IG51bWJlcjsgfTtcbiAgICBvZmZzZXQoY29vcmRpbmF0ZXM6IGFueSk6IEpRdWVy
eTtcbiAgICBvZmZzZXQoZnVuYzogKGluZGV4OiBhbnksIGNvb3JkczogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJl
cjtcbiAgICBvdXRlckhlaWdodCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9vbGVh
bik6IEpRdWVyeTtcblxuICAgIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBu
dW1iZXI7XG4gICAgb3V0ZXJXaWR0aCh2YWx1ZTogbnVtYmVyLCBpbmNsdWRlTWFyZ2luPzogYm9v
bGVhbik6IEpRdWVyeTtcblxuICAgIHBvc2l0aW9uKCk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51
bWJlcjsgfTtcblxuICAgIHNjcm9sbExlZnQoKTogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQodmFs
dWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHNjcm9sbFRvcCgpOiBudW1iZXI7XG4gICAgc2Ny
b2xsVG9wKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICB3aWR0aCgpOiBudW1iZXI7XG4g
ICAgd2lkdGgodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB3aWR0aCh2YWx1ZTogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIHdpZHRoKGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGF0YVxuICAgIGNsZWFyUXVldWUocXVldWVOYW1lPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpR
dWVyeTtcbiAgICBkYXRhKG9iajogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pOiBKUXVlcnk7XG4g
ICAgZGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBkZXF1ZXVlKHF1ZXVlTmFtZT86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZURhdGEobmFtZU9yTGlzdD86IGFueSk6IEpRdWVy
eTtcblxuICAgIC8vIERlZmVycmVkXG4gICAgcHJvbWlzZSh0eXBlPzogYW55LCB0YXJnZXQ/OiBh
bnkpOiBKUXVlcnlQcm9taXNlPGFueT47XG5cbiAgICAvLyBFZmZlY3RzXG4gICAgYW5pbWF0ZShw
cm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1
ZXJ5O1xuICAgIGFuaW1hdGUocHJvcGVydGllczogYW55LCBkdXJhdGlvbj86IGFueSwgZWFzaW5n
Pzogc3RyaW5nLCBjb21wbGV0ZT86IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuICAgIGFuaW1hdGUocHJv
cGVydGllczogYW55LCBvcHRpb25zOiB7IGR1cmF0aW9uPzogYW55OyBlYXNpbmc/OiBzdHJpbmc7
IGNvbXBsZXRlPzogRnVuY3Rpb247IHN0ZXA/OiBGdW5jdGlvbjsgcXVldWU/OiBib29sZWFuOyBz
cGVjaWFsRWFzaW5nPzogYW55OyB9KTogSlF1ZXJ5O1xuXG4gICAgZGVsYXkoZHVyYXRpb246IG51
bWJlciwgcXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgZmFkZUluKGR1cmF0aW9u
PzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlSW4oZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRl
T3V0KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlT3V0
KGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJlciwgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvKGR1cmF0aW9uOiBhbnksIG9wYWNpdHk6IG51bWJl
ciwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVU
b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBmaW5pc2goKTogSlF1ZXJ5O1xuXG4gICAgaGlkZShkdXJhdGlvbj86IGFu
eSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgaGlkZShkdXJhdGlvbj86IGFueSwgZWFz
aW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNob3coZHVyYXRp
b24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNob3coZHVyYXRpb24/OiBh
bnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlk
ZURvd24oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRl
RG93bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcblxuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6
IEpRdWVyeTtcbiAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5n
LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnks
IGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVXAoZHVyYXRpb24/OiBhbnksIGVh
c2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzdG9wKGNsZWFy
UXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHN0b3Ao
cXVldWU/OiBhbnksIGNsZWFyUXVldWU/OiBib29sZWFuLCBqdW1wVG9FbmQ/OiBib29sZWFuKTog
SlF1ZXJ5O1xuXG4gICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgdG9nZ2xlKHNob3dPckhpZGU6IGJvb2xlYW4pOiBKUXVl
cnk7XG5cbiAgICAvLyBFdmVudHNcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERh
dGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiBhbnks
IHByZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZChldmVudFR5cGU6IHN0
cmluZywgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5kKC4uLmV2ZW50
czogYW55W10pOiBKUXVlcnk7XG5cbiAgICBibHVyKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBibHVyKGV2ZW50RGF0YT86IGFu
eSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiY2hhbmdlXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGhh
bmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShldmVudERhdGE/
OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNsaWNrXCIgZXZlbnQg
b24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBjbGljaygpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICov
XG4gICAgY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjbGlj
ayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImRi
bGNsaWNrXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBkYmxjbGljaygpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImRi
bGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIGRibGNsaWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAg
ICovXG4gICAgZGJsY2xpY2soZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZGVsZWdhdGUoc2Vs
ZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdn
ZXIgdGhlIFwiZm9jdXNcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGZvY3Vz
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhl
IFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgZm9jdXMoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFz
c2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBmb2N1cyhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFu
IGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUg
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9jdXNpblwiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c2luKGV2ZW50RGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZm9j
dXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgZm9jdXNvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBmb2N1c291dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICog
QmluZCB0d28gaGFuZGxlcnMgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVk
IHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIGFuZCBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbiBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhh
bmRsZXJPdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgbGVh
dmVzIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55LCBoYW5kbGVyT3V0OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhIHNpbmdsZSBoYW5kbGVyIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRl
ZCB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXJJbk91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50LlxuICAg
ICAqL1xuICAgIGhvdmVyKGhhbmRsZXJJbk91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJr
ZXlkb3duXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlkb3duKCk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5
ZG93blwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBrZXlkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIGtleWRvd25cIlwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXlkb3duKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwia2V5cHJlc3NcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGtleXByZXNzKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQg
ZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5p
bmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudERhdGE/OiBhbnksIGhh
bmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleXVwXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXl1cCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBj
b250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5c
biAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRo
ZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBc
ImxvYWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBsb2FkKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoZXZl
bnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWRv
d25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlZG93bigpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNl
ZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBB
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIG1vdXNlZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbW91c2Vkb3duKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2VlbnRlclwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2VlbnRlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVu
IHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRl
cihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlbGVhdmVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNl
bGVhdmUoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZShoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgbGVh
dmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVj
dCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxl
ci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoZXZlbnREYXRhOiBP
YmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW1vdmVc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNlbW92ZSgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlbW92
ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlbW92ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmpl
Y3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgbW91c2Vtb3ZlKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwibW91c2VvdXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNlb3V0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdXRcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW91dChldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50IG9uIGFu
IGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVyXCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVy
KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJt
b3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIo
ZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUg
XCJtb3VzZXVwXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZXVwKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
bW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxl
ciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIG1vdXNldXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcIm1vdXNldXBcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZXVwKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIG9mZigpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgb3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tc
IiwgXCJrZXlkb3duLm15UGx1Z2luXCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFt
IHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxs
eSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9y
IHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAg
b2ZmKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcj86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMg
T25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1l
c3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24u
bXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhh
bmRsZXIgZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0
aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcs
IGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IHdoZXJlIHRoZSBzdHJpbmcga2V5cyByZXByZXNl
bnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBu
YW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgaGFuZGxlciBmdW5jdGlvbnMgcHJl
dmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2Vk
IHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqL1xuICAgIG9m
ZihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9u
IGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAq
XG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQg
dHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5
ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNv
IGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyBy
ZXR1cm4gZmFsc2UuIFJlc3QgcGFyYW1ldGVyIGFyZ3MgaXMgZm9yIG9wdGlvbmFsIHBhcmFtZXRl
cnMgcGFzc2VkIHRvIGpRdWVyeS50cmlnZ2VyKCkuIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHBhcmFt
ZXRlcnMgb24gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMgb3B0
aW9uYWwgKD8gc3ludGF4KS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCwgLi4uYXJnczogYW55W10pID0+IGFu
eSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5j
dGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBc
ImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRl
ZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxl
Y3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFs
bG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1
cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJp
bmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5
cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRv
d24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcg
dG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0
cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhl
IGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBl
bGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5k
bGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBv
bihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3Jl
IGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBz
dHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMg
dGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9t
aXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgcGFzc2VkIHRv
IHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMuXG4gICAgICov
XG4gICAgb24oZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBhbnks
IGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVy
IHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0
IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2
ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20gZXZl
bnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGF0
IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVu
dCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2Ug
cGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBlcywg
c3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVzLlxu
ICAgICAqIEBwYXJhbSBkYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGRhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBU
aGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50
IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEg
c2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVk
IGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxs
IG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hl
cyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2Ug
aXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5
IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgc2Vs
ZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4g
ZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBv
bmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFs
IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxu
ICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRl
c2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlz
IHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICog
QHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0
YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUg
ZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQg
c2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmlu
Zywgc2VsZWN0b3I6IHN0cmluZywgZGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRh
Y2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlz
IGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5
cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBv
cHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxl
Y3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBz
ZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVj
dG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVu
IGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0
YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50
IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSwgc2VsZWN0b3I/OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBKUXVlcnk7XG5cblxuICAgIC8qKlxu
ICAgICAqIFNwZWNpZnkgYSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIERPTSBpcyBmdWxs
eSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgYWZ0ZXIgdGhlIERPTSBpcyByZWFkeS5cbiAgICAgKi9cbiAgICByZWFkeShoYW5kbGVy
OiBGdW5jdGlvbik6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwicmVz
aXplXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICByZXNpemUoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJyZXNpemVc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHJlc2l6ZShoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
cmVzaXplKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcInNjcm9sbFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2Nyb2xsKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwi
c2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzY3JvbGwoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIHNjcm9sbChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJzZWxlY3RcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNl
bGVjdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2VsZWN0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBzZWxlY3QoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic3VibWl0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzdWJtaXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGhhbmRsZXI6IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0cmln
Z2VyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogSlF1ZXJ5
O1xuICAgIHRyaWdnZXIoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0KTogSlF1ZXJ5O1xuXG4gICAg
dHJpZ2dlckhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczogYW55
W10pOiBPYmplY3Q7XG5cbiAgICB1bmJpbmQoZXZlbnRUeXBlPzogc3RyaW5nLCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVu
YmluZChldmVudFR5cGU6IHN0cmluZywgZmxzOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHVuYmlu
ZChldnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHVuZGVsZWdhdGUoKTogSlF1ZXJ5O1xuICAgIHVu
ZGVsZWdhdGUoc2VsZWN0b3I6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZl
bnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxl
Z2F0ZShzZWxlY3RvcjogYW55LCBldmVudHM6IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRl
KG5hbWVzcGFjZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgdW5sb2FkKGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmxvYWQo
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgY29udGV4dDogRWxl
bWVudDtcbiAgICBqcXVlcnk6IHN0cmluZztcblxuICAgIGVycm9yKGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBlcnJvcihldmVu
dERhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgcHVzaFN0YWNrKGVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtc
biAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFueVtdLCBuYW1lOiBhbnksIGFyZ3VtZW50czogYW55
KTogSlF1ZXJ5O1xuXG4gICAgLy8gTWFuaXB1bGF0aW9uXG4gICAgYWZ0ZXIoLi4uY29udGVudDog
YW55W10pOiBKUXVlcnk7XG4gICAgYWZ0ZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIGFwcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhcHBl
bmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
YXBwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBiZWZvcmUoLi4uY29udGVudDog
YW55W10pOiBKUXVlcnk7XG4gICAgYmVmb3JlKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBjbG9uZSh3aXRoRGF0YUFuZEV2ZW50cz86IGJvb2xlYW4sIGRlZXBXaXRo
RGF0YUFuZEV2ZW50cz86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICBkZXRhY2goc2VsZWN0b3I/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBlbXB0eSgpOiBKUXVlcnk7XG5cbiAgICBpbnNlcnRBZnRl
cih0YXJnZXQ6IGFueSk6IEpRdWVyeTtcbiAgICBpbnNlcnRCZWZvcmUodGFyZ2V0OiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBwcmVwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHBy
ZXBlbmQoZnVuYzogKGluZGV4OiBhbnksIGh0bWw6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgcHJlcGVuZFRvKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlKHNlbGVjdG9y
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZUFsbCh0YXJnZXQ6IGFueSk6IEpRdWVyeTtc
blxuICAgIHJlcGxhY2VXaXRoKGZ1bmM6IGFueSk6IEpRdWVyeTtcblxuICAgIHRleHQoKTogc3Ry
aW5nO1xuICAgIHRleHQodGV4dFN0cmluZzogYW55KTogSlF1ZXJ5O1xuICAgIHRleHQodGV4dFN0
cmluZzogKGluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xu
XG4gICAgdG9BcnJheSgpOiBhbnlbXTtcblxuICAgIHVud3JhcCgpOiBKUXVlcnk7XG5cbiAgICB3
cmFwKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIHdyYXAoZnVuYzogKGluZGV4
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBBbGwod3JhcHBpbmdFbGVtZW50OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwSW5uZXIod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVl
cnk7XG4gICAgd3JhcElubmVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZWFjaChmdW5jOiAoaW5kZXg6IGFueSwgZWxlbTog
RWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgZ2V0KGluZGV4PzogbnVtYmVyKTogYW55
O1xuXG4gICAgaW5kZXgoKTogbnVtYmVyO1xuICAgIGluZGV4KHNlbGVjdG9yOiBzdHJpbmcpOiBu
dW1iZXI7XG4gICAgaW5kZXgoZWxlbWVudDogYW55KTogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVy
dGllc1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgW3g6
IHN0cmluZ106IGFueTtcbiAgICBbeDogbnVtYmVyXTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBU
cmF2ZXJzaW5nXG4gICAgYWRkKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVl
cnk7XG4gICAgYWRkKC4uLmVsZW1lbnRzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZGQoaHRtbDog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGNo
aWxkcmVuKHNlbGVjdG9yPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgY2xvc2VzdChzZWxlY3Rvcjog
c3RyaW5nKTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86
IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcbiAg
ICBjbG9zZXN0KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yczog
YW55LCBjb250ZXh0PzogRWxlbWVudCk6IGFueVtdO1xuXG4gICAgY29udGVudHMoKTogSlF1ZXJ5
O1xuXG4gICAgZW5kKCk6IEpRdWVyeTtcblxuICAgIGVxKGluZGV4OiBudW1iZXIpOiBKUXVlcnk7
XG5cbiAgICBmaWx0ZXIoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZnVu
YzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBmaWx0ZXIoZWxlbWVudDogYW55
KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpbmQo
c2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IEpRdWVy
eTtcbiAgICBmaW5kKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmlyc3QoKTogSlF1ZXJ5
O1xuXG4gICAgaGFzKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGFzKGNvbnRhaW5l
ZDogRWxlbWVudCk6IEpRdWVyeTtcblxuICAgIGlzKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFu
O1xuICAgIGlzKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBib29sZWFuO1xuICAgIGlzKGVs
ZW1lbnQ6IGFueSk6IGJvb2xlYW47XG4gICAgaXMob2JqOiBKUXVlcnkpOiBib29sZWFuO1xuXG4g
ICAgbGFzdCgpOiBKUXVlcnk7XG5cbiAgICBtYXAoY2FsbGJhY2s6IChpbmRleDogYW55LCBkb21F
bGVtZW50OiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBuZXh0KHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dEFsbChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuICAgIG5leHRVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIG5leHRVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIG5leHRVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIG5vdChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIG5vdChm
dW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIG5vdChlbGVtZW50OiBhbnkp
OiBKUXVlcnk7XG4gICAgbm90KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgb2Zmc2V0UGFy
ZW50KCk6IEpRdWVyeTtcblxuICAgIHBhcmVudChzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHBhcmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwYXJlbnRz
VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBw
YXJlbnRzVW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtc
biAgICBwYXJlbnRzVW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICBwcmV2KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldkFsbChz
ZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZVbnRpbChzZWxlY3Rvcj86IHN0
cmluZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChlbGVtZW50Pzog
RWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHByZXZVbnRpbChvYmo/OiBK
UXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHNpYmxpbmdzKHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVt
YmVyKTogSlF1ZXJ5O1xuXG4gICAgLy8gVXRpbGl0aWVzXG5cbiAgICBxdWV1ZShxdWV1ZU5hbWU/
OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVP
ckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7XG4gICAgcXVldWUobmV3UXVldWVPckNhbGxiYWNrOiBh
bnkpOiBKUXVlcnk7XG59XG5kZWNsYXJlIG1vZHVsZSBcImpxdWVyeVwiIHtcbiAgICBleHBvcnQg
PSAkO1xufVxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBKUXVlcnlTdGF0aWM7XG5kZWNsYXJlIHZhciAk
OiBKUXVlcnlTdGF0aWM7XG4vLyBsaWJzL2FuZ3VsYXIvYW5ndWxhci5kLnRzXG4vLyBUeXBlIGRl
ZmluaXRpb25zIGZvciBBbmd1bGFyIEpTIDEuMFxuLy8gUHJvamVjdDogaHR0cDovL2FuZ3VsYXJq
cy5vcmdcbi8vIERlZmluaXRpb25zIGJ5OiBEaWVnbyBWaWxhciA8aHR0cDovL2dpdGh1Yi5jb20v
ZGllZ292aWxhcj5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5r
b3YvRGVmaW5pdGVseVR5cGVkXG5cblxuXG5kZWNsYXJlIHZhciBhbmd1bGFyOiBuZy5JQW5ndWxh
clN0YXRpYztcblxuLy8gU3VwcG9ydCBmb3IgcGFpbmxlc3MgZGVwZW5kZW5jeSBpbmplY3Rpb25c
bmludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAgJGluamVjdDpzdHJpbmdbXTtcbn1cblxuLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuLy8gbmcgbW9kdWxlIChhbmd1bGFyLmpzKVxuLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuZGVjbGFyZSBtb2R1bGUgbmcge1xuXG4gICAgLy8gQWxsIHNlcnZpY2UgcHJv
dmlkZXJzIGV4dGVuZCB0aGlzIGludGVyZmFjZVxuICAgIGludGVyZmFjZSBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgJGdldDogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIEFuZ3VsYXJTdGF0aWNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGlcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuZ3VsYXJT
dGF0aWMge1xuICAgICAgICBiaW5kKGNvbnRleHQ6IGFueSwgZm46IEZ1bmN0aW9uLCAuLi5hcmdz
OiBhbnlbXSk6IEZ1bmN0aW9uO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogc3RyaW5nLCBt
b2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJh
cChlbGVtZW50OiBKUXVlcnksIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEVsZW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6
IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IERvY3Vt
ZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAgICAgIGNv
cHkoc291cmNlOiBhbnksIGRlc3RpbmF0aW9uPzogYW55KTogYW55O1xuICAgICAgICBlbGVtZW50
OiBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljO1xuICAgICAgICBlcXVhbHModmFsdWUxOiBhbnksIHZh
bHVlMjogYW55KTogYm9vbGVhbjtcbiAgICAgICAgZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4u
LnNvdXJjZXM6IGFueVtdKTogYW55O1xuICAgICAgICBmb3JFYWNoKG9iajogYW55LCBpdGVyYXRv
cjogKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIGZyb21Kc29uKGpzb246IHN0cmluZyk6IGFueTtcbiAgICAgICAgaWRlbnRpdHkoYXJn
PzogYW55KTogYW55O1xuICAgICAgICBpbmplY3Rvcihtb2R1bGVzPzogYW55W10pOiBhdXRvLklJ
bmplY3RvclNlcnZpY2U7XG4gICAgICAgIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzRGF0ZSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEZWZpbmVkKHZh
bHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc0VsZW1lbnQodmFsdWU6IGFueSk6IGJvb2xl
YW47XG4gICAgICAgIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlz
TnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc09iamVjdCh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGlzVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBsb3dlcmNhc2Uo
c3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAgIC8qKiBjb25zdHJ1Y3QgeW91ciBhbmd1bGFy
IGFwcGxpY2F0aW9uXG5cdFx0b2ZmaWNpYWwgZG9jczogSW50ZXJmYWNlIGZvciBjb25maWd1cmlu
ZyBhbmd1bGFyIG1vZHVsZXMuXG5cdFx0c2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9hbmd1bGFyLk1vZHVsZVxuXHRcdCovXG4gICAgICAgIG1vZHVsZShcbiAgICAgICAgICAgIC8q
KiBuYW1lIG9mIHlvdXIgbW9kdWxlIHlvdSB3YW50IHRvIGNyZWF0ZSAqL1xuICAgICAgICAgICAg
bmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgbW9kdWxlcyB5b3VycyBkZXBl
bmRzIG9uICovXG4gICAgICAgICAgICByZXF1aXJlcz86IHN0cmluZ1tdLFxuICAgICAgICAgICAg
Y29uZmlnRnVuY3Rpb24/OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBub29wKC4uLmFyZ3M6IGFu
eVtdKTogdm9pZDtcbiAgICAgICAgdG9Kc29uKG9iajogYW55LCBwcmV0dHk/OiBib29sZWFuKTog
c3RyaW5nO1xuICAgICAgICB1cHBlcmNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgICAg
IHZlcnNpb246IHtcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG1ham9y
OiBudW1iZXI7XG4gICAgICAgICAgICBtaW5vcjogbnVtYmVyO1xuICAgICAgICAgICAgZG90OiBu
dW1iZXI7XG4gICAgICAgICAgICBjb2RlbmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIE1vZHVsZVxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLk1vZHVsZVxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIGludGVyZmFjZSBJTW9kdWxlIHtcbiAgICAgICAgYW5pbWF0aW9uKG5hbWU6
IHN0cmluZywgYW5pbWF0aW9uRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBh
bmltYXRpb24obmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJ
TW9kdWxlO1xuICAgICAgICBhbmltYXRpb24ob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAg
ICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhv
ZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUg
bG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWcoY29uZmlnRm46IEZ1bmN0aW9uKTogSU1v
ZHVsZTtcbiAgICAgICAgLyoqIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2Ug
dGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQg
b24gbW9kdWxlIGxvYWRpbmdcblx0XHQgKi9cbiAgICAgICAgY29uZmlnKGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIGNvbnN0YW50KG9iamVjdDogT2JqZWN0
KTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6
IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAg
ICAgICAgY29udHJvbGxlcihvYmplY3QgOiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBkaXJl
Y3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9u
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShvYmplY3Q6IE9iamVjdCk6IElN
b2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBzZXJ2aWNlRmFjdG9yeUZ1bmN0
aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBp
bmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5
KG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywg
ZmlsdGVyRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGZpbHRl
cihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7
XG4gICAgICAgIGZpbHRlcihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTog
SU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRD
b25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihvYmplY3Q6IE9i
amVjdCk6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbml0aWFsaXphdGlvbkZ1bmN0aW9uOiBGdW5j
dGlvbik6IElNb2R1bGU7XG4gICAgICAgIHJ1bihpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55
W10pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgc2VydmljZUNvbnN0
cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBz
ZXJ2aWNlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUobmFtZTogc3Ry
aW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgdmFsdWUob2JqZWN0OiBPYmplY3Qp
OiBJTW9kdWxlO1xuXG4gICAgICAgIC8vIFByb3BlcnRpZXNcbiAgICAgICAgbmFtZTogc3RyaW5n
O1xuICAgICAgICByZXF1aXJlczogc3RyaW5nW107XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gQXR0cmlidXRlc1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlc1xuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXR0cmlidXRlcyB7XG5cdC8vIHRoaXMgaXMgbmVj
ZXNzYXJ5IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBzY29wZWQgYXR0cmlidXRlcy4gaXQncyBu
b3QgdmVyeSBlbGVnYW50XG5cdC8vIGJlY2F1c2UgeW91IGhhdmUgdG8gdXNlIGF0dHJzWydmb28n
XSBpbnN0ZWFkIG9mIGF0dHJzLmZvbyBidXQgSSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheVxu
XHQvLyB0aGlzIHNob3VsZCByZWFsbHkgYmUgbGltaXRlZCB0byByZXR1cm4gc3RyaW5nIGJ1dCBp
dCBjcmVhdGVzIHRoaXMgcHJvYmxlbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTcyMDE4
NTQvMTY1NjU2XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG5cbiAgICAgICAgLy8gQWRkcyB0aGUg
Q1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIHRvIHRo
ZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4g
YW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkXG4gICAgICAgIC8vIGZvciB0aGUgY2xhc3MgYWRk
aXRpb24uXG4gICAgICAgICRhZGRDbGFzcyhjbGFzc1ZhbDogc3RyaW5nKTogdm9pZDtcblxuICAg
ICAgICAvLyBSZW1vdmVzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFz
c1ZhbCBwYXJhbWV0ZXIgZnJvbSB0aGVcbiAgICAgICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9u
cyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3JcbiAg
ICAgICAgLy8gdGhlIGNsYXNzIHJlbW92YWwuXG4gICAgICAgICRyZW1vdmVDbGFzcyhjbGFzc1Zh
bDogc3RyaW5nKTogdm9pZDtcblxuICAgICAgICAvLyBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRl
IHZhbHVlLlxuICAgICAgICAkc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcblxu
ICAgICAgICAvLyBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxuICAgICAgICAv
LyBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBu
ZXh0ICRkaWdlc3RcbiAgICAgICAgLy8gZm9sbG93aW5nIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2
ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVyIHRoZVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZWQg
dmFsdWUgY2hhbmdlcy5cbiAgICAgICAgJG9ic2VydmUobmFtZTogc3RyaW5nLCBmbjoodmFsdWU/
OmFueSk9PmFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEEgbWFwIG9mIERPTSBlbGVtZW50
IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlzIG5lZWRlZFxu
ICAgICAgICAvLyB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNr
IHRvIGFjdHVhbCBuYW1lLlxuICAgICAgICAkYXR0cjogT2JqZWN0O1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZvcm1Db250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVy
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGb3JtQ29udHJvbGxlciB7
XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xu
ICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAg
ICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJGFkZENvbnRyb2woY29udHJvbDogbmcuSU5nTW9k
ZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHJlbW92ZUNvbnRyb2woY29udHJvbDogbmcu
SU5nTW9kZWxDb250cm9sbGVyKTogdm9pZDtcbiAgICAgICAgJHNldERpcnR5KCk6IHZvaWQ7XG4g
ICAgICAgICRzZXRQcmlzdGluZSgpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIE5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElOZ01vZGVsQ29udHJvbGxlciB7
XG4gICAgICAgICRyZW5kZXIoKTogdm9pZDtcbiAgICAgICAgJHNldFZhbGlkaXR5KHZhbGlkYXRp
b25FcnJvcktleTogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKTogdm9pZDtcbiAgICAgICAgLy8g
RG9jdW1lbnRhdGlvbiBzdGF0ZXMgdmlld1ZhbHVlIGFuZCBtb2RlbFZhbHVlIHRvIGJlIGEgc3Ry
aW5nIGJ1dCBvdGhlclxuICAgICAgICAvLyB0eXBlcyBkbyB3b3JrIGFuZCBpdCdzIGNvbW1vbiB0
byB1c2UgdGhlbS5cbiAgICAgICAgJHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcbiAg
ICAgICAgJHZpZXdWYWx1ZTogYW55O1xuXG4gICAgICAgICRtb2RlbFZhbHVlOiBhbnk7XG5cbiAg
ICAgICAgJHBhcnNlcnM6IElNb2RlbFBhcnNlcltdO1xuICAgICAgICAkZm9ybWF0dGVyczogSU1v
ZGVsRm9ybWF0dGVyW107XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkcHJpc3RpbmU6
IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAgJHZhbGlkOiBib29s
ZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2Ug
SU1vZGVsUGFyc2VyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAg
aW50ZXJmYWNlIElNb2RlbEZvcm1hdHRlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xu
ICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNjb3BlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGUuU2NvcGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNjb3BlIHtcbiAgICAgICAgJGFwcGx5
KCk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDogc3RyaW5nKTogYW55O1xuICAgICAgICAkYXBw
bHkoZXhwOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogYW55O1xuXG4gICAgICAgICRicm9hZGNh
c3QobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG4gICAgICAg
ICRkZXN0cm95KCk6IHZvaWQ7XG4gICAgICAgICRkaWdlc3QoKTogdm9pZDtcbiAgICAgICAgJGVt
aXQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElBbmd1bGFyRXZlbnQ7XG5cbiAgICAg
ICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBs
ZW1lbnRhdG9uIGNvdW50cyBvbiBpdFxuICAgICAgICAkZXZhbChleHByZXNzaW9uOiBzdHJpbmcs
IGFyZ3M/OiBPYmplY3QpOiBhbnk7XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IChzY29wZTog
SVNjb3BlKSA9PiBhbnksIGFyZ3M/OiBPYmplY3QpOiBhbnk7XG5cbiAgICAgICAgLy8gRG9jdW1l
bnRhdGlvbiBzYXlzIGV4cCBpcyBvcHRpb25hbCwgYnV0IGFjdHVhbCBpbXBsZW1lbnRhdG9uIGNv
dW50cyBvbiBpdFxuICAgICAgICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQ7
XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSk6
IHZvaWQ7XG5cbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYnkgdGhlIGltcGxlbWVudGF0
aW9uIGNoZWNraW5nIHN0cmF0ZWd5XG4gICAgICAgICRuZXcoaXNvbGF0ZT86IGJvb2xlYW4pOiBJ
U2NvcGU7XG5cbiAgICAgICAgJG9uKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogSUFu
Z3VsYXJFdmVudCwgLi4uYXJnczogYW55W10pID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAg
ICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVj
dEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHBy
ZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnks
IHNjb3BlOiBJU2NvcGUpID0+IGFueSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rp
b247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBh
bnksIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlv
bjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFu
eSwgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29w
ZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcblxuICAgICAg
ICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcjogKG5l
d1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0
aW9uO1xuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uKHdhdGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJ
U2NvcGUpID0+IGFueSwgbGlzdGVuZXI6IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBz
Y29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkcGFyZW50OiBJU2Nv
cGU7XG5cbiAgICAgICAgJGlkOiBudW1iZXI7XG5cbiAgICAgICAgLy8gSGlkZGVuIG1lbWJlcnNc
biAgICAgICAgJCRpc29sYXRlQmluZGluZ3M6IGFueTtcbiAgICAgICAgJCRwaGFzZTogYW55O1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJQW5ndWxhckV2ZW50IHtcbiAgICAgICAgdGFyZ2V0U2Nv
cGU6IElTY29wZTtcbiAgICAgICAgY3VycmVudFNjb3BlOiBJU2NvcGU7XG4gICAgICAgIG5hbWU6
IHN0cmluZztcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IEZ1bmN0aW9uO1xuICAgICAgICBkZWZh
dWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBvbmx5IGV2ZW50
cyB0aGF0IHdlcmUgJGVtaXQtdGVkXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbj86IEZ1bmN0aW9u
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdpbmRvd1NlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHdpbmRvd1xuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJV2luZG93U2VydmljZSBleHRlbmRz
IFdpbmRvdyB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQnJvd3NlclNlcnZp
Y2VcbiAgICAvLyBUT0RPIHVuZG9jdW1lbnRlZCwgc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0
aGUgc291cmNlIGNvZGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUJy
b3dzZXJTZXJ2aWNlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBUaW1lb3V0
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kdGlt
ZW91dFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJVGltZW91dFNlcnZp
Y2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5PzogbnVtYmVyLCBpbnZva2VBcHBs
eT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVBy
b21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gSW50ZXJ2YWxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRpbnRlcnZhbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJSW50ZXJ2YWxTZXJ2aWNlIHtcbiAgICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheTogbnVt
YmVyLCBjb3VudD86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29sZWFuKTogSVByb21pc2U8YW55
PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFueT4pOiBib29sZWFuO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZpbHRlclNlcnZpY2VcbiAgICAv
LyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyUHJvdmlkZXJcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZpbHRlclNlcnZpY2Uge1xuICAgICAg
ICAobmFtZTogc3RyaW5nKTogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElGaWx0
ZXJQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3Rlcihu
YW1lOiBzdHJpbmcsIGZpbHRlckZhY3Rvcnk6IEZ1bmN0aW9uKTogSVNlcnZpY2VQcm92aWRlcjtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbGVTZXJ2aWNlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhbGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2FsZVNlcnZpY2Uge1xuICAgICAg
ICBpZDogc3RyaW5nO1xuXG4gICAgICAgIC8vIFRoZXNlIGFyZSBub3QgZG9jdW1lbnRlZFxuICAg
ICAgICAvLyBDaGVjayBhbmd1bGFyJ3MgaTE4biBmaWxlcyBmb3IgZXhlbXBsZXNcbiAgICAgICAg
TlVNQkVSX0ZPUk1BVFM6IElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yO1xuICAgICAgICBE
QVRFVElNRV9GT1JNQVRTOiBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yO1xuICAgICAg
ICBwbHVyYWxDYXQ6IChudW06IGFueSkgPT4gc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvciB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiBz
dHJpbmc7XG4gICAgICAgIEdST1VQX1NFUDogc3RyaW5nO1xuICAgICAgICBQQVRURVJOUzogSUxv
Y2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yW107XG4gICAgICAgIENVUlJFTkNZX1NZTTogc3Ry
aW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0
b3Ige1xuICAgICAgICBtaW5JbnQ6IG51bWJlcjtcbiAgICAgICAgbWluRnJhYzogbnVtYmVyO1xu
ICAgICAgICBtYXhGcmFjOiBudW1iZXI7XG4gICAgICAgIHBvc1ByZTogc3RyaW5nO1xuICAgICAg
ICBwb3NTdWY6IHN0cmluZztcbiAgICAgICAgbmVnUHJlOiBzdHJpbmc7XG4gICAgICAgIG5lZ1N1
Zjogc3RyaW5nO1xuICAgICAgICBnU2l6ZTogbnVtYmVyO1xuICAgICAgICBsZ1NpemU6IG51bWJl
cjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRv
ciB7XG4gICAgICAgIE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRNT05USDogc3RyaW5n
W107XG4gICAgICAgIERBWTogc3RyaW5nW107XG4gICAgICAgIFNIT1JUREFZOiBzdHJpbmdbXTtc
biAgICAgICAgQU1QTVM6IHN0cmluZ1tdO1xuICAgICAgICBtZWRpdW06IHN0cmluZztcbiAgICAg
ICAgc2hvcnQ6IHN0cmluZztcbiAgICAgICAgZnVsbERhdGU6IHN0cmluZztcbiAgICAgICAgbG9u
Z0RhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtRGF0ZTogc3RyaW5nO1xuICAgICAgICBzaG9y
dERhdGU6IHN0cmluZztcbiAgICAgICAgbWVkaXVtVGltZTogc3RyaW5nO1xuICAgICAgICBzaG9y
dFRpbWU6IHN0cmluZztcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBM
b2dTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRs
b2dcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xu
ICAgICAgICBkZWJ1ZzogSUxvZ0NhbGw7XG4gICAgICAgIGVycm9yOiBJTG9nQ2FsbDtcbiAgICAg
ICAgaW5mbzogSUxvZ0NhbGw7XG4gICAgICAgIGxvZzogSUxvZ0NhbGw7XG4gICAgICAgIHdhcm46
IElMb2dDYWxsO1xuICAgIH1cblxuICAgIC8vIFdlIGRlZmluZSB0aGlzIGFzIHNlcGFyZXRlIGlu
dGVyZmFjZSBzbyB3ZSBjYW4gcmVvcGVuIGl0IGxhdGVyIGZvclxuICAgIC8vIHRoZSBuZ01vY2sg
bW9kdWxlLlxuICAgIGludGVyZmFjZSBJTG9nQ2FsbCB7XG4gICAgICAgICguLi5hcmdzOiBhbnlb
XSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUGFyc2VT
ZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRwYXJz
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUGFyc2VTZXJ2aWNlIHtc
biAgICAgICAgKGV4cHJlc3Npb246IHN0cmluZyk6IElDb21waWxlZEV4cHJlc3Npb247XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlZEV4cHJlc3Npb24ge1xuICAgICAgICAoY29udGV4
dDogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgbm90
IHByb3ZpZGVkLCB1bmRlZmluZWQgaXMgZ29ubmEgYmUgdXNlZCBzaW5jZSB0aGUgaW1wbGVtZW50
YXRpb25cbiAgICAgICAgLy8gZG9lcyBub3QgY2hlY2sgdGhlIHBhcmFtZXRlci4gTGV0J3MgZm9y
Y2UgYSB2YWx1ZSBmb3IgY29uc2lzdGVuY3kuIElmIGNvbnN1bWVyXG4gICAgICAgIC8vIHdoYW50
cyB0byB1bmRlZmluZSBpdCwgcGFzcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGV4cGxpY2l0bHkuXG4g
ICAgICAgIGFzc2lnbihjb250ZXh0OiBhbnksIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYXRpb25TZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25Qcm92aWRlclxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2Rldl9ndWlkZS5zZXJ2aWNlcy4k
bG9jYXRpb25cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9u
U2VydmljZSB7XG4gICAgICAgIGFic1VybCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2goKTogc3Ry
aW5nO1xuICAgICAgICBoYXNoKG5ld0hhc2g6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIGhvc3QoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKCk6IHN0cmluZztcbiAgICAgICAg
cGF0aChuZXdQYXRoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBwb3J0KCk6
IG51bWJlcjtcbiAgICAgICAgcHJvdG9jb2woKTogc3RyaW5nO1xuICAgICAgICByZXBsYWNlKCk6
IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaCgpOiBhbnk7XG4gICAgICAgIHNlYXJj
aChwYXJhbWV0ZXJzTWFwOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2go
cGFyYW1ldGVyOiBzdHJpbmcsIHBhcmFtZXRlclZhbHVlOiBhbnkpOiBJTG9jYXRpb25TZXJ2aWNl
O1xuICAgICAgICB1cmwoKTogc3RyaW5nO1xuICAgICAgICB1cmwodXJsOiBzdHJpbmcpOiBJTG9j
YXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYXRpb25Qcm92aWRlciBl
eHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBoYXNoUHJlZml4KCk6IHN0cmluZztc
biAgICAgICAgaGFzaFByZWZpeChwcmVmaXg6IHN0cmluZyk6IElMb2NhdGlvblByb3ZpZGVyO1xu
ICAgICAgICBodG1sNU1vZGUoKTogYm9vbGVhbjtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9u
IHN0YXRlcyB0aGF0IHBhcmFtZXRlciBpcyBzdHJpbmcsIGJ1dFxuICAgICAgICAvLyBpbXBsZW1l
bnRhdGlvbiB0ZXN0cyBpdCBhcyBib29sZWFuLCB3aGljaCBtYWtlcyBtb3JlIHNlbnNlXG4gICAg
ICAgIC8vIHNpbmNlIHRoaXMgaXMgYSB0b2dnbGVyXG4gICAgICAgIGh0bWw1TW9kZShhY3RpdmU6
IGJvb2xlYW4pOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBEb2N1bWVudFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGRvY3VtZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElEb2N1bWVudFNlcnZpY2UgZXh0ZW5kcyBEb2N1bWVudCB7fVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRXhjZXB0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGV4Y2VwdGlvbkhhbmRsZXJcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUV4Y2VwdGlvbkhhbmRsZXJTZXJ2
aWNlIHtcbiAgICAgICAgKGV4Y2VwdGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZDtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290RWxlbWVudFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RFbGVt
ZW50XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290RWxlbWVudFNl
cnZpY2UgZXh0ZW5kcyBKUXVlcnkge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8v
IFFTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRx
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElRU2VydmljZSB7XG4gICAg
ICAgIGFsbChwcm9taXNlczogSVByb21pc2U8YW55PltdKTogSVByb21pc2U8YW55W10+O1xuICAg
ICAgICBkZWZlcjxUPigpOiBJRGVmZXJyZWQ8VD47XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBh
bnkpOiBJUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgd2hlbjxUPih2YWx1ZTogVCk6IElQcm9taXNl
PFQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoZW48
VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJSHR0cFByb21p
c2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5
Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAg
ICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBJ
UHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBu
b3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0Pjtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQp
ID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQsIG5v
dGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xu
XG5cbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJ
SHR0cFByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8
VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjogYW55KSA9PiBJUHJvbWlzZTxUUmVzdWx0Pik6
IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAo
cmVhc29uOiBhbnkpID0+IFRSZXN1bHQpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuICAgICAgICBm
aW5hbGx5PFRSZXN1bHQ+KGZpbmFsbHlDYWxsYmFjazogKCk9PmFueSk6SVByb21pc2U8VFJlc3Vs
dD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElEZWZlcnJlZDxUPiB7XG4gICAgICAgIHJlc29s
dmUodmFsdWU/OiBUKTogdm9pZDtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQ7
XG4gICAgICAgIG5vdGlmeShzdGF0ZT86YW55KTogdm9pZDtcbiAgICAgICAgcHJvbWlzZTogSVBy
b21pc2U8VD47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5jaG9y
U2Nyb2xsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kYW5jaG9yU2Nyb2xsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElB
bmNob3JTY3JvbGxTZXJ2aWNlIHtcbiAgICAgICAgKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElBbmNob3JTY3JvbGxQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xu
ICAgICAgICBkaXNhYmxlQXV0b1Njcm9sbGluZygpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIENhY2hlRmFjdG9yeVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNhY2hlRmFjdG9yeVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ2FjaGVGYWN0b3J5U2VydmljZSB7XG4gICAgICAg
IC8vIExldHMgbm90IGZvY2UgdGhlIG9wdGlvbnNNYXAgdG8gaGF2ZSB0aGUgY2FwYWNpdHkgbWVt
YmVyLiBFdmVuIHRob3VnaFxuICAgICAgICAvLyBpdCdzIHRoZSBPTkxZIG9wdGlvbiBjb25zaWRl
cmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0b2RheSwgYSBjb25zdW1lclxuICAgICAgICAvLyBt
aWdodCBmaW5kIGl0IHVzZWZ1bCB0byBhc3NvY2lhdGUgc29tZSBvdGhlciBvcHRpb25zIHRvIHRo
ZSBjYWNoZSBvYmplY3QuXG4gICAgICAgIC8vKGNhY2hlSWQ6IHN0cmluZywgb3B0aW9uc01hcD86
IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IENhY2hlT2JqZWN0O1xuICAgICAgICAoY2FjaGVJZDog
c3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogSUNhY2hlT2JqZWN0
O1xuXG4gICAgICAgIC8vIE1ldGhvZHMgYmVsbG93IGFyZSBub3QgZG9jdW1lbnRlZFxuICAgICAg
ICBpbmZvKCk6IGFueTtcbiAgICAgICAgZ2V0IChjYWNoZUlkOiBzdHJpbmcpOiBJQ2FjaGVPYmpl
Y3Q7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDYWNoZU9iamVjdCB7XG4gICAgICAgIGluZm8o
KToge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtc
blxuICAgICAgICAgICAgLy8gTm90IGdhcmFudGVlZCB0byBoYXZlLCBzaW5jZSBpdCdzIGEgbm9u
LW1hbmRhdG9yeSBvcHRpb25cbiAgICAgICAgICAgIC8vY2FwYWNpdHk6IG51bWJlcjtcbiAgICAg
ICAgfTtcbiAgICAgICAgcHV0KGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XG4gICAg
ICAgIGdldCAoa2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIHJlbW92ZShrZXk6IHN0cmluZyk6
IHZvaWQ7XG4gICAgICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xuICAgICAgICBkZXN0cm95KCk6IHZv
aWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ29tcGlsZVNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92
aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQ29tcGlsZVNlcnZp
Y2Uge1xuICAgICAgICAoZWxlbWVudDogc3RyaW5nLCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlu
a2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5j
dGlvbjtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVM
aW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1
bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogSlF1ZXJ5LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRl
TGlua2luZ0Z1bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdG
dW5jdGlvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVQcm92aWRlciBleHRlbmRz
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJl
Y3RpdmVGYWN0b3J5OiBGdW5jdGlvbik6IElDb21waWxlUHJvdmlkZXI7XG5cbiAgICAgICAgLy8g
VW5kb2N1bWVudGVkLCBidXQgaXQgaXMgdGhlcmUuLi5cbiAgICAgICAgZGlyZWN0aXZlKGRpcmVj
dGl2ZXNNYXA6IGFueSk6IElDb21waWxlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiB7XG4gICAgICAgIC8vIExldCdzIGhpbnQgYnV0IG5v
dCBmb3JjZSBjbG9uZUF0dGFjaEZuJ3Mgc2lnbmF0dXJlXG4gICAgICAgIChzY29wZTogSVNjb3Bl
LCBjbG9uZUF0dGFjaEZuPzogKGNsb25lZEVsZW1lbnQ/OiBKUXVlcnksIHNjb3BlPzogSVNjb3Bl
KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gQ29udHJvbGxlclNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJGNvbnRyb2xsZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJQ29udHJvbGxlclNlcnZpY2Uge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUg
ZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHN0YXRlIHRoaXMsIGxvY2FscyBhcmUgb3B0aW9uYWxcbiAg
ICAgICAgKGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFu
eTtcbiAgICAgICAgKGNvbnRyb2xsZXJOYW1lOiBzdHJpbmcsIGxvY2Fscz86IGFueSk6IGFueTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xsZXJQcm92aWRlciBleHRlbmRzIElTZXJ2
aWNlUHJvdmlkZXIge1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGNvbnRyb2xsZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICByZWdpc3RlcihuYW1lOiBzdHJp
bmcsIGRlcGVuZGVuY3lBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10pOiB2b2lkO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBTZXJ2aWNlXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRwU2VydmljZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0
IG1vZXRob2QgYW5kIHVybCBtdXN0IGJlIHByb3ZpZGVkLi4uXG4gICAgICAgIChjb25maWc6IElS
ZXF1ZXN0Q29uZmlnKTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGdldCAodXJsOiBzdHJp
bmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgZGVs
ZXRlICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBoZWFkKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQ
cm9taXNlPGFueT47XG4gICAgICAgIGpzb25wKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE6
IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBw
dXQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJv
bWlzZTxhbnk+O1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG5cbiAgICAgICAg
Ly8gRm9yIGRlYnVnZ2luZywgQlVUIGl0IGlzIGRvY3VtZW50ZWQgYXMgcHVibGljLCBzby4uLlxu
ICAgICAgICBwZW5kaW5nUmVxdWVzdHM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMg
anVzdCBmb3IgaGludGluZy5cbiAgICAvLyBTb21lIG9wZXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFp
bGFibGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0LlxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cCNVc2FnZSBmb3Igb3B0aW9ucyBleHBsYW5hdGlvbnNc
biAgICBpbnRlcmZhY2UgSVJlcXVlc3RDb25maWcge1xuICAgICAgICBtZXRob2Q6IHN0cmluZztc
biAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIHBhcmFtcz86IGFueTtcblxuICAgICAgICAv
LyBYWFggaXQgaGFzIGl0J3Mgb3duIHN0cnVjdHVyZS4uLiAgcGVyaGFwcyB3ZSBzaG91bGQgZGVm
aW5lIGl0IGluIHRoZSBmdXR1cmVcbiAgICAgICAgaGVhZGVycz86IGFueTtcblxuICAgICAgICBj
YWNoZT86IGFueTtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAg
ICAvLyBUaGVzZSBhY2NlcHQgbXVsdGlwbGUgdHlwZXMsIHNvIGxldCdzIGRlZmluZSB0aGVtIGFz
IGFueVxuICAgICAgICBkYXRhPzogYW55O1xuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogYW55
O1xuICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZT86IGFueTtcbiAgICAgICAgdGltZW91dD86IGFu
eTsgLy8gbnVtYmVyIHwgcHJvbWlzZVxuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21p
c2VDYWxsYmFjazxUPiB7XG4gICAgICAgIChkYXRhOiBULCBzdGF0dXM6IG51bWJlciwgaGVhZGVy
czogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nLCBjb25maWc6IElSZXF1ZXN0Q29uZmln
KTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8
VD4ge1xuICAgICAgICBkYXRhPzogVDtcbiAgICAgICAgc3RhdHVzPzogbnVtYmVyO1xuICAgICAg
ICBoZWFkZXJzPzogKGhlYWRlck5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgICAgICBjb25m
aWc/OiBJUmVxdWVzdENvbmZpZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNl
PFQ+IGV4dGVuZHMgSVByb21pc2U8VD4ge1xuICAgICAgICBzdWNjZXNzKGNhbGxiYWNrOiBJSHR0
cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgZXJyb3IoY2Fs
bGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAgICAg
ICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VD
YWxsYmFja0FyZzxUPikgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0
dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAg
ICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHJlc3BvbnNlOiBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPikgPT4gSVByb21pc2U8VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAo
cmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm92aWRlciBleHRlbmRzIElT
ZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBkZWZhdWx0czogSVJlcXVlc3RDb25maWc7XG4gICAg
ICAgIGludGVyY2VwdG9yczogYW55W107XG4gICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzOiBh
bnlbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwQmFja2Vu
ZFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0
dHBCYWNrZW5kXG4gICAgLy8gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZp
Y2UgZGlyZWN0bHkuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElIdHRw
QmFja2VuZFNlcnZpY2Uge1xuICAgICAgICAvLyBYWFggUGVyaGFwcyBkZWZpbmUgY2FsbGJhY2sg
c2lnbmF0dXJlIGluIHRoZSBmdXR1cmVcbiAgICAgICAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0
cmluZywgcG9zdD86IGFueSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaGVhZGVycz86IGFueSwgdGlt
ZW91dD86IG51bWJlciwgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJwb2xhdGVTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVQcm92
aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVT
ZXJ2aWNlIHtcbiAgICAgICAgKHRleHQ6IHN0cmluZywgbXVzdEhhdmVFeHByZXNzaW9uPzogYm9v
bGVhbik6IElJbnRlcnBvbGF0aW9uRnVuY3Rpb247XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJp
bmc7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZh
Y2UgSUludGVycG9sYXRpb25GdW5jdGlvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnkpOiBzdHJp
bmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVByb3ZpZGVyIGV4dGVuZHMg
SVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHN0YXJ0U3ltYm9sKCk6IHN0cmluZztcbiAgICAg
ICAgc3RhcnRTeW1ib2wodmFsdWU6IHN0cmluZyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAg
ICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBlbmRTeW1ib2wodmFsdWU6IHN0cmlu
Zyk6IElJbnRlcnBvbGF0ZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
L1xuICAgIC8vIFRlbXBsYXRlQ2FjaGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiR0ZW1wbGF0ZUNhY2hlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElUZW1wbGF0ZUNhY2hlU2VydmljZSBleHRlbmRzIElDYWNoZU9iamVj
dCB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdFNjb3BlU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElSb290U2NvcGVTZXJ2aWNlIGV4
dGVuZHMgSVNjb3BlIHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VTZXJ2
aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cblx0aW50ZXJmYWNlIElTQ0VTZXJ2aWNlIHtcblx0XHRnZXRU
cnVzdGVkKHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1
c3RlZENzcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRIdG1sKHZhbHVlOiBhbnkp
OiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEpzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3Rl
ZFJlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZFVybCh2YWx1ZTog
YW55KTogYW55O1xuXHRcdHBhcnNlKHR5cGU6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKTog
KGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzQ3NzKGV4cHJl
c3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0
cGFyc2VBc0h0bWwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBh
bnkpID0+IGFueTtcblx0XHRwYXJzZUFzSnMoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6
IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzUmVzb3VyY2VVcmwoZXhwcmVz
c2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRw
YXJzZUFzVXJsKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55
KSA9PiBhbnk7XG5cdFx0dHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5c
dFx0dHJ1c3RBc0h0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSnModmFsdWU6IGFu
eSk6IGFueTtcblx0XHR0cnVzdEFzUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHR0
cnVzdEFzVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0aXNFbmFibGVkKCk6IGJvb2xlYW47XG5c
dH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVByb3ZpZGVyXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VQcm92aWRlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0
ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVTZXJ2
aWNlIHtcbiAgICAgICAgZ2V0VHJ1c3RlZCh0eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55
KTogYW55O1xuICAgICAgICB0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtc
biAgICAgICAgdmFsdWVPZih2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gU0NFRGVsZWdhdGVQcm92aWRlclxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVQcm92aWRlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU0NFRGVsZWdhdGVQcm92aWRlciBleHRl
bmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICByZXNvdXJjZVVybEJsYWNrbGlzdChibGFj
a2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICAgICAgcmVzb3VyY2VVcmxXaGl0ZWxpc3Qod2hpdGVs
aXN0OiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gRGlyZWN0aXZlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZlXG4gICAgLy8gYW5kIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvZ3VpZGUvZGlyZWN0aXZlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBp
bnRlcmZhY2UgSURpcmVjdGl2ZXtcbiAgICAgICAgY29tcGlsZT86XG4gICAgICAgICAgICAodGVt
cGxhdGVFbGVtZW50OiBhbnksXG4gICAgICAgICAgICB0ZW1wbGF0ZUF0dHJpYnV0ZXM6IElBdHRy
aWJ1dGVzLFxuICAgICAgICAgICAgdHJhbnNjbHVkZTogKHNjb3BlOiBJU2NvcGUsIGNsb25lTGlu
a2luZ0ZuOiBGdW5jdGlvbikgPT4gdm9pZFxuICAgICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAg
IGNvbnRyb2xsZXI/OiBhbnk7XG4gICAgICAgIGNvbnRyb2xsZXJBcz86IHN0cmluZztcbiAgICAg
ICAgbGluaz86XG4gICAgICAgICAgICAoc2NvcGU6IElTY29wZSxcbiAgICAgICAgICAgIGluc3Rh
bmNlRWxlbWVudDogYW55LFxuICAgICAgICAgICAgaW5zdGFuY2VBdHRyaWJ1dGVzOiBJQXR0cmli
dXRlcyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGFueVxuICAgICAgICAgICAgKSA9PiB2b2lk
O1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBwcmlvcml0eT86IG51bWJlcjtcbiAg
ICAgICAgcmVwbGFjZT86IGJvb2xlYW47XG4gICAgICAgIHJlcXVpcmU/OiBhbnk7XG4gICAgICAg
IHJlc3RyaWN0Pzogc3RyaW5nO1xuICAgICAgICBzY29wZT86IGFueTtcbiAgICAgICAgdGVtcGxh
dGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlVXJsPzogYW55O1xuICAgICAgICB0ZXJtaW5hbD86
IGJvb2xlYW47XG4gICAgICAgIHRyYW5zY2x1ZGU/OiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gYW5ndWxhci5lbGVtZW50XG4gICAgLy8gd2hlbiBjYWxsaW5n
IGFuZ3VsYXIuZWxlbWVudCwgYW5ndWxhciByZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCxcbiAgICAv
LyBhdWdtZW50ZWQgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgbGlrZSBlLmcuIHNjb3BlLlxuICAg
IC8vIHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50XG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnlTdGF0
aWMgZXh0ZW5kcyBKUXVlcnlTdGF0aWMge1xuICAgICAgICAoc2VsZWN0b3I6IHN0cmluZywgY29u
dGV4dD86IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50OiBFbGVtZW50
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKG9iamVjdDoge30pOiBJQXVnbWVudGVkSlF1
ZXJ5O1xuICAgICAgICAoZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBJQXVnbWVudGVkSlF1ZXJ5
O1xuICAgICAgICAob2JqZWN0OiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAo
ZnVuYzogRnVuY3Rpb24pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoYXJyYXk6IGFueVtd
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKCk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElBdWdtZW50ZWRKUXVlcnkgZXh0ZW5kcyBKUXVlcnkge1xuICAg
ICAgICAvLyBUT0RPOiBldmVudHMsIGhvdyB0byBkZWZpbmU/XG4gICAgICAgIC8vJGRlc3Ryb3lc
blxuICAgICAgICBmaW5kKHNlbGVjdG9yOiBzdHJpbmcpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAg
ICAgICBmaW5kKGVsZW1lbnQ6IGFueSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQo
b2JqOiBKUXVlcnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuXG4gICAgICAgIGNvbnRyb2xsZXIobmFt
ZTogc3RyaW5nKTogYW55O1xuICAgICAgICBpbmplY3RvcigpOiBhbnk7XG4gICAgICAgIHNjb3Bl
KCk6IElTY29wZTtcblxuICAgICAgICBpbmhlcml0ZWREYXRhKGtleTogc3RyaW5nLCB2YWx1ZTog
YW55KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKG9iajogeyBba2V5OiBzdHJpbmdd
OiBhbnk7IH0pOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5Pzogc3RyaW5nKTog
YW55O1xuXG5cbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFVVE8g
bW9kdWxlIChhbmd1bGFyLmpzKVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGV4cG9ydCBt
b2R1bGUgYXV0byB7XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gSW5qZWN0
b3JTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9B
VVRPLiRpbmplY3RvclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBpbnRlcmZhY2Ug
SUluamVjdG9yU2VydmljZSB7XG4gICAgICAgICAgICBhbm5vdGF0ZShmbjogRnVuY3Rpb24pOiBz
dHJpbmdbXTtcbiAgICAgICAgICAgIGFubm90YXRlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBh
bnlbXSk6IHN0cmluZ1tdO1xuICAgICAgICAgICAgZ2V0IChuYW1lOiBzdHJpbmcpOiBhbnk7XG4g
ICAgICAgICAgICBpbnN0YW50aWF0ZSh0eXBlQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/
OiBhbnkpOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246
IGFueVtdKTogYW55O1xuICAgICAgICAgICAgaW52b2tlKGZ1bmM6IEZ1bmN0aW9uLCBjb250ZXh0
PzogYW55LCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgICAgICAvLyBQcm92aWRlU2VydmljZVxuICAgICAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kcHJvdmlkZVxuICAgICAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgICAgICBpbnRlcmZhY2UgSVByb3ZpZGVTZXJ2aWNlIHtcbiAgICAgICAgICAgIC8v
IERvY3VtZW50YXRpb24gc2F5cyBpdCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGluc3RhbmNlLCBi
dXQgYWN0dWFsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZXR1cm4g
YW55dGhpbmcuXG4gICAgICAgICAgICAvLyBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiBhbnk7XG4gICAgICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkp
OiB2b2lkO1xuXG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3I6
IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRl
Y29yYXRvcklubGluZTogYW55W10pOiB2b2lkO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBz
dHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92
aWRlcjtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRG
dW5jdGlvbjogYW55W10pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgcHJvdmlk
ZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjogbmcuSVNlcnZpY2VQcm92aWRlcik6IG5nLklTZXJ2
aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHNlcnZpY2VQ
cm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcu
SVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6
IGFueSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbi8vIG1v
ZGVscy9Ub2RvSXRlbS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0Jztcblxu
ICAgIGV4cG9ydCBjbGFzcyBUb2RvSXRlbSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAg
ICAgICAgcHVibGljIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgICAgICBwdWJsaWMgY29tcGxldGVk
OiBib29sZWFuXG4gICAgICAgICAgICApIHsgfVxuICAgIH1cbn1cbi8vIGludGVyZmFjZXMvSVRv
ZG9TY29wZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU2Nv
cGUgZXh0ZW5kcyBuZy5JU2NvcGUge1xuXHRcdHRvZG9zOiBUb2RvSXRlbVtdO1xuXHRcdG5ld1Rv
ZG86IHN0cmluZztcblx0XHRlZGl0ZWRUb2RvOiBUb2RvSXRlbTtcblx0XHRvcmlnaW5hbFRvZG86
IFRvZG9JdGVtO1xuXHRcdHJlbWFpbmluZ0NvdW50OiBudW1iZXI7XG5cdFx0ZG9uZUNvdW50OiBu
dW1iZXI7XG5cdFx0YWxsQ2hlY2tlZDogYm9vbGVhbjtcblx0XHRyZXZlcnRlZDogYm9vbGVhbjtc
blx0XHRzdGF0dXNGaWx0ZXI6IHsgY29tcGxldGVkPzogYm9vbGVhbiB9O1xuXHRcdGxvY2F0aW9u
OiBuZy5JTG9jYXRpb25TZXJ2aWNlO1xuXHRcdHZtOiBUb2RvQ3RybDtcblx0fVxufVxuLy8gaW50
ZXJmYWNlcy9JVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVy
ZmFjZSBJVG9kb1N0b3JhZ2Uge1xuXHRcdGdldCAoKTogVG9kb0l0ZW1bXTtcblx0XHRwdXQodG9k
b3M6IFRvZG9JdGVtW10pO1xuXHR9XG59Ly8gZGlyZWN0aXZlcy9Ub2RvRm9jdXMudHNcblxubW9k
dWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhh
dCBwbGFjZXMgZm9jdXMgb24gdGhlIGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byB3aGVuIHRoZSBl
eHByZXNzaW9uIGl0IGJpbmRzIHRvIGV2YWx1YXRlcyB0byB0cnVlLlxuXHQgKi9cblx0ZXhwb3J0
IGZ1bmN0aW9uIHRvZG9Gb2N1cygkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlKTogbmcuSURp
cmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwg
ZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0JHNjb3BlLiR3
YXRjaChhdHRyaWJ1dGVzLnRvZG9Gb2N1cywgbmV3dmFsID0+IHtcblx0XHRcdFx0XHRpZiAobmV3
dmFsKSB7XG5cdFx0XHRcdFx0XHQkdGltZW91dCgoKSA9PiBlbGVtZW50WzBdLmZvY3VzKCksIDAs
IGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1c
blxuXHR0b2RvRm9jdXMuJGluamVjdCA9IFsnJHRpbWVvdXQnXTtcblxufS8vIGRpcmVjdGl2ZXMv
VG9kb0JsdXIudHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAv
KipcbiAgICAgKiBEaXJlY3RpdmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhl
IGVsZW1lbnQgaXQgaXMgYXBwbGllZCB0byBsb3NlcyBmb2N1cy5cbiAgICAgKi9cbiAgICBleHBv
cnQgZnVuY3Rpb24gdG9kb0JsdXIoKTogbmcuSURpcmVjdGl2ZSB7XG4gICAgICAgIHJldHVybiB7
XG4gICAgICAgICAgICBsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpRdWVyeSwg
YXR0cmlidXRlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5iaW5kKCdibHVy
JywgKCkgPT4geyAkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0JsdXIpOyB9KTtcbiAgICAg
ICAgICAgICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHsgZWxlbWVudC51bmJpbmQo
J2JsdXInKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gZGly
ZWN0aXZlcy9Ub2RvRXNjYXBlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdCd1c2Ugc3RyaWN0Jztc
blxuXHRjb25zdCBFU0NBUEVfS0VZID0gMjc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0
IGNhbmNlbHMgZWRpdGluZyBhIHRvZG8gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRXNjIGtleS5c
blx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiB0b2RvRXNjYXBlKCk6IG5nLklEaXJlY3RpdmUge1xu
XHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IEpR
dWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuYmluZCgna2V5ZG93
bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVf
S0VZKSB7XG5cdFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGF0dHJpYnV0ZXMudG9kb0VzY2FwZSk7
XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQkc2NvcGUuJG9uKCckZGVzdHJv
eScsICgpID0+IHsgZWxlbWVudC51bmJpbmQoJ2tleWRvd24nKTsgfSk7XG5cdFx0XHR9XG5cdFx0
fTtcblx0fVxufVxuLy8gc2VydmljZXMvVG9kb1N0b3JhZ2UudHNcblxubW9kdWxlIHRvZG9zIHtc
biAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlcyB0aGF0IHBlcnNp
c3RzIGFuZCByZXRyaWV2ZXMgVE9ET3MgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAg
ZXhwb3J0IGNsYXNzIFRvZG9TdG9yYWdlIGltcGxlbWVudHMgSVRvZG9TdG9yYWdlIHtcblxuICAg
ICAgICBTVE9SQUdFX0lEID0gJ3RvZG9zLWFuZ3VsYXJqcy10eXBlc2NyaXB0JztcblxuICAgICAg
ICBnZXQgKCk6IFRvZG9JdGVtW10ge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9j
YWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0lEKSB8fCAnW10nKTtcbiAgICAgICAgfVxu
XG4gICAgICAgIHB1dCh0b2RvczogVG9kb0l0ZW1bXSkge1xuICAgICAgICAgICAgbG9jYWxTdG9y
YWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2RvcykpO1xuICAg
ICAgICB9XG4gICAgfVxufS8vIGNvbnRyb2xsZXJzL1RvZG9DdHJsLnRzXG5cbm1vZHVsZSB0b2Rv
cyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogVGhlIG1haW4gY29udHJvbGxlciBm
b3IgdGhlIGFwcC4gVGhlIGNvbnRyb2xsZXI6XG5cdCAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0
cyB0aGUgbW9kZWwgdmlhIHRoZSB0b2RvU3RvcmFnZSBzZXJ2aWNlXG5cdCAqIC0gZXhwb3NlcyB0
aGUgbW9kZWwgdG8gdGhlIHRlbXBsYXRlIGFuZCBwcm92aWRlcyBldmVudCBoYW5kbGVyc1xuXHQg
Ki9cblx0ZXhwb3J0IGNsYXNzIFRvZG9DdHJsIHtcblxuXHRcdHByaXZhdGUgdG9kb3M6IFRvZG9J
dGVtW107XG5cblx0XHQvLyAkaW5qZWN0IGFubm90YXRpb24uXG5cdFx0Ly8gSXQgcHJvdmlkZXMg
JGluamVjdG9yIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVj
dGVkIGludG8gY29uc3RydWN0b3Jcblx0XHQvLyBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBpdCBjbG9z
ZSB0byB0aGUgY29uc3RydWN0b3IsIGJlY2F1c2UgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBp
biBjb3VudCBhbmQgdHlwZS5cblx0XHQvLyBTZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9n
dWlkZS9kaVxuXHRcdHB1YmxpYyBzdGF0aWMgJGluamVjdCA9IFtcblx0XHRcdCckc2NvcGUnLFxu
XHRcdFx0JyRsb2NhdGlvbicsXG5cdFx0XHQndG9kb1N0b3JhZ2UnLFxuXHRcdFx0J2ZpbHRlckZp
bHRlcidcblx0XHRdO1xuXG5cdFx0Ly8gZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZCB2aWEgQW5n
dWxhckpTICRpbmplY3RvclxuXHRcdC8vIGNvbnRyb2xsZXIncyBuYW1lIGlzIHJlZ2lzdGVyZWQg
aW4gQXBwbGljYXRpb24udHMgYW5kIHNwZWNpZmllZCBmcm9tIG5nLWNvbnRyb2xsZXIgYXR0cmli
dXRlIGluIGluZGV4Lmh0bWxcblx0XHRjb25zdHJ1Y3Rvcihcblx0XHRcdHByaXZhdGUgJHNjb3Bl
OiBJVG9kb1Njb3BlLFxuXHRcdFx0cHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZp
Y2UsXG5cdFx0XHRwcml2YXRlIHRvZG9TdG9yYWdlOiBJVG9kb1N0b3JhZ2UsXG5cdFx0XHRwcml2
YXRlIGZpbHRlckZpbHRlclxuXHRcdCkge1xuXHRcdFx0dGhpcy50b2RvcyA9ICRzY29wZS50b2Rv
cyA9IHRvZG9TdG9yYWdlLmdldCgpO1xuXG5cdFx0XHQkc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRc
dFx0JHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXG5cdFx0XHQvLyAndm0nIHN0YW5kcyBmb3Ig
J3ZpZXcgbW9kZWwnLiBXZSdyZSBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIg
dG8gdGhlIHNjb3BlXG5cdFx0XHQvLyBmb3IgaXRzIG1ldGhvZHMgdG8gYmUgYWNjZXNzaWJsZSBm
cm9tIHZpZXcgLyBIVE1MXG5cdFx0XHQkc2NvcGUudm0gPSB0aGlzO1xuXG5cdFx0XHQvLyB3YXRj
aGluZyBmb3IgZXZlbnRzL2NoYW5nZXMgaW4gc2NvcGUsIHdoaWNoIGFyZSBjYXVzZWQgYnkgdmll
dy91c2VyIGlucHV0XG5cdFx0XHQvLyBpZiB5b3Ugc3Vic2NyaWJlIHRvIHNjb3BlIG9yIGV2ZW50
IHdpdGggbGlmZXRpbWUgbG9uZ2VyIHRoYW4gdGhpcyBjb250cm9sbGVyLCBtYWtlIHN1cmUgeW91
IHVuc3Vic2NyaWJlLlxuXHRcdFx0JHNjb3BlLiR3YXRjaCgndG9kb3MnLCAoKSA9PiB0aGlzLm9u
VG9kb3MoKSwgdHJ1ZSk7XG5cdFx0XHQkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5wYXRoKCknLCBw
YXRoID0+IHRoaXMub25QYXRoKHBhdGgpKVxuXG5cdFx0XHRpZiAoJGxvY2F0aW9uLnBhdGgoKSA9
PT0gJycpICRsb2NhdGlvbi5wYXRoKCcvJyk7XG5cdFx0XHQkc2NvcGUubG9jYXRpb24gPSAkbG9j
YXRpb247XG5cdFx0fVxuXG5cdFx0b25QYXRoKHBhdGg6IHN0cmluZykge1xuXHRcdFx0dGhpcy4k
c2NvcGUuc3RhdHVzRmlsdGVyID0gKHBhdGggPT09ICcvYWN0aXZlJykgP1xuXHRcdFx0XHR7IGNv
bXBsZXRlZDogZmFsc2UgfSA6IChwYXRoID09PSAnL2NvbXBsZXRlZCcpID9cblx0XHRcdFx0eyBj
b21wbGV0ZWQ6IHRydWUgfSA6IHt9O1xuXHRcdH1cblxuXHRcdG9uVG9kb3MoKSB7XG5cdFx0XHR0
aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudCA9IHRoaXMuZmlsdGVyRmlsdGVyKHRoaXMudG9kb3Ms
IHsgY29tcGxldGVkOiBmYWxzZSB9KS5sZW5ndGg7XG5cdFx0XHR0aGlzLiRzY29wZS5kb25lQ291
bnQgPSB0aGlzLnRvZG9zLmxlbmd0aCAtIHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50O1xuXHRc
dFx0dGhpcy4kc2NvcGUuYWxsQ2hlY2tlZCA9ICF0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudFxu
XHRcdFx0dGhpcy50b2RvU3RvcmFnZS5wdXQodGhpcy50b2Rvcyk7XG5cdFx0fVxuXG5cdFx0YWRk
VG9kbygpIHtcblx0XHRcdHZhciBuZXdUb2RvIDogc3RyaW5nID0gdGhpcy4kc2NvcGUubmV3VG9k
by50cmltKCk7XG5cdFx0XHRpZiAoIW5ld1RvZG8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtc
blx0XHRcdH1cblxuXHRcdFx0dGhpcy50b2Rvcy5wdXNoKG5ldyBUb2RvSXRlbShuZXdUb2RvLCBm
YWxzZSkpO1xuXHRcdFx0dGhpcy4kc2NvcGUubmV3VG9kbyA9ICcnO1xuXHRcdH1cblxuXHRcdGVk
aXRUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9k
byA9IHRvZG9JdGVtO1xuXG5cdFx0XHQvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyBpbiBjYXNl
IGVkaXRpbmcgaXMgY2FuY2VsbGVkLlxuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0g
YW5ndWxhci5leHRlbmQoe30sIHRvZG9JdGVtKTtcblx0XHR9XG5cblx0XHRyZXZlcnRFZGl0cyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3NbdGhpcy50b2Rvcy5pbmRleE9m
KHRvZG9JdGVtKV0gPSB0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG87XG5cdFx0XHR0aGlzLiRzY29w
ZS5yZXZlcnRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0ZG9uZUVkaXRpbmcodG9kb0l0ZW06IFRv
ZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDtcblx0XHRcdHRo
aXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy4kc2NvcGUucmV2
ZXJ0ZWQpIHtcblx0XHRcdFx0Ly8gVG9kbyBlZGl0cyB3ZXJlIHJldmVydGVkLCBkb24ndCBzYXZl
LlxuXHRcdFx0XHR0aGlzLiRzY29wZS5yZXZlcnRlZCA9IG51bGw7XG5cdFx0XHRcdHJldHVybjtc
blx0XHRcdH1cblx0XHRcdHRvZG9JdGVtLnRpdGxlID0gdG9kb0l0ZW0udGl0bGUudHJpbSgpO1xu
XHRcdFx0aWYgKCF0b2RvSXRlbS50aXRsZSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvZG8odG9k
b0l0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbW92ZVRvZG8odG9kb0l0ZW06IFRvZG9J
dGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zLnNwbGljZSh0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0
ZW0pLCAxKTtcblx0XHR9XG5cblx0XHRjbGVhckRvbmVUb2RvcygpIHtcblx0XHRcdHRoaXMuJHNj
b3BlLnRvZG9zID0gdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKHRvZG9JdGVtID0+ICF0
b2RvSXRlbS5jb21wbGV0ZWQpO1xuXHRcdH1cblxuXHRcdG1hcmtBbGwoY29tcGxldGVkOiBib29s
ZWFuKSB7XG5cdFx0XHR0aGlzLnRvZG9zLmZvckVhY2godG9kb0l0ZW0gPT4geyB0b2RvSXRlbS5j
b21wbGV0ZWQgPSBjb21wbGV0ZWQ7IH0pO1xuXHRcdH1cblx0fVxuXG59XG4vLyBBcHBsaWNhdGlv
bi50c1xuXG4vKipcbiAqIFRoZSBtYWluIFRvZG9NVkMgYXBwIG1vZHVsZS5cbiAqXG4gKiBAdHlw
ZSB7YW5ndWxhci5Nb2R1bGV9XG4gKi9cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3Qn
O1xuXG4gICAgdmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212YycsIFtdKVxuICAg
ICAgICAgICAgLmNvbnRyb2xsZXIoJ3RvZG9DdHJsJywgVG9kb0N0cmwpXG4gICAgICAgICAgICAu
ZGlyZWN0aXZlKCd0b2RvQmx1cicsIHRvZG9CbHVyKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgn
dG9kb0ZvY3VzJywgdG9kb0ZvY3VzKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndG9kb0VzY2Fw
ZScsIHRvZG9Fc2NhcGUpXG4gICAgICAgICAgICAuc2VydmljZSgndG9kb1N0b3JhZ2UnLCBUb2Rv
U3RvcmFnZSk7XG59XG4iCittb2R1bGUuZXhwb3J0cyA9ICIvLyBsaWJzL2pxdWVyeS9qcXVlcnku
ZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNl
XG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElTIFBST1ZJREVEICpBUyBJUyogQkFT
SVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1Q
TElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXG5c
blNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlwaW5nIGZvciB0aGUgalF1ZXJ5IGxp
YnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFByb2plY3Q6IGh0dHA6Ly9qcXVlcnku
Y29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtvdiA8aHR0cHM6Ly9naXRodWIuY29t
L2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3RlciA8aHR0cHM6Ly9naXRodWIuY29t
L2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxlaSBHb21lcyA8aHR0cHM6Ly9naXRo
dWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS90YXNv
aWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxodHRwczovL2dpdGh1Yi5jb20vc2Vh
bnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9HdXV6PiwgS2VsbHkgU3Vt
bWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxpbj4sIEJhc2FyYXQgQWxpIFN5ZWQg
PGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9sYXMgV29sdmVyc29uIDxodHRwczov
L2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vyb25lIDxodHRwczovL2dpdGh1Yi5j
b20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9BbmRy
ZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qYW1l
c2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9naXRodWIuY29tL3NlaWtpY2hpPiwg
QmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluamFja21hbj4sIFBv
dWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkzMjk0PiwgSm9zaCBTdHJvYmwgPGh0
dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBSZWlsbHkgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9i
b3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBB
SkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgQUpBWCByZXF1ZXN0XG4qL1xuaW50
ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQg
dHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0IHRlbGxzIHRoZSBzZXJ2ZXIgd2hh
dCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGluIHJldHVybi4gSWYgdGhlIGFjY2Vw
dHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNv
IG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxuICAgICAqL1xuICAgIGFjY2VwdHM/
OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgYWxsIHJlcXVlc3RzIGFyZSBzZW50
IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCkuIElm
IHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2Uu
IENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6IFwianNvbnBcIiByZXF1ZXN0cyBk
byBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE5vdGUgdGhhdCBzeW5jaHJvbm91
cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUgYnJvd3NlciwgZGlzYWJsaW5nIGFu
eSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2ZS4gQXMgb2YgalF1ZXJ5IDEuOCwg
dGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAoJC5EZWZlcnJlZCkgaXMgZGVwcmVj
YXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9yL2NvbXBsZXRlIGNhbGxiYWNrIG9w
dGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIG9mIHRoZSBqcVhIUiBv
YmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRlcHJlY2F0ZWQganFYSFIuc3VjY2Vz
cygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIHBy
ZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRo
ZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGJlZm9yZSBp
dCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhlYWRlcnMsIGV0Yy4gVGhlIGpxWEhS
IGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzLiBUaGlzIGlzIGFu
IEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUgYmVmb3JlU2VuZCBmdW5jdGlvbiB3
aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGJlZm9yZVNlbmQg
b3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgcmVxdWVzdC5c
biAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpRdWVyeVhIUiwgc2V0dGluZ3M6IEpR
dWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gZmFsc2Us
IGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0byBiZSBjYWNoZWQgYnkgdGhlIGJy
b3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ugd2lsbCBvbmx5IHdvcmsgY29ycmVj
dGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3b3JrcyBieSBhcHBlbmRpbmcgXCJf
PXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJzLiBUaGUgcGFyYW1ldGVyIGlzIG5v
dCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3RzLCBleGNlcHQgaW4gSUU4IHdoZW4g
YSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBi
eSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog
QSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBmaW5pc2hlcyAoYWZ0ZXIg
c3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCkuIFRoZSBmdW5jdGlvbiBn
ZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1M
SFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0ZWdvcml6aW5nIHRoZSBzdGF0dXMg
b2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1vZGlmaWVkXCIsIFwiZXJyb3JcIiwg
XCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJlcnJvclwiKS4gQXMgb2YgalF1ZXJ5
IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlv
bnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4
IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFYSFI6IEpRdWVyeVhIUiwgdGV4dFN0
YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBzdHJpbmcv
cmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJtaW5lIGhvdyBqUXVlcnkgd2lsbCBw
YXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50IHR5cGUuICh2ZXJzaW9uIGFkZGVk
OiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtc
biAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3VyY2UgY29kZSwgYWpheCdzIG9wdGlv
biBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0IHRvIFwiZmFsc2VcIlxuICAgIC8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzc0
MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRhIHRvIHRoZSBzZXJ2ZXIsIHVzZSB0
aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJs
ZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBmaW5lIGZvciBtb3N0IGNhc2VzLiBJ
ZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10eXBlIHRvICQuYWpheCgpLCB0aGVu
IGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2ZW4gaWYgbm8gZGF0YSBpcyBzZW50
KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0aW9uIGRpY3RhdGVzIHRoYXQgdGhl
IGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5nIGFub3RoZXIgY2hhcnNldCB3aWxs
IG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhlIGVuY29kaW5nLlxuICAgICAqL1xu
ICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAgICAqIFRoaXMgb2JqZWN0IHdpbGwg
YmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxhdGVkIGNhbGxiYWNrcy4gQnkgZGVm
YXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgYWpheCBz
ZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0aW5ncyBtZXJnZWQgd2l0aCB0aGUg
c2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICovXG4gICAgY29udGV4dD86IGFueTtc
biAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhVHlwZS10by1kYXRhVHlw
ZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUgcmVzcG9uc2UuICh2ZXJzaW9uIGFk
ZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86IHsgW2tleTogc3RyaW5nXTogYW55
OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRvIGZvcmNlIGEgY3Jvc3NEb21haW4g
cmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUgZG9tYWluLCBzZXQgdGhlIHZhbHVl
IG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgc2VydmVy
LXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4uICh2ZXJzaW9uIGFkZGVkOiAxLjUp
XG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERh
dGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBjb252ZXJ0ZWQgdG8gYSBxdWVyeSBz
dHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdzIGFwcGVuZGVkIHRvIHRoZSB1cmwg
Zm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9wdGlvbiB0byBwcmV2ZW50IHRoaXMg
YXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJlIEtleS9WYWx1ZSBwYWlycy4gSWYg
dmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVzIG11bHRpcGxlIHZhbHVlcyB3aXRo
IHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdHJhZGl0aW9uYWwgc2V0dGluZyAo
ZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRhPzogYW55O1xuICAgIC8qKlxuICAg
ICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUgdGhlIHJhdyByZXNwb25zZSBkYXRh
IG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmlsdGVyaW5nIGZ1bmN0aW9uIHRvIHNh
bml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1cm4gdGhlIHNhbml0aXplZCBkYXRh
LiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRzOiBUaGUgcmF3IGRhdGEgcmV0dXJu
ZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBlJyBwYXJhbWV0ZXIuXG4gICAgICov
XG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFueSk6IGFueTtcbiAgICAvKipcbiAg
ICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4cGVjdGluZyBiYWNrIGZyb20gdGhl
IHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVyeSB3aWxsIHRyeSB0byBpbmZlciBp
dCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNwb25zZSAoYW4gWE1MIE1JTUUgdHlw
ZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5aWVsZCBhIEphdmFTY3JpcHQgb2Jq
ZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0LCBhbmQgYW55dGhpbmcg
ZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5cbiAgICAgKi9cbiAgICBkYXRhVHlw
ZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiB0
aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRocmVlIGFyZ3VtZW50czog
VGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QsIGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBvY2N1cnJlZCBhbmQgYW4gb3B0
aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3VycmVkLiBQb3NzaWJsZSB2YWx1ZXMg
Zm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVsbCkgYXJlIFwidGltZW91dFwiLCBc
ImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJyb3JcIi4gV2hlbiBhbiBIVFRQIGVy
cm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhlIHRleHR1YWwgcG9ydGlvbiBvZiB0
aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRcIiBvciBcIkludGVybmFsIFNlcnZl
ciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJyb3Igc2V0dGluZyBjYW4gYWNjZXB0
IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0
dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3IgY3Jvc3MtZG9tYWluIHNj
cmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3RzLiBUaGlzIGlzIGFuIEFqYXggRXZl
bnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBz
dHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVy
IHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxlcnMgZm9yIHRoaXMgcmVxdWVzdC4g
VGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRvIHByZXZlbnQgdGhlIGdsb2JhbCBo
YW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBmcm9tIGJlaW5nIHRyaWdnZXJlZC4g
VGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgQWpheCBFdmVudHMuXG4gICAgICov
XG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb2YgYWRk
aXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNlbmQgYWxvbmcgd2l0aCByZXF1ZXN0
cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0LiBUaGUgaGVhZGVyIFgtUmVxdWVz
dGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBhZGRlZCwgYnV0IGl0cyBkZWZhdWx0
IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGhlcmUuIFZhbHVlcyBpbiB0aGUg
aGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0dGVuIGZyb20gd2l0aGluIHRoZSBi
ZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDogMS41KVxuICAgICAqL1xuICAgIGhl
YWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0
aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFu
Z2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyB0aGUg
TGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UsIGlnbm9yaW5nIHRo
ZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlxdWUgYWxzbyBjaGVja3MgdGhlICdl
dGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRjaCB1bm1vZGlmaWVkIGRhdGEuXG4g
ICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxsb3cg
dGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2duaXplZCBhcyBcImxvY2FsLFwiIChl
LmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkgZG9lcyBub3QgcmVjb2duaXplIGl0
IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIGN1cnJlbnRs
eSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVuc2lvbiwgYW5kIHdpZGdldC4gSWYg
dGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlzIHJlY29tbWVuZGVk
IHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLiAodmVyc2lvbiBhZGRl
ZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAg
ICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgaW4gYSBqc29ucCByZXF1ZXN0
LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICdjYWxsYmFjaycgaW4gdGhlICdj
YWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgaW4gdGhlIHVybC4gU28ge2pzb25w
OidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25KU09OUExvYWQ9PycgcGFzc2VkIHRv
IHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRpbmcgdGhlIGpzb25wIG9wdGlvbiB0
byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcgdGhlIFwiP2NhbGxiYWNrXCIgc3Ry
aW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2UgXCI9P1wiIGZvciB0cmFuc2Zvcm1h
dGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28gZXhwbGljaXRseSBzZXQgdGhlIGpz
b25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsganNvbnA6IGZhbHNlLCBqc29ucENh
bGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9cbiAgICBqc29ucD86IHN0cmluZztc
biAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGZvciBh
IEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHJh
bmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGpRdWVyeS4gSXQgaXMgcHJlZmVy
YWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgYXMgaXQnbGwgbWFrZSBp
dCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQgcHJvdmlkZSBjYWxsYmFja3MgYW5k
IGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3BlY2lmeSB0aGUgY2FsbGJhY2sgd2hl
biB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIgY2FjaGluZyBvZiBHRVQgcmVxdWVz
dHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1c2UgYSBmdW5jdGlvbiBmb3IgdGhp
cyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBvZiBqc29ucENhbGxiYWNrIGlzIHNl
dCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uXG4gICAgICovXG4gICAganNv
bnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBBIG1pbWUgdHlwZSB0byBvdmVycmlk
ZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNS4xKVxuICAgICAqL1xuICAg
IG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgcGFzc3dvcmQgdG8gYmUgdXNl
ZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNzIGF1dGhl
bnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAg
LyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQgaW4gdG8gdGhlIGRhdGEgb3B0aW9u
IGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5nIG90aGVyIHRoYW4gYSBzdHJpbmcp
IHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBpbnRvIGEgcXVlcnkgc3RyaW5nLCBm
aXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBcImFwcGxpY2F0aW9uL3gtd3d3LWZv
cm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgRE9NRG9jdW1lbnQsIG9yIG90
aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0aW9uIHRvIGZhbHNlLlxuICAgICAq
L1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGxp
ZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMgdXNlZCAoZS5nLiwgY3Jvc3MtZG9t
YWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2NyaXB0XCIgZGF0YVR5cGUgYW5kIFwi
R0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIG9uIHRoZSBzY3JpcHQgdGFn
IHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUgY2hhcmFjdGVyIHNldCBvbiB0aGUg
bG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBvbiB0aGUgcmVtb3RlIHNjcmlw
dC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5kIGZ1bmN0aW9ucyB0byBiZSBjYWxs
ZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUuIGYgdGhlIHJl
cXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2RlIGZ1bmN0aW9ucyB0YWtlIHRoZSBz
YW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2s7IGlmIGl0IHJlc3VsdHMgaW4g
YW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0aGV5IHRha2UgdGhlIHNhbWUgcGFy
YW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAg
ICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxu
ICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBU
aGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1lbnRzOiBUaGUgZGF0YSByZXR1cm5l
ZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGRhdGFUeXBlIHBh
cmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3RhdHVzOyBhbmQgdGhlIGpxWEhSIChp
biBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmplY3QuIEFzIG9mIGpRdWVyeSAxLjUs
IHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVh
Y2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50
LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAgICAgKiBTZXQgYSB0aW1lb3V0IChp
biBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhpcyB3aWxsIG92ZXJyaWRlIGFueSBn
bG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgpLiBUaGUgdGltZW91dCBwZXJpb2Qg
c3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwgaXMgbWFkZTsgaWYgc2V2ZXJhbCBv
dGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBicm93c2VyIGhhcyBubyBjb25u
ZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHJlcXVlc3QgdG8gdGltZSBv
dXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkgMS40LnggYW5kIGJlbG93LCB0aGUg
WE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiB0aGUg
cmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2JqZWN0IG1lbWJlcnMgbWF5IHRocm93
IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHksIHNjcmlwdCBhbmQgSlNPTlAgcmVx
dWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVvdXQ7IHRoZSBzY3JpcHQgd2lsbCBy
dW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAgICAgKi9c
biAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIHRvIHRydWUg
aWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBzdHlsZSBvZiBwYXJhbSBzZXJpYWxp
emF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwiUE9TVFwiIG9yIFwiR0VUXCIpLCBk
ZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAgcmVxdWVzdCBtZXRob2RzLCBzdWNo
IGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2VkIGhlcmUsIGJ1dCB0aGV5IGFyZSBu
b3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAgKi9cbiAgICB0eXBlPzogc3RyaW5n
O1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0
aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVybD86IHN0cmluZztcbiAgICAvKipc
biAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBpbiByZXNw
b25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAqL1xu
ICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZvciBjcmVh
dGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZhdWx0cyB0byB0aGUgQWN0aXZlWE9i
amVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0cFJlcXVlc3Qgb3RoZXJ3aXNlLiBP
dmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGZvciBYTUxIdHRwUmVx
dWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3RvcnkuXG4gICAgICovXG4gICAgeGhyPzog
YW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBmaWVsZE5hbWUtZmllbGRWYWx1ZSBw
YWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0LiBGb3IgZXhhbXBsZSwgeW91IGNh
biB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0cnVlIGZvciBjcm9zcy1kb21haW4g
cmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0aGUgd2l0aENyZWRlbnRpYWxzIHBy
b3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0aXZlIFhIUiBhbmQgdGh1cyBDT1JT
IHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUgdGhpcyBmbGFnLiBGb3IgdGhpcyBy
ZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41LjErIHNob3VsZCB5b3UgcmVxdWly
ZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgeGhy
RmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5cbi8qXG4gICAgSW50ZXJmYWNl
IGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeVhIUiBleHRlbmRzIFhN
TEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xuICAgIG92ZXJyaWRlTWltZVR5cGUo
bWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChzdGF0dXNUZXh0Pzogc3RyaW5nKTog
dm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgY2FsbGJhY2tcbiov
XG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFkZCguLi5jYWxsYmFja3M6IGFueVtd
KTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVtcHR5KCk6IGFueTtcbiAgICBmaXJl
KC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmlyZWQoKTogYm9vbGVhbjtcbiAgICBm
aXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuICAgIGhhcyhjYWxs
YmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFueTtcbiAgICBsb2NrZWQoKTogYm9v
bGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlbXSk6IGFueTtcbn1cblxuLypcbiAg
ICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Agd2l0aCBub24talF1ZXJ5IHByb21p
c2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+IHtcbiAgICB0aGVuPFU+
KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4g
VSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFs
dWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFu
eSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxs
OiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25G
dWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86
IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4pOiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBKUXVlcnkgcHJvbWlz
ZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5UHJvbWlzZTxUPiB7XG4g
ICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3NcbiAgICBhbHdheXMoLi4uYWx3YXlz
Q2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6
IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFj
a3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJh
Y2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tz
OiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBh
bnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIC8vIERlcHJlY2F0ZWQgLSBnaXZl
biBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBmYWls
RmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0ZpbHRlcj86ICh4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6
IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNz
PzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAg
ICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxV
Piwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4u
cHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFu
eVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVz
c2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1
bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0Pzog
KC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Qcm9ncmVz
cz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG5c
biAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNrXG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlb
XSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpR
dWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtd
KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55
W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBK
UXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlb
XSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55
W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBh
bnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jl
c3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xufVxuXG4vKlxuICAgIElu
dGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5p
bnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBKUXVlcnlQcm9taXNlPFQ+IHtcbiAg
ICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXND
YWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgZmFpbCguLi5mYWlsQ2FsbGJhY2tz
OiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxi
YWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBhbHdheXMoLi4uYWx3YXlzQ2Fs
bGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIGRvbmUoLi4uZG9uZUNhbGxi
YWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFj
a3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcHJvZ3Jlc3MoLi4ucHJvZ3Jlc3ND
YWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICBub3RpZnkoLi4uYXJn
czogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBub3RpZnlXaXRoKGNvbnRleHQ6IGFu
eSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcblxuICAgIHJlamVjdCguLi5h
cmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHJlamVjdFdpdGgoY29udGV4dDog
YW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVzb2x2ZSh2
YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNvbHZlKC4uLmFyZ3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdz
OiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0YXRlKCk6IHN0cmluZztcblxuICAg
IHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlzZTxUPjtcbn1cblxuLypcbiAgICBJ
bnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2YgdGhlIFczQyBldmVudCBvYmplY3Rc
biovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBFdmVudCB7XG4g
ICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBFbGVtZW50O1xuICAgIGlzRGVmYXVs
dFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRpYXRlUHJvcG9nYXRpb25TdG9wcGVk
KCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBu
YW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVsdCgpOiBhbnk7XG4gICAgcmVsYXRl
ZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtcbiAgICBzdG9wSW1tZWRpYXRlUHJv
cGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBwYWdl
WDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgd2hpY2g6IG51bWJlcjtcbiAgICBt
ZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCBl
eHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAgYWx0S2V5OiBib29sZWFuO1xuICAg
IGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9vbGVhbjtcbiAgICBzaGlmdEtleTog
Ym9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNlRXZlbnRPYmplY3QgZXh0ZW5kcyBK
UXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246IG51bWJlcjtcbiAgICBjbGllbnRY
OiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAg
ICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJlcjtcbiAgICBwYWdlWTogbnVtYmVy
O1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5ZOiBudW1iZXI7XG59XG5cbmludGVy
ZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qg
e1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVtYmVyO1xuICAgIGtleTogYW55O1xu
ICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBvcFN0YXRlRXZlbnRP
YmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qge1xuICAgIG9yaWdpbmFsRXZlbnQ6
IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVlcnlFdmVudE9iamVjdCBleHRlbmRz
IEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCwgSlF1ZXJ5TW91
c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3QsIEpRdWVyeVBvcFN0YXRlRXZlbnRP
YmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2YgcHJvcGVydGllcyBvZiB0aGUgY3Vy
cmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5U3VwcG9ydCB7XG4gICAgYWpheD86
IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xuICAgIGNoYW5nZUJ1YmJsZXM/OiBi
b29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xuICAgIGNoZWNrT24/OiBib29sZWFu
O1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0PzogYm9vbGVhbjtcbiAgICBocmVm
Tm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlhbGl6ZT86IGJvb2xlYW47XG4gICAg
bGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVDaGVja2VkPzogYm9vbGVh
bjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAgIG9wYWNpdHk/OiBib29sZWFuO1xu
ICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRTZWxlY3RlZD86IGJvb2xlYW47XG4g
ICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5bGU/OiBib29sZWFuO1xuICAgIHN1
Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5PzogYm9vbGVhbjtcbn1cblxuaW50ZXJm
YWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBzdHJpbmc7XG4gICAgKG9iajogYW55
LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJm
YWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMgKHdpdGggJC5FdmVudCkuIEl0IGlz
XG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBpbmxpbmUgaW4gSlF1ZXJ5U3RhdGlj
IHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1Y3Rpb24gZnVuY3Rpb24gd2l0aCBz
cGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lmaWMgZXZlbnQgb2JqZWN0cy5cbiAq
L1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ige1xuICAgIChuYW1lOiBzdHJpbmcs
IGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xuICAgIG5ldyAobmFt
ZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBKUXVlcnlFdmVudE9iamVjdDtcbn1c
blxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3BlY2lmeSBlYXNpbmcgZnVuY3Rpb25z
LlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAgICBsaW5lYXIocDogbnVtYmVyKTog
bnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLypcbiAgICBTdGF0
aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5kIGpRdWVyeSB0aGVtc2VsdmVzKVxu
Ki9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBh
biBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1cmUgdGhlIEFq
YXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0IGNhbiBiZSBz
ZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xuICAgIGFqYXgo
c2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAg
KiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4KSByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgQSBzZXQgb2Yga2V5L3Zh
bHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJlcXVlc3QuIEFsbCBzZXR0aW5ncyBh
cmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZvciBhbnkgb3B0aW9uIHdpdGggJC5h
amF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDogc3RyaW5nLCBzZXR0aW5ncz86IEpR
dWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBj
dXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBlYWNo
IHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFqYXgo
KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMgQW4gb3B0aW9uYWwgc3RyaW5nIGNv
bnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGRhdGFUeXBlc1xuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBB
amF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoZGF0YVR5cGVzOiBzdHJp
bmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0czogSlF1ZXJ5QWpheFNldHRpbmdz
LCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEhhbmRs
ZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGluZyBvcHRpb25zIGJlZm9yZSBl
YWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJlIHByb2Nlc3NlZCBieSAkLmFq
YXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVm
YXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQ
cmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0
dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZvaWQ7XG5cbiAgICBhamF4U2V0dGlu
Z3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipcbiAgICAgICogU2V0IGRlZmF1bHQg
dmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRzIHVzZSBpcyBub3QgcmVjb21tZW5k
ZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0IG9mIGtleS92YWx1ZSBw
YWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4IHJlcXVlc3QuIEFsbCBvcHRpb25z
IGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNldHVwKG9wdGlvbnM6IEpRdWVyeUFq
YXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1
cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNl
bnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4
ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBU
aGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxs
aWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBn
ZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcs
IGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7
XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAg
R0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3
aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKiBAcGFy
YW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERl
ZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRtbCkuXG4g
ICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRh
dGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRh
dGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBm
cm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICog
QHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVl
c3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcg
dGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFy
YW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJl
cXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEg
ZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1s
LCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywg
ZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBp
ZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5n
LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5
WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29k
ZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAq
XG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2gg
dGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBv
ciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAg
ICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQg
aWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmlu
ZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmlu
ZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAq
IExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0
ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtc
biAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBmaWxlIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0ZSBpdC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1
ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqL1xuICAgIGdl
dFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3JpcHQ6IHN0cmluZywgdGV4dFN0YXR1
czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG5cbiAgICBw
YXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUg
c2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
dXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBz
ZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBl
eGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUgaXMg
cHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIGRh
dGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0
OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxuICAg
ICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3Rh
dHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcp
OiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1
c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0
cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAg
ICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRv
IHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNh
bGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMu
IFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQgY2FuIGJlIG51bGwgaW4gdGhh
dCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVk
IGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwg
c2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRh
PzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhI
UjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAg
IC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBPU1Qg
cmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0
aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEg
QSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGgg
dGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRh
VHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBA
cGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIu
IERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRt
bCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vz
cz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcblxuICAgIC8qKlxuICAgICAqIEEg
bXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIHBvd2Vy
ZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgZmxhZ3MgdGhhdCBjaGFu
Z2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4gICAgICovXG4gICAgQ2FsbGJhY2tz
KGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5cbiAgICAvKipcbiAgICAgKiBIb2xk
cyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVyeSdzIHJlYWR5IGV2ZW50LlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlYWR5IGhvbGQg
aXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAgICovXG4gICAgaG9sZFJlYWR5KGhv
bGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBh
bnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBKUXVlcnk7XG4gICAgKG9iamVj
dDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSlF1ZXJ5O1xu
ICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAoZnVuYzogRnVuY3Rpb24pOiBKUXVl
cnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAgICAoKTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250cm9sIG9mIHRoZSAkIHZhcmlhYmxl
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBBIEJvb2xlYW4gaW5kaWNhdGluZyB3
aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxlcyBmcm9tIHRoZSBnbG9iYWwgc2Nv
cGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAgKi9cbiAgICBub0NvbmZsaWN0KHJl
bW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBh
IHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBv
YmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9u
b3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUg
RGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xu
ICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxUPltdKTogSlF1
ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRl
IGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5
IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0
cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4u
ZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8qKlxuICAgICAqIFByb3Zp
ZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBt
b3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3lu
Y2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3Ig
bW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAg
ICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtc
blxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICBjc3NOdW1iZXI6
IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0cmFyeSBkYXRhIGFzc29jaWF0ZWQg
d2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNl
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3Nv
Y2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0
aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgZGF0
YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3Ry
aW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBuYW1l
ZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1l
bnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNzb2Np
YXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtleSBBIHN0cmluZyBuYW1pbmcgdGhl
IHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAgIGRhdGEoZWxlbWVudDogRWxlbWVu
dCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBhdCBu
YW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0IGJ5IGpRdWVyeS5kYXRhKGVs
ZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBzdG9yZSBmb3IgdGhlIGVsZW1l
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdG8gYXNz
b2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50
KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU/OiBzdHJp
bmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuO1xuXG4g
ICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lPzogc3RyaW5nKTogYW55W107XG4g
ICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JD
YWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShlbGVtZW50OiBFbGVtZW50
LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBEZWZlcnJl
ZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5RGVmZXJyZWQ8VD4pID0+IGFueSk6
IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGZ4OiB7IHRpY2s6ICgp
ID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgpID0+IHZvaWQ7IHNwZWVkczogeyBz
bG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBib29sZWFuOyBzdGVwOiBhbnk7IH07
XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnks
IGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7XG4gICAgcHJveHkoY29udGV4dDog
YW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xuXG4gICAgRXZlbnQ6IEpR
dWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAgICBlcnJvcihtZXNz
YWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxsYW5lb3VzXG4gICAgZXhwcjogYW55
O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cgd2Ugd2FudCB0byB0eXBlIHRoaXNc
biAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJvcGVydGllc1xuICAgIHN1cHBvcnQ6
IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBjb250YWlucyhjb250YWlu
ZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBlYWNoKGNv
bGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IGFueSwgdmFsdWVPZkVsZW1l
bnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29sbGVjdGlvbjogSlF1ZXJ5LCBjYWxs
YmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9mRWxlbWVudDogSFRNTEVsZW1lbnQp
ID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rpb246IFRbXSwgY2FsbGJhY2s6IChp
bmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6IFQpID0+IGFueSk6IGFueTtcblxu
ICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55W10pOiBhbnk7XG4gICAgZXh0ZW5k
KGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcblxuICAg
IGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4gICAgZ3JlcDxUPihhcnJheTogVFtd
LCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBib29s
ZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAgaW5BcnJheTxUPih2YWx1ZTogVCwg
YXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xuXG4gICAgaXNBcnJheShv
Ymo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47
XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNOdW1lcmljKHZhbHVl
OiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qob2JqOiBhbnkpOiBib29sZWFuO1xu
ICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc1hNTERvYyhub2RlOiBOb2Rl
KTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFueSk6IGFueVtdO1xuXG4gICAgbWFw
PFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5B
cnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChhcnJheTogYW55LCBjYWxsYmFjazog
KGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTogYW55KSA9PiBhbnkpOiBhbnk7XG5c
biAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRbXSk6IFRbXTtcbiAgICBtZXJnZTxU
LFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107XG5cbiAgICBub29wKCk6IGFueTtc
blxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpTT04oanNvbjogc3RyaW5nKTogYW55
O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gWE1MIGRvY3VtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgdG8g
YmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0YTogc3RyaW5nKTogWE1MRG9jdW1l
bnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3
UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZztc
blxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAgICB1bmlxdWUoYXJyOiBhbnlbXSk6
IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIGludG8gYW4gYXJyYXkg
b2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgSFRNTCBzdHJpbmcgdG8g
YmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9NIGVsZW1lbnQgdG8gc2VydmUgYXMg
dGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkXG4g
ICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8g
aW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBzdHJpbmdcbiAgICAgKi9cbiAgICBw
YXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRNTEVsZW1lbnQsIGtlZXBTY3JpcHRz
PzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9uKGVsZW06IGFueSwgcHJvcGVydGll
czogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBlYXNpbmc6IEpRdWVyeUVhc2luZztc
bn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1lbWJlcnNcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBsZXRlKGhhbmRsZXI6IGFueSk6IEpR
dWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNl
dHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFNl
bmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2Vw
dGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN0YXJ0KGhhbmRsZXI6ICgpID0+
IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVyOiAoKSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnksIHNldHRp
bmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBsb2FkKHVy
bDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFueSk6IEpRdWVyeTtcblxuICAgIHNl
cmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJyYXkoKTogYW55W107XG5cbiAgICAv
LyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lczogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJyZW50Q2xhc3M6IGFueSkgPT4gc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5qcXVlcnkuY29tL2FkZEJhY2svXG4g
ICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuXG4gICAgYXR0cihhdHRy
aWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJp
bmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcs
IGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhdHRy
KG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBi
b29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAgaHRtbChodG1sU3RyaW5nOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDogKGluZGV4OiBudW1iZXIsIG9sZGh0
bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGh0bWwob2JqOiBKUXVlcnkpOiBK
UXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55O1xuICAgIHByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgcHJvcChtYXA6
IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3RyaW5nLCBmdW5jOiAoaW5k
ZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUNs
YXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAgICByZW1vdmVDbGFzcyhmdW5jOiAo
aW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZVByb3Ao
cHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b2dnbGVDbGFzcyhjbGFzc05h
bWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIHRvZ2dsZUNsYXNzKHN3
dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVDbGFzcyhmdW5jOiAoaW5kZXg6IGFu
eSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHZhbCgpOiBh
bnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IHN0
cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICB2YWwo
ZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0
IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICog
QHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU2V0IG9uZSBvciBt
b3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUuXG4gICAg
ICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4gICAgICov
XG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNl
dCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNl
dCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmlu
ZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1v
cmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAg
KiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9c
biAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBz
ZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJp
bmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9y
IG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAg
ICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4g
dGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24g
b2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMu
XG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBu
dW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBl
bGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVy
dHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZh
bHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZlcyB0aGUgaW5k
ZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9sZCB2YWx1ZSBh
cyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1
ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+IG51bWJlcik6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQg
b2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFu
IG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBzZXQuXG4gICAgICovXG4gICAgY3Nz
KHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAgIGhlaWdodCgpOiBudW1iZXI7XG4g
ICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KHZhbHVlOiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRleDogYW55LCBoZWlnaHQ6IGFueSkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQoKTogbnVtYmVyO1xuICAgIGlubmVy
SGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBpbm5lcldpZHRoKCk6IG51bWJl
cjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXQo
KTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xuICAgIG9mZnNldChjb29yZGluYXRl
czogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAoaW5kZXg6IGFueSwgY29vcmRzOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW4/OiBi
b29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZhbHVlOiBudW1iZXIsIGluY2x1ZGVN
YXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lu
PzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoKHZhbHVlOiBudW1iZXIsIGluY2x1
ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgcG9zaXRpb24oKTogeyB0b3A6IG51
bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xsTGVmdCgpOiBudW1iZXI7XG4gICAg
c2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgc2Nyb2xsVG9wKCk6IG51
bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIHdpZHRo
KCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHdpZHRo
KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgoZnVuYzogKGluZGV4OiBhbnksIGhl
aWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBEYXRhXG4gICAgY2xlYXJRdWV1
ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBkYXRhKGtleTogc3RyaW5nLCB2
YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsg
fSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxuICAgIGRlcXVldWUo
cXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlRGF0YShuYW1lT3JMaXN0
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRcbiAgICBwcm9taXNlKHR5cGU/OiBh
bnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIC8vIEVmZmVjdHNc
biAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGNvbXBsZXRlPzog
RnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIGR1cmF0aW9u
PzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4g
ICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IHsgZHVyYXRpb24/OiBhbnk7IGVh
c2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsgc3RlcD86IEZ1bmN0aW9uOyBxdWV1
ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0pOiBKUXVlcnk7XG5cbiAgICBkZWxh
eShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBm
YWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVJ
bihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/
OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVt
YmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG8oZHVyYXRpb246IGFueSwg
b3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5
O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxs
YmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgpOiBKUXVlcnk7XG5cbiAgICBoaWRl
KGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBoaWRlKGR1cmF0
aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2hv
dyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVy
eTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9nZ2xlKGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVVcChk
dXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVVcChkdXJh
dGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxu
ICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBUb0Vu
ZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUoZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgZWFzaW5nPzog
c3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICB0b2dnbGUoc2hvd09ySGlkZTog
Ym9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xuICAgIGJpbmQoZXZlbnRUeXBlOiBz
dHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBl
dmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBiaW5k
KGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAg
IGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxuICAgIGJsdXIoaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGJsdXIo
ZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjaGFu
Z2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNoYW5nZSgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2hh
bmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwi
Y2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGNsaWNrKCk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xpY2tc
IiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRs
ZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2soaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2
ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoq
XG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50
IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vz
aW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1
c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzaW4oZXZl
bnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywg
dG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgYW5kIGxlYXZlcyB0
aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlckluIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyB0aGUgZWxlbWVudC5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbW91
c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxl
ckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnksIGhhbmRsZXJPdXQ6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8gdGhlIG1hdGNoZWQgZWxlbWVudHMs
IHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0
aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlckluT3V0IEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVudGVycyBvciBsZWF2ZXMgdGhl
IGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxlckluT3V0OiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBU
cmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwiXCIgSmF2YVNjcmlwdCBldmVudFxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVzc1wiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVzc1wiIEphdmFTY3JpcHQgZXZlbnRc
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXByZXNz
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGV2ZW50
RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5dXBc
IiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIGtleXVwKCk6IEpRdWVyeTtcbiAg
ICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5dXBcIiBKYXZh
U2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
a2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERh
dGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBl
dmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChl
dmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZl
bnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91
c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBKYXZhU2NyaXB0IGV2ZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBk
YXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBh
cmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZWVudGVyXCIgZXZlbnQgb24gYW4g
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6IEpRdWVyeTtcbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91c2UgZW50
ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBl
dmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBlbGVtZW50
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byBiZSBmaXJlZCB3aGVu
IHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVu
dERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhl
Y3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VsZWF2
ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRo
ZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2Vt
b3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZhU2NyaXB0IGV2ZW50Llxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRh
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91dFwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91dFwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3V0KGV2ZW50RGF0YTog
T2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VvdmVy
XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW92
ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAg
KiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1cFwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICovXG4gICAgb2Zm
KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlci5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2
ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBvciBqdXN0IG5hbWVzcGFjZXMsIHN1
Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5cIiwgb3IgXCIubXlQbHVnaW5cIi5c
biAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhl
IG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5k
bGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRsZXIgZnVuY3Rpb24gcHJldmlvdXNs
eSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUgc3BlY2lhbCB2YWx1ZSBmYWxzZS5c
biAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yPzogc3RyaW5nLCBoYW5k
bGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5k
IG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNr
XCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUg
ZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihl
dmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVy
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3Qgd2hlcmUgdGhlIHN0cmlu
ZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMg
YW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBoYW5kbGVy
IGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAgICog
QHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSBvbmUgb3Jp
Z2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hpbmcgZXZlbnQgaGFuZGxlcnMuXG4g
ICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9y
Pzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxl
bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNl
cGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNs
aWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVl
IGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0
IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJhbWV0ZXIgYXJncyBpcyBmb3Igb3B0
aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRyaWdnZXIoKS4gTm90ZSB0aGF0IHRo
ZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBtdXN0IGJl
IG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czog
c3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0LCAuLi5hcmdz
OiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVu
dCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVk
IGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFj
ZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMg
XCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMg
bnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJl
YWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZh
bHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNp
bXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHN0cmluZywg
c2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5k
bGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1l
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlj
a1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNl
bGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBl
bGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBv
ciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMg
dGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNz
ZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IGlzIHRyaWdnZXJl
ZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFzIGEg
c2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNlLlxu
ICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBh
bnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBm
b3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdoaWNoIHRoZSBzdHJpbmcga2V5cyBy
ZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRp
b25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXByZXNlbnQgYSBoYW5kbGVyIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxl
Y3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFuZGxlci4gSWYgdGhlIHNlbGVjdG9y
IGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGl0
IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSB0
byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVuIGFuIGV2ZW50IG9j
Y3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBz
ZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0
dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIg
aXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAg
ICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3Jl
IEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwic3VibWl0LFwi
IG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5k
bGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVk
IGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBKYXZhU2NyaXB0
IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcInN1Ym1pdCxcIiBvciBjdXN0b20g
ZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0
YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmluZywgZGF0YTogT2JqZWN0
LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0
aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxl
bWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9y
IG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2Vz
LCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFy
YW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBv
ZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhlIHNl
bGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2VyZWQg
d2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRo
ZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rp
b24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50
czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEg
aGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVj
dXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBl
cyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3du
Lm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRv
IGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJp
Z2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBl
dmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxl
bWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxl
ciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEg
ZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb25l
KGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8q
KlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4g
VGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVu
dCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBvYmplY3QgaW4gd2hpY2gg
dGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZl
bnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFsdWVzIHJlcHJlc2Vu
dCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0aGUgZXZlbnQocykuXG4gICAg
ICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2Vu
ZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2lsbCBjYWxsIHRoZSBoYW5kbGVy
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgaGFuZGxlciBpcyBhbHdh
eXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBA
cGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRh
IHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHsgW2tleTog
c3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywgZGF0YT86IGFueSk6IEpRdWVyeTtc
blxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlzIHJlYWR5LlxuICAgICAqL1xuICAg
IHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJp
Z2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHJl
c2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAg
ICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9c
biAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4g
ICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzZWxlY3QoaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzZWxlY3RcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJtaXRcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRp
bWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzdWJtaXRcIiBKYXZhU2Ny
aXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250
YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAg
ICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3VibWl0KGV2ZW50RGF0YT86IGFueSwg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcsIC4uLmV4dHJhUGFyYW1ldGVyczog
YW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpOiBK
UXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5cGU6IHN0cmluZywgLi4uZXh0cmFQ
YXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVuYmluZChldmVudFR5cGU/OiBzdHJp
bmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBmbHM6IGJvb2xlYW4pOiBKUXVl
cnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xuXG4gICAgdW5kZWxlZ2F0ZSgpOiBK
UXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6IHN0cmluZywg
aGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2ZW50czogYW55KTogSlF1ZXJ5O1xu
ICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB1bmxvYWQo
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBJbnRlcm5hbHNcbiAg
ICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3RyaW5nO1xuXG4gICAgZXJyb3IoaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwdXNoU3RhY2soZWxlbWVudHM6IGFu
eVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10sIG5hbWU6IGFueSwg
YXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNYW5pcHVsYXRpb25cbiAgICBhZnRl
ciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBhZnRlcihmdW5jOiAoaW5kZXg6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4uLmNvbnRlbnQ6IGFueVtdKTogSlF1
ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIGJlZm9y
ZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBiZWZvcmUoZnVuYzogKGluZGV4OiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdpdGhEYXRhQW5kRXZlbnRzPzogYm9v
bGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIGRl
dGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGVtcHR5KCk6IEpRdWVyeTtcblxu
ICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuICAgIGluc2VydEJlZm9yZSh0
YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQoLi4uY29udGVudDogYW55W10pOiBK
UXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFueSwgaHRtbDogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICByZXBsYWNlQWxsKHRhcmdldDog
YW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVuYzogYW55KTogSlF1ZXJ5O1xuXG4g
ICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiBhbnkpOiBKUXVlcnk7XG4g
ICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtdO1xuXG4gICAgdW53cmFwKCk6IEpR
dWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgd3Jh
cChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgd3JhcEFsbCh3cmFw
cGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdyYXBJbm5lcih3cmFwcGluZ0VsZW1l
bnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVuYzogKGluZGV4OiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBlYWNoKGZ1bmM6IChpbmRl
eDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBnZXQoaW5kZXg/
OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1iZXI7XG4gICAgaW5kZXgoc2VsZWN0
b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVtZW50OiBhbnkpOiBudW1iZXI7XG5c
biAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgc2VsZWN0b3I6IHN0
cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4OiBudW1iZXJdOiBIVE1MRWxlbWVu
dDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2VsZWN0b3I6IHN0cmluZywgY29udGV4
dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xu
ICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkKG9iajogSlF1ZXJ5KTogSlF1
ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBjbG9z
ZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3Rvcjogc3Ry
aW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAgICBjbG9zZXN0KG9iajogSlF1ZXJ5
KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGNsb3Nl
c3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50KTogYW55W107XG5cbiAgICBjb250
ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5O1xuXG4gICAgZXEoaW5kZXg6IG51
bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xu
ICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGZpbHRl
cihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKG9iajogSlF1ZXJ5KTogSlF1ZXJ5
O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbmQoZWxlbWVu
dDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBm
aXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xuXG4gICAgaXMoc2VsZWN0b3I6IHN0
cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IGJvb2xl
YW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtcbiAgICBpcyhvYmo6IEpRdWVyeSk6
IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxuICAgIG1hcChjYWxsYmFjazogKGlu
ZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG5l
eHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBuZXh0QWxsKHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0
ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGlsKG9iaj86IEpRdWVyeSwgZmls
dGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVl
cnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgbm90
KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5c
biAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50KHNlbGVjdG9yPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtc
blxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmluZywgZmlsdGVyPzogc3RyaW5nKTog
SlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50PzogRWxlbWVudCwgZmlsdGVyPzogc3Ry
aW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/OiBKUXVlcnksIGZpbHRlcj86IHN0
cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcHJldlVudGls
KHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJldlVu
dGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcHJl
dlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgc2li
bGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzbGljZShzdGFydDogbnVt
YmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAvLyBVdGlsaXRpZXNcblxuICAgIHF1
ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAgIHF1ZXVlKHF1ZXVlTmFtZTogc3Ry
aW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbiAgICBxdWV1ZShuZXdRdWV1
ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xhcmUgbW9kdWxlIFwianF1ZXJ5XCIg
e1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBqUXVlcnk6IEpRdWVyeVN0YXRpYztc
bmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxpYnMvYW5ndWxhci9hbmd1bGFyLmQu
dHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIgSlMgMS4wXG4vLyBQcm9qZWN0OiBo
dHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMgYnk6IERpZWdvIFZpbGFyIDxodHRw
Oi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHVi
LmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuXG5cbmRlY2xhcmUgdmFyIGFuZ3Vs
YXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0IGZvciBwYWlubGVzcyBkZXBlbmRl
bmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAkaW5qZWN0OnN0cmluZ1td
O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBuZyBtb2R1bGUgKGFuZ3VsYXIuanMp
XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1vZHVsZSBuZyB7XG5cbiAgICAvLyBB
bGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNlXG4gICAgaW50ZXJmYWNl
IElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBhbnk7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRpY1xuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQoY29udGV4dDogYW55LCBmbjogRnVu
Y3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4gICAgICAgIGJvb3RzdHJhcChlbGVt
ZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAg
ICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9kdWxlcz86IGFueVtdKTogYXV0by5J
SW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogRWxlbWVudCwgbW9k
dWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAo
ZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2Vydmlj
ZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGluYXRpb24/OiBhbnkpOiBhbnk7XG4g
ICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0aWM7XG4gICAgICAgIGVxdWFscyh2
YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBleHRlbmQoZGVzdGlu
YXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7XG4gICAgICAgIGZvckVhY2gob2Jq
OiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IGFueSwgY29udGV4dD86
IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjogc3RyaW5nKTogYW55O1xuICAgICAg
ICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKG1vZHVsZXM/OiBh
bnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgaXNBcnJheSh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAg
ICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRWxlbWVudCh2YWx1
ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVh
bjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzT2Jq
ZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1N0cmluZyh2YWx1ZTogYW55KTog
Ym9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
ICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgLyoqIGNvbnN0cnVj
dCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZpY2lhbCBkb2NzOiBJbnRlcmZhY2Ug
Zm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0XHRzZWU6IGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0Ki9cbiAgICAgICAgbW9kdWxlKFxu
ICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUgeW91IHdhbnQgdG8gY3JlYXRlICov
XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAvKiogbmFtZSBvZiBtb2R1
bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAgIHJlcXVpcmVzPzogc3RyaW5nW10s
XG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6IElNb2R1bGU7XG4gICAgICAgIG5v
b3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0b0pzb24ob2JqOiBhbnksIHByZXR0
eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVyY2FzZShzdHI6IHN0cmluZyk6IHN0
cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgZnVsbDogc3RyaW5nO1xuICAg
ICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbm9yOiBudW1iZXI7XG4gICAg
ICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNvZGVuYW1lOiBzdHJpbmc7XG4gICAg
ICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTW9kdWxlXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElNb2R1bGUge1xuICAgICAgICBh
bmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0b3J5OiBGdW5jdGlvbik6IElNb2R1
bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0
aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihvYmplY3Q6IE9iamVjdCk6
IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0
VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9y
bWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhjb25maWdGbjog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29uZmlndXJlIGV4aXN0aW5nIHNlcnZp
Y2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRv
IGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRcdCAqL1xuICAgICAgICBjb25maWco
aW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgY29uc3Rh
bnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVsZTtcbiAgICAgICAgY29uc3RhbnQo
b2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmlu
ZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGNv
bnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRDb25zdHJ1Y3RvcjogYW55W10p
OiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVjdCA6IE9iamVjdCk6IElNb2R1bGU7
XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0
aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgaW5saW5lQW5u
b3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG9iamVj
dDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIHNlcnZp
Y2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShu
YW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4g
ICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIo
bmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtc
biAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFu
eVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtc
biAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJDb25zdHJ1Y3Rv
cjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIGlu
bGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHByb3Zp
ZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGluaXRpYWxpemF0aW9u
RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgcnVuKGlubGluZUFubm90YWRl
ZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5n
LCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgc2Vydmlj
ZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1
bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICB2
YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAgLy8gUHJvcGVydGllc1xuICAgICAg
ICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBzdHJpbmdbXTtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVz
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBdHRyaWJ1dGVzIHtcblx0
Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHNjb3BlZCBhdHRy
aWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8gYmVjYXVzZSB5b3UgaGF2ZSB0byB1
c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9vIGJ1dCBJIGRvbid0IGtub3cgb2Yg
YSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBsaW1pdGVkIHRvIHJldHVy
biBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVtOiBodHRwOi8vc3RhY2tvdmVyZmxv
dy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0cmluZ106IGFueTtcblxuICAgICAg
ICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBw
YXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVu
YWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gZm9y
IHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENsYXNzKGNsYXNzVmFsOiBzdHJpbmcp
OiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZp
ZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZVxuICAgICAgICAvLyBlbGVtZW50
LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJp
Z2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVtb3ZhbC5cbiAgICAgICAgJHJlbW92
ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFNldCBET00gZWxl
bWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBh
bnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFuIGludGVycG9sYXRlZCBhdHRyaWJ1
dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25j
ZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAvLyBmb2xsb3dpbmcgY29tcGlsYXRp
b24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIgdGhlXG4gICAgICAgIC8v
IGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAkb2JzZXJ2ZShuYW1lOiBzdHJp
bmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgLy8gQSBtYXAg
b2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3JtYWxpemVkIG5hbWUuIFRo
aXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVyc2UgbG9va3VwIGZyb20gbm9ybWFs
aXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAgICAgICRhdHRyOiBPYmplY3Q7XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRm9ybUNvbnRyb2xsZXJcbiAg
ICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOmZvcm0u
Rm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUZv
cm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFuO1xuICAgICAgICAkZGly
dHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGludmFsaWQ6
IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAgICAgICAkYWRkQ29udHJvbChjb250
cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkcmVtb3ZlQ29udHJv
bChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xuICAgICAgICAkc2V0RGly
dHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGlyZWN0aXZlOm5nTW9kZWwuTmdNb2Rl
bENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSU5nTW9k
ZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2b2lkO1xuICAgICAgICAkc2V0VmFs
aWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lk
O1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2aWV3VmFsdWUgYW5kIG1vZGVsVmFs
dWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAgIC8vIHR5cGVzIGRvIHdvcmsgYW5k
IGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAkc2V0Vmlld1ZhbHVlKHZhbHVlOiBh
bnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7XG5cbiAgICAgICAgJG1vZGVsVmFs
dWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVsUGFyc2VyW107XG4gICAgICAgICRm
b3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAgICAgJGVycm9yOiBhbnk7XG4gICAg
ICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRpcnR5OiBib29sZWFuO1xuICAgICAg
ICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlkOiBib29sZWFuO1xuICAgIH1cblxu
ICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtc
biAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0dGVyIHtcbiAgICAgICAgKHZhbHVl
OiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2Nv
cGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29w
ZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJU2NvcGUge1xu
ICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBwbHkoZXhwOiBzdHJpbmcpOiBhbnk7
XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBhbnk7XG5cbiAg
ICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJF
dmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAgICAgICAgJGRpZ2VzdCgpOiB2b2lk
O1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogSUFuZ3VsYXJF
dmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBi
dXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsKGV4cHJl
c3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtcbiAgICAgICAgJGV2YWwoZXhwcmVz
c2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86IE9iamVjdCk6IGFueTtcblxuICAg
ICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGlt
cGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRldmFsQXN5bmMoZXhwcmVzc2lvbjog
c3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiAoc2NvcGU6IElT
Y29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZSBieSB0
aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lcbiAgICAgICAgJG5ldyhpc29sYXRl
PzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24obmFtZTogc3RyaW5nLCBsaXN0ZW5l
cjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogRnVuY3Rp
b247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogc3RyaW5nLCBsaXN0ZW5lcj86
IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAgICAgICR3
YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI/OiAobmV3VmFsdWU6IGFueSwg
b2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55LCBvYmplY3RFcXVhbGl0eT86IGJv
b2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjogKHNjb3Bl
OiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcsIG9iamVjdEVxdWFsaXR5PzogYm9v
bGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6
IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55
LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0
aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcs
IGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkg
PT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0Y2hFeHByZXNz
aW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcjogKG5ld1ZhbHVlOiBhbnksIG9s
ZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IEZ1bmN0aW9uO1xuXG4gICAgICAg
ICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51bWJlcjtcblxuICAgICAgICAvLyBI
aWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5kaW5nczogYW55O1xuICAgICAgICAk
JHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyRXZlbnQge1xuICAg
ICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBjdXJyZW50U2NvcGU6IElTY29wZTtc
biAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogRnVuY3Rpb247
XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gQXZhaWxh
YmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRcbiAgICAgICAgc3RvcFByb3BhZ2F0
aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
V2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElXaW5kb3dT
ZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1bWVudGVkLCBzbyB3ZSBuZWVkIHRv
IGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk/OiBudW1i
ZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAgICAgIGNhbmNl
bChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xuICAgICAgICAoZnVuYzogRnVuY3Rp
b24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBpbnZva2VBcHBseT86IGJvb2xlYW4p
OiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJvbWlzZTogSVByb21pc2U8YW55Pik6
IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmlsdGVy
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZmls
dGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJQ
cm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRmlsdGVyU2Vy
dmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBp
bnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFjdG9yeTogRnVuY3Rpb24pOiBJU2Vy
dmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExv
Y2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcu
JGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYWxlU2Vy
dmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgICAgLy8gVGhlc2UgYXJlIG5vdCBk
b2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIncyBpMThuIGZpbGVzIGZvciBleGVt
cGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2FsZU51bWJlckZvcm1hdERlc2NyaXB0
b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2Ny
aXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55KSA9PiBzdHJpbmc7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAg
REVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBfU0VQOiBzdHJpbmc7XG4gICAgICAg
IFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2NyaXB0b3JbXTtcbiAgICAgICAgQ1VS
UkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJQ
YXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDogbnVtYmVyO1xuICAgICAgICBtaW5G
cmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJlcjtcbiAgICAgICAgcG9zUHJlOiBz
dHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAgICAgICBuZWdQcmU6IHN0cmluZztc
biAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdTaXplOiBudW1iZXI7XG4gICAgICAg
IGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTG9jYWxlRGF0ZVRpbWVG
b3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0cmluZ1tdO1xuICAgICAgICBTSE9S
VE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJpbmdbXTtcbiAgICAgICAgU0hPUlRE
QVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5nW107XG4gICAgICAgIG1lZGl1bTog
c3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAgICAgICBmdWxsRGF0ZTogc3RyaW5n
O1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1EYXRlOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAgICBtZWRpdW1UaW1lOiBzdHJpbmc7
XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJ
TG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2FsbDtcbiAgICAgICAgZXJyb3I6IElM
b2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAgICAgICAgbG9nOiBJTG9nQ2FsbDtc
biAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4gICAgLy8gV2UgZGVmaW5lIHRoaXMg
YXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9wZW4gaXQgbGF0ZXIgZm9yXG4gICAg
Ly8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNlIElMb2dDYWxsIHtcbiAgICAgICAg
KC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElQ
YXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjogc3RyaW5nKTogSUNvbXBpbGVkRXhw
cmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVkRXhwcmVzc2lvbiB7XG4g
ICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcblxuICAgICAgICAvLyBJ
ZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBpcyBnb25uYSBiZSB1c2VkIHNpbmNl
IHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCBjaGVjayB0aGUgcGFyYW1l
dGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0ZW5jeS4gSWYgY29uc3VtZXJcbiAg
ICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNzIHRoZSB1bmRlZmluZWQgdmFsdWUg
ZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6IGFueSwgdmFsdWU6IGFueSk6IGFu
eTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhdGlvblNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9u
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRsb2NhdGlvblBy
b3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGV2X2d1
aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVy
ZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJzVXJsKCk6IHN0cmluZztcbiAgICAg
ICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3SGFzaDogc3RyaW5nKTogSUxvY2F0
aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgoKTogc3Ry
aW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90b2NvbCgpOiBzdHJpbmc7XG4gICAg
ICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKCk6IGFueTtc
biAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4g
ICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFyYW1ldGVyVmFsdWU6IGFueSk6IElM
b2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJpbmc7XG4gICAgICAgIHVybCh1cmw6
IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2Nh
dGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGhhc2hQcmVm
aXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHByZWZpeDogc3RyaW5nKTogSUxvY2F0
aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBib29sZWFuO1xuXG4gICAgICAgIC8v
IERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVyIGlzIHN0cmluZywgYnV0XG4gICAg
ICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJvb2xlYW4sIHdoaWNoIG1ha2VzIG1v
cmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHRvZ2dsZXJcbiAgICAgICAgaHRt
bDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50U2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9jdW1lbnRcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2VydmljZSBleHRlbmRzIERvY3VtZW50
IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFeGNlcHRpb25IYW5kbGVyU2Vy
dmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZXhjZXB0
aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRXhjZXB0
aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0aW9uOiBFcnJvciwgY2F1c2U/OiBz
dHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJv
b3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7fVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVFT
ZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJvbWlzZTxhbnk+W10pOiBJUHJvbWlz
ZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZlcnJlZDxUPjtcbiAgICAgICAgcmVq
ZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xuICAgICAgICB3aGVuPFQ+KHZhbHVl
OiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElQcm9taXNlPFQ+IHtc
biAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQp
ID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxU
UmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChwcm9taXNl
VmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjog
YW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9t
aXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHBy
b21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxsYmFjaz86IChyZWFzb246IGFueSkg
PT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21p
c2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVh
c29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6IElQcm9taXNlPFRSZXN1bHQ+O1xu
ICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElQcm9t
aXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+
KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCk6IElQcm9taXNlPFRSZXN1bHQ+
O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxseUNhbGxiYWNrOiAoKT0+YW55KTpJ
UHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSURlZmVycmVkPFQ+IHtc
biAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xuICAgICAgICByZWplY3QocmVhc29u
PzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRlPzphbnkpOiB2b2lkO1xuICAgICAg
ICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xuICAgICAgICAoKTogdm9pZDtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZp
Y2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Nyb2xsaW5nKCk6IHZvaWQ7XG4gICAg
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ2FjaGVGYWN0b3J5U2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY2FjaGVGYWN0b3J5
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDYWNoZUZhY3RvcnlTZXJ2
aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUgb3B0aW9uc01hcCB0byBoYXZlIHRo
ZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGl0J3MgdGhlIE9OTFkg
b3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvZGF5LCBhIGNvbnN1bWVy
XG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGFzc29jaWF0ZSBzb21lIG90aGVy
IG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAgICAgLy8oY2FjaGVJZDogc3RyaW5n
LCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9KTogQ2FjaGVPYmplY3Q7XG4gICAg
ICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFjaXR5OiBudW1iZXI7IH0p
OiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9kcyBiZWxsb3cgYXJlIG5vdCBkb2N1
bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAgICBnZXQgKGNhY2hlSWQ6IHN0cmlu
Zyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNhY2hlT2JqZWN0IHtc
biAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAg
c2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3QgZ2FyYW50ZWVkIHRvIGhhdmUsIHNp
bmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAgICAgICAgICAgLy9jYXBhY2l0eTog
bnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5OiBzdHJpbmcsIHZhbHVlPzogYW55
KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6IGFueTtcbiAgICAgICAgcmVtb3Zl
KGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlQWxsKCk6IHZvaWQ7XG4gICAgICAg
IGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50OiBzdHJpbmcsIHRyYW5zY2x1ZGU/
OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRlbXBs
YXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCwgdHJhbnNjbHVk
ZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVt
cGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVtZW50OiBKUXVlcnksIHRyYW5zY2x1
ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9yaXR5PzogbnVtYmVyKTogSVRl
bXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29tcGlsZVBy
b3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1l
OiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSUNvbXBpbGVQcm92aWRlcjtc
blxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBpcyB0aGVyZS4uLlxuICAgICAgICBk
aXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBpbGVQcm92aWRlcjtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uIHtcbiAgICAgICAgLy8gTGV0
J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4ncyBzaWduYXR1cmVcbiAgICAgICAg
KHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xvbmVkRWxlbWVudD86IEpRdWVyeSwg
c2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyU2VydmljZSB7XG4gICAgICAgIC8v
IEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc3RhdGUgdGhpcywgbG9jYWxzIGFy
ZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9j
YWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxlck5hbWU6IHN0cmluZywgbG9jYWxz
PzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJQ29udHJvbGxlclByb3ZpZGVy
IGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmlu
ZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IHZvaWQ7XG4gICAgICAgIHJlZ2lz
dGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6
IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cFNlcnZp
Y2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGh0dHBcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBTZXJ2aWNlIHtcbiAgICAg
ICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3QgYmUgcHJvdmlkZWQuLi5cbiAgICAg
ICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAg
Z2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxhbnk+
O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0
dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/
OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAganNvbnAodXJsOiBzdHJpbmcsIFJl
cXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcG9zdCh1cmw6
IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFu
eT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZp
ZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQgaXQgaXMgZG9jdW1lbnRlZCBhcyBw
dWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0czogYW55W107XG4gICAgfVxuXG4g
ICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAgIC8vIFNvbWUgb3BldGlvbnMgbWln
aHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3QuXG4gICAgLy8gc2Vl
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwI1VzYWdlIGZvciBvcHRpb25z
IGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVzdENvbmZpZyB7XG4gICAgICAgIG1l
dGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgcGFyYW1zPzogYW55
O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24gc3RydWN0dXJlLi4uICBwZXJoYXBz
IHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxuICAgICAgICBoZWFkZXJzPzogYW55
O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29s
ZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0aXBsZSB0eXBlcywgc28gbGV0J3Mg
ZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9y
bVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNlPzogYW55O1xuICAgICAg
ICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNlXG4gICAgfVxuXG4gICAgaW50ZXJm
YWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAgICAgKGRhdGE6IFQsIHN0YXR1czog
bnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmcsIGNvbmZpZzog
SVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21p
c2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBUO1xuICAgICAgICBzdGF0dXM/OiBu
dW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7
XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxUPiB7XG4gICAgICAgIHN1Y2Nlc3Mo
Y2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTogSUh0dHBQcm9taXNlPFQ+O1xuICAg
ICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2FsbGJhY2s8VD4pOiBJSHR0cFByb21p
c2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6
IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVzdWx0LCBlcnJvckNhbGxiYWNrPzog
KHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8
VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocmVzcG9u
c2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJUHJvbWlzZTxUUmVzdWx0PiwgZXJy
b3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8VD4pID0+IGFu
eSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb3Zp
ZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRlZmF1bHRzOiBJUmVxdWVz
dENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlbXTtcbiAgICAgICAgcmVzcG9uc2VJ
bnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8g
dXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBp
bnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAgICAgIC8vIFhYWCBQZXJoYXBzIGRl
ZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAobWV0aG9kOiBz
dHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uLCBoZWFk
ZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuKTog
dm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnBvbGF0
ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGlu
dGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRp
bnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4dDogc3RyaW5nLCBtdXN0SGF2ZUV4
cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25GdW5jdGlvbjtcbiAgICAgICAgZW5k
U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgIH1c
blxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0aW9uIHtcbiAgICAgICAgKGNvbnRl
eHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlUHJv
dmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgc3RhcnRTeW1ib2woKTog
c3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRl
UHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIGVuZFN5bWJv
bCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNoZVNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRlbXBsYXRlQ2FjaGVcbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlIGV4dGVu
ZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSb290
U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RT
Y29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpbnRlcmZhY2UgSVNDRVNlcnZp
Y2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFu
eTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0Z2V0VHJ1c3RlZEh0
bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSnModmFsdWU6IGFueSk6IGFueTtc
blx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVz
dGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2UodHlwZTogc3RyaW5nLCBleHByZXNz
aW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBh
cnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkp
ID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDog
YW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNKcyhleHByZXNzaW9uOiBzdHJp
bmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNSZXNv
dXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkg
PT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRleHQ6IGFu
eSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFzKHR5cGU6IHN0cmluZywgdmFsdWU6
IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0
QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNSZXNvdXJjZVVybCh2YWx1ZTogYW55
KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6IGFueTtcblx0XHRpc0VuYWJsZWQo
KTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFUHJv
dmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VQcm92aWRl
ciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICBlbmFibGVkKHZhbHVlOiBib29s
ZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VE
ZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkv
bmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElT
Q0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVzdGVkKHR5cGU6IHN0cmluZywgbWF5
QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1
ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxu
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVByb3ZpZGVyXG4g
ICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VEZWxlZ2F0ZVBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0
ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlc291cmNlVXJs
QmxvY2tsaXN0KGJsb2NrbGlzdDogYW55W10pOiB2b2lkO1xuICAgICAgICByZXNvdXJjZVVybEFs
bG93bGlzdChhbGxvd2xpc3Q6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmVcbiAgICAvLyBhbmQgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3RpdmVcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xuICAgICAgICBjb21waWxlPzpcbiAg
ICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAgICAgICAgICAgIHRlbXBsYXRlQXR0
cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0cmFuc2NsdWRlOiAoc2NvcGU6IElT
Y29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2b2lkXG4gICAgICAgICAgICApID0+
IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAgICAgICAgY29udHJvbGxlckFzPzog
c3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAgIChzY29wZTogSVNjb3BlLFxuICAg
ICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAgICAgICAgICBpbnN0YW5jZUF0dHJp
YnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29udHJvbGxlcjogYW55XG4gICAgICAg
ICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHByaW9yaXR5
PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAgICAgICAgcmVxdWlyZT86
IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4gICAgICAgIHNjb3BlPzogYW55O1xu
ICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVtcGxhdGVVcmw/OiBhbnk7XG4gICAg
ICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJhbnNjbHVkZT86IGFueTtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhbmd1bGFyLmVsZW1lbnRcbiAgICAv
LyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1bGFyIHJldHVybnMgYSBqUXVlcnkg
b2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0aW9uYWwgbWV0aG9kcyBsaWtlIGUu
Zy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hbmd1
bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUF1Z21l
bnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRpYyB7XG4gICAgICAgIChzZWxlY3Rv
cjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGVs
ZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAob2JqZWN0OiB7fSk6
IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50QXJyYXk6IEVsZW1lbnRbXSk6IElB
dWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVl
cnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAg
IChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoKTogSUF1Z21lbnRl
ZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeSBleHRlbmRz
IEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywgaG93IHRvIGRlZmluZT9cbiAgICAg
ICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0b3I6IHN0cmluZyk6IElBdWdtZW50
ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55KTogSUF1Z21lbnRlZEpRdWVyeTtc
biAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7XG5cbiAgICAgICAg
Y29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGluamVjdG9yKCk6IGFueTtc
biAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAgIGluaGVyaXRlZERhdGEoa2V5OiBz
dHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAgIGluaGVyaXRlZERhdGEob2JqOiB7
IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShr
ZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
XG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
ICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
ICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAgICAgICAgICAgIGFubm90YXRlKGZu
OiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAgYW5ub3RhdGUoaW5saW5lQW5ub3Rh
ZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAgICAgICAgICBnZXQgKG5hbWU6IHN0
cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRlKHR5cGVDb25zdHJ1Y3RvcjogRnVu
Y3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgICAgIGludm9rZShpbmxpbmVBbm5v
dGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAgICAgICBpbnZva2UoZnVuYzogRnVu
Y3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAgfVxuXG4g
ICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFByb3ZpZGVTZXJ2aWNlXG4gICAgICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9BVVRPLiRwcm92aWRlXG4gICAg
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJUHJvdmlkZVNlcnZpY2Uge1xu
ICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0IHJldHVybnMgdGhlIHJlZ2lzdGVy
ZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAgIC8vIGNvbnN0YW50KG5hbWU6IHN0
cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAgIGNvbnN0YW50KG5hbWU6IHN0cmlu
ZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAgIGRlY29yYXRvcihuYW1lOiBzdHJp
bmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgICAgICAgICAgZGVjb3JhdG9yKG5h
bWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgICAgICBm
YWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBu
Zy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlu
bGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4gICAg
ICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBuZy5JU2VydmljZVByb3Zp
ZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0
cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogbmcuSVNlcnZpY2VQ
cm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTogc3RyaW5nLCBjb25zdHJ1Y3Rvcjog
RnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgdmFsdWUobmFtZTog
c3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgfVxuXG4g
ICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3Vz
ZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9JdGVtIHtcbiAgICAgICAgY29uc3Ry
dWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgICAgIHB1
YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICkgeyB9XG4gICAgfVxufVxuLy8g
aW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRl
cmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7XG5cdFx0dG9kb3M6IFRvZG9JdGVt
W107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRlZFRvZG86IFRvZG9JdGVtO1xuXHRc
dG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWluaW5nQ291bnQ6IG51bWJlcjtcblx0
XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2VkOiBib29sZWFuO1xuXHRcdHJldmVy
dGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBjb21wbGV0ZWQ/OiBib29sZWFuIH07
XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7XG5cdFx0dm06IFRvZG9DdHJsO1xu
XHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xu
XHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5cdFx0Z2V0ICgpOiBUb2RvSXRlbVtd
O1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1cbn0vLyBkaXJlY3RpdmVzL1RvZG9G
b2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAq
IERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVk
IHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVhdGVzIHRvIHRydWUuXG5c
dCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0OiBuZy5JVGltZW91dFNl
cnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGluazogKCRzY29w
ZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRc
dFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0ZvY3VzLCBuZXd2YWwgPT4ge1xuXHRc
dFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0aW1lb3V0KCgpID0+IGVsZW1lbnRb
MF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9
XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0ID0gWyckdGltZW91dCddO1xuXG59
Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3Ry
aWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0aGF0IGV4ZWN1dGVzIGFuIGV4cHJl
c3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIGxvc2VzIGZvY3VzLlxuICAg
ICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigpOiBuZy5JRGlyZWN0aXZlIHtcbiAg
ICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxl
bWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVt
ZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvQmx1
cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBl
bGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAg
ICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNcblxubW9kdWxlIHRvZG9zIHtcblx0
J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkgPSAyNztcblxuXHQvKipcblx0ICog
RGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9kbyBpZiB0aGUgdXNlciBwcmVzc2Vz
IHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIHRvZG9Fc2NhcGUoKTogbmcu
SURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxpbms6ICgkc2NvcGU6IG5nLklTY29w
ZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtcblx0XHRcdFx0ZWxlbWVu
dC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNv
ZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoYXR0cmlidXRl
cy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdCRzY29w
ZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgna2V5ZG93bicpOyB9KTtc
blx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNlcy9Ub2RvU3RvcmFnZS50c1xuXG5t
b2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIFNlcnZp
Y2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RPcyBmcm9tIGxvY2FsU3RvcmFnZS5c
biAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3JhZ2UgaW1wbGVtZW50cyBJVG9kb1N0
b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzLXR5cGVzY3Jp
cHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7XG4gICAgICAgICAgICByZXR1cm4g
SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQpIHx8ICdbXScp
O1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBUb2RvSXRlbVtdKSB7XG4gICAgICAg
ICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfSUQsIEpTT04uc3RyaW5naWZ5
KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29udHJvbGxlcnMvVG9kb0N0cmwudHNc
blxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWFp
biBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjpcblx0ICogLSByZXRyaWV2
ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRvZG9TdG9yYWdlIHNlcnZpY2Vcblx0
ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxhdGUgYW5kIHByb3ZpZGVzIGV2ZW50
IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9kb0N0cmwge1xuXG5cdFx0cHJpdmF0
ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmplY3QgYW5ub3RhdGlvbi5cblx0XHQv
LyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNp
ZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3RvclxuXHRcdC8vIGl0IGlzIGJldHRlciB0
byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3RvciwgYmVjYXVzZSB0aGUgcGFyYW1ldGVy
cyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRcdC8vIFNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0YXRpYyAkaW5qZWN0ID0gW1xuXHRc
dFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0XHRcdCd0b2RvU3RvcmFnZScsXG5c
dFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQvLyBkZXBlbmRlbmNpZXMgYXJlIGlu
amVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0Ly8gY29udHJvbGxlcidzIG5hbWUg
aXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQgc3BlY2lmaWVkIGZyb20gbmctY29u
dHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRcdGNvbnN0cnVjdG9yKFxuXHRcdFx0
cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRwcml2YXRlICRsb2NhdGlvbjogbmcu
SUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9kb1N0b3JhZ2U6IElUb2RvU3RvcmFn
ZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnRvZG9z
ID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7XG5cblx0XHRcdCRzY29wZS5uZXdU
b2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cblx0XHRcdC8vICd2
bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFkZGluZyBhIHJlZmVyZW5jZSB0byB0
aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8vIGZvciBpdHMgbWV0aG9kcyB0byBi
ZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRcdCRzY29wZS52bSA9IHRoaXM7XG5c
blx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdlcyBpbiBzY29wZSwgd2hpY2ggYXJl
IGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8vIGlmIHlvdSBzdWJzY3JpYmUgdG8g
c2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIgdGhhbiB0aGlzIGNvbnRyb2xsZXIs
IG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQkc2NvcGUuJHdhdGNoKCd0b2Rvcycs
ICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRcdCRzY29wZS4kd2F0Y2goJ2xvY2F0
aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0aCkpXG5cblx0XHRcdGlmICgkbG9j
YXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgoJy8nKTtcblx0XHRcdCRzY29wZS5s
b2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRvblBhdGgocGF0aDogc3RyaW5nKSB7
XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0aCA9PT0gJy9hY3RpdmUnKSA/
XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09ICcvY29tcGxldGVkJykg
P1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307XG5cdFx0fVxuXG5cdFx0b25Ub2Rv
cygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50ID0gdGhpcy5maWx0ZXJGaWx0
ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0aDtcblx0XHRcdHRoaXMu
JHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3RoIC0gdGhpcy4kc2NvcGUucmVtYWlu
aW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVja2VkID0gIXRoaXMuJHNjb3BlLnJl
bWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdlLnB1dCh0aGlzLnRvZG9zKTtcblx0
XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5ld1RvZG8gOiBzdHJpbmcgPSB0aGlz
LiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICghbmV3VG9kby5sZW5ndGgpIHtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZG9zLnB1c2gobmV3IFRvZG9J
dGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRzY29wZS5uZXdUb2RvID0gJyc7XG5c
dFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLiRz
Y29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRcdC8vIENsb25lIHRoZSBvcmlnaW5h
bCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQuXG5cdFx0XHR0aGlzLiRzY29wZS5v
cmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9kb0l0ZW0pO1xuXHRcdH1cblxuXHRc
dHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xuXHRcdFx0dGhpcy50b2Rvc1t0aGlz
LnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbztcblx0
XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRkb25lRWRpdGlu
Zyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSBu
dWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvID0gbnVsbDtcblx0XHRcdGlmICh0
aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBUb2RvIGVkaXRzIHdlcmUgcmV2ZXJ0
ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gbnVsbDtcblx0
XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0ZW0udGl0bGUgPSB0b2RvSXRlbS50
aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRpdGxlKSB7XG5cdFx0XHRcdHRoaXMu
cmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVtb3ZlVG9kbyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9kb3Muc3BsaWNlKHRoaXMudG9kb3Mu
aW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRcdGNsZWFyRG9uZVRvZG9zKCkge1xu
XHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIo
dG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5cdFx0fVxuXG5cdFx0bWFya0FsbChj
b21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9kb3MuZm9yRWFjaCh0b2RvSXRlbSA9
PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsgfSk7XG5cdFx0fVxuXHR9XG5cbn1c
bi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1haW4gVG9kb01WQyBhcHAgbW9kdWxl
LlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAqL1xubW9kdWxlIHRvZG9zIHtcbiAg
ICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9IGFuZ3VsYXIubW9kdWxlKCd0b2Rv
bXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcigndG9kb0N0cmwnLCBUb2RvQ3RybClc
biAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgdG9kb0JsdXIpXG4gICAgICAgICAg
ICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMpXG4gICAgICAgICAgICAuZGlyZWN0
aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAgICAgICAgIC5zZXJ2aWNlKCd0b2Rv
U3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKIAogLyoqKi8gfSksCiAvKiA0MTUgKi8KIC8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotbW9kdWxlLmV4cG9ydHMgPSAiLy8g
ICAgIFVuZGVyc2NvcmUuanMgMS44LjNcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xu
Ly8gICAgIChjKSAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJ
bnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBi
ZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24o
KSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBF
c3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4
cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuXG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRo
ZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRl
cnNjb3JlID0gcm9vdC5fO1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQg
bm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBl
LCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3Rv
dHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQg
YWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9
IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGlj
ZSxcbiAgICB0b1N0cmluZyAgICAgICAgID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgaGFzT3du
UHJvcGVydHkgICA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIEFsbCAqKkVDTUFT
Y3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRv
IHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyXG4gICAgbmF0aXZlSXNBcnJheSAg
ICAgID0gQXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qua2V5
cyxcbiAgICBuYXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZCxcbiAgICBuYXRpdmVD
cmVhdGUgICAgICAgPSBPYmplY3QuY3JlYXRlO1xuXG4gIC8vIE5ha2VkIGZ1bmN0aW9uIHJlZmVy
ZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgdmFyIEN0b3IgPSBmdW5j
dGlvbigpe307XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2Nv
cmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
aWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5j
ZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9
O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3
aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClg
IEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwg
b2JqZWN0LlxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYg
KHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAg
ICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBf
O1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNp
b24uXG4gIF8uVkVSU0lPTiA9ICcxLjguMyc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhh
dCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAv
LyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4g
b3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVu
Y3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9p
ZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJn
Q291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGNhc2Ug
MjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKGNvbnRleHQsIHZhbHVlLCBvdGhlcik7XG4gICAgICB9O1xuICAgICAgY2FzZSAzOiByZXR1
cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBm
dW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4g
ICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBj
b2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0
b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1
cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVu
dHMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8g
Z2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgLy8gdG8gZWFjaCBlbGVt
ZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0
aGVyXG4gIC8vIGlkZW50aXR5LCBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0
Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgdmFyIGNiID0gZnVuY3Rpb24odmFsdWUs
IGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlk
ZW50aXR5O1xuICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2
YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0
dXJuIF8ubWF0Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpO1xuICB9
O1xuICBfLml0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4g
Y2IodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBm
dW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNz
aWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgdW5kZWZpbmVkT25seSkge1xuICAgIHJldHVybiBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAg
ICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3Ig
KHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBz
b3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNv
dXJjZSksXG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAg
ICAgaWYgKCF1bmRlZmluZWRPbmx5IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0g
c291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcg
b2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICB2YXIgYmFzZUNyZWF0ZSA9IGZ1
bmN0aW9uKHByb3RvdHlwZSkge1xuICAgIGlmICghXy5pc09iamVjdChwcm90b3R5cGUpKSByZXR1
cm4ge307XG4gICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5
cGUpO1xuICAgIEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBu
ZXcgQ3RvcjtcbiAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtc
biAgfTtcblxuICB2YXIgcHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5
XTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRv
IGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQg
YXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0XG4gIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9wbGUu
bW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8v
IEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZh
ciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuICB2YXIgZ2V0TGVuZ3Ro
ID0gcHJvcGVydHkoJ2xlbmd0aCcpO1xuICB2YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihjb2xs
ZWN0aW9uKSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9uKTtcbiAgICBy
ZXR1cm4gdHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5ndGgg
PD0gTUFYX0FSUkFZX0lOREVYO1xuICB9O1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4g
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFj
aGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVj
dHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFy
cmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbiAgXy5lYWNoID0gXy5mb3JFYWNoID0g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1p
emVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAg
ICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAg
IGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAg
IH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBh
cHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVj
dCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNi
KGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYm
IF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAg
ICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8g
a2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2Jq
W2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0
cztcbiAgfTtcblxuICAvLyBDcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcgbGVm
dCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIE9wdGlt
aXplZCBpdGVyYXRvciBmdW5jdGlvbiBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3RoXG4gICAgLy8g
aW4gdGhlIG1haW4gZnVuY3Rpb24gd2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLlxuICAg
IGZ1bmN0aW9uIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBsZW5n
dGgpIHtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCAr
PSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBp
bmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3Vy
cmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAg
IHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAgICAgdmFyIGtl
eXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGgg
PSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDog
bGVuZ3RoIC0gMTtcbiAgICAgIC8vIERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBub25l
IGlzIHByb3ZpZGVkLlxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAg
IG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCAr
PSBkaXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVt
bywga2V5cywgaW5kZXgsIGxlbmd0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiog
YnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5q
ZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3Qg
PSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24g
b2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZv
bGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdo
aWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9
IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIg
a2V5O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBrZXkgPSBfLmZpbmRJbmRl
eChvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IF8u
ZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChrZXkgIT09
IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0
dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNl
ZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJl
ZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3Qp
KSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9
O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3Qg
ZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4
dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBt
YXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBf
LmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRl
ID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShv
YmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0
aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4g
ICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAg
aWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4g
ZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBp
ZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9i
aiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBj
b250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmop
LFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBp
bmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtl
eSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpb
Y3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBy
ZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmpl
Y3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMg
YGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8u
aW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlm
ICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9m
IGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1
cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIElu
dm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0
aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlv
bihtZXRob2QpO1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAg
ICB2YXIgZnVuYyA9IGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07XG4gICAgICByZXR1
cm4gZnVuYyA9PSBudWxsID8gZnVuYyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0p
O1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ug
b2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmos
IGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5c
biAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVy
YDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6
dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJl
dHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZl
bmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRo
ZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWly
cy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8u
ZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4
aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBm
dW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZp
bml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7
XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9
IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2
YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAg
cmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAg
aXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5j
dGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQg
fHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAg
ICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVk
O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtc
blxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21w
dXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAg
ICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0g
bnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9i
aik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0
aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPCBy
ZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxu
ICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBj
b21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21w
dXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09
PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RD
b21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0
dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhl
IG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1
ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmopID8g
b2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcbiAgICB2
YXIgc2h1ZmZsZWQgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFu
ZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbSgwLCBp
bmRleCk7XG4gICAgICBpZiAocmFuZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNodWZm
bGVkW3JhbmRdO1xuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xuICAgIH1cbiAg
ICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH07XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1
ZXMgZnJvbSBhIGNvbGxlY3Rpb24uXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJl
dHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRg
IGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuXG4gIF8uc2FtcGxlID0gZnVu
Y3Rpb24ob2JqLCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAg
ICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICAgIHJl
dHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIF8u
c2h1ZmZsZShvYmopLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKTtcbiAgfTtcblxuICAvLyBTb3J0
IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0
ZWUuXG4gIF8uc29ydEJ5ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8u
bWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xu
ICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY3Jp
dGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29y
dChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xu
ICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAg
ICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8
IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVm
dC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBB
biBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJh
dGlvbnMuXG4gIHZhciBncm91cCA9IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtc
biAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2
YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7
XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBH
cm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBz
dHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0
dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQs
IHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5w
dXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIElu
ZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3Jv
dXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVz
IHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZh
bHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3Vu
dHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJp
b24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3Ig
YSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5
ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJl
c3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xu
XG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRl
cmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1
cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xu
ICAgIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTtc
biAgICByZXR1cm4gXy52YWx1ZXMob2JqKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJl
ciBvZiBlbGVtZW50cyBpbiBhbiBvYmplY3QuXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xu
ICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9i
aikgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0
IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0
aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFs
bCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9u
KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAgXy5lYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgICAocHJlZGljYXRlKHZhbHVlLCBr
ZXksIG9iaikgPyBwYXNzIDogZmFpbCkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJu
IFtwYXNzLCBmYWlsXTtcbiAgfTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0t
LS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNz
aW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJy
YXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAg
Ly8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0g
Xy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51
bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFy
cmF5WzBdO1xuICAgIHJldHVybiBfLmluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xu
ICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhl
IGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4g
UGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJy
YXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwg
biwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwg
YXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9O1xuXG4g
IC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwg
cmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgXy5sYXN0ID0g
ZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVy
biB2b2lkIDA7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5
Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBfLnJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5
Lmxlbmd0aCAtIG4pKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBm
aXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4g
IC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFu
ICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS5c
biAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7
XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBu
KTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXku
XG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFy
cmF5LCBfLmlkZW50aXR5KTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBv
ZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rp
b24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwgc3RhcnRJbmRleCkge1xuICAgIHZhciBvdXRwdXQg
PSBbXSwgaWR4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBsZW5ndGgg
PSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9
IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoXy5pc0FycmF5KHZh
bHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgLy9mbGF0dGVuIGN1cnJl
bnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdFxuICAgICAgICBpZiAoIXNoYWxs
b3cpIHZhbHVlID0gZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0KTtcbiAgICAgICAgdmFy
IGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIG91dHB1dC5sZW5ndGggKz0gbGVu
O1xuICAgICAgICB3aGlsZSAoaiA8IGxlbikge1xuICAgICAgICAgIG91dHB1dFtpZHgrK10gPSB2
YWx1ZVtqKytdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAg
ICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0
cHV0O1xuICB9O1xuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZl
bHkgKGJ5IGRlZmF1bHQpLCBvciBqdXN0IG9uZSBsZXZlbC5cbiAgXy5mbGF0dGVuID0gZnVuY3Rp
b24oYXJyYXksIHNoYWxsb3cpIHtcbiAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywg
ZmFsc2UpO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQg
ZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICBfLndpdGhvdXQgPSBm
dW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVl
IHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVl
biBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGht
LlxuICAvLyBBbGlhc2VkIGFzIGB1bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0
aW9uKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIV8uaXNC
b29sZWFuKGlzU29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRl
cmF0ZWUgPSBpc1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlm
IChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAg
ICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2
YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRl
cmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4g
ICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xu
ICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4g
ICAgICAgIGlmICghXy5jb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVu
LnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAg
fVxuICAgICAgfSBlbHNlIGlmICghXy5jb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAg
ICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7
XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjog
ZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJy
YXlzLlxuICBfLnVuaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5pcShmbGF0dGVu
KGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkg
dGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFz
c2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAg
IHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7
XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRh
aW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBh
cmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwg
aXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3Vs
dC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRh
a2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVy
IGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJz
dCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtc
biAgICB2YXIgcmVzdCA9IGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCAxKTtcbiAgICBy
ZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhXy5j
b250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVy
IG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFy
ZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAg
ICByZXR1cm4gXy51bnppcChhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIENvbXBsZW1lbnQgb2Yg
Xy56aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8g
ZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzXG4gIF8udW56aXAgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0
TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxu
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAg
IHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVy
biByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNz
IGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3Ig
dHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFu
ZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1
bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZh
ciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xu
ICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtc
biAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0
b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVu
Y3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAg
IHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVk
aWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7
XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGly
KSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSBy
ZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4g
IC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMg
YSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4Rmlu
ZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigt
MSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBz
bWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVk
IHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVk
SW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0
ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJh
dGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAg
IHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsg
aGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cg
PSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07
XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFz
dEluZGV4T2YgZnVuY3Rpb25zXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJl
ZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0
ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xu
ICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDAp
IHtcbiAgICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0
aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/
IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9
XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAg
ICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlb
aWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0
ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBs
ZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0x
O1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlk
eCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlb
aWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJy
ZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBu
b3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5k
IGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQq
KiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIo
MSwgXy5maW5kSW5kZXgsIF8uc29ydGVkSW5kZXgpO1xuICBfLmxhc3RJbmRleE9mID0gY3JlYXRl
SW5kZXhGaW5kZXIoLTEsIF8uZmluZExhc3RJbmRleCk7XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50
ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBv
ZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBb
dGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkv
ZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBfLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3As
IHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwg
MDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgfHwgMTtcblxuICAg
IHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwg
MCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9
IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lk
eF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVu
Y3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBE
ZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3Jc
biAgLy8gb3IgYSBub3JtYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzXG4g
IHZhciBleGVjdXRlQm91bmQgPSBmdW5jdGlvbihzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRl
eHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5z
dGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdz
KTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAg
IHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChfLmlz
T2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5c
biAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmlu
ZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8g
KipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxh
YmxlLlxuICBfLmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAgaWYgKG5hdGl2
ZUJpbmQgJiYgZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBs
eShmdW5jLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9u
KGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVu
Y3Rpb24nKTtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2
YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywg
Ym91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkp
O1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBs
eSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBp
dHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFt
aWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2lu
ZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFy
dGlhbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDEpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBv
c2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gXyA/IGFyZ3VtZW50c1twb3NpdGlv
bisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFy
Z3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAg
cmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAg
fTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBv
YmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8v
IGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRo
YXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQu
XG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoLCBrZXk7XG4gICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3Io
J2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAx
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9i
altrZXldID0gXy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xu
ICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRz
IHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZh
ciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNh
Y2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhp
cywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIV8uaGFzKGNhY2hlLCBhZGRyZXNzKSkg
Y2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1
cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAg
cmV0dXJuIG1lbW9pemU7XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBn
aXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRo
IHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0
KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJu
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFy
Z3MpO1xuICAgIH0sIHdhaXQpO1xuICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hl
ZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBj
bGVhcmVkLlxuICBfLmRlZmVyID0gXy5wYXJ0aWFsKF8uZGVsYXksIF8sIDEpO1xuXG4gIC8vIFJl
dHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dl
cmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9y
bWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBp
dCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0
aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24g
dGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2Fi
bGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9
IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywg
cmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xu
ICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9u
KCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8u
bm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHko
Y29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVs
bDtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub3cgPSBfLm5v
dygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBw
cmV2aW91cyA9IG5vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZp
b3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAg
ICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlm
ICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAg
IHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAg
ICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRp
bWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQg
JiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRp
bWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xu
ICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFz
IGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQu
IFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQg
Zm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdn
ZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhl
IHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRl
KSB7XG4gICAgdmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xu
XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGFzdCA9IF8ubm93KCkg
LSB0aW1lc3RhbXA7XG5cbiAgICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAg
ICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkg
e1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAg
ICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAg
IH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRo
aXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtc
biAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0
aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2Fs
bE5vdykge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAg
ICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1
bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNz
ZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFk
anVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25k
aXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5j
dGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5j
KTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQt
aW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJl
dHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBp
cyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25z
dW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBf
LmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2
YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxs
KHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBh
ZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xu
ICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAg
ICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4g
IH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVk
IHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1
bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9u
KCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9
IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMg
YSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0
dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxp
emF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIC8vIE9iamVj
dCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEtleXMgaW4gSUUgPCA5
IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNz
ZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1l
cmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2Yn
LCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3By
b3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107
XG5cbiAgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICB2YXIg
bm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVj
dG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IChfLmlzRnVuY3Rpb24oY29u
c3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAv
LyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1
Y3Rvcic7XG4gICAgaWYgKF8uaGFzKG9iaiwgcHJvcCkgJiYgIV8uY29udGFpbnMoa2V5cywgcHJv
cCkpIGtleXMucHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAg
IHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBp
biBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAhXy5jb250YWlucyhrZXlzLCBw
cm9wKSkge1xuICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5c
biAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxu
ICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNg
XG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSBy
ZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4g
ICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2Jq
LCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhh
c0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5
cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9i
amVjdC5cbiAgXy5hbGxLZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0
KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBp
biBvYmopIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFz
RW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlz
O1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVy
dGllcy5cbiAgXy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0g
QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4g
ICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7
XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0
ZWUgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBvYmplY3RcbiAgLy8gSW4gY29udHJhc3QgdG8gXy5t
YXAgaXQgcmV0dXJucyBhbiBvYmplY3RcbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0
ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7
XG4gICAgdmFyIGtleXMgPSAgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0ga2V5cy5s
ZW5ndGgsXG4gICAgICAgICAgcmVzdWx0cyA9IHt9LFxuICAgICAgICAgIGN1cnJlbnRLZXk7XG4g
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAg
ICAgIGN1cnJlbnRLZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0c1tjdXJyZW50S2V5
XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1c
biAgICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGlu
dG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5
cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpb
a2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0
IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2Vy
aWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQg
PSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2Jq
W2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJs
ZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9u
cyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAg
IGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0p
KSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07
XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGlu
IHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoXy5hbGxL
ZXlzKTtcblxuICAvLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJv
cGVydGllcyBpbiB0aGUgcGFzc2VkLWluIG9iamVjdChzKVxuICAvLyAoaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVj
dHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2ln
bmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0
aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEtleSA9IGZ1bmN0aW9uKG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9
IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9
IGtleXNbaV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVy
biBrZXk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBv
bmx5IGNvbnRhaW5pbmcgdGhlIHdoaXRlbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ucGljayA9IGZ1
bmN0aW9uKG9iamVjdCwgb2l0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9
LCBvYmogPSBvYmplY3QsIGl0ZXJhdGVlLCBrZXlzO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0
dXJuIHJlc3VsdDtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9pdGVyYXRlZSkpIHtcbiAgICAgIGtl
eXMgPSBfLmFsbEtleXMob2JqKTtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihvaXRlcmF0
ZWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gZmxhdHRlbihhcmd1bWVu
dHMsIGZhbHNlLCBmYWxzZSwgMSk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBr
ZXksIG9iaikgeyByZXR1cm4ga2V5IGluIG9iajsgfTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmop
O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUg
PSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRb
a2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAvLyBS
ZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgYmxhY2tsaXN0ZWQgcHJvcGVy
dGllcy5cbiAgXy5vbWl0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IF8ubmVnYXRl
KGl0ZXJhdGVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLm1hcChmbGF0dGVu
KGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0g
ZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywg
a2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCk7XG4gIH07XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1
bHQgcHJvcGVydGllcy5cbiAgXy5kZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cywg
dHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBn
aXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJl
IHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9i
amVjdC5cbiAgXy5jcmVhdGUgPSBmdW5jdGlvbihwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFy
IHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMpIF8uZXh0ZW5k
T3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gQ3Jl
YXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuICBfLmNsb25l
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7
XG4gICAgcmV0dXJuIF8uaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfLmV4dGVuZCh7fSwg
b2JqKTtcbiAgfTtcblxuICAvLyBJbnZva2VzIGludGVyY2VwdG9yIHdpdGggdGhlIG9iaiwgYW5k
IHRoZW4gcmV0dXJucyBvYmouXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRo
b2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBw
ZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFp
bi5cbiAgXy50YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0
b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBh
biBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmlzTWF0
Y2ggPSBmdW5jdGlvbihvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMoYXR0
cnMpLCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVy
biAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAg
IGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFs
c2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgLy8gSW50ZXJuYWwgcmVj
dXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVu
Y3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBh
cmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8g
U2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQu
b3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBh
ICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVs
bCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBl
ZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAg
aWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0Ns
YXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAg
IGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBz
d2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBl
eHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4g
ICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNl
ZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylc
biAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5k
IHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVz
LCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIp
YC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVj
dCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJl
ZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAg
ICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVn
YWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAg
ICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAg
ICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6
XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRp
dmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlz
ZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxp
c2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2
YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFy
cmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5
cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmpl
Y3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29u
c3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xu
ICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEu
Y29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0g
YkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3Ig
JiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYm
IGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgn
Y29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1
cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3lj
bGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAv
LyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0
cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2
ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQg
dGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0
YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0g
YVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBz
ZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJl
ciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFj
a1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4g
ICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8g
UmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5
cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRl
ZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAg
ICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVw
IGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxu
ICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xl
bmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxz
ZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5r
ZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3Vy
ZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVz
IGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVu
Z3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xu
ICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1ts
ZW5ndGhdO1xuICAgICAgICBpZiAoIShfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXld
LCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8v
IFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmpl
Y3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRy
dWU7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0
d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAg
ICByZXR1cm4gZXEoYSwgYik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5n
LCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1l
cmFibGUgb3duLXByb3BlcnRpZXMuXG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xuICAg
IGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikg
JiYgKF8uaXNBcnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9i
aikpKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gXy5rZXlzKG9iaikubGVu
Z3RoID09PSAwO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9c
biAgXy5pc0VsZW1lbnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9i
ai5ub2RlVHlwZSA9PT0gMSk7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJh
eT9cbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcbiAgXy5p
c0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9T
dHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEg
Z2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rp
b24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBzb21l
IGlzVHlwZSBtZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVt
YmVyLCBpc0RhdGUsIGlzUmVnRXhwLCBpc0Vycm9yLlxuICBfLmVhY2goWydBcmd1bWVudHMnLCAn
RnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvcidd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsg
J10nO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2Yg
dGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUg
aXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgaWYgKCFfLmlzQXJn
dW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgICByZXR1cm4gXy5oYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8v
IE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0
eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkg
OCAoIzE5MjkpLlxuICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4
QXJyYXkgIT0gJ29iamVjdCcpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtc
biAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtc
biAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zp
bml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05h
TihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFO
YD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5c
biAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikg
JiYgb2JqICE9PSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFu
P1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRy
dWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJv
b2xlYW5dJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4g
IF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5l
ZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxu
ICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdp
dmVuIHByb3BlcnR5IGRpcmVjdGx5XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5v
dCBvbiBhIHByb3RvdHlwZSkuXG4gIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBy
ZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07
XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAv
LyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBg
X2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJl
bmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24o
KSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xu
ICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVs
dCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVy
biB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9m
dGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlv
bih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtc
biAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5
ID0gcHJvcGVydHk7XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2Jq
ZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBfLnByb3BlcnR5T2YgPSBmdW5j
dGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5j
dGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIC8v
IFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBh
IGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5tYXRjaGVyID0gXy5t
YXRjaGVzID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBh
dHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaXNNYXRj
aChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioq
IHRpbWVzLlxuICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAg
ICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47
IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVz
aXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0g
bnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0
dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4g
IH07XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRp
bWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkg
e1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBv
ZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAn
Jic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wi
JzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAg
fTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5j
dGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGlu
dGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAg
dmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07
XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRz
IHRvIGJlIGVzY2FwZWRcbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2lu
KCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2
YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsg
c3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJl
cGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAg
Xy5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVh
dGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVk
IGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBg
b2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBm
dW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBmYWxsYmFjaykge1xuICAgIHZhciB2YWx1ZSA9IG9i
amVjdCA9PSBudWxsID8gdm9pZCAwIDogb2JqZWN0W3Byb3BlcnR5XTtcbiAgICBpZiAodmFsdWUg
PT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSBmYWxsYmFjaztcbiAgICB9XG4gICAgcmV0dXJu
IF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtc
blxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBl
bnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRz
LlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkg
e1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHBy
ZWZpeCArIGlkIDogaWQ7XG4gIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2Vz
IEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2lu
ZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50
ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4v
ZyxcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAg
ICAgIDogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5n
IGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8v
IGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25l
IHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0g
LyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28g
dGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIg
ZXNjYXBlcyA9IHtcbiAgICBcIidcIjogICAgICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxc
XCcsXG4gICAgJ1xccic6ICAgICAncicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIw
MjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2Nh
cGVyID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVD
aGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRj
aF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRv
IEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5n
IGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAv
LyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5c
biAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRp
bmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRT
ZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBs
YXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3Vs
YXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAo
W1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0
dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2
YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtc
blxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxp
dGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNl
ID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gs
IGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSAr
PSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7
XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2Fw
ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9
PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBv
bGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRl
ICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUp
IHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdc
IjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVk
IHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAg
IH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlz
IG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlm
ICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3Vy
Y2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5w
cm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2Fs
bChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxu
JztcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAg
ICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0
ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlz
LCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNl
IGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9
IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5j
dGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJu
IHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQg
Y2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFp
biA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAt
LS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlv
biwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08t
c3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAg
Ly8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5c
blxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRl
IHJlc3VsdHMuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7XG4gICAg
cmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4g
IC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVj
dC5cbiAgXy5taXhpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhv
YmopLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFt
ZV07XG4gICAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIg
YXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVu
dHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xu
ICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3Jl
IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8g
QWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNo
KFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1
bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tu
YW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9i
aiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xu
ICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmou
bGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBv
YmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rp
b25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSdd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4g
ICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQo
dGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4g
IH0pO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWlu
ZWQgb2JqZWN0LlxuICBfLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVy
biB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBm
b3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBh
cml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXy5wcm90b3R5cGUudmFsdWVP
ZiA9IF8ucHJvdG90eXBlLnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8ucHJvdG90
eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBl
ZDtcbiAgfTtcblxuICAvLyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3Ig
Y29tcGF0aWJpbGl0eSB3aXRoIEFNRCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNl
IG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAv
LyBwcmFjdGljZSBmb3IgQU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVy
c2NvcmUgcmVnaXN0ZXJzXG4gIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1
ZXJ5LCBpdCBpcyBhIGJhc2UgbGlicmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRv
IGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAv
LyBhbiBBTUQgbG9hZCByZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJv
ciB3aGVuIGFuXG4gIC8vIGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBh
IGxvYWRlciByZXF1ZXN0LlxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBk
ZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xu
ICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iCittb2R1bGUu
ZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8gICAgIGh0dHA6Ly91bmRl
cnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3Vt
ZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVu
ZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2Uu
XG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBi
cm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xu
XG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZh
ciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUg
bWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBB
cnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgRnVuY1Byb3RvID0g
RnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFi
bGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICB2YXJcbiAgICBwdXNo
ICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlICAgICAgICAgICAgPSBB
cnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmlu
ZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAg
Ly8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0
aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBu
YXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAg
ICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5k
LFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQg
ZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2
YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0
byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlv
bihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAo
ISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBw
ZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3Ig
KipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBv
bGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBf
YCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5l
ZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4
cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAg
IGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8v
IEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztcblxuICAvLyBJbnRlcm5h
bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVz
KSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVk
bHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgdmFyIG9w
dGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChj
b250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0g
bnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFs
dWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9
O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAg
IHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAg
ICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAg
ICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24p
O1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2
YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250
ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4g
ICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNv
bnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBIG1vc3RseS1pbnRlcm5h
bCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAv
LyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQg
cmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0cmFyeSBjYWxsYmFjaywg
YSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICB2YXIgY2IgPSBm
dW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVs
bCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVy
biBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmpl
Y3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0
eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkg
e1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8v
IEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4g
IHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1bmRlZmluZWRPbmx5KSB7
XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50
cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9i
ajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtc
biAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlz
ID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5
c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2JqW2tleV0gPT09IHZvaWQg
MCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0
dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBj
cmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBi
YXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHBy
b3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZl
Q3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAg
dmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1bmN0aW9uKGtleSkge1xu
ICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZv
aWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVscGVyIGZvciBjb2xsZWN0
aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3Vs
ZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3RcbiAgLy8gUmVsYXRlZDog
aHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMt
dG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02
NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4g
IHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9
IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxl
Y3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+
PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlv
biBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVy
c3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFu
ZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxu
ICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2gg
PSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRl
cmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3Ro
O1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGgg
PSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ld
LCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5
cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7
XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRo
ZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8u
bWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJy
YXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9i
aikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVu
dEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0g
PSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAg
IHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9u
IGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7
XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVzaW5nIGFyZ3VtZW50cy5s
ZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRlb3B0aW1pemUgdGhlLCBz
ZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5
cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBs
ZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBr
ZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1
cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87
XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRl
eHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCk7
XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAg
ICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0g
ZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbml0aWFs
IHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8
IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4g
ICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvcihvYmos
IGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAgICB9O1xuICB9XG5cbiAg
Ly8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZh
bHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBfLnJlZHVjZSA9IF8uZm9s
ZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2Np
YXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgXy5yZWR1
Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiB0aGUg
Zmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0
YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4
dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGtl
eSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xu
ICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9XG4g
ICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAg
fTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0
LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVu
Y3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xu
ICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgXy5lYWNoKG9iaiwg
ZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVl
LCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJu
IHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNo
IGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubmVnYXRlKGNiKHByZWRp
Y2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2Yg
dGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5c
biAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0g
IWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlz
IHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDog
aW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXks
IG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAg
Ly8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hl
cyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIF8uc29tZSA9IF8uYW55
ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBj
YihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikg
JiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xu
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAg
IHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAo
cHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7
XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhl
IGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbiAg
Ly8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBf
LmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1
YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xu
ICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXgg
PSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4g
IH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRl
bSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtc
biAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5j
ID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24o
dmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9k
XTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVuYy5hcHBseSh2YWx1ZSwg
YXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNv
bW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgXy5wbHVjayA9
IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgXy5wcm9wZXJ0eShr
ZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBj
YXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4gIC8vIGNvbnRhaW5pbmcg
c3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0
dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07
XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlu
ZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBr
ZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtc
biAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24p
LlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIg
cmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZh
bHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkg
e1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4g
ICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPiByZXN1bHQp
IHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0g
ZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8u
ZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRl
ZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA+
IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUlu
ZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1
dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4g
cmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVt
ZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJ
bmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBu
dWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2Jq
IDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVu
Z3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAg
IGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAg
ICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0
KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAg
ICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0
eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4g
ICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xu
ICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0
aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMg
c2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVm
ZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHNldCA9IGlzQXJy
YXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBzZXQu
bGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIg
aW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmFuZCA9
IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBpbmRleCkgc2h1ZmZsZWRb
aW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFtyYW5kXSA9IHNldFtpbmRl
eF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipu
KiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8gSWYgKipuKiogaXMgbm90
IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGlu
dGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAg
Xy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8
fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhv
YmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1c
biAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xuICB9
O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNl
ZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgcmV0
dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAg
ICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4
LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KVxuICAgICAg
fTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxl
ZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEg
IT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4g
ICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAg
ICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xu
ICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdy
b3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IpIHtc
biAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFy
IHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4g
ICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtl
eSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0
LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xu
ICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQ
YXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1
bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkp
IHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAg
fSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBz
aW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91
ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0
aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0p
O1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBj
ZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRv
IGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9u
LlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAg
ICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXld
ID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJv
bSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAg
aWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGlj
ZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmos
IF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJl
dHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4g
aXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07
XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVs
ZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hv
c2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0
aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUg
PSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTtc
biAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICAgIChwcmVk
aWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTtcbiAgICB9
KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8vIEFycmF5IEZ1bmN0aW9u
c1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2Yg
YW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFs
dWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3Vh
cmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8uZmly
c3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBp
ZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1
YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXku
bGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFz
dCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1
bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGlu
XG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4gIF8uaW5pdGlhbCA9IGZ1
bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAw
LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4p
KSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3Np
bmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5
LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkg
PT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1
cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0
aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0
aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAg
YW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmpl
Y3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMg
aW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJh
eSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8
IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMg
ZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1
cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGlt
cGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZs
YXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBzdGFydEluZGV4KSB7XG4g
ICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4
IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAg
ICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYm
IChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAv
L2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0XG4gICAg
ICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBzdHJpY3Qp
O1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgb3V0cHV0
Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7XG4gICAgICAgICAgb3V0
cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0
cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxu
ICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVp
dGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZs
YXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFy
cmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0
aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4g
IF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShh
cnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEg
ZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxy
ZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZh
c3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8u
dW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xu
ICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0
ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtc
biAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUs
IGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAg
IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0g
aXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAo
aXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQu
cHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAo
aXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xu
ICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFs
dWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFs
dWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAg
cmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFp
bnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhl
IHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4g
Xy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4gIH07XG5cbiAgLy8gUHJv
ZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxs
IHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9u
KGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJn
dW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFy
cmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAg
ICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICBmb3IgKHZh
ciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMo
YXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJn
c0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBu
dW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGlu
IGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRpZmZlcmVuY2UgPSBmdW5j
dGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRy
dWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAg
ICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICAv
LyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVt
ZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuICBfLnppcCA9IGZ1
bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgLy8g
Q29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5k
IGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXNcbiAg
Xy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIF8u
bWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZhciByZXN1bHQgPSBBcnJh
eShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5k
ZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJyYXksIGluZGV4KTtcbiAg
ICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRv
IG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4g
IC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBv
bmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4g
IF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9
O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0g
PSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0g
PSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpbmRJbmRleCBhbmQgZmlu
ZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5k
ZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQp
IHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAw
IDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGlu
ZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAg
ICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlr
ZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEluZGV4ID0gY3JlYXRlUHJl
ZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0
ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZp
Z3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91
bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJj
aC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250
ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFy
IHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0
aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRo
LmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0p
IDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0
dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBp
bmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhG
aW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5j
dGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExl
bmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAg
ICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5t
YXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbmd0
aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCAr
IDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxl
bmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAg
IHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBp
ZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNh
bGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAg
PyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDog
bGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAg
ICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAg
cmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRo
ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlm
IHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJh
eSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBm
b3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBfLmluZGV4T2YgPSBjcmVh
dGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7XG4gIF8ubGFzdElu
ZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdEluZGV4KTtcblxuICAvLyBH
ZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVz
c2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlv
bi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhv
bi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlv
bihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0
b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gc3Rl
cCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0
YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAg
Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xu
ICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAg
fTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMg
YSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRl
ZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJv
dW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxs
aW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5
KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnBy
b3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7
XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4g
c2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9i
amVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSku
IERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBp
ZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHtc
biAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBu
YXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYg
KCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBj
YWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4ZWN1
dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2Fs
bChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8g
UGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFz
IGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFu
Z2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vo
b2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZp
bGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAgIHZhciBib3VuZEFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAg
ICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBfID8gYXJn
dW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUg
KHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlv
bisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlz
LCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBCaW5kIGEg
bnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBh
cmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBm
b3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0
IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGks
IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAobGVuZ3RoIDw9IDEpIHRo
cm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xu
ICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gYXJndW1lbnRz
W2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAg
IHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24g
Ynkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFz
aGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNo
ZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhh
c2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghXy5oYXMoY2Fj
aGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRz
KTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2Fj
aGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5j
dGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxz
XG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0
aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAy
KTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEg
ZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3Rh
Y2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywg
MSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwg
b25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRv
dyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAv
LyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBl
ciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhl
IGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFs
c2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxu
ICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBj
b250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBw
cmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgdmFyIGxh
dGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0g
ZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0
ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4
dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
dmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGlu
ZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQg
LSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0g
YXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQp
IHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91
dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlv
dXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4g
ICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNl
IGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0
aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJl
dHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRo
YXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8v
IGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3Bz
IGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlz
IHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwg
aW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3
YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0
YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBs
YXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxh
c3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxh
c3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlm
ICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBh
cmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAg
ICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAg
ICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB0aW1lc3Rh
bXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7
XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtc
biAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH1cblxuICAg
ICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0
IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxv
d2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwg
YW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4g
IF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1cm4gXy5wYXJ0aWFs
KHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24g
b2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGlj
YXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBl
YWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0
IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJn
dW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nb
c3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQg
PSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAg
fTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhl
Y3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRp
bWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMg
PCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAg
ICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9u
bHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuXG4g
IF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVt
byA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1l
cyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5c
biAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9u
ZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9y
IGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7
XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8g
S2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5g
IGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5w
cm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9w
cyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAg
ICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9M
b2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5
cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAg
ICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKF8u
aXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQ
cm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBw
cm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBwcm9wKSAmJiAhXy5jb250
YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1J
ZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAg
ICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFfLmNv
bnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1c
biAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3du
IHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZl
IGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlz
T2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2
ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmop
IGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwg
OS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xu
ICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVydHkg
bmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBp
ZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAg
Zm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5
LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4g
ICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBv
YmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAg
IHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTtcbiAgICB9XG4gICAg
cmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5
aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9iamVjdFxuICAvLyBJbiBj
b250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBfLm1hcE9iamVjdCA9IGZ1
bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJh
dGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2JqKSxcbiAgICAgICAgICBs
ZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0ge30sXG4gICAgICAgICAg
Y3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgICByZXN1
bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBv
YmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVy
dCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIF8ucGFp
cnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZh
ciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhaXJzW2ldID0g
W2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfTtc
blxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1
ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJl
c3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24g
bmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNg
XG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5h
bWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5j
dGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVz
LnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhl
IHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVB
c3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBh
bGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpXG4gIC8vICho
dHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5j
ZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVuZE93biA9IF8uYXNzaWdu
ID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkg
b24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kS2V5ID0g
ZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaiksIGtleTtcbiAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtl
eSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBv
ZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dsaXN0ZWQgcHJvcGVydGllcy5c
biAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2
YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtleXM7XG4gICAgaWYgKG9i
aiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24ob2l0ZXJhdGVl
KSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAgaXRlcmF0ZWUgPSBvcHRp
bWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBm
bGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVu
Y3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2JqOyB9O1xuICAgICAgb2Jq
ID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAg
ICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXks
IG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4g
IH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibG9j
a2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJh
dGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9
IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpLCBTdHJpbmcpO1xuICAg
ICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhXy5j
b250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucGljayhv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2Jq
ZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWdu
ZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVy
aXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwg
cHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4g
IC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJv
cHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChw
cm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAg
fTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmpl
Y3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2Jq
KSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6
IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0
aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9z
ZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4g
IC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3
aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtc
biAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0
dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFp
cnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5
cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3Qg
PT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xu
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBr
ZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9i
aikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAv
LyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxu
ICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50
aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50
aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dp
a2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9
PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0
IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAg
ICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53
cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5f
d3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8v
IENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5n
LmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJu
IGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1i
ZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJl
ZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdF
eHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2Ev
aSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8g
UHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVx
dWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3
IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAg
ICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxl
bnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFs
ZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAg
ICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVy
aWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDog
K2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2Jq
ZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBu
dW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAg
ICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRh
dGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5g
IGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICB9XG5c
biAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAg
IGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlw
ZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRo
IGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBz
IG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAg
dmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAg
aWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5z
dGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5j
dGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7
XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVx
dWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5n
IGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9u
IDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5n
IHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNl
IHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAg
ICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAg
IHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAg
ICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25h
bCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4g
ICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0g
YjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2go
Yik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAg
ICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0
ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9
IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtc
biAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmlj
IHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShh
W2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAg
ICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAg
dmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xu
ICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVy
IG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYg
KF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgd2hpbGUg
KGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgICAg
ICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFzKGIsIGtleSkgJiYgZXEo
YVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1c
biAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2Yg
dHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtc
biAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29u
IHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rp
b24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVj
dCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5pc0VtcHR5ID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNB
cnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopIHx8IF8u
aXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBf
LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBh
IERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVy
biAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVu
IHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXku
aXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xu
ICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07
XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBm
dW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5
cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH07XG5c
biAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBp
c1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJyb3IuXG4gIF8uZWFjaChb
J0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVn
RXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmpl
Y3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJh
Y2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVy
ZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxu
ICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9
O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3Jr
IGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8gSUUgMTEgKCMxNjIxKSwg
YW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicg
JiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1
bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBm
YWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVt
YmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzRmluaXRl
KG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5cbiAgLy8gSXMgdGhlIGdp
dmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3aGljaCBkb2VzIG5vdCBl
cXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIF8u
aXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2
YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0
dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9
PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1
YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2Jq
ID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xu
ICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9p
ZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBv
YmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBv
dGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmos
IGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9i
aiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0t
LS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCBy
ZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJl
dHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm5vQ29uZmxp
Y3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7XG4gICAg
cmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJv
dW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVl
KSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5n
IGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgXy5jb25z
dGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0gZnVuY3Rpb24oKXt9O1xu
XG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBm
b3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG4gIF8ucHJv
cGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IGZ1bmN0
aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH07
XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBh
biBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBf
Lm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xuICAgIGF0dHJzID0gXy5l
eHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBy
ZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUnVuIGEg
ZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBp
dGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBh
Y2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBh
bmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4g
ICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xu
ICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAt
IG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQg
dGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID0gRGF0ZS5ub3cg
fHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xu
XG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBl
TWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcm
Z3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2An
OiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmludmVydChlc2NhcGVNYXAp
O1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0
by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVzY2FwZXIgPSBmdW5jdGlv
bihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1
cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEg
a2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3VyY2UgPSAnKD86JyArIF8u
a2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChz
b3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAg
ICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVs
bCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmlu
ZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAg
ICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcbiAgXy51
bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIElmIHRoZSB2YWx1
ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdp
dGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lzZSwgcmV0dXJuIGl0Llxu
ICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZhbGxiYWNrKSB7XG4gICAg
dmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3RbcHJvcGVydHldO1xu
ICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9IGZhbGxiYWNrO1xuICAg
IH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6
IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1
ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVt
cG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVu
Y3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1
cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBV
bmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVc
biAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxp
bWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGUgICAgOiAvPCUo
W1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShbXFxzXFxTXSs/KSU+L2cs
XG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdo
ZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBk
ZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdl
eCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAg
dmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8g
YmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxp
dGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAgIFwiJ1wiLFxuICAgICdc
XFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAgICAnXFxuJzogICAgICdu
JyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07
XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5c
biAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcg
KyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRp
bmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNj
b3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdo
aXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVy
cG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBzZXR0
aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBz
ZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0
dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMg
aW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0
Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJj
ZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAg
ICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8Jykg
KyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2Nh
cGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xu
ICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBm
dW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xu
ICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVy
LCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4g
ICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsg
ZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVs
c2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwi
ICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNl
IGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUg
KyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUg
bWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZlc3QuXG4gICAgICByZXR1
cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElm
IGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwg
c2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7
fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9
JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24o
KXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAn
cmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZW5kZXIgPSBuZXcgRnVu
Y3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNh
dGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAg
fVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJl
bmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBj
b21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAg
dmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7XG4gICAgdGVtcGxhdGUu
c291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7
XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRkIGEgXCJjaGFpblwiIGZ1
bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8u
Y2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfKG9iaik7XG4gICAg
aW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAg
Ly8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdFxuICAvLyBj
YW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMg
b2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1h
eSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmlu
ZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNl
LCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBv
Ymo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVu
ZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNo
KF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tu
YW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5
KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQodGhpcywgZnVuYy5hcHBs
eShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEFkZCBhbGwgb2Yg
dGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgXy5taXhp
bihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFw
cGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQn
LCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2Qg
PSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7
XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmos
IGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3Nw
bGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07XG4gICAgICByZXR1cm4g
cmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3Nv
ciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ2NvbmNhdCcsICdq
b2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQ
cm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAg
cmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRz
KSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3Jh
cHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24o
KSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndy
YXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xu
ICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnBy
b3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7
XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJycg
KyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBh
dCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBt
YXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3Vn
aCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFu
b255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVj
YXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9w
dWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBi
ZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdl
bmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxl
ZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAn
ZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwg
ZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxufS5jYWxsKHRoaXMp
KTtcbiIKIAogLyoqKi8gfSksCiAvKiA0MTYgKi8KQEAgLTE0ODc3NSw3ICsxNDg3NzUsNyBAQCB2
YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogCiAgIGZ1bmN0aW9uIGNvbWJpbmUoZGVzdCwgc3Jj
KSB7CiAgICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAg
IGlmIChfLmhhcyhKU0hJTlQuYmxhY2tsaXN0LCBuYW1lKSkgcmV0dXJuOworICAgICAgaWYgKF8u
aGFzKEpTSElOVC5ibG9ja2xpc3QsIG5hbWUpKSByZXR1cm47CiAgICAgICBkZXN0W25hbWVdID0g
c3JjW25hbWVdOwogICAgIH0pOwogICB9CkBAIC0xNDkwNjAsNyArMTQ5MDYwLDcgQEAgdmFyIEpT
SElOVCA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoMSk7CiAgICAg
ICAgICAgdmFsID0gZmFsc2U7CiAKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W2tleV0gPSBr
ZXk7CisgICAgICAgICAgSlNISU5ULmJsb2NrbGlzdFtrZXldID0ga2V5OwogICAgICAgICAgIGRl
bGV0ZSBwcmVkZWZpbmVkW2tleV07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgcHJlZGVm
W2tleV0gPSAodmFsID09PSAidHJ1ZSIpOwpAQCAtMTUzODY3LDcgKzE1Mzg2Nyw3IEBAIHZhciBK
U0hJTlQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBKU0hJTlQuZXJyb3JzID0gW107CiAgICAgICBK
U0hJTlQudW5kZWZzID0gW107CiAgICAgICBKU0hJTlQuaW50ZXJuYWxzID0gW107Ci0gICAgICBK
U0hJTlQuYmxhY2tsaXN0ID0ge307CisgICAgICBKU0hJTlQuYmxvY2tsaXN0ID0ge307CiAgICAg
ICBKU0hJTlQuc2NvcGUgPSAiKG1haW4pIjsKICAgICB9CiAKQEAgLTE1Mzg5Niw3ICsxNTM4OTYs
NyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogCiAgICAgICAgIGlmIChpdGVtWzBdID09
PSAiLSIpIHsKICAgICAgICAgICBzbGljZSA9IGl0ZW0uc2xpY2UoMSk7Ci0gICAgICAgICAgSlNI
SU5ULmJsYWNrbGlzdFtzbGljZV0gPSBzbGljZTsKKyAgICAgICAgICBKU0hJTlQuYmxvY2tsaXN0
W3NsaWNlXSA9IHNsaWNlOwogICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHByZWRlZmluZWQgaWYg
dGhlcmUKICAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtzbGljZV07CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xOTU1NzYsNyArMTk1NTc2LDcgQEAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3Bl
Y2lmaWVyKG5vZGUpIAogCXZhciByZWdleFNpbmdsZUVzY2FwZSA9IC9bIidcXFxiXGZcblxyXHRd
LzsKIAogCXZhciByZWdleERpZ2l0ID0gL1swLTldLzsKLQl2YXIgcmVnZXhXaGl0ZWxpc3QgPSAv
WyAhIy0mXCgtXFtcXS1+XS87CisJdmFyIHJlZ2V4QWxsb3dsaXN0ID0gL1sgISMtJlwoLVxbXF0t
fl0vOwogCiAJdmFyIGpzZXNjID0gZnVuY3Rpb24oYXJndW1lbnQsIG9wdGlvbnMpIHsKIAkJLy8g
SGFuZGxlIG9wdGlvbnMKQEAgLTE5NTc1MSw3ICsxOTU3NTEsNyBAQCBmdW5jdGlvbiBJbXBvcnRO
YW1lc3BhY2VTcGVjaWZpZXIobm9kZSkgCiAJCQkJfQogCQkJfQogCQkJaWYgKCFvcHRpb25zLmVz
Y2FwZUV2ZXJ5dGhpbmcpIHsKLQkJCQlpZiAocmVnZXhXaGl0ZWxpc3QudGVzdChjaGFyYWN0ZXIp
KSB7CisJCQkJaWYgKHJlZ2V4QWxsb3dsaXN0LnRlc3QoY2hhcmFjdGVyKSkgewogCQkJCQkvLyBJ
dOKAmXMgYSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGAiYCwgYCdgIG9y
IGBcYCwKIAkJCQkJLy8gc28gZG9u4oCZdCBlc2NhcGUgaXQuCiAJCQkJCXJlc3VsdCArPSBjaGFy
YWN0ZXI7CkBAIC0yMDkwODEsNyArMjA5MDgxLDcgQEAgdmFyIF9nZXRJdGVyYXRvcjMgPSBfaW50
ZXJvcFJlcXVpcmVEZWZhdQogCiBleHBvcnRzLmNhbGwgPSBjYWxsOwogZXhwb3J0cy5fY2FsbCA9
IF9jYWxsOwotZXhwb3J0cy5pc0JsYWNrbGlzdGVkID0gaXNCbGFja2xpc3RlZDsKK2V4cG9ydHMu
aXNCbG9ja2xpc3RlZCA9IGlzQmxvY2tsaXN0ZWQ7CiBleHBvcnRzLnZpc2l0ID0gdmlzaXQ7CiBl
eHBvcnRzLnNraXAgPSBza2lwOwogZXhwb3J0cy5za2lwS2V5ID0gc2tpcEtleTsKQEAgLTIwOTE1
Nyw5ICsyMDkxNTcsOSBAQCBmdW5jdGlvbiBfY2FsbChmbnMpIHsKICAgcmV0dXJuIGZhbHNlOwog
fQogCi1mdW5jdGlvbiBpc0JsYWNrbGlzdGVkKCkgewotICB2YXIgYmxhY2tsaXN0ID0gdGhpcy5v
cHRzLmJsYWNrbGlzdDsKLSAgcmV0dXJuIGJsYWNrbGlzdCAmJiBibGFja2xpc3QuaW5kZXhPZih0
aGlzLm5vZGUudHlwZSkgPiAtMTsKK2Z1bmN0aW9uIGlzQmxvY2tsaXN0ZWQoKSB7CisgIHZhciBi
bG9ja2xpc3QgPSB0aGlzLm9wdHMuYmxvY2tsaXN0OworICByZXR1cm4gYmxvY2tsaXN0ICYmIGJs
b2NrbGlzdC5pbmRleE9mKHRoaXMubm9kZS50eXBlKSA+IC0xOwogfQogCiBmdW5jdGlvbiB2aXNp
dCgpIHsKQEAgLTIwOTE2Nyw3ICsyMDkxNjcsNyBAQCBmdW5jdGlvbiB2aXNpdCgpIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiAgIH0KIAotICBpZiAodGhpcy5pc0JsYWNrbGlzdGVkKCkpIHsKKyAgaWYg
KHRoaXMuaXNCbG9ja2xpc3RlZCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKQEAgLTIx
MDgyNSw3ICsyMTA4MjUsNyBAQCBmdW5jdGlvbiBzaG91bGRJZ25vcmVLZXkoa2V5KSB7CiAKICAg
aWYgKGtleSA9PT0gImVudGVyIiB8fCBrZXkgPT09ICJleGl0IiB8fCBrZXkgPT09ICJzaG91bGRT
a2lwIikgcmV0dXJuIHRydWU7CiAKLSAgaWYgKGtleSA9PT0gImJsYWNrbGlzdCIgfHwga2V5ID09
PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtleXMiKSByZXR1cm4gdHJ1ZTsKKyAgaWYgKGtl
eSA9PT0gImJsb2NrbGlzdCIgfHwga2V5ID09PSAibm9TY29wZSIgfHwga2V5ID09PSAic2tpcEtl
eXMiKSByZXR1cm4gdHJ1ZTsKIAogICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjI1MTUsNyArMjIy
NTE1LDcgQEAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IAogCiBjb25z
dCBsaWZlY3ljbGVNZXRob2RzID0gbmV3IFNldChbImNvbXBvbmVudFdpbGxVbm1vdW50IiwgImNv
bXBvbmVudERpZE1vdW50IiwgImNvbXBvbmVudFdpbGxNb3VudCIsICJjb21wb25lbnREaWRVcGRh
dGUiLCAiY29tcG9uZW50V2lsbFVwZGF0ZSIsICJjb21wb25lbnREaWRDYXRjaCIsICJjb21wb25l
bnRXaWxsUmVjZWl2ZVByb3BzIl0pOwogCi1jb25zdCB3aGl0ZWxpc3RlZFByb3BlcnRpZXMgPSBu
ZXcgU2V0KFsicHJvcHMiLCAiY29udGV4dCIsICJyZWZzIl0pOworY29uc3QgYWxsb3dsaXN0ZWRQ
cm9wZXJ0aWVzID0gbmV3IFNldChbInByb3BzIiwgImNvbnRleHQiLCAicmVmcyJdKTsKIAogZnVu
Y3Rpb24gZ2V0SW5pdGlhbFByb3BzKHJlYWxtLCBjb21wb25lbnRUeXBlKSB7CiAgIGxldCBwcm9w
c05hbWUgPSBudWxsOwpAQCAtMjIyNjg1LDcgKzIyMjY4NSw3IEBAIGZ1bmN0aW9uIGV2YWx1YXRl
Q2xhc3NDb25zdHJ1Y3RvcihyZWFsbSwKICAgICBsZXQgaW5zdGFuY2UgPSAoMCwgX2luZGV4Mi5D
b25zdHJ1Y3QpKHJlYWxtLCBjb25zdHJ1Y3RvckZ1bmMsIFtwcm9wcywgY29udGV4dF0pOwogICAg
ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShpbnN0YW5jZSBpbnN0YW5jZW9mIF9pbmRleC5PYmpl
Y3RWYWx1ZSk7CiAgICAgZm9yIChsZXQgW3Byb3BlcnR5TmFtZV0gb2YgaW5zdGFuY2UucHJvcGVy
dGllcykgewotICAgICAgaWYgKCF3aGl0ZWxpc3RlZFByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgIGlmICghYWxsb3dsaXN0ZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eU5hbWUp
KSB7CiAgICAgICAgIGluc3RhbmNlUHJvcGVydGllcy5hZGQocHJvcGVydHlOYW1lKTsKICAgICAg
IH0KICAgICB9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2ViLXRvb2xpbmct
YmVuY2htYXJrL2NsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bTIvd2ViLXRvb2xpbmctYmVuY2htYXJrL2NsaS5qcwkocmV2aXNpb24gMjcxMTIyKQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dlYi10b29saW5nLWJlbmNobWFyay9jbGkuanMJKHdv
cmtpbmcgY29weSkKQEAgLTEwNDIzLDggKzEwNDIzLDggQEAgdHJhdmVyc2UuaGFzVHlwZSA9IGZ1
bmN0aW9uICh0cmVlLCBzY29wZQogICB9OwogCiAgIHRyYXZlcnNlKHRyZWUsIHsKLSAgICBibGFj
a2xpc3Q6IGJsYWNrbGlzdFR5cGVzLAotICAgIGVudGVyOiBoYXNCbGFja2xpc3RlZFR5cGUKKyAg
ICBibG9ja2xpc3Q6IGJsb2NrbGlzdFR5cGVzLAorICAgIGVudGVyOiBoYXNCbG9ja2xpc3RlZFR5
cGUKICAgfSwgc2NvcGUsIHN0YXRlKTsKIAogICByZXR1cm4gc3RhdGUuaGFzOwpAQCAtMTEzODQw
LDcgKzExMzg0MCw3IEBAIG1vZHVsZS5leHBvcnRzID0gIntcInZlcnNpb25cIjozLFwic291cmMK
IC8qIDQxMSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUu
ZXhwb3J0cyA9ICIvKiBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBsaWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNyBb
VmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9tb290b29scy5uZXQvKS4qLyBcbi8qIVxuV2ViIEJ1
aWxkOiBodHRwczovL21vb3Rvb2xzLm5ldC9jb3JlL2J1aWxkZXIvZTQyNmE5YWU3MTY3YzU4MDdi
MTczZDVkZWZmNjczZmNcbiovXG4vKlxuLS0tXG5cbm5hbWU6IENvcmVcblxuZGVzY3JpcHRpb246
IFRoZSBoZWFydCBvZiBNb29Ub29scy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bmNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0
dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLlxuXG5hdXRob3JzOiBUaGUgTW9vVG9vbHMgcHJv
ZHVjdGlvbiB0ZWFtIChodHRwOi8vbW9vdG9vbHMubmV0L2RldmVsb3BlcnMvKVxuXG5pbnNwaXJh
dGlvbjpcbiAgLSBDbGFzcyBpbXBsZW1lbnRhdGlvbiBpbnNwaXJlZCBieSBbQmFzZS5qc10oaHR0
cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzAzL2Jhc2UvKSBDb3B5cmlnaHQgKGMp
IDIwMDYgRGVhbiBFZHdhcmRzLCBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXSho
dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbGdwbC1saWNlbnNlLnBocClcbiAgLSBTb21l
IGZ1bmN0aW9uYWxpdHkgaW5zcGlyZWQgYnkgW1Byb3RvdHlwZS5qc10oaHR0cDovL3Byb3RvdHlw
ZWpzLm9yZykgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24sIFtNSVQgTGlj
ZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxu
cHJvdmlkZXM6IFtDb3JlLCBNb29Ub29scywgVHlwZSwgdHlwZU9mLCBpbnN0YW5jZU9mLCBOYXRp
dmVdXG5cbi4uLlxuKi9cbi8qISBNb29Ub29sczogdGhlIGphdmFzY3JpcHQgZnJhbWV3b3JrLiBs
aWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gY29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYt
MjAxNSBbVmFsZXJpbyBQcm9pZXR0aV0oaHR0cHM6Ly9naXRodWIuY29tL2thbWljYW5lLykuKi9c
bihmdW5jdGlvbigpe1xuXG50aGlzLk1vb1Rvb2xzID0ge1xuXHR2ZXJzaW9uOiAnMS42LjAnLFxu
XHRidWlsZDogJzUyOTQyMjg3MmFkZmZmNDAxYjkwMWI4YjZjN2NhNTExNGVlOTVlMmInXG59O1xu
XG4vLyB0eXBlT2YsIGluc3RhbmNlT2ZcblxudmFyIHR5cGVPZiA9IHRoaXMudHlwZU9mID0gZnVu
Y3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cdGlmIChp
dGVtLiRmYW1pbHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpO1xuXG5cdGlmIChpdGVt
Lm5vZGVOYW1lKXtcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQn
O1xuXHRcdGlmIChpdGVtLm5vZGVUeXBlID09IDMpIHJldHVybiAoL1xcUy8pLnRlc3QoaXRlbS5u
b2RlVmFsdWUpID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJztcblx0fSBlbHNlIGlmICh0eXBl
b2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicpe1xuXHRcdGlmICgnY2FsbGVlJyBpbiBpdGVtKSBy
ZXR1cm4gJ2FyZ3VtZW50cyc7XG5cdFx0aWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxl
Y3Rpb24nO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBpdGVtO1xufTtcblxudmFyIGluc3RhbmNl
T2YgPSB0aGlzLmluc3RhbmNlT2YgPSBmdW5jdGlvbihpdGVtLCBvYmplY3Qpe1xuXHRpZiAoaXRl
bSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0
cnVjdG9yIHx8IGl0ZW0uY29uc3RydWN0b3I7XG5cdHdoaWxlIChjb25zdHJ1Y3Rvcil7XG5cdFx0
aWYgKGNvbnN0cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlO1xuXHRcdGNvbnN0cnVjdG9y
ID0gY29uc3RydWN0b3IucGFyZW50O1xuXHR9XG5cdC8qPGx0SUU4PiovXG5cdGlmICghaXRlbS5o
YXNPd25Qcm9wZXJ0eSkgcmV0dXJuIGZhbHNlO1xuXHQvKjwvbHRJRTg+Ki9cblx0cmV0dXJuIGl0
ZW0gaW5zdGFuY2VvZiBvYmplY3Q7XG59O1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKjxsdElFOD4qL1xudmFyIGVudW1lcmFibGVz
ID0gdHJ1ZTtcbmZvciAodmFyIGkgaW4ge3RvU3RyaW5nOiAxfSkgZW51bWVyYWJsZXMgPSBudWxs
O1xuaWYgKGVudW1lcmFibGVzKSBlbnVtZXJhYmxlcyA9IFsnaGFzT3duUHJvcGVydHknLCAndmFs
dWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxl
U3RyaW5nJywgJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJ107XG5mdW5jdGlvbiBmb3JFYWNoT2Jq
ZWN0RW51bWJlcmFibGVLZXkob2JqZWN0LCBmbiwgYmluZCl7XG5cdGlmIChlbnVtZXJhYmxlcykg
Zm9yICh2YXIgaSA9IGVudW1lcmFibGVzLmxlbmd0aDsgaS0tOyl7XG5cdFx0dmFyIGsgPSBlbnVt
ZXJhYmxlc1tpXTtcblx0XHQvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRT
ZXR0ZXIgY2FuIGRpcmVjdGx5IHBhc3MgdGhlXG5cdFx0Ly8gbWV0aG9kIGZ1bmN0aW9uLCB3aXRo
b3V0IHN3YXBwaW5nIGFyZ3VtZW50cy5cblx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmpl
Y3QsIGspKSBmbi5jYWxsKGJpbmQsIGssIG9iamVjdFtrXSk7XG5cdH1cbn1cbi8qPC9sdElFOD4q
L1xuXG4vLyBGdW5jdGlvbiBvdmVybG9hZGluZ1xuXG52YXIgRnVuY3Rpb24gPSB0aGlzLkZ1bmN0
aW9uO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQ
bHVyYWwpe1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0
XHRpZiAoYSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0XHRpZiAodXNlUGx1cmFsIHx8IHR5cGVv
ZiBhICE9ICdzdHJpbmcnKXtcblx0XHRcdGZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMs
IGssIGFba10pO1xuXHRcdFx0Lyo8bHRJRTg+Ki9cblx0XHRcdGZvckVhY2hPYmplY3RFbnVtYmVy
YWJsZUtleShhLCBzZWxmLCB0aGlzKTtcblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHRzZWxmLmNhbGwodGhpcywgYSwgYik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xu
XHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24o
dXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24oYSl7XG5c
dFx0dmFyIGFyZ3MsIHJlc3VsdDtcblx0XHRpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3Mg
PSBhO1xuXHRcdGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBhcmdzID0gYXJndW1lbnRz
O1xuXHRcdGVsc2UgaWYgKHVzZVBsdXJhbCkgYXJncyA9IFthXTtcblx0XHRpZiAoYXJncyl7XG5c
dFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7
IGkrKykgcmVzdWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdH0g
ZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7XG5cdFx0fVxuXHRcdHJl
dHVybiByZXN1bHQ7XG5cdH07XG59O1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVu
Y3Rpb24oa2V5LCB2YWx1ZSl7XG5cdHRoaXNba2V5XSA9IHZhbHVlO1xufS5vdmVybG9hZFNldHRl
cigpO1xuXG5GdW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1
ZSl7XG5cdHRoaXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn0ub3ZlcmxvYWRTZXR0ZXIoKTtc
blxuLy8gRnJvbVxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbkFycmF5
LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtcblx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtd
O1xuXHRyZXR1cm4gKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVvZiBpdGVtICE9ICdz
dHJpbmcnKSA/ICh0eXBlT2YoaXRlbSkgPT0gJ2FycmF5JykgPyBpdGVtIDogc2xpY2UuY2FsbChp
dGVtKSA6IFtpdGVtXTtcbn07XG5cbkZ1bmN0aW9uLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXtc
blx0cmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gaXRlbTtcblx0fTtcbn07XG5cblxuTnVtYmVyLmNvbnZlcnQgPSBmdW5j
dGlvbihpdGVtKXtcblx0dmFyIG51bWJlciA9IHBhcnNlRmxvYXQoaXRlbSk7XG5cdHJldHVybiBp
c0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogbnVsbDtcbn07XG5cblN0cmluZy5jb252ZXJ0ID0g
ZnVuY3Rpb24oaXRlbSl7XG5cdHJldHVybiBpdGVtICsgJyc7XG59O1xuXG5cblxuRnVuY3Rpb24u
ZnJvbSA9IEZ1bmN0aW9uLmNvbnZlcnQ7XG5OdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0O1xu
U3RyaW5nLmZyb20gPSBTdHJpbmcuY29udmVydDtcblxuLy8gaGlkZSwgcHJvdGVjdFxuXG5GdW5j
dGlvbi5pbXBsZW1lbnQoe1xuXG5cdGhpZGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kaGlkZGVu
ID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwcm90ZWN0OiBmdW5jdGlvbigp
e1xuXHRcdHRoaXMuJHByb3RlY3RlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbi8vIFR5cGVcblxudmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBv
YmplY3Qpe1xuXHRpZiAobmFtZSl7XG5cdFx0dmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgp
O1xuXHRcdHZhciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiAodHlw
ZU9mKGl0ZW0pID09IGxvd2VyKTtcblx0XHR9O1xuXG5cdFx0VHlwZVsnaXMnICsgbmFtZV0gPSB0
eXBlQ2hlY2s7XG5cdFx0aWYgKG9iamVjdCAhPSBudWxsKXtcblx0XHRcdG9iamVjdC5wcm90b3R5
cGUuJGZhbWlseSA9IChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZXR1cm4gbG93ZXI7XG5cdFx0XHR9
KS5oaWRlKCk7XG5cdFx0XHRcblx0XHR9XG5cdH1cblxuXHRpZiAob2JqZWN0ID09IG51bGwpIHJl
dHVybiBudWxsO1xuXG5cdG9iamVjdC5leHRlbmQodGhpcyk7XG5cdG9iamVjdC4kY29uc3RydWN0
b3IgPSBUeXBlO1xuXHRvYmplY3QucHJvdG90eXBlLiRjb25zdHJ1Y3RvciA9IG9iamVjdDtcblxu
XHRyZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50
b1N0cmluZztcblxuVHlwZS5pc0VudW1lcmFibGUgPSBmdW5jdGlvbihpdGVtKXtcblx0cmV0dXJu
IChpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3Ry
aW5nLmNhbGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApO1xufTtcblxudmFyIGhvb2tz
ID0ge307XG5cbnZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0dmFyIHR5cGUgPSB0
eXBlT2Yob2JqZWN0LnByb3RvdHlwZSk7XG5cdHJldHVybiBob29rc1t0eXBlXSB8fCAoaG9va3Nb
dHlwZV0gPSBbXSk7XG59O1xuXG52YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgbWV0aG9k
KXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuO1xuXG5cdHZhciBob29r
cyA9IGhvb2tzT2YodGhpcyk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7
IGkrKyl7XG5cdFx0dmFyIGhvb2sgPSBob29rc1tpXTtcblx0XHRpZiAodHlwZU9mKGhvb2spID09
ICd0eXBlJykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTtcblx0XHRlbHNlIGhv
b2suY2FsbCh0aGlzLCBuYW1lLCBtZXRob2QpO1xuXHR9XG5cblx0dmFyIHByZXZpb3VzID0gdGhp
cy5wcm90b3R5cGVbbmFtZV07XG5cdGlmIChwcmV2aW91cyA9PSBudWxsIHx8ICFwcmV2aW91cy4k
cHJvdGVjdGVkKSB0aGlzLnByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDtcblxuXHRpZiAodGhpc1tu
YW1lXSA9PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxs
KHRoaXMsIG5hbWUsIGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdHJldHVybiBtZXRob2QuYXBwbHkoaXRl
bSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0fSk7XG59O1xuXG52YXIgZXh0ZW5kID0g
ZnVuY3Rpb24obmFtZSwgbWV0aG9kKXtcblx0aWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikg
cmV0dXJuO1xuXHR2YXIgcHJldmlvdXMgPSB0aGlzW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0g
bnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDtcbn07XG5c
blR5cGUuaW1wbGVtZW50KHtcblxuXHRpbXBsZW1lbnQ6IGltcGxlbWVudC5vdmVybG9hZFNldHRl
cigpLFxuXG5cdGV4dGVuZDogZXh0ZW5kLm92ZXJsb2FkU2V0dGVyKCksXG5cblx0YWxpYXM6IGZ1
bmN0aW9uKG5hbWUsIGV4aXN0aW5nKXtcblx0XHRpbXBsZW1lbnQuY2FsbCh0aGlzLCBuYW1lLCB0
aGlzLnByb3RvdHlwZVtleGlzdGluZ10pO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0bWly
cm9yOiBmdW5jdGlvbihob29rKXtcblx0XHRob29rc09mKHRoaXMpLnB1c2goaG9vayk7XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbm5ldyBUeXBlKCdUeXBlJywgVHlwZSk7XG5cbi8v
IERlZmF1bHQgVHlwZXNcblxudmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRo
b2RzKXtcblx0dmFyIGlzVHlwZSA9IChvYmplY3QgIT0gT2JqZWN0KSxcblx0XHRwcm90b3R5cGUg
PSBvYmplY3QucHJvdG90eXBlO1xuXG5cdGlmIChpc1R5cGUpIG9iamVjdCA9IG5ldyBUeXBlKG5h
bWUsIG9iamVjdCk7XG5cblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2RzLmxlbmd0aDsgaSA8
IGw7IGkrKyl7XG5cdFx0dmFyIGtleSA9IG1ldGhvZHNbaV0sXG5cdFx0XHRnZW5lcmljID0gb2Jq
ZWN0W2tleV0sXG5cdFx0XHRwcm90byA9IHByb3RvdHlwZVtrZXldO1xuXG5cdFx0aWYgKGdlbmVy
aWMpIGdlbmVyaWMucHJvdGVjdCgpO1xuXHRcdGlmIChpc1R5cGUgJiYgcHJvdG8pIG9iamVjdC5p
bXBsZW1lbnQoa2V5LCBwcm90by5wcm90ZWN0KCkpO1xuXHR9XG5cblx0aWYgKGlzVHlwZSl7XG5c
dFx0dmFyIG1ldGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxl
KG1ldGhvZHNbMF0pO1xuXHRcdG9iamVjdC5mb3JFYWNoTWV0aG9kID0gZnVuY3Rpb24oZm4pe1xu
XHRcdFx0aWYgKCFtZXRob2RzRW51bWVyYWJsZSkgZm9yICh2YXIgaSA9IDAsIGwgPSBtZXRob2Rz
Lmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRcdGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5
cGVbbWV0aG9kc1tpXV0sIG1ldGhvZHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICh2YXIga2V5
IGluIHByb3RvdHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpO1xu
XHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZm9yY2U7XG59O1xuXG5mb3JjZSgnU3RyaW5nJywgU3Ry
aW5nLCBbXG5cdCdjaGFyQXQnLCAnY2hhckNvZGVBdCcsICdjb25jYXQnLCAnY29udGFpbnMnLCAn
aW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdtYXRjaCcsICdxdW90ZScsICdyZXBsYWNlJywgJ3Nl
YXJjaCcsXG5cdCdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0n
LCAndG9Mb3dlckNhc2UnLCAndG9VcHBlckNhc2UnXG5dKSgnQXJyYXknLCBBcnJheSwgW1xuXHQn
cG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNo
aWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJyxcblx0J2luZGV4T2YnLCAnbGFzdEluZGV4
T2YnLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNl
JywgJ3JlZHVjZVJpZ2h0JywgJ2NvbnRhaW5zJ1xuXSkoJ051bWJlcicsIE51bWJlciwgW1xuXHQn
dG9FeHBvbmVudGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9u
J1xuXSkoJ0Z1bmN0aW9uJywgRnVuY3Rpb24sIFtcblx0J2FwcGx5JywgJ2NhbGwnLCAnYmluZCdc
bl0pKCdSZWdFeHAnLCBSZWdFeHAsIFtcblx0J2V4ZWMnLCAndGVzdCdcbl0pKCdPYmplY3QnLCBP
YmplY3QsIFtcblx0J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVz
JywgJ2tleXMnLFxuXHQnZ2V0UHJvdG90eXBlT2YnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
JywgJ2dldE93blByb3BlcnR5TmFtZXMnLFxuXHQncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRl
bnNpYmxlJywgJ3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJ1xuXSkoJ0Rh
dGUnLCBEYXRlLCBbJ25vdyddKTtcblxuT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNl
dHRlcigpO1xuXG5EYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXtcblx0cmV0dXJuICsobmV3
IERhdGUpO1xufSk7XG5cbm5ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7XG5cbi8vIGZpeGVz
IE5hTiByZXR1cm5pbmcgYXMgTnVtYmVyXG5cbk51bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1
bmN0aW9uKCl7XG5cdHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/ICdudW1iZXInIDogJ251bGwnO1xu
fS5oaWRlKCk7XG5cbi8vIE51bWJlci5yYW5kb21cblxuTnVtYmVyLmV4dGVuZCgncmFuZG9tJywg
ZnVuY3Rpb24obWluLCBtYXgpe1xuXHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICog
KG1heCAtIG1pbiArIDEpICsgbWluKTtcbn0pO1xuXG4vLyBmb3JFYWNoLCBlYWNoLCBrZXlzXG5c
bkFycmF5LmltcGxlbWVudCh7XG5cblx0Lyo8IUVTNT4qL1xuXHRmb3JFYWNoOiBmdW5jdGlvbihm
biwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkr
Kyl7XG5cdFx0XHRpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMp
O1xuXHRcdH1cblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRlYWNoOiBmdW5jdGlvbihmbiwgYmlu
ZCl7XG5cdFx0QXJyYXkuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufSk7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdGtleXM6IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdFx0dmFyIGtleXMgPSBbXTtcblx0XHRmb3IgKHZhciBrIGluIG9iamVjdCl7XG5cdFx0
XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7XG5cdFx0
fVxuXHRcdC8qPGx0SUU4PiovXG5cdFx0Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVj
dCwgZnVuY3Rpb24oayl7XG5cdFx0XHRrZXlzLnB1c2goayk7XG5cdFx0fSk7XG5cdFx0Lyo8L2x0
SUU4PiovXG5cdFx0cmV0dXJuIGtleXM7XG5cdH0sXG5cblx0Zm9yRWFjaDogZnVuY3Rpb24ob2Jq
ZWN0LCBmbiwgYmluZCl7XG5cdFx0T2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9u
KGtleSl7XG5cdFx0XHRmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5c
dFx0fSk7XG5cdH1cblxufSk7XG5cbk9iamVjdC5lYWNoID0gT2JqZWN0LmZvckVhY2g7XG5cblxu
Ly8gQXJyYXkgJiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZ1xu
XG52YXIgY2xvbmVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRzd2l0Y2ggKHR5cGVPZihpdGVtKSl7
XG5cdFx0Y2FzZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpO1xuXHRcdGNhc2UgJ29iamVj
dCc6IHJldHVybiBPYmplY3QuY2xvbmUoaXRlbSk7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGl0ZW07
XG5cdH1cbn07XG5cbkFycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpe1xuXHR2YXIg
aSA9IHRoaXMubGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTtcblx0d2hpbGUgKGktLSkgY2xv
bmVbaV0gPSBjbG9uZU9mKHRoaXNbaV0pO1xuXHRyZXR1cm4gY2xvbmU7XG59KTtcblxudmFyIG1l
cmdlT25lID0gZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpe1xuXHRzd2l0Y2ggKHR5cGVP
ZihjdXJyZW50KSl7XG5cdFx0Y2FzZSAnb2JqZWN0Jzpcblx0XHRcdGlmICh0eXBlT2Yoc291cmNl
W2tleV0pID09ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpO1xu
XHRcdFx0ZWxzZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTtcblx0XHRcdGJy
ZWFrO1xuXHRcdGNhc2UgJ2FycmF5Jzogc291cmNlW2tleV0gPSBjdXJyZW50LmNsb25lKCk7IGJy
ZWFrO1xuXHRcdGRlZmF1bHQ6IHNvdXJjZVtrZXldID0gY3VycmVudDtcblx0fVxuXHRyZXR1cm4g
c291cmNlO1xufTtcblxuT2JqZWN0LmV4dGVuZCh7XG5cblx0bWVyZ2U6IGZ1bmN0aW9uKHNvdXJj
ZSwgaywgdil7XG5cdFx0aWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25l
KHNvdXJjZSwgaywgdik7XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3Ro
OyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBvYmplY3QgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRm
b3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtZXJnZU9uZShzb3VyY2UsIGtleSwgb2JqZWN0W2tleV0p
O1xuXHRcdH1cblx0XHRyZXR1cm4gc291cmNlO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbihv
YmplY3Qpe1xuXHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmplY3Qp
IGNsb25lW2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTtcblx0XHRyZXR1cm4gY2xvbmU7XG5c
dH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbihvcmlnaW5hbCl7XG5cdFx0Zm9yICh2YXIgaSA9IDEs
IGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBleHRlbmRlZCA9
IGFyZ3VtZW50c1tpXSB8fCB7fTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3Jp
Z2luYWxba2V5XSA9IGV4dGVuZGVkW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbDtc
blx0fVxuXG59KTtcblxuLy8gT2JqZWN0LWxlc3MgdHlwZXNcblxuWydPYmplY3QnLCAnV2hpdGVT
cGFjZScsICdUZXh0Tm9kZScsICdDb2xsZWN0aW9uJywgJ0FyZ3VtZW50cyddLmVhY2goZnVuY3Rp
b24obmFtZSl7XG5cdG5ldyBUeXBlKG5hbWUpO1xufSk7XG5cbi8vIFVuaXF1ZSBJRFxuXG52YXIg
VUlEID0gRGF0ZS5ub3coKTtcblxuU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigp
e1xuXHRyZXR1cm4gKFVJRCsrKS50b1N0cmluZygzNik7XG59KTtcblxuXG5cbn0pKCk7XG5cbi8q
XG4tLS1cblxubmFtZTogQXJyYXlcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3Rv
dHlwZXMgbGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLlxuXG5saWNlbnNlOiBNSVQtc3R5
bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtUeXBlXVxuXG5wcm92aWRlczogQXJyYXlcblxuLi4u
XG4qL1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0ZXZlcnk6IGZ1bmN0
aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAw
OyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0
aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtc
blx0fSxcblxuXHRmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9
IFtdO1xuXHRcdGZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBp
IDwgbDsgaSsrKSBpZiAoaSBpbiB0aGlzKXtcblx0XHRcdHZhbHVlID0gdGhpc1tpXTtcblx0XHRc
dGlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtc
blx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0aW5kZXhPZjogZnVuY3Rpb24o
aXRlbSwgZnJvbSl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwO1xuXHRcdGZv
ciAodmFyIGkgPSAoZnJvbSA8IDApID8gTWF0aC5tYXgoMCwgbGVuZ3RoICsgZnJvbSkgOiBmcm9t
IHx8IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG5cdFx0XHRpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0
dXJuIGk7XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKGZu
LCBiaW5kKXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBB
cnJheShsZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRc
dFx0aWYgKGkgaW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwg
dGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0
aW9uKGZuLCBiaW5kKXtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAw
OyBpIDwgbDsgaSsrKXtcblx0XHRcdGlmICgoaSBpbiB0aGlzKSAmJiBmbi5jYWxsKGJpbmQsIHRo
aXNbaV0sIGksIHRoaXMpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xu
XHR9LFxuXHQvKjwvIUVTNT4qL1xuXG5cdGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmZpbHRlcihmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtICE9IG51bGw7XG5c
dFx0fSk7XG5cdH0sXG5cblx0aW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXtcblx0XHR2YXIg
YXJncyA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1
bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwg
YXJncyk7XG5cdFx0fSk7XG5cdH0sXG5cblx0YXNzb2NpYXRlOiBmdW5jdGlvbihrZXlzKXtcblx0
XHR2YXIgb2JqID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0
aCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0g
dGhpc1tpXTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGxpbms6IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCl7XG5cdFx0
XHRcdGlmIChvYmplY3Rba2V5XSh0aGlzW2ldKSl7XG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB0
aGlzW2ldO1xuXHRcdFx0XHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0XHRcdFx0XHRicmVhaztc
blx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5c
dGNvbnRhaW5zOiBmdW5jdGlvbihpdGVtLCBmcm9tKXtcblx0XHRyZXR1cm4gdGhpcy5pbmRleE9m
KGl0ZW0sIGZyb20pICE9IC0xO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oYXJyYXkpe1xu
XHRcdHRoaXMucHVzaC5hcHBseSh0aGlzLCBhcnJheSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRo
aXNbdGhpcy5sZW5ndGggLSAxXSA6IG51bGw7XG5cdH0sXG5cblx0Z2V0UmFuZG9tOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1tOdW1iZXIucmFuZG9tKDAsIHRo
aXMubGVuZ3RoIC0gMSldIDogbnVsbDtcblx0fSxcblxuXHRpbmNsdWRlOiBmdW5jdGlvbihpdGVt
KXtcblx0XHRpZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21iaW5lOiBmdW5jdGlvbihhcnJheSl7XG5cdFx0Zm9y
ICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShh
cnJheVtpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZXJhc2U6IGZ1bmN0aW9uKGl0
ZW0pe1xuXHRcdGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRpZiAodGhp
c1tpXSA9PT0gaXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpe1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmbGF0dGVuOiBmdW5jdGlvbigpe1xuXHRcdHZhciBh
cnJheSA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7XG5cdFx0XHRpZiAodHlwZSA9
PSAnbnVsbCcpIGNvbnRpbnVlO1xuXHRcdFx0YXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0g
J2FycmF5JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8
IGluc3RhbmNlT2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0
aGlzW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9LFxuXG5cdHBpY2s6IGZ1bmN0
aW9uKCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7
XG5cdFx0XHRpZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTtcblx0XHR9XG5cdFx0
cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRp
ZiAodGhpcy5sZW5ndGggIT0gMykgcmV0dXJuIG51bGw7XG5cdFx0dmFyIHJnYiA9IHRoaXMubWFw
KGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0g
dmFsdWU7XG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTtcblx0XHR9KTtcblx0XHRy
ZXR1cm4gKGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJztcblx0fSxcblxuXHRyZ2JU
b0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRcdGlmICh0aGlzLmxlbmd0aCA8IDMpIHJldHVybiBu
dWxsO1xuXHRcdGlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkp
IHJldHVybiAndHJhbnNwYXJlbnQnO1xuXHRcdHZhciBoZXggPSBbXTtcblx0XHRmb3IgKHZhciBp
ID0gMDsgaSA8IDM7IGkrKyl7XG5cdFx0XHR2YXIgYml0ID0gKHRoaXNbaV0gLSAwKS50b1N0cmlu
ZygxNik7XG5cdFx0XHRoZXgucHVzaCgoYml0Lmxlbmd0aCA9PSAxKSA/ICcwJyArIGJpdCA6IGJp
dCk7XG5cdFx0fVxuXHRcdHJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycp
O1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGdW5jdGlvblxuXG5kZXNjcmlw
dGlvbjogQ29udGFpbnMgRnVuY3Rpb24gUHJvdG90eXBlcyBsaWtlIGNyZWF0ZSwgYmluZCwgcGFz
cywgYW5kIGRlbGF5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IFR5cGVcblxucHJvdmlkZXM6IEZ1bmN0aW9uXG5cbi4uLlxuKi9cblxuRnVuY3Rpb24uZXh0ZW5k
KHtcblxuXHRhdHRlbXB0OiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJn
dW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4g
YXJndW1lbnRzW2ldKCk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cdFx0fVxuXHRcdHJldHVybiBu
dWxsO1xuXHR9XG5cbn0pO1xuXG5GdW5jdGlvbi5pbXBsZW1lbnQoe1xuXG5cdGF0dGVtcHQ6IGZ1
bmN0aW9uKGFyZ3MsIGJpbmQpe1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBseShi
aW5kLCBBcnJheS5jb252ZXJ0KGFyZ3MpKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRyZXR1
cm4gbnVsbDtcblx0fSxcblxuXHQvKjwhRVM1LWJpbmQ+Ki9cblx0YmluZDogZnVuY3Rpb24odGhh
dCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cy5sZW5ndGgg
PiAxID8gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKSA6IG51bGwsXG5cdFx0XHRGID0gZnVuY3Rp
b24oKXt9O1xuXG5cdFx0dmFyIGJvdW5kID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBjb250ZXh0
ID0gdGhhdCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGlmICh0aGlzIGluc3Rh
bmNlb2YgYm91bmQpe1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHNlbGYucHJvdG90eXBlO1xuXHRc
dFx0XHRjb250ZXh0ID0gbmV3IEY7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gKCFhcmdz
ICYmICFsZW5ndGgpXG5cdFx0XHRcdD8gc2VsZi5jYWxsKGNvbnRleHQpXG5cdFx0XHRcdDogc2Vs
Zi5hcHBseShjb250ZXh0LCBhcmdzICYmIGxlbmd0aCA/IGFyZ3MuY29uY2F0KEFycmF5LnNsaWNl
KGFyZ3VtZW50cykpIDogYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNvbnRleHQg
PT0gdGhhdCA/IHJlc3VsdCA6IGNvbnRleHQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gYm91bmQ7XG5c
dH0sXG5cdC8qPC8hRVM1LWJpbmQ+Ki9cblxuXHRwYXNzOiBmdW5jdGlvbihhcmdzLCBiaW5kKXtc
blx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5
LmNvbnZlcnQoYXJncyk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gc2Vs
Zi5hcHBseShiaW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fSxcblxuXHRkZWxh
eTogZnVuY3Rpb24oZGVsYXksIGJpbmQsIGFyZ3Mpe1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHRo
aXMucGFzcygoYXJncyA9PSBudWxsID8gW10gOiBhcmdzKSwgYmluZCksIGRlbGF5KTtcblx0fSxc
blxuXHRwZXJpb2RpY2FsOiBmdW5jdGlvbihwZXJpb2RpY2FsLCBiaW5kLCBhcmdzKXtcblx0XHRy
ZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBi
aW5kKSwgcGVyaW9kaWNhbCk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IE51
bWJlclxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1p
dCwgcm91bmQsIHRpbWVzLCBhbmQgY2VpbC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBOdW1iZXJcblxuLi4uXG4qL1xuXG5OdW1i
ZXIuaW1wbGVtZW50KHtcblxuXHRsaW1pdDogZnVuY3Rpb24obWluLCBtYXgpe1xuXHRcdHJldHVy
biBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpO1xuXHR9LFxuXG5cdHJvdW5kOiBm
dW5jdGlvbihwcmVjaXNpb24pe1xuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNp
b24gfHwgMCkudG9GaXhlZChwcmVjaXNpb24gPCAwID8gLXByZWNpc2lvbiA6IDApO1xuXHRcdHJl
dHVybiBNYXRoLnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuXHR9LFxuXG5c
dHRpbWVzOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
OyBpKyspIGZuLmNhbGwoYmluZCwgaSwgdGhpcyk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHR0b0ludDogZnVu
Y3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9
XG5cbn0pO1xuXG5OdW1iZXIuYWxpYXMoJ2VhY2gnLCAndGltZXMnKTtcblxuKGZ1bmN0aW9uKG1h
dGgpe1xuXG52YXIgbWV0aG9kcyA9IHt9O1xuXG5tYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7XG5c
dGlmICghTnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1
cm4gTWF0aFtuYW1lXS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KEFycmF5LmNvbnZlcnQoYXJn
dW1lbnRzKSkpO1xuXHR9O1xufSk7XG5cbk51bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7XG5cbn0p
KFsnYWJzJywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywg
J2V4cCcsICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQn
LCAndGFuJ10pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IFN0cmluZ1xuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgU3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3Qs
IGFuZCB0b0ludC5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBb
VHlwZSwgQXJyYXldXG5cbnByb3ZpZGVzOiBTdHJpbmdcblxuLi4uXG4qL1xuXG5TdHJpbmcuaW1w
bGVtZW50KHtcblxuXHQvLzwhRVM2PlxuXHRjb250YWluczogZnVuY3Rpb24oc3RyaW5nLCBpbmRl
eCl7XG5cdFx0cmV0dXJuIChpbmRleCA/IFN0cmluZyh0aGlzKS5zbGljZShpbmRleCkgOiBTdHJp
bmcodGhpcykpLmluZGV4T2Yoc3RyaW5nKSA+IC0xO1xuXHR9LFxuXHQvLzwvIUVTNj5cblxuXHR0
ZXN0OiBmdW5jdGlvbihyZWdleCwgcGFyYW1zKXtcblx0XHRyZXR1cm4gKCh0eXBlT2YocmVnZXgp
ID09ICdyZWdleHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50
ZXN0KHRoaXMpO1xuXHR9LFxuXG5cdHRyaW06IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmlu
Zyh0aGlzKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdH0sXG5cblx0Y2xlYW46IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXHMrL2csICcgJyku
dHJpbSgpO1xuXHR9LFxuXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3Ry
aW5nKHRoaXMpLnJlcGxhY2UoLy1cXEQvZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJu
IG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh5cGhl
bmF0ZTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tBLVpd
L2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0XHRcdHJldHVybiAoJy0nICsgbWF0Y2guY2hhckF0KDAp
LnRvTG93ZXJDYXNlKCkpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGNhcGl0YWxpemU6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9cXGJbYS16XS9nLCBmdW5jdGlv
bihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0
fSxcblxuXHRlc2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlz
KS5yZXBsYWNlKC8oWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9
LFxuXG5cdHRvSW50OiBmdW5jdGlvbihiYXNlKXtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcywg
YmFzZSB8fCAxMCk7XG5cdH0sXG5cblx0dG9GbG9hdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4g
cGFyc2VGbG9hdCh0aGlzKTtcblx0fSxcblxuXHRoZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpe1xu
XHRcdHZhciBoZXggPSBTdHJpbmcodGhpcykubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0p
KFxcd3sxLDJ9KSQvKTtcblx0XHRyZXR1cm4gKGhleCkgPyBoZXguc2xpY2UoMSkuaGV4VG9SZ2Io
YXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpe1xuXHRc
dHZhciByZ2IgPSBTdHJpbmcodGhpcykubWF0Y2goL1xcZHsxLDN9L2cpO1xuXHRcdHJldHVybiAo
cmdiKSA/IHJnYi5yZ2JUb0hleChhcnJheSkgOiBudWxsO1xuXHR9LFxuXG5cdHN1YnN0aXR1dGU6
IGZ1bmN0aW9uKG9iamVjdCwgcmVnZXhwKXtcblx0XHRyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxh
Y2UocmVnZXhwIHx8ICgvXFxcXD9cXHsoW157fV0rKVxcfS9nKSwgZnVuY3Rpb24obWF0Y2gsIG5h
bWUpe1xuXHRcdFx0aWYgKG1hdGNoLmNoYXJBdCgwKSA9PSAnXFxcXCcpIHJldHVybiBtYXRjaC5z
bGljZSgxKTtcblx0XHRcdHJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25h
bWVdIDogJyc7XG5cdFx0fSk7XG5cdH1cblxufSk7XG5cblxuXG4vKlxuLS0tXG5cbm5hbWU6IEJy
b3dzZXJcblxuZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3Nl
ciBpbml0aWFsaXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhh
c2guXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBG
dW5jdGlvbiwgTnVtYmVyLCBTdHJpbmddXG5cbnByb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBE
b2N1bWVudF1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGRvY3VtZW50ID0gdGhp
cy5kb2N1bWVudDtcbnZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzO1xuXG52YXIg
cGFyc2UgPSBmdW5jdGlvbih1YSwgcGxhdGZvcm0pe1xuXHR1YSA9IHVhLnRvTG93ZXJDYXNlKCk7
XG5cdHBsYXRmb3JtID0gKHBsYXRmb3JtID8gcGxhdGZvcm0udG9Mb3dlckNhc2UoKSA6ICcnKTtc
blxuXHQvLyBjaHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hl
Y2sgZm9yIGVkZ2UgZmlyc3QsXG5cdC8vIGJlZm9yZSBjaGVja2luZyBpZiBpdCdzIGNocm9tZS5c
blx0dmFyIFVBID0gdWEubWF0Y2goLyhlZGdlKVtcXHNcXC86XShbXFx3XFxkXFwuXSspLyk7XG5c
dGlmICghVUEpe1xuXHRcdFVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx0
cmlkZW50fGNyaW9zfHZlcnNpb24pW1xcc1xcLzpdKFtcXHdcXGRcXC5dKyk/Lio/KHNhZmFyaXwo
PzpydltcXHNcXC86XXx2ZXJzaW9uW1xcc1xcLzpdKShbXFx3XFxkXFwuXSspfCQpLykgfHwgW251
bGwsICd1bmtub3duJywgMF07XG5cdH1cblxuXHRpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXtcblx0
XHRVQVsxXSA9ICdpZSc7XG5cdFx0aWYgKFVBWzRdKSBVQVsyXSA9IFVBWzRdO1xuXHR9IGVsc2Ug
aWYgKFVBWzFdID09ICdjcmlvcycpe1xuXHRcdFVBWzFdID0gJ2Nocm9tZSc7XG5cdH1cblxuXHRw
bGF0Zm9ybSA9IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRj
aCgvKD86d2Vib3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsn
b3RoZXInXSlbMF07XG5cdGlmIChwbGF0Zm9ybSA9PSAnd2luJykgcGxhdGZvcm0gPSAnd2luZG93
cyc7XG5cblx0cmV0dXJuIHtcblx0XHRleHRlbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQs
XG5cdFx0bmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLFxuXHRcdHZl
cnNpb246IHBhcnNlRmxvYXQoKFVBWzFdID09ICdvcGVyYScgJiYgVUFbNF0pID8gVUFbNF0gOiBV
QVsyXSksXG5cdFx0cGxhdGZvcm06IHBsYXRmb3JtXG5cdH07XG59O1xuXG52YXIgQnJvd3NlciA9
IHRoaXMuQnJvd3NlciA9IHBhcnNlKG5hdmlnYXRvci51c2VyQWdlbnQsIG5hdmlnYXRvci5wbGF0
Zm9ybSk7XG5cbmlmIChCcm93c2VyLm5hbWUgPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1v
ZGUpe1xuXHRCcm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbkJy
b3dzZXIuZXh0ZW5kKHtcblx0RmVhdHVyZXM6IHtcblx0XHR4cGF0aDogISEoZG9jdW1lbnQuZXZh
bHVhdGUpLFxuXHRcdGFpcjogISEod2luZG93LnJ1bnRpbWUpLFxuXHRcdHF1ZXJ5OiAhIShkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKSxcblx0XHRqc29uOiAhISh3aW5kb3cuSlNPTilcblx0fSxcblx0
cGFyc2VVQTogcGFyc2Vcbn0pO1xuXG5cblxuLy8gUmVxdWVzdFxuXG5Ccm93c2VyLlJlcXVlc3Qg
PSAoZnVuY3Rpb24oKXtcblxuXHR2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHR9O1xuXG5cdHZhciBNU1hNTDIgPSBmdW5jdGlvbigp
e1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTtcblx0fTtc
blxuXHR2YXIgTVNYTUwgPSBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVj
dCgnTWljcm9zb2Z0LlhNTEhUVFAnKTtcblx0fTtcblxuXHRyZXR1cm4gRnVuY3Rpb24uYXR0ZW1w
dChmdW5jdGlvbigpe1xuXHRcdFhNTEhUVFAoKTtcblx0XHRyZXR1cm4gWE1MSFRUUDtcblx0fSwg
ZnVuY3Rpb24oKXtcblx0XHRNU1hNTDIoKTtcblx0XHRyZXR1cm4gTVNYTUwyO1xuXHR9LCBmdW5j
dGlvbigpe1xuXHRcdE1TWE1MKCk7XG5cdFx0cmV0dXJuIE1TWE1MO1xuXHR9KTtcblxufSkoKTtc
blxuQnJvd3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpO1xuXG5cblxuLy8g
U3RyaW5nIHNjcmlwdHNcblxuQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7XG5cdGlmICgh
dGV4dCkgcmV0dXJuIHRleHQ7XG5cdGlmICh3aW5kb3cuZXhlY1NjcmlwdCl7XG5cdFx0d2luZG93
LmV4ZWNTY3JpcHQodGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUn
LCAndGV4dC9qYXZhc2NyaXB0Jyk7XG5cdFx0c2NyaXB0LnRleHQgPSB0ZXh0O1xuXHRcdGRvY3Vt
ZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRkb2N1bWVudC5oZWFkLnJlbW92ZUNo
aWxkKHNjcmlwdCk7XG5cdH1cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5TdHJpbmcuaW1wbGVtZW50
KCdzdHJpcFNjcmlwdHMnLCBmdW5jdGlvbihleGVjKXtcblx0dmFyIHNjcmlwdHMgPSAnJztcblx0
dmFyIHRleHQgPSB0aGlzLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPyk8XFwvc2Ny
aXB0Pi9naSwgZnVuY3Rpb24oYWxsLCBjb2RlKXtcblx0XHRzY3JpcHRzICs9IGNvZGUgKyAnXFxu
Jztcblx0XHRyZXR1cm4gJyc7XG5cdH0pO1xuXHRpZiAoZXhlYyA9PT0gdHJ1ZSkgQnJvd3Nlci5l
eGVjKHNjcmlwdHMpO1xuXHRlbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhl
YyhzY3JpcHRzLCB0ZXh0KTtcblx0cmV0dXJuIHRleHQ7XG59KTtcblxuLy8gV2luZG93LCBEb2N1
bWVudFxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdERvY3VtZW50OiB0aGlzLkRvY3VtZW50LFxuXHRX
aW5kb3c6IHRoaXMuV2luZG93LFxuXHRFbGVtZW50OiB0aGlzLkVsZW1lbnQsXG5cdEV2ZW50OiB0
aGlzLkV2ZW50XG59KTtcblxudGhpcy5XaW5kb3cgPSB0aGlzLiRjb25zdHJ1Y3RvciA9IG5ldyBU
eXBlKCdXaW5kb3cnLCBmdW5jdGlvbigpe30pO1xuXG50aGlzLiRmYW1pbHkgPSBGdW5jdGlvbi5j
b252ZXJ0KCd3aW5kb3cnKS5oaWRlKCk7XG5cbldpbmRvdy5taXJyb3IoZnVuY3Rpb24obmFtZSwg
bWV0aG9kKXtcblx0d2luZG93W25hbWVdID0gbWV0aG9kO1xufSk7XG5cbnRoaXMuRG9jdW1lbnQg
PSBkb2N1bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigp
e30pO1xuXG5kb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5o
aWRlKCk7XG5cbkRvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2Qpe1xuXHRkb2N1
bWVudFtuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG5kb2N1bWVudC5odG1sID0gZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50O1xuaWYgKCFkb2N1bWVudC5oZWFkKSBkb2N1bWVudC5oZWFkID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuaWYgKGRvY3VtZW50LmV4ZWND
b21tYW5kKSB0cnkge1xuXHRkb2N1bWVudC5leGVjQ29tbWFuZCgnQmFja2dyb3VuZEltYWdlQ2Fj
aGUnLCBmYWxzZSwgdHJ1ZSk7XG59IGNhdGNoIChlKXt9XG5cbi8qPGx0SUU5PiovXG5pZiAodGhp
cy5hdHRhY2hFdmVudCAmJiAhdGhpcy5hZGRFdmVudExpc3RlbmVyKXtcblx0dmFyIHVubG9hZEV2
ZW50ID0gZnVuY3Rpb24oKXtcblx0XHR0aGlzLmRldGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9h
ZEV2ZW50KTtcblx0XHRkb2N1bWVudC5oZWFkID0gZG9jdW1lbnQuaHRtbCA9IGRvY3VtZW50Lndp
bmRvdyA9IG51bGw7XG5cdFx0d2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7
XG5cdH07XG5cdHRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpO1xufVxu
XG4vLyBJRSBmYWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJz
IHRvIDxzZWxlY3Q+KVxudmFyIGFycmF5RnJvbSA9IEFycmF5LmNvbnZlcnQ7XG50cnkge1xuXHRh
cnJheUZyb20oZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTtcbn0gY2F0Y2ggKGUpe1xuXHRBcnJh
eS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0aWYgKHR5cGVvZiBpdGVtICE9ICdzdHJp
bmcnICYmIFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXkn
KXtcblx0XHRcdHZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpO1xuXHRc
dFx0d2hpbGUgKGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldO1xuXHRcdFx0cmV0dXJuIGFycmF5O1xu
XHRcdH1cblx0XHRyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pO1xuXHR9O1xuXG5cdHZhciBwcm90b3R5
cGUgPSBBcnJheS5wcm90b3R5cGUsXG5cdFx0c2xpY2UgPSBwcm90b3R5cGUuc2xpY2U7XG5cdFsn
cG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNo
aWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXtcblx0
XHR2YXIgbWV0aG9kID0gcHJvdG90eXBlW25hbWVdO1xuXHRcdEFycmF5W25hbWVdID0gZnVuY3Rp
b24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmNvbnZlcnQoaXRlbSks
IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdFx0fTtcblx0fSk7XG59XG4vKjwvbHRJRTk+
Ki9cblxuXG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogQ2xhc3NcblxuZGVzY3JpcHRpb246
IENvbnRhaW5zIHRoZSBDbGFzcyBGdW5jdGlvbiBmb3IgZWFzaWx5IGNyZWF0aW5nLCBleHRlbmRp
bmcsIGFuZCBpbXBsZW1lbnRpbmcgcmV1c2FibGUgQ2xhc3Nlcy5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgRnVuY3Rpb24sIE51bWJl
cl1cblxucHJvdmlkZXM6IENsYXNzXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBD
bGFzcyA9IHRoaXMuQ2xhc3MgPSBuZXcgVHlwZSgnQ2xhc3MnLCBmdW5jdGlvbihwYXJhbXMpe1xu
XHRpZiAoaW5zdGFuY2VPZihwYXJhbXMsIEZ1bmN0aW9uKSkgcGFyYW1zID0ge2luaXRpYWxpemU6
IHBhcmFtc307XG5cblx0dmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXtcblx0XHRyZXNldCh0aGlz
KTtcblx0XHRpZiAobmV3Q2xhc3MuJHByb3RvdHlwaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlz
LiRjYWxsZXIgPSBudWxsO1xuXHRcdHRoaXMuJGZhbWlseSA9IG51bGw7XG5cdFx0dmFyIHZhbHVl
ID0gKHRoaXMuaW5pdGlhbGl6ZSkgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1l
bnRzKSA6IHRoaXM7XG5cdFx0dGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsO1xuXHRc
dHJldHVybiB2YWx1ZTtcblx0fS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7XG5cblx0
bmV3Q2xhc3MuJGNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS4kY29u
c3RydWN0b3IgPSBuZXdDbGFzcztcblx0bmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVu
dDtcblxuXHRyZXR1cm4gbmV3Q2xhc3M7XG59KTtcblxudmFyIHBhcmVudCA9IGZ1bmN0aW9uKCl7
XG5cdGlmICghdGhpcy4kY2FsbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCJwYXJl
bnRcIiBjYW5ub3QgYmUgY2FsbGVkLicpO1xuXHR2YXIgbmFtZSA9IHRoaXMuJGNhbGxlci4kbmFt
ZSxcblx0XHRwYXJlbnQgPSB0aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxcblx0XHRwcmV2aW91
cyA9IChwYXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7XG5cdGlmICghcHJl
dmlvdXMpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBuYW1lICsgJ1wiIGhhcyBu
byBwYXJlbnQuJyk7XG5cdHJldHVybiBwcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xu
fTtcblxudmFyIHJlc2V0ID0gZnVuY3Rpb24ob2JqZWN0KXtcblx0Zm9yICh2YXIga2V5IGluIG9i
amVjdCl7XG5cdFx0dmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cdFx0c3dpdGNoICh0eXBlT2Yo
dmFsdWUpKXtcblx0XHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRcdHZhciBGID0gZnVuY3Rpb24o
KXt9O1xuXHRcdFx0XHRGLnByb3RvdHlwZSA9IHZhbHVlO1xuXHRcdFx0XHRvYmplY3Rba2V5XSA9
IHJlc2V0KG5ldyBGKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IG9iamVj
dFtrZXldID0gdmFsdWUuY2xvbmUoKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmpl
Y3Q7XG59O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXtcblx0aWYg
KG1ldGhvZC4kb3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjtcblx0dmFyIHdyYXBwZXIg
PSBmdW5jdGlvbigpe1xuXHRcdGlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIg
PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kIFwiJyArIGtleSArICdcIiBjYW5u
b3QgYmUgY2FsbGVkLicpO1xuXHRcdHZhciBjYWxsZXIgPSB0aGlzLmNhbGxlciwgY3VycmVudCA9
IHRoaXMuJGNhbGxlcjtcblx0XHR0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9
IHdyYXBwZXI7XG5cdFx0dmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMp
O1xuXHRcdHRoaXMuJGNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuXHRc
dHJldHVybiByZXN1bHQ7XG5cdH0uZXh0ZW5kKHskb3duZXI6IHNlbGYsICRvcmlnaW46IG1ldGhv
ZCwgJG5hbWU6IGtleX0pO1xuXHRyZXR1cm4gd3JhcHBlcjtcbn07XG5cbnZhciBpbXBsZW1lbnQg
PSBmdW5jdGlvbihrZXksIHZhbHVlLCByZXRhaW4pe1xuXHRpZiAoQ2xhc3MuTXV0YXRvcnMuaGFz
T3duUHJvcGVydHkoa2V5KSl7XG5cdFx0dmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwo
dGhpcywgdmFsdWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcztcblx0fVxu
XG5cdGlmICh0eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpe1xuXHRcdGlmICh2YWx1ZS4kaGlk
ZGVuKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnByb3RvdHlwZVtrZXldID0gKHJldGFpbikgPyB2
YWx1ZSA6IHdyYXAodGhpcywga2V5LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0Lm1l
cmdlKHRoaXMucHJvdG90eXBlLCBrZXksIHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xu
fTtcblxudmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3Mpe1xuXHRrbGFzcy4kcHJvdG90
eXBpbmcgPSB0cnVlO1xuXHR2YXIgcHJvdG8gPSBuZXcga2xhc3M7XG5cdGRlbGV0ZSBrbGFzcy4k
cHJvdG90eXBpbmc7XG5cdHJldHVybiBwcm90bztcbn07XG5cbkNsYXNzLmltcGxlbWVudCgnaW1w
bGVtZW50JywgaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCkpO1xuXG5DbGFzcy5NdXRhdG9ycyA9
IHtcblxuXHRFeHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpe1xuXHRcdHRoaXMucGFyZW50ID0gcGFy
ZW50O1xuXHRcdHRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTtcblx0fSxcblxu
XHRJbXBsZW1lbnRzOiBmdW5jdGlvbihpdGVtcyl7XG5cdFx0QXJyYXkuY29udmVydChpdGVtcyku
ZWFjaChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHZhciBpbnN0YW5jZSA9IG5ldyBpdGVtO1xuXHRc
dFx0Zm9yICh2YXIga2V5IGluIGluc3RhbmNlKSBpbXBsZW1lbnQuY2FsbCh0aGlzLCBrZXksIGlu
c3RhbmNlW2tleV0sIHRydWUpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG59O1xuXG59KSgpO1xuXG4v
KlxuLS0tXG5cbm5hbWU6IENsYXNzLkV4dHJhc1xuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgVXRp
bGl0eSBDbGFzc2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3Nl
cyB0byBlYXNlIHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3NcblxucHJvdmlkZXM6IFtDbGFz
cy5FeHRyYXMsIENoYWluLCBFdmVudHMsIE9wdGlvbnNdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9u
KCl7XG5cbnRoaXMuQ2hhaW4gPSBuZXcgQ2xhc3Moe1xuXG5cdCRjaGFpbjogW10sXG5cblx0Y2hh
aW46IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uYXBwZW5kKEFycmF5LmZsYXR0ZW4oYXJn
dW1lbnRzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FsbENoYWluOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiAodGhpcy4kY2hhaW4ubGVuZ3RoKSA/IHRoaXMuJGNoYWluLnNoaWZ0
KCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGZhbHNlO1xuXHR9LFxuXG5cdGNsZWFyQ2hhaW46
IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy4kY2hhaW4uZW1wdHkoKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fVxuXG59KTtcblxudmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0cmV0dXJu
IHN0cmluZy5yZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3Qpe1xuXHRc
dHJldHVybiBmaXJzdC50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcbn07XG5cbnRoaXMuRXZlbnRzID0g
bmV3IENsYXNzKHtcblxuXHQkZXZlbnRzOiB7fSxcblxuXHRhZGRFdmVudDogZnVuY3Rpb24odHlw
ZSwgZm4sIGludGVybmFsKXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cblx0XHRcblxu
XHRcdHRoaXMuJGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1
ZGUoZm4pO1xuXHRcdGlmIChpbnRlcm5hbCkgZm4uaW50ZXJuYWwgPSB0cnVlO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXtcblx0XHRmb3Ig
KHZhciB0eXBlIGluIGV2ZW50cykgdGhpcy5hZGRFdmVudCh0eXBlLCBldmVudHNbdHlwZV0pO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJn
cywgZGVsYXkpe1xuXHRcdHR5cGUgPSByZW1vdmVPbih0eXBlKTtcblx0XHR2YXIgZXZlbnRzID0g
dGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdGlmICghZXZlbnRzKSByZXR1cm4gdGhpcztcblx0XHRh
cmdzID0gQXJyYXkuY29udmVydChhcmdzKTtcblx0XHRldmVudHMuZWFjaChmdW5jdGlvbihmbil7
XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTtcblx0XHRcdGVs
c2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR0eXBlID0g
cmVtb3ZlT24odHlwZSk7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0
XHRpZiAoZXZlbnRzICYmICFmbi5pbnRlcm5hbCl7XG5cdFx0XHR2YXIgaW5kZXggPSBldmVudHMu
aW5kZXhPZihmbik7XG5cdFx0XHRpZiAoaW5kZXggIT0gLTEpIGRlbGV0ZSBldmVudHNbaW5kZXhd
O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0
aW9uKGV2ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdv
YmplY3QnKXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlw
ZSwgZXZlbnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoZXZl
bnRzKSBldmVudHMgPSByZW1vdmVPbihldmVudHMpO1xuXHRcdGZvciAodHlwZSBpbiB0aGlzLiRl
dmVudHMpe1xuXHRcdFx0aWYgKGV2ZW50cyAmJiBldmVudHMgIT0gdHlwZSkgY29udGludWU7XG5c
dFx0XHR2YXIgZm5zID0gdGhpcy4kZXZlbnRzW3R5cGVdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IGZu
cy5sZW5ndGg7IGktLTspIGlmIChpIGluIGZucyl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQo
dHlwZSwgZm5zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbnRoaXMuT3B0aW9ucyA9IG5ldyBDbGFzcyh7XG5cblx0c2V0T3B0aW9uczogZnVuY3Rp
b24oKXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZS5hcHBs
eShudWxsLCBbe30sIHRoaXMub3B0aW9uc10uYXBwZW5kKGFyZ3VtZW50cykpO1xuXHRcdGlmICh0
aGlzLmFkZEV2ZW50KSBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7XG5cdFx0XHRpZiAodHlw
ZU9mKG9wdGlvbnNbb3B0aW9uXSkgIT0gJ2Z1bmN0aW9uJyB8fCAhKC9eb25bQS1aXS8pLnRlc3Qo
b3B0aW9uKSkgY29udGludWU7XG5cdFx0XHR0aGlzLmFkZEV2ZW50KG9wdGlvbiwgb3B0aW9uc1tv
cHRpb25dKTtcblx0XHRcdGRlbGV0ZSBvcHRpb25zW29wdGlvbl07XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9XG5cbn0pO1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzLlRo
ZW5hYmxlXG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4g
YmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSBcInRoZW5h
YmxlXCIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogQ2xhc3Nc
blxucHJvdmlkZXM6IFtDbGFzcy5UaGVuYWJsZV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtc
blxudmFyIFNUQVRFX1BFTkRJTkcgPSAwLFxuXHRTVEFURV9GVUxGSUxMRUQgPSAxLFxuXHRTVEFU
RV9SRUpFQ1RFRCA9IDI7XG5cbnZhciBUaGVuYWJsZSA9IENsYXNzLlRoZW5hYmxlID0gbmV3IENs
YXNzKHtcblxuXHQkdGhlbmFibGVTdGF0ZTogU1RBVEVfUEVORElORyxcblx0JHRoZW5hYmxlUmVz
dWx0OiBudWxsLFxuXHQkdGhlbmFibGVSZWFjdGlvbnM6IFtdLFxuXG5cdHJlc29sdmU6IGZ1bmN0
aW9uKHZhbHVlKXtcblx0XHRyZXNvbHZlKHRoaXMsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVqZWN0KHRoaXMsIHJl
YXNvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0VGhlbmFibGVTdGF0ZTogZnVu
Y3Rpb24oKXtcblx0XHRzd2l0Y2ggKHRoaXMuJHRoZW5hYmxlU3RhdGUpe1xuXHRcdFx0Y2FzZSBT
VEFURV9QRU5ESU5HOlxuXHRcdFx0XHRyZXR1cm4gJ3BlbmRpbmcnO1xuXG5cdFx0XHRjYXNlIFNU
QVRFX0ZVTEZJTExFRDpcblx0XHRcdFx0cmV0dXJuICdmdWxmaWxsZWQnO1xuXG5cdFx0XHRjYXNl
IFNUQVRFX1JFSkVDVEVEOlxuXHRcdFx0XHRyZXR1cm4gJ3JlamVjdGVkJztcblx0XHR9XG5cdH0s
XG5cblx0cmVzZXRUaGVuYWJsZTogZnVuY3Rpb24ocmVhc29uKXtcblx0XHRyZWplY3QodGhpcywg
cmVhc29uKTtcblx0XHRyZXNldCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0
aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCl7XG5cdFx0aWYgKHR5cGVvZiBv
bkZ1bGZpbGxlZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknO1xuXHRc
dGlmICh0eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJykgb25SZWplY3RlZCA9ICdUaHJv
d2VyJztcblxuXHRcdHZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXG5cdFx0dGhpcy4k
dGhlbmFibGVSZWFjdGlvbnMucHVzaCh7XG5cdFx0XHR0aGVuYWJsZTogdGhlbmFibGUsXG5cdFx0
XHRmdWxmaWxsSGFuZGxlcjogb25GdWxmaWxsZWQsXG5cdFx0XHRyZWplY3RIYW5kbGVyOiBvblJl
amVjdGVkXG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy4kdGhlbmFibGVTdGF0ZSAhPT0gU1RBVEVf
UEVORElORyl7XG5cdFx0XHRyZWFjdCh0aGlzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhlbmFi
bGU7XG5cdH0sXG5cblx0J2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG5cdFx0cmV0dXJu
IHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcblx0fVxuXG59KTtcblxuVGhlbmFibGUuZXh0
ZW5kKHtcblx0cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhciB0aGVuYWJsZTtcblx0
XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7XG5cdFx0XHR0aGVuYWJsZSA9IHZhbHVl
O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpO1xuXHRcdFx0
cmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhlbmFibGU7XG5c
dH0sXG5cdHJlamVjdDogZnVuY3Rpb24ocmVhc29uKXtcblx0XHR2YXIgdGhlbmFibGUgPSBuZXcg
VGhlbmFibGUoKTtcblx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNvbik7XG5cdFx0cmV0dXJuIHRo
ZW5hYmxlO1xuXHR9XG59KTtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gcmVz
b2x2ZSh0aGVuYWJsZSwgdmFsdWUpe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPT09
IFNUQVRFX1BFTkRJTkcpe1xuXHRcdGlmICh0aGVuYWJsZSA9PT0gdmFsdWUpe1xuXHRcdFx0cmVq
ZWN0KHRoZW5hYmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUg
d2l0aCBpdHNlbGYuJykpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9
PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSl7XG5cdFx0XHR2YXIg
dGhlbjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoZW4gPSB2YWx1ZS50aGVuO1xuXHRcdFx0fSBj
YXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0cmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pO1xu
XHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKXtcblx0XHRcdFx0
dmFyIHJlc29sdmVkID0gZmFsc2U7XG5cdFx0XHRcdGRlZmVyKGZ1bmN0aW9uKCl7XG5cdFx0XHRc
dFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5c
dFx0XHRcdFx0XHRcdGZ1bmN0aW9uKG5leHRWYWx1ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFy
ZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0
XHRcdFx0XHRyZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1c
blx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24ocmVhc29uKXtcblx0XHRc
dFx0XHRcdFx0XHRpZiAoIXJlc29sdmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0g
dHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTtcblx0XHRc
dFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0
fSBjYXRjaCAoZXhjZXB0aW9uKXtcblx0XHRcdFx0XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0
XHRcdFx0XHRyZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwg
ZXhjZXB0aW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRc
dFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xuXHRcdFx0fVxu
XHRcdH0gZWxzZSB7XG5cdFx0XHRmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSk7XG5cdFx0fVxuXHR9
XG59XG5cbmZ1bmN0aW9uIGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxl
LiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHR0aGVuYWJsZS4kdGhlbmFi
bGVSZXN1bHQgPSB2YWx1ZTtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZV
TEZJTExFRDtcblxuXHRcdHJlYWN0KHRoZW5hYmxlKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWpl
Y3QodGhlbmFibGUsIHJlYXNvbil7XG5cdGlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0g
U1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uO1xu
XHRcdHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID0gU1RBVEVfUkVKRUNURUQ7XG5cblx0XHRyZWFj
dCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVzZXQodGhlbmFibGUpe1xuXHRpZiAo
dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxl
LiR0aGVuYWJsZVJlc3VsdCA9IG51bGw7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgPSBT
VEFURV9QRU5ESU5HO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWN0KHRoZW5hYmxlKXtcblx0dmFy
IHN0YXRlID0gdGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsXG5cdFx0cmVzdWx0ID0gdGhlbmFibGUu
JHRoZW5hYmxlUmVzdWx0LFxuXHRcdHJlYWN0aW9ucyA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0
aW9ucyxcblx0XHR0eXBlO1xuXG5cdGlmIChzdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKXtcblx0
XHR0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTtcblx0XHR0eXBlID0gJ2Z1bGZpbGxI
YW5kbGVyJztcblx0fSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7XG5cdFx0dGhl
bmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9ICdyZWplY3RIYW5kbGVy
Jztcblx0fVxuXG5cdGlmICh0eXBlKXtcblx0XHRkZWZlcihoYW5kbGUucGFzcyhbcmVzdWx0LCBy
ZWFjdGlvbnMsIHR5cGVdKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVh
Y3Rpb25zLCB0eXBlKXtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSByZWFjdGlvbnMubGVuZ3RoOyBp
IDwgbDsgKytpKXtcblx0XHR2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sXG5cdFx0XHRoYW5k
bGVyID0gcmVhY3Rpb25bdHlwZV07XG5cblx0XHRpZiAoaGFuZGxlciA9PT0gJ0lkZW50aXR5Jyl7
XG5cdFx0XHRyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBp
ZiAoaGFuZGxlciA9PT0gJ1Rocm93ZXInKXtcblx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJs
ZSwgcmVzdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShy
ZWFjdGlvbi50aGVuYWJsZSwgaGFuZGxlcihyZXN1bHQpKTtcblx0XHRcdH0gY2F0Y2ggKGV4Y2Vw
dGlvbil7XG5cdFx0XHRcdHJlamVjdChyZWFjdGlvbi50aGVuYWJsZSwgZXhjZXB0aW9uKTtcblx0
XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudmFyIGRlZmVyO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9
PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJyl7
XG5cdGRlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVk
aWF0ZSAhPT0gJ3VuZGVmaW5lZCcpe1xuXHRkZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSB7
XG5cdGRlZmVyID0gZnVuY3Rpb24oZm4pe1xuXHRcdHNldFRpbWVvdXQoZm4sIDApO1xuXHR9O1xu
fVxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IE9iamVjdFxuXG5kZXNjcmlwdGlvbjogT2Jq
ZWN0IGdlbmVyaWMgbWV0aG9kc1xuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IFR5cGVcblxucHJvdmlkZXM6IFtPYmplY3QsIEhhc2hdXG5cbi4uLlxuKi9cblxuKGZ1
bmN0aW9uKCl7XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdHN1YnNldDogZnVuY3Rpb24ob2JqZWN0
LCBrZXlzKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0g
a2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0
aWYgKGsgaW4gb2JqZWN0KSByZXN1bHRzW2tdID0gb2JqZWN0W2tdO1xuXHRcdH1cblx0XHRyZXR1
cm4gcmVzdWx0cztcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xu
XHRcdHZhciByZXN1bHRzID0ge307XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3Qp
O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIg
a2V5ID0ga2V5c1tpXTtcblx0XHRcdHJlc3VsdHNba2V5XSA9IGZuLmNhbGwoYmluZCwgb2JqZWN0
W2tleV0sIGtleSwgb2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5c
blx0ZmlsdGVyOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9
IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBp
ID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV0sIHZh
bHVlID0gb2JqZWN0W2tleV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBv
YmplY3QpKSByZXN1bHRzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHM7
XG5cdH0sXG5cblx0ZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdHZhciBr
ZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMu
bGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRpZiAoIWZuLmNh
bGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSkpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0
dXJuIHRydWU7XG5cdH0sXG5cblx0c29tZTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5c
dFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBp
IDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIga2V5ID0ga2V5c1tpXTtcblx0XHRcdGlm
IChmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5c
dFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXtcblx0
XHR2YXIgdmFsdWVzID0gW107XG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xu
XHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0XHR2YXIgayA9
IGtleXNbaV07XG5cdFx0XHR2YWx1ZXMucHVzaChvYmplY3Rba10pO1xuXHRcdH1cblx0XHRyZXR1
cm4gdmFsdWVzO1xuXHR9LFxuXG5cdGdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXtcblx0XHRy
ZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG5cdH0sXG5cblx0a2V5T2Y6IGZ1bmN0
aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtc
blx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtl
eSA9IGtleXNbaV07XG5cdFx0XHRpZiAob2JqZWN0W2tleV0gPT09IHZhbHVlKSByZXR1cm4ga2V5
O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24o
b2JqZWN0LCB2YWx1ZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlPZihvYmplY3QsIHZhbHVlKSAh
PSBudWxsO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7
XG5cdFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cblx0XHRPYmplY3QuZWFjaChvYmplY3QsIGZ1
bmN0aW9uKHZhbHVlLCBrZXkpe1xuXHRcdFx0aWYgKGJhc2UpIGtleSA9IGJhc2UgKyAnWycgKyBr
ZXkgKyAnXSc7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0c3dpdGNoICh0eXBlT2YodmFsdWUp
KXtcblx0XHRcdFx0Y2FzZSAnb2JqZWN0JzogcmVzdWx0ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmco
dmFsdWUsIGtleSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRcdFx0dmFy
IHFzID0ge307XG5cdFx0XHRcdFx0dmFsdWUuZWFjaChmdW5jdGlvbih2YWwsIGkpe1xuXHRcdFx0
XHRcdFx0cXNbaV0gPSB2YWw7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gT2Jq
ZWN0LnRvUXVlcnlTdHJpbmcocXMsIGtleSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRl
ZmF1bHQ6IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5c
dFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQp
O1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59
KTtcblxufSkoKTtcblxuXG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLlBhcnNlclxuZGVzY3JpcHRp
b246IFN0YW5kYWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXJcbnByb3ZpZGVzOiBTbGljay5QYXJz
ZXJcbi4uLlxuKi9cblxuOyhmdW5jdGlvbigpe1xuXG52YXIgcGFyc2VkLFxuXHRzZXBhcmF0b3JJ
bmRleCxcblx0Y29tYmluYXRvckluZGV4LFxuXHRyZXZlcnNlZCxcblx0Y2FjaGUgPSB7fSxcblx0
cmV2ZXJzZUNhY2hlID0ge30sXG5cdHJlVW5lc2NhcGUgPSAvXFxcXC9nO1xuXG52YXIgcGFyc2Ug
PSBmdW5jdGlvbihleHByZXNzaW9uLCBpc1JldmVyc2VkKXtcblx0aWYgKGV4cHJlc3Npb24gPT0g
bnVsbCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHByZXNzaW9uLlNsaWNrID09PSB0cnVlKSByZXR1
cm4gZXhwcmVzc2lvbjtcblx0ZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2Uo
L15cXHMrfFxccyskL2csICcnKTtcblx0cmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7XG5cdHZhciBj
dXJyZW50Q2FjaGUgPSAocmV2ZXJzZWQpID8gcmV2ZXJzZUNhY2hlIDogY2FjaGU7XG5cdGlmIChj
dXJyZW50Q2FjaGVbZXhwcmVzc2lvbl0pIHJldHVybiBjdXJyZW50Q2FjaGVbZXhwcmVzc2lvbl07
XG5cdHBhcnNlZCA9IHtcblx0XHRTbGljazogdHJ1ZSxcblx0XHRleHByZXNzaW9uczogW10sXG5c
dFx0cmF3OiBleHByZXNzaW9uLFxuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1
cm4gcGFyc2UodGhpcy5yYXcsIHRydWUpO1xuXHRcdH1cblx0fTtcblx0c2VwYXJhdG9ySW5kZXgg
PSAtMTtcblx0d2hpbGUgKGV4cHJlc3Npb24gIT0gKGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJl
cGxhY2UocmVnZXhwLCBwYXJzZXIpKSk7XG5cdHBhcnNlZC5sZW5ndGggPSBwYXJzZWQuZXhwcmVz
c2lvbnMubGVuZ3RoO1xuXHRyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVy
c2VkKSA/IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDtcbn07XG5cbnZhciByZXZlcnNlQ29tYmlu
YXRvciA9IGZ1bmN0aW9uKGNvbWJpbmF0b3Ipe1xuXHRpZiAoY29tYmluYXRvciA9PT0gJyEnKSBy
ZXR1cm4gJyAnO1xuXHRlbHNlIGlmIChjb21iaW5hdG9yID09PSAnICcpIHJldHVybiAnISc7XG5c
dGVsc2UgaWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBs
YWNlKC9eIS8sICcnKTtcblx0ZWxzZSByZXR1cm4gJyEnICsgY29tYmluYXRvcjtcbn07XG5cbnZh
ciByZXZlcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdHZhciBleHByZXNzaW9ucyA9IGV4
cHJlc3Npb24uZXhwcmVzc2lvbnM7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMu
bGVuZ3RoOyBpKyspe1xuXHRcdHZhciBleHAgPSBleHByZXNzaW9uc1tpXTtcblx0XHR2YXIgbGFz
dCA9IHtwYXJ0czogW10sIHRhZzogJyonLCBjb21iaW5hdG9yOiByZXZlcnNlQ29tYmluYXRvcihl
eHBbMF0uY29tYmluYXRvcil9O1xuXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3Ro
OyBqKyspe1xuXHRcdFx0dmFyIGNleHAgPSBleHBbal07XG5cdFx0XHRpZiAoIWNleHAucmV2ZXJz
ZUNvbWJpbmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7XG5cdFx0XHRjZXhwLmNv
bWJpbmF0b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdFx0ZGVsZXRlIGNleHAucmV2
ZXJzZUNvbWJpbmF0b3I7XG5cdFx0fVxuXG5cdFx0ZXhwLnJldmVyc2UoKS5wdXNoKGxhc3QpO1xu
XHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxudmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0
aW9uKHN0cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVu
IExldml0aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQg
TGljZW5zZVxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uXFxcXF4kfCwj
XFxzXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0cmV0dXJuICdcXFxcJyArIG1hdGNoO1xuXHR9
KTtcbn07XG5cbnZhciByZWdleHAgPSBuZXcgUmVnRXhwKFxuLypcbiMhL3Vzci9iaW4vZW52IHJ1
YnlcbnB1dHMgXCJcXHRcXHRcIiArIERBVEEucmVhZC5nc3ViKC9cXChcXD94XFwpfFxccysjLiok
fFxccyt8XFxcXCR8XFxcXG4vLCcnKVxuX19FTkRfX1xuXHRcIig/eCleKD86XFxcblx0ICBcXFxc
cyogKCAsICkgXFxcXHMqICAgICAgICAgICAgICAgIyBTZXBhcmF0b3IgICAgICAgICAgXFxuXFxc
blx0fCBcXFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxcXHMqICAgIyBDb21iaW5hdG9yICAgICAg
ICAgXFxuXFxcblx0fCAgICAgICggXFxcXHMrICkgICAgICAgICAgICAgICAgICMgQ29tYmluYXRv
ckNoaWxkcmVuIFxcblxcXG5cdHwgICAgICAoIDx1bmljb2RlPisgfCBcXFxcKiApICAgICAjIFRh
ZyAgICAgICAgICAgICAgICBcXG5cXFxuXHR8IFxcXFwjICAoIDx1bmljb2RlPisgICAgICAgKSAg
ICAgIyBJRCAgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcLiAgKCA8dW5pY29kZT4rICAg
ICAgICkgICAgICMgQ2xhc3NOYW1lICAgICAgICAgIFxcblxcXG5cdHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgICAgICAgICAgXFxuXFxcblx0XFxcXFsgIFxcXG5c
dFx0XFxcXHMqICg8dW5pY29kZTE+KykgICg/OiAgXFxcblx0XHRcdFxcXFxzKiAoWypeJCF+fF0/
PSkgICg/OiAgXFxcblx0XHRcdFx0XFxcXHMqICg/OlxcXG5cdFx0XHRcdFx0KFtcXFwiJ10/KSgu
Kj8pXFxcXDkgXFxcblx0XHRcdFx0KVxcXG5cdFx0XHQpICBcXFxuXHRcdCk/ICBcXFxccyogIFxc
XG5cdFxcXFxdKD8hXFxcXF0pIFxcblxcXG5cdHwgICA6KyAoIDx1bmljb2RlPisgKSg/OlxcXG5c
dFxcXFwoICg/OlxcXG5cdFx0KD86KFtcXFwiJ10pKFteXFxcXDEyXSopXFxcXDEyKXwoKD86XFxc
XChbXildK1xcXFwpfFteKCldKikrKVxcXG5cdCkgXFxcXClcXFxuXHQpP1xcXG5cdClcIlxuKi9c
blx0XCJeKD86XFxcXHMqKCwpXFxcXHMqfFxcXFxzKig8Y29tYmluYXRvcj4rKVxcXFxzKnwoXFxc
XHMrKXwoPHVuaWNvZGU+K3xcXFxcKil8XFxcXCMoPHVuaWNvZGU+Kyl8XFxcXC4oPHVuaWNvZGU+
Kyl8XFxcXFtcXFxccyooPHVuaWNvZGUxPispKD86XFxcXHMqKFsqXiQhfnxdPz0pKD86XFxcXHMq
KD86KFtcXFwiJ10/KSguKj8pXFxcXDkpKSk/XFxcXHMqXFxcXF0oPyFcXFxcXSl8KDorKSg8dW5p
Y29kZT4rKSg/OlxcXFwoKD86KD86KFtcXFwiJ10pKFteXFxcXDEzXSopXFxcXDEzKXwoKD86XFxc
XChbXildK1xcXFwpfFteKCldKikrKSlcXFxcKSk/KVwiXG5cdC5yZXBsYWNlKC88Y29tYmluYXRv
cj4vLCAnWycgKyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXFxcOzwvJykgKyAnXScpXG5c
dC5yZXBsYWNlKC88dW5pY29kZT4vZywgJyg/OltcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxc
XFxcXFxcXFteXFxcXHMwLTlhLWZdKScpXG5cdC5yZXBsYWNlKC88dW5pY29kZTE+L2csICcoPzpb
OlxcXFx3XFxcXHUwMGExLVxcXFx1RkZGRi1dfFxcXFxcXFxcW15cXFxcczAtOWEtZl0pJylcbik7
XG5cbmZ1bmN0aW9uIHBhcnNlcihcblx0cmF3TWF0Y2gsXG5cblx0c2VwYXJhdG9yLFxuXHRjb21i
aW5hdG9yLFxuXHRjb21iaW5hdG9yQ2hpbGRyZW4sXG5cblx0dGFnTmFtZSxcblx0aWQsXG5cdGNs
YXNzTmFtZSxcblxuXHRhdHRyaWJ1dGVLZXksXG5cdGF0dHJpYnV0ZU9wZXJhdG9yLFxuXHRhdHRy
aWJ1dGVRdW90ZSxcblx0YXR0cmlidXRlVmFsdWUsXG5cblx0cHNldWRvTWFya2VyLFxuXHRwc2V1
ZG9DbGFzcyxcblx0cHNldWRvUXVvdGUsXG5cdHBzZXVkb0NsYXNzUXVvdGVkVmFsdWUsXG5cdHBz
ZXVkb0NsYXNzVmFsdWVcbil7XG5cdGlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09
IC0xKXtcblx0XHRwYXJzZWQuZXhwcmVzc2lvbnNbKytzZXBhcmF0b3JJbmRleF0gPSBbXTtcblx0
XHRjb21iaW5hdG9ySW5kZXggPSAtMTtcblx0XHRpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7XG5c
dH1cblxuXHRpZiAoY29tYmluYXRvciB8fCBjb21iaW5hdG9yQ2hpbGRyZW4gfHwgY29tYmluYXRv
ckluZGV4ID09PSAtMSl7XG5cdFx0Y29tYmluYXRvciA9IGNvbWJpbmF0b3IgfHwgJyAnO1xuXHRc
dHZhciBjdXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4
XTtcblx0XHRpZiAocmV2ZXJzZWQgJiYgY3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhd
KVxuXHRcdFx0Y3VycmVudFNlcGFyYXRvcltjb21iaW5hdG9ySW5kZXhdLnJldmVyc2VDb21iaW5h
dG9yID0gcmV2ZXJzZUNvbWJpbmF0b3IoY29tYmluYXRvcik7XG5cdFx0Y3VycmVudFNlcGFyYXRv
clsrK2NvbWJpbmF0b3JJbmRleF0gPSB7Y29tYmluYXRvcjogY29tYmluYXRvciwgdGFnOiAnKid9
O1xuXHR9XG5cblx0dmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJh
dG9ySW5kZXhdW2NvbWJpbmF0b3JJbmRleF07XG5cblx0aWYgKHRhZ05hbWUpe1xuXHRcdGN1cnJl
bnRQYXJzZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHR9IGVs
c2UgaWYgKGlkKXtcblx0XHRjdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBl
LCAnJyk7XG5cblx0fSBlbHNlIGlmIChjbGFzc05hbWUpe1xuXHRcdGNsYXNzTmFtZSA9IGNsYXNz
TmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdGlmICghY3VycmVudFBhcnNlZC5j
bGFzc0xpc3QpIGN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0ID0gW107XG5cdFx0aWYgKCFjdXJyZW50
UGFyc2VkLmNsYXNzZXMpIGN1cnJlbnRQYXJzZWQuY2xhc3NlcyA9IFtdO1xuXHRcdGN1cnJlbnRQ
YXJzZWQuY2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTtcblx0XHRjdXJyZW50UGFyc2VkLmNsYXNz
ZXMucHVzaCh7XG5cdFx0XHR2YWx1ZTogY2xhc3NOYW1lLFxuXHRcdFx0cmVnZXhwOiBuZXcgUmVn
RXhwKCcoXnxcXFxccyknICsgZXNjYXBlUmVnRXhwKGNsYXNzTmFtZSkgKyAnKFxcXFxzfCQpJylc
blx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXtcblx0XHRwc2V1ZG9DbGFzc1Zh
bHVlID0gcHNldWRvQ2xhc3NWYWx1ZSB8fCBwc2V1ZG9DbGFzc1F1b3RlZFZhbHVlO1xuXHRcdHBz
ZXVkb0NsYXNzVmFsdWUgPSBwc2V1ZG9DbGFzc1ZhbHVlID8gcHNldWRvQ2xhc3NWYWx1ZS5yZXBs
YWNlKHJlVW5lc2NhcGUsICcnKSA6IG51bGw7XG5cblx0XHRpZiAoIWN1cnJlbnRQYXJzZWQucHNl
dWRvcykgY3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5wc2V1
ZG9zLnB1c2goe1xuXHRcdFx0a2V5OiBwc2V1ZG9DbGFzcy5yZXBsYWNlKHJlVW5lc2NhcGUsICcn
KSxcblx0XHRcdHZhbHVlOiBwc2V1ZG9DbGFzc1ZhbHVlLFxuXHRcdFx0dHlwZTogcHNldWRvTWFy
a2VyLmxlbmd0aCA9PSAxID8gJ2NsYXNzJyA6ICdlbGVtZW50J1xuXHRcdH0pO1xuXG5cdH0gZWxz
ZSBpZiAoYXR0cmlidXRlS2V5KXtcblx0XHRhdHRyaWJ1dGVLZXkgPSBhdHRyaWJ1dGVLZXkucmVw
bGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cdFx0YXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFs
dWUgfHwgJycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXG5cdFx0dmFyIHRlc3QsIHJlZ2V4
cDtcblxuXHRcdHN3aXRjaCAoYXR0cmlidXRlT3BlcmF0b3Ipe1xuXHRcdFx0Y2FzZSAnXj0nIDog
cmVnZXhwID0gbmV3IFJlZ0V4cCggICAgICAgJ14nKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFs
dWUpICAgICAgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICckPScgOiByZWdleHAgPSBuZXcg
UmVnRXhwKCAgICAgICAgICAgIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKyckJyAgICAg
ICApOyBicmVhaztcblx0XHRcdGNhc2UgJ349JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICcoXnxc
XFxccyknKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcXFxzfCQpJyApOyBicmVh
aztcblx0XHRcdGNhc2UgJ3w9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNj
YXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJygtfCQpJyAgICk7IGJyZWFrO1xuXHRcdFx0Y2Fz
ZSAgJz0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0
ZVZhbHVlID09IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRjYXNlICcqPScgOiB0ZXN0
ID0gZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5kZXhP
ZihhdHRyaWJ1dGVWYWx1ZSkgPiAtMTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnIT0n
IDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVZhbHVl
ICE9IHZhbHVlO1xuXHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0ICAgOiB0ZXN0ID0gZnVu
Y3Rpb24odmFsdWUpe1xuXHRcdFx0XHRyZXR1cm4gISF2YWx1ZTtcblx0XHRcdH07XG5cdFx0fVxu
XG5cdFx0aWYgKGF0dHJpYnV0ZVZhbHVlID09ICcnICYmICgvXlsqJF5dPSQvKS50ZXN0KGF0dHJp
YnV0ZU9wZXJhdG9yKSkgdGVzdCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5c
dFx0fTtcblxuXHRcdGlmICghdGVzdCkgdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJl
dHVybiB2YWx1ZSAmJiByZWdleHAudGVzdCh2YWx1ZSk7XG5cdFx0fTtcblxuXHRcdGlmICghY3Vy
cmVudFBhcnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTtcblx0
XHRjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRrZXk6IGF0dHJpYnV0ZUtl
eSxcblx0XHRcdG9wZXJhdG9yOiBhdHRyaWJ1dGVPcGVyYXRvcixcblx0XHRcdHZhbHVlOiBhdHRy
aWJ1dGVWYWx1ZSxcblx0XHRcdHRlc3Q6IHRlc3Rcblx0XHR9KTtcblxuXHR9XG5cblx0cmV0dXJu
ICcnO1xufTtcblxuLy8gU2xpY2sgTlNcblxudmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30p
O1xuXG5TbGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRyZXR1cm4gcGFyc2Uo
ZXhwcmVzc2lvbik7XG59O1xuXG5TbGljay5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG5c
bmlmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrO1xuXG59KS5hcHBseSgvKjxDb21t
b25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0Nv
bW1vbkpTPiovdGhpcyk7XG5cbi8qXG4tLS1cbm5hbWU6IFNsaWNrLkZpbmRlclxuZGVzY3JpcHRp
b246IFRoZSBuZXcsIHN1cGVyZmFzdCBjc3Mgc2VsZWN0b3IgZW5naW5lLlxucHJvdmlkZXM6IFNs
aWNrLkZpbmRlclxucmVxdWlyZXM6IFNsaWNrLlBhcnNlclxuLi4uXG4qL1xuXG47KGZ1bmN0aW9u
KCl7XG5cbnZhciBsb2NhbCA9IHt9LFxuXHRmZWF0dXJlc0NhY2hlID0ge30sXG5cdHRvU3RyaW5n
ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rp
b25cblxubG9jYWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4pe1xuXHRyZXR1cm4gKC9cXHtc
XHMqXFxbbmF0aXZlIGNvZGVcXF1cXHMqXFx9LykudGVzdCgnJyArIGZuKTtcbn07XG5cbmxvY2Fs
LmlzWE1MID0gZnVuY3Rpb24oZG9jdW1lbnQpe1xuXHRyZXR1cm4gKCEhZG9jdW1lbnQueG1sVmVy
c2lvbikgfHwgKCEhZG9jdW1lbnQueG1sKSB8fCAodG9TdHJpbmcuY2FsbChkb2N1bWVudCkgPT0g
J1tvYmplY3QgWE1MRG9jdW1lbnRdJykgfHxcblx0KGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYg
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7XG59O1xuXG5sb2Nh
bC5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblxuXHQvLyBjb252ZXJ0IGVsZW1l
bnRzIC8gd2luZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJl
IGV4dHJhcG9sYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG5cdHZhciBub2RlVHlwZSA9IGRv
Y3VtZW50Lm5vZGVUeXBlO1xuXHRpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50XG5cdGVs
c2UgaWYgKG5vZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5v
ZGVcblx0ZWxzZSBpZiAoZG9jdW1lbnQubmF2aWdhdG9yKSBkb2N1bWVudCA9IGRvY3VtZW50LmRv
Y3VtZW50OyAvLyB3aW5kb3dcblx0ZWxzZSByZXR1cm47XG5cblx0Ly8gY2hlY2sgaWYgaXQncyB0
aGUgb2xkIGRvY3VtZW50XG5cblx0aWYgKHRoaXMuZG9jdW1lbnQgPT09IGRvY3VtZW50KSByZXR1
cm47XG5cdHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuXHQvLyBjaGVjayBpZiB3ZSBoYXZl
IGRvbmUgZmVhdHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmVcblxuXHR2YXIg
cm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRyb290VWlkID0gdGhpcy5nZXRV
SURYTUwocm9vdCksXG5cdFx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLFxuXHRc
dGZlYXR1cmU7XG5cblx0aWYgKGZlYXR1cmVzKXtcblx0XHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVy
ZXMpe1xuXHRcdFx0dGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdO1xuXHRcdH1cblx0
XHRyZXR1cm47XG5cdH1cblxuXHRmZWF0dXJlcyA9IGZlYXR1cmVzQ2FjaGVbcm9vdFVpZF0gPSB7
fTtcblxuXHRmZWF0dXJlcy5yb290ID0gcm9vdDtcblx0ZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9
IHRoaXMuaXNYTUwoZG9jdW1lbnQpO1xuXG5cdGZlYXR1cmVzLmJyb2tlblN0YXJHRUJUTlxuXHQ9
IGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBXG5cdD0gZmVhdHVyZXMuaWRHZXRzTmFtZVxu
XHQ9IGZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkdFQkNO
XG5cdD0gZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQVxuXHQ9IGZlYXR1cmVzLmJyb2tlbkVtcHR5
QXR0cmlidXRlUVNBXG5cdD0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnRcblx0PSBmZWF0dXJlcy5u
YXRpdmVNYXRjaGVzU2VsZWN0b3Jcblx0PSBmYWxzZTtcblxuXHR2YXIgc3RhclNlbGVjdHNDbG9z
ZWQsIHN0YXJTZWxlY3RzQ29tbWVudHMsXG5cdFx0YnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ04s
IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUsXG5cdFx0YnJva2VuRm9ybUF0dHJpYnV0ZUdl
dHRlcjtcblxuXHR2YXIgc2VsZWN0ZWQsIGlkID0gJ3NsaWNrX3VuaXF1ZWlkJztcblx0dmFyIHRl
c3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0dmFyIHRlc3RSb290
ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScp
WzBdIHx8IHJvb3Q7XG5cdHRlc3RSb290LmFwcGVuZENoaWxkKHRlc3ROb2RlKTtcblxuXHQvLyBv
biBub24tSFRNTCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250
IHdvcmsgcHJvcGVybHlcblx0dHJ5IHtcblx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9
XCInK2lkKydcIj48L2E+Jztcblx0XHRmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHR9IGNhdGNoIChlKXt9XG5cblx0aWYgKGZlYXR1cmVz
LmlzSFRNTERvY3VtZW50KXtcblxuXHRcdHRlc3ROb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7
XG5cblx0XHQvLyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdO
YW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlQ29tbWVudCgnJykpO1xuXHRcdHN0YXJTZWxlY3RzQ29tbWVudHMgPSAodGVz
dE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGggPiAxKTtcblxuXHRcdC8vIElF
IHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUu
aW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRzZWxlY3RlZCA9IHRlc3ROb2RlLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRzdGFyU2VsZWN0c0Nsb3NlZCA9IChzZWxlY3Rl
ZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkg
PT0gJy8nKTtcblx0XHR9IGNhdGNoIChlKXt9O1xuXG5cdFx0ZmVhdHVyZXMuYnJva2VuU3RhckdF
QlROID0gc3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDtcblxuXHRcdC8v
IElFIHJldHVybnMgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgaWQgZm9y
IGdldEVsZW1lbnRzQnlJZCBmb3Igc29tZSBkb2N1bWVudHNcblx0XHR0cnkge1xuXHRcdFx0dGVz
dE5vZGUuaW5uZXJIVE1MID0gJzxhIG5hbWU9XCInKyBpZCArJ1wiPjwvYT48YiBpZD1cIicrIGlk
ICsnXCI+PC9iPic7XG5cdFx0XHRmZWF0dXJlcy5pZEdldHNOYW1lID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpID09PSB0ZXN0Tm9kZS5maXJzdENoaWxkO1xuXHRcdH0gY2F0Y2ggKGUpe31c
blxuXHRcdGlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtcblxuXHRcdFx0Ly8g
U2FmYXJpIDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzXG5cdFx0XHR0
cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJmXCI+PC9hPjxh
IGNsYXNzPVwiYlwiPjwvYT4nO1xuXHRcdFx0XHR0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKCdiJykubGVuZ3RoO1xuXHRcdFx0XHR0ZXN0Tm9kZS5maXJzdENoaWxkLmNsYXNzTmFtZSA9
ICdiJztcblx0XHRcdFx0Y2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9ICh0ZXN0Tm9kZS5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoICE9IDIpO1xuXHRcdFx0fSBjYXRjaCAo
ZSl7fTtcblxuXHRcdFx0Ly8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250
IGRldGVjdHMgdGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZVxuXHRcdFx0dHJ5IHtc
blx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiYVwiPjwvYT48YSBjbGFz
cz1cImYgYiBhXCI+PC9hPic7XG5cdFx0XHRcdGJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0g
KHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7XG5cdFx0
XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdGZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0
RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjtcblx0XHR9
XG5cblx0XHRpZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7XG5cdFx0XHQvLyBJRSA4IHJl
dHVybnMgY2xvc2VkIG5vZGVzIChFRzpcIjwvZm9vPlwiKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgn
KicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5u
ZXJIVE1MID0gJ2ZvbzwvZm9vPic7XG5cdFx0XHRcdHNlbGVjdGVkID0gdGVzdE5vZGUucXVlcnlT
ZWxlY3RvckFsbCgnKicpO1xuXHRcdFx0XHRmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9
IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5j
aGFyQXQoMCkgPT0gJy8nKTtcblx0XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdFx0Ly8gU2FmYXJp
IDMuMiBxdWVyeVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJr
c21vZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFz
cz1cIk1pWFwiPjwvYT4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAh
dGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDtcblx0XHRcdH0gY2F0Y2gg
KGUpe31cblxuXHRcdFx0Ly8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBv
cHRpb25zIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2Rl
LmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPmE8L29w
dGlvbj48L3NlbGVjdD4nO1xuXHRcdFx0XHRmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBID0gKHRl
c3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJzpjaGVja2VkJykubGVuZ3RoID09IDApO1xuXHRcdFx0
fSBjYXRjaCAoZSl7fTtcblxuXHRcdFx0Ly8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBm
b3IgYXR0clsqXiRdPVwiXCIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdHRy
eSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cIlwiPjwvYT4nO1xu
XHRcdFx0XHRmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVy
eVNlbGVjdG9yQWxsKCdbY2xhc3MqPVwiXCJdJykubGVuZ3RoICE9IDApO1xuXHRcdFx0fSBjYXRj
aCAoZSl7fVxuXG5cdFx0fVxuXG5cdFx0Ly8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQg
b2YgaWQgeCwgZm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUg
aW5wdXRcblx0XHR0cnkge1xuXHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlv
bj1cInNcIj48aW5wdXQgaWQ9XCJhY3Rpb25cIi8+PC9mb3JtPic7XG5cdFx0XHRicm9rZW5Gb3Jt
QXR0cmlidXRlR2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rp
b24nKSAhPSAncycpO1xuXHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdC8vIG5hdGl2ZSBtYXRjaGVz
U2VsZWN0b3IgZnVuY3Rpb25cblxuXHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9
IHJvb3QubWF0Y2hlcyB8fCAvKnJvb3QubXNNYXRjaGVzU2VsZWN0b3IgfHwqLyByb290Lm1vek1h
dGNoZXNTZWxlY3RvciB8fCByb290LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjtcblx0XHRpZiAoZmVh
dHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkge1xuXHRcdFx0Ly8gaWYgbWF0Y2hlc1Nl
bGVjdG9yIHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdFxu
XHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycp
O1xuXHRcdFx0ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDtcblx0XHR9IGNh
dGNoIChlKXt9XG5cblx0fVxuXG5cdHRyeSB7XG5cdFx0cm9vdC5zbGlja19leHBhbmRvID0gMTtc
blx0XHRkZWxldGUgcm9vdC5zbGlja19leHBhbmRvO1xuXHRcdGZlYXR1cmVzLmdldFVJRCA9IHRo
aXMuZ2V0VUlESFRNTDtcblx0fSBjYXRjaCAoZSl7XG5cdFx0ZmVhdHVyZXMuZ2V0VUlEID0gdGhp
cy5nZXRVSURYTUw7XG5cdH1cblxuXHR0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7XG5c
dHRlc3ROb2RlID0gc2VsZWN0ZWQgPSB0ZXN0Um9vdCA9IG51bGw7XG5cblx0Ly8gZ2V0QXR0cmli
dXRlXG5cblx0ZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50
ICYmIGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7XG5c
dFx0dmFyIG1ldGhvZCA9IHRoaXMuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcblx0XHRpZiAobWV0
aG9kKSByZXR1cm4gbWV0aG9kLmNhbGwobm9kZSk7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSBu
b2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlKSA/
IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIG5h
bWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5cdFx0
cmV0dXJuIChtZXRob2QpID8gbWV0aG9kLmNhbGwobm9kZSkgOiBub2RlLmdldEF0dHJpYnV0ZShu
YW1lKTtcblx0fTtcblxuXHQvLyBoYXNBdHRyaWJ1dGVcblxuXHRmZWF0dXJlcy5oYXNBdHRyaWJ1
dGUgPSAocm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290Lmhhc0F0dHJpYnV0ZSkpID8gZnVu
Y3Rpb24obm9kZSwgYXR0cmlidXRlKXtcblx0XHRyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0
cmlidXRlKTtcblx0fSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0bm9kZSA9IG5v
ZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpO1xuXHRcdHJldHVybiAhIShub2RlICYmIChu
b2RlLnNwZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpO1xuXHR9O1xuXG5cdC8vIGNvbnRhaW5z
XG5cdC8vIEZJWE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJl
bnQgZm9yIHhtbCBhbmQgaHRtbCBkb2N1bWVudHM/XG5cdHZhciBuYXRpdmVSb290Q29udGFpbnMg
PSByb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLFxuXHRcdG5hdGl2ZURv
Y3VtZW50Q29udGFpbnMgPSBkb2N1bWVudCAmJiB0aGlzLmlzTmF0aXZlQ29kZShkb2N1bWVudC5j
b250YWlucyk7XG5cblx0ZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYm
IG5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7XG5cdFx0
cmV0dXJuIGNvbnRleHQuY29udGFpbnMobm9kZSk7XG5cdH0gOiAobmF0aXZlUm9vdENvbnRhaW5z
ICYmICFuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpe1xu
XHRcdC8vIElFOCBkb2VzIG5vdCBoYXZlIC5jb250YWlucyBvbiBkb2N1bWVudC5cblx0XHRyZXR1
cm4gY29udGV4dCA9PT0gbm9kZSB8fCAoKGNvbnRleHQgPT09IGRvY3VtZW50KSA/IGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudCA6IGNvbnRleHQpLmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKHJvb3Qg
JiYgcm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5jdGlvbihjb250ZXh0LCBub2Rl
KXtcblx0XHRyZXR1cm4gY29udGV4dCA9PT0gbm9kZSB8fCAhIShjb250ZXh0LmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKG5vZGUpICYgMTYpO1xuXHR9IDogZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7
XG5cdFx0aWYgKG5vZGUpIGRvIHtcblx0XHRcdGlmIChub2RlID09PSBjb250ZXh0KSByZXR1cm4g
dHJ1ZTtcblx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpO1xuXHRcdHJldHVy
biBmYWxzZTtcblx0fTtcblxuXHQvLyBkb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdC8vIGNyZWRp
dHMgdG8gU2l6emxlIChodHRwOi8vc2l6emxlanMuY29tLylcblxuXHRmZWF0dXJlcy5kb2N1bWVu
dFNvcnRlciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIp
e1xuXHRcdGlmICghYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbikgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRp
b24oYikgJiA0ID8gLTEgOiBhID09PSBiID8gMCA6IDE7XG5cdH0gOiAoJ3NvdXJjZUluZGV4JyBp
biByb290KSA/IGZ1bmN0aW9uKGEsIGIpe1xuXHRcdGlmICghYS5zb3VyY2VJbmRleCB8fCAhYi5z
b3VyY2VJbmRleCkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJj
ZUluZGV4O1xuXHR9IDogKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSA/IGZ1bmN0aW9uKGEsIGIpe1xu
XHRcdGlmICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwO1xu
XHRcdHZhciBhUmFuZ2UgPSBhLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgYlJhbmdlID0g
Yi5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0YVJhbmdlLnNldFN0YXJ0KGEsIDAp
O1xuXHRcdGFSYW5nZS5zZXRFbmQoYSwgMCk7XG5cdFx0YlJhbmdlLnNldFN0YXJ0KGIsIDApO1xu
XHRcdGJSYW5nZS5zZXRFbmQoYiwgMCk7XG5cdFx0cmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpO1xuXHR9IDogbnVsbDtcblxuXHRy
b290ID0gbnVsbDtcblxuXHRmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpe1xuXHRcdHRoaXNbZmVh
dHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtcblx0fVxufTtcblxuLy8gTWFpbiBNZXRob2Rcblxu
dmFyIHJlU2ltcGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1xcdy1dK3xcXCopKSQvLFxuXHRy
ZUVtcHR5QXR0cmlidXRlID0gL1xcWy4rWyokXl09KD86XCJcInwnJyk/XFxdLyxcblx0cXNhRmFp
bEV4cENhY2hlID0ge307XG5cbmxvY2FsLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJl
c3Npb24sIGFwcGVuZCwgZmlyc3Qpe1xuXG5cdHZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmly
c3QpID8gbnVsbCA6IChhcHBlbmQgfHwgW10pO1xuXG5cdGlmICghY29udGV4dCkgcmV0dXJuIGZv
dW5kO1xuXHRlbHNlIGlmIChjb250ZXh0Lm5hdmlnYXRvcikgY29udGV4dCA9IGNvbnRleHQuZG9j
dW1lbnQ7IC8vIENvbnZlcnQgdGhlIG5vZGUgZnJvbSBhIHdpbmRvdyB0byBhIGRvY3VtZW50XG5c
dGVsc2UgaWYgKCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7XG5cblx0Ly8gc2V0dXBc
blxuXHR2YXIgcGFyc2VkLCBpLCBub2RlLCBub2Rlcyxcblx0XHR1bmlxdWVzID0gdGhpcy51bmlx
dWVzID0ge30sXG5cdFx0aGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLFxu
XHRcdGNvbnRleHRJc0RvY3VtZW50ID0gKGNvbnRleHQubm9kZVR5cGUgPT0gOSk7XG5cblx0aWYg
KHRoaXMuZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0
Lm93bmVyRG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpO1xuXG5cdC8vIGF2b2lk
IGR1cGxpY2F0aW5nIGl0ZW1zIGFscmVhZHkgaW4gdGhlIGFwcGVuZCBhcnJheVxuXHRpZiAoaGFz
T3RoZXJzKSBmb3IgKGkgPSBmb3VuZC5sZW5ndGg7IGktLTspIHVuaXF1ZXNbdGhpcy5nZXRVSUQo
Zm91bmRbaV0pXSA9IHRydWU7XG5cblx0Ly8gZXhwcmVzc2lvbiBjaGVja3NcblxuXHRpZiAodHlw
ZW9mIGV4cHJlc3Npb24gPT0gJ3N0cmluZycpeyAvLyBleHByZXNzaW9uIGlzIGEgc3RyaW5nXG5c
blx0XHQvKjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovXG5cdFx0dmFyIHNpbXBsZVNlbGVj
dG9yID0gZXhwcmVzc2lvbi5tYXRjaChyZVNpbXBsZVNlbGVjdG9yKTtcblx0XHRzaW1wbGVTZWxl
Y3RvcnM6IGlmIChzaW1wbGVTZWxlY3Rvcil7XG5cblx0XHRcdHZhciBzeW1ib2wgPSBzaW1wbGVT
ZWxlY3RvclsxXSxcblx0XHRcdFx0bmFtZSA9IHNpbXBsZVNlbGVjdG9yWzJdO1xuXG5cdFx0XHRp
ZiAoIXN5bWJvbCl7XG5cblx0XHRcdFx0aWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3Rh
ckdFQlROKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdG5vZGVzID0gY29udGV4dC5n
ZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTtcblx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9k
ZXNbMF0gfHwgbnVsbDtcblx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtc
blx0XHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0p
KSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9s
ID09ICcjJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0
SXNEb2N1bWVudCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlID0gY29udGV4
dC5nZXRFbGVtZW50QnlJZChuYW1lKTtcblx0XHRcdFx0aWYgKCFub2RlKSByZXR1cm4gZm91bmQ7
XG5cdFx0XHRcdGlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdp
ZCcpLm5vZGVWYWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlm
IChmaXJzdCkgcmV0dXJuIG5vZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYm
IHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblxuXHRcdFx0
fSBlbHNlIGlmIChzeW1ib2wgPT0gJy4nKXtcblxuXHRcdFx0XHRpZiAoIXRoaXMuaXNIVE1MRG9j
dW1lbnQgfHwgKCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2Vu
R0VCQ04pICYmIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9y
cztcblx0XHRcdFx0aWYgKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5i
cm9rZW5HRUJDTil7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUobmFtZSk7XG5cdFx0XHRcdFx0aWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVs
bDtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRc
dFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQu
cHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFy
IG1hdGNoQ2xhc3MgPSBuZXcgUmVnRXhwKCcoXnxcXFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAo
bmFtZSkgKycoXFxcXHN8JCknKTtcblx0XHRcdFx0XHRub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsr
XTspe1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7XG5cdFx0XHRcdFx0
XHRpZiAoIShjbGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51
ZTtcblx0XHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRpZiAo
IShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5v
ZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNP
dGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBm
b3VuZDtcblxuXHRcdH1cblx0XHQvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXG5c
dFx0Lyo8cXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki9cblx0XHRxdWVyeVNlbGVjdG9yOiBpZiAo
Y29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKXtcblxuXHRcdFx0aWYgKCF0aGlzLmlzSFRNTERvY3Vt
ZW50XG5cdFx0XHRcdHx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXVxuXHRcdFx0XHQvL1RP
RE86IG9ubHkgc2tpcCB3aGVuIGV4cHJlc3Npb24gaXMgYWN0dWFsbHkgbWl4ZWQgY2FzZVxuXHRc
dFx0XHR8fCB0aGlzLmJyb2tlbk1peGVkQ2FzZVFTQVxuXHRcdFx0XHR8fCAodGhpcy5icm9rZW5D
aGVja2VkUVNBICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKVxuXHRcdFx0
XHR8fCAodGhpcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSAmJiByZUVtcHR5QXR0cmlidXRlLnRl
c3QoZXhwcmVzc2lvbikpXG5cdFx0XHRcdHx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3
aGVuICFjb250ZXh0SXNEb2N1bWVudCBhbmQuLi5cblx0XHRcdFx0XHQvLyAgdGhlcmUgYXJlIG11
bHRpcGxlIGV4cHJlc3Npb25zIGluIHRoZSBzZWxlY3RvclxuXHRcdFx0XHRcdC8vICBzaW5jZSB3
ZSBjdXJyZW50bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBl
eHByZXNzaW9uIHNlbGVjdG9yc1xuXHRcdFx0XHRcdCYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcp
ID4gLTFcblx0XHRcdFx0KVxuXHRcdFx0XHR8fCBTbGljay5kaXNhYmxlUVNBXG5cdFx0XHQpIGJy
ZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cblx0XHRcdHZhciBfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24s
IF9jb250ZXh0ID0gY29udGV4dCwgY3VycmVudElkO1xuXHRcdFx0aWYgKCFjb250ZXh0SXNEb2N1
bWVudCl7XG5cdFx0XHRcdC8vIG5vbi1kb2N1bWVudCByb290ZWQgUVNBXG5cdFx0XHRcdC8vIGNy
ZWRpdHMgdG8gQW5kcmV3IER1cG9udFxuXHRcdFx0XHRjdXJyZW50SWQgPSBfY29udGV4dC5nZXRB
dHRyaWJ1dGUoJ2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJztcblx0XHRcdFx0X2NvbnRleHQu
c2V0QXR0cmlidXRlKCdpZCcsIHNsaWNraWQpO1xuXHRcdFx0XHRfZXhwcmVzc2lvbiA9ICcjJyAr
IHNsaWNraWQgKyAnICcgKyBfZXhwcmVzc2lvbjtcblx0XHRcdFx0Y29udGV4dCA9IF9jb250ZXh0
LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChmaXJzdCkg
cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDtcblx0XHRc
dFx0ZWxzZSBub2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7XG5c
dFx0XHR9IGNhdGNoIChlKXtcblx0XHRcdFx0cXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dID0g
MTtcblx0XHRcdFx0YnJlYWsgcXVlcnlTZWxlY3Rvcjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0
XHRcdGlmICghY29udGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHRcdGlmIChjdXJyZW50SWQpIF9j
b250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpO1xuXHRcdFx0XHRcdGVsc2UgX2Nv
bnRleHQucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0XHRcdGNvbnRleHQgPSBfY29udGV4
dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGFyU2VsZWN0c0Nsb3Nl
ZFFTQSkgZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtcblx0XHRcdFx0aWYgKG5vZGUu
bm9kZU5hbWUgPiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2Rl
KV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBu
b2Rlc1tpKytdOyl7XG5cdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0
VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChoYXNP
dGhlcnMpIHRoaXMuc29ydChmb3VuZCk7XG5cdFx0XHRyZXR1cm4gZm91bmQ7XG5cblx0XHR9XG5c
dFx0Lyo8L3F1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cblx0XHRwYXJzZWQgPSB0aGlzLlNs
aWNrLnBhcnNlKGV4cHJlc3Npb24pO1xuXHRcdGlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZv
dW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4
cHJlc3Npb25cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGlj
ayl7IC8vIGV4cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0XG5cdFx0cGFyc2VkID0g
ZXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRF
bGVtZW50IHx8IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGVc
blx0XHQoZm91bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lv
bjtcblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0gZWxzZSB7IC8vIG90aGVyIGp1bmtcblx0XHRyZXR1
cm4gZm91bmQ7XG5cdH1cblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1z
ZWxlY3RvcnM+Ki9cblxuXHQvLyBjYWNoZSBlbGVtZW50cyBmb3IgdGhlIG50aCBzZWxlY3RvcnNc
blxuXHR0aGlzLnBvc05USCA9IHt9O1xuXHR0aGlzLnBvc05USExhc3QgPSB7fTtcblx0dGhpcy5w
b3NOVEhUeXBlID0ge307XG5cdHRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTtcblxuXHQvKjwvbnRo
LXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGlmIGFw
cGVuZCBpcyBudWxsIGFuZCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25l
IGV4cHJlc3Npb24gdXNlIHB1c2hBcnJheSwgZWxzZSB1c2UgcHVzaFVJRFxuXHR0aGlzLnB1c2gg
PSAoIWhhc090aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQu
ZXhwcmVzc2lvbnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVz
aFVJRDtcblxuXHRpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTtcblxuXHQvLyBkZWZhdWx0
IGVuZ2luZVxuXG5cdHZhciBqLCBtLCBuO1xuXHR2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xh
c3NMaXN0LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zO1xuXHR2YXIgY3VycmVudEl0ZW1z
LCBjdXJyZW50RXhwcmVzc2lvbiwgY3VycmVudEJpdCwgbGFzdEJpdCwgZXhwcmVzc2lvbnMgPSBw
YXJzZWQuZXhwcmVzc2lvbnM7XG5cblx0c2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJl
c3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBj
dXJyZW50RXhwcmVzc2lvbltqXSk7IGorKyl7XG5cblx0XHRjb21iaW5hdG9yID0gJ2NvbWJpbmF0
b3I6JyArIGN1cnJlbnRCaXQuY29tYmluYXRvcjtcblx0XHRpZiAoIXRoaXNbY29tYmluYXRvcl0p
IGNvbnRpbnVlIHNlYXJjaDtcblxuXHRcdHRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50
KSA/IGN1cnJlbnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTtcblx0XHRp
ZCAgICAgICAgID0gY3VycmVudEJpdC5pZDtcblx0XHRjbGFzc0xpc3QgID0gY3VycmVudEJpdC5j
bGFzc0xpc3Q7XG5cdFx0Y2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3Nlcztcblx0XHRhdHRy
aWJ1dGVzID0gY3VycmVudEJpdC5hdHRyaWJ1dGVzO1xuXHRcdHBzZXVkb3MgICAgPSBjdXJyZW50
Qml0LnBzZXVkb3M7XG5cdFx0bGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24u
bGVuZ3RoIC0gMSkpO1xuXG5cdFx0dGhpcy5iaXRVbmlxdWVzID0ge307XG5cblx0XHRpZiAobGFz
dEJpdCl7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzO1xuXHRcdFx0dGhpcy5mb3VuZCA9
IGZvdW5kO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVuaXF1ZXMgPSB7fTtcblx0XHRcdHRo
aXMuZm91bmQgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAoaiA9PT0gMCl7XG5cdFx0XHR0aGlzW2Nv
bWJpbmF0b3JdKGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Ms
IGNsYXNzTGlzdCk7XG5cdFx0XHRpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgp
IGJyZWFrIHNlYXJjaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQp
IGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXtcblx0XHRc
dFx0dGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0
dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0XHRcdGlmIChmb3VuZC5sZW5ndGgp
IGJyZWFrIHNlYXJjaDtcblx0XHRcdH0gZWxzZSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1z
Lmxlbmd0aDsgbSA8IG47IG0rKykgdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7XG5cdFx0fVxu
XG5cdFx0Y3VycmVudEl0ZW1zID0gdGhpcy5mb3VuZDtcblx0fVxuXG5cdC8vIHNob3VsZCBzb3J0
IGlmIHRoZXJlIGFyZSBub2RlcyBpbiBhcHBlbmQgYW5kIGlmIHlvdSBwYXNzIG11bHRpcGxlIGV4
cHJlc3Npb25zLlxuXHRpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3Ro
ID4gMSkpIHRoaXMuc29ydChmb3VuZCk7XG5cblx0cmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0g
fHwgbnVsbCkgOiBmb3VuZDtcbn07XG5cbi8vIFV0aWxzXG5cbmxvY2FsLnVpZHggPSAxO1xubG9j
YWwudWlkayA9ICdzbGljay11bmlxdWVpZCc7XG5cbmxvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9u
KG5vZGUpe1xuXHR2YXIgdWlkID0gbm9kZS5nZXRBdHRyaWJ1dGUodGhpcy51aWRrKTtcblx0aWYg
KCF1aWQpe1xuXHRcdHVpZCA9IHRoaXMudWlkeCsrO1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKHRo
aXMudWlkaywgdWlkKTtcblx0fVxuXHRyZXR1cm4gdWlkO1xufTtcblxubG9jYWwuZ2V0VUlESFRN
TCA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUu
dW5pcXVlTnVtYmVyID0gdGhpcy51aWR4KyspO1xufTtcblxuLy8gc29ydCBiYXNlZCBvbiB0aGUg
c2V0RG9jdW1lbnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLlxuXG5sb2NhbC5zb3J0ID0gZnVuY3Rp
b24ocmVzdWx0cyl7XG5cdGlmICghdGhpcy5kb2N1bWVudFNvcnRlcikgcmV0dXJuIHJlc3VsdHM7
XG5cdHJlc3VsdHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTtcblx0cmV0dXJuIHJlc3VsdHM7
XG59O1xuXG4vKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9c
blxubG9jYWwuY2FjaGVOVEggPSB7fTtcblxubG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xcZCop
PyhbYS16XSspPyhbKy1dXFxkKyk/JC87XG5cbmxvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5j
dGlvbihhcmd1bWVudCl7XG5cdHZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNo
TlRIKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblx0dmFyIHNwZWNpYWwgPSBwYXJz
ZWRbMl0gfHwgZmFsc2U7XG5cdHZhciBhID0gcGFyc2VkWzFdIHx8IDE7XG5cdGlmIChhID09ICct
JykgYSA9IC0xO1xuXHR2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDtcblx0cGFyc2VkID1cblx0XHQo
c3BlY2lhbCA9PSAnbicpXHQ/IHthOiBhLCBiOiBifSA6XG5cdFx0KHNwZWNpYWwgPT0gJ29kZCcp
XHQ/IHthOiAyLCBiOiAxfSA6XG5cdFx0KHNwZWNpYWwgPT0gJ2V2ZW4nKVx0PyB7YTogMiwgYjog
MH0gOiB7YTogMCwgYjogYX07XG5cblx0cmV0dXJuICh0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSA9
IHBhcnNlZCk7XG59O1xuXG5sb2NhbC5jcmVhdGVOVEhQc2V1ZG8gPSBmdW5jdGlvbihjaGlsZCwg
c2libGluZywgcG9zaXRpb25zLCBvZlR5cGUpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJn
dW1lbnQpe1xuXHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRpZiAoIXRoaXNb
cG9zaXRpb25zXVt1aWRdKXtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5c
dFx0XHRpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dmFyIGVsID0gcGFyZW50W2No
aWxkXSwgY291bnQgPSAxO1xuXHRcdFx0aWYgKG9mVHlwZSl7XG5cdFx0XHRcdHZhciBub2RlTmFt
ZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9kZU5h
bWUgIT0gbm9kZU5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25zXVt0aGlz
LmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxbc2libGlu
Z10pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWwubm9k
ZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHRcdFx0dGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0
VUlEKGVsKV0gPSBjb3VudCsrO1xuXHRcdFx0XHR9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkp
O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJztcblx0XHR2
YXIgcGFyc2VkID0gdGhpcy5jYWNoZU5USFthcmd1bWVudF0gfHwgdGhpcy5wYXJzZU5USEFyZ3Vt
ZW50KGFyZ3VtZW50KTtcblx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBh
ID0gcGFyc2VkLmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07XG5c
dFx0aWYgKGEgPT0gMCkgcmV0dXJuIGIgPT0gcG9zO1xuXHRcdGlmIChhID4gMCl7XG5cdFx0XHRp
ZiAocG9zIDwgYikgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYiA8IHBv
cykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7
XG5cdH07XG59O1xuXG4vKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVj
dG9ycz4qL1xuXG5sb2NhbC5wdXNoQXJyYXkgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFz
c2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0aWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2Rl
LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNo
KG5vZGUpO1xufTtcblxubG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3Mpe1xuXHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9k
ZSk7XG5cdGlmICghdGhpcy51bmlxdWVzW3VpZF0gJiYgdGhpcy5tYXRjaFNlbGVjdG9yKG5vZGUs
IHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpKXtcblx0XHR0aGlzLnVuaXF1
ZXNbdWlkXSA9IHRydWU7XG5cdFx0dGhpcy5mb3VuZC5wdXNoKG5vZGUpO1xuXHR9XG59O1xuXG5s
b2NhbC5tYXRjaE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICh0aGlzLmlz
SFRNTERvY3VtZW50ICYmIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKXtcblx0XHR0cnkge1xu
XHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0
b3IucmVwbGFjZSgvXFxbKFtePV0rKT1cXHMqKFteJ1wiXFxdXSs/KVxccypcXF0vZywgJ1skMT1c
IiQyXCJdJykpO1xuXHRcdH0gY2F0Y2ggKG1hdGNoRXJyb3Ipe31cblx0fVxuXG5cdHZhciBwYXJz
ZWQgPSB0aGlzLlNsaWNrLnBhcnNlKHNlbGVjdG9yKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiB0
cnVlO1xuXG5cdC8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnNcblx0dmFyIGV4cHJlc3Npb25z
ID0gcGFyc2VkLmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4
cHJlc3Npb247XG5cdGZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25z
W2ldKTsgaSsrKXtcblx0XHRpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpe1xuXHRc
dFx0dmFyIGV4cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdO1xuXHRcdFx0aWYgKHRoaXMubWF0Y2hT
ZWxlY3Rvcihub2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRv
VXBwZXJDYXNlKCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNl
dWRvcykpIHJldHVybiB0cnVlO1xuXHRcdFx0c2ltcGxlRXhwQ291bnRlcisrO1xuXHRcdH1cblx0
fVxuXG5cdGlmIChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxz
ZTtcblxuXHR2YXIgbm9kZXMgPSB0aGlzLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBwYXJzZWQpLCBp
dGVtO1xuXHRmb3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspe1xuXHRcdGlmIChpdGVtID09
PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5sb2NhbC5t
YXRjaFBzZXVkbyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXtcblx0dmFyIHBzZXVk
b05hbWUgPSAncHNldWRvOicgKyBuYW1lO1xuXHRpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJu
IHRoaXNbcHNldWRvTmFtZV0obm9kZSwgYXJndW1lbnQpO1xuXHR2YXIgYXR0cmlidXRlID0gdGhp
cy5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG5cdHJldHVybiAoYXJndW1lbnQpID8gYXJndW1l
bnQgPT0gYXR0cmlidXRlIDogISFhdHRyaWJ1dGU7XG59O1xuXG5sb2NhbC5tYXRjaFNlbGVjdG9y
ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7
XG5cdGlmICh0YWcpe1xuXHRcdHZhciBub2RlTmFtZSA9ICh0aGlzLmlzWE1MRG9jdW1lbnQpID8g
bm9kZS5ub2RlTmFtZSA6IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRpZiAodGFn
ID09ICcqJyl7XG5cdFx0XHRpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4
IGZvciBjb21tZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXNcblx0XHR9IGVsc2Uge1xuXHRcdFx0
aWYgKG5vZGVOYW1lICE9IHRhZykgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChp
ZCAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlO1xuXG5cdHZh
ciBpLCBwYXJ0LCBjbHM7XG5cdGlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsg
aS0tOyl7XG5cdFx0Y2xzID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG5cdFx0
aWYgKCEoY2xzICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTtc
blx0fVxuXHRpZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTsp
e1xuXHRcdHBhcnQgPSBhdHRyaWJ1dGVzW2ldO1xuXHRcdGlmIChwYXJ0Lm9wZXJhdG9yID8gIXBh
cnQudGVzdCh0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0
cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwc2V1ZG9z
KSBmb3IgKGkgPSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7XG5cdFx0cGFydCA9IHBzZXVkb3NbaV07
XG5cdFx0aWYgKCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkg
cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIGNvbWJpbmF0b3Jz
ID0ge1xuXG5cdCcgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRl
cywgcHNldWRvcywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWxcblxu
XHRcdHZhciBpLCBpdGVtLCBjaGlsZHJlbjtcblxuXHRcdGlmICh0aGlzLmlzSFRNTERvY3VtZW50
KXtcblx0XHRcdGdldEJ5SWQ6IGlmIChpZCl7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRcdFx0aWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwg
KHRoaXMuaWRHZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5u
b2RlVmFsdWUgIT0gaWQpKXtcblx0XHRcdFx0XHQvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBl
bGVtZW50cyB3aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZVxuXHRcdFx0XHRcdC8vIGlm
IHRoZXJlcyBqdXN0IG9uZSBpdCB3aWxsIHJldHVybiB0aGUgZWxlbWVudCwgZWxzZSBpdCB3aWxs
IGJlIGEgY29sbGVjdGlvblxuXHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5hbGxbaWRdO1xuXHRc
dFx0XHRcdGlmICghY2hpbGRyZW4pIHJldHVybjtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuWzBd
KSBjaGlsZHJlbiA9IFtjaGlsZHJlbl07XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaXRlbSA9IGNo
aWxkcmVuW2krK107KXtcblx0XHRcdFx0XHRcdHZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0
ZU5vZGUoJ2lkJyk7XG5cdFx0XHRcdFx0XHRpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUg
PT0gaWQpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2Vz
LCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0
XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRp
ZiAoIWl0ZW0pe1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBjb250ZXh0IGlzIGluIHRoZSBkb20gd2Ug
cmV0dXJuLCBlbHNlIHdlIHdpbGwgdHJ5IEdFQlROLCBicmVha2luZyB0aGUgZ2V0QnlJZCBsYWJl
bFxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjtc
blx0XHRcdFx0XHRlbHNlIGJyZWFrIGdldEJ5SWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5k
b2N1bWVudCAhPT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuO1xu
XHRcdFx0XHR0aGlzLnB1c2goaXRlbSwgdGFnLCBudWxsLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBw
c2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Z2V0QnlDbGFzczogaWYg
KGNsYXNzZXMgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdF
QkNOKXtcblx0XHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xh
c3NMaXN0LmpvaW4oJyAnKSk7XG5cdFx0XHRcdGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxl
bmd0aCkpIGJyZWFrIGdldEJ5Q2xhc3M7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGl0ZW0gPSBjaGls
ZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBz
ZXVkb3MpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdldEJ5VGFnOiB7
XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcblx0XHRc
dGlmICghKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkpIGJyZWFrIGdldEJ5VGFnO1xuXHRc
dFx0aWYgKCF0aGlzLmJyb2tlblN0YXJHRUJUTikgdGFnID0gbnVsbDtcblx0XHRcdGZvciAoaSA9
IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnPic6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3Qg
Y2hpbGRyZW5cblx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSBkbyB7XG5cdFx0XHRp
ZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3Nlcywg
YXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJs
aW5nKSk7XG5cdH0sXG5cblx0JysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nXG5cdFx0d2hpbGUgKChub2RlID0g
bm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5w
dXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0
YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5cdCdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xh
c3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkXG5cdFx0bm9kZSA9IG5v
ZGUuZmlyc3RDaGlsZDtcblx0XHRpZiAobm9kZSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9
PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyk7XG5cdFx0XHRlbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnfic6IGZ1bmN0aW9u
KG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNp
YmxpbmdzXG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpe1xuXHRcdFx0aWYg
KG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRV
SUQobm9kZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0
dGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnKysn
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gbmV4dCBzaWJsaW5nIGFuZCBwcmV2aW91cyBzaWJsaW5nXG5cdFx0dGhpc1snY29tYmluYXRv
cjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0
dGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHR9LFxuXG5cdCd+fic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNz
ZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmdzIGFuZCBwcmV2aW91cyBz
aWJsaW5nc1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISc6IGZ1
bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBh
bGwgcGFyZW50IG5vZGVzIHVwIHRvIGRvY3VtZW50XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5w
YXJlbnROb2RlKSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnIT4nOiBm
dW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8g
ZGlyZWN0IHBhcmVudCAob25lIGxldmVsKVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5c
dFx0aWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnISsnOiBmdW5jdGlvbihu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMg
c2libGluZ1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5v
ZGUubm9kZVR5cGUgPT0gMSl7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3Nl
cywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0
JyFeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRv
cyl7IC8vIGxhc3QgY2hpbGRcblx0XHRub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5v
ZGUpe1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21i
aW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7
XG5cdFx0fVxuXHR9LFxuXG5cdCchfic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBwcmV2aW91cyBzaWJsaW5nc1xuXHRcdHdoaWxlICgo
bm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSl7XG5cdFx0XHRpZiAobm9kZS5ub2RlVHlwZSAh
PSAxKSBjb250aW51ZTtcblx0XHRcdHZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTtcblx0XHRc
dGlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7XG5cdFx0XHR0aGlzLmJpdFVuaXF1ZXNb
dWlkXSA9IHRydWU7XG5cdFx0XHR0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyk7XG5cdFx0fVxuXHR9XG5cbn07XG5cbmZvciAodmFyIGMgaW4gY29t
YmluYXRvcnMpIGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdO1xuXG52
YXIgcHNldWRvcyA9IHtcblxuXHQvKjxwc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0J2VtcHR5Jzog
ZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHJl
dHVybiAhKGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQg
fHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoO1xuXHR9LFxuXG5cdCdub3QnOiBmdW5j
dGlvbihub2RlLCBleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gIXRoaXMubWF0Y2hOb2RlKG5vZGUs
IGV4cHJlc3Npb24pO1xuXHR9LFxuXG5cdCdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQp
e1xuXHRcdHJldHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJyku
aW5kZXhPZih0ZXh0KSA+IC0xO1xuXHR9LFxuXG5cdCdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uKG5v
ZGUpe1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUu
bm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5c
dCdsYXN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0d2hpbGUgKChub2RlID0gbm9kZS5u
ZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRy
ZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRc
dHZhciBwcmV2ID0gbm9kZTtcblx0XHR3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGlu
ZykpIGlmIChwcmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9
IG5vZGU7XG5cdFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5v
ZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQv
KjxudGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdCdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVO
VEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksXG5cblx0J250
aC1sYXN0LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlv
dXNTaWJsaW5nJywgJ3Bvc05USExhc3QnKSxcblxuXHQnbnRoLW9mLXR5cGUnOiBsb2NhbC5jcmVh
dGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIVHlwZScsIHRy
dWUpLFxuXG5cdCdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0
Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksXG5cblx0
J2luZGV4JzogZnVuY3Rpb24obm9kZSwgaW5kZXgpe1xuXHRcdHJldHVybiB0aGlzWydwc2V1ZG86
bnRoLWNoaWxkJ10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7XG5cdH0sXG5cblx0J2V2ZW4nOiBm
dW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUs
ICcybicpO1xuXHR9LFxuXG5cdCdvZGQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gdGhp
c1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybisxJyk7XG5cdH0sXG5cblx0Lyo8L250aC1w
c2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Lyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovXG5c
blx0J2ZpcnN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgbm9kZU5hbWUgPSBu
b2RlLm5vZGVOYW1lO1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkg
aWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4g
dHJ1ZTtcblx0fSxcblxuXHQnbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFy
IG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRT
aWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0
XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQnb25seS1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7
XG5cdFx0dmFyIHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hp
bGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBu
b2RlTmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRcdHZhciBuZXh0ID0gbm9kZTtcblx0XHR3aGlsZSAo
KG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUp
IHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKjwvb2YtdHlwZS1w
c2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY3VzdG9tIHBzZXVkb3NcblxuXHQnZW5hYmxlZCc6
IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhbm9kZS5kaXNhYmxlZDtcblx0fSxcblxuXHQn
ZGlzYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5kaXNhYmxlZDtcblx0
fSxcblxuXHQnY2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLmNoZWNr
ZWQgfHwgbm9kZS5zZWxlY3RlZDtcblx0fSxcblxuXHQnZm9jdXMnOiBmdW5jdGlvbihub2RlKXtc
blx0XHRyZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQgPT09IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRy
aWJ1dGUobm9kZSwgJ3RhYmluZGV4JykpO1xuXHR9LFxuXG5cdCdyb290JzogZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpO1xuXHR9LFxuXG5cdCdzZWxlY3Rl
ZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlLnNlbGVjdGVkO1xuXHR9XG5cblx0
Lyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cbn07XG5cbmZvciAodmFyIHAgaW4gcHNldWRvcykgbG9j
YWxbJ3BzZXVkbzonICsgcF0gPSBwc2V1ZG9zW3BdO1xuXG4vLyBhdHRyaWJ1dGVzIG1ldGhvZHNc
blxudmFyIGF0dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0ge1xuXG5c
dCdmb3InOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhp
cy5odG1sRm9yIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpO1xuXHR9LFxuXG5cdCdocmVmJzog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdocmVmJyBpbiB0aGlzKSA/IHRoaXMuZ2V0QXR0cmli
dXRlKCdocmVmJywgMikgOiB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXHR9LFxuXG5cdCdz
dHlsZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUu
Y3NzVGV4dCA6IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHR9LFxuXG5cdCd0YWJpbmRl
eCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0
ZU5vZGUoJ3RhYmluZGV4Jyk7XG5cdFx0cmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0
ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDtcblx0fSxc
blxuXHQndHlwZSc6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0
eXBlJyk7XG5cdH0sXG5cblx0J21heGxlbmd0aCc6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGF0dHJp
YnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ21heExlbmd0aCcpO1xuXHRcdHJldHVy
biAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVO
b2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH1cblxufTtcblxuYXR0cmlidXRlR2V0dGVycy5NQVhM
RU5HVEggPSBhdHRyaWJ1dGVHZXR0ZXJzLm1heExlbmd0aCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4
bGVuZ3RoO1xuXG4vLyBTbGlja1xuXG52YXIgU2xpY2sgPSBsb2NhbC5TbGljayA9ICh0aGlzLlNs
aWNrIHx8IHt9KTtcblxuU2xpY2sudmVyc2lvbiA9ICcxLjEuNyc7XG5cbi8vIFNsaWNrIGZpbmRl
clxuXG5TbGljay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQp
e1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7XG59
O1xuXG5TbGljay5maW5kID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbil7XG5cdHJldHVy
biBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7XG59O1xuXG4v
LyBTbGljayBjb250YWlubWVudCBjaGVja2VyXG5cblNsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24o
Y29udGFpbmVyLCBub2RlKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQoY29udGFpbmVyKTtcblx0cmV0
dXJuIGxvY2FsLmNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSk7XG59O1xuXG4vLyBTbGljayBhdHRy
aWJ1dGUgZ2V0dGVyXG5cblNsaWNrLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUp
e1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmdldEF0dHJpYnV0
ZShub2RlLCBuYW1lKTtcbn07XG5cblNsaWNrLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUs
IG5hbWUpe1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLmhhc0F0
dHJpYnV0ZShub2RlLCBuYW1lKTtcbn07XG5cbi8vIFNsaWNrIG1hdGNoZXJcblxuU2xpY2subWF0
Y2ggPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7XG5cdGlmICghKG5vZGUgJiYgc2VsZWN0b3Ip
KSByZXR1cm4gZmFsc2U7XG5cdGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJl
dHVybiB0cnVlO1xuXHRsb2NhbC5zZXREb2N1bWVudChub2RlKTtcblx0cmV0dXJuIGxvY2FsLm1h
dGNoTm9kZShub2RlLCBzZWxlY3Rvcik7XG59O1xuXG4vLyBTbGljayBhdHRyaWJ1dGUgYWNjZXNz
b3JcblxuU2xpY2suZGVmaW5lQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSwgZm4pe1xu
XHRsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47XG5cdHJldHVybiB0aGlzO1xufTtc
blxuU2xpY2subG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7XG5cdHJldHVy
biBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdO1xufTtcblxuLy8gU2xpY2sgcHNldWRvIGFj
Y2Vzc29yXG5cblNsaWNrLmRlZmluZVBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUsIGZuKXtcblx0bG9j
YWxbJ3BzZXVkbzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7XG5cdFx0cmV0
dXJuIGZuLmNhbGwobm9kZSwgYXJndW1lbnQpO1xuXHR9O1xuXHRyZXR1cm4gdGhpcztcbn07XG5c
blNsaWNrLmxvb2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR2YXIgcHNldWRvID0gbG9j
YWxbJ3BzZXVkbzonICsgbmFtZV07XG5cdGlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1
bWVudCl7XG5cdFx0cmV0dXJuIHBzZXVkby5jYWxsKHRoaXMsIGFyZ3VtZW50KTtcblx0fTtcblx0
cmV0dXJuIG51bGw7XG59O1xuXG4vLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3JcblxuU2xpY2su
b3ZlcnJpZGUgPSBmdW5jdGlvbihyZWdleHAsIGZuKXtcblx0bG9jYWwub3ZlcnJpZGUocmVnZXhw
LCBmbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDtc
blxuU2xpY2sudWlkT2YgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIGxvY2FsLmdldFVJREhU
TUwobm9kZSk7XG59O1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxu
fSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8g
ZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEVsZW1l
bnRcblxuZGVzY3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9v
VG9vbHMuIENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9u
LCBhbmQgYW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8g
bGV0IHlvdSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJp
bmcsIEZ1bmN0aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJd
XG5cbnByb3ZpZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9y
c11cblxuLi4uXG4qL1xuXG52YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRh
ZywgcHJvcHMpe1xuXHR2YXIga29uc3RydWN0b3IgPSBFbGVtZW50LkNvbnN0cnVjdG9yc1t0YWdd
O1xuXHRpZiAoa29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7XG5cdGlmICh0
eXBlb2YgdGFnICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMp
O1xuXG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cblx0aWYgKCEoL15bXFx3LV0rJC8pLnRl
c3QodGFnKSl7XG5cdFx0dmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNb
MF1bMF07XG5cdFx0dGFnID0gKHBhcnNlZC50YWcgPT0gJyonKSA/ICdkaXYnIDogcGFyc2VkLnRh
Zztcblx0XHRpZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFy
c2VkLmlkO1xuXG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlcztcblx0XHRp
ZiAoYXR0cmlidXRlcykgZm9yICh2YXIgYXR0ciwgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0
aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRhdHRyID0gYXR0cmlidXRlc1tpXTtcblx0XHRcdGlmIChw
cm9wc1thdHRyLmtleV0gIT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdGlmIChhdHRyLnZhbHVl
ICE9IG51bGwgJiYgYXR0ci5vcGVyYXRvciA9PSAnPScpIHByb3BzW2F0dHIua2V5XSA9IGF0dHIu
dmFsdWU7XG5cdFx0XHRlbHNlIGlmICghYXR0ci52YWx1ZSAmJiAhYXR0ci5vcGVyYXRvcikgcHJv
cHNbYXR0ci5rZXldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAocGFyc2VkLmNsYXNzTGlzdCAm
JiBwcm9wc1snY2xhc3MnXSA9PSBudWxsKSBwcm9wc1snY2xhc3MnXSA9IHBhcnNlZC5jbGFzc0xp
c3Quam9pbignICcpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50Lm5ld0VsZW1lbnQodGFnLCBw
cm9wcyk7XG59O1xuXG5cbmlmIChCcm93c2VyLkVsZW1lbnQpe1xuXHRFbGVtZW50LnByb3RvdHlw
ZSA9IEJyb3dzZXIuRWxlbWVudC5wcm90b3R5cGU7XG5cdC8vIElFOCBhbmQgSUU5IHJlcXVpcmUg
dGhlIHdyYXBwaW5nLlxuXHRFbGVtZW50LnByb3RvdHlwZS5fZmlyZUV2ZW50ID0gKGZ1bmN0aW9u
KGZpcmVFdmVudCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXtcblx0XHRcdHJl
dHVybiBmaXJlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7XG5cdFx0fTtcblx0fSkoRWxl
bWVudC5wcm90b3R5cGUuZmlyZUV2ZW50KTtcbn1cblxubmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVt
ZW50KS5taXJyb3IoZnVuY3Rpb24obmFtZSl7XG5cdGlmIChBcnJheS5wcm90b3R5cGVbbmFtZV0p
IHJldHVybjtcblxuXHR2YXIgb2JqID0ge307XG5cdG9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHJlc3VsdHMgPSBbXSwgYXJncyA9IGFyZ3VtZW50cywgZWxlbWVudHMgPSB0cnVlO1xu
XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
dmFyIGVsZW1lbnQgPSB0aGlzW2ldLCByZXN1bHQgPSByZXN1bHRzW2ldID0gZWxlbWVudFtuYW1l
XS5hcHBseShlbGVtZW50LCBhcmdzKTtcblx0XHRcdGVsZW1lbnRzID0gKGVsZW1lbnRzICYmIHR5
cGVPZihyZXN1bHQpID09ICdlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdHJldHVybiAoZWxlbWVudHMp
ID8gbmV3IEVsZW1lbnRzKHJlc3VsdHMpIDogcmVzdWx0cztcblx0fTtcblxuXHRFbGVtZW50cy5p
bXBsZW1lbnQob2JqKTtcbn0pO1xuXG5pZiAoIUJyb3dzZXIuRWxlbWVudCl7XG5cdEVsZW1lbnQu
cGFyZW50ID0gT2JqZWN0O1xuXG5cdEVsZW1lbnQuUHJvdG90eXBlID0ge1xuXHRcdCckY29uc3Ry
dWN0b3InOiBFbGVtZW50LFxuXHRcdCckZmFtaWx5JzogRnVuY3Rpb24uY29udmVydCgnZWxlbWVu
dCcpLmhpZGUoKVxuXHR9O1xuXG5cdEVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhv
ZCl7XG5cdFx0RWxlbWVudC5Qcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cdH0pO1xufVxuXG5F
bGVtZW50LkNvbnN0cnVjdG9ycyA9IHt9O1xuXG5cblxudmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJ
RnJhbWUnLCBmdW5jdGlvbigpe1xuXHR2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMs
IHtcblx0XHRwcm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LFxuXHRcdGlmcmFtZTogZnVuY3Rpb24o
b2JqKXtcblx0XHRcdHJldHVybiAob2JqICE9IG51bGwpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFy
IHByb3BzID0gcGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTtcblx0aWYgKHBhcmFtcy5p
ZnJhbWUpIGlmcmFtZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZnJhbWUpO1xuXHR2YXIgb25sb2Fk
ID0gcHJvcHMub25sb2FkIHx8IGZ1bmN0aW9uKCl7fTtcblx0ZGVsZXRlIHByb3BzLm9ubG9hZDtc
blx0cHJvcHMuaWQgPSBwcm9wcy5uYW1lID0gW3Byb3BzLmlkLCBwcm9wcy5uYW1lLCBpZnJhbWUg
PyAoaWZyYW1lLmlkIHx8IGlmcmFtZS5uYW1lKSA6ICdJRnJhbWVfJyArIFN0cmluZy51bmlxdWVJ
RCgpXS5waWNrKCk7XG5cdGlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywg
cHJvcHMpO1xuXG5cdHZhciBvbkxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdG9ubG9hZC5jYWxsKGlm
cmFtZS5jb250ZW50V2luZG93KTtcblx0fTtcblxuXHRpZiAod2luZG93LmZyYW1lc1twcm9wcy5p
ZF0pIG9uTG9hZCgpO1xuXHRlbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7
XG5cdHJldHVybiBpZnJhbWU7XG59KTtcblxudmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9
IGZ1bmN0aW9uKG5vZGVzKXtcblx0aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCl7XG5cdFx0dmFy
IHVuaXF1ZXMgPSB7fSwgbm9kZTtcblx0XHRmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2kr
K107KXtcblx0XHRcdHZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTtcblx0XHRcdGlmICghdW5p
cXVlc1t1aWRdKXtcblx0XHRcdFx0dW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5w
dXNoKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuRWxlbWVudHMucHJvdG90eXBl
ID0ge2xlbmd0aDogMH07XG5FbGVtZW50cy5wYXJlbnQgPSBBcnJheTtcblxubmV3IFR5cGUoJ0Vs
ZW1lbnRzJywgRWxlbWVudHMpLmltcGxlbWVudCh7XG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmaWx0
ZXIsIGJpbmQpe1xuXHRcdGlmICghZmlsdGVyKSByZXR1cm4gdGhpcztcblx0XHRyZXR1cm4gbmV3
IEVsZW1lbnRzKEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycp
ID8gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpO1xuXHRc
dH0gOiBmaWx0ZXIsIGJpbmQpKTtcblx0fS5wcm90ZWN0KCksXG5cblx0cHVzaDogZnVuY3Rpb24o
KXtcblx0XHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwg
PSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBpdGVtID0gZG9jdW1l
bnQuaWQoYXJndW1lbnRzW2ldKTtcblx0XHRcdGlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0
ZW07XG5cdFx0fVxuXHRcdHJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpO1xuXHR9LnByb3Rl
Y3QoKSxcblxuXHR1bnNoaWZ0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBpdGVtcyA9IFtdO1xuXHRc
dGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0
XHR2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkg
aXRlbXMucHVzaChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNo
aWZ0LmFwcGx5KHRoaXMsIGl0ZW1zKTtcblx0fS5wcm90ZWN0KCksXG5cblx0Y29uY2F0OiBmdW5j
dGlvbigpe1xuXHRcdHZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTtcblx0XHRm
b3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0
dmFyIGl0ZW0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoVHlwZS5pc0VudW1lcmFibGUoaXRl
bSkpIG5ld0VsZW1lbnRzLmFwcGVuZChpdGVtKTtcblx0XHRcdGVsc2UgbmV3RWxlbWVudHMucHVz
aChpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRzO1xuXHR9LnByb3RlY3QoKSxc
blxuXHRhcHBlbmQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24pe1xuXHRcdGZvciAodmFyIGkgPSAwLCBs
ID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ld
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KCksXG5cblx0ZW1wdHk6IGZ1bmN0aW9u
KCl7XG5cdFx0d2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fS5wcm90ZWN0KClcblxufSk7XG5cblxuXG4oZnVuY3Rpb24o
KXtcblxuLy8gRkYsIElFXG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2Jq
ZWN0ID0geycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9O1xuXG5zcGxpY2UuY2FsbChvYmplY3Qs
IDEsIDEpO1xuaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScs
IGZ1bmN0aW9uKCl7XG5cdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblx0dmFyIHJlc3VsdCA9
IHNwbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR3aGlsZSAobGVuZ3RoID49IHRoaXMu
bGVuZ3RoKSBkZWxldGUgdGhpc1tsZW5ndGgtLV07XG5cdHJldHVybiByZXN1bHQ7XG59LnByb3Rl
Y3QoKSk7XG5cbkFycmF5LmZvckVhY2hNZXRob2QoZnVuY3Rpb24obWV0aG9kLCBuYW1lKXtcblx0
RWxlbWVudHMuaW1wbGVtZW50KG5hbWUsIG1ldGhvZCk7XG59KTtcblxuQXJyYXkubWlycm9yKEVs
ZW1lbnRzKTtcblxuLyo8bHRJRTg+Ki9cbnZhciBjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUw7XG50
cnkge1xuXHRjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnPGlucHV0IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7XG59IGNhdGNoIChlKXt9XG5cbnZhciBl
c2NhcGVRdW90ZXMgPSBmdW5jdGlvbihodG1sKXtcblx0cmV0dXJuICgnJyArIGh0bWwpLnJlcGxh
Y2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufTtcbi8qPC9sdElF
OD4qL1xuXG4vKjxsdElFOT4qL1xuLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0
eWxlIGVsZW1lbnRcbnZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFy
IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksXG5cdFx0ZmxhZyA9IGZhbHNl
O1xuXHR0cnkge1xuXHRcdGRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7
fSc7XG5cdFx0ZmxhZyA9ICEhZGl2LmlubmVySFRNTDtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1
cm4gZmxhZztcbn0pKCk7XG4vKjwvbHRJRTk+Ki9cblxuRG9jdW1lbnQuaW1wbGVtZW50KHtcblxu
XHRuZXdFbGVtZW50OiBmdW5jdGlvbih0YWcsIHByb3BzKXtcblx0XHRpZiAocHJvcHMpe1xuXHRc
dFx0aWYgKHByb3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9w
cy5jaGVja2VkO1xuXHRcdFx0aWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMu
dHlwZSA9PSAncmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdv
bic7XG5cdFx0XHQvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVm
b3JlIGNoYW5naW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudFxuXHRcdFx0aWYgKCFjYW5DaGFu
Z2VTdHlsZUhUTUwgJiYgdGFnID09ICdzdHlsZScpe1xuXHRcdFx0XHR2YXIgc3R5bGVFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0c3R5bGVFbGVtZW50
LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuXHRcdFx0XHRpZiAocHJvcHMudHlw
ZSkgZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkKHN0eWxlRWxlbWVu
dCkuc2V0KHByb3BzKTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOT4qL1xuXHRcdFx0Lyo8bHRJ
RTg+Ki8vLyBGaXggZm9yIHJlYWRvbmx5IG5hbWUgYW5kIHR5cGUgcHJvcGVydGllcyBpbiBJRSA8
IDhcblx0XHRcdGlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwpe1xuXHRcdFx0XHR0YWcgPSAn
PCcgKyB0YWc7XG5cdFx0XHRcdGlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPVwiJyArIGVz
Y2FwZVF1b3Rlcyhwcm9wcy5uYW1lKSArICdcIic7XG5cdFx0XHRcdGlmIChwcm9wcy50eXBlKSB0
YWcgKz0gJyB0eXBlPVwiJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICdcIic7XG5cdFx0
XHRcdHRhZyArPSAnPic7XG5cdFx0XHRcdGRlbGV0ZSBwcm9wcy5uYW1lO1xuXHRcdFx0XHRkZWxl
dGUgcHJvcHMudHlwZTtcblx0XHRcdH1cblx0XHRcdC8qPC9sdElFOD4qL1xuXHRcdH1cblx0XHRy
ZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTtcblx0fVxu
XG59KTtcblxufSkoKTtcblxuKGZ1bmN0aW9uKCl7XG5cblNsaWNrLnVpZE9mKHdpbmRvdyk7XG5T
bGljay51aWRPZihkb2N1bWVudCk7XG5cbkRvY3VtZW50LmltcGxlbWVudCh7XG5cblx0bmV3VGV4
dE5vZGU6IGZ1bmN0aW9uKHRleHQpe1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRleHROb2RlKHRl
eHQpO1xuXHR9LFxuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy53aW5k
b3c7XG5cdH0sXG5cblx0aWQ6IChmdW5jdGlvbigpe1xuXG5cdFx0dmFyIHR5cGVzID0ge1xuXG5c
dFx0XHRzdHJpbmc6IGZ1bmN0aW9uKGlkLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlkID0gU2xp
Y2suZmluZChkb2MsICcjJyArIGlkLnJlcGxhY2UoLyhcXFcpL2csICdcXFxcJDEnKSk7XG5cdFx0
XHRcdHJldHVybiAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7XG5cdFx0
XHR9LFxuXG5cdFx0XHRlbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXtcblx0XHRcdFx0U2xp
Y2sudWlkT2YoZWwpO1xuXHRcdFx0XHRpZiAoIW5vY2FzaCAmJiAhZWwuJGZhbWlseSAmJiAhKC9e
KD86b2JqZWN0fGVtYmVkKSQvaSkudGVzdChlbC50YWdOYW1lKSl7XG5cdFx0XHRcdFx0dmFyIGZp
cmVFdmVudCA9IGVsLmZpcmVFdmVudDtcblx0XHRcdFx0XHQvLyB3cmFwcGluZyBuZWVkZWQgaW4g
SUU3LCBvciBlbHNlIGNyYXNoXG5cdFx0XHRcdFx0ZWwuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uKHR5
cGUsIGV2ZW50KXtcblx0XHRcdFx0XHRcdHJldHVybiBmaXJlRXZlbnQodHlwZSwgZXZlbnQpO1xu
XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0T2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5
cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdH0sXG5cblx0XHRcdG9i
amVjdDogZnVuY3Rpb24ob2JqLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRcdGlmIChvYmoudG9FbGVt
ZW50KSByZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7XG5c
dFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0fTtcblxuXHRcdHR5cGVzLnRleHRu
b2RlID0gdHlwZXMud2hpdGVzcGFjZSA9IHR5cGVzLndpbmRvdyA9IHR5cGVzLmRvY3VtZW50ID0g
ZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9O1xuXG5cdFx0cmV0dXJu
IGZ1bmN0aW9uKGVsLCBub2Nhc2gsIGRvYyl7XG5cdFx0XHRpZiAoZWwgJiYgZWwuJGZhbWlseSAm
JiBlbC51bmlxdWVOdW1iZXIpIHJldHVybiBlbDtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKGVs
KTtcblx0XHRcdHJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwg
ZG9jIHx8IGRvY3VtZW50KSA6IG51bGw7XG5cdFx0fTtcblxuXHR9KSgpXG5cbn0pO1xuXG5pZiAo
d2luZG93LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7
XG5cdHJldHVybiBkb2N1bWVudC5pZChlbCwgbmMsIHRoaXMuZG9jdW1lbnQpO1xufSk7XG5cbldp
bmRvdy5pbXBsZW1lbnQoe1xuXG5cdGdldERvY3VtZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLmRvY3VtZW50O1xuXHR9LFxuXG5cdGdldFdpbmRvdzogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2lt
cGxlbWVudCcsIHtcblxuXHRnZXRFbGVtZW50czogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0
cmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpO1xuXHR9
LFxuXG5cdGdldEVsZW1lbnQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1
bWVudC5pZChTbGljay5maW5kKHRoaXMsIGV4cHJlc3Npb24pKTtcblx0fVxuXG59KTtcblxudmFy
IGNvbnRhaW5zID0ge2NvbnRhaW5zOiBmdW5jdGlvbihlbGVtZW50KXtcblx0cmV0dXJuIFNsaWNr
LmNvbnRhaW5zKHRoaXMsIGVsZW1lbnQpO1xufX07XG5cbmlmICghZG9jdW1lbnQuY29udGFpbnMp
IERvY3VtZW50LmltcGxlbWVudChjb250YWlucyk7XG5pZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7XG5cblxuXG4v
LyB0cmVlIHdhbGtpbmdcblxudmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNz
aW9uLCBjb21iaW5hdG9yKXtcblx0aWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjtc
blxuXHRleHByZXNzaW9uID0gT2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGV4cHJlc3Npb24pKTtc
blxuXHR2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZh
ciBpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpLS07KVxuXHRcdGV4cHJlc3Npb25zW2ldWzBdLmNv
bWJpbmF0b3IgPSBjb21iaW5hdG9yO1xuXG5cdHJldHVybiBleHByZXNzaW9uO1xufTtcblxuT2Jq
ZWN0LmZvckVhY2goe1xuXHRnZXROZXh0OiAnficsXG5cdGdldFByZXZpb3VzOiAnIX4nLFxuXHRn
ZXRQYXJlbnQ6ICchJ1xufSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXtcblx0RWxlbWVu
dC5pbXBsZW1lbnQobWV0aG9kLCBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gdGhp
cy5nZXRFbGVtZW50KGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgY29tYmluYXRvcikpO1xu
XHR9KTtcbn0pO1xuXG5PYmplY3QuZm9yRWFjaCh7XG5cdGdldEFsbE5leHQ6ICd+Jyxcblx0Z2V0
QWxsUHJldmlvdXM6ICchficsXG5cdGdldFNpYmxpbmdzOiAnfn4nLFxuXHRnZXRDaGlsZHJlbjog
Jz4nLFxuXHRnZXRQYXJlbnRzOiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7
XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0
cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHMoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21i
aW5hdG9yKSk7XG5cdH0pO1xufSk7XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRGaXJz
dDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNl
YXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpWzBdKTtcblx0fSxc
blxuXHRnZXRMYXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQu
aWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSku
Z2V0TGFzdCgpKTtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMub3duZXJEb2N1bWVudC53aW5kb3c7XG5cdH0sXG5cblx0Z2V0RG9jdW1lbnQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDtcblx0fSxcblxuXHRnZXRFbGVt
ZW50QnlJZDogZnVuY3Rpb24oaWQpe1xuXHRcdHJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5k
KHRoaXMsICcjJyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQxJykpKTtcblx0
fSxcblxuXHRtYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICFleHByZXNz
aW9uIHx8IFNsaWNrLm1hdGNoKHRoaXMsIGV4cHJlc3Npb24pO1xuXHR9XG5cbn0pO1xuXG5cblxu
aWYgKHdpbmRvdy4kJCA9PSBudWxsKSBXaW5kb3cuaW1wbGVtZW50KCckJCcsIGZ1bmN0aW9uKHNl
bGVjdG9yKXtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7XG5cdFx0aWYgKHR5cGVvZiBz
ZWxlY3RvciA9PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBz
ZWxlY3RvciwgbmV3IEVsZW1lbnRzKTtcblx0XHRlbHNlIGlmIChUeXBlLmlzRW51bWVyYWJsZShz
ZWxlY3RvcikpIHJldHVybiBuZXcgRWxlbWVudHMoc2VsZWN0b3IpO1xuXHR9XG5cdHJldHVybiBu
ZXcgRWxlbWVudHMoYXJndW1lbnRzKTtcbn0pO1xuXG4vLyBJbnNlcnRlcnNcblxudmFyIGluc2Vy
dGVycyA9IHtcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZh
ciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmlu
c2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24o
Y29udGV4dCwgZWxlbWVudCl7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtc
blx0XHRpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQubmV4
dFNpYmxpbmcpO1xuXHR9LFxuXG5cdGJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7
XG5cdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTtcblx0fSxcblxuXHR0b3A6IGZ1bmN0
aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQs
IGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdH1cblxufTtcblxuaW5zZXJ0ZXJzLmluc2lkZSA9IGlu
c2VydGVycy5ib3R0b207XG5cblxuXG4vLyBnZXRQcm9wZXJ0eSAvIHNldFByb3BlcnR5XG5cbnZh
ciBwcm9wZXJ0eUdldHRlcnMgPSB7fSwgcHJvcGVydHlTZXR0ZXJzID0ge307XG5cbi8vIHByb3Bl
cnRpZXNcblxudmFyIHByb3BlcnRpZXMgPSB7fTtcbkFycmF5LmZvckVhY2goW1xuXHQndHlwZScs
ICd2YWx1ZScsICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2Nl
bGxTcGFjaW5nJywgJ2NvbFNwYW4nLFxuXHQnZnJhbWVCb3JkZXInLCAncm93U3BhbicsICd0YWJJ
bmRleCcsICd1c2VNYXAnXG5dLCBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdHByb3BlcnRpZXNbcHJv
cGVydHkudG9Mb3dlckNhc2UoKV0gPSBwcm9wZXJ0eTtcbn0pO1xuXG5wcm9wZXJ0aWVzLmh0bWwg
PSAnaW5uZXJIVE1MJztcbnByb3BlcnRpZXMudGV4dCA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKS50ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnOiAndGV4dENvbnRlbnQn
O1xuXG5PYmplY3QuZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihyZWFsLCBrZXkpe1xuXHRw
cm9wZXJ0eVNldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHRub2RlW3Jl
YWxdID0gdmFsdWU7XG5cdH07XG5cdHByb3BlcnR5R2V0dGVyc1trZXldID0gZnVuY3Rpb24obm9k
ZSl7XG5cdFx0cmV0dXJuIG5vZGVbcmVhbF07XG5cdH07XG59KTtcblxuLyo8bHRJRTk+Ki9cbnBy
b3BlcnR5U2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKCl7XG5cdHJldHVybiBmdW5jdGlvbihub2Rl
LCB2YWx1ZSl7XG5cdFx0aWYgKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSBub2RlLnNldCgn
aHRtbCcsIHZhbHVlKTtcblx0XHRlbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlO1xu
XHR9O1xufSkocHJvcGVydHlTZXR0ZXJzLnRleHQpO1xuXG5wcm9wZXJ0eUdldHRlcnMudGV4dCA9
IChmdW5jdGlvbihnZXR0ZXIpe1xuXHRyZXR1cm4gZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJu
IChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykgPyBub2RlLmlubmVySFRNTCA6IGdldHRlcihu
b2RlKTtcblx0fTtcbn0pKHByb3BlcnR5R2V0dGVycy50ZXh0KTtcbi8qPC9sdElFOT4qL1xuXG4v
LyBCb29sZWFuc1xuXG52YXIgYm9vbHMgPSBbXG5cdCdjb21wYWN0JywgJ25vd3JhcCcsICdpc21h
cCcsICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsXG5cdCdkaXNhYmxlZCcsICdyZWFk
T25seScsICdtdWx0aXBsZScsICdzZWxlY3RlZCcsICdub3Jlc2l6ZScsXG5cdCdkZWZlcicsICdk
ZWZhdWx0Q2hlY2tlZCcsICdhdXRvZm9jdXMnLCAnY29udHJvbHMnLCAnYXV0b3BsYXknLFxuXHQn
bG9vcCdcbl07XG5cbnZhciBib29sZWFucyA9IHt9O1xuQXJyYXkuZm9yRWFjaChib29scywgZnVu
Y3Rpb24oYm9vbCl7XG5cdHZhciBsb3dlciA9IGJvb2wudG9Mb3dlckNhc2UoKTtcblx0Ym9vbGVh
bnNbbG93ZXJdID0gYm9vbDtcblx0cHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5v
ZGUsIHZhbHVlKXtcblx0XHRub2RlW2Jvb2xdID0gISF2YWx1ZTtcblx0fTtcblx0cHJvcGVydHlH
ZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAhIW5vZGVbYm9vbF07
XG5cdH07XG59KTtcblxuLy8gU3BlY2lhbCBjYXNlc1xuXG5PYmplY3QuYXBwZW5kKHByb3BlcnR5
U2V0dGVycywge1xuXG5cdCdjbGFzcyc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQoJ2Ns
YXNzTmFtZScgaW4gbm9kZSkgPyBub2RlLmNsYXNzTmFtZSA9ICh2YWx1ZSB8fCAnJykgOiBub2Rl
LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XG5cdH0sXG5cblx0J2Zvcic6IGZ1bmN0aW9u
KG5vZGUsIHZhbHVlKXtcblx0XHQoJ2h0bWxGb3InIGluIG5vZGUpID8gbm9kZS5odG1sRm9yID0g
dmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnZm9yJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdzdHls
ZSc6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXtcblx0XHQobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxl
LmNzc1RleHQgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTtcblx0
fSxcblxuXHQndmFsdWUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZS52YWx1ZSA9
ICh2YWx1ZSAhPSBudWxsKSA/IHZhbHVlIDogJyc7XG5cdH1cblxufSk7XG5cbnByb3BlcnR5R2V0
dGVyc1snY2xhc3MnXSA9IGZ1bmN0aW9uKG5vZGUpe1xuXHRyZXR1cm4gKCdjbGFzc05hbWUnIGlu
IG5vZGUpID8gbm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFz
cycpO1xufTtcblxuLyogPHdlYmtpdD4gKi9cbnZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2J1dHRvbicpO1xuLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3NcbnRy
eSB7IGVsLnR5cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fVxuaWYgKGVsLnR5cGUgIT0gJ2J1
dHRvbicpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRu
b2RlLnNldEF0dHJpYnV0ZSgndHlwZScsIHZhbHVlKTtcbn07XG5lbCA9IG51bGw7XG4vKiA8L3dl
YmtpdD4gKi9cblxuLyo8SUU+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5v
dCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1
bmN0aW9uKCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxu
XHRcdGZsYWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVz
aW5ne21hcmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0
Y2ggKGUpe31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbnZhciBpbnB1
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHZvbGF0aWxlSW5wdXRWYWx1ZSwg
aHRtbDVJbnB1dFN1cHBvcnQ7XG5cbi8vICMyMTc4XG5pbnB1dC52YWx1ZSA9ICd0JztcbmlucHV0
LnR5cGUgPSAnc3VibWl0JztcbnZvbGF0aWxlSW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlICE9ICd0
JztcblxuLy8gIzI0NDMgLSBJRSB0aHJvd3MgXCJJbnZhbGlkIEFyZ3VtZW50XCIgd2hlbiB0cnlp
bmcgdG8gdXNlIGh0bWw1IGlucHV0IHR5cGVzXG50cnkge1xuXHRpbnB1dC52YWx1ZSA9ICcnO1xu
XHRpbnB1dC50eXBlID0gJ2VtYWlsJztcblx0aHRtbDVJbnB1dFN1cHBvcnQgPSBpbnB1dC50eXBl
ID09ICdlbWFpbCc7XG59IGNhdGNoIChlKXt9XG5cbmlucHV0ID0gbnVsbDtcblxuaWYgKHZvbGF0
aWxlSW5wdXRWYWx1ZSB8fCAhaHRtbDVJbnB1dFN1cHBvcnQpIHByb3BlcnR5U2V0dGVycy50eXBl
ID0gZnVuY3Rpb24obm9kZSwgdHlwZSl7XG5cdHRyeSB7XG5cdFx0dmFyIHZhbHVlID0gbm9kZS52
YWx1ZTtcblx0XHRub2RlLnR5cGUgPSB0eXBlO1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0
fSBjYXRjaCAoZSl7fVxufTtcbi8qPC9JRT4qL1xuXG4vKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVy
dHkgKi9cblxuLyogPGx0SUU5PiAqL1xudmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0
aW9uKGRpdil7XG5cdGRpdi5yYW5kb20gPSAnYXR0cmlidXRlJztcblx0cmV0dXJuIChkaXYuZ2V0
QXR0cmlidXRlKCdyYW5kb20nKSA9PSAnYXR0cmlidXRlJyk7XG59KShkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSk7XG5cbnZhciBoYXNDbG9uZUJ1ZyA9IChmdW5jdGlvbih0ZXN0KXtcblx0
dGVzdC5pbm5lckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT1cInNob3VsZF9maXhcIiB2YWx1
ZT1cInRoZSB1bmtub3duXCIgLz48L29iamVjdD4nO1xuXHRyZXR1cm4gdGVzdC5jbG9uZU5vZGUo
dHJ1ZSkuZmlyc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxO1xufSkoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2JykpO1xuLyogPC9sdElFOT4gKi9cblxudmFyIGhhc0NsYXNzTGlzdCA9
ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuY2xhc3NMaXN0O1xuXG52YXIgY2xhc3Nl
cyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdHZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8
fCAnJykuY2xlYW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307XG5cdHJldHVybiBjbGFzc05h
bWVzLmZpbHRlcihmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGlmIChjbGFzc05hbWUgIT09ICcn
ICYmICF1bmlxdWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFz
c05hbWU7XG5cdH0pO1xufTtcblxudmFyIGFkZFRvQ2xhc3NMaXN0ID0gZnVuY3Rpb24obmFtZSl7
XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChuYW1lKTtcbn07XG5cbnZhciByZW1vdmVGcm9tQ2xhc3NM
aXN0ID0gZnVuY3Rpb24obmFtZSl7XG5cdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbn07
XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRzZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwg
dmFsdWUpe1xuXHRcdHZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2Fz
ZSgpXTtcblx0XHRpZiAoc2V0dGVyKXtcblx0XHRcdHNldHRlcih0aGlzLCB2YWx1ZSk7XG5cdFx0
fSBlbHNlIHtcblx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdHZhciBhdHRyaWJ1dGVXaGl0ZUxp
c3Q7XG5cdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRlTGlzdCA9
IHRoaXMucmV0cmlldmUoJyRhdHRyaWJ1dGVXaGl0ZUxpc3QnLCB7fSk7XG5cdFx0XHQvKiA8L2x0
SUU5PiAqL1xuXG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCl7XG5cdFx0XHRcdHRoaXMucmVtb3Zl
QXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlmIChwb2xs
dXRlc0dldEF0dHJpYnV0ZSkgZGVsZXRlIGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXTtcblx0XHRc
dFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmli
dXRlKG5hbWUsICcnICsgdmFsdWUpO1xuXHRcdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHRcdGlm
IChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdID0gdHJ1ZTtc
blx0XHRcdFx0LyogPC9sdElFOT4gKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0c2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7XG5cdFx0Zm9y
ICh2YXIgYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRl
LCBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdl
dFByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgZ2V0dGVyID0gcHJvcGVydHlHZXR0
ZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKGdldHRlcikgcmV0dXJuIGdldHRlcih0
aGlzKTtcblx0XHQvKiA8bHRJRTk+ICovXG5cdFx0aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKXtc
blx0XHRcdHZhciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLCBhdHRyaWJ1dGVX
aGl0ZUxpc3QgPSB0aGlzLnJldHJpZXZlKCckYXR0cmlidXRlV2hpdGVMaXN0Jywge30pO1xuXHRc
dFx0aWYgKCFhdHRyKSByZXR1cm4gbnVsbDtcblx0XHRcdGlmIChhdHRyLmV4cGFuZG8gJiYgIWF0
dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSl7XG5cdFx0XHRcdHZhciBvdXRlciA9IHRoaXMub3V0ZXJI
VE1MO1xuXHRcdFx0XHQvLyBzZWdtZW50IGJ5IHRoZSBvcGVuaW5nIHRhZyBhbmQgZmluZCBtZW50
aW9uIG9mIGF0dHJpYnV0ZSBuYW1lXG5cdFx0XHRcdGlmIChvdXRlci5zdWJzdHIoMCwgb3V0ZXIu
c2VhcmNoKC9cXC8/WydcIl0/Pig/IVtePF0qPFsnXCJdKS8pKS5pbmRleE9mKG5hbWUpIDwgMCkg
cmV0dXJuIG51bGw7XG5cdFx0XHRcdGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSA9IHRydWU7XG5c
dFx0XHR9XG5cdFx0fVxuXHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0dmFyIHJlc3VsdCA9IFNsaWNr
LmdldEF0dHJpYnV0ZSh0aGlzLCBuYW1lKTtcblx0XHRyZXR1cm4gKCFyZXN1bHQgJiYgIVNsaWNr
Lmhhc0F0dHJpYnV0ZSh0aGlzLCBuYW1lKSkgPyBudWxsIDogcmVzdWx0O1xuXHR9LFxuXG5cdGdl
dFByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFy
Z3VtZW50cyk7XG5cdFx0cmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFz
c29jaWF0ZShhcmdzKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7
XG5cdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7XG5cdH0sXG5cblx0cmVt
b3ZlUHJvcGVydGllczogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhp
cy5yZW1vdmVQcm9wZXJ0eSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0c2V0
OiBmdW5jdGlvbihwcm9wLCB2YWx1ZSl7XG5cdFx0dmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9w
ZXJ0aWVzW3Byb3BdO1xuXHRcdChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHku
c2V0LmNhbGwodGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG5c
dH0ub3ZlcmxvYWRTZXR0ZXIoKSxcblxuXHRnZXQ6IGZ1bmN0aW9uKHByb3Ape1xuXHRcdHZhciBw
cm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0XHRyZXR1cm4gKHByb3BlcnR5
ICYmIHByb3BlcnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFBy
b3BlcnR5KHByb3ApO1xuXHR9Lm92ZXJsb2FkR2V0dGVyKCksXG5cblx0ZXJhc2U6IGZ1bmN0aW9u
KHByb3Ape1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTtcblx0
XHQocHJvcGVydHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhp
cykgOiB0aGlzLnJlbW92ZVByb3BlcnR5KHByb3ApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdGhhc0NsYXNzOiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdHJl
dHVybiB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuXHR9IDogZnVuY3Rpb24o
Y2xhc3NOYW1lKXtcblx0XHRyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMo
Y2xhc3NOYW1lKTtcblx0fSxcblxuXHRhZGRDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24o
Y2xhc3NOYW1lKXtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFjaChhZGRUb0NsYXNzTGlz
dCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gOiBmdW5jdGlvbihjbGFzc05hbWUpe1xu
XHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNz
TmFtZSkuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNz
OiBoYXNDbGFzc0xpc3QgPyBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHRcdGNsYXNzZXMoY2xhc3NO
YW1lKS5mb3JFYWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHR2YXIgY2xhc3NOYW1lcyA9IGNsYXNz
ZXModGhpcy5jbGFzc05hbWUpO1xuXHRcdGNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGNsYXNz
TmFtZXMuZXJhc2UsIGNsYXNzTmFtZXMpO1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1l
cy5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1
bmN0aW9uKGNsYXNzTmFtZSwgZm9yY2Upe1xuXHRcdGlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9
ICF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSk7XG5cdFx0cmV0dXJuIChmb3JjZSkgPyB0aGlzLmFk
ZENsYXNzKGNsYXNzTmFtZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG5cdH0sXG5c
blx0YWRvcHQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBl
bGVtZW50cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVu
Z3RoO1xuXHRcdGlmIChsZW5ndGggPiAxKSBwYXJlbnQgPSBmcmFnbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspe1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50c1tpXSwgdHJ1
ZSk7XG5cdFx0XHRpZiAoZWxlbWVudCkgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRc
dH1cblxuXHRcdGlmIChmcmFnbWVudCkgdGhpcy5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVy
ZSl7XG5cdFx0cmV0dXJuIHRoaXMuZ3JhYih0aGlzLmdldERvY3VtZW50KCkubmV3VGV4dE5vZGUo
dGV4dCksIHdoZXJlKTtcblx0fSxcblxuXHRncmFiOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRc
dGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlz
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRpbmplY3Q6IGZ1bmN0aW9uKGVsLCB3aGVy
ZSl7XG5cdFx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChl
bCwgdHJ1ZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlcGxhY2VzOiBmdW5jdGlv
bihlbCl7XG5cdFx0ZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7XG5cdFx0ZWwucGFyZW50Tm9k
ZS5yZXBsYWNlQ2hpbGQodGhpcywgZWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdy
YXBzOiBmdW5jdGlvbihlbCwgd2hlcmUpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUp
O1xuXHRcdHJldHVybiB0aGlzLnJlcGxhY2VzKGVsKS5ncmFiKGVsLCB3aGVyZSk7XG5cdH0sXG5c
blx0Z2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4OyAvLyBT
YWZhcmkgMy4yLjFcblx0XHRyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmNvbnZlcnQodGhpcy5v
cHRpb25zKS5maWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtcblx0XHRcdHJldHVybiBvcHRpb24uc2Vs
ZWN0ZWQ7XG5cdFx0fSkpO1xuXHR9LFxuXG5cdHRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7XG5c
dFx0dmFyIHF1ZXJ5U3RyaW5nID0gW107XG5cdFx0dGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNl
bGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXtcblx0XHRcdHZhciB0eXBlID0gZWwu
dHlwZTtcblx0XHRcdGlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJt
aXQnIHx8IHR5cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFn
ZScpIHJldHVybjtcblxuXHRcdFx0dmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVj
dCcpID8gZWwuZ2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXtcblx0XHRcdFx0Ly8gSUVc
blx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpO1xuXHRcdFx0fSkg
OiAoKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2Vk
KSA/IG51bGwgOiBlbC5nZXQoJ3ZhbHVlJyk7XG5cblx0XHRcdEFycmF5LmNvbnZlcnQodmFsdWUp
LmVhY2goZnVuY3Rpb24odmFsKXtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5l
ZCcpIHF1ZXJ5U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsg
ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJu
IHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcblx0fVxuXG59KTtcblxuXG4vLyBhcHBlbmRIVE1MXG5c
bnZhciBhcHBlbmRJbnNlcnRlcnMgPSB7XG5cdGJlZm9yZTogJ2JlZm9yZUJlZ2luJyxcblx0YWZ0
ZXI6ICdhZnRlckVuZCcsXG5cdGJvdHRvbTogJ2JlZm9yZUVuZCcsXG5cdHRvcDogJ2FmdGVyQmVn
aW4nLFxuXHRpbnNpZGU6ICdiZWZvcmVFbmQnXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCgnYXBw
ZW5kSFRNTCcsICgnaW5zZXJ0QWRqYWNlbnRIVE1MJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKSkgPyBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHRoaXMuaW5zZXJ0QWRqYWNlbnRI
VE1MKGFwcGVuZEluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10sIGh0bWwpO1xuXHRyZXR1cm4g
dGhpcztcbn0gOiBmdW5jdGlvbihodG1sLCB3aGVyZSl7XG5cdHZhciB0ZW1wID0gbmV3IEVsZW1l
bnQoJ2RpdicsIHtodG1sOiBodG1sfSksXG5cdFx0Y2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMs
XG5cdFx0ZnJhZ21lbnQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG5cblx0aWYgKCFmcmFnbWVudCkgcmV0
dXJuIHRoaXM7XG5cdGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKXtcblx0XHRmcmFnbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9
IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGls
ZChjaGlsZHJlbltpXSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0
b20nXShmcmFnbWVudCwgdGhpcyk7XG5cdHJldHVybiB0aGlzO1xufSk7XG5cbnZhciBjb2xsZWN0
ZWQgPSB7fSwgc3RvcmFnZSA9IHt9O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXtcblx0cmV0
dXJuIChzdG9yYWdlW3VpZF0gfHwgKHN0b3JhZ2VbdWlkXSA9IHt9KSk7XG59O1xuXG52YXIgY2xl
YW4gPSBmdW5jdGlvbihpdGVtKXtcblx0dmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyO1xuXHRp
ZiAoaXRlbS5yZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7XG5cdGlmIChpdGVtLmNs
ZWFyQXR0cmlidXRlcykgaXRlbS5jbGVhckF0dHJpYnV0ZXMoKTtcblx0aWYgKHVpZCAhPSBudWxs
KXtcblx0XHRkZWxldGUgY29sbGVjdGVkW3VpZF07XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbdWlkXTtc
blx0fVxuXHRyZXR1cm4gaXRlbTtcbn07XG5cbnZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVj
a2VkJywgb3B0aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpe1xuXHRcdHZhciBjaGlsZHJlbiA9
IGNsZWFuKHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0QXJyYXkuZWFjaChj
aGlsZHJlbiwgY2xlYW4pO1xuXHRcdEVsZW1lbnQuZGlzcG9zZSh0aGlzKTtcblx0XHRyZXR1cm4g
bnVsbDtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHRBcnJheS5jb252ZXJ0KHRo
aXMuY2hpbGROb2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLnBhcmVudE5v
ZGUpID8gdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpIDogdGhpcztcblx0fSxcblxu
XHRjbG9uZTogZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7XG5cdFx0Y29udGVudHMgPSBjb250
ZW50cyAhPT0gZmFsc2U7XG5cdFx0dmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoY29udGVudHMp
LCBjZSA9IFtjbG9uZV0sIHRlID0gW3RoaXNdLCBpO1xuXG5cdFx0aWYgKGNvbnRlbnRzKXtcblx0
XHRcdGNlLmFwcGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcq
JykpKTtcblx0XHRcdHRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKSkpO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IGNlLmxlbmd0aDsgaS0tOyl7XG5c
dFx0XHR2YXIgbm9kZSA9IGNlW2ldLCBlbGVtZW50ID0gdGVbaV07XG5cdFx0XHRpZiAoIWtlZXBp
ZCkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG5cdFx0XHQvKjxsdElFOT4qL1xuXHRcdFx0
aWYgKG5vZGUuY2xlYXJBdHRyaWJ1dGVzKXtcblx0XHRcdFx0bm9kZS5jbGVhckF0dHJpYnV0ZXMo
KTtcblx0XHRcdFx0bm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7XG5cdFx0XHRcdG5vZGUu
cmVtb3ZlQXR0cmlidXRlKCd1bmlxdWVOdW1iZXInKTtcblx0XHRcdFx0aWYgKG5vZGUub3B0aW9u
cyl7XG5cdFx0XHRcdFx0dmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9u
cztcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3Rl
ZCA9IGVvW2pdLnNlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+
Ki9cblx0XHRcdHZhciBwcm9wID0gZm9ybVByb3BzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpXTtcblx0XHRcdGlmIChwcm9wICYmIGVsZW1lbnRbcHJvcF0pIG5vZGVbcHJvcF0gPSBlbGVt
ZW50W3Byb3BdO1xuXHRcdH1cblxuXHRcdC8qPGx0SUU5PiovXG5cdFx0aWYgKGhhc0Nsb25lQnVn
KXtcblx0XHRcdHZhciBjbyA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKSwg
dG8gPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKTtcblx0XHRcdGZvciAoaSA9
IGNvLmxlbmd0aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MO1xuXHRc
dH1cblx0XHQvKjwvbHRJRTk+Ki9cblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpO1xuXHR9
XG5cbn0pO1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQn
LCB7XG5cblx0YWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHRpZiAod2luZG93
LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdFx0XHRjb2xsZWN0
ZWRbU2xpY2sudWlkT2YodGhpcyldID0gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuYWRkRXZl
bnRMaXN0ZW5lcikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1sy
XSk7XG5cdFx0ZWxzZSB0aGlzLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXtc
blx0XHRpZiAodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVu
ZXIodHlwZSwgZm4sICEhYXJndW1lbnRzWzJdKTtcblx0XHRlbHNlIHRoaXMuZGV0YWNoRXZlbnQo
J29uJyArIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXRyaWV2ZTog
ZnVuY3Rpb24ocHJvcGVydHksIGRmbHQpe1xuXHRcdHZhciBzdG9yYWdlID0gZ2V0KFNsaWNrLnVp
ZE9mKHRoaXMpKSwgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldO1xuXHRcdGlmIChkZmx0ICE9IG51
bGwgJiYgcHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0O1xuXHRc
dHJldHVybiBwcm9wICE9IG51bGwgPyBwcm9wIDogbnVsbDtcblx0fSxcblxuXHRzdG9yZTogZnVu
Y3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRP
Zih0aGlzKSk7XG5cdFx0c3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRlbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHR2YXIgc3Rv
cmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7XG5cdFx0ZGVsZXRlIHN0b3JhZ2VbcHJvcGVy
dHldO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG4vKjxsdElFOT4qL1xuaWYgKHdp
bmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHR2YXIgZ2Mg
PSBmdW5jdGlvbigpe1xuXHRcdE9iamVjdC5lYWNoKGNvbGxlY3RlZCwgY2xlYW4pO1xuXHRcdGlm
ICh3aW5kb3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7XG5cdFx0d2luZG93LnJl
bW92ZUxpc3RlbmVyKCd1bmxvYWQnLCBnYyk7XG5cdH07XG5cdHdpbmRvdy5hZGRMaXN0ZW5lcign
dW5sb2FkJywgZ2MpO1xufVxuLyo8L2x0SUU5PiovXG5cbkVsZW1lbnQuUHJvcGVydGllcyA9IHt9
O1xuXG5cblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlID0ge1xuXG5cdHNldDogZnVuY3Rpb24o
c3R5bGUpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9IHN0eWxlO1xuXHR9LFxuXG5cdGdldDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O1xuXHR9LFxuXG5cdGVy
YXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnO1xuXHR9XG5cbn07
XG5cbkVsZW1lbnQuUHJvcGVydGllcy50YWcgPSB7XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRc
dHJldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblx0fVxuXG59O1xuXG5FbGVtZW50
LlByb3BlcnRpZXMuaHRtbCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKGh0bWwpe1xuXHRcdGlmICho
dG1sID09IG51bGwpIGh0bWwgPSAnJztcblx0XHRlbHNlIGlmICh0eXBlT2YoaHRtbCkgPT0gJ2Fy
cmF5JykgaHRtbCA9IGh0bWwuam9pbignJyk7XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmICh0
aGlzLnN0eWxlU2hlZXQgJiYgIWNhbkNoYW5nZVN0eWxlSFRNTCkgdGhpcy5zdHlsZVNoZWV0LmNz
c1RleHQgPSBodG1sO1xuXHRcdGVsc2UgLyo8L2x0SUU5PiovdGhpcy5pbm5lckhUTUwgPSBodG1s
O1xuXHR9LFxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnNldCgnaHRtbCcsICcnKTtc
blx0fVxuXG59O1xuXG52YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNU
YWJsZUlubmVySFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlO1xuXG4vKjxs
dElFOT4qL1xuLy8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNv
bS9pbm5lcnNoaXYvXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52
YXIgZnJhZ21lbnQ7XG5kaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JztcbnN1cHBvcnRzSFRN
TDVFbGVtZW50cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7XG5pZiAoIXN1cHBvcnRz
SFRNTDVFbGVtZW50cyl7XG5cdHZhciB0YWdzID0gJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBj
YW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhn
cm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUg
dmlkZW8nLnNwbGl0KCcgJyk7XG5cdGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpLCBsID0gdGFncy5sZW5ndGg7XG5cdHdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0
ZUVsZW1lbnQodGFnc1tsXSk7XG59XG5kaXYgPSBudWxsO1xuLyo8L2x0SUU5PiovXG5cbi8qPElF
PiovXG5zdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigp
e1xuXHR2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHR0YWJs
ZS5pbm5lckhUTUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+Jztcblx0cmV0dXJuIHRydWU7XG59KTtc
blxuLyo8bHRGRjQ+Ki9cbnZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0
bWwgPSAnPHRkPjwvdGQ+JztcbnRyLmlubmVySFRNTCA9IGh0bWw7XG5zdXBwb3J0c1RSSW5uZXJI
VE1MID0gKHRyLmlubmVySFRNTCA9PSBodG1sKTtcbnRyID0gbnVsbDtcbi8qPC9sdEZGND4qL1xu
XG5pZiAoIXN1cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwg
IXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7XG5cblx0RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0
ID0gKGZ1bmN0aW9uKHNldCl7XG5cblx0XHR2YXIgdHJhbnNsYXRpb25zID0ge1xuXHRcdFx0dGFi
bGU6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddLFxuXHRcdFx0c2VsZWN0OiBbMSwgJzxzZWxl
Y3Q+JywgJzwvc2VsZWN0PiddLFxuXHRcdFx0dGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAn
PC90Ym9keT48L3RhYmxlPiddLFxuXHRcdFx0dHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+Jywg
JzwvdHI+PC90Ym9keT48L3RhYmxlPiddXG5cdFx0fTtcblxuXHRcdHRyYW5zbGF0aW9ucy50aGVh
ZCA9IHRyYW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTtcblxuXHRcdHJldHVy
biBmdW5jdGlvbihodG1sKXtcblxuXHRcdFx0Lyo8bHRJRTk+Ki9cblx0XHRcdGlmICh0aGlzLnN0
eWxlU2hlZXQpIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblx0XHRcdC8qPC9sdElFOT4q
L1xuXHRcdFx0dmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTtcblx0XHRc
dGlmICghd3JhcCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107
XG5cdFx0XHRpZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTtcblxuXHRcdFx0
dmFyIGxldmVsID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpLCB0YXJnZXQgPSB3cmFwcGVyO1xuXHRcdFx0aWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMp
IGZyYWdtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuXHRcdFx0d3JhcHBlci5pbm5lckhUTUwg
PSBbd3JhcFsxXSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpO1xuXHRcdFx0d2hp
bGUgKGxldmVsLS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkO1xuXHRcdFx0dGhpcy5lbXB0
eSgpLmFkb3B0KHRhcmdldC5jaGlsZE5vZGVzKTtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVs
ZW1lbnRzKSBmcmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIgPSBu
dWxsO1xuXHRcdH07XG5cblx0fSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTtcbn1cbi8q
PC9JRT4qL1xuXG4vKjxsdElFOT4qL1xudmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZm9ybScpO1xudGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9v
cHRpb24+PC9zZWxlY3Q+JztcblxuaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3Mn
KSBFbGVtZW50LlByb3BlcnRpZXMudmFsdWUgPSB7XG5cblx0c2V0OiBmdW5jdGlvbih2YWx1ZSl7
XG5cdFx0dmFyIHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTtcblx0XHRpZiAodGFnICE9ICdzZWxlY3Qn
KSByZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eSgndmFsdWUnLCB2YWx1ZSk7XG5cdFx0dmFyIG9wdGlv
bnMgPSB0aGlzLmdldEVsZW1lbnRzKCdvcHRpb24nKTtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1
ZSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKXtcblx0XHRc
dHZhciBvcHRpb24gPSBvcHRpb25zW2ldLFxuXHRcdFx0XHRhdHRyID0gb3B0aW9uLmdldEF0dHJp
YnV0ZU5vZGUoJ3ZhbHVlJyksXG5cdFx0XHRcdG9wdGlvblZhbHVlID0gKGF0dHIgJiYgYXR0ci5z
cGVjaWZpZWQpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHRcdFx0aWYg
KG9wdGlvblZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5c
dFx0fVxuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgb3B0aW9uID0gdGhpcywg
dGFnID0gb3B0aW9uLmdldCgndGFnJyk7XG5cblx0XHRpZiAodGFnICE9ICdzZWxlY3QnICYmIHRh
ZyAhPSAnb3B0aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG5cblx0XHRp
ZiAodGFnID09ICdzZWxlY3QnICYmICEob3B0aW9uID0gb3B0aW9uLmdldFNlbGVjdGVkKClbMF0p
KSByZXR1cm4gJyc7XG5cblx0XHR2YXIgYXR0ciA9IG9wdGlvbi5nZXRBdHRyaWJ1dGVOb2RlKCd2
YWx1ZScpO1xuXHRcdHJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFs
dWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7XG5cdH1cblxufTtcbnRlc3RGb3JtID0gbnVsbDtcbi8q
PC9sdElFOT4qL1xuXG4vKjxJRT4qL1xuaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
LmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykpIEVsZW1lbnQuUHJvcGVydGllcy5pZCA9IHtcblx0c2V0
OiBmdW5jdGlvbihpZCl7XG5cdFx0dGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQn
KS52YWx1ZSA9IGlkO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMu
aWQgfHwgbnVsbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5pZCA9IHRo
aXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnO1xuXHR9XG59O1xuLyo8L0lFPiov
XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRXZlbnRcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIHRoZSBFdmVudCBUeXBlLCB0byBtYWtlIHRoZSBldmVudCBvYmplY3QgY3Jvc3MtYnJvd3Nl
ci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbV2luZG93LCBE
b2N1bWVudCwgQXJyYXksIEZ1bmN0aW9uLCBTdHJpbmcsIE9iamVjdF1cblxucHJvdmlkZXM6IEV2
ZW50XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBfa2V5cyA9IHt9O1xudmFyIG5v
cm1hbGl6ZVdoZWVsU3BlZWQgPSBmdW5jdGlvbihldmVudCl7XG5cdHZhciBub3JtYWxpemVkO1xu
XHRpZiAoZXZlbnQud2hlZWxEZWx0YSl7XG5cdFx0bm9ybWFsaXplZCA9IGV2ZW50LndoZWVsRGVs
dGEgJSAxMjAgPT0gMCA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiBldmVudC53aGVlbERlbHRh
IC8gMTI7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHJhd0Ftb3VudCA9IGV2ZW50LmRlbHRhWSB8fCBl
dmVudC5kZXRhaWwgfHwgMDtcblx0XHRub3JtYWxpemVkID0gLShyYXdBbW91bnQgJSAzID09IDAg
PyByYXdBbW91bnQgLyAzIDogcmF3QW1vdW50ICogMTApO1xuXHR9XG5cdHJldHVybiBub3JtYWxp
emVkO1xufTtcblxudmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01F
dmVudCcsIGZ1bmN0aW9uKGV2ZW50LCB3aW4pe1xuXHRpZiAoIXdpbikgd2luID0gd2luZG93O1xu
XHRldmVudCA9IGV2ZW50IHx8IHdpbi5ldmVudDtcblx0aWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0
dXJuIGV2ZW50O1xuXHR0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdHRoaXMuJGV4dGVuZGVkID0gdHJ1
ZTtcblx0dGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuXHR0aGlzLmNvbnRyb2wgPSBldmVu
dC5jdHJsS2V5O1xuXHR0aGlzLmFsdCA9IGV2ZW50LmFsdEtleTtcblx0dGhpcy5tZXRhID0gZXZl
bnQubWV0YUtleTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGUgPSBldmVudC50eXBlO1xuXHR2YXIg
dGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cdHdoaWxlICh0YXJn
ZXQgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xu
XHR0aGlzLnRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCk7XG5cblx0aWYgKHR5cGUuaW5kZXhP
Zigna2V5JykgPT0gMCl7XG5cdFx0dmFyIGNvZGUgPSB0aGlzLmNvZGUgPSAoZXZlbnQud2hpY2gg
fHwgZXZlbnQua2V5Q29kZSk7XG5cdFx0aWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXBy
ZXNzJykgdGhpcy5rZXkgPSBfa2V5c1tjb2RlXTtcblx0XHRpZiAodHlwZSA9PSAna2V5ZG93bicg
fHwgdHlwZSA9PSAna2V5dXAnKXtcblx0XHRcdGlmIChjb2RlID4gMTExICYmIGNvZGUgPCAxMjQp
IHRoaXMua2V5ID0gJ2YnICsgKGNvZGUgLSAxMTEpO1xuXHRcdFx0ZWxzZSBpZiAoY29kZSA+IDk1
ICYmIGNvZGUgPCAxMDYpIHRoaXMua2V5ID0gY29kZSAtIDk2O1xuXHRcdH1cblx0XHRpZiAodGhp
cy5rZXkgPT0gbnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93
ZXJDYXNlKCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2RibGNs
aWNrJyB8fCB0eXBlID09ICdjb250ZXh0bWVudScgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUg
PT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCB0eXBlLmluZGV4T2YoJ21vdXNlJykgPT0gMCl7XG5cdFx0
dmFyIGRvYyA9IHdpbi5kb2N1bWVudDtcblx0XHRkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRv
Yy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5O1xuXHRc
dHRoaXMucGFnZSA9IHtcblx0XHRcdHg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBh
Z2VYIDogZXZlbnQuY2xpZW50WCArIGRvYy5zY3JvbGxMZWZ0LFxuXHRcdFx0eTogKGV2ZW50LnBh
Z2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgZG9jLnNjcm9sbFRv
cFxuXHRcdH07XG5cdFx0dGhpcy5jbGllbnQgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0g
bnVsbCkgPyBldmVudC5wYWdlWCAtIHdpbi5wYWdlWE9mZnNldCA6IGV2ZW50LmNsaWVudFgsXG5c
dFx0XHR5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSAtIHdpbi5wYWdlWU9m
ZnNldCA6IGV2ZW50LmNsaWVudFlcblx0XHR9O1xuXHRcdGlmICh0eXBlID09ICdET01Nb3VzZVNj
cm9sbCcgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndo
ZWVsID0gbm9ybWFsaXplV2hlZWxTcGVlZChldmVudCk7XG5cdFx0dGhpcy5yaWdodENsaWNrID0g
KGV2ZW50LndoaWNoID09IDMgfHwgZXZlbnQuYnV0dG9uID09IDIpO1xuXHRcdGlmICh0eXBlID09
ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlb3V0JyB8fCB0eXBlID09ICdtb3VzZWVudGVy
JyB8fCB0eXBlID09ICdtb3VzZWxlYXZlJyl7XG5cdFx0XHR2YXIgb3ZlclRhcmdldCA9IHR5cGUg
PT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VlbnRlcic7XG5cdFx0XHR2YXIgcmVsYXRl
ZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKG92ZXJUYXJnZXQgPyAnZnJvbScgOiAn
dG8nKSArICdFbGVtZW50J107XG5cdFx0XHR3aGlsZSAocmVsYXRlZCAmJiByZWxhdGVkLm5vZGVU
eXBlID09IDMpIHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHR0aGlzLnJlbGF0
ZWRUYXJnZXQgPSBkb2N1bWVudC5pZChyZWxhdGVkKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHlw
ZS5pbmRleE9mKCd0b3VjaCcpID09IDAgfHwgdHlwZS5pbmRleE9mKCdnZXN0dXJlJykgPT0gMCl7
XG5cdFx0dGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGUgPSBl
dmVudC5zY2FsZTtcblx0XHR0aGlzLnRhcmdldFRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVz
O1xuXHRcdHRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcblx0XHR2
YXIgdG91Y2hlcyA9IHRoaXMudG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNo
ZXMgJiYgdG91Y2hlc1swXSl7XG5cdFx0XHR2YXIgdG91Y2ggPSB0b3VjaGVzWzBdO1xuXHRcdFx0
dGhpcy5wYWdlID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07XG5cdFx0XHR0aGlz
LmNsaWVudCA9IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcblx0XHR9XG5c
dH1cblxuXHRpZiAoIXRoaXMuY2xpZW50KSB0aGlzLmNsaWVudCA9IHt9O1xuXHRpZiAoIXRoaXMu
cGFnZSkgdGhpcy5wYWdlID0ge307XG59KTtcblxuRE9NRXZlbnQuaW1wbGVtZW50KHtcblxuXHRz
dG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFBy
b3BhZ2F0aW9uKCk7XG5cdH0sXG5cblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe1xuXHRc
dGlmICh0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRp
b24oKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXtcblx0XHRpZiAo
dGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xu
XHRcdGVsc2UgdGhpcy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG5ET01FdmVudC5kZWZpbmVLZXkgPSBmdW5jdGlvbihjb2RlLCBrZXkp
e1xuXHRfa2V5c1tjb2RlXSA9IGtleTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5ET01FdmVudC5k
ZWZpbmVLZXlzID0gRE9NRXZlbnQuZGVmaW5lS2V5Lm92ZXJsb2FkU2V0dGVyKHRydWUpO1xuXG5E
T01FdmVudC5kZWZpbmVLZXlzKHtcblx0JzM4JzogJ3VwJywgJzQwJzogJ2Rvd24nLCAnMzcnOiAn
bGVmdCcsICczOSc6ICdyaWdodCcsXG5cdCcyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6
ICdiYWNrc3BhY2UnLCAnOSc6ICd0YWInLFxuXHQnNDYnOiAnZGVsZXRlJywgJzEzJzogJ2VudGVy
J1xufSk7XG5cbn0pKCk7XG5cblxuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkV2ZW50
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBFbGVtZW50IG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0
aCBldmVudHMuIFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVh
dmUgY3VzdG9tIEVsZW1lbnQgRXZlbnRzLCBpZiBuZWNlc3NhcnkuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIEV2ZW50XVxuXG5wcm92aWRlczog
RWxlbWVudC5FdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG5FbGVtZW50LlByb3Bl
cnRpZXMuZXZlbnRzID0ge3NldDogZnVuY3Rpb24oZXZlbnRzKXtcblx0dGhpcy5hZGRFdmVudHMo
ZXZlbnRzKTtcbn19O1xuXG5bRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBs
ZW1lbnQnLCB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZl
bnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJywge30pO1xuXHRcdGlmICghZXZlbnRzW3R5cGVd
KSBldmVudHNbdHlwZV0gPSB7a2V5czogW10sIHZhbHVlczogW119O1xuXHRcdGlmIChldmVudHNb
dHlwZV0ua2V5cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzO1xuXHRcdGV2ZW50c1t0eXBlXS5r
ZXlzLnB1c2goZm4pO1xuXHRcdHZhciByZWFsVHlwZSA9IHR5cGUsXG5cdFx0XHRjdXN0b20gPSBF
bGVtZW50LkV2ZW50c1t0eXBlXSxcblx0XHRcdGNvbmRpdGlvbiA9IGZuLFxuXHRcdFx0c2VsZiA9
IHRoaXM7XG5cdFx0aWYgKGN1c3RvbSl7XG5cdFx0XHRpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20u
b25BZGQuY2FsbCh0aGlzLCBmbiwgdHlwZSk7XG5cdFx0XHRpZiAoY3VzdG9tLmNvbmRpdGlvbil7
XG5cdFx0XHRcdGNvbmRpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdFx0XHRpZiAoY3Vz
dG9tLmNvbmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhp
cywgZXZlbnQpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxu
XHRcdFx0aWYgKGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9t
LmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHZhciBkZWZuID0gZnVuY3Rpb24o
KXtcblx0XHRcdHJldHVybiBmbi5jYWxsKHNlbGYpO1xuXHRcdH07XG5cdFx0dmFyIG5hdGl2ZUV2
ZW50ID0gRWxlbWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdO1xuXHRcdGlmIChuYXRpdmVFdmVu
dCl7XG5cdFx0XHRpZiAobmF0aXZlRXZlbnQgPT0gMil7XG5cdFx0XHRcdGRlZm4gPSBmdW5jdGlv
bihldmVudCl7XG5cdFx0XHRcdFx0ZXZlbnQgPSBuZXcgRE9NRXZlbnQoZXZlbnQsIHNlbGYuZ2V0
V2luZG93KCkpO1xuXHRcdFx0XHRcdGlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09
IGZhbHNlKSBldmVudC5zdG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFk
ZExpc3RlbmVyKHJlYWxUeXBlLCBkZWZuLCBhcmd1bWVudHNbMl0pO1xuXHRcdH1cblx0XHRldmVu
dHNbdHlwZV0udmFsdWVzLnB1c2goZGVmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0
cmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5y
ZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0
dXJuIHRoaXM7XG5cdFx0dmFyIGxpc3QgPSBldmVudHNbdHlwZV07XG5cdFx0dmFyIGluZGV4ID0g
bGlzdC5rZXlzLmluZGV4T2YoZm4pO1xuXHRcdGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHRoaXM7
XG5cdFx0dmFyIHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0Lmtl
eXNbaW5kZXhdO1xuXHRcdGRlbGV0ZSBsaXN0LnZhbHVlc1tpbmRleF07XG5cdFx0dmFyIGN1c3Rv
bSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1
c3RvbS5vblJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRc
dFx0aWYgKGN1c3RvbS5iYXNlKSB0eXBlID0gRnVuY3Rpb24uY29udmVydChjdXN0b20uYmFzZSku
Y2FsbCh0aGlzLCB0eXBlKTtcblx0XHR9XG5cdFx0cmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50
c1t0eXBlXSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0p
IDogdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdFx0Zm9y
ICh2YXIgZXZlbnQgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KGV2ZW50LCBldmVudHNbZXZlbnRd
KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVFdmVudHM6IGZ1bmN0aW9uKGV2
ZW50cyl7XG5cdFx0dmFyIHR5cGU7XG5cdFx0aWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3Qn
KXtcblx0XHRcdGZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZl
bnRzW3R5cGVdKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR2YXIgYXR0YWNoZWQg
PSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhp
cztcblx0XHRpZiAoIWV2ZW50cyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gYXR0YWNoZWQpIHRoaXMu
cmVtb3ZlRXZlbnRzKHR5cGUpO1xuXHRcdFx0dGhpcy5lbGltaW5hdGUoJ2V2ZW50cycpO1xuXHRc
dH0gZWxzZSBpZiAoYXR0YWNoZWRbZXZlbnRzXSl7XG5cdFx0XHRhdHRhY2hlZFtldmVudHNdLmtl
eXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnQoZXZlbnRzLCBm
bik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHRcdGRlbGV0ZSBhdHRhY2hlZFtldmVudHNdO1xuXHRc
dH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUs
IGFyZ3MsIGRlbGF5KXtcblx0XHR2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7
XG5cdFx0aWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdFx0YXJn
cyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cblx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1
bmN0aW9uKGZuKXtcblx0XHRcdGlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3Mp
O1xuXHRcdFx0ZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9LCB0aGlzKTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZUV2ZW50czogZnVuY3Rpb24oZnJvbSwgdHlwZSl7
XG5cdFx0ZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pO1xuXHRcdHZhciBldmVudHMgPSBmcm9tLnJl
dHJpZXZlKCdldmVudHMnKTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7XG5cdFx0aWYg
KCF0eXBlKXtcblx0XHRcdGZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVF
dmVudHMoZnJvbSwgZXZlbnRUeXBlKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSl7XG5c
dFx0XHRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtcblx0XHRcdFx0dGhpcy5h
ZGRFdmVudCh0eXBlLCBmbik7XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRo
aXM7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuTmF0aXZlRXZlbnRzID0ge1xuXHRjbGljazogMiwg
ZGJsY2xpY2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8v
bW91c2UgYnV0dG9uc1xuXHR3aGVlbDogMiwgbW91c2V3aGVlbDogMiwgRE9NTW91c2VTY3JvbGw6
IDIsIC8vbW91c2Ugd2hlZWxcblx0bW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3Zl
OiAyLCBzZWxlY3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50XG5cdGtl
eWRvd246IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZFxuXHRvcmllbnRhdGlv
bmNoYW5nZTogMiwgLy8gbW9iaWxlXG5cdHRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91
Y2hlbmQ6IDIsIHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaFxuXHRnZXN0dXJlc3RhcnQ6IDIsIGdl
c3R1cmVjaGFuZ2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmVcblx0Zm9jdXM6IDIsIGJs
dXI6IDIsIGNoYW5nZTogMiwgcmVzZXQ6IDIsIHNlbGVjdDogMiwgc3VibWl0OiAyLCBwYXN0ZTog
MiwgaW5wdXQ6IDIsIC8vZm9ybSBlbGVtZW50c1xuXHRsb2FkOiAyLCB1bmxvYWQ6IDEsIGJlZm9y
ZXVubG9hZDogMiwgcmVzaXplOiAxLCBtb3ZlOiAxLCBET01Db250ZW50TG9hZGVkOiAxLCByZWFk
eXN0YXRlY2hhbmdlOiAxLCAvL3dpbmRvd1xuXHRoYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwg
cGFnZXNob3c6IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5XG5cdGVycm9yOiAxLCBhYm9ydDog
MSwgc2Nyb2xsOiAxLCBtZXNzYWdlOiAyIC8vbWlzY1xufTtcblxuRWxlbWVudC5FdmVudHMgPSB7
XG5cdG1vdXNld2hlZWw6IHtcblx0XHRiYXNlOiAnb253aGVlbCcgaW4gZG9jdW1lbnQgPyAnd2hl
ZWwnIDogJ29ubW91c2V3aGVlbCcgaW4gZG9jdW1lbnQgPyAnbW91c2V3aGVlbCcgOiAnRE9NTW91
c2VTY3JvbGwnXG5cdH1cbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0dmFy
IHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuXHRpZiAocmVsYXRlZCA9PSBudWxsKSBy
ZXR1cm4gdHJ1ZTtcblx0aWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAocmVs
YXRlZCAhPSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAh
PSAnZG9jdW1lbnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTtcbn07XG5cbmlmICgnb25t
b3VzZWVudGVyJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe1xuXHRFbGVtZW50Lk5hdGl2
ZUV2ZW50cy5tb3VzZWVudGVyID0gRWxlbWVudC5OYXRpdmVFdmVudHMubW91c2VsZWF2ZSA9IDI7
XG5cdEVsZW1lbnQuTW91c2VlbnRlckNoZWNrID0gY2hlY2s7XG59IGVsc2Uge1xuXHRFbGVtZW50
LkV2ZW50cy5tb3VzZWVudGVyID0ge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXInLFxuXHRcdGNvbmRp
dGlvbjogY2hlY2tcblx0fTtcblxuXHRFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0ge1xuXHRc
dGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBjaGVja1xuXHR9O1xufVxuXG4vKjxs
dElFOT4qL1xuaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdEVsZW1lbnQuTmF0aXZl
RXZlbnRzLnByb3BlcnR5Y2hhbmdlID0gMjtcblx0RWxlbWVudC5FdmVudHMuY2hhbmdlID0ge1xu
XHRcdGJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0XHRc
dHJldHVybiAodGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8
fCB0eXBlID09ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJztcblx0
XHR9LFxuXHRcdGNvbmRpdGlvbjogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0cmV0dXJuIGV2ZW50
LnR5cGUgIT0gJ3Byb3BlcnR5Y2hhbmdlJyB8fCBldmVudC5ldmVudC5wcm9wZXJ0eU5hbWUgPT0g
J2NoZWNrZWQnO1xuXHRcdH1cblx0fTtcbn1cbi8qPC9sdElFOT4qL1xuXG5cblxufSkoKTtcblxu
Lypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRlbGVnYXRpb25cblxuZGVzY3JpcHRpb246IEV4dGVu
ZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIHRoZSBkZWxlZ2F0ZSBtZXRo
b2QgZm9yIG1vcmUgZWZmaWNpZW50IGV2ZW50IG1hbmFnZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1z
dHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQuRXZlbnRdXG5cbnByb3ZpZGVzOiBb
RWxlbWVudC5EZWxlZ2F0aW9uXVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZXZl
bnRMaXN0ZW5lclN1cHBvcnQgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyO1xuXG5FbGVtZW50
Lk5hdGl2ZUV2ZW50cy5mb2N1c2luID0gRWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNvdXQgPSAy
O1xuXG52YXIgYnViYmxlVXAgPSBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJn
ZXQpe1xuXHR3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSBzZWxmKXtcblx0XHRpZiAobWF0Y2go
dGFyZ2V0LCBldmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7XG5c
dFx0dGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpO1xuXHR9XG59O1xuXG52
YXIgbWFwID0ge1xuXHRtb3VzZWVudGVyOiB7XG5cdFx0YmFzZTogJ21vdXNlb3ZlcicsXG5cdFx0
Y29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVja1xuXHR9LFxuXHRtb3VzZWxlYXZlOiB7
XG5cdFx0YmFzZTogJ21vdXNlb3V0Jyxcblx0XHRjb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRl
ckNoZWNrXG5cdH0sXG5cdGZvY3VzOiB7XG5cdFx0YmFzZTogJ2ZvY3VzJyArIChldmVudExpc3Rl
bmVyU3VwcG9ydCA/ICcnIDogJ2luJyksXG5cdFx0Y2FwdHVyZTogdHJ1ZVxuXHR9LFxuXHRibHVy
OiB7XG5cdFx0YmFzZTogZXZlbnRMaXN0ZW5lclN1cHBvcnQgPyAnYmx1cicgOiAnZm9jdXNvdXQn
LFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fVxufTtcblxuLyo8bHRJRTk+Ki9cbnZhciBfa2V5ID0g
JyRkZWxlZ2F0aW9uOic7XG52YXIgZm9ybU9ic2VydmVyID0gZnVuY3Rpb24odHlwZSl7XG5cblx0
cmV0dXJuIHtcblxuXHRcdGJhc2U6ICdmb2N1c2luJyxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24o
c2VsZiwgdWlkKXtcblx0XHRcdHZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSAr
ICdsaXN0ZW5lcnMnLCB7fSlbdWlkXTtcblx0XHRcdGlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZv
ciAodmFyIGkgPSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7XG5cdFx0XHRcdC8vIHRoZSBmb3Jt
IG1heSBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyBpdCB3b24ndCBoYXZlIHRoZVxuXHRcdFx0XHQv
LyByZW1vdmVFdmVudCBtZXRob2QgYW55bW9yZS4gSW4gdGhhdCBjYXNlIHRoZSBldmVudCB3YXNc
blx0XHRcdFx0Ly8gcmVtb3ZlZCBhcyB3ZWxsLlxuXHRcdFx0XHRpZiAobGlzdC5mb3Jtc1tpXS5y
ZW1vdmVFdmVudCkgbGlzdC5mb3Jtc1tpXS5yZW1vdmVFdmVudCh0eXBlLCBsaXN0LmZuc1tpXSk7
XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZu
LCBldmVudCwgdGFyZ2V0LCB1aWQpe1xuXHRcdFx0dmFyIGZvcm0gPSAodGFyZ2V0LmdldCgndGFn
JykgPT0gJ2Zvcm0nKSA/IHRhcmdldCA6IGV2ZW50LnRhcmdldC5nZXRQYXJlbnQoJ2Zvcm0nKTtc
blx0XHRcdGlmICghZm9ybSkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgbGlzdGVuZXJzID0gc2VsZi5y
ZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSksXG5cdFx0XHRcdGxpc3RlbmVy
ID0gbGlzdGVuZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sXG5cdFx0XHRcdGZvcm1z
ID0gbGlzdGVuZXIuZm9ybXMsIGZucyA9IGxpc3RlbmVyLmZucztcblxuXHRcdFx0aWYgKGZvcm1z
LmluZGV4T2YoZm9ybSkgIT0gLTEpIHJldHVybjtcblx0XHRcdGZvcm1zLnB1c2goZm9ybSk7XG5c
blx0XHRcdHZhciBfZm4gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYs
IG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9ybS5hZGRFdmVu
dCh0eXBlLCBfZm4pO1xuXHRcdFx0Zm5zLnB1c2goX2ZuKTtcblxuXHRcdFx0bGlzdGVuZXJzW3Vp
ZF0gPSBsaXN0ZW5lcjtcblx0XHRcdHNlbGYuc3RvcmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJz
JywgbGlzdGVuZXJzKTtcblx0XHR9XG5cdH07XG59O1xuXG52YXIgaW5wdXRPYnNlcnZlciA9IGZ1
bmN0aW9uKHR5cGUpe1xuXHRyZXR1cm4ge1xuXHRcdGJhc2U6ICdmb2N1c2luJyxcblx0XHRsaXN0
ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7XG5cdFx0XHR2YXIg
ZXZlbnRzID0ge2JsdXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRzKGV2
ZW50cyk7XG5cdFx0XHR9fTtcblx0XHRcdGV2ZW50c1t0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KXtc
blx0XHRcdFx0YnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtcblx0XHRc
dH07XG5cdFx0XHRldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7XG5cdFx0fVxuXHR9O1xu
fTtcblxuaWYgKCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHtcblx0
c3VibWl0OiBmb3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLFxuXHRyZXNldDogZm9ybU9ic2VydmVyKCdy
ZXNldCcpLFxuXHRjaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLFxuXHRzZWxlY3Q6IGlu
cHV0T2JzZXJ2ZXIoJ3NlbGVjdCcpXG59KTtcbi8qPC9sdElFOT4qL1xuXG52YXIgcHJvdG8gPSBF
bGVtZW50LnByb3RvdHlwZSxcblx0YWRkRXZlbnQgPSBwcm90by5hZGRFdmVudCxcblx0cmVtb3Zl
RXZlbnQgPSBwcm90by5yZW1vdmVFdmVudDtcblxudmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBt
ZXRob2Qpe1xuXHRyZXR1cm4gZnVuY3Rpb24odHlwZSwgZm4sIHVzZUNhcHR1cmUpe1xuXHRcdGlm
ICh0eXBlLmluZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlw
ZSwgZm4sIHVzZUNhcHR1cmUpO1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0eXBlKS5l
eHByZXNzaW9uc1swXVswXTtcblx0XHRpZiAocGFyc2VkLnBzZXVkb3NbMF0ua2V5ICE9ICdyZWxh
eScpIHJldHVybiBvbGQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgdXNlQ2FwdHVyZSk7XG5cdFx0dmFy
IG5ld1R5cGUgPSBwYXJzZWQudGFnO1xuXHRcdHBhcnNlZC5wc2V1ZG9zLnNsaWNlKDEpLmVhY2go
ZnVuY3Rpb24ocHNldWRvKXtcblx0XHRcdG5ld1R5cGUgKz0gJzonICsgcHNldWRvLmtleSArIChw
c2V1ZG8udmFsdWUgPyAnKCcgKyBwc2V1ZG8udmFsdWUgKyAnKScgOiAnJyk7XG5cdFx0fSk7XG5c
dFx0b2xkLmNhbGwodGhpcywgdHlwZSwgZm4pO1xuXHRcdHJldHVybiBtZXRob2QuY2FsbCh0aGlz
LCBuZXdUeXBlLCBwYXJzZWQucHNldWRvc1swXS52YWx1ZSwgZm4pO1xuXHR9O1xufTtcblxudmFy
IGRlbGVnYXRpb24gPSB7XG5cblx0YWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIG1hdGNoLCBmbil7
XG5cdFx0dmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9y
ZWQgPSBzdG9yYWdlW3R5cGVdO1xuXHRcdGlmIChzdG9yZWQpIGZvciAodmFyIF91aWQgaW4gc3Rv
cmVkKXtcblx0XHRcdGlmIChzdG9yZWRbX3VpZF0uZm4gPT0gZm4gJiYgc3RvcmVkW191aWRdLm1h
dGNoID09IG1hdGNoKSByZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3R5cGUgPSB0eXBl
LCBfbWF0Y2ggPSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307XG5cdFx0
dHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTtcblxuXHRcdG1hdGNoID0gZnVuY3Rpb24odGFyZ2V0
KXtcblx0XHRcdHJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIF9tYXRjaCk7XG5cdFx0fTtcblxu
XHRcdHZhciBlbGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tfdHlwZV07XG5cdFx0aWYgKF9t
YXAuY29uZGl0aW9uIHx8IGVsZW1lbnRFdmVudCAmJiBlbGVtZW50RXZlbnQuY29uZGl0aW9uKXtc
blx0XHRcdHZhciBfX21hdGNoID0gbWF0Y2gsIGNvbmRpdGlvbiA9IF9tYXAuY29uZGl0aW9uIHx8
IGVsZW1lbnRFdmVudC5jb25kaXRpb247XG5cdFx0XHRtYXRjaCA9IGZ1bmN0aW9uKHRhcmdldCwg
ZXZlbnQpe1xuXHRcdFx0XHRyZXR1cm4gX19tYXRjaCh0YXJnZXQsIGV2ZW50KSAmJiBjb25kaXRp
b24uY2FsbCh0YXJnZXQsIGV2ZW50LCB0eXBlKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFy
IHNlbGYgPSB0aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTtcblx0XHR2YXIgZGVsZWdhdG9y
ID0gX21hcC5saXN0ZW4gPyBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFy
Z2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRc
dFx0aWYgKHRhcmdldCkgX21hcC5saXN0ZW4oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0
LCB1aWQpO1xuXHRcdH0gOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXtcblx0XHRcdGlmICghdGFy
Z2V0ICYmIGV2ZW50ICYmIGV2ZW50LnRhcmdldCkgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRc
dFx0aWYgKHRhcmdldCkgYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTtc
blx0XHR9O1xuXG5cdFx0aWYgKCFzdG9yZWQpIHN0b3JlZCA9IHt9O1xuXHRcdHN0b3JlZFt1aWRd
ID0ge1xuXHRcdFx0bWF0Y2g6IF9tYXRjaCxcblx0XHRcdGZuOiBfZm4sXG5cdFx0XHRkZWxlZ2F0
b3I6IGRlbGVnYXRvclxuXHRcdH07XG5cdFx0c3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7XG5cdFx0
cmV0dXJuIGFkZEV2ZW50LmNhbGwodGhpcywgdHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUp
O1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQp
e1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9KSwgc3Rv
cmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIHRoaXM7XG5cblx0
XHRpZiAoX3VpZCl7XG5cdFx0XHR2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRb
X3VpZF0uZGVsZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9O1xuXHRcdFx0dHlwZSA9IF9t
YXAuYmFzZSB8fCBfdHlwZTtcblx0XHRcdGlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhp
cywgX3VpZCk7XG5cdFx0XHRkZWxldGUgc3RvcmVkW191aWRdO1xuXHRcdFx0c3RvcmFnZVtfdHlw
ZV0gPSBzdG9yZWQ7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBk
ZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7XG5cdFx0fVxuXG5cdFx0dmFyIF9fdWlkLCBzO1xuXHRc
dGlmIChmbikgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtfX3VpZF07
XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdh
dGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpO1xuXHRc
dH0gZWxzZSBmb3IgKF9fdWlkIGluIHN0b3JlZCl7XG5cdFx0XHRzID0gc3RvcmVkW19fdWlkXTtc
blx0XHRcdGlmIChzLm1hdGNoID09IG1hdGNoKSBkZWxlZ2F0aW9uLnJlbW92ZUV2ZW50LmNhbGwo
dGhpcywgdHlwZSwgbWF0Y2gsIHMuZm4sIF9fdWlkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH1cblxufTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVt
ZW50Jywge1xuXHRhZGRFdmVudDogcmVsYXkoYWRkRXZlbnQsIGRlbGVnYXRpb24uYWRkRXZlbnQp
LFxuXHRyZW1vdmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZl
bnQpXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LlN0eWxlXG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHls
ZXMgb2YgRWxlbWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogRWxlbWVudFxuXG5wcm92aWRlczogRWxlbWVudC5TdHls
ZVxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWws
IGVsO1xuXG4vLzxsdElFOT5cbi8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVt
b3ZlIHN0eWxlcyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGxcbmVsID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7XG5lbC5zdHlsZS5jb2xvciA9ICdyZWQnO1xuZWwuc3R5bGUuY29sb3Ig
PSBudWxsO1xudmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVk
JztcblxuLy8gY2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5k
IHN0eWxlcyBpbiB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Yg
d2lkdGgtc3R5bGUtY29sb3IpXG52YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJztcbmVs
LnN0eWxlLmJvcmRlciA9IGJvcmRlcjtcbnZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9
IGVsLnN0eWxlLmJvcmRlciAhPSBib3JkZXI7XG5lbCA9IG51bGw7XG4vLzwvbHRJRTk+XG5cbnZh
ciBoYXNHZXRDb21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxcblx0c3Vw
cG9ydEJvcmRlclJhZGl1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLmJv
cmRlclJhZGl1cyAhPSBudWxsO1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc3R5bGVzID0ge3NldDog
ZnVuY3Rpb24oc3R5bGVzKXtcblx0dGhpcy5zZXRTdHlsZXMoc3R5bGVzKTtcbn19O1xuXG52YXIg
aGFzT3BhY2l0eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCksXG5cdGhhc0ZpbHRlciA9
IChodG1sLnN0eWxlLmZpbHRlciAhPSBudWxsKSxcblx0cmVBbHBoYSA9IC9hbHBoYVxcKG9wYWNp
dHk9KFtcXGQuXSspXFwpL2k7XG5cbnZhciBzZXRWaXNpYmlsaXR5ID0gZnVuY3Rpb24oZWxlbWVu
dCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3RvcmUoJyRvcGFjaXR5Jywgb3BhY2l0eSk7XG5cdGVs
ZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/
ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufTtcblxuLy88bHRJRTk+XG52YXIgc2V0RmlsdGVyID0g
ZnVuY3Rpb24oZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQu
c3R5bGUsXG5cdFx0ZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRT
dHlsZSgnZmlsdGVyJykgfHwgJyc7XG5cdHN0eWxlLmZpbHRlciA9IChyZWdleHAudGVzdChmaWx0
ZXIpID8gZmlsdGVyLnJlcGxhY2UocmVnZXhwLCB2YWx1ZSkgOiBmaWx0ZXIgKyAnICcgKyB2YWx1
ZSkudHJpbSgpO1xuXHRpZiAoIXN0eWxlLmZpbHRlcikgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdm
aWx0ZXInKTtcbn07XG4vLzwvbHRJRTk+XG5cbnZhciBzZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkg
PyBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXtcblx0ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0g
b3BhY2l0eTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5c
dGlmICghZWxlbWVudC5jdXJyZW50U3R5bGUgfHwgIWVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xh
eW91dCkgZWxlbWVudC5zdHlsZS56b29tID0gMTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCB8fCBv
cGFjaXR5ID09IDEpe1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnJyk7XG5cdFx0
aWYgKG9wYWNpdHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihl
bGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7XG5cdH0gZWxzZSB7XG5cdFx0
c2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAq
IDEwMCkubGltaXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTtcblx0fVxufSA6IHNldFZpc2liaWxp
dHkpKTtcblxudmFyIGdldE9wYWNpdHkgPSAoaGFzT3BhY2l0eSA/IGZ1bmN0aW9uKGVsZW1lbnQp
e1xuXHR2YXIgb3BhY2l0eSA9IGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBlbGVtZW50LmdldENv
bXB1dGVkU3R5bGUoJ29wYWNpdHknKTtcblx0cmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBv
cGFjaXR5LnRvRmxvYXQoKTtcbn0gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7XG5c
dHZhciBmaWx0ZXIgPSAoZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRl
ZFN0eWxlKCdmaWx0ZXInKSksXG5cdFx0b3BhY2l0eTtcblx0aWYgKGZpbHRlcikgb3BhY2l0eSA9
IGZpbHRlci5tYXRjaChyZUFscGhhKTtcblx0cmV0dXJuIChvcGFjaXR5ID09IG51bGwgfHwgZmls
dGVyID09IG51bGwpID8gMSA6IChvcGFjaXR5WzFdIC8gMTAwKTtcbn0gOiBmdW5jdGlvbihlbGVt
ZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpO1xuXHRp
ZiAob3BhY2l0eSA9PSBudWxsKSBvcGFjaXR5ID0gKGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9
PSAnaGlkZGVuJyA/IDAgOiAxKTtcblx0cmV0dXJuIG9wYWNpdHk7XG59KSk7XG5cbnZhciBmbG9h
dE5hbWUgPSAoaHRtbC5zdHlsZS5jc3NGbG9hdCA9PSBudWxsKSA/ICdzdHlsZUZsb2F0JyA6ICdj
c3NGbG9hdCcsXG5cdG5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2Vu
dGVyOiAnNTAlJywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LFxuXHRoYXNCYWNrZ3Jv
dW5kUG9zaXRpb25YWSA9IChodG1sLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvblggIT0gbnVsbCks
XG5cdHByZWZpeFBhdHRlcm4gPSAvXi0obXMpLS87XG5cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlv
bihwcm9wZXJ0eSl7XG5cdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICck
MS0nKS5jYW1lbENhc2UoKTtcbn07XG5cbi8vPGx0SUU5PlxudmFyIHJlbW92ZVN0eWxlID0gZnVu
Y3Rpb24oc3R5bGUsIHByb3BlcnR5KXtcblx0aWYgKHByb3BlcnR5ID09ICdiYWNrZ3JvdW5kUG9z
aXRpb24nKXtcblx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpO1xuXHRc
dHByb3BlcnR5ICs9ICdZJztcblx0fVxuXHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkp
O1xufTtcbi8vPC9sdElFOT5cblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGdldENvbXB1dGVk
U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXtcblx0XHRpZiAoIWhhc0dldENvbXB1dGVkU3R5bGUg
JiYgdGhpcy5jdXJyZW50U3R5bGUpIHJldHVybiB0aGlzLmN1cnJlbnRTdHlsZVtjYW1lbENhc2Uo
cHJvcGVydHkpXTtcblx0XHR2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRo
aXMpLmRlZmF1bHRWaWV3LFxuXHRcdFx0Y29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRW
aWV3LmdldENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsO1xuXHRcdHJldHVybiAoY29t
cHV0ZWQpID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgocHJvcGVydHkgPT0gZmxvYXROYW1l
KSA/ICdmbG9hdCcgOiBwcm9wZXJ0eS5oeXBoZW5hdGUoKSkgOiAnJztcblx0fSxcblxuXHRzZXRT
dHlsZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29w
YWNpdHknKXtcblx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFs
dWUpO1xuXHRcdFx0c2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztc
blx0XHR9XG5cdFx0cHJvcGVydHkgPSBjYW1lbENhc2UocHJvcGVydHkgPT0gJ2Zsb2F0JyA/IGZs
b2F0TmFtZSA6IHByb3BlcnR5KTtcblx0XHRpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7
XG5cdFx0XHR2YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0
KCcgJyk7XG5cdFx0XHR2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2
YWwsIGkpe1xuXHRcdFx0XHRpZiAoIW1hcFtpXSkgcmV0dXJuICcnO1xuXHRcdFx0XHRyZXR1cm4g
KHR5cGVPZih2YWwpID09ICdudW1iZXInKSA/IG1hcFtpXS5yZXBsYWNlKCdAJywgTWF0aC5yb3Vu
ZCh2YWwpKSA6IHZhbDtcblx0XHRcdH0pLmpvaW4oJyAnKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVl
ID09IFN0cmluZyhOdW1iZXIodmFsdWUpKSl7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQodmFs
dWUpO1xuXHRcdH1cblx0XHR0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuXHRcdC8vPGx0
SUU5PlxuXHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJl
bW92ZVN0eWxlcyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7XG5cdFx0XHRyZW1vdmVT
dHlsZSh0aGlzLnN0eWxlLCBwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdC8vPC9sdElFOT5cblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRTdHlsZTogZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRc
dGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIHJldHVybiBnZXRPcGFjaXR5KHRoaXMpO1xuXHRc
dHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBw
cm9wZXJ0eSk7XG5cdFx0aWYgKHN1cHBvcnRCb3JkZXJSYWRpdXMgJiYgcHJvcGVydHkuaW5kZXhP
ZignYm9yZGVyUmFkaXVzJykgIT0gLTEpe1xuXHRcdFx0cmV0dXJuIFsnYm9yZGVyVG9wTGVmdFJh
ZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycs
ICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJ10ubWFwKGZ1bmN0aW9uKGNvcm5lcil7XG5cdFx0XHRc
dHJldHVybiB0aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7XG5cdFx0XHR9LCB0aGlzKS5qb2lu
KCcgJyk7XG5cdFx0fVxuXHRcdHZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTtcblx0
XHRpZiAoIXJlc3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7XG5cdFx0XHRpZiAoRWxlbWVu
dC5TaG9ydFN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpe1xuXHRcdFx0XHRyZXN1bHQg
PSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgcyBpbiBFbGVtZW50LlNob3J0U3R5bGVzW3Byb3BlcnR5
XSkgcmVzdWx0LnB1c2godGhpcy5nZXRTdHlsZShzKSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQu
am9pbignICcpO1xuXHRcdFx0fVxuXHRcdFx0cmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxl
KHByb3BlcnR5KTtcblx0XHR9XG5cdFx0aWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZICYmIC9e
YmFja2dyb3VuZFBvc2l0aW9uW1hZXT8kLy50ZXN0KHByb3BlcnR5KSl7XG5cdFx0XHRyZXR1cm4g
cmVzdWx0LnJlcGxhY2UoLyh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpL2csIGZ1bmN0aW9uKHBvc2l0
aW9uKXtcblx0XHRcdFx0cmV0dXJuIG5hbWVkUG9zaXRpb25zW3Bvc2l0aW9uXTtcblx0XHRcdH0p
IHx8ICcwcHgnO1xuXHRcdH1cblx0XHRpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dy
b3VuZFBvc2l0aW9uJykgcmV0dXJuICcwcHggMHB4Jztcblx0XHRpZiAocmVzdWx0KXtcblx0XHRc
dHJlc3VsdCA9IFN0cmluZyhyZXN1bHQpO1xuXHRcdFx0dmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNo
KC9yZ2JhP1xcKFtcXGRcXHMsXStcXCkvKTtcblx0XHRcdGlmIChjb2xvcikgcmVzdWx0ID0gcmVz
dWx0LnJlcGxhY2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpO1xuXHRcdH1cblx0XHRp
ZiAoIWhhc0dldENvbXB1dGVkU3R5bGUgJiYgIXRoaXMuc3R5bGVbcHJvcGVydHldKXtcblx0XHRc
dGlmICgoL14oaGVpZ2h0fHdpZHRoKSQvKS50ZXN0KHByb3BlcnR5KSAmJiAhKC9weCQvLnRlc3Qo
cmVzdWx0KSkpe1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8g
WydsZWZ0JywgJ3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7XG5cdFx0XHRc
dHZhbHVlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0XHRzaXplICs9IHRoaXMuZ2V0
U3R5bGUoJ2JvcmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5
bGUoJ3BhZGRpbmctJyArIHZhbHVlKS50b0ludCgpO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRc
dFx0cmV0dXJuIHRoaXNbJ29mZnNldCcgKyBwcm9wZXJ0eS5jYXBpdGFsaXplKCldIC0gc2l6ZSAr
ICdweCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRk
aW5nLykudGVzdChwcm9wZXJ0eSkgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSl7XG5cdFx0
XHRcdHJldHVybiAnMHB4Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly88bHRJRTk+XG5cdFx0aWYg
KHJldHVybnNCb3JkZXJzSW5Xcm9uZ09yZGVyICYmIC9eYm9yZGVyKFRvcHxSaWdodHxCb3R0b218
TGVmdCk/JC8udGVzdChwcm9wZXJ0eSkgJiYgL14jLy50ZXN0KHJlc3VsdCkpe1xuXHRcdFx0cmV0
dXJuIHJlc3VsdC5yZXBsYWNlKC9eKC4rKVxccyguKylcXHMoLispJC8sICckMiAkMyAkMScpO1xu
XHRcdH1cblx0XHQvLzwvbHRJRTk+XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHNl
dFN0eWxlczogZnVuY3Rpb24oc3R5bGVzKXtcblx0XHRmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMp
IHRoaXMuc2V0U3R5bGUoc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9LFxuXG5cdGdldFN0eWxlczogZnVuY3Rpb24oKXtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5c
dFx0QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHRcdHJl
c3VsdFtrZXldID0gdGhpcy5nZXRTdHlsZShrZXkpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVy
biByZXN1bHQ7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQuU3R5bGVzID0ge1xuXHRsZWZ0OiAnQHB4
JywgdG9wOiAnQHB4JywgYm90dG9tOiAnQHB4JywgcmlnaHQ6ICdAcHgnLFxuXHR3aWR0aDogJ0Bw
eCcsIGhlaWdodDogJ0BweCcsIG1heFdpZHRoOiAnQHB4JywgbWF4SGVpZ2h0OiAnQHB4JywgbWlu
V2lkdGg6ICdAcHgnLCBtaW5IZWlnaHQ6ICdAcHgnLFxuXHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2Io
QCwgQCwgQCknLCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0Bw
eCBAcHgnLCBjb2xvcjogJ3JnYihALCBALCBAKScsXG5cdGZvbnRTaXplOiAnQHB4JywgbGV0dGVy
U3BhY2luZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBw
eCBAcHgpJyxcblx0bWFyZ2luOiAnQHB4IEBweCBAcHggQHB4JywgcGFkZGluZzogJ0BweCBAcHgg
QHB4IEBweCcsIGJvcmRlcjogJ0BweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkg
QHB4IEAgcmdiKEAsIEAsIEApJyxcblx0Ym9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBi
b3JkZXJTdHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwg
QCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKScsXG5cdHpJbmRleDogJ0AnLCAnem9vbSc6
ICdAJywgZm9udFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnLCBi
b3JkZXJSYWRpdXM6ICdAcHggQHB4IEBweCBAcHgnXG59O1xuXG5cblxuXG5cbkVsZW1lbnQuU2hv
cnRTdHlsZXMgPSB7bWFyZ2luOiB7fSwgcGFkZGluZzoge30sIGJvcmRlcjoge30sIGJvcmRlcldp
ZHRoOiB7fSwgYm9yZGVyU3R5bGU6IHt9LCBib3JkZXJDb2xvcjoge319O1xuXG5bJ1RvcCcsICdS
aWdodCcsICdCb3R0b20nLCAnTGVmdCddLmVhY2goZnVuY3Rpb24oZGlyZWN0aW9uKXtcblx0dmFy
IFNob3J0ID0gRWxlbWVudC5TaG9ydFN0eWxlcztcblx0dmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVz
O1xuXHRbJ21hcmdpbicsICdwYWRkaW5nJ10uZWFjaChmdW5jdGlvbihzdHlsZSl7XG5cdFx0dmFy
IHNkID0gc3R5bGUgKyBkaXJlY3Rpb247XG5cdFx0U2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0g
PSAnQHB4Jztcblx0fSk7XG5cdHZhciBiZCA9ICdib3JkZXInICsgZGlyZWN0aW9uO1xuXHRTaG9y
dC5ib3JkZXJbYmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknO1xuXHR2YXIgYmR3
ID0gYmQgKyAnV2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJztc
blx0U2hvcnRbYmRdID0ge307XG5cdFNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1b
YmR3XSA9IEFsbFtiZHddID0gJ0BweCc7XG5cdFNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9y
dFtiZF1bYmRzXSA9IEFsbFtiZHNdID0gJ0AnO1xuXHRTaG9ydC5ib3JkZXJDb2xvcltiZGNdID0g
U2hvcnRbYmRdW2JkY10gPSBBbGxbYmRjXSA9ICdyZ2IoQCwgQCwgQCknO1xufSk7XG5cbmlmICho
YXNCYWNrZ3JvdW5kUG9zaXRpb25YWSkgRWxlbWVudC5TaG9ydFN0eWxlcy5iYWNrZ3JvdW5kUG9z
aXRpb24gPSB7YmFja2dyb3VuZFBvc2l0aW9uWDogJ0AnLCBiYWNrZ3JvdW5kUG9zaXRpb25ZOiAn
QCd9O1xufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBFbGVtZW50LkRpbWVuc2lvbnNcblxuZGVz
Y3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIHNpemUsIHNjcm9sbCwgb3Ig
cG9zaXRpb25pbmcgb2YgRWxlbWVudHMgYW5kIHRoZSB3aW5kb3cgb2JqZWN0LlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxuY3JlZGl0czpcbiAgLSBFbGVtZW50IHBvc2l0aW9uaW5n
IGJhc2VkIG9uIHRoZSBbcW9veGRvb10oaHR0cDovL3Fvb3hkb28ub3JnLykgY29kZSBhbmQgc21h
cnQgYnJvd3NlciBmaXhlcywgW0xHUEwgTGljZW5zZV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu
c2VzL2xncGwuaHRtbCkuXG4gIC0gVmlld3BvcnQgZGltZW5zaW9ucyBiYXNlZCBvbiBbWVVJXSho
dHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvKSBjb2RlLCBbQlNEIExpY2Vuc2VdKGh0dHA6
Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWwpLlxuXG5yZXF1aXJlczogW0Vs
ZW1lbnQsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBbRWxlbWVudC5EaW1lbnNpb25zXVxu
XG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpLFxuXHRjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
O1xuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMCc7XG5lbGVtZW50LmFwcGVuZENoaWxkKGNoaWxk
KTtcbnZhciBicm9rZW5PZmZzZXRQYXJlbnQgPSAoY2hpbGQub2Zmc2V0UGFyZW50ID09PSBlbGVt
ZW50KTtcbmVsZW1lbnQgPSBjaGlsZCA9IG51bGw7XG5cbnZhciBoZWlnaHRDb21wb25lbnRzID0g
WydoZWlnaHQnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJywgJ2JvcmRlclRvcFdpZHRo
JywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG5cdHdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAn
cGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJS
aWdodFdpZHRoJ107XG5cbnZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpe1xuXG5c
dHZhciBnQ1MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCksXG5cdFx0Ym91bmRzID0ge3g6
IDAsIHk6IDB9O1xuXG5cdGhlaWdodENvbXBvbmVudHMuZWFjaChmdW5jdGlvbihjc3Mpe1xuXHRc
dGJvdW5kcy55ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pO1xuXHR9KTtcblx0d2lkdGhDb21wb25l
bnRzLmVhY2goZnVuY3Rpb24oY3NzKXtcblx0XHRib3VuZHMueCArPSBwYXJzZUZsb2F0KGdDU1tj
c3NdKTtcblx0fSk7XG5cdHJldHVybiBib3VuZHM7XG59O1xuXG52YXIgaXNPZmZzZXQgPSBmdW5j
dGlvbihlbCl7XG5cdHJldHVybiBzdHlsZVN0cmluZyhlbCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRp
YycgfHwgaXNCb2R5KGVsKTtcbn07XG5cbnZhciBpc09mZnNldFN0YXRpYyA9IGZ1bmN0aW9uKGVs
KXtcblx0cmV0dXJuIGlzT2Zmc2V0KGVsKSB8fCAoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3Qo
ZWwudGFnTmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2Nyb2xsVG86IGZ1
bmN0aW9uKHgsIHkpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpe1xuXHRcdFx0dGhpcy5nZXRXaW5k
b3coKS5zY3JvbGxUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zY3JvbGxMZWZ0
ID0geDtcblx0XHRcdHRoaXMuc2Nyb2xsVG9wID0geTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0Z2V0U2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSBy
ZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7XG5cblx0XHQvLzxsdElFOT5cblx0XHQv
LyBUaGlzIGlmIGNsYXVzZSBpcyBiZWNhdXNlIElFOC0gY2Fubm90IGNhbGN1bGF0ZSBnZXRCb3Vu
ZGluZ0NsaWVudFJlY3Qgb2YgZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5IGhpZGRlbi5cblx0XHRp
ZiAoIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgs
IHk6IHRoaXMub2Zmc2V0SGVpZ2h0fTtcblx0XHQvLzwvbHRJRTk+XG5cblx0XHQvLyBUaGlzIHN2
ZyBzZWN0aW9uIHVuZGVyLCBjYWxsaW5nIGBzdmdDYWxjdWxhdGVTaXplKClgLCBjYW4gYmUgcmVt
b3ZlZCB3aGVuIEZGIGZpeGVkIHRoZSBzdmcgc2l6ZSBidWcuXG5cdFx0Ly8gQnVnIGluZm86IGh0
dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NVxuXHRcdGlm
ICh0aGlzLmdldCgndGFnJykgPT0gJ3N2ZycpIHJldHVybiBzdmdDYWxjdWxhdGVTaXplKHRoaXMp
O1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpO1xuXHRcdFx0cmV0dXJuIHt4OiBib3VuZHMud2lkdGgsIHk6IGJvdW5kcy5oZWlnaHR9
O1xuXHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0cmV0dXJuIHt4OiAwLCB5OiAwfTtcblx0XHR9XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMp
KSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7XG5cdFx0cmV0dXJuIHt4
OiB0aGlzLnNjcm9sbFdpZHRoLCB5OiB0aGlzLnNjcm9sbEhlaWdodH07XG5cdH0sXG5cblx0Z2V0
U2Nyb2xsOiBmdW5jdGlvbigpe1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdl
dFdpbmRvdygpLmdldFNjcm9sbCgpO1xuXHRcdHJldHVybiB7eDogdGhpcy5zY3JvbGxMZWZ0LCB5
OiB0aGlzLnNjcm9sbFRvcH07XG5cdH0sXG5cblx0Z2V0U2Nyb2xsczogZnVuY3Rpb24oKXtcblx0
XHR2YXIgZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07
XG5cdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7XG5cdFx0XHRwb3NpdGlv
bi54ICs9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcblx0XHRcdHBvc2l0aW9uLnkgKz0gZWxlbWVudC5z
Y3JvbGxUb3A7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdH1cblx0
XHRyZXR1cm4gcG9zaXRpb247XG5cdH0sXG5cblx0Z2V0T2Zmc2V0UGFyZW50OiBicm9rZW5PZmZz
ZXRQYXJlbnQgPyBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRpZiAo
aXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdm
aXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dmFyIGlzT2Zmc2V0Q2hlY2sgPSAoc3R5bGVTdHJp
bmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpID8gaXNPZmZzZXRTdGF0aWMgOiBp
c09mZnNldDtcblx0XHR3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKXtcblx0
XHRcdGlmIChpc09mZnNldENoZWNrKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcblx0XHR9XG5c
dFx0cmV0dXJuIG51bGw7XG5cdH0gOiBmdW5jdGlvbigpe1xuXHRcdHZhciBlbGVtZW50ID0gdGhp
cztcblx0XHRpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3Np
dGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVy
biBlbGVtZW50Lm9mZnNldFBhcmVudDtcblx0XHR9IGNhdGNoIChlKXt9XG5cdFx0cmV0dXJuIG51
bGw7XG5cdH0sXG5cblx0Z2V0T2Zmc2V0czogZnVuY3Rpb24oKXtcblx0XHR2YXIgaGFzR2V0Qm91
bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG5cblx0XHRpZiAo
aGFzR2V0Qm91bmRpbmdDbGllbnRSZWN0KXtcblx0XHRcdHZhciBib3VuZCA9IHRoaXMuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCksXG5cdFx0XHRcdGh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERv
Y3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KSxcblx0XHRcdFx0aHRtbFNjcm9sbCA9IGh0bWwuZ2V0
U2Nyb2xsKCksXG5cdFx0XHRcdGVsZW1TY3JvbGxzID0gdGhpcy5nZXRTY3JvbGxzKCksXG5cdFx0
XHRcdGlzRml4ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7
XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxl
bVNjcm9sbHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50
TGVmdCxcblx0XHRcdFx0eTogYm91bmQudG9wLnRvRmxvYXQoKSArIGVsZW1TY3JvbGxzLnkgKyAo
KGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueSkgLSBodG1sLmNsaWVudFRvcFxuXHRcdFx0fTtc
blx0XHR9XG5cblx0XHR2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9
O1xuXHRcdGlmIChpc0JvZHkodGhpcykpIHJldHVybiBwb3NpdGlvbjtcblxuXHRcdHdoaWxlIChl
bGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0cG9zaXRpb24ueCArPSBlbGVtZW50
Lm9mZnNldExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuXG5c
dFx0XHRlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJu
IHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7XG5c
dFx0dmFyIG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0cygpLFxuXHRcdFx0c2Nyb2xsID0gdGhpcy5n
ZXRTY3JvbGxzKCk7XG5cdFx0dmFyIHBvc2l0aW9uID0ge1xuXHRcdFx0eDogb2Zmc2V0LnggLSBz
Y3JvbGwueCxcblx0XHRcdHk6IG9mZnNldC55IC0gc2Nyb2xsLnlcblx0XHR9O1xuXG5cdFx0aWYg
KHJlbGF0aXZlICYmIChyZWxhdGl2ZSA9IGRvY3VtZW50LmlkKHJlbGF0aXZlKSkpe1xuXHRcdFx0
dmFyIHJlbGF0aXZlUG9zaXRpb24gPSByZWxhdGl2ZS5nZXRQb3NpdGlvbigpO1xuXHRcdFx0cmV0
dXJuIHt4OiBwb3NpdGlvbi54IC0gcmVsYXRpdmVQb3NpdGlvbi54IC0gbGVmdEJvcmRlcihyZWxh
dGl2ZSksIHk6IHBvc2l0aW9uLnkgLSByZWxhdGl2ZVBvc2l0aW9uLnkgLSB0b3BCb3JkZXIocmVs
YXRpdmUpfTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldENvb3Jk
aW5hdGVzOiBmdW5jdGlvbihlbGVtZW50KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4g
dGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHRo
aXMuZ2V0UG9zaXRpb24oZWxlbWVudCksXG5cdFx0XHRzaXplID0gdGhpcy5nZXRTaXplKCk7XG5c
dFx0dmFyIG9iaiA9IHtcblx0XHRcdGxlZnQ6IHBvc2l0aW9uLngsXG5cdFx0XHR0b3A6IHBvc2l0
aW9uLnksXG5cdFx0XHR3aWR0aDogc2l6ZS54LFxuXHRcdFx0aGVpZ2h0OiBzaXplLnlcblx0XHR9
O1xuXHRcdG9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoO1xuXHRcdG9iai5ib3R0b20g
PSBvYmoudG9wICsgb2JqLmhlaWdodDtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdGNvbXB1
dGVQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogb2Jq
LnggLSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLWxlZnQnKSxcblx0XHRcdHRvcDogb2JqLnkg
LSBzdHlsZU51bWJlcih0aGlzLCAnbWFyZ2luLXRvcCcpXG5cdFx0fTtcblx0fSxcblxuXHRzZXRQ
b3NpdGlvbjogZnVuY3Rpb24ob2JqKXtcblx0XHRyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5j
b21wdXRlUG9zaXRpb24ob2JqKSk7XG5cdH1cblxufSk7XG5cblxuW0RvY3VtZW50LCBXaW5kb3dd
Lmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFy
IGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiBkb2MuY2xpZW50
V2lkdGgsIHk6IGRvYy5jbGllbnRIZWlnaHR9O1xuXHR9LFxuXG5cdGdldFNjcm9sbDogZnVuY3Rp
b24oKXtcblx0XHR2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxl
bWVudCh0aGlzKTtcblx0XHRyZXR1cm4ge3g6IHdpbi5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xs
TGVmdCwgeTogd2luLnBhZ2VZT2Zmc2V0IHx8IGRvYy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdl
dFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQo
dGhpcyksXG5cdFx0XHRtaW4gPSB0aGlzLmdldFNpemUoKSxcblx0XHRcdGJvZHkgPSB0aGlzLmdl
dERvY3VtZW50KCkuYm9keTtcblxuXHRcdHJldHVybiB7eDogTWF0aC5tYXgoZG9jLnNjcm9sbFdp
ZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBtaW4ueCksIHk6IE1hdGgubWF4KGRvYy5zY3JvbGxIZWln
aHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBtaW4ueSl9O1xuXHR9LFxuXG5cdGdldFBvc2l0aW9uOiBm
dW5jdGlvbigpe1xuXHRcdHJldHVybiB7eDogMCwgeTogMH07XG5cdH0sXG5cblx0Z2V0Q29vcmRp
bmF0ZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTtcblx0XHRy
ZXR1cm4ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhl
aWdodDogc2l6ZS55LCB3aWR0aDogc2l6ZS54fTtcblx0fVxuXG59KTtcblxuLy8gcHJpdmF0ZSBt
ZXRob2RzXG5cbnZhciBzdHlsZVN0cmluZyA9IEVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZTtcblxu
ZnVuY3Rpb24gc3R5bGVOdW1iZXIoZWxlbWVudCwgc3R5bGUpe1xuXHRyZXR1cm4gc3R5bGVTdHJp
bmcoZWxlbWVudCwgc3R5bGUpLnRvSW50KCkgfHwgMDtcbn1cblxuXG5cbmZ1bmN0aW9uIHRvcEJv
cmRlcihlbGVtZW50KXtcblx0cmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9w
LXdpZHRoJyk7XG59XG5cbmZ1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBz
dHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbn1cblxuZnVuY3Rpb24g
aXNCb2R5KGVsZW1lbnQpe1xuXHRyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVt
ZW50LnRhZ05hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wYXRFbGVtZW50KGVsZW1lbnQpe1xu
XHR2YXIgZG9jID0gZWxlbWVudC5nZXREb2N1bWVudCgpO1xuXHRyZXR1cm4gKCFkb2MuY29tcGF0
TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2Mu
Ym9keTtcbn1cblxufSkoKTtcblxuLy9hbGlhc2VzXG5FbGVtZW50LmFsaWFzKHtwb3NpdGlvbjog
J3NldFBvc2l0aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHlcblxuW1dpbmRvdywgRG9jdW1lbnQsIEVs
ZW1lbnRdLmludm9rZSgnaW1wbGVtZW50Jywge1xuXG5cdGdldEhlaWdodDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueTtcblx0fSxcblxuXHRnZXRXaWR0aDogZnVuY3Rp
b24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaXplKCkueDtcblx0fSxcblxuXHRnZXRTY3JvbGxU
b3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTtcblx0fSxcblxu
XHRnZXRTY3JvbGxMZWZ0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgp
Lng7XG5cdH0sXG5cblx0Z2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0
aGlzLmdldFNjcm9sbFNpemUoKS55O1xuXHR9LFxuXG5cdGdldFNjcm9sbFdpZHRoOiBmdW5jdGlv
bigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54O1xuXHR9LFxuXG5cdGdldFRv
cDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7XG5cdH0sXG5c
blx0Z2V0TGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLng7
XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnhcblxuZGVzY3JpcHRpb246IENvbnRh
aW5zIHRoZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVy
IEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczog
W0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXVxuXG5wcm92aWRlczogRnhc
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFz
cyh7XG5cblx0SW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5h
YmxlXSxcblxuXHRvcHRpb25zOiB7XG5cdFx0Lypcblx0XHRvblN0YXJ0OiBuaWwsXG5cdFx0b25D
YW5jZWw6IG5pbCxcblx0XHRvbkNvbXBsZXRlOiBuaWwsXG5cdFx0Ki9cblx0XHRmcHM6IDYwLFxu
XHRcdHVuaXQ6IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiA1MDAsXG5cdFx0ZnJhbWVzOiBudWxsLFxu
XHRcdGZyYW1lU2tpcDogdHJ1ZSxcblx0XHRsaW5rOiAnaWdub3JlJ1xuXHR9LFxuXG5cdGluaXRp
YWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVj
dCB8fCB0aGlzO1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0fSxcblxuXHRnZXRU
cmFuc2l0aW9uOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwKXtcblx0XHRcdHJl
dHVybiAtKE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjtcblx0XHR9O1xuXHR9LFxuXG5c
dHN0ZXA6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApe1xu
XHRcdFx0dmFyIGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkg
OiAwLCBmcmFtZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsO1xuXHRcdFx0dGhpcy50aW1l
ID0gbm93O1xuXHRcdFx0dGhpcy5mcmFtZSArPSBmcmFtZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRc
dHRoaXMuZnJhbWUrKztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVz
KXtcblx0XHRcdHZhciBkZWx0YSA9IHRoaXMudHJhbnNpdGlvbih0aGlzLmZyYW1lIC8gdGhpcy5m
cmFtZXMpO1xuXHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywg
ZGVsdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzO1xu
XHRcdFx0dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpO1xuXHRc
dFx0dGhpcy5zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0
XHRyZXR1cm4gbm93O1xuXHR9LFxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0
YSl7XG5cdFx0cmV0dXJuIEZ4LmNvbXB1dGUoZnJvbSwgdG8sIGRlbHRhKTtcblx0fSxcblxuXHRj
aGVjazogZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMuaXNSdW5uaW5nKCkpIHJldHVybiB0cnVl
O1xuXHRcdHN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzog
dGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hh
aW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRc
dH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKGZyb20sIHRv
KXtcblx0XHRpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpcztcblx0XHR0aGlz
LmZyb20gPSBmcm9tO1xuXHRcdHRoaXMudG8gPSB0bztcblx0XHR0aGlzLmZyYW1lID0gKHRoaXMu
b3B0aW9ucy5mcmFtZVNraXApID8gMCA6IC0xO1xuXHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0
dGhpcy50cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKCk7XG5cdFx0dmFyIGZyYW1lcyA9
IHRoaXMub3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0g
dGhpcy5vcHRpb25zLmR1cmF0aW9uO1xuXHRcdHRoaXMuZHVyYXRpb24gPSBGeC5EdXJhdGlvbnNb
ZHVyYXRpb25dIHx8IGR1cmF0aW9uLnRvSW50KCk7XG5cdFx0dGhpcy5mcmFtZUludGVydmFsID0g
MTAwMCAvIGZwcztcblx0XHR0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMu
ZHVyYXRpb24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpO1xuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxl
U3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRcdHRoaXMucmVzZXRUaGVuYWJsZSh0aGlzLnN1
YmplY3QpO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3Qp
O1xuXHRcdHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIGZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRpZiAodGhpcy5pc1J1bm5pbmcoKSl7XG5c
dFx0XHR0aGlzLnRpbWUgPSBudWxsO1xuXHRcdFx0cHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhp
cy5vcHRpb25zLmZwcyk7XG5cdFx0XHRpZiAodGhpcy5mcmFtZXMgPT0gdGhpcy5mcmFtZSl7XG5c
dFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7XG5cdFx0XHRc
dGlmICghdGhpcy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0
aGlzLnN1YmplY3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ3N0
b3AnLCB0aGlzLnN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXNvbHZlKHRoaXMuc3Vi
amVjdCA9PT0gdGhpcyA/IG51bGwgOiB0aGlzLnN1YmplY3QpO1xuXHRcdH1cblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5u
aW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxs
KHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0dGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVz
O1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcsIHRoaXMuc3ViamVjdCkuY2xlYXJDaGFp
bigpO1xuXHRcdFx0dGhpcy5yZWplY3QodGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0cGF1c2U6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5u
aW5nKCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxs
KHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRyZXN1bWU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNQYXVzZWQoKSkgcHVzaElu
c3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0aXNSdW5uaW5nOiBmdW5jdGlvbigpe1xuXHRcdHZhciBsaXN0ID0gaW5zdGFuY2Vz
W3RoaXMub3B0aW9ucy5mcHNdO1xuXHRcdHJldHVybiBsaXN0ICYmIGxpc3QuY29udGFpbnModGhp
cyk7XG5cdH0sXG5cblx0aXNQYXVzZWQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmZy
YW1lIDwgdGhpcy5mcmFtZXMpICYmICF0aGlzLmlzUnVubmluZygpO1xuXHR9XG5cbn0pO1xuXG5G
eC5jb21wdXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXtcblx0cmV0dXJuICh0byAtIGZy
b20pICogZGVsdGEgKyBmcm9tO1xufTtcblxuRnguRHVyYXRpb25zID0geydzaG9ydCc6IDI1MCwg
J25vcm1hbCc6IDUwMCwgJ2xvbmcnOiAxMDAwfTtcblxuLy8gZ2xvYmFsIHRpbWVyc1xuXG52YXIg
aW5zdGFuY2VzID0ge30sIHRpbWVycyA9IHt9O1xuXG52YXIgbG9vcCA9IGZ1bmN0aW9uKCl7XG5c
dHZhciBub3cgPSBEYXRlLm5vdygpO1xuXHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTsp
e1xuXHRcdHZhciBpbnN0YW5jZSA9IHRoaXNbaV07XG5cdFx0aWYgKGluc3RhbmNlKSBpbnN0YW5j
ZS5zdGVwKG5vdyk7XG5cdH1cbn07XG5cbnZhciBwdXNoSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMp
e1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTtc
blx0bGlzdC5wdXNoKHRoaXMpO1xuXHRpZiAoIXRpbWVyc1tmcHNdKSB0aW1lcnNbZnBzXSA9IGxv
b3AucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAgLyBmcHMpLCBsaXN0KTtcbn07XG5cbnZhciBw
dWxsSW5zdGFuY2UgPSBmdW5jdGlvbihmcHMpe1xuXHR2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNd
O1xuXHRpZiAobGlzdCl7XG5cdFx0bGlzdC5lcmFzZSh0aGlzKTtcblx0XHRpZiAoIWxpc3QubGVu
Z3RoICYmIHRpbWVyc1tmcHNdKXtcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZXNbZnBzXTtcblx0XHRc
dHRpbWVyc1tmcHNdID0gY2xlYXJJbnRlcnZhbCh0aW1lcnNbZnBzXSk7XG5cdFx0fVxuXHR9XG59
O1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LkNTU1xuXG5kZXNjcmlwdGlvbjogQ29u
dGFpbnMgdGhlIENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBo
LCBGeC5FbGVtZW50cy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBbRngsIEVsZW1lbnQuU3R5bGVdXG5cbnByb3ZpZGVzOiBGeC5DU1NcblxuLi4uXG4qL1xuXG5G
eC5DU1MgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LFxuXG5cdC8vcHJlcGFyZXMgdGhl
IGJhc2UgZnJvbS90byBvYmplY3RcblxuXHRwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9w
ZXJ0eSwgdmFsdWVzKXtcblx0XHR2YWx1ZXMgPSBBcnJheS5jb252ZXJ0KHZhbHVlcyk7XG5cdFx0
dmFyIGZyb20gPSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdO1xuXHRcdGlmICh0byA9PSBudWxs
KXtcblx0XHRcdHRvID0gZnJvbTtcblx0XHRcdGZyb20gPSBlbGVtZW50LmdldFN0eWxlKHByb3Bl
cnR5KTtcblx0XHRcdHZhciB1bml0ID0gdGhpcy5vcHRpb25zLnVuaXQ7XG5cdFx0XHQvLyBhZGFw
dGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubW9yci9meC9ibG9iL21hc3Rlci9meC5q
cyNMMjk5XG5cdFx0XHRpZiAodW5pdCAmJiBmcm9tICYmIHR5cGVvZiBmcm9tID09ICdzdHJpbmcn
ICYmIGZyb20uc2xpY2UoLXVuaXQubGVuZ3RoKSAhPSB1bml0ICYmIHBhcnNlRmxvYXQoZnJvbSkg
IT0gMCl7XG5cdFx0XHRcdGVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7XG5c
dFx0XHRcdHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZShwcm9wZXJ0eSk7XG5c
dFx0XHRcdC8vIElFIGFuZCBPcGVyYSBzdXBwb3J0IHBpeGVsTGVmdCBvciBwaXhlbFdpZHRoXG5c
dFx0XHRcdGlmICghKC9weCQvLnRlc3QodmFsdWUpKSl7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbGVt
ZW50LnN0eWxlWygncGl4ZWwtJyArIHByb3BlcnR5KS5jYW1lbENhc2UoKV07XG5cdFx0XHRcdFx0
aWYgKHZhbHVlID09IG51bGwpe1xuXHRcdFx0XHRcdFx0Ly8gYWRhcHRlZCBmcm9tIERlYW4gRWR3
YXJkcycgaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNj
b21tZW50LTEwMjI5MVxuXHRcdFx0XHRcdFx0dmFyIGxlZnQgPSBlbGVtZW50LnN0eWxlLmxlZnQ7
XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmxlZnQgPSB0byArIHVuaXQ7XG5cdFx0XHRcdFx0
XHR2YWx1ZSA9IGVsZW1lbnQuc3R5bGUucGl4ZWxMZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5z
dHlsZS5sZWZ0ID0gbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJvbSA9
ICh0byB8fCAxKSAvIChwYXJzZUZsb2F0KHZhbHVlKSB8fCAxKSAqIChwYXJzZUZsb2F0KGZyb20p
IHx8IDApO1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7
XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ZnJvbTogdGhpcy5wYXJzZShmcm9tKSwgdG86
IHRoaXMucGFyc2UodG8pfTtcblx0fSxcblxuXHQvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJy
YXlcblxuXHRwYXJzZTogZnVuY3Rpb24odmFsdWUpe1xuXHRcdHZhbHVlID0gRnVuY3Rpb24uY29u
dmVydCh2YWx1ZSkoKTtcblx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpID8g
dmFsdWUuc3BsaXQoJyAnKSA6IEFycmF5LmNvbnZlcnQodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1
ZS5tYXAoZnVuY3Rpb24odmFsKXtcblx0XHRcdHZhbCA9IFN0cmluZyh2YWwpO1xuXHRcdFx0dmFy
IGZvdW5kID0gZmFsc2U7XG5cdFx0XHRPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rp
b24ocGFyc2VyKXtcblx0XHRcdFx0aWYgKGZvdW5kKSByZXR1cm47XG5cdFx0XHRcdHZhciBwYXJz
ZWQgPSBwYXJzZXIucGFyc2UodmFsKTtcblx0XHRcdFx0aWYgKHBhcnNlZCB8fCBwYXJzZWQgPT09
IDApIGZvdW5kID0ge3ZhbHVlOiBwYXJzZWQsIHBhcnNlcjogcGFyc2VyfTtcblx0XHRcdH0pO1xu
XHRcdFx0Zm91bmQgPSBmb3VuZCB8fCB7dmFsdWU6IHZhbCwgcGFyc2VyOiBGeC5DU1MuUGFyc2Vy
cy5TdHJpbmd9O1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8vY29t
cHV0ZXMgYnkgYSBmcm9tIGFuZCB0byBwcmVwYXJlZCBvYmplY3RzLCB1c2luZyB0aGVpciBwYXJz
ZXJzLlxuXG5cdGNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0dmFyIGNv
bXB1dGVkID0gW107XG5cdFx0KE1hdGgubWluKGZyb20ubGVuZ3RoLCB0by5sZW5ndGgpKS50aW1l
cyhmdW5jdGlvbihpKXtcblx0XHRcdGNvbXB1dGVkLnB1c2goe3ZhbHVlOiBmcm9tW2ldLnBhcnNl
ci5jb21wdXRlKGZyb21baV0udmFsdWUsIHRvW2ldLnZhbHVlLCBkZWx0YSksIHBhcnNlcjogZnJv
bVtpXS5wYXJzZXJ9KTtcblx0XHR9KTtcblx0XHRjb21wdXRlZC4kZmFtaWx5ID0gRnVuY3Rpb24u
Y29udmVydCgnZng6Y3NzOnZhbHVlJyk7XG5cdFx0cmV0dXJuIGNvbXB1dGVkO1xuXHR9LFxuXG5c
dC8vc2VydmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZVxuXG5cdHNlcnZlOiBmdW5jdGlvbih2YWx1
ZSwgdW5pdCl7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVl
ID0gdGhpcy5wYXJzZSh2YWx1ZSk7XG5cdFx0dmFyIHJldHVybmVkID0gW107XG5cdFx0dmFsdWUu
ZWFjaChmdW5jdGlvbihiaXQpe1xuXHRcdFx0cmV0dXJuZWQgPSByZXR1cm5lZC5jb25jYXQoYml0
LnBhcnNlci5zZXJ2ZShiaXQudmFsdWUsIHVuaXQpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmV0
dXJuZWQ7XG5cdH0sXG5cblx0Ly9yZW5kZXJzIHRoZSBjaGFuZ2UgdG8gYW4gZWxlbWVudFxuXG5c
dHJlbmRlcjogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCB1bml0KXtcblx0XHRl
bGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0aGlzLnNlcnZlKHZhbHVlLCB1bml0KSk7XG5cdH0s
XG5cblx0Ly9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBm
b3IgYSBzZWxlY3RvclxuXG5cdHNlYXJjaDogZnVuY3Rpb24oc2VsZWN0b3Ipe1xuXHRcdGlmIChG
eC5DU1MuQ2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTtcblx0
XHR2YXIgdG8gPSB7fSwgc2VsZWN0b3JUZXN0ID0gbmV3IFJlZ0V4cCgnXicgKyBzZWxlY3Rvci5l
c2NhcGVSZWdFeHAoKSArICckJyk7XG5cblx0XHR2YXIgc2VhcmNoU3R5bGVzID0gZnVuY3Rpb24o
cnVsZXMpe1xuXHRcdFx0QXJyYXkuZWFjaChydWxlcywgZnVuY3Rpb24ocnVsZSl7XG5cdFx0XHRc
dGlmIChydWxlLm1lZGlhKXtcblx0XHRcdFx0XHRzZWFyY2hTdHlsZXMocnVsZS5ydWxlcyB8fCBy
dWxlLmNzc1J1bGVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYg
KCFydWxlLnN0eWxlKSByZXR1cm47XG5cdFx0XHRcdHZhciBzZWxlY3RvclRleHQgPSAocnVsZS5z
ZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlxcdysvLCBmdW5jdGlv
bihtKXtcblx0XHRcdFx0XHRyZXR1cm4gbS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KSA6IG51
bGw7XG5cdFx0XHRcdGlmICghc2VsZWN0b3JUZXh0IHx8ICFzZWxlY3RvclRlc3QudGVzdChzZWxl
Y3RvclRleHQpKSByZXR1cm47XG5cdFx0XHRcdE9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBm
dW5jdGlvbih2YWx1ZSwgc3R5bGUpe1xuXHRcdFx0XHRcdGlmICghcnVsZS5zdHlsZVtzdHlsZV0g
fHwgRWxlbWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJldHVybjtcblx0XHRcdFx0XHR2YWx1ZSA9
IFN0cmluZyhydWxlLnN0eWxlW3N0eWxlXSk7XG5cdFx0XHRcdFx0dG9bc3R5bGVdID0gKCgvXnJn
Yi8pLnRlc3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTtcblx0XHRcdFx0fSk7
XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0
cywgZnVuY3Rpb24oc2hlZXQpe1xuXHRcdFx0dmFyIGhyZWYgPSBzaGVldC5ocmVmO1xuXHRcdFx0
aWYgKGhyZWYgJiYgaHJlZi5pbmRleE9mKCc6Ly8nKSA+IC0xICYmIGhyZWYuaW5kZXhPZihkb2N1
bWVudC5kb21haW4pID09IC0xKSByZXR1cm47XG5cdFx0XHR2YXIgcnVsZXMgPSBzaGVldC5ydWxl
cyB8fCBzaGVldC5jc3NSdWxlcztcblx0XHRcdHNlYXJjaFN0eWxlcyhydWxlcyk7XG5cdFx0fSk7
XG5cdFx0cmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bztcblx0fVxuXG59KTtcblxu
RnguQ1NTLkNhY2hlID0ge307XG5cbkZ4LkNTUy5QYXJzZXJzID0ge1xuXG5cdENvbG9yOiB7XG5c
dFx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXiNbMC05
YS1mXXszLDZ9JC9pKSkgcmV0dXJuIHZhbHVlLmhleFRvUmdiKHRydWUpO1xuXHRcdFx0cmV0dXJu
ICgodmFsdWUgPSB2YWx1ZS5tYXRjaCgvKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8pKSkg
PyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTtcblx0XHR9LFxuXHRcdGNv
bXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdFx0XHRyZXR1cm4gZnJvbS5tYXAo
ZnVuY3Rpb24odmFsdWUsIGkpe1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChGeC5jb21wdXRl
KGZyb21baV0sIHRvW2ldLCBkZWx0YSkpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRzZXJ2ZTog
ZnVuY3Rpb24odmFsdWUpe1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpO1xuXHRcdH1c
blx0fSxcblxuXHROdW1iZXI6IHtcblx0XHRwYXJzZTogcGFyc2VGbG9hdCxcblx0XHRjb21wdXRl
OiBGeC5jb21wdXRlLFxuXHRcdHNlcnZlOiBmdW5jdGlvbih2YWx1ZSwgdW5pdCl7XG5cdFx0XHRy
ZXR1cm4gKHVuaXQpID8gdmFsdWUgKyB1bml0IDogdmFsdWU7XG5cdFx0fVxuXHR9LFxuXG5cdFN0
cmluZzoge1xuXHRcdHBhcnNlOiBGdW5jdGlvbi5jb252ZXJ0KGZhbHNlKSxcblx0XHRjb21wdXRl
OiBmdW5jdGlvbih6ZXJvLCBvbmUpe1xuXHRcdFx0cmV0dXJuIG9uZTtcblx0XHR9LFxuXHRcdHNl
cnZlOiBmdW5jdGlvbih6ZXJvKXtcblx0XHRcdHJldHVybiB6ZXJvO1xuXHRcdH1cblx0fVxuXG59
O1xuXG5cblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Nb3JwaFxuXG5kZXNjcmlwdGlvbjogRm9ybWVy
bHkgRnguU3R5bGVzLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgbnVtYmVyIG9mIENTUyBwcm9w
ZXJ0aWVzIGZvciBhbiBlbGVtZW50IHVzaW5nIGFuIG9iamVjdCBvZiBydWxlcywgb3IgQ1NTIGJh
c2VkIHNlbGVjdG9yIHJ1bGVzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogRnguTW9ycGhcblxuLi4uXG4qL1xuXG5GeC5Nb3Jw
aCA9IG5ldyBDbGFzcyh7XG5cblx0RXh0ZW5kczogRnguQ1NTLFxuXG5cdGluaXRpYWxpemU6IGZ1
bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xuXHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVj
dCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpO1xuXHRcdHRoaXMucGFyZW50KG9wdGlvbnMpO1xuXHR9
LFxuXG5cdHNldDogZnVuY3Rpb24obm93KXtcblx0XHRpZiAodHlwZW9mIG5vdyA9PSAnc3RyaW5n
Jykgbm93ID0gdGhpcy5zZWFyY2gobm93KTtcblx0XHRmb3IgKHZhciBwIGluIG5vdykgdGhpcy5y
ZW5kZXIodGhpcy5lbGVtZW50LCBwLCBub3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEp
e1xuXHRcdHZhciBub3cgPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRo
aXMucGFyZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxc
blxuXHRzdGFydDogZnVuY3Rpb24ocHJvcGVydGllcyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKHBy
b3BlcnRpZXMpKSByZXR1cm4gdGhpcztcblx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT0gJ3N0
cmluZycpIHByb3BlcnRpZXMgPSB0aGlzLnNlYXJjaChwcm9wZXJ0aWVzKTtcblx0XHR2YXIgZnJv
bSA9IHt9LCB0byA9IHt9O1xuXHRcdGZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7XG5cdFx0XHR2
YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7
XG5cdFx0XHRmcm9tW3BdID0gcGFyc2VkLmZyb207XG5cdFx0XHR0b1twXSA9IHBhcnNlZC50bztc
blx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTtcblx0fVxuXG59KTtcblxu
RWxlbWVudC5Qcm9wZXJ0aWVzLm1vcnBoID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7
XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0
XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG1vcnBo
ID0gdGhpcy5yZXRyaWV2ZSgnbW9ycGgnKTtcblx0XHRpZiAoIW1vcnBoKXtcblx0XHRcdG1vcnBo
ID0gbmV3IEZ4Lk1vcnBoKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9y
ZSgnbW9ycGgnLCBtb3JwaCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb3JwaDtcblx0fVxuXG59O1xu
XG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bW9ycGg6IGZ1bmN0aW9uKHByb3BzKXtcblx0XHR0
aGlzLmdldCgnbW9ycGgnKS5zdGFydChwcm9wcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHJhbnNpdGlvbnNcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkg
b2YgdGhlIEZ4IENsYXNzZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5jcmVk
aXRzOlxuICAtIEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cu
cm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1
c2VkIHdpdGggTW9vVG9vbHMuXG5cbnJlcXVpcmVzOiBGeFxuXG5wcm92aWRlczogRnguVHJhbnNp
dGlvbnNcblxuLi4uXG4qL1xuXG5GeC5pbXBsZW1lbnQoe1xuXG5cdGdldFRyYW5zaXRpb246IGZ1
bmN0aW9uKCl7XG5cdFx0dmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRngu
VHJhbnNpdGlvbnMuU2luZS5lYXNlSW5PdXQ7XG5cdFx0aWYgKHR5cGVvZiB0cmFucyA9PSAnc3Ry
aW5nJyl7XG5cdFx0XHR2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7XG5cdFx0XHR0cmFucyA9
IEZ4LlRyYW5zaXRpb25zO1xuXHRcdFx0dHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tk
YXRhWzBdLmNhcGl0YWxpemUoKV07XG5cdFx0XHRpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1sn
ZWFzZScgKyBkYXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFs
aXplKCkgOiAnJyldO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJhbnM7XG5cdH1cblxufSk7XG5cbkZ4
LlRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFuc2l0aW9uLCBwYXJhbXMpe1xuXHRwYXJhbXMgPSBB
cnJheS5jb252ZXJ0KHBhcmFtcyk7XG5cdHZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3Mpe1xuXHRc
dHJldHVybiB0cmFuc2l0aW9uKHBvcywgcGFyYW1zKTtcblx0fTtcblx0cmV0dXJuIE9iamVjdC5h
cHBlbmQoZWFzZUluLCB7XG5cdFx0ZWFzZUluOiBlYXNlSW4sXG5cdFx0ZWFzZU91dDogZnVuY3Rp
b24ocG9zKXtcblx0XHRcdHJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpO1xu
XHRcdH0sXG5cdFx0ZWFzZUluT3V0OiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIChwb3Mg
PD0gMC41ID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIg
KiAoMSAtIHBvcyksIHBhcmFtcykpKSAvIDI7XG5cdFx0fVxuXHR9KTtcbn07XG5cbkZ4LlRyYW5z
aXRpb25zID0ge1xuXG5cdGxpbmVhcjogZnVuY3Rpb24oemVybyl7XG5cdFx0cmV0dXJuIHplcm87
XG5cdH1cblxufTtcblxuXG5cbkZ4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5z
aXRpb25zKXtcblx0Zm9yICh2YXIgdHJhbnNpdGlvbiBpbiB0cmFuc2l0aW9ucykgRnguVHJhbnNp
dGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbih0cmFuc2l0aW9uc1t0cmFuc2l0
aW9uXSk7XG59O1xuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQoe1xuXG5cdFBvdzogZnVuY3Rpb24o
cCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIHggJiYgeFswXSB8fCA2KTtcblx0fSxcblxu
XHRFeHBvOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkp
O1xuXHR9LFxuXG5cdENpcmM6IGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiAxIC0gTWF0aC5zaW4o
TWF0aC5hY29zKHApKTtcblx0fSxcblxuXHRTaW5lOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4g
MSAtIE1hdGguY29zKHAgKiBNYXRoLlBJIC8gMik7XG5cdH0sXG5cblx0QmFjazogZnVuY3Rpb24o
cCwgeCl7XG5cdFx0eCA9IHggJiYgeFswXSB8fCAxLjYxODtcblx0XHRyZXR1cm4gTWF0aC5wb3co
cCwgMikgKiAoKHggKyAxKSAqIHAgLSB4KTtcblx0fSxcblxuXHRCb3VuY2U6IGZ1bmN0aW9uKHAp
e1xuXHRcdHZhciB2YWx1ZTtcblx0XHRmb3IgKHZhciBhID0gMCwgYiA9IDE7IDE7IGEgKz0gYiwg
YiAvPSAyKXtcblx0XHRcdGlmIChwID49ICg3IC0gNCAqIGEpIC8gMTEpe1xuXHRcdFx0XHR2YWx1
ZSA9IGIgKiBiIC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7XG5cdFx0
XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0
RWxhc3RpYzogZnVuY3Rpb24ocCwgeCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1w
KSAqIE1hdGguY29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7XG5c
dH1cblxufSk7XG5cblsnUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVu
Y3Rpb24odHJhbnNpdGlvbiwgaSl7XG5cdEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3
IEZ4LlRyYW5zaXRpb24oZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KHAsIGkgKyAy
KTtcblx0fSk7XG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5Ud2VlblxuXG5kZXNjcmlwdGlv
bjogRm9ybWVybHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVy
dHkgZm9yIGFuIGVsZW1lbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1
aXJlczogRnguQ1NTXG5cbnByb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVu
dC5oaWdobGlnaHRdXG5cbi4uLlxuKi9cblxuRnguVHdlZW4gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4
dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25z
KXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50
KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKHBy
b3BlcnR5LCBub3cpe1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdFx0bm93
ID0gcHJvcGVydHk7XG5cdFx0XHRwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRp
b25zLnByb3BlcnR5O1xuXHRcdH1cblx0XHR0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHByb3Bl
cnR5LCBub3csIHRoaXMub3B0aW9ucy51bml0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxu
XHRzdGFydDogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXtcblx0XHRpZiAoIXRoaXMuY2hl
Y2socHJvcGVydHksIGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBBcnJh
eS5mbGF0dGVuKGFyZ3VtZW50cyk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5w
cm9wZXJ0eSB8fCBhcmdzLnNoaWZ0KCk7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0
aGlzLmVsZW1lbnQsIHRoaXMucHJvcGVydHksIGFyZ3MpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVu
dChwYXJzZWQuZnJvbSwgcGFyc2VkLnRvKTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0
aWVzLnR3ZWVuID0ge1xuXG5cdHNldDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5nZXQo
J3R3ZWVuJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5yZXRyaWV2
ZSgndHdlZW4nKTtcblx0XHRpZiAoIXR3ZWVuKXtcblx0XHRcdHR3ZWVuID0gbmV3IEZ4LlR3ZWVu
KHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pO1xuXHRcdFx0dGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vl
bik7XG5cdFx0fVxuXHRcdHJldHVybiB0d2Vlbjtcblx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxl
bWVudCh7XG5cblx0dHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0dGhp
cy5nZXQoJ3R3ZWVuJykuc3RhcnQocHJvcGVydHksIGZyb20sIHRvKTtcblx0XHRyZXR1cm4gdGhp
cztcblx0fSxcblxuXHRmYWRlOiBmdW5jdGlvbigpe1xuXHRcdHZhciBmYWRlID0gdGhpcy5nZXQo
J3R3ZWVuJyksIG1ldGhvZCwgYXJncyA9IFsnb3BhY2l0eSddLmFwcGVuZChhcmd1bWVudHMpLCB0
b2dnbGU7XG5cdFx0aWYgKGFyZ3NbMV0gPT0gbnVsbCkgYXJnc1sxXSA9ICd0b2dnbGUnO1xuXHRc
dHN3aXRjaCAoYXJnc1sxXSl7XG5cdFx0XHRjYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFy
Z3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFy
Z3NbMV0gPSAwOyBicmVhaztcblx0XHRcdGNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJn
c1sxXSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdz
WzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHR2YXIgZmxhZyA9
IHRoaXMucmV0cmlldmUoJ2ZhZGU6ZmxhZycsIHRoaXMuZ2V0U3R5bGUoJ29wYWNpdHknKSA9PSAx
KTtcblx0XHRcdFx0bWV0aG9kID0gJ3N0YXJ0Jztcblx0XHRcdFx0YXJnc1sxXSA9IGZsYWcgPyAw
IDogMTtcblx0XHRcdFx0dGhpcy5zdG9yZSgnZmFkZTpmbGFnJywgIWZsYWcpO1xuXHRcdFx0XHR0
b2dnbGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IG1ldGhvZCA9ICdz
dGFydCc7XG5cdFx0fVxuXHRcdGlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFn
Jyk7XG5cdFx0ZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpO1xuXHRcdHZhciB0byA9IGFy
Z3NbYXJncy5sZW5ndGggLSAxXTtcblxuXHRcdGlmIChtZXRob2QgPT0gJ3NldCcpe1xuXHRcdFx0
dGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsIHRvID09IDAgPyAnaGlkZGVuJyA6ICd2aXNpYmxl
Jyk7XG5cdFx0fSBlbHNlIGlmICh0byAhPSAwKXtcblx0XHRcdGlmIChmYWRlLiRjaGFpbi5sZW5n
dGgpe1xuXHRcdFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0dGhpcy5lbGVt
ZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLmNh
bGxDaGFpbigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0
U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5c
dFx0XHRmYWRlLmNoYWluKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlmICh0aGlzLmVsZW1lbnQuZ2V0
U3R5bGUoJ29wYWNpdHknKSkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuc2V0U3R5bGUo
J3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHRoaXMuY2FsbENoYWluKCk7XG5cdFx0
XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1
bmN0aW9uKHN0YXJ0LCBlbmQpe1xuXHRcdGlmICghZW5kKXtcblx0XHRcdGVuZCA9IHRoaXMucmV0
cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcsIHRoaXMuZ2V0U3R5bGUoJ2JhY2tncm91bmQtY29s
b3InKSk7XG5cdFx0XHRlbmQgPSAoZW5kID09ICd0cmFuc3BhcmVudCcpID8gJyNmZmYnIDogZW5k
O1xuXHRcdH1cblx0XHR2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTtcblx0XHR0d2Vlbi5z
dGFydCgnYmFja2dyb3VuZC1jb2xvcicsIHN0YXJ0IHx8ICcjZmZmZjg4JywgZW5kKS5jaGFpbihm
dW5jdGlvbigpe1xuXHRcdFx0dGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMu
cmV0cmlldmUoJ2hpZ2hsaWdodDpvcmlnaW5hbCcpKTtcblx0XHRcdHR3ZWVuLmNhbGxDaGFpbigp
O1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbi8q
XG4tLS1cblxubmFtZTogUmVxdWVzdFxuXG5kZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBv
c2UgUmVxdWVzdCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC5cblxubGljZW5zZTogTUlULXN0
eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRz
LCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZSwgQnJvd3Nlcl1cblxucHJvdmlkZXM6IFJlcXVlc3Rc
blxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVtcHR5ID0gZnVuY3Rpb24oKXt9LFxu
XHRwcm9ncmVzc1N1cHBvcnQgPSAoJ29ucHJvZ3Jlc3MnIGluIG5ldyBCcm93c2VyLlJlcXVlc3Qp
O1xuXG52YXIgUmVxdWVzdCA9IHRoaXMuUmVxdWVzdCA9IG5ldyBDbGFzcyh7XG5cblx0SW1wbGVt
ZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSxcblxuXHRvcHRp
b25zOiB7Lypcblx0XHRvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkxvYWRzdGFydDog
ZnVuY3Rpb24oZXZlbnQsIHhocil7fSxcblx0XHRvblByb2dyZXNzOiBmdW5jdGlvbihldmVudCwg
eGhyKXt9LFxuXHRcdG9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSxcblx0XHRvbkNhbmNlbDogZnVu
Y3Rpb24oKXt9LFxuXHRcdG9uU3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2VUZXh0LCByZXNwb25z
ZVhNTCl7fSxcblx0XHRvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSxcblx0XHRvbkV4Y2VwdGlv
bjogZnVuY3Rpb24oaGVhZGVyTmFtZSwgdmFsdWUpe30sXG5cdFx0b25UaW1lb3V0OiBmdW5jdGlv
bigpe30sXG5cdFx0dXNlcjogJycsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHdpdGhDcmVkZW50
aWFsczogZmFsc2UsKi9cblx0XHR1cmw6ICcnLFxuXHRcdGRhdGE6ICcnLFxuXHRcdGhlYWRlcnM6
IHtcblx0XHRcdCdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0Jyxcblx0XHRcdCdB
Y2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4
dC94bWwsICovKidcblx0XHR9LFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGZvcm1hdDogZmFsc2Us
XG5cdFx0bWV0aG9kOiAncG9zdCcsXG5cdFx0bGluazogJ2lnbm9yZScsXG5cdFx0aXNTdWNjZXNz
OiBudWxsLFxuXHRcdGVtdWxhdGlvbjogdHJ1ZSxcblx0XHR1cmxFbmNvZGVkOiB0cnVlLFxuXHRc
dGVuY29kaW5nOiAndXRmLTgnLFxuXHRcdGV2YWxTY3JpcHRzOiBmYWxzZSxcblx0XHRldmFsUmVz
cG9uc2U6IGZhbHNlLFxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0bm9DYWNoZTogZmFsc2Vcblx0fSxc
blxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnhociA9IG5ldyBC
cm93c2VyLlJlcXVlc3QoKTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhp
cy5oZWFkZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7XG5cdH0sXG5cblx0b25TdGF0ZUNoYW5n
ZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0aWYgKHhoci5yZWFk
eVN0YXRlICE9IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuO1xuXHRcdHRoaXMucnVubmluZyA9
IGZhbHNlO1xuXHRcdHRoaXMuc3RhdHVzID0gMDtcblx0XHRGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0
aW9uKCl7XG5cdFx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1cztcblx0XHRcdHRoaXMuc3RhdHVz
ID0gKHN0YXR1cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1cztcblx0XHR9LmJpbmQodGhpcykpO1xu
XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBw
b3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdGlmICh0
aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0XHRcdGRlbGV0
ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7dGV4dDogdGhpcy54
aHIucmVzcG9uc2VUZXh0IHx8ICcnLCB4bWw6IHRoaXMueGhyLnJlc3BvbnNlWE1MfTtcblx0XHRp
ZiAodGhpcy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsIHRoaXMuc3RhdHVzKSlcblx0XHRc
dHRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsIHRoaXMucmVzcG9uc2UueG1sKTtcblx0
XHRlbHNlXG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0fSxcblxuXHRpc1N1Y2Nlc3M6IGZ1bmN0
aW9uKCl7XG5cdFx0dmFyIHN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuXHRcdHJldHVybiAoc3RhdHVz
ID49IDIwMCAmJiBzdGF0dXMgPCAzMDApO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gISF0aGlzLnJ1bm5pbmc7XG5cdH0sXG5cblx0cHJvY2Vzc1NjcmlwdHM6
IGZ1bmN0aW9uKHRleHQpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlIHx8ICgv
KGVjbWF8amF2YSlzY3JpcHQvKS50ZXN0KHRoaXMuZ2V0SGVhZGVyKCdDb250ZW50LXR5cGUnKSkp
IHJldHVybiBCcm93c2VyLmV4ZWModGV4dCk7XG5cdFx0cmV0dXJuIHRleHQuc3RyaXBTY3JpcHRz
KHRoaXMub3B0aW9ucy5ldmFsU2NyaXB0cyk7XG5cdH0sXG5cblx0c3VjY2VzczogZnVuY3Rpb24o
dGV4dCwgeG1sKXtcblx0XHR0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKHRleHQp
LCB4bWwpO1xuXHRcdHRoaXMucmVzb2x2ZSh7dGV4dDogdGV4dCwgeG1sOiB4bWx9KTtcblx0fSxc
blxuXHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRl
JywgYXJndW1lbnRzKS5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpLmNhbGxDaGFpbigp
O1xuXHR9LFxuXG5cdGZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5vbkZhaWx1cmUoKTtc
blx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZmFpbHVyZScsIHhocjogdGhpcy54aHJ9KTtcblx0
fSxcblxuXHRvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ2NvbXBs
ZXRlJykuZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpO1xuXHR9LFxuXG5cdGxvYWRzdGFy
dDogZnVuY3Rpb24oZXZlbnQpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZl
bnQsIHRoaXMueGhyXSk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXtcblx0
XHR0aGlzLmZpcmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7XG5cdH0sXG5c
blx0dGltZW91dDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRo
aXMueGhyKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAndGltZW91dCcsIHhocjogdGhpcy54
aHJ9KTtcblx0fSxcblxuXHRzZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR0
aGlzLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRn
ZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1
bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7
XG5cdFx0fS5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHRjaGVjazogZnVuY3Rpb24oKXtcblx0XHRp
ZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRydWU7XG5cdFx0c3dpdGNoICh0aGlzLm9wdGlvbnMu
bGluayl7XG5cdFx0XHRjYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTtc
blx0XHRcdGNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50
cywgdGhpcykpOyByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxc
blxuXHRzZW5kOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHRpZiAoIXRoaXMuY2hlY2sob3B0aW9u
cykpIHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0
aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7XG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1
ZTtcblxuXHRcdHZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpO1xuXHRcdGlmICh0eXBlID09ICdz
dHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9O1xu
XG5cdFx0dmFyIG9sZCA9IHRoaXMub3B0aW9ucztcblx0XHRvcHRpb25zID0gT2JqZWN0LmFwcGVu
ZCh7ZGF0YTogb2xkLmRhdGEsIHVybDogb2xkLnVybCwgbWV0aG9kOiBvbGQubWV0aG9kfSwgb3B0
aW9ucyk7XG5cdFx0dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25z
LnVybCksIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRzd2l0
Y2ggKHR5cGVPZihkYXRhKSl7XG5cdFx0XHRjYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50
LmlkKGRhdGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvYmplY3QnOiBj
YXNlICdoYXNoJzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpO1xuXHRcdH1cblxu
XHRcdGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KXtcblx0XHRcdHZhciBmb3JtYXQgPSAnZm9ybWF0
PScgKyB0aGlzLm9wdGlvbnMuZm9ybWF0O1xuXHRcdFx0ZGF0YSA9IChkYXRhKSA/IGZvcm1hdCAr
ICcmJyArIGRhdGEgOiBmb3JtYXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5lbXVs
YXRpb24gJiYgIVsnZ2V0JywgJ3Bvc3QnXS5jb250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBf
bWV0aG9kID0gJ19tZXRob2Q9JyArIG1ldGhvZDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBfbWV0
aG9kICsgJyYnICsgZGF0YSA6IF9tZXRob2Q7XG5cdFx0XHRtZXRob2QgPSAncG9zdCc7XG5cdFx0
fVxuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy51cmxFbmNvZGVkICYmIFsncG9zdCcsICdwdXQnXS5j
b250YWlucyhtZXRob2QpKXtcblx0XHRcdHZhciBlbmNvZGluZyA9ICh0aGlzLm9wdGlvbnMuZW5j
b2RpbmcpID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJyc7XG5cdFx0
XHR0aGlzLmhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0t
dXJsZW5jb2RlZCcgKyBlbmNvZGluZztcblx0XHR9XG5cblx0XHRpZiAoIXVybCkgdXJsID0gZG9j
dW1lbnQubG9jYXRpb24ucGF0aG5hbWU7XG5cblx0XHR2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxh
c3RJbmRleE9mKCcvJyk7XG5cdFx0aWYgKHRyaW1Qb3NpdGlvbiA+IC0xICYmICh0cmltUG9zaXRp
b24gPSB1cmwuaW5kZXhPZignIycpKSA+IC0xKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHRyaW1Qb3Np
dGlvbik7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpXG5cdFx0XHR1cmwgKz0gKHVy
bC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTtcblxu
XHRcdGlmIChkYXRhICYmIChtZXRob2QgPT0gJ2dldCcgfHwgbWV0aG9kID09ICdkZWxldGUnKSl7
XG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBkYXRh
O1xuXHRcdFx0ZGF0YSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xu
XHRcdGlmIChwcm9ncmVzc1N1cHBvcnQpe1xuXHRcdFx0eGhyLm9ubG9hZHN0YXJ0ID0gdGhpcy5s
b2Fkc3RhcnQuYmluZCh0aGlzKTtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gdGhpcy5wcm9ncmVz
cy5iaW5kKHRoaXMpO1xuXHRcdH1cblxuXHRcdHhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgp
LCB1cmwsIHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9u
cy5wYXNzd29yZCk7XG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAmJiAn
d2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG5c
dFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMp
O1xuXG5cdFx0T2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXtc
blx0XHRcdHRyeSB7XG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xu
XHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBb
a2V5LCB2YWx1ZV0pO1xuXHRcdFx0XHR0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywg
eGhyOiB4aHIsIGV4Y2VwdGlvbjogZX0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0
aWYgKHRoaXMuZ2V0VGhlbmFibGVTdGF0ZSgpICE9PSAncGVuZGluZycpe1xuXHRcdFx0dGhpcy5y
ZXNldFRoZW5hYmxlKHtyZWFzb246ICdzZW5kJ30pO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVu
dCgncmVxdWVzdCcpO1xuXHRcdHhoci5zZW5kKGRhdGEpO1xuXHRcdGlmICghdGhpcy5vcHRpb25z
LmFzeW5jKSB0aGlzLm9uU3RhdGVDaGFuZ2UoKTtcblx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMu
dGltZW91dCkgdGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGlt
ZW91dCwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlv
bigpe1xuXHRcdGlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLnJ1bm5p
bmcgPSBmYWxzZTtcblx0XHR2YXIgeGhyID0gdGhpcy54aHI7XG5cdFx0eGhyLmFib3J0KCk7XG5c
dFx0aWYgKHRoaXMudGltZXIpe1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHRc
dFx0ZGVsZXRlIHRoaXMudGltZXI7XG5cdFx0fVxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2Ug
PSBlbXB0eTtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5v
bmxvYWRzdGFydCA9IGVtcHR5O1xuXHRcdHRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgp
O1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnKTtcblx0XHR0aGlzLnJlamVjdCh7cmVhc29u
OiAnY2FuY2VsJywgeGhyOiB4aHJ9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
dmFyIG1ldGhvZHMgPSB7fTtcblsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRj
aCcsICdoZWFkJywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnLCAnUEFUQ0gnLCAnSEVB
RCddLmVhY2goZnVuY3Rpb24obWV0aG9kKXtcblx0bWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24o
ZGF0YSl7XG5cdFx0dmFyIG9iamVjdCA9IHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fTtc
blx0XHRpZiAoZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIHRo
aXMuc2VuZChvYmplY3QpO1xuXHR9O1xufSk7XG5cblJlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMp
O1xuXG5FbGVtZW50LlByb3BlcnRpZXMuc2VuZCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlv
bnMpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTtcblx0XHRzZW5k
LnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBm
dW5jdGlvbigpe1xuXHRcdHZhciBzZW5kID0gdGhpcy5yZXRyaWV2ZSgnc2VuZCcpO1xuXHRcdGlm
ICghc2VuZCl7XG5cdFx0XHRzZW5kID0gbmV3IFJlcXVlc3Qoe1xuXHRcdFx0XHRkYXRhOiB0aGlz
LCBsaW5rOiAnY2FuY2VsJywgbWV0aG9kOiB0aGlzLmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLCB1
cmw6IHRoaXMuZ2V0KCdhY3Rpb24nKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnN0b3JlKCdzZW5k
Jywgc2VuZCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW5kO1xuXHR9XG5cbn07XG5cbkVsZW1lbnQu
aW1wbGVtZW50KHtcblxuXHRzZW5kOiBmdW5jdGlvbih1cmwpe1xuXHRcdHZhciBzZW5kZXIgPSB0
aGlzLmdldCgnc2VuZCcpO1xuXHRcdHNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8
fCBzZW5kZXIub3B0aW9ucy51cmx9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxu
fSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkhUTUxcblxuZGVzY3JpcHRpb246IEV4
dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9y
IGludGVyYWN0aW5nIHdpdGggSFRNTCByZXNwb25zZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5yZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdXG5cbnByb3ZpZGVzOiBSZXF1
ZXN0LkhUTUxcblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3Moe1xuXG5cdEV4
dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdHVwZGF0ZTogZmFsc2UsXG5cdFx0
YXBwZW5kOiBmYWxzZSxcblx0XHRldmFsU2NyaXB0czogdHJ1ZSxcblx0XHRmaWx0ZXI6IGZhbHNl
LFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24v
eG1sLCB0ZXh0L3htbCwgKi8qJ1xuXHRcdH1cblx0fSxcblxuXHRzdWNjZXNzOiBmdW5jdGlvbih0
ZXh0KXtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJl
c3BvbnNlO1xuXG5cdFx0cmVzcG9uc2UuaHRtbCA9IHRleHQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9u
KHNjcmlwdCl7XG5cdFx0XHRyZXNwb25zZS5qYXZhc2NyaXB0ID0gc2NyaXB0O1xuXHRcdH0pO1xu
XG5cdFx0dmFyIG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xcc1xc
U10qPyk8XFwvYm9keT4vaSk7XG5cdFx0aWYgKG1hdGNoKSByZXNwb25zZS5odG1sID0gbWF0Y2hb
MV07XG5cdFx0dmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9u
c2UuaHRtbCk7XG5cblx0XHRyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzO1xuXHRcdHJl
c3BvbnNlLmVsZW1lbnRzID0gdGVtcC5nZXRFbGVtZW50cyhvcHRpb25zLmZpbHRlciB8fCAnKicp
O1xuXG5cdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxl
bWVudHM7XG5cdFx0aWYgKG9wdGlvbnMudXBkYXRlKXtcblx0XHRcdHZhciB1cGRhdGUgPSBkb2N1
bWVudC5pZChvcHRpb25zLnVwZGF0ZSkuZW1wdHkoKTtcblx0XHRcdGlmIChvcHRpb25zLmZpbHRl
cikgdXBkYXRlLmFkb3B0KHJlc3BvbnNlLmVsZW1lbnRzKTtcblx0XHRcdGVsc2UgdXBkYXRlLnNl
dCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5hcHBlbmQp
e1xuXHRcdFx0dmFyIGFwcGVuZCA9IGRvY3VtZW50LmlkKG9wdGlvbnMuYXBwZW5kKTtcblx0XHRc
dGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChh
cHBlbmQpO1xuXHRcdFx0ZWxzZSBhcHBlbmQuYWRvcHQodGVtcC5nZXRDaGlsZHJlbigpKTtcblx0
XHR9XG5cdFx0aWYgKG9wdGlvbnMuZXZhbFNjcmlwdHMpIEJyb3dzZXIuZXhlYyhyZXNwb25zZS5q
YXZhc2NyaXB0KTtcblxuXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlLnRyZWUsIHJlc3BvbnNl
LmVsZW1lbnRzLCByZXNwb25zZS5odG1sLCByZXNwb25zZS5qYXZhc2NyaXB0KTtcblx0XHR0aGlz
LnJlc29sdmUoe3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50
cywgaHRtbDogcmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0p
O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlByb3BlcnRpZXMubG9hZCA9IHtcblxuXHRzZXQ6IGZ1
bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5nZXQoJ2xvYWQnKS5jYW5jZWwo
KTtcblx0XHRsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9h
ZCcpO1xuXHRcdGlmICghbG9hZCl7XG5cdFx0XHRsb2FkID0gbmV3IFJlcXVlc3QuSFRNTCh7ZGF0
YTogdGhpcywgbGluazogJ2NhbmNlbCcsIHVwZGF0ZTogdGhpcywgbWV0aG9kOiAnZ2V0J30pO1xu
XHRcdFx0dGhpcy5zdG9yZSgnbG9hZCcsIGxvYWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbG9hZDtc
blx0fVxuXG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0bG9hZDogZnVuY3Rpb24oKXtc
blx0XHR0aGlzLmdldCgnbG9hZCcpLnNlbmQoQXJyYXkubGluayhhcmd1bWVudHMsIHtkYXRhOiBU
eXBlLmlzT2JqZWN0LCB1cmw6IFR5cGUuaXNTdHJpbmd9KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFtZTogSlNPTlxuXG5kZXNjcmlwdGlvbjogSlNPTiBl
bmNvZGVyIGFuZCBkZWNvZGVyLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxuU2Vl
QWxzbzogPGh0dHA6Ly93d3cuanNvbi5vcmcvPlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcs
IE51bWJlciwgRnVuY3Rpb25dXG5cbnByb3ZpZGVzOiBKU09OXG5cbi4uLlxuKi9cblxuaWYgKHR5
cGVvZiBKU09OID09ICd1bmRlZmluZWQnKSB0aGlzLkpTT04gPSB7fTtcblxuXG5cbihmdW5jdGlv
bigpe1xuXG52YXIgc3BlY2lhbCA9IHsnXFxiJzogJ1xcXFxiJywgJ1xcdCc6ICdcXFxcdCcsICdc
XG4nOiAnXFxcXG4nLCAnXFxmJzogJ1xcXFxmJywgJ1xccic6ICdcXFxccicsICdcIicgOiAnXFxc
XFwiJywgJ1xcXFwnOiAnXFxcXFxcXFwnfTtcblxudmFyIGVzY2FwZSA9IGZ1bmN0aW9uKGNocil7
XG5cdHJldHVybiBzcGVjaWFsW2Nocl0gfHwgJ1xcXFx1JyArICgnMDAwMCcgKyBjaHIuY2hhckNv
ZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbn07XG5cbkpTT04udmFsaWRhdGUgPSBm
dW5jdGlvbihzdHJpbmcpe1xuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXCg/OltcIlxc
XFxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLlxuXHRcdFx0XHRcdHJlcGxhY2Uo
L1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8o
PzpbZUVdWytcXC1dP1xcZCspPy9nLCAnXScpLlxuXHRcdFx0XHRcdHJlcGxhY2UoLyg/Ol58Onws
KSg/OlxccypcXFspKy9nLCAnJyk7XG5cblx0cmV0dXJuICgvXltcXF0sOnt9XFxzXSokLykudGVz
dChzdHJpbmcpO1xufTtcblxuSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9u
KG9iail7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xufSA6IGZ1bmN0aW9uKG9iail7
XG5cdGlmIChvYmogJiYgb2JqLnRvSlNPTikgb2JqID0gb2JqLnRvSlNPTigpO1xuXG5cdHN3aXRj
aCAodHlwZU9mKG9iaikpe1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gJ1wiJyAr
IG9iai5yZXBsYWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInO1xuXHRc
dGNhc2UgJ2FycmF5Jzpcblx0XHRcdHJldHVybiAnWycgKyBvYmoubWFwKEpTT04uZW5jb2RlKS5j
bGVhbigpICsgJ10nO1xuXHRcdGNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOlxuXHRcdFx0dmFy
IHN0cmluZyA9IFtdO1xuXHRcdFx0T2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5
KXtcblx0XHRcdFx0dmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSk7XG5cdFx0XHRcdGlmIChq
c29uKSBzdHJpbmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7XG5cdFx0XHR9
KTtcblx0XHRcdHJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7XG5cdFx0Y2FzZSAnbnVtYmVyJzog
Y2FzZSAnYm9vbGVhbic6IHJldHVybiAnJyArIG9iajtcblx0XHRjYXNlICdudWxsJzogcmV0dXJu
ICdudWxsJztcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuSlNPTi5zZWN1cmUgPSB0cnVl
O1xuXG5cbkpTT04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpe1xuXHRpZiAoIXN0
cmluZyB8fCB0eXBlT2Yoc3RyaW5nKSAhPSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cblx0aWYg
KHNlY3VyZSA9PSBudWxsKSBzZWN1cmUgPSBKU09OLnNlY3VyZTtcblx0aWYgKHNlY3VyZSl7XG5c
dFx0aWYgKEpTT04ucGFyc2UpIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG5cdFx0aWYgKCFK
U09OLnZhbGlkYXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVj
b2RlIHRoZSBpbnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBz
ZWN1cmUuJyk7XG5cdH1cblxuXHRyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpO1xufTtc
blxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBSZXF1ZXN0LkpTT05cblxuZGVzY3JpcHRpb246
IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMg
Zm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1JlcXVlc3QsIEpTT05dXG5cbnByb3ZpZGVzOiBSZXF1
ZXN0LkpTT05cblxuLi4uXG4qL1xuXG5SZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3Moe1xuXG5cdEV4
dGVuZHM6IFJlcXVlc3QsXG5cblx0b3B0aW9uczoge1xuXHRcdC8qb25FcnJvcjogZnVuY3Rpb24o
dGV4dCwgZXJyb3Ipe30sKi9cblx0XHRzZWN1cmU6IHRydWVcblx0fSxcblxuXHRpbml0aWFsaXpl
OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnBhcmVudChvcHRpb25zKTtcblx0XHRPYmpl
Y3QuYXBwZW5kKHRoaXMuaGVhZGVycywge1xuXHRcdFx0J0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9q
c29uJyxcblx0XHRcdCdYLVJlcXVlc3QnOiAnSlNPTidcblx0XHR9KTtcblx0fSxcblxuXHRzdWNj
ZXNzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHR2YXIganNvbjtcblx0XHR0cnkge1xuXHRcdFx0anNv
biA9IHRoaXMucmVzcG9uc2UuanNvbiA9IEpTT04uZGVjb2RlKHRleHQsIHRoaXMub3B0aW9ucy5z
ZWN1cmUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKXtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdlcnJv
cicsIFt0ZXh0LCBlcnJvcl0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoanNvbiA9
PSBudWxsKXtcblx0XHRcdHRoaXMuZmFpbHVyZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlz
Lm9uU3VjY2Vzcyhqc29uLCB0ZXh0KTtcblx0XHRcdHRoaXMucmVzb2x2ZSh7anNvbjoganNvbiwg
dGV4dDogdGV4dH0pO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLypcbi0tLVxuXG5uYW1lOiBDb29r
aWVcblxuZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0
aW5nIGJyb3dzZXIgQ29va2llcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNy
ZWRpdHM6XG4gIC0gQmFzZWQgb24gdGhlIGZ1bmN0aW9ucyBieSBQZXRlci1QYXVsIEtvY2ggKGh0
dHA6Ly9xdWlya3Ntb2RlLm9yZykuXG5cbnJlcXVpcmVzOiBbT3B0aW9ucywgQnJvd3Nlcl1cblxu
cHJvdmlkZXM6IENvb2tpZVxuXG4uLi5cbiovXG5cbnZhciBDb29raWUgPSBuZXcgQ2xhc3Moe1xu
XG5cdEltcGxlbWVudHM6IE9wdGlvbnMsXG5cblx0b3B0aW9uczoge1xuXHRcdHBhdGg6ICcvJyxc
blx0XHRkb21haW46IGZhbHNlLFxuXHRcdGR1cmF0aW9uOiBmYWxzZSxcblx0XHRzZWN1cmU6IGZh
bHNlLFxuXHRcdGRvY3VtZW50OiBkb2N1bWVudCxcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0aHR0
cE9ubHk6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oa2V5LCBvcHRpb25z
KXtcblx0XHR0aGlzLmtleSA9IGtleTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5c
dH0sXG5cblx0d3JpdGU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmVu
Y29kZSkgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHRcdGlmICh0aGlzLm9w
dGlvbnMuZG9tYWluKSB2YWx1ZSArPSAnOyBkb21haW49JyArIHRoaXMub3B0aW9ucy5kb21haW47
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5wYXRoKSB2YWx1ZSArPSAnOyBwYXRoPScgKyB0aGlzLm9w
dGlvbnMucGF0aDtcblx0XHRpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXtcblx0XHRcdHZhciBk
YXRlID0gbmV3IERhdGUoKTtcblx0XHRcdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRo
aXMub3B0aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXHRcdFx0dmFsdWUg
Kz0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodGhp
cy5vcHRpb25zLnNlY3VyZSkgdmFsdWUgKz0gJzsgc2VjdXJlJztcblx0XHRpZiAodGhpcy5vcHRp
b25zLmh0dHBPbmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7XG5cdFx0dGhpcy5vcHRpb25zLmRv
Y3VtZW50LmNvb2tpZSA9IHRoaXMua2V5ICsgJz0nICsgdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVhZDogZnVuY3Rpb24oKXtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlv
bnMuZG9jdW1lbnQuY29va2llLm1hdGNoKCcoPzpefDspXFxcXHMqJyArIHRoaXMua2V5LmVzY2Fw
ZVJlZ0V4cCgpICsgJz0oW147XSopJyk7XG5cdFx0cmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklD
b21wb25lbnQodmFsdWVbMV0pIDogbnVsbDtcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigp
e1xuXHRcdG5ldyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25z
LCB7ZHVyYXRpb246IC0xfSkpLndyaXRlKCcnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59
KTtcblxuQ29va2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7XG5cdHJl
dHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykud3JpdGUodmFsdWUpO1xufTtcblxuQ29va2ll
LnJlYWQgPSBmdW5jdGlvbihrZXkpe1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTtc
bn07XG5cbkNvb2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXtcblx0cmV0dXJu
IG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7XG59O1xuXG4vKlxuLS0tXG5cbm5h
bWU6IERPTVJlYWR5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyB0aGUgY3VzdG9tIGV2ZW50IGRv
bXJlYWR5LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtCcm93
c2VyLCBFbGVtZW50LCBFbGVtZW50LkV2ZW50XVxuXG5wcm92aWRlczogW0RPTVJlYWR5LCBEb21S
ZWFkeV1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7XG5cbnZhciBy
ZWFkeSxcblx0bG9hZGVkLFxuXHRjaGVja3MgPSBbXSxcblx0c2hvdWxkUG9sbCxcblx0dGltZXIs
XG5cdHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbnZhciBk
b21yZWFkeSA9IGZ1bmN0aW9uKCl7XG5cdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdGlmICghcmVh
ZHkpe1xuXHRcdEJyb3dzZXIubG9hZGVkID0gcmVhZHkgPSB0cnVlO1xuXHRcdGRvY3VtZW50LnJl
bW92ZUxpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVy
KCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spO1xuXHRcdGRvY3VtZW50LmZpcmVFdmVudCgnZG9t
cmVhZHknKTtcblx0XHR3aW5kb3cuZmlyZUV2ZW50KCdkb21yZWFkeScpO1xuXHR9XG5cdC8vIGNs
ZWFudXAgc2NvcGUgdmFyc1xuXHRkb2N1bWVudCA9IHdpbmRvdyA9IHRlc3RFbGVtZW50ID0gbnVs
bDtcbn07XG5cbnZhciBjaGVjayA9IGZ1bmN0aW9uKCl7XG5cdGZvciAodmFyIGkgPSBjaGVja3Mu
bGVuZ3RoOyBpLS07KSBpZiAoY2hlY2tzW2ldKCkpe1xuXHRcdGRvbXJlYWR5KCk7XG5cdFx0cmV0
dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHBvbGwgPSBmdW5jdGlv
bigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0
VGltZW91dChwb2xsLCAxMCk7XG59O1xuXG5kb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVu
dExvYWRlZCcsIGRvbXJlYWR5KTtcblxuLyo8bHRJRTg+Ki9cbi8vIGRvU2Nyb2xsIHRlY2huaXF1
ZSBieSBEaWVnbyBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExv
YWRlZC9cbi8vIHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBu
b3QgcmVhZHksIG9ubHkgaW4gdGhlIHRvcCB3aW5kb3dcbnZhciBkb1Njcm9sbFdvcmtzID0gZnVu
Y3Rpb24oKXtcblx0dHJ5IHtcblx0XHR0ZXN0RWxlbWVudC5kb1Njcm9sbCgpO1xuXHRcdHJldHVy
biB0cnVlO1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmYWxzZTtcbn07XG4vLyBJZiBkb1Nj
cm9sbCB3b3JrcyBhbHJlYWR5LCBpdCBjYW4ndCBiZSB1c2VkIHRvIGRldGVybWluZSBkb21yZWFk
eVxuLy8gICBlLmcuIGluIGFuIGlmcmFtZVxuaWYgKHRlc3RFbGVtZW50LmRvU2Nyb2xsICYmICFk
b1Njcm9sbFdvcmtzKCkpe1xuXHRjaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTtcblx0c2hvdWxk
UG9sbCA9IHRydWU7XG59XG4vKjwvbHRJRTg+Ki9cblxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUp
IGNoZWNrcy5wdXNoKGZ1bmN0aW9uKCl7XG5cdHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3Rh
dGU7XG5cdHJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7
XG59KTtcblxuaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5h
ZGRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcbmVsc2Ugc2hvdWxkUG9sbCA9
IHRydWU7XG5cbmlmIChzaG91bGRQb2xsKSBwb2xsKCk7XG5cbkVsZW1lbnQuRXZlbnRzLmRvbXJl
YWR5ID0ge1xuXHRvbkFkZDogZnVuY3Rpb24oZm4pe1xuXHRcdGlmIChyZWFkeSkgZm4uY2FsbCh0
aGlzKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIHRoYXQgZG9tcmVhZHkgZmlyZXMgYmVmb3Jl
IGxvYWRcbkVsZW1lbnQuRXZlbnRzLmxvYWQgPSB7XG5cdGJhc2U6ICdsb2FkJyxcblx0b25BZGQ6
IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAobG9hZGVkICYmIHRoaXMgPT0gd2luZG93KSBmbi5jYWxs
KHRoaXMpO1xuXHR9LFxuXHRjb25kaXRpb246IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMgPT0g
d2luZG93KXtcblx0XHRcdGRvbXJlYWR5KCk7XG5cdFx0XHRkZWxldGUgRWxlbWVudC5FdmVudHMu
bG9hZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbi8vIFRoaXMgaXMgYmFz
ZWQgb24gdGhlIGN1c3RvbSBsb2FkIGV2ZW50XG53aW5kb3cuYWRkRXZlbnQoJ2xvYWQnLCBmdW5j
dGlvbigpe1xuXHRsb2FkZWQgPSB0cnVlO1xufSk7XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xu
IgorbW9kdWxlLmV4cG9ydHMgPSAiLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29y
ay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAy
MDA2LTIwMTcgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0LykuKi8gXG4v
KiFcbldlYiBCdWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVyL2U0MjZhOWFl
NzE2N2M1ODA3YjE3M2Q1ZGVmZjY3M2ZjXG4qL1xuLypcbi0tLVxuXG5uYW1lOiBDb3JlXG5cbmRl
c2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBs
aWNlbnNlLlxuXG5jb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFBy
b2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS5cblxuYXV0aG9yczogVGhlIE1v
b1Rvb2xzIHByb2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZlbG9wZXJzLylc
blxuaW5zcGlyYXRpb246XG4gIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgW0Jh
c2UuanNdKGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9iYXNlLykgQ29w
eXJpZ2h0IChjKSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGljZW5zZS5waHAp
XG4gIC0gU29tZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUuanNdKGh0dHA6
Ly9wcm90b3R5cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29u
LCBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5z
ZS5waHApXG5cbnByb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVPZiwgaW5zdGFu
Y2VPZiwgTmF0aXZlXVxuXG4uLi5cbiovXG4vKiEgTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZy
YW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0
IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1p
Y2FuZS8pLiovXG4oZnVuY3Rpb24oKXtcblxudGhpcy5Nb29Ub29scyA9IHtcblx0dmVyc2lvbjog
JzEuNi4wJyxcblx0YnVpbGQ6ICc1Mjk0MjI4NzJhZGZmZjQwMWI5MDFiOGI2YzdjYTUxMTRlZTk1
ZTJiJ1xufTtcblxuLy8gdHlwZU9mLCBpbnN0YW5jZU9mXG5cbnZhciB0eXBlT2YgPSB0aGlzLnR5
cGVPZiA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gJ251bGwn
O1xuXHRpZiAoaXRlbS4kZmFtaWx5ICE9IG51bGwpIHJldHVybiBpdGVtLiRmYW1pbHkoKTtcblxu
XHRpZiAoaXRlbS5ub2RlTmFtZSl7XG5cdFx0aWYgKGl0ZW0ubm9kZVR5cGUgPT0gMSkgcmV0dXJu
ICdlbGVtZW50Jztcblx0XHRpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4gKC9cXFMvKS50
ZXN0KGl0ZW0ubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7XG5cdH0gZWxz
ZSBpZiAodHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInKXtcblx0XHRpZiAoJ2NhbGxlZScg
aW4gaXRlbSkgcmV0dXJuICdhcmd1bWVudHMnO1xuXHRcdGlmICgnaXRlbScgaW4gaXRlbSkgcmV0
dXJuICdjb2xsZWN0aW9uJztcblx0fVxuXG5cdHJldHVybiB0eXBlb2YgaXRlbTtcbn07XG5cbnZh
ciBpbnN0YW5jZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwgb2JqZWN0KXtc
blx0aWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgY29uc3RydWN0b3IgPSBp
dGVtLiRjb25zdHJ1Y3RvciB8fCBpdGVtLmNvbnN0cnVjdG9yO1xuXHR3aGlsZSAoY29uc3RydWN0
b3Ipe1xuXHRcdGlmIChjb25zdHJ1Y3RvciA9PT0gb2JqZWN0KSByZXR1cm4gdHJ1ZTtcblx0XHRj
b25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnBhcmVudDtcblx0fVxuXHQvKjxsdElFOD4qL1xuXHRp
ZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTtcblx0Lyo8L2x0SUU4PiovXG5c
dHJldHVybiBpdGVtIGluc3RhbmNlb2Ygb2JqZWN0O1xufTtcblxudmFyIGhhc093blByb3BlcnR5
ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyo8bHRJRTg+Ki9cbnZhciBl
bnVtZXJhYmxlcyA9IHRydWU7XG5mb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0pIGVudW1lcmFi
bGVzID0gbnVsbDtcbmlmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hhc093blByb3Bl
cnR5JywgJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScs
ICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddO1xuZnVuY3Rpb24g
Zm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZm4sIGJpbmQpe1xuXHRpZiAoZW51
bWVyYWJsZXMpIGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTspe1xuXHRcdHZh
ciBrID0gZW51bWVyYWJsZXNbaV07XG5cdFx0Ly8gc2lnbmF0dXJlIGhhcyBrZXktdmFsdWUsIHNv
IG92ZXJsb2FkU2V0dGVyIGNhbiBkaXJlY3RseSBwYXNzIHRoZVxuXHRcdC8vIG1ldGhvZCBmdW5j
dGlvbiwgd2l0aG91dCBzd2FwcGluZyBhcmd1bWVudHMuXG5cdFx0aWYgKGhhc093blByb3BlcnR5
LmNhbGwob2JqZWN0LCBrKSkgZm4uY2FsbChiaW5kLCBrLCBvYmplY3Rba10pO1xuXHR9XG59XG4v
KjwvbHRJRTg+Ki9cblxuLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmdcblxudmFyIEZ1bmN0aW9uID0g
dGhpcy5GdW5jdGlvbjtcblxuRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0dGVyID0gZnVu
Y3Rpb24odXNlUGx1cmFsKXtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRyZXR1cm4gZnVuY3Rpb24o
YSwgYil7XG5cdFx0aWYgKGEgPT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHVzZVBsdXJh
bCB8fCB0eXBlb2YgYSAhPSAnc3RyaW5nJyl7XG5cdFx0XHRmb3IgKHZhciBrIGluIGEpIHNlbGYu
Y2FsbCh0aGlzLCBrLCBhW2tdKTtcblx0XHRcdC8qPGx0SUU4PiovXG5cdFx0XHRmb3JFYWNoT2Jq
ZWN0RW51bWJlcmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0
XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5jYWxsKHRoaXMsIGEsIGIpO1xuXHRcdH1cblx0XHRyZXR1
cm4gdGhpcztcblx0fTtcbn07XG5cbkZ1bmN0aW9uLnByb3RvdHlwZS5vdmVybG9hZEdldHRlciA9
IGZ1bmN0aW9uKHVzZVBsdXJhbCl7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cmV0dXJuIGZ1bmN0
aW9uKGEpe1xuXHRcdHZhciBhcmdzLCByZXN1bHQ7XG5cdFx0aWYgKHR5cGVvZiBhICE9ICdzdHJp
bmcnKSBhcmdzID0gYTtcblx0XHRlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgYXJncyA9
IGFyZ3VtZW50cztcblx0XHRlbHNlIGlmICh1c2VQbHVyYWwpIGFyZ3MgPSBbYV07XG5cdFx0aWYg
KGFyZ3Mpe1xuXHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFy
Z3MubGVuZ3RoOyBpKyspIHJlc3VsdFthcmdzW2ldXSA9IHNlbGYuY2FsbCh0aGlzLCBhcmdzW2ld
KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMsIGEpO1xuXHRc
dH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmV4
dGVuZCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuXHR0aGlzW2tleV0gPSB2YWx1ZTtcbn0ub3Zl
cmxvYWRTZXR0ZXIoKTtcblxuRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9IGZ1bmN0aW9u
KGtleSwgdmFsdWUpe1xuXHR0aGlzLnByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59Lm92ZXJsb2Fk
U2V0dGVyKCk7XG5cbi8vIEZyb21cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
O1xuXG5BcnJheS5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdGlmIChpdGVtID09IG51bGwp
IHJldHVybiBbXTtcblx0cmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlb2Yg
aXRlbSAhPSAnc3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8gaXRlbSA6IHNs
aWNlLmNhbGwoaXRlbSkgOiBbaXRlbV07XG59O1xuXG5GdW5jdGlvbi5jb252ZXJ0ID0gZnVuY3Rp
b24oaXRlbSl7XG5cdHJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicpID8gaXRlbSA6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIGl0ZW07XG5cdH07XG59O1xuXG5cbk51bWJlci5jb252
ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KGl0ZW0pO1xu
XHRyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7XG59O1xuXG5TdHJpbmcu
Y29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRyZXR1cm4gaXRlbSArICcnO1xufTtcblxuXG5c
bkZ1bmN0aW9uLmZyb20gPSBGdW5jdGlvbi5jb252ZXJ0O1xuTnVtYmVyLmZyb20gPSBOdW1iZXIu
Y29udmVydDtcblN0cmluZy5mcm9tID0gU3RyaW5nLmNvbnZlcnQ7XG5cbi8vIGhpZGUsIHByb3Rl
Y3RcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRoaWRlOiBmdW5jdGlvbigpe1xuXHRcdHRo
aXMuJGhpZGRlbiA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJvdGVjdDog
ZnVuY3Rpb24oKXtcblx0XHR0aGlzLiRwcm90ZWN0ZWQgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG4vLyBUeXBlXG5cbnZhciBUeXBlID0gdGhpcy5UeXBlID0gZnVuY3Rp
b24obmFtZSwgb2JqZWN0KXtcblx0aWYgKG5hbWUpe1xuXHRcdHZhciBsb3dlciA9IG5hbWUudG9M
b3dlckNhc2UoKTtcblx0XHR2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRy
ZXR1cm4gKHR5cGVPZihpdGVtKSA9PSBsb3dlcik7XG5cdFx0fTtcblxuXHRcdFR5cGVbJ2lzJyAr
IG5hbWVdID0gdHlwZUNoZWNrO1xuXHRcdGlmIChvYmplY3QgIT0gbnVsbCl7XG5cdFx0XHRvYmpl
Y3QucHJvdG90eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXtcblx0XHRcdFx0cmV0dXJuIGxvd2Vy
O1xuXHRcdFx0fSkuaGlkZSgpO1xuXHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9iamVjdCA9
PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRvYmplY3QuZXh0ZW5kKHRoaXMpO1xuXHRvYmplY3Qu
JGNvbnN0cnVjdG9yID0gVHlwZTtcblx0b2JqZWN0LnByb3RvdHlwZS4kY29uc3RydWN0b3IgPSBv
YmplY3Q7XG5cblx0cmV0dXJuIG9iamVjdDtcbn07XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5w
cm90b3R5cGUudG9TdHJpbmc7XG5cblR5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24oaXRlbSl7
XG5cdHJldHVybiAoaXRlbSAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVy
JyAmJiB0b1N0cmluZy5jYWxsKGl0ZW0pICE9ICdbb2JqZWN0IEZ1bmN0aW9uXScgKTtcbn07XG5c
bnZhciBob29rcyA9IHt9O1xuXG52YXIgaG9va3NPZiA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdHZh
ciB0eXBlID0gdHlwZU9mKG9iamVjdC5wcm90b3R5cGUpO1xuXHRyZXR1cm4gaG9va3NbdHlwZV0g
fHwgKGhvb2tzW3R5cGVdID0gW10pO1xufTtcblxudmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKG5h
bWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9kLiRoaWRkZW4pIHJldHVybjtcblxu
XHR2YXIgaG9va3MgPSBob29rc09mKHRoaXMpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgaG9v
a3MubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBob29rID0gaG9va3NbaV07XG5cdFx0aWYgKHR5cGVP
Zihob29rKSA9PSAndHlwZScpIGltcGxlbWVudC5jYWxsKGhvb2ssIG5hbWUsIG1ldGhvZCk7XG5c
dFx0ZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTtcblx0fVxuXG5cdHZhciBwcmV2
aW91cyA9IHRoaXMucHJvdG90eXBlW25hbWVdO1xuXHRpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAh
cHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7XG5cblx0
aWYgKHRoaXNbbmFtZV0gPT0gbnVsbCAmJiB0eXBlT2YobWV0aG9kKSA9PSAnZnVuY3Rpb24nKSBl
eHRlbmQuY2FsbCh0aGlzLCBuYW1lLCBmdW5jdGlvbihpdGVtKXtcblx0XHRyZXR1cm4gbWV0aG9k
LmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG5cdH0pO1xufTtcblxudmFy
IGV4dGVuZCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7XG5cdGlmIChtZXRob2QgJiYgbWV0aG9k
LiRoaWRkZW4pIHJldHVybjtcblx0dmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTtcblx0aWYgKHBy
ZXZpb3VzID09IG51bGwgfHwgIXByZXZpb3VzLiRwcm90ZWN0ZWQpIHRoaXNbbmFtZV0gPSBtZXRo
b2Q7XG59O1xuXG5UeXBlLmltcGxlbWVudCh7XG5cblx0aW1wbGVtZW50OiBpbXBsZW1lbnQub3Zl
cmxvYWRTZXR0ZXIoKSxcblxuXHRleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRlcigpLFxuXG5c
dGFsaWFzOiBmdW5jdGlvbihuYW1lLCBleGlzdGluZyl7XG5cdFx0aW1wbGVtZW50LmNhbGwodGhp
cywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTtcblx0fS5vdmVybG9hZFNldHRlcigp
LFxuXG5cdG1pcnJvcjogZnVuY3Rpb24oaG9vayl7XG5cdFx0aG9va3NPZih0aGlzKS5wdXNoKGhv
b2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5uZXcgVHlwZSgnVHlwZScsIFR5
cGUpO1xuXG4vLyBEZWZhdWx0IFR5cGVzXG5cbnZhciBmb3JjZSA9IGZ1bmN0aW9uKG5hbWUsIG9i
amVjdCwgbWV0aG9kcyl7XG5cdHZhciBpc1R5cGUgPSAob2JqZWN0ICE9IE9iamVjdCksXG5cdFx0
cHJvdG90eXBlID0gb2JqZWN0LnByb3RvdHlwZTtcblxuXHRpZiAoaXNUeXBlKSBvYmplY3QgPSBu
ZXcgVHlwZShuYW1lLCBvYmplY3QpO1xuXG5cdGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9kcy5s
ZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdHZhciBrZXkgPSBtZXRob2RzW2ldLFxuXHRcdFx0Z2Vu
ZXJpYyA9IG9iamVjdFtrZXldLFxuXHRcdFx0cHJvdG8gPSBwcm90b3R5cGVba2V5XTtcblxuXHRc
dGlmIChnZW5lcmljKSBnZW5lcmljLnByb3RlY3QoKTtcblx0XHRpZiAoaXNUeXBlICYmIHByb3Rv
KSBvYmplY3QuaW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTtcblx0fVxuXG5cdGlmIChp
c1R5cGUpe1xuXHRcdHZhciBtZXRob2RzRW51bWVyYWJsZSA9IHByb3RvdHlwZS5wcm9wZXJ0eUlz
RW51bWVyYWJsZShtZXRob2RzWzBdKTtcblx0XHRvYmplY3QuZm9yRWFjaE1ldGhvZCA9IGZ1bmN0
aW9uKGZuKXtcblx0XHRcdGlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFyIGkgPSAwLCBs
ID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0XHRmbi5jYWxsKHByb3RvdHlw
ZSwgcHJvdG90eXBlW21ldGhvZHNbaV1dLCBtZXRob2RzW2ldKTtcblx0XHRcdH1cblx0XHRcdGZv
ciAodmFyIGtleSBpbiBwcm90b3R5cGUpIGZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVba2V5
XSwga2V5KTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlO1xufTtcblxuZm9yY2UoJ1N0
cmluZycsIFN0cmluZywgW1xuXHQnY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29uY2F0JywgJ2Nv
bnRhaW5zJywgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVvdGUnLCAncmVw
bGFjZScsICdzZWFyY2gnLFxuXHQnc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywgJ3N1YnN0cmlu
ZycsICd0cmltJywgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJ1xuXSkoJ0FycmF5JywgQXJy
YXksIFtcblx0J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxp
Y2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsXG5cdCdpbmRleE9mJywg
J2xhc3RJbmRleE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21hcCcsICdzb21l
JywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucydcbl0pKCdOdW1iZXInLCBOdW1i
ZXIsIFtcblx0J3RvRXhwb25lbnRpYWwnLCAndG9GaXhlZCcsICd0b0xvY2FsZVN0cmluZycsICd0
b1ByZWNpc2lvbidcbl0pKCdGdW5jdGlvbicsIEZ1bmN0aW9uLCBbXG5cdCdhcHBseScsICdjYWxs
JywgJ2JpbmQnXG5dKSgnUmVnRXhwJywgUmVnRXhwLCBbXG5cdCdleGVjJywgJ3Rlc3QnXG5dKSgn
T2JqZWN0JywgT2JqZWN0LCBbXG5cdCdjcmVhdGUnLCAnZGVmaW5lUHJvcGVydHknLCAnZGVmaW5l
UHJvcGVydGllcycsICdrZXlzJyxcblx0J2dldFByb3RvdHlwZU9mJywgJ2dldE93blByb3BlcnR5
RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyxcblx0J3ByZXZlbnRFeHRlbnNpb25z
JywgJ2lzRXh0ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScsICdpc0Zyb3pl
bidcbl0pKCdEYXRlJywgRGF0ZSwgWydub3cnXSk7XG5cbk9iamVjdC5leHRlbmQgPSBleHRlbmQu
b3ZlcmxvYWRTZXR0ZXIoKTtcblxuRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9uKCl7XG5cdHJl
dHVybiArKG5ldyBEYXRlKTtcbn0pO1xuXG5uZXcgVHlwZSgnQm9vbGVhbicsIEJvb2xlYW4pO1xu
XG4vLyBmaXhlcyBOYU4gcmV0dXJuaW5nIGFzIE51bWJlclxuXG5OdW1iZXIucHJvdG90eXBlLiRm
YW1pbHkgPSBmdW5jdGlvbigpe1xuXHRyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAnbnVtYmVyJyA6
ICdudWxsJztcbn0uaGlkZSgpO1xuXG4vLyBOdW1iZXIucmFuZG9tXG5cbk51bWJlci5leHRlbmQo
J3JhbmRvbScsIGZ1bmN0aW9uKG1pbiwgbWF4KXtcblx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5y
YW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59KTtcblxuLy8gZm9yRWFjaCwgZWFj
aCwga2V5c1xuXG5BcnJheS5pbXBsZW1lbnQoe1xuXG5cdC8qPCFFUzU+Ki9cblx0Zm9yRWFjaDog
ZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7
IGkgPCBsOyBpKyspe1xuXHRcdFx0aWYgKGkgaW4gdGhpcykgZm4uY2FsbChiaW5kLCB0aGlzW2ld
LCBpLCB0aGlzKTtcblx0XHR9XG5cdH0sXG5cdC8qPC8hRVM1PiovXG5cblx0ZWFjaDogZnVuY3Rp
b24oZm4sIGJpbmQpe1xuXHRcdEFycmF5LmZvckVhY2godGhpcywgZm4sIGJpbmQpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRrZXlzOiBmdW5j
dGlvbihvYmplY3Qpe1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0Zm9yICh2YXIgayBpbiBvYmpl
Y3Qpe1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkga2V5cy5wdXNo
KGspO1xuXHRcdH1cblx0XHQvKjxsdElFOD4qL1xuXHRcdGZvckVhY2hPYmplY3RFbnVtYmVyYWJs
ZUtleShvYmplY3QsIGZ1bmN0aW9uKGspe1xuXHRcdFx0a2V5cy5wdXNoKGspO1xuXHRcdH0pO1xu
XHRcdC8qPC9sdElFOD4qL1xuXHRcdHJldHVybiBrZXlzO1xuXHR9LFxuXG5cdGZvckVhY2g6IGZ1
bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpe1xuXHRcdE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFj
aChmdW5jdGlvbihrZXkpe1xuXHRcdFx0Zm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBv
YmplY3QpO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5PYmplY3QuZWFjaCA9IE9iamVjdC5mb3JF
YWNoO1xuXG5cbi8vIEFycmF5ICYgT2JqZWN0IGNsb25pbmcsIE9iamVjdCBtZXJnaW5nIGFuZCBh
cHBlbmRpbmdcblxudmFyIGNsb25lT2YgPSBmdW5jdGlvbihpdGVtKXtcblx0c3dpdGNoICh0eXBl
T2YoaXRlbSkpe1xuXHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGl0ZW0uY2xvbmUoKTtcblx0XHRj
YXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pO1xuXHRcdGRlZmF1bHQ6IHJl
dHVybiBpdGVtO1xuXHR9XG59O1xuXG5BcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywgZnVuY3Rpb24o
KXtcblx0dmFyIGkgPSB0aGlzLmxlbmd0aCwgY2xvbmUgPSBuZXcgQXJyYXkoaSk7XG5cdHdoaWxl
IChpLS0pIGNsb25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTtcblx0cmV0dXJuIGNsb25lO1xufSk7
XG5cbnZhciBtZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50KXtcblx0c3dp
dGNoICh0eXBlT2YoY3VycmVudCkpe1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRpZiAodHlw
ZU9mKHNvdXJjZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJjZVtrZXldLCBj
dXJyZW50KTtcblx0XHRcdGVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUoY3VycmVudCk7
XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0gY3VycmVudC5j
bG9uZSgpOyBicmVhaztcblx0XHRkZWZhdWx0OiBzb3VyY2Vba2V5XSA9IGN1cnJlbnQ7XG5cdH1c
blx0cmV0dXJuIHNvdXJjZTtcbn07XG5cbk9iamVjdC5leHRlbmQoe1xuXG5cdG1lcmdlOiBmdW5j
dGlvbihzb3VyY2UsIGssIHYpe1xuXHRcdGlmICh0eXBlT2YoaykgPT0gJ3N0cmluZycpIHJldHVy
biBtZXJnZU9uZShzb3VyY2UsIGssIHYpO1xuXHRcdGZvciAodmFyIGkgPSAxLCBsID0gYXJndW1l
bnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgb2JqZWN0ID0gYXJndW1lbnRzW2ld
O1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNlLCBrZXksIG9i
amVjdFtrZXldKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxuXHRjbG9uZTog
ZnVuY3Rpb24ob2JqZWN0KXtcblx0XHR2YXIgY2xvbmUgPSB7fTtcblx0XHRmb3IgKHZhciBrZXkg
aW4gb2JqZWN0KSBjbG9uZVtrZXldID0gY2xvbmVPZihvYmplY3Rba2V5XSk7XG5cdFx0cmV0dXJu
IGNsb25lO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24ob3JpZ2luYWwpe1xuXHRcdGZvciAo
dmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIg
ZXh0ZW5kZWQgPSBhcmd1bWVudHNbaV0gfHwge307XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gZXh0
ZW5kZWQpIG9yaWdpbmFsW2tleV0gPSBleHRlbmRlZFtrZXldO1xuXHRcdH1cblx0XHRyZXR1cm4g
b3JpZ2luYWw7XG5cdH1cblxufSk7XG5cbi8vIE9iamVjdC1sZXNzIHR5cGVzXG5cblsnT2JqZWN0
JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1bWVudHMnXS5l
YWNoKGZ1bmN0aW9uKG5hbWUpe1xuXHRuZXcgVHlwZShuYW1lKTtcbn0pO1xuXG4vLyBVbmlxdWUg
SURcblxudmFyIFVJRCA9IERhdGUubm93KCk7XG5cblN0cmluZy5leHRlbmQoJ3VuaXF1ZUlEJywg
ZnVuY3Rpb24oKXtcblx0cmV0dXJuIChVSUQrKykudG9TdHJpbmcoMzYpO1xufSk7XG5cblxuXG59
KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEFycmF5XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBB
cnJheSBQcm90b3R5cGVzIGxpa2UgZWFjaCwgY29udGFpbnMsIGFuZCBlcmFzZS5cblxubGljZW5z
ZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVzOiBbVHlwZV1cblxucHJvdmlkZXM6IEFy
cmF5XG5cbi4uLlxuKi9cblxuQXJyYXkuaW1wbGVtZW50KHtcblxuXHQvKjwhRVM1PiovXG5cdGV2
ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxl
bmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgIWZuLmNh
bGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0
dXJuIHRydWU7XG5cdH0sXG5cblx0ZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFy
IHJlc3VsdHMgPSBbXTtcblx0XHRmb3IgKHZhciB2YWx1ZSwgaSA9IDAsIGwgPSB0aGlzLmxlbmd0
aCA+Pj4gMDsgaSA8IGw7IGkrKykgaWYgKGkgaW4gdGhpcyl7XG5cdFx0XHR2YWx1ZSA9IHRoaXNb
aV07XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCB2YWx1ZSwgaSwgdGhpcykpIHJlc3VsdHMucHVz
aCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9LFxuXG5cdGluZGV4T2Y6
IGZ1bmN0aW9uKGl0ZW0sIGZyb20pe1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4g
MDtcblx0XHRmb3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxlbmd0aCArIGZy
b20pIDogZnJvbSB8fCAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gPT09
IGl0ZW0pIHJldHVybiBpO1xuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0bWFwOiBm
dW5jdGlvbihmbiwgYmluZCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAwLCBy
ZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKXtcblx0XHRcdGlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxsKGJpbmQsIHRo
aXNbaV0sIGksIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fSxcblxuXHRz
b21lOiBmdW5jdGlvbihmbiwgYmluZCl7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxl
bmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7XG5cdFx0XHRpZiAoKGkgaW4gdGhpcykgJiYgZm4uY2Fs
bChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVy
biBmYWxzZTtcblx0fSxcblx0Lyo8LyFFUzU+Ki9cblxuXHRjbGVhbjogZnVuY3Rpb24oKXtcblx0
XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHRyZXR1cm4gaXRlbSAh
PSBudWxsO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGludm9rZTogZnVuY3Rpb24obWV0aG9kTmFtZSl7
XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpO1xuXHRcdHJldHVybiB0
aGlzLm1hcChmdW5jdGlvbihpdGVtKXtcblx0XHRcdHJldHVybiBpdGVtW21ldGhvZE5hbWVdLmFw
cGx5KGl0ZW0sIGFyZ3MpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGFzc29jaWF0ZTogZnVuY3Rpb24o
a2V5cyl7XG5cdFx0dmFyIG9iaiA9IHt9LCBsZW5ndGggPSBNYXRoLm1pbih0aGlzLmxlbmd0aCwg
a2V5cy5sZW5ndGgpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG9ialtr
ZXlzW2ldXSA9IHRoaXNbaV07XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHRsaW5rOiBmdW5j
dGlvbihvYmplY3Qpe1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMCwg
bCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdGZvciAodmFyIGtleSBpbiBvYmpl
Y3Qpe1xuXHRcdFx0XHRpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpe1xuXHRcdFx0XHRcdHJlc3Vs
dFtrZXldID0gdGhpc1tpXTtcblx0XHRcdFx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdFx0XHRc
dFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtc
blx0fSxcblxuXHRjb250YWluczogZnVuY3Rpb24oaXRlbSwgZnJvbSl7XG5cdFx0cmV0dXJuIHRo
aXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAtMTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9u
KGFycmF5KXtcblx0XHR0aGlzLnB1c2guYXBwbHkodGhpcywgYXJyYXkpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGdldExhc3Q6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICh0aGlzLmxl
bmd0aCkgPyB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gOiBudWxsO1xuXHR9LFxuXG5cdGdldFJhbmRv
bTogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbTnVtYmVyLnJh
bmRvbSgwLCB0aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7XG5cdH0sXG5cblx0aW5jbHVkZTogZnVu
Y3Rpb24oaXRlbSl7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlzLnB1c2goaXRl
bSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tYmluZTogZnVuY3Rpb24oYXJyYXkp
e1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlz
LmluY2x1ZGUoYXJyYXlbaV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGVyYXNlOiBm
dW5jdGlvbihpdGVtKXtcblx0XHRmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspe1xuXHRc
dFx0aWYgKHRoaXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpO1xuXHRcdH1cblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmxlbmd0
aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmxhdHRlbjogZnVuY3Rpb24oKXtc
blx0XHR2YXIgYXJyYXkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3Ro
OyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciB0eXBlID0gdHlwZU9mKHRoaXNbaV0pO1xuXHRcdFx0
aWYgKHR5cGUgPT0gJ251bGwnKSBjb250aW51ZTtcblx0XHRcdGFycmF5ID0gYXJyYXkuY29uY2F0
KCh0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnY29sbGVjdGlvbicgfHwgdHlwZSA9PSAnYXJn
dW1lbnRzJyB8fCBpbnN0YW5jZU9mKHRoaXNbaV0sIEFycmF5KSkgPyBBcnJheS5mbGF0dGVuKHRo
aXNbaV0pIDogdGhpc1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fSxcblxuXHRw
aWNrOiBmdW5jdGlvbigpe1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKyspe1xuXHRcdFx0aWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRoaXNbaV07XG5c
dFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdGhleFRvUmdiOiBmdW5jdGlvbihhcnJh
eSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsO1xuXHRcdHZhciByZ2Ig
PSB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubGVuZ3RoID09IDEp
IHZhbHVlICs9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxNik7XG5cdFx0
fSk7XG5cdFx0cmV0dXJuIChhcnJheSkgPyByZ2IgOiAncmdiKCcgKyByZ2IgKyAnKSc7XG5cdH0s
XG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXtcblx0XHRpZiAodGhpcy5sZW5ndGggPCAz
KSByZXR1cm4gbnVsbDtcblx0XHRpZiAodGhpcy5sZW5ndGggPT0gNCAmJiB0aGlzWzNdID09IDAg
JiYgIWFycmF5KSByZXR1cm4gJ3RyYW5zcGFyZW50Jztcblx0XHR2YXIgaGV4ID0gW107XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspe1xuXHRcdFx0dmFyIGJpdCA9ICh0aGlzW2ldIC0g
MCkudG9TdHJpbmcoMTYpO1xuXHRcdFx0aGV4LnB1c2goKGJpdC5sZW5ndGggPT0gMSkgPyAnMCcg
KyBiaXQgOiBiaXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGFycmF5KSA/IGhleCA6ICcjJyArIGhl
eC5qb2luKCcnKTtcblx0fVxuXG59KTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnVuY3Rpb25c
blxuZGVzY3JpcHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlrZSBjcmVhdGUs
IGJpbmQsIHBhc3MsIGFuZCBkZWxheS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5c
bnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBGdW5jdGlvblxuXG4uLi5cbiovXG5cbkZ1bmN0
aW9uLmV4dGVuZCh7XG5cblx0YXR0ZW1wdDogZnVuY3Rpb24oKXtcblx0XHRmb3IgKHZhciBpID0g
MCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0dHJ5IHtcblx0XHRc
dFx0cmV0dXJuIGFyZ3VtZW50c1tpXSgpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXHRcdH1cblx0
XHRyZXR1cm4gbnVsbDtcblx0fVxuXG59KTtcblxuRnVuY3Rpb24uaW1wbGVtZW50KHtcblxuXHRh
dHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHRo
aXMuYXBwbHkoYmluZCwgQXJyYXkuY29udmVydChhcmdzKSk7XG5cdFx0fSBjYXRjaCAoZSl7fVxu
XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Lyo8IUVTNS1iaW5kPiovXG5cdGJpbmQ6IGZ1
bmN0aW9uKHRoYXQpe1xuXHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdGFyZ3MgPSBhcmd1bWVu
dHMubGVuZ3RoID4gMSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxsLFxuXHRcdFx0
RiA9IGZ1bmN0aW9uKCl7fTtcblxuXHRcdHZhciBib3VuZCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHR2
YXIgY29udGV4dCA9IHRoYXQsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAo
dGhpcyBpbnN0YW5jZW9mIGJvdW5kKXtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSBzZWxmLnByb3Rv
dHlwZTtcblx0XHRcdFx0Y29udGV4dCA9IG5ldyBGO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHJlc3Vs
dCA9ICghYXJncyAmJiAhbGVuZ3RoKVxuXHRcdFx0XHQ/IHNlbGYuY2FsbChjb250ZXh0KVxuXHRc
dFx0XHQ6IHNlbGYuYXBwbHkoY29udGV4dCwgYXJncyAmJiBsZW5ndGggPyBhcmdzLmNvbmNhdChB
cnJheS5zbGljZShhcmd1bWVudHMpKSA6IGFyZ3MgfHwgYXJndW1lbnRzKTtcblx0XHRcdHJldHVy
biBjb250ZXh0ID09IHRoYXQgPyByZXN1bHQgOiBjb250ZXh0O1xuXHRcdH07XG5cdFx0cmV0dXJu
IGJvdW5kO1xuXHR9LFxuXHQvKjwvIUVTNS1iaW5kPiovXG5cblx0cGFzczogZnVuY3Rpb24oYXJn
cywgYmluZCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGlmIChhcmdzICE9IG51bGwpIGFy
Z3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXHRcdHJldHVybiBmdW5jdGlvbigpe1xuXHRcdFx0
cmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH0s
XG5cblx0ZGVsYXk6IGZ1bmN0aW9uKGRlbGF5LCBiaW5kLCBhcmdzKXtcblx0XHRyZXR1cm4gc2V0
VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBkZWxh
eSk7XG5cdH0sXG5cblx0cGVyaW9kaWNhbDogZnVuY3Rpb24ocGVyaW9kaWNhbCwgYmluZCwgYXJn
cyl7XG5cdFx0cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygoYXJncyA9PSBudWxsID8gW10g
OiBhcmdzKSwgYmluZCksIHBlcmlvZGljYWwpO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxu
XG5uYW1lOiBOdW1iZXJcblxuZGVzY3JpcHRpb246IENvbnRhaW5zIE51bWJlciBQcm90b3R5cGVz
IGxpa2UgbGltaXQsIHJvdW5kLCB0aW1lcywgYW5kIGNlaWwuXG5cbmxpY2Vuc2U6IE1JVC1zdHls
ZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogVHlwZVxuXG5wcm92aWRlczogTnVtYmVyXG5cbi4uLlxu
Ki9cblxuTnVtYmVyLmltcGxlbWVudCh7XG5cblx0bGltaXQ6IGZ1bmN0aW9uKG1pbiwgbWF4KXtc
blx0XHRyZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHRoaXMpKTtcblx0fSxcblxu
XHRyb3VuZDogZnVuY3Rpb24ocHJlY2lzaW9uKXtcblx0XHRwcmVjaXNpb24gPSBNYXRoLnBvdygx
MCwgcHJlY2lzaW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVjaXNpb24gOiAw
KTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh0aGlzICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtc
blx0fSxcblxuXHR0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpe1xuXHRcdGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpczsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpO1xuXHR9LFxuXG5cdHRvRmxv
YXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0
dG9JbnQ6IGZ1bmN0aW9uKGJhc2Upe1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8
IDEwKTtcblx0fVxuXG59KTtcblxuTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVzJyk7XG5cbihm
dW5jdGlvbihtYXRoKXtcblxudmFyIG1ldGhvZHMgPSB7fTtcblxubWF0aC5lYWNoKGZ1bmN0aW9u
KG5hbWUpe1xuXHRpZiAoIU51bWJlcltuYW1lXSkgbWV0aG9kc1tuYW1lXSA9IGZ1bmN0aW9uKCl7
XG5cdFx0cmV0dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChBcnJheS5j
b252ZXJ0KGFyZ3VtZW50cykpKTtcblx0fTtcbn0pO1xuXG5OdW1iZXIuaW1wbGVtZW50KG1ldGhv
ZHMpO1xuXG59KShbJ2FicycsICdhY29zJywgJ2FzaW4nLCAnYXRhbicsICdhdGFuMicsICdjZWls
JywgJ2NvcycsICdleHAnLCAnZmxvb3InLCAnbG9nJywgJ21heCcsICdtaW4nLCAncG93JywgJ3Np
bicsICdzcXJ0JywgJ3RhbiddKTtcblxuLypcbi0tLVxuXG5uYW1lOiBTdHJpbmdcblxuZGVzY3Jp
cHRpb246IENvbnRhaW5zIFN0cmluZyBQcm90b3R5cGVzIGxpa2UgY2FtZWxDYXNlLCBjYXBpdGFs
aXplLCB0ZXN0LCBhbmQgdG9JbnQuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW1R5cGUsIEFycmF5XVxuXG5wcm92aWRlczogU3RyaW5nXG5cbi4uLlxuKi9cblxu
U3RyaW5nLmltcGxlbWVudCh7XG5cblx0Ly88IUVTNj5cblx0Y29udGFpbnM6IGZ1bmN0aW9uKHN0
cmluZywgaW5kZXgpe1xuXHRcdHJldHVybiAoaW5kZXggPyBTdHJpbmcodGhpcykuc2xpY2UoaW5k
ZXgpIDogU3RyaW5nKHRoaXMpKS5pbmRleE9mKHN0cmluZykgPiAtMTtcblx0fSxcblx0Ly88LyFF
UzY+XG5cblx0dGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7XG5cdFx0cmV0dXJuICgodHlw
ZU9mKHJlZ2V4KSA9PSAncmVnZXhwJykgPyByZWdleCA6IG5ldyBSZWdFeHAoJycgKyByZWdleCwg
cGFyYW1zKSkudGVzdCh0aGlzKTtcblx0fSxcblxuXHR0cmltOiBmdW5jdGlvbigpe1xuXHRcdHJl
dHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuXHR9LFxuXG5c
dGNsZWFuOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxz
Ky9nLCAnICcpLnRyaW0oKTtcblx0fSxcblxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0
cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8tXFxEL2csIGZ1bmN0aW9uKG1hdGNoKXtcblx0
XHRcdHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fSxc
blxuXHRoeXBoZW5hdGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBs
YWNlKC9bQS1aXS9nLCBmdW5jdGlvbihtYXRjaCl7XG5cdFx0XHRyZXR1cm4gKCctJyArIG1hdGNo
LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTtcblx0XHR9KTtcblx0fSxcblxuXHRjYXBpdGFsaXpl
OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvXFxiW2Etel0v
ZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7XG5c
dFx0fSk7XG5cdH0sXG5cblx0ZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiBT
dHJpbmcodGhpcykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxc
JDEnKTtcblx0fSxcblxuXHR0b0ludDogZnVuY3Rpb24oYmFzZSl7XG5cdFx0cmV0dXJuIHBhcnNl
SW50KHRoaXMsIGJhc2UgfHwgMTApO1xuXHR9LFxuXG5cdHRvRmxvYXQ6IGZ1bmN0aW9uKCl7XG5c
dFx0cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7XG5cdH0sXG5cblx0aGV4VG9SZ2I6IGZ1bmN0aW9u
KGFycmF5KXtcblx0XHR2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8oXFx3ezEsMn0p
KFxcd3sxLDJ9KShcXHd7MSwyfSkkLyk7XG5cdFx0cmV0dXJuIChoZXgpID8gaGV4LnNsaWNlKDEp
LmhleFRvUmdiKGFycmF5KSA6IG51bGw7XG5cdH0sXG5cblx0cmdiVG9IZXg6IGZ1bmN0aW9uKGFy
cmF5KXtcblx0XHR2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cXGR7MSwzfS9nKTtcblx0
XHRyZXR1cm4gKHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDtcblx0fSxcblxuXHRz
dWJzdGl0dXRlOiBmdW5jdGlvbihvYmplY3QsIHJlZ2V4cCl7XG5cdFx0cmV0dXJuIFN0cmluZyh0
aGlzKS5yZXBsYWNlKHJlZ2V4cCB8fCAoL1xcXFw/XFx7KFtee31dKylcXH0vZyksIGZ1bmN0aW9u
KG1hdGNoLCBuYW1lKXtcblx0XHRcdGlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xcXFwnKSByZXR1
cm4gbWF0Y2guc2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gKG9iamVjdFtuYW1lXSAhPSBudWxsKSA/
IG9iamVjdFtuYW1lXSA6ICcnO1xuXHRcdH0pO1xuXHR9XG5cbn0pO1xuXG5cblxuLypcbi0tLVxu
XG5uYW1lOiBCcm93c2VyXG5cbmRlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmplY3QuIENvbnRh
aW5zIEJyb3dzZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQsIGFuZCB0aGUg
QnJvd3NlciBIYXNoLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6
IFtBcnJheSwgRnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXVxuXG5wcm92aWRlczogW0Jyb3dzZXIs
IFdpbmRvdywgRG9jdW1lbnRdXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBkb2N1
bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG52YXIgd2luZG93ID0gZG9jdW1lbnQud2luZG93ID0gdGhp
cztcblxudmFyIHBhcnNlID0gZnVuY3Rpb24odWEsIHBsYXRmb3JtKXtcblx0dWEgPSB1YS50b0xv
d2VyQ2FzZSgpO1xuXHRwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRvTG93ZXJDYXNl
KCkgOiAnJyk7XG5cblx0Ly8gY2hyb21lIGlzIGluY2x1ZGVkIGluIHRoZSBlZGdlIFVBLCBzbyBu
ZWVkIHRvIGNoZWNrIGZvciBlZGdlIGZpcnN0LFxuXHQvLyBiZWZvcmUgY2hlY2tpbmcgaWYgaXQn
cyBjaHJvbWUuXG5cdHZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXFxzXFwvOl0oW1xcd1xcZFxc
Ll0rKS8pO1xuXHRpZiAoIVVBKXtcblx0XHRVQSA9IHVhLm1hdGNoKC8ob3BlcmF8aWV8ZmlyZWZv
eHxjaHJvbWV8dHJpZGVudHxjcmlvc3x2ZXJzaW9uKVtcXHNcXC86XShbXFx3XFxkXFwuXSspPy4q
PyhzYWZhcml8KD86cnZbXFxzXFwvOl18dmVyc2lvbltcXHNcXC86XSkoW1xcd1xcZFxcLl0rKXwk
KS8pIHx8IFtudWxsLCAndW5rbm93bicsIDBdO1xuXHR9XG5cblx0aWYgKFVBWzFdID09ICd0cmlk
ZW50Jyl7XG5cdFx0VUFbMV0gPSAnaWUnO1xuXHRcdGlmIChVQVs0XSkgVUFbMl0gPSBVQVs0XTtc
blx0fSBlbHNlIGlmIChVQVsxXSA9PSAnY3Jpb3MnKXtcblx0XHRVQVsxXSA9ICdjaHJvbWUnO1xu
XHR9XG5cblx0cGxhdGZvcm0gPSB1YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8pID8gJ2lvcycg
OiAodWEubWF0Y2goLyg/OndlYm9zfGFuZHJvaWQpLykgfHwgdWEubWF0Y2goL21hY3x3aW58bGlu
dXgvKSB8fCBbJ290aGVyJ10pWzBdO1xuXHRpZiAocGxhdGZvcm0gPT0gJ3dpbicpIHBsYXRmb3Jt
ID0gJ3dpbmRvd3MnO1xuXG5cdHJldHVybiB7XG5cdFx0ZXh0ZW5kOiBGdW5jdGlvbi5wcm90b3R5
cGUuZXh0ZW5kLFxuXHRcdG5hbWU6IChVQVsxXSA9PSAndmVyc2lvbicpID8gVUFbM10gOiBVQVsx
XSxcblx0XHR2ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYmIFVBWzRdKSA/
IFVBWzRdIDogVUFbMl0pLFxuXHRcdHBsYXRmb3JtOiBwbGF0Zm9ybVxuXHR9O1xufTtcblxudmFy
IEJyb3dzZXIgPSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFnZW50LCBuYXZp
Z2F0b3IucGxhdGZvcm0pO1xuXG5pZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYgZG9jdW1lbnQu
ZG9jdW1lbnRNb2RlKXtcblx0QnJvd3Nlci52ZXJzaW9uID0gZG9jdW1lbnQuZG9jdW1lbnRNb2Rl
O1xufVxuXG5Ccm93c2VyLmV4dGVuZCh7XG5cdEZlYXR1cmVzOiB7XG5cdFx0eHBhdGg6ICEhKGRv
Y3VtZW50LmV2YWx1YXRlKSxcblx0XHRhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSxcblx0XHRxdWVy
eTogISEoZG9jdW1lbnQucXVlcnlTZWxlY3RvciksXG5cdFx0anNvbjogISEod2luZG93LkpTT04p
XG5cdH0sXG5cdHBhcnNlVUE6IHBhcnNlXG59KTtcblxuXG5cbi8vIFJlcXVlc3RcblxuQnJvd3Nl
ci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7XG5cblx0dmFyIFhNTEhUVFAgPSBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0fTtcblxuXHR2YXIgTVNYTUwyID0g
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01TWE1MMi5YTUxIVFRQ
Jyk7XG5cdH07XG5cblx0dmFyIE1TWE1MID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gbmV3IEFj
dGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG5cdH07XG5cblx0cmV0dXJuIEZ1bmN0
aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtcblx0XHRYTUxIVFRQKCk7XG5cdFx0cmV0dXJuIFhNTEhU
VFA7XG5cdH0sIGZ1bmN0aW9uKCl7XG5cdFx0TVNYTUwyKCk7XG5cdFx0cmV0dXJuIE1TWE1MMjtc
blx0fSwgZnVuY3Rpb24oKXtcblx0XHRNU1hNTCgpO1xuXHRcdHJldHVybiBNU1hNTDtcblx0fSk7
XG5cbn0pKCk7XG5cbkJyb3dzZXIuRmVhdHVyZXMueGhyID0gISEoQnJvd3Nlci5SZXF1ZXN0KTtc
blxuXG5cbi8vIFN0cmluZyBzY3JpcHRzXG5cbkJyb3dzZXIuZXhlYyA9IGZ1bmN0aW9uKHRleHQp
e1xuXHRpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuXHRpZiAod2luZG93LmV4ZWNTY3JpcHQpe1xu
XHRcdHdpbmRvdy5leGVjU2NyaXB0KHRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzY3JpcHQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzY3JpcHQuc2V0QXR0cmli
dXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXHRcdHNjcmlwdC50ZXh0ID0gdGV4dDtc
blx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0ZG9jdW1lbnQuaGVh
ZC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHR9XG5cdHJldHVybiB0ZXh0O1xufTtcblxuU3RyaW5n
LmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7XG5cdHZhciBzY3JpcHRz
ID0gJyc7XG5cdHZhciB0ZXh0ID0gdGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+KFtcXHNcXFNd
Kj8pPFxcL3NjcmlwdD4vZ2ksIGZ1bmN0aW9uKGFsbCwgY29kZSl7XG5cdFx0c2NyaXB0cyArPSBj
b2RlICsgJ1xcbic7XG5cdFx0cmV0dXJuICcnO1xuXHR9KTtcblx0aWYgKGV4ZWMgPT09IHRydWUp
IEJyb3dzZXIuZXhlYyhzY3JpcHRzKTtcblx0ZWxzZSBpZiAodHlwZU9mKGV4ZWMpID09ICdmdW5j
dGlvbicpIGV4ZWMoc2NyaXB0cywgdGV4dCk7XG5cdHJldHVybiB0ZXh0O1xufSk7XG5cbi8vIFdp
bmRvdywgRG9jdW1lbnRcblxuQnJvd3Nlci5leHRlbmQoe1xuXHREb2N1bWVudDogdGhpcy5Eb2N1
bWVudCxcblx0V2luZG93OiB0aGlzLldpbmRvdyxcblx0RWxlbWVudDogdGhpcy5FbGVtZW50LFxu
XHRFdmVudDogdGhpcy5FdmVudFxufSk7XG5cbnRoaXMuV2luZG93ID0gdGhpcy4kY29uc3RydWN0
b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTtcblxudGhpcy4kZmFtaWx5ID0g
RnVuY3Rpb24uY29udmVydCgnd2luZG93JykuaGlkZSgpO1xuXG5XaW5kb3cubWlycm9yKGZ1bmN0
aW9uKG5hbWUsIG1ldGhvZCl7XG5cdHdpbmRvd1tuYW1lXSA9IG1ldGhvZDtcbn0pO1xuXG50aGlz
LkRvY3VtZW50ID0gZG9jdW1lbnQuJGNvbnN0cnVjdG9yID0gbmV3IFR5cGUoJ0RvY3VtZW50Jywg
ZnVuY3Rpb24oKXt9KTtcblxuZG9jdW1lbnQuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2Rv
Y3VtZW50JykuaGlkZSgpO1xuXG5Eb2N1bWVudC5taXJyb3IoZnVuY3Rpb24obmFtZSwgbWV0aG9k
KXtcblx0ZG9jdW1lbnRbbmFtZV0gPSBtZXRob2Q7XG59KTtcblxuZG9jdW1lbnQuaHRtbCA9IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudDtcbmlmICghZG9jdW1lbnQuaGVhZCkgZG9jdW1lbnQuaGVh
ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5cbmlmIChkb2N1
bWVudC5leGVjQ29tbWFuZCkgdHJ5IHtcblx0ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0JhY2tncm91
bmRJbWFnZUNhY2hlJywgZmFsc2UsIHRydWUpO1xufSBjYXRjaCAoZSl7fVxuXG4vKjxsdElFOT4q
L1xuaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG5cdHZh
ciB1bmxvYWRFdmVudCA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5kZXRhY2hFdmVudCgnb251bmxv
YWQnLCB1bmxvYWRFdmVudCk7XG5cdFx0ZG9jdW1lbnQuaGVhZCA9IGRvY3VtZW50Lmh0bWwgPSBk
b2N1bWVudC53aW5kb3cgPSBudWxsO1xuXHRcdHdpbmRvdyA9IHRoaXMuV2luZG93ID0gZG9jdW1l
bnQgPSBudWxsO1xuXHR9O1xuXHR0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2
ZW50KTtcbn1cblxuLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxlY3Q+Lm9wdGlv
bnMgKHJlZmVycyB0byA8c2VsZWN0PilcbnZhciBhcnJheUZyb20gPSBBcnJheS5jb252ZXJ0O1xu
dHJ5IHtcblx0YXJyYXlGcm9tKGRvY3VtZW50Lmh0bWwuY2hpbGROb2Rlcyk7XG59IGNhdGNoIChl
KXtcblx0QXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdGlmICh0eXBlb2YgaXRl
bSAhPSAnc3RyaW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlT2YoaXRlbSkg
IT0gJ2FycmF5Jyl7XG5cdFx0XHR2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9IG5ldyBBcnJh
eShpKTtcblx0XHRcdHdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTtcblx0XHRcdHJldHVy
biBhcnJheTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5RnJvbShpdGVtKTtcblx0fTtcblxuXHR2
YXIgcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlLFxuXHRcdHNsaWNlID0gcHJvdG90eXBlLnNs
aWNlO1xuXHRbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxp
Y2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2goZnVuY3Rpb24o
bmFtZSl7XG5cdFx0dmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTtcblx0XHRBcnJheVtuYW1l
XSA9IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIG1ldGhvZC5hcHBseShBcnJheS5jb252
ZXJ0KGl0ZW0pLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH07XG5cdH0pO1xufVxu
Lyo8L2x0SUU5PiovXG5cblxuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IENsYXNzXG5cbmRl
c2NyaXB0aW9uOiBDb250YWlucyB0aGUgQ2xhc3MgRnVuY3Rpb24gZm9yIGVhc2lseSBjcmVhdGlu
ZywgZXh0ZW5kaW5nLCBhbmQgaW1wbGVtZW50aW5nIHJldXNhYmxlIENsYXNzZXMuXG5cbmxpY2Vu
c2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW0FycmF5LCBTdHJpbmcsIEZ1bmN0
aW9uLCBOdW1iZXJdXG5cbnByb3ZpZGVzOiBDbGFzc1xuXG4uLi5cbiovXG5cbihmdW5jdGlvbigp
e1xuXG52YXIgQ2xhc3MgPSB0aGlzLkNsYXNzID0gbmV3IFR5cGUoJ0NsYXNzJywgZnVuY3Rpb24o
cGFyYW1zKXtcblx0aWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBhcmFtcyA9IHtp
bml0aWFsaXplOiBwYXJhbXN9O1xuXG5cdHZhciBuZXdDbGFzcyA9IGZ1bmN0aW9uKCl7XG5cdFx0
cmVzZXQodGhpcyk7XG5cdFx0aWYgKG5ld0NsYXNzLiRwcm90b3R5cGluZykgcmV0dXJuIHRoaXM7
XG5cdFx0dGhpcy4kY2FsbGVyID0gbnVsbDtcblx0XHR0aGlzLiRmYW1pbHkgPSBudWxsO1xuXHRc
dHZhciB2YWx1ZSA9ICh0aGlzLmluaXRpYWxpemUpID8gdGhpcy5pbml0aWFsaXplLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cykgOiB0aGlzO1xuXHRcdHRoaXMuJGNhbGxlciA9IHRoaXMuY2FsbGVyID0g
bnVsbDtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0uZXh0ZW5kKHRoaXMpLmltcGxlbWVudChwYXJh
bXMpO1xuXG5cdG5ld0NsYXNzLiRjb25zdHJ1Y3RvciA9IENsYXNzO1xuXHRuZXdDbGFzcy5wcm90
b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7XG5cdG5ld0NsYXNzLnByb3RvdHlwZS5wYXJl
bnQgPSBwYXJlbnQ7XG5cblx0cmV0dXJuIG5ld0NsYXNzO1xufSk7XG5cbnZhciBwYXJlbnQgPSBm
dW5jdGlvbigpe1xuXHRpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0
aG9kIFwicGFyZW50XCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0dmFyIG5hbWUgPSB0aGlzLiRj
YWxsZXIuJG5hbWUsXG5cdFx0cGFyZW50ID0gdGhpcy4kY2FsbGVyLiRvd25lci5wYXJlbnQsXG5c
dFx0cHJldmlvdXMgPSAocGFyZW50KSA/IHBhcmVudC5wcm90b3R5cGVbbmFtZV0gOiBudWxsO1xu
XHRpZiAoIXByZXZpb3VzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgXCInICsgbmFtZSAr
ICdcIiBoYXMgbm8gcGFyZW50LicpO1xuXHRyZXR1cm4gcHJldmlvdXMuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTtcbn07XG5cbnZhciByZXNldCA9IGZ1bmN0aW9uKG9iamVjdCl7XG5cdGZvciAodmFy
IGtleSBpbiBvYmplY3Qpe1xuXHRcdHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdHN3aXRj
aCAodHlwZU9mKHZhbHVlKSl7XG5cdFx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0XHR2YXIgRiA9
IGZ1bmN0aW9uKCl7fTtcblx0XHRcdFx0Ri5wcm90b3R5cGUgPSB2YWx1ZTtcblx0XHRcdFx0b2Jq
ZWN0W2tleV0gPSByZXNldChuZXcgRik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYXJy
YXknOiBvYmplY3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrO1xuXHRcdH1cblx0fVxuXHRy
ZXR1cm4gb2JqZWN0O1xufTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBrZXksIG1ldGhv
ZCl7XG5cdGlmIChtZXRob2QuJG9yaWdpbikgbWV0aG9kID0gbWV0aG9kLiRvcmlnaW47XG5cdHZh
ciB3cmFwcGVyID0gZnVuY3Rpb24oKXtcblx0XHRpZiAobWV0aG9kLiRwcm90ZWN0ZWQgJiYgdGhp
cy4kY2FsbGVyID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCBcIicgKyBrZXkg
KyAnXCIgY2Fubm90IGJlIGNhbGxlZC4nKTtcblx0XHR2YXIgY2FsbGVyID0gdGhpcy5jYWxsZXIs
IGN1cnJlbnQgPSB0aGlzLiRjYWxsZXI7XG5cdFx0dGhpcy5jYWxsZXIgPSBjdXJyZW50OyB0aGlz
LiRjYWxsZXIgPSB3cmFwcGVyO1xuXHRcdHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywg
YXJndW1lbnRzKTtcblx0XHR0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNhbGxlciA9IGNh
bGxlcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LmV4dGVuZCh7JG93bmVyOiBzZWxmLCAkb3Jp
Z2luOiBtZXRob2QsICRuYW1lOiBrZXl9KTtcblx0cmV0dXJuIHdyYXBwZXI7XG59O1xuXG52YXIg
aW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXtcblx0aWYgKENsYXNzLk11
dGF0b3JzLmhhc093blByb3BlcnR5KGtleSkpe1xuXHRcdHZhbHVlID0gQ2xhc3MuTXV0YXRvcnNb
a2V5XS5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRo
aXM7XG5cdH1cblxuXHRpZiAodHlwZU9mKHZhbHVlKSA9PSAnZnVuY3Rpb24nKXtcblx0XHRpZiAo
dmFsdWUuJGhpZGRlbikgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5wcm90b3R5cGVba2V5XSA9IChy
ZXRhaW4pID8gdmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRc
dE9iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7XG5cdH1cblxuXHRyZXR1
cm4gdGhpcztcbn07XG5cbnZhciBnZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGtsYXNzKXtcblx0a2xh
c3MuJHByb3RvdHlwaW5nID0gdHJ1ZTtcblx0dmFyIHByb3RvID0gbmV3IGtsYXNzO1xuXHRkZWxl
dGUga2xhc3MuJHByb3RvdHlwaW5nO1xuXHRyZXR1cm4gcHJvdG87XG59O1xuXG5DbGFzcy5pbXBs
ZW1lbnQoJ2ltcGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTtcblxuQ2xhc3Mu
TXV0YXRvcnMgPSB7XG5cblx0RXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXtcblx0XHR0aGlzLnBh
cmVudCA9IHBhcmVudDtcblx0XHR0aGlzLnByb3RvdHlwZSA9IGdldEluc3RhbmNlKHBhcmVudCk7
XG5cdH0sXG5cblx0SW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpe1xuXHRcdEFycmF5LmNvbnZl
cnQoaXRlbXMpLmVhY2goZnVuY3Rpb24oaXRlbSl7XG5cdFx0XHR2YXIgaW5zdGFuY2UgPSBuZXcg
aXRlbTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50LmNhbGwodGhp
cywga2V5LCBpbnN0YW5jZVtrZXldLCB0cnVlKTtcblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxu
fSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBDbGFzcy5FeHRyYXNcblxuZGVzY3JpcHRpb246IENv
bnRhaW5zIFV0aWxpdHkgQ2xhc3NlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbnRvIHlvdXIg
b3duIENsYXNzZXMgdG8gZWFzZSB0aGUgZXhlY3V0aW9uIG9mIG1hbnkgY29tbW9uIHRhc2tzLlxu
XG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IENsYXNzXG5cbnByb3Zp
ZGVzOiBbQ2xhc3MuRXh0cmFzLCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zXVxuXG4uLi5cbiovXG5c
bihmdW5jdGlvbigpe1xuXG50aGlzLkNoYWluID0gbmV3IENsYXNzKHtcblxuXHQkY2hhaW46IFtd
LFxuXG5cdGNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmFwcGVuZChBcnJheS5m
bGF0dGVuKGFyZ3VtZW50cykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbGxDaGFp
bjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkgPyB0aGlzLiRj
aGFpbi5zaGlmdCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTtcblx0fSxcblxuXHRj
bGVhckNoYWluOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuJGNoYWluLmVtcHR5KCk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbnZhciByZW1vdmVPbiA9IGZ1bmN0aW9uKHN0cmluZyl7
XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSgvXm9uKFtBLVpdKS8sIGZ1bmN0aW9uKGZ1bGwsIGZp
cnN0KXtcblx0XHRyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTtcblx0fSk7XG59O1xuXG50aGlz
LkV2ZW50cyA9IG5ldyBDbGFzcyh7XG5cblx0JGV2ZW50czoge30sXG5cblx0YWRkRXZlbnQ6IGZ1
bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7XG5cdFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xu
XG5cdFx0XG5cblx0XHR0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRzW3R5cGVdIHx8
IFtdKS5pbmNsdWRlKGZuKTtcblx0XHRpZiAoaW50ZXJuYWwpIGZuLmludGVybmFsID0gdHJ1ZTtc
blx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7
XG5cdFx0Zm9yICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlwZSwgZXZlbnRz
W3R5cGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRmaXJlRXZlbnQ6IGZ1bmN0aW9u
KHR5cGUsIGFyZ3MsIGRlbGF5KXtcblx0XHR0eXBlID0gcmVtb3ZlT24odHlwZSk7XG5cdFx0dmFy
IGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRpZiAoIWV2ZW50cykgcmV0dXJuIHRo
aXM7XG5cdFx0YXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7XG5cdFx0ZXZlbnRzLmVhY2goZnVu
Y3Rpb24oZm4pe1xuXHRcdFx0aWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7
XG5cdFx0XHRlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJl
dHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5c
dFx0dHlwZSA9IHJlbW92ZU9uKHR5cGUpO1xuXHRcdHZhciBldmVudHMgPSB0aGlzLiRldmVudHNb
dHlwZV07XG5cdFx0aWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpe1xuXHRcdFx0dmFyIGluZGV4
ID0gZXZlbnRzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9IC0xKSBkZWxldGUgZXZl
bnRzW2luZGV4XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZl
bnRzOiBmdW5jdGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZl
bnRzKSA9PSAnb2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92
ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5c
dFx0aWYgKGV2ZW50cykgZXZlbnRzID0gcmVtb3ZlT24oZXZlbnRzKTtcblx0XHRmb3IgKHR5cGUg
aW4gdGhpcy4kZXZlbnRzKXtcblx0XHRcdGlmIChldmVudHMgJiYgZXZlbnRzICE9IHR5cGUpIGNv
bnRpbnVlO1xuXHRcdFx0dmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTtcblx0XHRcdGZvciAo
dmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpe1xuXHRcdFx0XHR0aGlzLnJl
bW92ZUV2ZW50KHR5cGUsIGZuc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlz
O1xuXHR9XG5cbn0pO1xuXG50aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3Moe1xuXG5cdHNldE9wdGlv
bnM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBPYmplY3Qu
bWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1bWVudHMpKTtc
blx0XHRpZiAodGhpcy5hZGRFdmVudCkgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpe1xuXHRc
dFx0aWYgKHR5cGVPZihvcHRpb25zW29wdGlvbl0pICE9ICdmdW5jdGlvbicgfHwgISgvXm9uW0Et
Wl0vKS50ZXN0KG9wdGlvbikpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5hZGRFdmVudChvcHRpb24s
IG9wdGlvbnNbb3B0aW9uXSk7XG5cdFx0XHRkZWxldGUgb3B0aW9uc1tvcHRpb25dO1xuXHRcdH1c
blx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1l
OiBDbGFzcy5UaGVuYWJsZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgYSBVdGlsaXR5IENsYXNz
IHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBtYWtlIHRo
ZW0gXCJ0aGVuYWJsZVwiLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWly
ZXM6IENsYXNzXG5cbnByb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdXG5cbi4uLlxuKi9cblxuKGZ1
bmN0aW9uKCl7XG5cbnZhciBTVEFURV9QRU5ESU5HID0gMCxcblx0U1RBVEVfRlVMRklMTEVEID0g
MSxcblx0U1RBVEVfUkVKRUNURUQgPSAyO1xuXG52YXIgVGhlbmFibGUgPSBDbGFzcy5UaGVuYWJs
ZSA9IG5ldyBDbGFzcyh7XG5cblx0JHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJTkcsXG5cdCR0
aGVuYWJsZVJlc3VsdDogbnVsbCxcblx0JHRoZW5hYmxlUmVhY3Rpb25zOiBbXSxcblxuXHRyZXNv
bHZlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0cmVzb2x2ZSh0aGlzLCB2YWx1ZSk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVqZWN0OiBmdW5jdGlvbihyZWFzb24pe1xuXHRcdHJlamVj
dCh0aGlzLCByZWFzb24pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdldFRoZW5hYmxl
U3RhdGU6IGZ1bmN0aW9uKCl7XG5cdFx0c3dpdGNoICh0aGlzLiR0aGVuYWJsZVN0YXRlKXtcblx0
XHRcdGNhc2UgU1RBVEVfUEVORElORzpcblx0XHRcdFx0cmV0dXJuICdwZW5kaW5nJztcblxuXHRc
dFx0Y2FzZSBTVEFURV9GVUxGSUxMRUQ6XG5cdFx0XHRcdHJldHVybiAnZnVsZmlsbGVkJztcblxu
XHRcdFx0Y2FzZSBTVEFURV9SRUpFQ1RFRDpcblx0XHRcdFx0cmV0dXJuICdyZWplY3RlZCc7XG5c
dFx0fVxuXHR9LFxuXG5cdHJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0cmVq
ZWN0KHRoaXMsIHJlYXNvbik7XG5cdFx0cmVzZXQodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0dGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuXHRcdGlm
ICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicpIG9uRnVsZmlsbGVkID0gJ0lkZW50
aXR5Jztcblx0XHRpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicpIG9uUmVqZWN0
ZWQgPSAnVGhyb3dlcic7XG5cblx0XHR2YXIgdGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTtcblxu
XHRcdHRoaXMuJHRoZW5hYmxlUmVhY3Rpb25zLnB1c2goe1xuXHRcdFx0dGhlbmFibGU6IHRoZW5h
YmxlLFxuXHRcdFx0ZnVsZmlsbEhhbmRsZXI6IG9uRnVsZmlsbGVkLFxuXHRcdFx0cmVqZWN0SGFu
ZGxlcjogb25SZWplY3RlZFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuJHRoZW5hYmxlU3RhdGUg
IT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdFx0cmVhY3QodGhpcyk7XG5cdFx0fVxuXG5cdFx0cmV0
dXJuIHRoZW5hYmxlO1xuXHR9LFxuXG5cdCdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpe1xu
XHRcdHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG5cdH1cblxufSk7XG5cblRo
ZW5hYmxlLmV4dGVuZCh7XG5cdHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YXIgdGhl
bmFibGU7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGhlbmFibGUpe1xuXHRcdFx0dGhlbmFi
bGUgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhlbmFibGUgPSBuZXcgVGhlbmFibGUo
KTtcblx0XHRcdHJlc29sdmUodGhlbmFibGUsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRo
ZW5hYmxlO1xuXHR9LFxuXHRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7XG5cdFx0dmFyIHRoZW5h
YmxlID0gbmV3IFRoZW5hYmxlKCk7XG5cdFx0cmVqZWN0KHRoZW5hYmxlLCByZWFzb24pO1xuXHRc
dHJldHVybiB0aGVuYWJsZTtcblx0fVxufSk7XG5cbi8vIFByaXZhdGUgZnVuY3Rpb25zXG5cbmZ1
bmN0aW9uIHJlc29sdmUodGhlbmFibGUsIHZhbHVlKXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJs
ZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXtcblx0XHRpZiAodGhlbmFibGUgPT09IHZhbHVlKXtc
blx0XHRcdHJlamVjdCh0aGVuYWJsZSwgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gcmVzb2x2ZSBh
IHRoZW5hYmxlIHdpdGggaXRzZWxmLicpKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICYmICh0eXBl
b2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpe1xu
XHRcdFx0dmFyIHRoZW47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGVuID0gdmFsdWUudGhlbjtc
blx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdHJlamVjdCh0aGVuYWJsZSwgZXhj
ZXB0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJyl7
XG5cdFx0XHRcdHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXHRcdFx0XHRkZWZlcihmdW5jdGlvbigp
e1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRc
dHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbihuZXh0VmFsdWUpe1xuXHRcdFx0XHRcdFx0
XHRcdGlmICghcmVzb2x2ZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xu
XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGVuYWJsZSwgbmV4dFZhbHVlKTtcblx0XHRcdFx0
XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKHJlYXNv
bil7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNvbHZlZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRy
ZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QodGhlbmFibGUsIHJlYXNv
bik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xu
XHRcdFx0XHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbil7XG5cdFx0XHRcdFx0XHRpZiAoIXJlc29sdmVk
KXtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRyZWplY3Qo
dGhlbmFibGUsIGV4Y2VwdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0
XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTtc
blx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpO1xu
XHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHRoZW5hYmxlLCB2YWx1ZSl7XG5cdGlm
ICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7XG5cdFx0dGhlbmFi
bGUuJHRoZW5hYmxlUmVzdWx0ID0gdmFsdWU7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlU3RhdGUg
PSBTVEFURV9GVUxGSUxMRUQ7XG5cblx0XHRyZWFjdCh0aGVuYWJsZSk7XG5cdH1cbn1cblxuZnVu
Y3Rpb24gcmVqZWN0KHRoZW5hYmxlLCByZWFzb24pe1xuXHRpZiAodGhlbmFibGUuJHRoZW5hYmxl
U3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpe1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9
IHJlYXNvbjtcblx0XHR0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JFSkVDVEVEO1xu
XG5cdFx0cmVhY3QodGhlbmFibGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc2V0KHRoZW5hYmxl
KXtcblx0aWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXtcblx0
XHR0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsO1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJs
ZVN0YXRlID0gU1RBVEVfUEVORElORztcblx0fVxufVxuXG5mdW5jdGlvbiByZWFjdCh0aGVuYWJs
ZSl7XG5cdHZhciBzdGF0ZSA9IHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlLFxuXHRcdHJlc3VsdCA9
IHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCxcblx0XHRyZWFjdGlvbnMgPSB0aGVuYWJsZS4kdGhl
bmFibGVSZWFjdGlvbnMsXG5cdFx0dHlwZTtcblxuXHRpZiAoc3RhdGUgPT09IFNUQVRFX0ZVTEZJ
TExFRCl7XG5cdFx0dGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zID0gW107XG5cdFx0dHlwZSA9
ICdmdWxmaWxsSGFuZGxlcic7XG5cdH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfUkVKRUNURUQp
e1xuXHRcdHRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdO1xuXHRcdHR5cGUgPSAncmVq
ZWN0SGFuZGxlcic7XG5cdH1cblxuXHRpZiAodHlwZSl7XG5cdFx0ZGVmZXIoaGFuZGxlLnBhc3Mo
W3Jlc3VsdCwgcmVhY3Rpb25zLCB0eXBlXSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZShy
ZXN1bHQsIHJlYWN0aW9ucywgdHlwZSl7XG5cdGZvciAodmFyIGkgPSAwLCBsID0gcmVhY3Rpb25z
Lmxlbmd0aDsgaSA8IGw7ICsraSl7XG5cdFx0dmFyIHJlYWN0aW9uID0gcmVhY3Rpb25zW2ldLFxu
XHRcdFx0aGFuZGxlciA9IHJlYWN0aW9uW3R5cGVdO1xuXG5cdFx0aWYgKGhhbmRsZXIgPT09ICdJ
ZGVudGl0eScpe1xuXHRcdFx0cmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0KTtcblx0
XHR9IGVsc2UgaWYgKGhhbmRsZXIgPT09ICdUaHJvd2VyJyl7XG5cdFx0XHRyZWplY3QocmVhY3Rp
b24udGhlbmFibGUsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRc
dHJlc29sdmUocmVhY3Rpb24udGhlbmFibGUsIGhhbmRsZXIocmVzdWx0KSk7XG5cdFx0XHR9IGNh
dGNoIChleGNlcHRpb24pe1xuXHRcdFx0XHRyZWplY3QocmVhY3Rpb24udGhlbmFibGUsIGV4Y2Vw
dGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbnZhciBkZWZlcjtcbmlmICh0eXBlb2Yg
cHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdm
dW5jdGlvbicpe1xuXHRkZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2UgaWYgKHR5cGVv
ZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKXtcblx0ZGVmZXIgPSBzZXRJbW1lZGlhdGU7
XG59IGVsc2Uge1xuXHRkZWZlciA9IGZ1bmN0aW9uKGZuKXtcblx0XHRzZXRUaW1lb3V0KGZuLCAw
KTtcblx0fTtcbn1cblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBPYmplY3RcblxuZGVzY3Jp
cHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHNcblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vu
c2UuXG5cbnJlcXVpcmVzOiBUeXBlXG5cbnByb3ZpZGVzOiBbT2JqZWN0LCBIYXNoXVxuXG4uLi5c
biovXG5cbihmdW5jdGlvbigpe1xuXG5PYmplY3QuZXh0ZW5kKHtcblxuXHRzdWJzZXQ6IGZ1bmN0
aW9uKG9iamVjdCwga2V5cyl7XG5cdFx0dmFyIHJlc3VsdHMgPSB7fTtcblx0XHRmb3IgKHZhciBp
ID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRcdHZhciBrID0ga2V5c1tp
XTtcblx0XHRcdGlmIChrIGluIG9iamVjdCkgcmVzdWx0c1trXSA9IG9iamVjdFtrXTtcblx0XHR9
XG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbihvYmplY3QsIGZu
LCBiaW5kKXtcblx0XHR2YXIgcmVzdWx0cyA9IHt9O1xuXHRcdHZhciBrZXlzID0gT2JqZWN0Lmtl
eXMob2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xu
XHRcdFx0dmFyIGtleSA9IGtleXNbaV07XG5cdFx0XHRyZXN1bHRzW2tleV0gPSBmbi5jYWxsKGJp
bmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRz
O1xuXHR9LFxuXG5cdGZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7XG5cdFx0dmFy
IHJlc3VsdHMgPSB7fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0
Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBr
ZXlzW2ldLCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0aWYgKGZuLmNhbGwoYmluZCwgdmFs
dWUsIGtleSwgb2JqZWN0KSkgcmVzdWx0c1trZXldID0gdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVy
biByZXN1bHRzO1xuXHR9LFxuXG5cdGV2ZXJ5OiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXtc
blx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7
IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0
aWYgKCFmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFsc2U7XG5cdFx0
fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHNvbWU6IGZ1bmN0aW9uKG9iamVjdCwgZm4s
IGJpbmQpe1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0XHRmb3IgKHZh
ciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0dmFyIGtleSA9IGtleXNbaV07
XG5cdFx0XHRpZiAoZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIHRydWU7
XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR2YWx1ZXM6IGZ1bmN0aW9uKG9i
amVjdCl7XG5cdFx0dmFyIHZhbHVlcyA9IFtdO1xuXHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMo
b2JqZWN0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRc
dFx0dmFyIGsgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2tdKTtcblx0XHR9
XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fSxcblxuXHRnZXRMZW5ndGg6IGZ1bmN0aW9uKG9iamVj
dCl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoO1xuXHR9LFxuXG5cdGtl
eU9mOiBmdW5jdGlvbihvYmplY3QsIHZhbHVlKXtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlz
KG9iamVjdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0
XHRcdHZhciBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKG9iamVjdFtrZXldID09PSB2YWx1ZSkg
cmV0dXJuIGtleTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0Y29udGFpbnM6
IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5T2Yob2JqZWN0
LCB2YWx1ZSkgIT0gbnVsbDtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbihvYmpl
Y3QsIGJhc2Upe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXG5cdFx0T2JqZWN0LmVhY2go
b2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5KXtcblx0XHRcdGlmIChiYXNlKSBrZXkgPSBiYXNl
ICsgJ1snICsga2V5ICsgJ10nO1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdHN3aXRjaCAodHlw
ZU9mKHZhbHVlKSl7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9iamVjdC50b1F1
ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYXJyYXknOlxuXHRc
dFx0XHRcdHZhciBxcyA9IHt9O1xuXHRcdFx0XHRcdHZhbHVlLmVhY2goZnVuY3Rpb24odmFsLCBp
KXtcblx0XHRcdFx0XHRcdHFzW2ldID0gdmFsO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJl
c3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpO1xuXHRcdFx0XHRcdGJyZWFrO1xu
XHRcdFx0XHRkZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQo
dmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5U3RyaW5nLnB1
c2gocmVzdWx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7
XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cblxuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5QYXJzZXJc
bmRlc2NyaXB0aW9uOiBTdGFuZGFsb25lIENTUzMgU2VsZWN0b3IgcGFyc2VyXG5wcm92aWRlczog
U2xpY2suUGFyc2VyXG4uLi5cbiovXG5cbjsoZnVuY3Rpb24oKXtcblxudmFyIHBhcnNlZCxcblx0
c2VwYXJhdG9ySW5kZXgsXG5cdGNvbWJpbmF0b3JJbmRleCxcblx0cmV2ZXJzZWQsXG5cdGNhY2hl
ID0ge30sXG5cdHJldmVyc2VDYWNoZSA9IHt9LFxuXHRyZVVuZXNjYXBlID0gL1xcXFwvZztcblxu
dmFyIHBhcnNlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaXNSZXZlcnNlZCl7XG5cdGlmIChleHBy
ZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsO1xuXHRpZiAoZXhwcmVzc2lvbi5TbGljayA9PT0g
dHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247XG5cdGV4cHJlc3Npb24gPSAoJycgKyBleHByZXNzaW9u
KS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdHJldmVyc2VkID0gISFpc1JldmVyc2Vk
O1xuXHR2YXIgY3VycmVudENhY2hlID0gKHJldmVyc2VkKSA/IHJldmVyc2VDYWNoZSA6IGNhY2hl
O1xuXHRpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVudENhY2hlW2V4
cHJlc3Npb25dO1xuXHRwYXJzZWQgPSB7XG5cdFx0U2xpY2s6IHRydWUsXG5cdFx0ZXhwcmVzc2lv
bnM6IFtdLFxuXHRcdHJhdzogZXhwcmVzc2lvbixcblx0XHRyZXZlcnNlOiBmdW5jdGlvbigpe1xu
XHRcdFx0cmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTtcblx0XHR9XG5cdH07XG5cdHNlcGFy
YXRvckluZGV4ID0gLTE7XG5cdHdoaWxlIChleHByZXNzaW9uICE9IChleHByZXNzaW9uID0gZXhw
cmVzc2lvbi5yZXBsYWNlKHJlZ2V4cCwgcGFyc2VyKSkpO1xuXHRwYXJzZWQubGVuZ3RoID0gcGFy
c2VkLmV4cHJlc3Npb25zLmxlbmd0aDtcblx0cmV0dXJuIGN1cnJlbnRDYWNoZVtwYXJzZWQucmF3
XSA9IChyZXZlcnNlZCkgPyByZXZlcnNlKHBhcnNlZCkgOiBwYXJzZWQ7XG59O1xuXG52YXIgcmV2
ZXJzZUNvbWJpbmF0b3IgPSBmdW5jdGlvbihjb21iaW5hdG9yKXtcblx0aWYgKGNvbWJpbmF0b3Ig
PT09ICchJykgcmV0dXJuICcgJztcblx0ZWxzZSBpZiAoY29tYmluYXRvciA9PT0gJyAnKSByZXR1
cm4gJyEnO1xuXHRlbHNlIGlmICgoL14hLykudGVzdChjb21iaW5hdG9yKSkgcmV0dXJuIGNvbWJp
bmF0b3IucmVwbGFjZSgvXiEvLCAnJyk7XG5cdGVsc2UgcmV0dXJuICchJyArIGNvbWJpbmF0b3I7
XG59O1xuXG52YXIgcmV2ZXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHR2YXIgZXhwcmVz
c2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGV4
cHJlc3Npb25zLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgZXhwID0gZXhwcmVzc2lvbnNbaV07XG5c
dFx0dmFyIGxhc3QgPSB7cGFydHM6IFtdLCB0YWc6ICcqJywgY29tYmluYXRvcjogcmV2ZXJzZUNv
bWJpbmF0b3IoZXhwWzBdLmNvbWJpbmF0b3IpfTtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwg
ZXhwLmxlbmd0aDsgaisrKXtcblx0XHRcdHZhciBjZXhwID0gZXhwW2pdO1xuXHRcdFx0aWYgKCFj
ZXhwLnJldmVyc2VDb21iaW5hdG9yKSBjZXhwLnJldmVyc2VDb21iaW5hdG9yID0gJyAnO1xuXHRc
dFx0Y2V4cC5jb21iaW5hdG9yID0gY2V4cC5yZXZlcnNlQ29tYmluYXRvcjtcblx0XHRcdGRlbGV0
ZSBjZXhwLnJldmVyc2VDb21iaW5hdG9yO1xuXHRcdH1cblxuXHRcdGV4cC5yZXZlcnNlKCkucHVz
aChsYXN0KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn07XG5cbnZhciBlc2NhcGVSZWdF
eHAgPSBmdW5jdGlvbihzdHJpbmcpey8vIENyZWRpdDogWFJlZ0V4cCAwLjYuMSAoYykgMjAwNy0y
MDA4IFN0ZXZlbiBMZXZpdGhhbiA8aHR0cDovL3N0ZXZlbmxldml0aGFuLmNvbS9yZWdleC94cmVn
ZXhwLz4gTUlUIExpY2Vuc2Vcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLVtcXF17fSgpKis/
LlxcXFxeJHwsI1xcc10vZywgZnVuY3Rpb24obWF0Y2gpe1xuXHRcdHJldHVybiAnXFxcXCcgKyBt
YXRjaDtcblx0fSk7XG59O1xuXG52YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChcbi8qXG4jIS91c3Iv
YmluL2VudiBydWJ5XG5wdXRzIFwiXFx0XFx0XCIgKyBEQVRBLnJlYWQuZ3N1YigvXFwoXFw/eFxc
KXxcXHMrIy4qJHxcXHMrfFxcXFwkfFxcXFxuLywnJylcbl9fRU5EX19cblx0XCIoP3gpXig/Olxc
XG5cdCAgXFxcXHMqICggLCApIFxcXFxzKiAgICAgICAgICAgICAgICMgU2VwYXJhdG9yICAgICAg
ICAgIFxcblxcXG5cdHwgXFxcXHMqICggPGNvbWJpbmF0b3I+KyApIFxcXFxzKiAgICMgQ29tYmlu
YXRvciAgICAgICAgIFxcblxcXG5cdHwgICAgICAoIFxcXFxzKyApICAgICAgICAgICAgICAgICAj
IENvbWJpbmF0b3JDaGlsZHJlbiBcXG5cXFxuXHR8ICAgICAgKCA8dW5pY29kZT4rIHwgXFxcXCog
KSAgICAgIyBUYWcgICAgICAgICAgICAgICAgXFxuXFxcblx0fCBcXFxcIyAgKCA8dW5pY29kZT4r
ICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxcblxcXG5cdHwgXFxcXC4gICggPHVu
aWNvZGU+KyAgICAgICApICAgICAjIENsYXNzTmFtZSAgICAgICAgICBcXG5cXFxuXHR8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgQXR0cmlidXRlICAgICAgICAgIFxcblxcXG5cdFxc
XFxbICBcXFxuXHRcdFxcXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFxcXG5cdFx0XHRcXFxccyog
KFsqXiQhfnxdPz0pICAoPzogIFxcXG5cdFx0XHRcdFxcXFxzKiAoPzpcXFxuXHRcdFx0XHRcdChb
XFxcIiddPykoLio/KVxcXFw5IFxcXG5cdFx0XHRcdClcXFxuXHRcdFx0KSAgXFxcblx0XHQpPyAg
XFxcXHMqICBcXFxuXHRcXFxcXSg/IVxcXFxdKSBcXG5cXFxuXHR8ICAgOisgKCA8dW5pY29kZT4r
ICkoPzpcXFxuXHRcXFxcKCAoPzpcXFxuXHRcdCg/OihbXFxcIiddKShbXlxcXFwxMl0qKVxcXFwx
Mil8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKylcXFxuXHQpIFxcXFwpXFxcblx0KT9cXFxu
XHQpXCJcbiovXG5cdFwiXig/OlxcXFxzKigsKVxcXFxzKnxcXFxccyooPGNvbWJpbmF0b3I+Kylc
XFxccyp8KFxcXFxzKyl8KDx1bmljb2RlPit8XFxcXCopfFxcXFwjKDx1bmljb2RlPispfFxcXFwu
KDx1bmljb2RlPispfFxcXFxbXFxcXHMqKDx1bmljb2RlMT4rKSg/OlxcXFxzKihbKl4kIX58XT89
KSg/OlxcXFxzKig/OihbXFxcIiddPykoLio/KVxcXFw5KSkpP1xcXFxzKlxcXFxdKD8hXFxcXF0p
fCg6KykoPHVuaWNvZGU+KykoPzpcXFxcKCg/Oig/OihbXFxcIiddKShbXlxcXFwxM10qKVxcXFwx
Myl8KCg/OlxcXFwoW14pXStcXFxcKXxbXigpXSopKykpXFxcXCkpPylcIlxuXHQucmVwbGFjZSgv
PGNvbWJpbmF0b3I+LywgJ1snICsgZXNjYXBlUmVnRXhwKCc+K35gIUAkJV4mPXt9XFxcXDs8Lycp
ICsgJ10nKVxuXHQucmVwbGFjZSgvPHVuaWNvZGU+L2csICcoPzpbXFxcXHdcXFxcdTAwYTEtXFxc
XHVGRkZGLV18XFxcXFxcXFxbXlxcXFxzMC05YS1mXSknKVxuXHQucmVwbGFjZSgvPHVuaWNvZGUx
Pi9nLCAnKD86WzpcXFxcd1xcXFx1MDBhMS1cXFxcdUZGRkYtXXxcXFxcXFxcXFteXFxcXHMwLTlh
LWZdKScpXG4pO1xuXG5mdW5jdGlvbiBwYXJzZXIoXG5cdHJhd01hdGNoLFxuXG5cdHNlcGFyYXRv
cixcblx0Y29tYmluYXRvcixcblx0Y29tYmluYXRvckNoaWxkcmVuLFxuXG5cdHRhZ05hbWUsXG5c
dGlkLFxuXHRjbGFzc05hbWUsXG5cblx0YXR0cmlidXRlS2V5LFxuXHRhdHRyaWJ1dGVPcGVyYXRv
cixcblx0YXR0cmlidXRlUXVvdGUsXG5cdGF0dHJpYnV0ZVZhbHVlLFxuXG5cdHBzZXVkb01hcmtl
cixcblx0cHNldWRvQ2xhc3MsXG5cdHBzZXVkb1F1b3RlLFxuXHRwc2V1ZG9DbGFzc1F1b3RlZFZh
bHVlLFxuXHRwc2V1ZG9DbGFzc1ZhbHVlXG4pe1xuXHRpZiAoc2VwYXJhdG9yIHx8IHNlcGFyYXRv
ckluZGV4ID09PSAtMSl7XG5cdFx0cGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJhdG9ySW5kZXhd
ID0gW107XG5cdFx0Y29tYmluYXRvckluZGV4ID0gLTE7XG5cdFx0aWYgKHNlcGFyYXRvcikgcmV0
dXJuICcnO1xuXHR9XG5cblx0aWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNoaWxkcmVuIHx8
IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpe1xuXHRcdGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yIHx8
ICcgJztcblx0XHR2YXIgY3VycmVudFNlcGFyYXRvciA9IHBhcnNlZC5leHByZXNzaW9uc1tzZXBh
cmF0b3JJbmRleF07XG5cdFx0aWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0b3JbY29tYmlu
YXRvckluZGV4XSlcblx0XHRcdGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XS5yZXZl
cnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpO1xuXHRcdGN1cnJl
bnRTZXBhcmF0b3JbKytjb21iaW5hdG9ySW5kZXhdID0ge2NvbWJpbmF0b3I6IGNvbWJpbmF0b3Is
IHRhZzogJyonfTtcblx0fVxuXG5cdHZhciBjdXJyZW50UGFyc2VkID0gcGFyc2VkLmV4cHJlc3Np
b25zW3NlcGFyYXRvckluZGV4XVtjb21iaW5hdG9ySW5kZXhdO1xuXG5cdGlmICh0YWdOYW1lKXtc
blx0XHRjdXJyZW50UGFyc2VkLnRhZyA9IHRhZ05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7
XG5cblx0fSBlbHNlIGlmIChpZCl7XG5cdFx0Y3VycmVudFBhcnNlZC5pZCA9IGlkLnJlcGxhY2Uo
cmVVbmVzY2FwZSwgJycpO1xuXG5cdH0gZWxzZSBpZiAoY2xhc3NOYW1lKXtcblx0XHRjbGFzc05h
bWUgPSBjbGFzc05hbWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7XG5cblx0XHRpZiAoIWN1cnJl
bnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtdO1xuXHRcdGlm
ICghY3VycmVudFBhcnNlZC5jbGFzc2VzKSBjdXJyZW50UGFyc2VkLmNsYXNzZXMgPSBbXTtcblx0
XHRjdXJyZW50UGFyc2VkLmNsYXNzTGlzdC5wdXNoKGNsYXNzTmFtZSk7XG5cdFx0Y3VycmVudFBh
cnNlZC5jbGFzc2VzLnB1c2goe1xuXHRcdFx0dmFsdWU6IGNsYXNzTmFtZSxcblx0XHRcdHJlZ2V4
cDogbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgJyhc
XFxcc3wkKScpXG5cdFx0fSk7XG5cblx0fSBlbHNlIGlmIChwc2V1ZG9DbGFzcyl7XG5cdFx0cHNl
dWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NRdW90ZWRWYWx1
ZTtcblx0XHRwc2V1ZG9DbGFzc1ZhbHVlID0gcHNldWRvQ2xhc3NWYWx1ZSA/IHBzZXVkb0NsYXNz
VmFsdWUucmVwbGFjZShyZVVuZXNjYXBlLCAnJykgOiBudWxsO1xuXG5cdFx0aWYgKCFjdXJyZW50
UGFyc2VkLnBzZXVkb3MpIGN1cnJlbnRQYXJzZWQucHNldWRvcyA9IFtdO1xuXHRcdGN1cnJlbnRQ
YXJzZWQucHNldWRvcy5wdXNoKHtcblx0XHRcdGtleTogcHNldWRvQ2xhc3MucmVwbGFjZShyZVVu
ZXNjYXBlLCAnJyksXG5cdFx0XHR2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSxcblx0XHRcdHR5cGU6
IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCdcblx0XHR9KTtc
blxuXHR9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7XG5cdFx0YXR0cmlidXRlS2V5ID0gYXR0cmli
dXRlS2V5LnJlcGxhY2UocmVVbmVzY2FwZSwgJycpO1xuXHRcdGF0dHJpYnV0ZVZhbHVlID0gKGF0
dHJpYnV0ZVZhbHVlIHx8ICcnKS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTtcblxuXHRcdHZhciB0
ZXN0LCByZWdleHA7XG5cblx0XHRzd2l0Y2ggKGF0dHJpYnV0ZU9wZXJhdG9yKXtcblx0XHRcdGNh
c2UgJ149JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICdeJysgZXNjYXBlUmVnRXhwKGF0
dHJpYnV0ZVZhbHVlKSAgICAgICAgICAgICk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnJD0nIDogcmVn
ZXhwID0gbmV3IFJlZ0V4cCggICAgICAgICAgICBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUp
ICsnJCcgICAgICAgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd+PScgOiByZWdleHAgPSBuZXcgUmVn
RXhwKCAnKF58XFxcXHMpJysgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyhcXFxcc3wk
KScgKTsgYnJlYWs7XG5cdFx0XHRjYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAg
ICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICApOyBicmVhaztc
blx0XHRcdGNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVy
biBhdHRyaWJ1dGVWYWx1ZSA9PSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0Y2FzZSAn
Kj0nIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuIHZhbHVlICYmIHZh
bHVlLmluZGV4T2YoYXR0cmlidXRlVmFsdWUpID4gLTE7XG5cdFx0XHR9OyBicmVhaztcblx0XHRc
dGNhc2UgJyE9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdHJldHVybiBhdHRy
aWJ1dGVWYWx1ZSAhPSB2YWx1ZTtcblx0XHRcdH07IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdCAgIDog
dGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdFx0cmV0dXJuICEhdmFsdWU7XG5cdFx0XHR9
O1xuXHRcdH1cblxuXHRcdGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAnJyAmJiAoL15bKiReXT0kLyku
dGVzdChhdHRyaWJ1dGVPcGVyYXRvcikpIHRlc3QgPSBmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJu
IGZhbHNlO1xuXHRcdH07XG5cblx0XHRpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7
XG5cdFx0XHRyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpO1xuXHRcdH07XG5cblx0
XHRpZiAoIWN1cnJlbnRQYXJzZWQuYXR0cmlidXRlcykgY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVz
ID0gW107XG5cdFx0Y3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0a2V5OiBh
dHRyaWJ1dGVLZXksXG5cdFx0XHRvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3IsXG5cdFx0XHR2
YWx1ZTogYXR0cmlidXRlVmFsdWUsXG5cdFx0XHR0ZXN0OiB0ZXN0XG5cdFx0fSk7XG5cblx0fVxu
XG5cdHJldHVybiAnJztcbn07XG5cbi8vIFNsaWNrIE5TXG5cbnZhciBTbGljayA9ICh0aGlzLlNs
aWNrIHx8IHt9KTtcblxuU2xpY2sucGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0cmV0
dXJuIHBhcnNlKGV4cHJlc3Npb24pO1xufTtcblxuU2xpY2suZXNjYXBlUmVnRXhwID0gZXNjYXBl
UmVnRXhwO1xuXG5pZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljaztcblxufSkuYXBw
bHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0
cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpO1xuXG4vKlxuLS0tXG5uYW1lOiBTbGljay5GaW5kZXJc
bmRlc2NyaXB0aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVuZ2luZS5cbnBy
b3ZpZGVzOiBTbGljay5GaW5kZXJcbnJlcXVpcmVzOiBTbGljay5QYXJzZXJcbi4uLlxuKi9cblxu
OyhmdW5jdGlvbigpe1xuXG52YXIgbG9jYWwgPSB7fSxcblx0ZmVhdHVyZXNDYWNoZSA9IHt9LFxu
XHR0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIEZlYXR1cmUgLyBC
dWcgZGV0ZWN0aW9uXG5cbmxvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZuKXtcblx0cmV0
dXJuICgvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXFxdXFxzKlxcfS8pLnRlc3QoJycgKyBmbik7XG59
O1xuXG5sb2NhbC5pc1hNTCA9IGZ1bmN0aW9uKGRvY3VtZW50KXtcblx0cmV0dXJuICghIWRvY3Vt
ZW50LnhtbFZlcnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5nLmNhbGwoZG9j
dW1lbnQpID09ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8XG5cdChkb2N1bWVudC5ub2RlVHlw
ZSA9PSA5ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAnSFRNTCcpO1xu
fTtcblxubG9jYWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7XG5cblx0Ly8gY29u
dmVydCBlbGVtZW50cyAvIHdpbmRvdyBhcmd1bWVudHMgdG8gZG9jdW1lbnQuIGlmIGRvY3VtZW50
IGNhbm5vdCBiZSBleHRyYXBvbGF0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuXHR2YXIgbm9k
ZVR5cGUgPSBkb2N1bWVudC5ub2RlVHlwZTtcblx0aWYgKG5vZGVUeXBlID09IDkpOyAvLyBkb2N1
bWVudFxuXHRlbHNlIGlmIChub2RlVHlwZSkgZG9jdW1lbnQgPSBkb2N1bWVudC5vd25lckRvY3Vt
ZW50OyAvLyBub2RlXG5cdGVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9jdW1lbnQgPSBk
b2N1bWVudC5kb2N1bWVudDsgLy8gd2luZG93XG5cdGVsc2UgcmV0dXJuO1xuXG5cdC8vIGNoZWNr
IGlmIGl0J3MgdGhlIG9sZCBkb2N1bWVudFxuXG5cdGlmICh0aGlzLmRvY3VtZW50ID09PSBkb2N1
bWVudCkgcmV0dXJuO1xuXHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG5cblx0Ly8gY2hlY2sg
aWYgd2UgaGF2ZSBkb25lIGZlYXR1cmUgZGV0ZWN0aW9uIG9uIHRoaXMgZG9jdW1lbnQgYmVmb3Jl
XG5cblx0dmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0cm9vdFVpZCA9
IHRoaXMuZ2V0VUlEWE1MKHJvb3QpLFxuXHRcdGZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290
VWlkXSxcblx0XHRmZWF0dXJlO1xuXG5cdGlmIChmZWF0dXJlcyl7XG5cdFx0Zm9yIChmZWF0dXJl
IGluIGZlYXR1cmVzKXtcblx0XHRcdHRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTtc
blx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jv
b3RVaWRdID0ge307XG5cblx0ZmVhdHVyZXMucm9vdCA9IHJvb3Q7XG5cdGZlYXR1cmVzLmlzWE1M
RG9jdW1lbnQgPSB0aGlzLmlzWE1MKGRvY3VtZW50KTtcblxuXHRmZWF0dXJlcy5icm9rZW5TdGFy
R0VCVE5cblx0PSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQVxuXHQ9IGZlYXR1cmVzLmlk
R2V0c05hbWVcblx0PSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0PSBmZWF0dXJlcy5i
cm9rZW5HRUJDTlxuXHQ9IGZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0Fcblx0PSBmZWF0dXJlcy5i
cm9rZW5FbXB0eUF0dHJpYnV0ZVFTQVxuXHQ9IGZlYXR1cmVzLmlzSFRNTERvY3VtZW50XG5cdD0g
ZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yXG5cdD0gZmFsc2U7XG5cblx0dmFyIHN0YXJT
ZWxlY3RzQ2xvc2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLFxuXHRcdGJyb2tlblNlY29uZENsYXNz
TmFtZUdFQkNOLCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLFxuXHRcdGJyb2tlbkZvcm1B
dHRyaWJ1dGVHZXR0ZXI7XG5cblx0dmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191bmlxdWVpZCc7
XG5cdHZhciB0ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG5cdHZh
ciB0ZXN0Um9vdCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ2JvZHknKVswXSB8fCByb290O1xuXHR0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0ZXN0Tm9kZSk7
XG5cblx0Ly8gb24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0RWxlbWVudHNC
eUlkIGRvZXNudCB3b3JrIHByb3Blcmx5XG5cdHRyeSB7XG5cdFx0dGVzdE5vZGUuaW5uZXJIVE1M
ID0gJzxhIGlkPVwiJytpZCsnXCI+PC9hPic7XG5cdFx0ZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQg
PSAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0fSBjYXRjaCAoZSl7fVxuXG5cdGlm
IChmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCl7XG5cblx0XHR0ZXN0Tm9kZS5zdHlsZS5kaXNwbGF5
ID0gJ25vbmUnO1xuXG5cdFx0Ly8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIGZvciBnZXRFbGVt
ZW50c0J5VGFnTmFtZSgnKicpIGZvciBzb21lIGRvY3VtZW50c1xuXHRcdHRlc3ROb2RlLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcblx0XHRzdGFyU2VsZWN0c0NvbW1l
bnRzID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoID4gMSk7XG5c
blx0XHQvLyBJRSByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIGdldEVs
ZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtcblx0XHRc
dHRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0c2VsZWN0ZWQgPSB0ZXN0
Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdFx0c3RhclNlbGVjdHNDbG9zZWQg
PSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUu
Y2hhckF0KDApID09ICcvJyk7XG5cdFx0fSBjYXRjaCAoZSl7fTtcblxuXHRcdGZlYXR1cmVzLmJy
b2tlblN0YXJHRUJUTiA9IHN0YXJTZWxlY3RzQ29tbWVudHMgfHwgc3RhclNlbGVjdHNDbG9zZWQ7
XG5cblx0XHQvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5zdGVhZCBvZiBq
dXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzXG5cdFx0dHJ5IHtc
blx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBuYW1lPVwiJysgaWQgKydcIj48L2E+PGIg
aWQ9XCInKyBpZCArJ1wiPjwvYj4nO1xuXHRcdFx0ZmVhdHVyZXMuaWRHZXRzTmFtZSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDtcblx0XHR9IGNh
dGNoIChlKXt9XG5cblx0XHRpZiAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7XG5c
blx0XHRcdC8vIFNhZmFyaSAzLjIgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYWNoZXMgcmVzdWx0
c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwi
ZlwiPjwvYT48YSBjbGFzcz1cImJcIj48L2E+Jztcblx0XHRcdFx0dGVzdE5vZGUuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aDtcblx0XHRcdFx0dGVzdE5vZGUuZmlyc3RDaGlsZC5j
bGFzc05hbWUgPSAnYic7XG5cdFx0XHRcdGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAo
dGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAyKTtcblx0XHRc
dH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIE9wZXJhIDkuNiBnZXRFbGVtZW50c0J5Q2xhc3NO
YW1lIGRvZXNudCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJzdCBvbmVcblx0
XHRcdHRyeSB7XG5cdFx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cImFcIj48
L2E+PGEgY2xhc3M9XCJmIGIgYVwiPjwvYT4nO1xuXHRcdFx0XHRicm9rZW5TZWNvbmRDbGFzc05h
bWVHRUJDTiA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJykubGVuZ3RoICE9
IDIpO1xuXHRcdFx0fSBjYXRjaCAoZSl7fVxuXG5cdFx0XHRmZWF0dXJlcy5icm9rZW5HRUJDTiA9
IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VC
Q047XG5cdFx0fVxuXG5cdFx0aWYgKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwpe1xuXHRcdFx0
Ly8gSUUgOCByZXR1cm5zIGNsb3NlZCBub2RlcyAoRUc6XCI8L2Zvbz5cIikgZm9yIHF1ZXJ5U2Vs
ZWN0b3JBbGwoJyonKSBmb3Igc29tZSBkb2N1bWVudHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRl
c3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nO1xuXHRcdFx0XHRzZWxlY3RlZCA9IHRlc3RO
b2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcblx0XHRcdFx0ZmVhdHVyZXMuc3RhclNlbGVjdHND
bG9zZWRRU0EgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0u
bm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7XG5cdFx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHRc
dC8vIFNhZmFyaSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRoIG1peGVkY2Fz
ZSBvbiBxdWlya3Ntb2RlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwg
PSAnPGEgY2xhc3M9XCJNaVhcIj48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuTWl4ZWRD
YXNlUVNBID0gIXRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5NaVgnKS5sZW5ndGg7XG5cdFx0
XHR9IGNhdGNoIChlKXt9XG5cblx0XHRcdC8vIFdlYmtpdCBhbmQgT3BlcmEgZG9udCByZXR1cm4g
c2VsZWN0ZWQgb3B0aW9ucyBvbiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHR0cnkge1xuXHRcdFx0
XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPVwic2VsZWN0
ZWRcIj5hPC9vcHRpb24+PC9zZWxlY3Q+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuQ2hlY2tl
ZFFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxlbmd0aCA9PSAw
KTtcblx0XHRcdH0gY2F0Y2ggKGUpe307XG5cblx0XHRcdC8vIElFIHJldHVybnMgaW5jb3JyZWN0
IHJlc3VsdHMgZm9yIGF0dHJbKl4kXT1cIlwiIHNlbGVjdG9ycyBvbiBxdWVyeVNlbGVjdG9yQWxs
XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJc
Ij48L2E+Jztcblx0XHRcdFx0ZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgPSAodGVz
dE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIlwiXScpLmxlbmd0aCAhPSAwKTtcblx0
XHRcdH0gY2F0Y2ggKGUpe31cblxuXHRcdH1cblxuXHRcdC8vIElFNi03LCBpZiBhIGZvcm0gaGFz
IGFuIGlucHV0IG9mIGlkIHgsIGZvcm0uZ2V0QXR0cmlidXRlKHgpIHJldHVybnMgYSByZWZlcmVu
Y2UgdG8gdGhlIGlucHV0XG5cdFx0dHJ5IHtcblx0XHRcdHRlc3ROb2RlLmlubmVySFRNTCA9ICc8
Zm9ybSBhY3Rpb249XCJzXCI+PGlucHV0IGlkPVwiYWN0aW9uXCIvPjwvZm9ybT4nO1xuXHRcdFx0
YnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlciA9ICh0ZXN0Tm9kZS5maXJzdENoaWxkLmdldEF0dHJp
YnV0ZSgnYWN0aW9uJykgIT0gJ3MnKTtcblx0XHR9IGNhdGNoIChlKXt9XG5cblx0XHQvLyBuYXRp
dmUgbWF0Y2hlc1NlbGVjdG9yIGZ1bmN0aW9uXG5cblx0XHRmZWF0dXJlcy5uYXRpdmVNYXRjaGVz
U2VsZWN0b3IgPSByb290Lm1hdGNoZXMgfHwgLypyb290Lm1zTWF0Y2hlc1NlbGVjdG9yIHx8Ki8g
cm9vdC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcm9vdC53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5c
dFx0aWYgKGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcikgdHJ5IHtcblx0XHRcdC8vIGlm
IG1hdGNoZXNTZWxlY3RvciB0cm93cyBlcnJvcnMgb24gaW5jb3JyZWN0IHNpbnRheGVzIHdlIGNh
biB1c2UgaXRcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKHJvb3Qs
ICc6c2xpY2snKTtcblx0XHRcdGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IG51bGw7
XG5cdFx0fSBjYXRjaCAoZSl7fVxuXG5cdH1cblxuXHR0cnkge1xuXHRcdHJvb3Quc2xpY2tfZXhw
YW5kbyA9IDE7XG5cdFx0ZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbztcblx0XHRmZWF0dXJlcy5n
ZXRVSUQgPSB0aGlzLmdldFVJREhUTUw7XG5cdH0gY2F0Y2ggKGUpe1xuXHRcdGZlYXR1cmVzLmdl
dFVJRCA9IHRoaXMuZ2V0VUlEWE1MO1xuXHR9XG5cblx0dGVzdFJvb3QucmVtb3ZlQ2hpbGQodGVz
dE5vZGUpO1xuXHR0ZXN0Tm9kZSA9IHNlbGVjdGVkID0gdGVzdFJvb3QgPSBudWxsO1xuXG5cdC8v
IGdldEF0dHJpYnV0ZVxuXG5cdGZlYXR1cmVzLmdldEF0dHJpYnV0ZSA9IChmZWF0dXJlcy5pc0hU
TUxEb2N1bWVudCAmJiBicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyKSA/IGZ1bmN0aW9uKG5vZGUs
IG5hbWUpe1xuXHRcdHZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07XG5c
dFx0aWYgKG1ldGhvZCkgcmV0dXJuIG1ldGhvZC5jYWxsKG5vZGUpO1xuXHRcdHZhciBhdHRyaWJ1
dGVOb2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuXHRcdHJldHVybiAoYXR0cmli
dXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7XG5cdH0gOiBmdW5jdGlv
bihub2RlLCBuYW1lKXtcblx0XHR2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25h
bWVdO1xuXHRcdHJldHVybiAobWV0aG9kKSA/IG1ldGhvZC5jYWxsKG5vZGUpIDogbm9kZS5nZXRB
dHRyaWJ1dGUobmFtZSk7XG5cdH07XG5cblx0Ly8gaGFzQXR0cmlidXRlXG5cblx0ZmVhdHVyZXMu
aGFzQXR0cmlidXRlID0gKHJvb3QgJiYgdGhpcy5pc05hdGl2ZUNvZGUocm9vdC5oYXNBdHRyaWJ1
dGUpKSA/IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSl7XG5cdFx0cmV0dXJuIG5vZGUuaGFzQXR0
cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH0gOiBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpe1xuXHRc
dG5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTtcblx0XHRyZXR1cm4gISEo
bm9kZSAmJiAobm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTtcblx0fTtcblxuXHQv
LyBjb250YWluc1xuXHQvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlucyBzaG91bGQg
YmUgZGlmZmVyZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzP1xuXHR2YXIgbmF0aXZlUm9v
dENvbnRhaW5zID0gcm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRhaW5zKSxcblx0
XHRuYXRpdmVEb2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05hdGl2ZUNvZGUo
ZG9jdW1lbnQuY29udGFpbnMpO1xuXG5cdGZlYXR1cmVzLmNvbnRhaW5zID0gKG5hdGl2ZVJvb3RD
b250YWlucyAmJiBuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5v
ZGUpe1xuXHRcdHJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpO1xuXHR9IDogKG5hdGl2ZVJv
b3RDb250YWlucyAmJiAhbmF0aXZlRG9jdW1lbnRDb250YWlucykgPyBmdW5jdGlvbihjb250ZXh0
LCBub2RlKXtcblx0XHQvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24gZG9jdW1lbnQu
XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgKChjb250ZXh0ID09PSBkb2N1bWVudCkg
PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBjb250ZXh0KS5jb250YWlucyhub2RlKTtcblx0
fSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oY29u
dGV4dCwgbm9kZSl7XG5cdFx0cmV0dXJuIGNvbnRleHQgPT09IG5vZGUgfHwgISEoY29udGV4dC5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2RlKSAmIDE2KTtcblx0fSA6IGZ1bmN0aW9uKGNvbnRl
eHQsIG5vZGUpe1xuXHRcdGlmIChub2RlKSBkbyB7XG5cdFx0XHRpZiAobm9kZSA9PT0gY29udGV4
dCkgcmV0dXJuIHRydWU7XG5cdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKTtc
blx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gZG9jdW1lbnQgb3JkZXIgc29ydGluZ1xu
XHQvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pXG5cblx0ZmVhdHVy
ZXMuZG9jdW1lbnRTb3J0ZXIgPSAocm9vdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikgPyBmdW5j
dGlvbihhLCBiKXtcblx0XHRpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29t
cGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwO1xuXHRcdHJldHVybiBhLmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAxO1xuXHR9IDogKCdzb3Vy
Y2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXtcblx0XHRpZiAoIWEuc291cmNlSW5k
ZXggfHwgIWIuc291cmNlSW5kZXgpIHJldHVybiAwO1xuXHRcdHJldHVybiBhLnNvdXJjZUluZGV4
IC0gYi5zb3VyY2VJbmRleDtcblx0fSA6IChkb2N1bWVudC5jcmVhdGVSYW5nZSkgPyBmdW5jdGlv
bihhLCBiKXtcblx0XHRpZiAoIWEub3duZXJEb2N1bWVudCB8fCAhYi5vd25lckRvY3VtZW50KSBy
ZXR1cm4gMDtcblx0XHR2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCks
IGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXHRcdGFSYW5nZS5zZXRT
dGFydChhLCAwKTtcblx0XHRhUmFuZ2Uuc2V0RW5kKGEsIDApO1xuXHRcdGJSYW5nZS5zZXRTdGFy
dChiLCAwKTtcblx0XHRiUmFuZ2Uuc2V0RW5kKGIsIDApO1xuXHRcdHJldHVybiBhUmFuZ2UuY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgYlJhbmdlKTtcblx0fSA6IG51
bGw7XG5cblx0cm9vdCA9IG51bGw7XG5cblx0Zm9yIChmZWF0dXJlIGluIGZlYXR1cmVzKXtcblx0
XHR0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07XG5cdH1cbn07XG5cbi8vIE1haW4g
TWV0aG9kXG5cbnZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/OltcXHctXSt8XFwq
KSkkLyxcblx0cmVFbXB0eUF0dHJpYnV0ZSA9IC9cXFsuK1sqJF5dPSg/OlwiXCJ8JycpP1xcXS8s
XG5cdHFzYUZhaWxFeHBDYWNoZSA9IHt9O1xuXG5sb2NhbC5zZWFyY2ggPSBmdW5jdGlvbihjb250
ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXtcblxuXHR2YXIgZm91bmQgPSB0aGlzLmZv
dW5kID0gKGZpcnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTtcblxuXHRpZiAoIWNvbnRleHQp
IHJldHVybiBmb3VuZDtcblx0ZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNvbnRleHQgPSBj
b250ZXh0LmRvY3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5kb3cgdG8gYSBk
b2N1bWVudFxuXHRlbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZvdW5kO1xuXG5c
dC8vIHNldHVwXG5cblx0dmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsXG5cdFx0dW5pcXVlcyA9
IHRoaXMudW5pcXVlcyA9IHt9LFxuXHRcdGhhc090aGVycyA9ICEhKGFwcGVuZCAmJiBhcHBlbmQu
bGVuZ3RoKSxcblx0XHRjb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVUeXBlID09IDkp
O1xuXG5cdGlmICh0aGlzLmRvY3VtZW50ICE9PSAoY29udGV4dElzRG9jdW1lbnQgPyBjb250ZXh0
IDogY29udGV4dC5vd25lckRvY3VtZW50KSkgdGhpcy5zZXREb2N1bWVudChjb250ZXh0KTtcblxu
XHQvLyBhdm9pZCBkdXBsaWNhdGluZyBpdGVtcyBhbHJlYWR5IGluIHRoZSBhcHBlbmQgYXJyYXlc
blx0aWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1bmlxdWVzW3Ro
aXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlO1xuXG5cdC8vIGV4cHJlc3Npb24gY2hlY2tzXG5c
blx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09ICdzdHJpbmcnKXsgLy8gZXhwcmVzc2lvbiBpcyBh
IHN0cmluZ1xuXG5cdFx0Lyo8c2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qL1xuXHRcdHZhciBz
aW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rvcik7XG5cdFx0
c2ltcGxlU2VsZWN0b3JzOiBpZiAoc2ltcGxlU2VsZWN0b3Ipe1xuXG5cdFx0XHR2YXIgc3ltYm9s
ID0gc2ltcGxlU2VsZWN0b3JbMV0sXG5cdFx0XHRcdG5hbWUgPSBzaW1wbGVTZWxlY3RvclsyXTtc
blxuXHRcdFx0aWYgKCFzeW1ib2wpe1xuXG5cdFx0XHRcdGlmIChuYW1lID09ICcqJyAmJiB0aGlz
LmJyb2tlblN0YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xuXHRcdFx0XHRub2RlcyA9
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG5cdFx0XHRcdGlmIChmaXJzdCkg
cmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7XG5cdFx0XHRcdGZvciAoaSA9IDA7IG5vZGUgPSBub2Rl
c1tpKytdOyl7XG5cdFx0XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRV
SUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Ug
aWYgKHN5bWJvbCA9PSAnIycpe1xuXG5cdFx0XHRcdGlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8
fCAhY29udGV4dElzRG9jdW1lbnQpIGJyZWFrIHNpbXBsZVNlbGVjdG9ycztcblx0XHRcdFx0bm9k
ZSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XG5cdFx0XHRcdGlmICghbm9kZSkgcmV0
dXJuIGZvdW5kO1xuXHRcdFx0XHRpZiAodGhpcy5pZEdldHNOYW1lICYmIG5vZGUuZ2V0QXR0cmli
dXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gbmFtZSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzO1xu
XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7XG5cdFx0XHRcdGlmICghKGhh
c090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7
XG5cblx0XHRcdH0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7XG5cblx0XHRcdFx0aWYgKCF0aGlz
LmlzSFRNTERvY3VtZW50IHx8ICgoIWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCB0
aGlzLmJyb2tlbkdFQkNOKSAmJiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSBicmVhayBzaW1w
bGVTZWxlY3RvcnM7XG5cdFx0XHRcdGlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUg
JiYgIXRoaXMuYnJva2VuR0VCQ04pe1xuXHRcdFx0XHRcdG5vZGVzID0gY29udGV4dC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKG5hbWUpO1xuXHRcdFx0XHRcdGlmIChmaXJzdCkgcmV0dXJuIG5vZGVz
WzBdIHx8IG51bGw7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXtc
blx0XHRcdFx0XHRcdGlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUp
XSkpIGZvdW5kLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRc
dFx0XHRcdHZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJysgU2xpY2suZXNj
YXBlUmVnRXhwKG5hbWUpICsnKFxcXFxzfCQpJyk7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250ZXh0
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgbm9kZSA9
IG5vZGVzW2krK107KXtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lO1xu
XHRcdFx0XHRcdFx0aWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChjbGFzc05hbWUp
KSkgY29udGludWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlyc3QpIHJldHVybiBub2RlO1xuXHRcdFx0
XHRcdFx0aWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91
bmQucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0
XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIChmaXJzdCkg
PyBudWxsIDogZm91bmQ7XG5cblx0XHR9XG5cdFx0Lyo8L3NpbXBsZS1zZWxlY3RvcnMtb3ZlcnJp
ZGU+Ki9cblxuXHRcdC8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovXG5cdFx0cXVlcnlTZWxl
Y3RvcjogaWYgKGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7XG5cblx0XHRcdGlmICghdGhpcy5p
c0hUTUxEb2N1bWVudFxuXHRcdFx0XHR8fCBxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl1cblx0
XHRcdFx0Ly9UT0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVhbGx5IG1peGVk
IGNhc2Vcblx0XHRcdFx0fHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0Fcblx0XHRcdFx0fHwgKHRo
aXMuYnJva2VuQ2hlY2tlZFFTQSAmJiBleHByZXNzaW9uLmluZGV4T2YoJzpjaGVja2VkJykgPiAt
MSlcblx0XHRcdFx0fHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYgcmVFbXB0eUF0
dHJpYnV0ZS50ZXN0KGV4cHJlc3Npb24pKVxuXHRcdFx0XHR8fCAoIWNvbnRleHRJc0RvY3VtZW50
IC8vQWJvcnQgd2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uXG5cdFx0XHRcdFx0Ly8gIHRo
ZXJlIGFyZSBtdWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3Jcblx0XHRcdFx0XHQv
LyAgc2luY2Ugd2UgY3VycmVudGx5IG9ubHkgZml4IG5vbi1kb2N1bWVudCByb290ZWQgUVNBIGZv
ciBzaW5nbGUgZXhwcmVzc2lvbiBzZWxlY3RvcnNcblx0XHRcdFx0XHQmJiBleHByZXNzaW9uLmlu
ZGV4T2YoJywnKSA+IC0xXG5cdFx0XHRcdClcblx0XHRcdFx0fHwgU2xpY2suZGlzYWJsZVFTQVxu
XHRcdFx0KSBicmVhayBxdWVyeVNlbGVjdG9yO1xuXG5cdFx0XHR2YXIgX2V4cHJlc3Npb24gPSBl
eHByZXNzaW9uLCBfY29udGV4dCA9IGNvbnRleHQsIGN1cnJlbnRJZDtcblx0XHRcdGlmICghY29u
dGV4dElzRG9jdW1lbnQpe1xuXHRcdFx0XHQvLyBub24tZG9jdW1lbnQgcm9vdGVkIFFTQVxuXHRc
dFx0XHQvLyBjcmVkaXRzIHRvIEFuZHJldyBEdXBvbnRcblx0XHRcdFx0Y3VycmVudElkID0gX2Nv
bnRleHQuZ2V0QXR0cmlidXRlKCdpZCcpLCBzbGlja2lkID0gJ3NsaWNraWRfXyc7XG5cdFx0XHRc
dF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTtcblx0XHRcdFx0X2V4cHJlc3Np
b24gPSAnIycgKyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247XG5cdFx0XHRcdGNvbnRleHQg
PSBfY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRp
ZiAoZmlyc3QpIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Npb24pIHx8IG51
bGw7XG5cdFx0XHRcdGVsc2Ugbm9kZXMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoX2V4cHJl
c3Npb24pO1xuXHRcdFx0fSBjYXRjaCAoZSl7XG5cdFx0XHRcdHFzYUZhaWxFeHBDYWNoZVtleHBy
ZXNzaW9uXSA9IDE7XG5cdFx0XHRcdGJyZWFrIHF1ZXJ5U2VsZWN0b3I7XG5cdFx0XHR9IGZpbmFs
bHkge1xuXHRcdFx0XHRpZiAoIWNvbnRleHRJc0RvY3VtZW50KXtcblx0XHRcdFx0XHRpZiAoY3Vy
cmVudElkKSBfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTtcblx0XHRcdFx0
XHRlbHNlIF9jb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcblx0XHRcdFx0XHRjb250ZXh0
ID0gX2NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc3RhclNl
bGVjdHNDbG9zZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7XG5cdFx0XHRc
dGlmIChub2RlLm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5n
ZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTtcblx0XHRcdH0gZWxzZSBmb3IgKGkgPSAw
OyBub2RlID0gbm9kZXNbaSsrXTspe1xuXHRcdFx0XHRpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVl
c1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0
XHRpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpO1xuXHRcdFx0cmV0dXJuIGZvdW5kO1xu
XG5cdFx0fVxuXHRcdC8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qL1xuXG5cdFx0cGFyc2Vk
ID0gdGhpcy5TbGljay5wYXJzZShleHByZXNzaW9uKTtcblx0XHRpZiAoIXBhcnNlZC5sZW5ndGgp
IHJldHVybiBmb3VuZDtcblx0fSBlbHNlIGlmIChleHByZXNzaW9uID09IG51bGwpeyAvLyB0aGVy
ZSBpcyBubyBleHByZXNzaW9uXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgaWYgKGV4cHJl
c3Npb24uU2xpY2speyAvLyBleHByZXNzaW9uIGlzIGEgcGFyc2VkIFNsaWNrIG9iamVjdFxuXHRc
dHBhcnNlZCA9IGV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAodGhpcy5jb250YWlucyhjb250ZXh0
LmRvY3VtZW50RWxlbWVudCB8fCBjb250ZXh0LCBleHByZXNzaW9uKSl7IC8vIGV4cHJlc3Npb24g
aXMgYSBub2RlXG5cdFx0KGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikgOiBmb3VuZCA9
IGV4cHJlc3Npb247XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9IGVsc2UgeyAvLyBvdGhlciBqdW5r
XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50
aC1wc2V1ZG8tc2VsZWN0b3JzPiovXG5cblx0Ly8gY2FjaGUgZWxlbWVudHMgZm9yIHRoZSBudGgg
c2VsZWN0b3JzXG5cblx0dGhpcy5wb3NOVEggPSB7fTtcblx0dGhpcy5wb3NOVEhMYXN0ID0ge307
XG5cdHRoaXMucG9zTlRIVHlwZSA9IHt9O1xuXHR0aGlzLnBvc05USFR5cGVMYXN0ID0ge307XG5c
blx0Lyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki9cblxu
XHQvLyBpZiBhcHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBzZWxlY3Rv
ciB3aXRoIG9uZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1c2hVSURcblx0
dGhpcy5wdXNoID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVuZ3RoID09IDEg
JiYgcGFyc2VkLmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5wdXNoQXJyYXkg
OiB0aGlzLnB1c2hVSUQ7XG5cblx0aWYgKGZvdW5kID09IG51bGwpIGZvdW5kID0gW107XG5cblx0
Ly8gZGVmYXVsdCBlbmdpbmVcblxuXHR2YXIgaiwgbSwgbjtcblx0dmFyIGNvbWJpbmF0b3IsIHRh
ZywgaWQsIGNsYXNzTGlzdCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcztcblx0dmFyIGN1
cnJlbnRJdGVtcywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RCaXQsIGV4cHJl
c3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zO1xuXG5cdHNlYXJjaDogZm9yIChpID0gMDsgKGN1
cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9IDA7IChjdXJy
ZW50Qml0ID0gY3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspe1xuXG5cdFx0Y29tYmluYXRvciA9
ICdjb21iaW5hdG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7XG5cdFx0aWYgKCF0aGlzW2Nv
bWJpbmF0b3JdKSBjb250aW51ZSBzZWFyY2g7XG5cblx0XHR0YWcgICAgICAgID0gKHRoaXMuaXNY
TUxEb2N1bWVudCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRvVXBwZXJDYXNl
KCk7XG5cdFx0aWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7XG5cdFx0Y2xhc3NMaXN0ICA9IGN1
cnJlbnRCaXQuY2xhc3NMaXN0O1xuXHRcdGNsYXNzZXMgICAgPSBjdXJyZW50Qml0LmNsYXNzZXM7
XG5cdFx0YXR0cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlcztcblx0XHRwc2V1ZG9zICAg
ID0gY3VycmVudEJpdC5wc2V1ZG9zO1xuXHRcdGxhc3RCaXQgICAgPSAoaiA9PT0gKGN1cnJlbnRF
eHByZXNzaW9uLmxlbmd0aCAtIDEpKTtcblxuXHRcdHRoaXMuYml0VW5pcXVlcyA9IHt9O1xuXG5c
dFx0aWYgKGxhc3RCaXQpe1xuXHRcdFx0dGhpcy51bmlxdWVzID0gdW5pcXVlcztcblx0XHRcdHRo
aXMuZm91bmQgPSBmb3VuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bmlxdWVzID0ge307
XG5cdFx0XHR0aGlzLmZvdW5kID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKGogPT09IDApe1xuXHRc
dFx0dGhpc1tjb21iaW5hdG9yXShjb250ZXh0LCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVz
LCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0aWYgKGZpcnN0ICYmIGxhc3RCaXQgJiYgZm91
bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChmaXJzdCAm
JiBsYXN0Qml0KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0r
Kyl7XG5cdFx0XHRcdHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBj
bGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpO1xuXHRcdFx0XHRpZiAoZm91
bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7XG5cdFx0XHR9IGVsc2UgZm9yIChtID0gMCwgbiA9IGN1
cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0
ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3Qp
O1xuXHRcdH1cblxuXHRcdGN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7XG5cdH1cblxuXHQvLyBz
aG91bGQgc29ydCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5b3UgcGFzcyBt
dWx0aXBsZSBleHByZXNzaW9ucy5cblx0aWYgKGhhc090aGVycyB8fCAocGFyc2VkLmV4cHJlc3Np
b25zLmxlbmd0aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpO1xuXG5cdHJldHVybiAoZmlyc3QpID8g
KGZvdW5kWzBdIHx8IG51bGwpIDogZm91bmQ7XG59O1xuXG4vLyBVdGlsc1xuXG5sb2NhbC51aWR4
ID0gMTtcbmxvY2FsLnVpZGsgPSAnc2xpY2stdW5pcXVlaWQnO1xuXG5sb2NhbC5nZXRVSURYTUwg
PSBmdW5jdGlvbihub2RlKXtcblx0dmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRlKHRoaXMudWlk
ayk7XG5cdGlmICghdWlkKXtcblx0XHR1aWQgPSB0aGlzLnVpZHgrKztcblx0XHRub2RlLnNldEF0
dHJpYnV0ZSh0aGlzLnVpZGssIHVpZCk7XG5cdH1cblx0cmV0dXJuIHVpZDtcbn07XG5cbmxvY2Fs
LmdldFVJREhUTUwgPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuIG5vZGUudW5pcXVlTnVtYmVy
IHx8IChub2RlLnVuaXF1ZU51bWJlciA9IHRoaXMudWlkeCsrKTtcbn07XG5cbi8vIHNvcnQgYmFz
ZWQgb24gdGhlIHNldERvY3VtZW50IGRvY3VtZW50U29ydGVyIG1ldGhvZC5cblxubG9jYWwuc29y
dCA9IGZ1bmN0aW9uKHJlc3VsdHMpe1xuXHRpZiAoIXRoaXMuZG9jdW1lbnRTb3J0ZXIpIHJldHVy
biByZXN1bHRzO1xuXHRyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7XG5cdHJldHVy
biByZXN1bHRzO1xufTtcblxuLyo8cHNldWRvLXNlbGVjdG9ycz4qLy8qPG50aC1wc2V1ZG8tc2Vs
ZWN0b3JzPiovXG5cbmxvY2FsLmNhY2hlTlRIID0ge307XG5cbmxvY2FsLm1hdGNoTlRIID0gL14o
WystXT9cXGQqKT8oW2Etel0rKT8oWystXVxcZCspPyQvO1xuXG5sb2NhbC5wYXJzZU5USEFyZ3Vt
ZW50ID0gZnVuY3Rpb24oYXJndW1lbnQpe1xuXHR2YXIgcGFyc2VkID0gYXJndW1lbnQubWF0Y2go
dGhpcy5tYXRjaE5USCk7XG5cdGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cdHZhciBzcGVj
aWFsID0gcGFyc2VkWzJdIHx8IGZhbHNlO1xuXHR2YXIgYSA9IHBhcnNlZFsxXSB8fCAxO1xuXHRp
ZiAoYSA9PSAnLScpIGEgPSAtMTtcblx0dmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7XG5cdHBhcnNl
ZCA9XG5cdFx0KHNwZWNpYWwgPT0gJ24nKVx0PyB7YTogYSwgYjogYn0gOlxuXHRcdChzcGVjaWFs
ID09ICdvZGQnKVx0PyB7YTogMiwgYjogMX0gOlxuXHRcdChzcGVjaWFsID09ICdldmVuJylcdD8g
e2E6IDIsIGI6IDB9IDoge2E6IDAsIGI6IGF9O1xuXG5cdHJldHVybiAodGhpcy5jYWNoZU5USFth
cmd1bWVudF0gPSBwYXJzZWQpO1xufTtcblxubG9jYWwuY3JlYXRlTlRIUHNldWRvID0gZnVuY3Rp
b24oY2hpbGQsIHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXtcblx0cmV0dXJuIGZ1bmN0aW9u
KG5vZGUsIGFyZ3VtZW50KXtcblx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7XG5cdFx0
aWYgKCF0aGlzW3Bvc2l0aW9uc11bdWlkXSl7XG5cdFx0XHR2YXIgcGFyZW50ID0gbm9kZS5wYXJl
bnROb2RlO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRcdHZhciBlbCA9
IHBhcmVudFtjaGlsZF0sIGNvdW50ID0gMTtcblx0XHRcdGlmIChvZlR5cGUpe1xuXHRcdFx0XHR2
YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYg
KGVsLm5vZGVOYW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTtcblx0XHRcdFx0XHR0aGlzW3Bvc2l0
aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7XG5cdFx0XHRcdH0gd2hpbGUgKChlbCA9
IGVsW3NpYmxpbmddKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0
aWYgKGVsLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdHRoaXNbcG9zaXRpb25z
XVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKztcblx0XHRcdFx0fSB3aGlsZSAoKGVsID0gZWxb
c2libGluZ10pKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJndW1lbnQgPSBhcmd1bWVudCB8fCAn
bic7XG5cdFx0dmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8IHRoaXMucGFy
c2VOVEhBcmd1bWVudChhcmd1bWVudCk7XG5cdFx0aWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtc
blx0XHR2YXIgYSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNbcG9zaXRpb25z
XVt1aWRdO1xuXHRcdGlmIChhID09IDApIHJldHVybiBiID09IHBvcztcblx0XHRpZiAoYSA+IDAp
e1xuXHRcdFx0aWYgKHBvcyA8IGIpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0
aWYgKGIgPCBwb3MpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICgocG9zIC0gYikg
JSBhKSA9PSAwO1xuXHR9O1xufTtcblxuLyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3Bz
ZXVkby1zZWxlY3RvcnM+Ki9cblxubG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24obm9kZSwgdGFn
LCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7XG5cdGlmICh0aGlzLm1hdGNoU2Vs
ZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpIHRoaXMu
Zm91bmQucHVzaChub2RlKTtcbn07XG5cbmxvY2FsLnB1c2hVSUQgPSBmdW5jdGlvbihub2RlLCB0
YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXtcblx0dmFyIHVpZCA9IHRoaXMu
Z2V0VUlEKG5vZGUpO1xuXHRpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMubWF0Y2hTZWxl
Y3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSl7XG5cdFx0
dGhpcy51bmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdHRoaXMuZm91bmQucHVzaChub2RlKTtcblx0
fVxufTtcblxubG9jYWwubWF0Y2hOb2RlID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRp
ZiAodGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvcil7XG5c
dFx0dHJ5IHtcblx0XHRcdHJldHVybiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKG5v
ZGUsIHNlbGVjdG9yLnJlcGxhY2UoL1xcWyhbXj1dKyk9XFxzKihbXidcIlxcXV0rPylcXHMqXFxd
L2csICdbJDE9XCIkMlwiXScpKTtcblx0XHR9IGNhdGNoIChtYXRjaEVycm9yKXt9XG5cdH1cblxu
XHR2YXIgcGFyc2VkID0gdGhpcy5TbGljay5wYXJzZShzZWxlY3Rvcik7XG5cdGlmICghcGFyc2Vk
KSByZXR1cm4gdHJ1ZTtcblxuXHQvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3JzXG5cdHZhciBl
eHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9ucywgc2ltcGxlRXhwQ291bnRlciA9IDAsIGks
IGN1cnJlbnRFeHByZXNzaW9uO1xuXHRmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBl
eHByZXNzaW9uc1tpXSk7IGkrKyl7XG5cdFx0aWYgKGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCA9
PSAxKXtcblx0XHRcdHZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTtcblx0XHRcdGlmICh0
aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBleHAudGFnIDog
ZXhwLnRhZy50b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAuYXR0cmlidXRl
cywgZXhwLnBzZXVkb3MpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdHNpbXBsZUV4cENvdW50ZXIrKztc
blx0XHR9XG5cdH1cblxuXHRpZiAoc2ltcGxlRXhwQ291bnRlciA9PSBwYXJzZWQubGVuZ3RoKSBy
ZXR1cm4gZmFsc2U7XG5cblx0dmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5kb2N1bWVudCwg
cGFyc2VkKSwgaXRlbTtcblx0Zm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107KXtcblx0XHRp
ZiAoaXRlbSA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtc
blxubG9jYWwubWF0Y2hQc2V1ZG8gPSBmdW5jdGlvbihub2RlLCBuYW1lLCBhcmd1bWVudCl7XG5c
dHZhciBwc2V1ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTtcblx0aWYgKHRoaXNbcHNldWRvTmFt
ZV0pIHJldHVybiB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTtcblx0dmFyIGF0dHJp
YnV0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpO1xuXHRyZXR1cm4gKGFyZ3VtZW50
KSA/IGFyZ3VtZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlO1xufTtcblxubG9jYWwubWF0
Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3Mpe1xuXHRpZiAodGFnKXtcblx0XHR2YXIgbm9kZU5hbWUgPSAodGhpcy5pc1hNTERv
Y3VtZW50KSA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG5c
dFx0aWYgKHRhZyA9PSAnKicpe1xuXHRcdFx0aWYgKG5vZGVOYW1lIDwgJ0AnKSByZXR1cm4gZmFs
c2U7IC8vIEZpeCBmb3IgY29tbWVudCBub2RlcyBhbmQgY2xvc2VkIG5vZGVzXG5cdFx0fSBlbHNl
IHtcblx0XHRcdGlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1c
blxuXHRpZiAoaWQgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gaWQpIHJldHVybiBmYWxz
ZTtcblxuXHR2YXIgaSwgcGFydCwgY2xzO1xuXHRpZiAoY2xhc3NlcykgZm9yIChpID0gY2xhc3Nl
cy5sZW5ndGg7IGktLTspe1xuXHRcdGNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsICdjbGFz
cycpO1xuXHRcdGlmICghKGNscyAmJiBjbGFzc2VzW2ldLnJlZ2V4cC50ZXN0KGNscykpKSByZXR1
cm4gZmFsc2U7XG5cdH1cblx0aWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJpYnV0ZXMubGVu
Z3RoOyBpLS07KXtcblx0XHRwYXJ0ID0gYXR0cmlidXRlc1tpXTtcblx0XHRpZiAocGFydC5vcGVy
YXRvciA/ICFwYXJ0LnRlc3QodGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSA6ICF0
aGlzLmhhc0F0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRp
ZiAocHNldWRvcykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspe1xuXHRcdHBhcnQgPSBw
c2V1ZG9zW2ldO1xuXHRcdGlmICghdGhpcy5tYXRjaFBzZXVkbyhub2RlLCBwYXJ0LmtleSwgcGFy
dC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBj
b21iaW5hdG9ycyA9IHtcblxuXHQnICc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMs
IGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCl7IC8vIGFsbCBjaGlsZCBub2RlcywgYW55
IGxldmVsXG5cblx0XHR2YXIgaSwgaXRlbSwgY2hpbGRyZW47XG5cblx0XHRpZiAodGhpcy5pc0hU
TUxEb2N1bWVudCl7XG5cdFx0XHRnZXRCeUlkOiBpZiAoaWQpe1xuXHRcdFx0XHRpdGVtID0gdGhp
cy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0XHRcdGlmICgoIWl0ZW0gJiYgbm9k
ZS5hbGwpIHx8ICh0aGlzLmlkR2V0c05hbWUgJiYgaXRlbSAmJiBpdGVtLmdldEF0dHJpYnV0ZU5v
ZGUoJ2lkJykubm9kZVZhbHVlICE9IGlkKSl7XG5cdFx0XHRcdFx0Ly8gYWxsW2lkXSByZXR1cm5z
IGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5vZGVcblx0XHRc
dFx0XHQvLyBpZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVsZW1lbnQsIGVs
c2UgaXQgd2lsbCBiZSBhIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuYWxs
W2lkXTtcblx0XHRcdFx0XHRpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKCFj
aGlsZHJlblswXSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuXHRcdFx0XHRcdGZvciAoaSA9IDA7
IGl0ZW0gPSBjaGlsZHJlbltpKytdOyl7XG5cdFx0XHRcdFx0XHR2YXIgaWROb2RlID0gaXRlbS5n
ZXRBdHRyaWJ1dGVOb2RlKCdpZCcpO1xuXHRcdFx0XHRcdFx0aWYgKGlkTm9kZSAmJiBpZE5vZGUu
bm9kZVZhbHVlID09IGlkKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVs
bCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xu
XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1c
blx0XHRcdFx0aWYgKCFpdGVtKXtcblx0XHRcdFx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyBpbiB0
aGUgZG9tIHdlIHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtpbmcgdGhlIGdl
dEJ5SWQgbGFiZWxcblx0XHRcdFx0XHRpZiAodGhpcy5jb250YWlucyh0aGlzLnJvb3QsIG5vZGUp
KSByZXR1cm47XG5cdFx0XHRcdFx0ZWxzZSBicmVhayBnZXRCeUlkO1xuXHRcdFx0XHR9IGVsc2Ug
aWYgKHRoaXMuZG9jdW1lbnQgIT09IG5vZGUgJiYgIXRoaXMuY29udGFpbnMobm9kZSwgaXRlbSkp
IHJldHVybjtcblx0XHRcdFx0dGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3NlcywgYXR0
cmlidXRlcywgcHNldWRvcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGdldEJ5
Q2xhc3M6IGlmIChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhp
cy5icm9rZW5HRUJDTil7XG5cdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKGNsYXNzTGlzdC5qb2luKCcgJykpO1xuXHRcdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBj
aGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBp
dGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBudWxsLCBhdHRy
aWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRn
ZXRCeVRhZzoge1xuXHRcdFx0Y2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRh
Zyk7XG5cdFx0XHRpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRC
eVRhZztcblx0XHRcdGlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51bGw7XG5cdFx0
XHRmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0Jz4n
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gZGlyZWN0IGNoaWxkcmVuXG5cdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENoaWxkKSkgZG8g
e1xuXHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQs
IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH0gd2hpbGUgKChub2RlID0gbm9k
ZS5uZXh0U2libGluZykpO1xuXHR9LFxuXG5cdCcrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwg
Y2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ1xuXHRcdHdoaWxl
ICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXtcblx0
XHRcdHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9z
KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSxcblxuXHQnXic6IGZ1bmN0aW9uKG5vZGUsIHRh
ZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBjaGlsZFxuXHRc
dG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUpe1xuXHRcdFx0aWYgKG5vZGUu
bm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpO1xuXHRcdFx0ZWxzZSB0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0sXG5cblx0J34n
OiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsg
Ly8gbmV4dCBzaWJsaW5nc1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKXtc
blx0XHRcdGlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIHVpZCA9
IHRoaXMuZ2V0VUlEKG5vZGUpO1xuXHRcdFx0aWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVh
aztcblx0XHRcdHRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTtcblx0XHRcdHRoaXMucHVzaChu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR9XG5cdH0s
XG5cblx0JysrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywg
cHNldWRvcyl7IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZ1xuXHRcdHRoaXNb
J2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVk
b3MpO1xuXHRcdHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBh
dHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0fSxcblxuXHQnfn4nOiBmdW5jdGlvbihub2RlLCB0YWcs
IGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5ncyBhbmQg
cHJldmlvdXMgc2libGluZ3Ncblx0XHR0aGlzWydjb21iaW5hdG9yOn4nXShub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHR0aGlzWydjb21iaW5hdG9yOiF+
J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5c
blx0JyEnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1
ZG9zKXsgLy8gYWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudFxuXHRcdHdoaWxlICgobm9k
ZSA9IG5vZGUucGFyZW50Tm9kZSkpIGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1
c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5c
blx0JyE+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNl
dWRvcyl7IC8vIGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbClcblx0XHRub2RlID0gbm9kZS5wYXJl
bnROb2RlO1xuXHRcdGlmIChub2RlICE9PSB0aGlzLmRvY3VtZW50KSB0aGlzLnB1c2gobm9kZSwg
dGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7XG5cdH0sXG5cblx0JyErJzog
ZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8v
IHByZXZpb3VzIHNpYmxpbmdcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGlu
ZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpe1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywg
aWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxu
XHR9LFxuXG5cdCchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0
ZXMsIHBzZXVkb3MpeyAvLyBsYXN0IGNoaWxkXG5cdFx0bm9kZSA9IG5vZGUubGFzdENoaWxkO1xu
XHRcdGlmIChub2RlKXtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChu
b2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTtcblx0XHRcdGVsc2Ug
dGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMs
IHBzZXVkb3MpO1xuXHRcdH1cblx0fSxcblxuXHQnIX4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlk
LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ3Ncblx0
XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpe1xuXHRcdFx0aWYgKG5vZGUu
bm9kZVR5cGUgIT0gMSkgY29udGludWU7XG5cdFx0XHR2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9k
ZSk7XG5cdFx0XHRpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrO1xuXHRcdFx0dGhpcy5i
aXRVbmlxdWVzW3VpZF0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNs
YXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpO1xuXHRcdH1cblx0fVxuXG59O1xuXG5mb3IgKHZh
ciBjIGluIGNvbWJpbmF0b3JzKSBsb2NhbFsnY29tYmluYXRvcjonICsgY10gPSBjb21iaW5hdG9y
c1tjXTtcblxudmFyIHBzZXVkb3MgPSB7XG5cblx0Lyo8cHNldWRvLXNlbGVjdG9ycz4qL1xuXG5c
dCdlbXB0eSc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGls
ZDtcblx0XHRyZXR1cm4gIShjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PSAxKSAmJiAhKG5vZGUu
aW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmxlbmd0aDtcblx0fSxcblxuXHQn
bm90JzogZnVuY3Rpb24obm9kZSwgZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJuICF0aGlzLm1hdGNo
Tm9kZShub2RlLCBleHByZXNzaW9uKTtcblx0fSxcblxuXHQnY29udGFpbnMnOiBmdW5jdGlvbihu
b2RlLCB0ZXh0KXtcblx0XHRyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRl
bnQgfHwgJycpLmluZGV4T2YodGV4dCkgPiAtMTtcblx0fSxcblxuXHQnZmlyc3QtY2hpbGQnOiBm
dW5jdGlvbihub2RlKXtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykp
IGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtc
blx0fSxcblxuXHQnbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpe1xuXHRcdHdoaWxlICgobm9k
ZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFs
c2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktY2hpbGQnOiBmdW5jdGlvbihu
b2RlKXtcblx0XHR2YXIgcHJldiA9IG5vZGU7XG5cdFx0d2hpbGUgKChwcmV2ID0gcHJldi5wcmV2
aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0
dmFyIG5leHQgPSBub2RlO1xuXHRcdHdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBp
ZiAobmV4dC5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5c
dH0sXG5cblx0Lyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki9cblxuXHQnbnRoLWNoaWxkJzogbG9j
YWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USCcp
LFxuXG5cdCdudGgtbGFzdC1jaGlsZCc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFzdENoaWxk
JywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhMYXN0JyksXG5cblx0J250aC1vZi10eXBlJzog
bG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05U
SFR5cGUnLCB0cnVlKSxcblxuXHQnbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBz
ZXVkbygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBlTGFzdCcsIHRy
dWUpLFxuXG5cdCdpbmRleCc6IGZ1bmN0aW9uKG5vZGUsIGluZGV4KXtcblx0XHRyZXR1cm4gdGhp
c1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcnICsgKGluZGV4ICsgMSkpO1xuXHR9LFxuXG5c
dCdldmVuJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hp
bGQnXShub2RlLCAnMm4nKTtcblx0fSxcblxuXHQnb2RkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0
cmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpO1xuXHR9LFxuXG5c
dC8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8qPG9mLXR5cGUtcHNldWRvLXNlbGVj
dG9ycz4qL1xuXG5cdCdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIG5v
ZGVOYW1lID0gbm9kZS5ub2RlTmFtZTtcblx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3Vz
U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5c
dFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J2xhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUp
e1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7XG5cdFx0d2hpbGUgKChub2RlID0g
bm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4g
ZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0J29ubHktb2YtdHlwZSc6IGZ1bmN0
aW9uKG5vZGUpe1xuXHRcdHZhciBwcmV2ID0gbm9kZSwgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1l
O1xuXHRcdHdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9k
ZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTtcblx0XHR2YXIgbmV4dCA9IG5vZGU7XG5c
dFx0d2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVOYW1lID09
IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Lyo8
L29mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qL1xuXG5cdC8vIGN1c3RvbSBwc2V1ZG9zXG5cblx0
J2VuYWJsZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gIW5vZGUuZGlzYWJsZWQ7XG5c
dH0sXG5cblx0J2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7XG5cdFx0cmV0dXJuIG5vZGUuZGlz
YWJsZWQ7XG5cdH0sXG5cblx0J2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4g
bm9kZS5jaGVja2VkIHx8IG5vZGUuc2VsZWN0ZWQ7XG5cdH0sXG5cblx0J2ZvY3VzJzogZnVuY3Rp
b24obm9kZSl7XG5cdFx0cmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5kb2N1bWVu
dC5hY3RpdmVFbGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50eXBlIHx8IHRo
aXMuaGFzQXR0cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTtcblx0fSxcblxuXHQncm9vdCc6IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiAobm9kZSA9PT0gdGhpcy5yb290KTtcblx0fSxcblxu
XHQnc2VsZWN0ZWQnOiBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gbm9kZS5zZWxlY3RlZDtc
blx0fVxuXG5cdC8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovXG59O1xuXG5mb3IgKHZhciBwIGluIHBz
ZXVkb3MpIGxvY2FsWydwc2V1ZG86JyArIHBdID0gcHNldWRvc1twXTtcblxuLy8gYXR0cmlidXRl
cyBtZXRob2RzXG5cbnZhciBhdHRyaWJ1dGVHZXR0ZXJzID0gbG9jYWwuYXR0cmlidXRlR2V0dGVy
cyA9IHtcblxuXHQnZm9yJzogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gKCdodG1sRm9yJyBpbiB0
aGlzKSA/IHRoaXMuaHRtbEZvciA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmb3InKTtcblx0fSxcblxu
XHQnaHJlZic6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuICgnaHJlZicgaW4gdGhpcykgPyB0aGlz
LmdldEF0dHJpYnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblx0
fSxcblxuXHQnc3R5bGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5zdHlsZSkgPyB0
aGlzLnN0eWxlLmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblx0fSxcblxu
XHQndGFiaW5kZXgnOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5n
ZXRBdHRyaWJ1dGVOb2RlKCd0YWJpbmRleCcpO1xuXHRcdHJldHVybiAoYXR0cmlidXRlTm9kZSAm
JiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51
bGw7XG5cdH0sXG5cblx0J3R5cGUnOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldEF0
dHJpYnV0ZSgndHlwZScpO1xuXHR9LFxuXG5cdCdtYXhsZW5ndGgnOiBmdW5jdGlvbigpe1xuXHRc
dHZhciBhdHRyaWJ1dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdtYXhMZW5ndGgnKTtc
blx0XHRyZXR1cm4gKGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQpID8g
YXR0cmlidXRlTm9kZS5ub2RlVmFsdWUgOiBudWxsO1xuXHR9XG5cbn07XG5cbmF0dHJpYnV0ZUdl
dHRlcnMuTUFYTEVOR1RIID0gYXR0cmlidXRlR2V0dGVycy5tYXhMZW5ndGggPSBhdHRyaWJ1dGVH
ZXR0ZXJzLm1heGxlbmd0aDtcblxuLy8gU2xpY2tcblxudmFyIFNsaWNrID0gbG9jYWwuU2xpY2sg
PSAodGhpcy5TbGljayB8fCB7fSk7XG5cblNsaWNrLnZlcnNpb24gPSAnMS4xLjcnO1xuXG4vLyBT
bGljayBmaW5kZXJcblxuU2xpY2suc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lv
biwgYXBwZW5kKXtcblx0cmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBh
cHBlbmQpO1xufTtcblxuU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24p
e1xuXHRyZXR1cm4gbG9jYWwuc2VhcmNoKGNvbnRleHQsIGV4cHJlc3Npb24sIG51bGwsIHRydWUp
O1xufTtcblxuLy8gU2xpY2sgY29udGFpbm1lbnQgY2hlY2tlclxuXG5TbGljay5jb250YWlucyA9
IGZ1bmN0aW9uKGNvbnRhaW5lciwgbm9kZSl7XG5cdGxvY2FsLnNldERvY3VtZW50KGNvbnRhaW5l
cik7XG5cdHJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpO1xufTtcblxuLy8g
U2xpY2sgYXR0cmlidXRlIGdldHRlclxuXG5TbGljay5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihu
b2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBsb2NhbC5n
ZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG5TbGljay5oYXNBdHRyaWJ1dGUgPSBmdW5j
dGlvbihub2RlLCBuYW1lKXtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVybiBs
b2NhbC5oYXNBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG59O1xuXG4vLyBTbGljayBtYXRjaGVyXG5c
blNsaWNrLm1hdGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3Ipe1xuXHRpZiAoIShub2RlICYm
IHNlbGVjdG9yKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09
PSBub2RlKSByZXR1cm4gdHJ1ZTtcblx0bG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7XG5cdHJldHVy
biBsb2NhbC5tYXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpO1xufTtcblxuLy8gU2xpY2sgYXR0cmli
dXRlIGFjY2Vzc29yXG5cblNsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5h
bWUsIGZuKXtcblx0bG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuO1xuXHRyZXR1cm4g
dGhpcztcbn07XG5cblNsaWNrLmxvb2t1cEF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUp
e1xuXHRyZXR1cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTtcbn07XG5cbi8vIFNsaWNr
IHBzZXVkbyBhY2Nlc3NvclxuXG5TbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlvbihuYW1lLCBm
bil7XG5cdGxvY2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQp
e1xuXHRcdHJldHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTtcblx0fTtcblx0cmV0dXJuIHRo
aXM7XG59O1xuXG5TbGljay5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihuYW1lKXtcblx0dmFyIHBz
ZXVkbyA9IGxvY2FsWydwc2V1ZG86JyArIG5hbWVdO1xuXHRpZiAocHNldWRvKSByZXR1cm4gZnVu
Y3Rpb24oYXJndW1lbnQpe1xuXHRcdHJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBhcmd1bWVudCk7
XG5cdH07XG5cdHJldHVybiBudWxsO1xufTtcblxuLy8gU2xpY2sgb3ZlcnJpZGVzIGFjY2Vzc29y
XG5cblNsaWNrLm92ZXJyaWRlID0gZnVuY3Rpb24ocmVnZXhwLCBmbil7XG5cdGxvY2FsLm92ZXJy
aWRlKHJlZ2V4cCwgZm4pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblNsaWNrLmlzWE1MID0gbG9j
YWwuaXNYTUw7XG5cblNsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7XG5cdHJldHVybiBsb2Nh
bC5nZXRVSURIVE1MKG5vZGUpO1xufTtcblxuaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0g
U2xpY2s7XG5cbn0pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRl
ZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTtcblxuLypcbi0tLVxuXG5u
YW1lOiBFbGVtZW50XG5cbmRlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGl0
ZW1zIGluIE1vb1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0aGUgZG9sbGFy
cyBmdW5jdGlvbiwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGltZS1zYXZlciBt
ZXRob2RzIHRvIGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRzLlxuXG5saWNl
bnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBB
cnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgT2JqZWN0LCBOdW1iZXIsIFNsaWNrLlBhcnNlciwgU2xp
Y2suRmluZGVyXVxuXG5wcm92aWRlczogW0VsZW1lbnQsIEVsZW1lbnRzLCAkLCAkJCwgSUZyYW1l
LCBTZWxlY3RvcnNdXG5cbi4uLlxuKi9cblxudmFyIEVsZW1lbnQgPSB0aGlzLkVsZW1lbnQgPSBm
dW5jdGlvbih0YWcsIHByb3BzKXtcblx0dmFyIGtvbnN0cnVjdG9yID0gRWxlbWVudC5Db25zdHJ1
Y3RvcnNbdGFnXTtcblx0aWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0b3IocHJvcHMp
O1xuXHRpZiAodHlwZW9mIHRhZyAhPSAnc3RyaW5nJykgcmV0dXJuIGRvY3VtZW50LmlkKHRhZyku
c2V0KHByb3BzKTtcblxuXHRpZiAoIXByb3BzKSBwcm9wcyA9IHt9O1xuXG5cdGlmICghKC9eW1xc
dy1dKyQvKS50ZXN0KHRhZykpe1xuXHRcdHZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0YWcpLmV4
cHJlc3Npb25zWzBdWzBdO1xuXHRcdHRhZyA9IChwYXJzZWQudGFnID09ICcqJykgPyAnZGl2JyA6
IHBhcnNlZC50YWc7XG5cdFx0aWYgKHBhcnNlZC5pZCAmJiBwcm9wcy5pZCA9PSBudWxsKSBwcm9w
cy5pZCA9IHBhcnNlZC5pZDtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0gcGFyc2VkLmF0dHJpYnV0
ZXM7XG5cdFx0aWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGF0dHIsIGkgPSAwLCBsID0gYXR0cmli
dXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0YXR0ciA9IGF0dHJpYnV0ZXNbaV07XG5c
dFx0XHRpZiAocHJvcHNbYXR0ci5rZXldICE9IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAo
YXR0ci52YWx1ZSAhPSBudWxsICYmIGF0dHIub3BlcmF0b3IgPT0gJz0nKSBwcm9wc1thdHRyLmtl
eV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0ZWxzZSBpZiAoIWF0dHIudmFsdWUgJiYgIWF0dHIub3Bl
cmF0b3IpIHByb3BzW2F0dHIua2V5XSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnNlZC5j
bGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNzJ10gPSBwYXJz
ZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudC5uZXdFbGVt
ZW50KHRhZywgcHJvcHMpO1xufTtcblxuXG5pZiAoQnJvd3Nlci5FbGVtZW50KXtcblx0RWxlbWVu
dC5wcm90b3R5cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlO1xuXHQvLyBJRTggYW5kIElF
OSByZXF1aXJlIHRoZSB3cmFwcGluZy5cblx0RWxlbWVudC5wcm90b3R5cGUuX2ZpcmVFdmVudCA9
IChmdW5jdGlvbihmaXJlRXZlbnQpe1xuXHRcdHJldHVybiBmdW5jdGlvbih0eXBlLCBldmVudCl7
XG5cdFx0XHRyZXR1cm4gZmlyZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZXZlbnQpO1xuXHRcdH07
XG5cdH0pKEVsZW1lbnQucHJvdG90eXBlLmZpcmVFdmVudCk7XG59XG5cbm5ldyBUeXBlKCdFbGVt
ZW50JywgRWxlbWVudCkubWlycm9yKGZ1bmN0aW9uKG5hbWUpe1xuXHRpZiAoQXJyYXkucHJvdG90
eXBlW25hbWVdKSByZXR1cm47XG5cblx0dmFyIG9iaiA9IHt9O1xuXHRvYmpbbmFtZV0gPSBmdW5j
dGlvbigpe1xuXHRcdHZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMsIGVsZW1lbnRz
ID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpc1tpXSwgcmVzdWx0ID0gcmVzdWx0c1tpXSA9IGVs
ZW1lbnRbbmFtZV0uYXBwbHkoZWxlbWVudCwgYXJncyk7XG5cdFx0XHRlbGVtZW50cyA9IChlbGVt
ZW50cyAmJiB0eXBlT2YocmVzdWx0KSA9PSAnZWxlbWVudCcpO1xuXHRcdH1cblx0XHRyZXR1cm4g
KGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7XG5cdH07XG5cblx0
RWxlbWVudHMuaW1wbGVtZW50KG9iaik7XG59KTtcblxuaWYgKCFCcm93c2VyLkVsZW1lbnQpe1xu
XHRFbGVtZW50LnBhcmVudCA9IE9iamVjdDtcblxuXHRFbGVtZW50LlByb3RvdHlwZSA9IHtcblx0
XHQnJGNvbnN0cnVjdG9yJzogRWxlbWVudCxcblx0XHQnJGZhbWlseSc6IEZ1bmN0aW9uLmNvbnZl
cnQoJ2VsZW1lbnQnKS5oaWRlKClcblx0fTtcblxuXHRFbGVtZW50Lm1pcnJvcihmdW5jdGlvbihu
YW1lLCBtZXRob2Qpe1xuXHRcdEVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0aG9kO1xuXHR9
KTtcbn1cblxuRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTtcblxuXG5cbnZhciBJRnJhbWUgPSBu
ZXcgVHlwZSgnSUZyYW1lJywgZnVuY3Rpb24oKXtcblx0dmFyIHBhcmFtcyA9IEFycmF5Lmxpbmso
YXJndW1lbnRzLCB7XG5cdFx0cHJvcGVydGllczogVHlwZS5pc09iamVjdCxcblx0XHRpZnJhbWU6
IGZ1bmN0aW9uKG9iail7XG5cdFx0XHRyZXR1cm4gKG9iaiAhPSBudWxsKTtcblx0XHR9XG5cdH0p
O1xuXG5cdHZhciBwcm9wcyA9IHBhcmFtcy5wcm9wZXJ0aWVzIHx8IHt9LCBpZnJhbWU7XG5cdGlm
IChwYXJhbXMuaWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZyYW1lKTtcblx0
dmFyIG9ubG9hZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307XG5cdGRlbGV0ZSBwcm9w
cy5vbmxvYWQ7XG5cdHByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwgcHJvcHMubmFt
ZSwgaWZyYW1lID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1lXycgKyBTdHJp
bmcudW5pcXVlSUQoKV0ucGljaygpO1xuXHRpZnJhbWUgPSBuZXcgRWxlbWVudChpZnJhbWUgfHwg
J2lmcmFtZScsIHByb3BzKTtcblxuXHR2YXIgb25Mb2FkID0gZnVuY3Rpb24oKXtcblx0XHRvbmxv
YWQuY2FsbChpZnJhbWUuY29udGVudFdpbmRvdyk7XG5cdH07XG5cblx0aWYgKHdpbmRvdy5mcmFt
ZXNbcHJvcHMuaWRdKSBvbkxvYWQoKTtcblx0ZWxzZSBpZnJhbWUuYWRkTGlzdGVuZXIoJ2xvYWQn
LCBvbkxvYWQpO1xuXHRyZXR1cm4gaWZyYW1lO1xufSk7XG5cbnZhciBFbGVtZW50cyA9IHRoaXMu
RWxlbWVudHMgPSBmdW5jdGlvbihub2Rlcyl7XG5cdGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGgp
e1xuXHRcdHZhciB1bmlxdWVzID0ge30sIG5vZGU7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IG5vZGUg
PSBub2Rlc1tpKytdOyl7XG5cdFx0XHR2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9kZSk7XG5cdFx0
XHRpZiAoIXVuaXF1ZXNbdWlkXSl7XG5cdFx0XHRcdHVuaXF1ZXNbdWlkXSA9IHRydWU7XG5cdFx0
XHRcdHRoaXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkVsZW1lbnRz
LnByb3RvdHlwZSA9IHtsZW5ndGg6IDB9O1xuRWxlbWVudHMucGFyZW50ID0gQXJyYXk7XG5cbm5l
dyBUeXBlKCdFbGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoe1xuXG5cdGZpbHRlcjogZnVu
Y3Rpb24oZmlsdGVyLCBiaW5kKXtcblx0XHRpZiAoIWZpbHRlcikgcmV0dXJuIHRoaXM7XG5cdFx0
cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywgKHR5cGVPZihmaWx0ZXIpID09
ICdzdHJpbmcnKSA/IGZ1bmN0aW9uKGl0ZW0pe1xuXHRcdFx0cmV0dXJuIGl0ZW0ubWF0Y2goZmls
dGVyKTtcblx0XHR9IDogZmlsdGVyLCBiaW5kKSk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdHB1c2g6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXHRcdGZvciAodmFy
IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0XHR2YXIgaXRl
bSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7XG5cdFx0XHRpZiAoaXRlbSkgdGhpc1tsZW5n
dGgrK10gPSBpdGVtO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMubGVuZ3RoID0gbGVuZ3RoKTtc
blx0fS5wcm90ZWN0KCksXG5cblx0dW5zaGlmdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgaXRlbXMg
PSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBp
Kyspe1xuXHRcdFx0dmFyIGl0ZW0gPSBkb2N1bWVudC5pZChhcmd1bWVudHNbaV0pO1xuXHRcdFx0
aWYgKGl0ZW0pIGl0ZW1zLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBBcnJheS5wcm90
b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGNv
bmNhdDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxlbWVudHModGhp
cyk7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsr
KXtcblx0XHRcdHZhciBpdGVtID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKFR5cGUuaXNFbnVt
ZXJhYmxlKGl0ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7XG5cdFx0XHRlbHNlIG5ld0Vs
ZW1lbnRzLnB1c2goaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdFbGVtZW50cztcblx0fS5w
cm90ZWN0KCksXG5cblx0YXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXtcblx0XHRmb3IgKHZh
ciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLnB1c2goY29s
bGVjdGlvbltpXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpLFxuXG5cdGVtcHR5
OiBmdW5jdGlvbigpe1xuXHRcdHdoaWxlICh0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbLS10aGlz
Lmxlbmd0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0ucHJvdGVjdCgpXG5cbn0pO1xuXG5cblxu
KGZ1bmN0aW9uKCl7XG5cbi8vIEZGLCBJRVxudmFyIHNwbGljZSA9IEFycmF5LnByb3RvdHlwZS5z
cGxpY2UsIG9iamVjdCA9IHsnMCc6IDAsICcxJzogMSwgbGVuZ3RoOiAyfTtcblxuc3BsaWNlLmNh
bGwob2JqZWN0LCAxLCAxKTtcbmlmIChvYmplY3RbMV0gPT0gMSkgRWxlbWVudHMuaW1wbGVtZW50
KCdzcGxpY2UnLCBmdW5jdGlvbigpe1xuXHR2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cdHZh
ciByZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0d2hpbGUgKGxlbmd0
aCA+PSB0aGlzLmxlbmd0aCkgZGVsZXRlIHRoaXNbbGVuZ3RoLS1dO1xuXHRyZXR1cm4gcmVzdWx0
O1xufS5wcm90ZWN0KCkpO1xuXG5BcnJheS5mb3JFYWNoTWV0aG9kKGZ1bmN0aW9uKG1ldGhvZCwg
bmFtZSl7XG5cdEVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpO1xufSk7XG5cbkFycmF5
Lm1pcnJvcihFbGVtZW50cyk7XG5cbi8qPGx0SUU4PiovXG52YXIgY3JlYXRlRWxlbWVudEFjY2Vw
dHNIVE1MO1xudHJ5IHtcblx0Y3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPXg+JykubmFtZSA9PSAneCcpO1xufSBjYXRjaCAoZSl7
fVxuXG52YXIgZXNjYXBlUXVvdGVzID0gZnVuY3Rpb24oaHRtbCl7XG5cdHJldHVybiAoJycgKyBo
dG1sKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbn07
XG4vKjwvbHRJRTg+Ki9cblxuLyo8bHRJRTk+Ki9cbi8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQg
SFRNTCBvZiBzdHlsZSBlbGVtZW50XG52YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9u
KCl7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLFxuXHRcdGZs
YWcgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21h
cmdpbjogMHB4O30nO1xuXHRcdGZsYWcgPSAhIWRpdi5pbm5lckhUTUw7XG5cdH0gY2F0Y2ggKGUp
e31cblx0cmV0dXJuIGZsYWc7XG59KSgpO1xuLyo8L2x0SUU5PiovXG5cbkRvY3VtZW50LmltcGxl
bWVudCh7XG5cblx0bmV3RWxlbWVudDogZnVuY3Rpb24odGFnLCBwcm9wcyl7XG5cdFx0aWYgKHBy
b3BzKXtcblx0XHRcdGlmIChwcm9wcy5jaGVja2VkICE9IG51bGwpIHByb3BzLmRlZmF1bHRDaGVj
a2VkID0gcHJvcHMuY2hlY2tlZDtcblx0XHRcdGlmICgocHJvcHMudHlwZSA9PSAnY2hlY2tib3gn
IHx8IHByb3BzLnR5cGUgPT0gJ3JhZGlvJykgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkgcHJvcHMu
dmFsdWUgPSAnb24nO1xuXHRcdFx0Lyo8bHRJRTk+Ki8gLy8gSUUgbmVlZHMgdGhlIHR5cGUgdG8g
YmUgc2V0IGJlZm9yZSBjaGFuZ2luZyBjb250ZW50IG9mIHN0eWxlIGVsZW1lbnRcblx0XHRcdGlm
ICghY2FuQ2hhbmdlU3R5bGVIVE1MICYmIHRhZyA9PSAnc3R5bGUnKXtcblx0XHRcdFx0dmFyIHN0
eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cdFx0XHRcdHN0
eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0XHRcdFx0aWYg
KHByb3BzLnR5cGUpIGRlbGV0ZSBwcm9wcy50eXBlO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZChz
dHlsZUVsZW1lbnQpLnNldChwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTk+Ki9cblx0
XHRcdC8qPGx0SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBlIHByb3BlcnRp
ZXMgaW4gSUUgPCA4XG5cdFx0XHRpZiAoY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MKXtcblx0XHRc
dFx0dGFnID0gJzwnICsgdGFnO1xuXHRcdFx0XHRpZiAocHJvcHMubmFtZSkgdGFnICs9ICcgbmFt
ZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnXCInO1xuXHRcdFx0XHRpZiAocHJv
cHMudHlwZSkgdGFnICs9ICcgdHlwZT1cIicgKyBlc2NhcGVRdW90ZXMocHJvcHMudHlwZSkgKyAn
XCInO1xuXHRcdFx0XHR0YWcgKz0gJz4nO1xuXHRcdFx0XHRkZWxldGUgcHJvcHMubmFtZTtcblx0
XHRcdFx0ZGVsZXRlIHByb3BzLnR5cGU7XG5cdFx0XHR9XG5cdFx0XHQvKjwvbHRJRTg+Ki9cblx0
XHR9XG5cdFx0cmV0dXJuIHRoaXMuaWQodGhpcy5jcmVhdGVFbGVtZW50KHRhZykpLnNldChwcm9w
cyk7XG5cdH1cblxufSk7XG5cbn0pKCk7XG5cbihmdW5jdGlvbigpe1xuXG5TbGljay51aWRPZih3
aW5kb3cpO1xuU2xpY2sudWlkT2YoZG9jdW1lbnQpO1xuXG5Eb2N1bWVudC5pbXBsZW1lbnQoe1xu
XG5cdG5ld1RleHROb2RlOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVU
ZXh0Tm9kZSh0ZXh0KTtcblx0fSxcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcztcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJu
IHRoaXMud2luZG93O1xuXHR9LFxuXG5cdGlkOiAoZnVuY3Rpb24oKXtcblxuXHRcdHZhciB0eXBl
cyA9IHtcblxuXHRcdFx0c3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0
XHRpZCA9IFNsaWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFxXKS9nLCAnXFxcXCQx
JykpO1xuXHRcdFx0XHRyZXR1cm4gKGlkKSA/IHR5cGVzLmVsZW1lbnQoaWQsIG5vY2FzaCkgOiBu
dWxsO1xuXHRcdFx0fSxcblxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24oZWwsIG5vY2FzaCl7XG5c
dFx0XHRcdFNsaWNrLnVpZE9mKGVsKTtcblx0XHRcdFx0aWYgKCFub2Nhc2ggJiYgIWVsLiRmYW1p
bHkgJiYgISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkpe1xuXHRcdFx0
XHRcdHZhciBmaXJlRXZlbnQgPSBlbC5maXJlRXZlbnQ7XG5cdFx0XHRcdFx0Ly8gd3JhcHBpbmcg
bmVlZGVkIGluIElFNywgb3IgZWxzZSBjcmFzaFxuXHRcdFx0XHRcdGVsLl9maXJlRXZlbnQgPSBm
dW5jdGlvbih0eXBlLCBldmVudCl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyZUV2ZW50KHR5cGUs
IGV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdE9iamVjdC5hcHBlbmQoZWwsIEVsZW1l
bnQuUHJvdG90eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9LFxu
XG5cdFx0XHRvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0XHRpZiAo
b2JqLnRvRWxlbWVudCkgcmV0dXJuIHR5cGVzLmVsZW1lbnQob2JqLnRvRWxlbWVudChkb2MpLCBu
b2Nhc2gpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdH07XG5cblx0XHR0
eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cgPSB0eXBlcy5k
b2N1bWVudCA9IGZ1bmN0aW9uKHplcm8pe1xuXHRcdFx0cmV0dXJuIHplcm87XG5cdFx0fTtcblxu
XHRcdHJldHVybiBmdW5jdGlvbihlbCwgbm9jYXNoLCBkb2Mpe1xuXHRcdFx0aWYgKGVsICYmIGVs
LiRmYW1pbHkgJiYgZWwudW5pcXVlTnVtYmVyKSByZXR1cm4gZWw7XG5cdFx0XHR2YXIgdHlwZSA9
IHR5cGVPZihlbCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVzW3R5cGVdKSA/IHR5cGVzW3R5cGVdKGVs
LCBub2Nhc2gsIGRvYyB8fCBkb2N1bWVudCkgOiBudWxsO1xuXHRcdH07XG5cblx0fSkoKVxuXG59
KTtcblxuaWYgKHdpbmRvdy4kID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQnLCBmdW5jdGlv
bihlbCwgbmMpe1xuXHRyZXR1cm4gZG9jdW1lbnQuaWQoZWwsIG5jLCB0aGlzLmRvY3VtZW50KTtc
bn0pO1xuXG5XaW5kb3cuaW1wbGVtZW50KHtcblxuXHRnZXREb2N1bWVudDogZnVuY3Rpb24oKXtc
blx0XHRyZXR1cm4gdGhpcy5kb2N1bWVudDtcblx0fSxcblxuXHRnZXRXaW5kb3c6IGZ1bmN0aW9u
KCl7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxufSk7XG5cbltEb2N1bWVudCwgRWxlbWVudF0u
aW52b2tlKCdpbXBsZW1lbnQnLCB7XG5cblx0Z2V0RWxlbWVudHM6IGZ1bmN0aW9uKGV4cHJlc3Np
b24pe1xuXHRcdHJldHVybiBTbGljay5zZWFyY2godGhpcywgZXhwcmVzc2lvbiwgbmV3IEVsZW1l
bnRzKTtcblx0fSxcblxuXHRnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKXtcblx0XHRy
ZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBleHByZXNzaW9uKSk7XG5cdH1cblxu
fSk7XG5cbnZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdHJl
dHVybiBTbGljay5jb250YWlucyh0aGlzLCBlbGVtZW50KTtcbn19O1xuXG5pZiAoIWRvY3VtZW50
LmNvbnRhaW5zKSBEb2N1bWVudC5pbXBsZW1lbnQoY29udGFpbnMpO1xuaWYgKCFkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS5jb250YWlucykgRWxlbWVudC5pbXBsZW1lbnQoY29udGFpbnMp
O1xuXG5cblxuLy8gdHJlZSB3YWxraW5nXG5cbnZhciBpbmplY3RDb21iaW5hdG9yID0gZnVuY3Rp
b24oZXhwcmVzc2lvbiwgY29tYmluYXRvcil7XG5cdGlmICghZXhwcmVzc2lvbikgcmV0dXJuIGNv
bWJpbmF0b3I7XG5cblx0ZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5wYXJzZShleHBy
ZXNzaW9uKSk7XG5cblx0dmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucztc
blx0Zm9yICh2YXIgaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaS0tOylcblx0XHRleHByZXNzaW9u
c1tpXVswXS5jb21iaW5hdG9yID0gY29tYmluYXRvcjtcblxuXHRyZXR1cm4gZXhwcmVzc2lvbjtc
bn07XG5cbk9iamVjdC5mb3JFYWNoKHtcblx0Z2V0TmV4dDogJ34nLFxuXHRnZXRQcmV2aW91czog
JyF+Jyxcblx0Z2V0UGFyZW50OiAnISdcbn0sIGZ1bmN0aW9uKGNvbWJpbmF0b3IsIG1ldGhvZCl7
XG5cdEVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0
cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJp
bmF0b3IpKTtcblx0fSk7XG59KTtcblxuT2JqZWN0LmZvckVhY2goe1xuXHRnZXRBbGxOZXh0OiAn
ficsXG5cdGdldEFsbFByZXZpb3VzOiAnIX4nLFxuXHRnZXRTaWJsaW5nczogJ35+Jyxcblx0Z2V0
Q2hpbGRyZW46ICc+Jyxcblx0Z2V0UGFyZW50czogJyEnXG59LCBmdW5jdGlvbihjb21iaW5hdG9y
LCBtZXRob2Qpe1xuXHRFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Np
b24pe1xuXHRcdHJldHVybiB0aGlzLmdldEVsZW1lbnRzKGluamVjdENvbWJpbmF0b3IoZXhwcmVz
c2lvbiwgY29tYmluYXRvcikpO1xuXHR9KTtcbn0pO1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5c
blx0Z2V0Rmlyc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVybiBkb2N1bWVudC5p
ZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKVsw
XSk7XG5cdH0sXG5cblx0Z2V0TGFzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7XG5cdFx0cmV0dXJu
IGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Np
b24sICc+JykpLmdldExhc3QoKSk7XG5cdH0sXG5cblx0Z2V0V2luZG93OiBmdW5jdGlvbigpe1xu
XHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O1xuXHR9LFxuXG5cdGdldERvY3Vt
ZW50OiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7XG5cdH0sXG5c
blx0Z2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXtcblx0XHRyZXR1cm4gZG9jdW1lbnQuaWQo
U2xpY2suZmluZCh0aGlzLCAnIycgKyAoJycgKyBpZCkucmVwbGFjZSgvKFxcVykvZywgJ1xcXFwk
MScpKSk7XG5cdH0sXG5cblx0bWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24pe1xuXHRcdHJldHVy
biAhZXhwcmVzc2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTtcblx0fVxuXG59
KTtcblxuXG5cbmlmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCQnLCBm
dW5jdGlvbihzZWxlY3Rvcil7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpe1xuXHRcdGlm
ICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFyY2godGhpcy5k
b2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7XG5cdFx0ZWxzZSBpZiAoVHlwZS5pc0Vu
dW1lcmFibGUoc2VsZWN0b3IpKSByZXR1cm4gbmV3IEVsZW1lbnRzKHNlbGVjdG9yKTtcblx0fVxu
XHRyZXR1cm4gbmV3IEVsZW1lbnRzKGFyZ3VtZW50cyk7XG59KTtcblxuLy8gSW5zZXJ0ZXJzXG5c
bnZhciBpbnNlcnRlcnMgPSB7XG5cblx0YmVmb3JlOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50
KXtcblx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdGlmIChwYXJlbnQp
IHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7XG5cdH0sXG5cblx0YWZ0ZXI6
IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpe1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBh
cmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBl
bGVtZW50Lm5leHRTaWJsaW5nKTtcblx0fSxcblxuXHRib3R0b206IGZ1bmN0aW9uKGNvbnRleHQs
IGVsZW1lbnQpe1xuXHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7XG5cdH0sXG5cblx0
dG9wOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXtcblx0XHRlbGVtZW50Lmluc2VydEJlZm9y
ZShjb250ZXh0LCBlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHR9XG5cbn07XG5cbmluc2VydGVycy5p
bnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tO1xuXG5cblxuLy8gZ2V0UHJvcGVydHkgLyBzZXRQcm9w
ZXJ0eVxuXG52YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVycyA9IHt9O1xu
XG4vLyBwcm9wZXJ0aWVzXG5cbnZhciBwcm9wZXJ0aWVzID0ge307XG5BcnJheS5mb3JFYWNoKFtc
blx0J3R5cGUnLCAndmFsdWUnLCAnZGVmYXVsdFZhbHVlJywgJ2FjY2Vzc0tleScsICdjZWxsUGFk
ZGluZycsICdjZWxsU3BhY2luZycsICdjb2xTcGFuJyxcblx0J2ZyYW1lQm9yZGVyJywgJ3Jvd1Nw
YW4nLCAndGFiSW5kZXgnLCAndXNlTWFwJ1xuXSwgZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRwcm9w
ZXJ0aWVzW3Byb3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7XG59KTtcblxucHJvcGVy
dGllcy5odG1sID0gJ2lubmVySFRNTCc7XG5wcm9wZXJ0aWVzLnRleHQgPSAoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJUZXh0JzogJ3Rl
eHRDb250ZW50JztcblxuT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocmVhbCwg
a2V5KXtcblx0cHJvcGVydHlTZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5c
dFx0bm9kZVtyZWFsXSA9IHZhbHVlO1xuXHR9O1xuXHRwcm9wZXJ0eUdldHRlcnNba2V5XSA9IGZ1
bmN0aW9uKG5vZGUpe1xuXHRcdHJldHVybiBub2RlW3JlYWxdO1xuXHR9O1xufSk7XG5cbi8qPGx0
SUU5PiovXG5wcm9wZXJ0eVNldHRlcnMudGV4dCA9IChmdW5jdGlvbigpe1xuXHRyZXR1cm4gZnVu
Y3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdGlmIChub2RlLmdldCgndGFnJykgPT0gJ3N0eWxlJykg
bm9kZS5zZXQoJ2h0bWwnLCB2YWx1ZSk7XG5cdFx0ZWxzZSBub2RlW3Byb3BlcnRpZXMudGV4dF0g
PSB2YWx1ZTtcblx0fTtcbn0pKHByb3BlcnR5U2V0dGVycy50ZXh0KTtcblxucHJvcGVydHlHZXR0
ZXJzLnRleHQgPSAoZnVuY3Rpb24oZ2V0dGVyKXtcblx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUpe1xu
XHRcdHJldHVybiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpID8gbm9kZS5pbm5lckhUTUwg
OiBnZXR0ZXIobm9kZSk7XG5cdH07XG59KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7XG4vKjwvbHRJ
RTk+Ki9cblxuLy8gQm9vbGVhbnNcblxudmFyIGJvb2xzID0gW1xuXHQnY29tcGFjdCcsICdub3dy
YXAnLCAnaXNtYXAnLCAnZGVjbGFyZScsICdub3NoYWRlJywgJ2NoZWNrZWQnLFxuXHQnZGlzYWJs
ZWQnLCAncmVhZE9ubHknLCAnbXVsdGlwbGUnLCAnc2VsZWN0ZWQnLCAnbm9yZXNpemUnLFxuXHQn
ZGVmZXInLCAnZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xzJywgJ2F1dG9w
bGF5Jyxcblx0J2xvb3AnXG5dO1xuXG52YXIgYm9vbGVhbnMgPSB7fTtcbkFycmF5LmZvckVhY2go
Ym9vbHMsIGZ1bmN0aW9uKGJvb2wpe1xuXHR2YXIgbG93ZXIgPSBib29sLnRvTG93ZXJDYXNlKCk7
XG5cdGJvb2xlYW5zW2xvd2VyXSA9IGJvb2w7XG5cdHByb3BlcnR5U2V0dGVyc1tsb3dlcl0gPSBm
dW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0bm9kZVtib29sXSA9ICEhdmFsdWU7XG5cdH07XG5c
dHByb3BlcnR5R2V0dGVyc1tsb3dlcl0gPSBmdW5jdGlvbihub2RlKXtcblx0XHRyZXR1cm4gISFu
b2RlW2Jvb2xdO1xuXHR9O1xufSk7XG5cbi8vIFNwZWNpYWwgY2FzZXNcblxuT2JqZWN0LmFwcGVu
ZChwcm9wZXJ0eVNldHRlcnMsIHtcblxuXHQnY2xhc3MnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7
XG5cdFx0KCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgPSAodmFsdWUgfHwg
JycpIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdmFsdWUpO1xuXHR9LFxuXG5cdCdmb3In
OiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KCdodG1sRm9yJyBpbiBub2RlKSA/IG5vZGUu
aHRtbEZvciA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVlKTtcblx0fSxc
blxuXHQnc3R5bGUnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7XG5cdFx0KG5vZGUuc3R5bGUpID8g
bm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgOiBub2RlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB2
YWx1ZSk7XG5cdH0sXG5cblx0J3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpe1xuXHRcdG5v
ZGUudmFsdWUgPSAodmFsdWUgIT0gbnVsbCkgPyB2YWx1ZSA6ICcnO1xuXHR9XG5cbn0pO1xuXG5w
cm9wZXJ0eUdldHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXtcblx0cmV0dXJuICgnY2xh
c3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lIHx8IG51bGwgOiBub2RlLmdldEF0dHJp
YnV0ZSgnY2xhc3MnKTtcbn07XG5cbi8qIDx3ZWJraXQ+ICovXG52YXIgZWwgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdidXR0b24nKTtcbi8vIElFIHNldHMgdHlwZSBhcyByZWFkb25seSBhbmQg
dGhyb3dzXG50cnkgeyBlbC50eXBlID0gJ2J1dHRvbic7IH0gY2F0Y2ggKGUpe31cbmlmIChlbC50
eXBlICE9ICdidXR0b24nKSBwcm9wZXJ0eVNldHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHZh
bHVlKXtcblx0bm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB2YWx1ZSk7XG59O1xuZWwgPSBudWxs
O1xuLyogPC93ZWJraXQ+ICovXG5cbi8qPElFPiovXG5cbi8qPGx0SUU5PiovXG4vLyAjMjQ3OSAt
IElFOCBDYW5ub3Qgc2V0IEhUTUwgb2Ygc3R5bGUgZWxlbWVudFxudmFyIGNhbkNoYW5nZVN0eWxl
SFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c3R5bGUnKSxcblx0XHRmbGFnID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0ZGl2LmlubmVySFRNTCA9
ICcjanVzdFRlc2luZ3ttYXJnaW46IDBweDt9Jztcblx0XHRmbGFnID0gISFkaXYuaW5uZXJIVE1M
O1xuXHR9IGNhdGNoIChlKXt9XG5cdHJldHVybiBmbGFnO1xufSkoKTtcbi8qPC9sdElFOT4qL1xu
XG52YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2b2xhdGlsZUlu
cHV0VmFsdWUsIGh0bWw1SW5wdXRTdXBwb3J0O1xuXG4vLyAjMjE3OFxuaW5wdXQudmFsdWUgPSAn
dCc7XG5pbnB1dC50eXBlID0gJ3N1Ym1pdCc7XG52b2xhdGlsZUlucHV0VmFsdWUgPSBpbnB1dC52
YWx1ZSAhPSAndCc7XG5cbi8vICMyNDQzIC0gSUUgdGhyb3dzIFwiSW52YWxpZCBBcmd1bWVudFwi
IHdoZW4gdHJ5aW5nIHRvIHVzZSBodG1sNSBpbnB1dCB0eXBlc1xudHJ5IHtcblx0aW5wdXQudmFs
dWUgPSAnJztcblx0aW5wdXQudHlwZSA9ICdlbWFpbCc7XG5cdGh0bWw1SW5wdXRTdXBwb3J0ID0g
aW5wdXQudHlwZSA9PSAnZW1haWwnO1xufSBjYXRjaCAoZSl7fVxuXG5pbnB1dCA9IG51bGw7XG5c
bmlmICh2b2xhdGlsZUlucHV0VmFsdWUgfHwgIWh0bWw1SW5wdXRTdXBwb3J0KSBwcm9wZXJ0eVNl
dHRlcnMudHlwZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpe1xuXHR0cnkge1xuXHRcdHZhciB2YWx1
ZSA9IG5vZGUudmFsdWU7XG5cdFx0bm9kZS50eXBlID0gdHlwZTtcblx0XHRub2RlLnZhbHVlID0g
dmFsdWU7XG5cdH0gY2F0Y2ggKGUpe31cbn07XG4vKjwvSUU+Ki9cblxuLyogZ2V0UHJvcGVydHks
IHNldFByb3BlcnR5ICovXG5cbi8qIDxsdElFOT4gKi9cbnZhciBwb2xsdXRlc0dldEF0dHJpYnV0
ZSA9IChmdW5jdGlvbihkaXYpe1xuXHRkaXYucmFuZG9tID0gJ2F0dHJpYnV0ZSc7XG5cdHJldHVy
biAoZGl2LmdldEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpO1xufSkoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXG52YXIgaGFzQ2xvbmVCdWcgPSAoZnVuY3Rpb24o
dGVzdCl7XG5cdHRlc3QuaW5uZXJIVE1MID0gJzxvYmplY3Q+PHBhcmFtIG5hbWU9XCJzaG91bGRf
Zml4XCIgdmFsdWU9XCJ0aGUgdW5rbm93blwiIC8+PC9vYmplY3Q+Jztcblx0cmV0dXJuIHRlc3Qu
Y2xvbmVOb2RlKHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0gMTtcbn0pKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbi8qIDwvbHRJRTk+ICovXG5cbnZhciBoYXND
bGFzc0xpc3QgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblxu
dmFyIGNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpe1xuXHR2YXIgY2xhc3NOYW1lcyA9IChj
bGFzc05hbWUgfHwgJycpLmNsZWFuKCkuc3BsaXQoJyAnKSwgdW5pcXVlcyA9IHt9O1xuXHRyZXR1
cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRpZiAoY2xhc3NO
YW1lICE9PSAnJyAmJiAhdW5pcXVlc1tjbGFzc05hbWVdKSByZXR1cm4gdW5pcXVlc1tjbGFzc05h
bWVdID0gY2xhc3NOYW1lO1xuXHR9KTtcbn07XG5cbnZhciBhZGRUb0NsYXNzTGlzdCA9IGZ1bmN0
aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7XG59O1xuXG52YXIgcmVtb3Zl
RnJvbUNsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUpe1xuXHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUo
bmFtZSk7XG59O1xuXG5FbGVtZW50LmltcGxlbWVudCh7XG5cblx0c2V0UHJvcGVydHk6IGZ1bmN0
aW9uKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgc2V0dGVyID0gcHJvcGVydHlTZXR0ZXJzW25hbWUu
dG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKHNldHRlcil7XG5cdFx0XHRzZXR0ZXIodGhpcywgdmFs
dWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKiA8bHRJRTk+ICovXG5cdFx0XHR2YXIgYXR0cmli
dXRBbGxvd0xpc3Q7XG5cdFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0QWxs
b3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFsbG93TGlzdCcsIHt9KTtcblx0XHRc
dC8qIDwvbHRJRTk+ICovXG5cblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0dGhp
cy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdC8qIDxsdElFOT4gKi9cblx0XHRcdFx0
aWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0cmlidXRBbGxvd0xpc3RbbmFtZV07
XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNl
dEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcblx0XHRcdFx0LyogPGx0SUU5PiAqL1xuXHRc
dFx0XHRpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZUFsbG93TGlzdFtuYW1lXSA9
IHRydWU7XG5cdFx0XHRcdC8qIDwvbHRJRTk+ICovXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHNldFByb3BlcnRpZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpe1xu
XHRcdGZvciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNldFByb3BlcnR5KGF0
dHJpYnV0ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGdldHRlciA9IHByb3Bl
cnR5R2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuXHRcdGlmIChnZXR0ZXIpIHJldHVybiBn
ZXR0ZXIodGhpcyk7XG5cdFx0LyogPGx0SUU5PiAqL1xuXHRcdGlmIChwb2xsdXRlc0dldEF0dHJp
YnV0ZSl7XG5cdFx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSwgYXR0
cmlidXRlQWxsb3dMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZUFsbG93TGlzdCcsIHt9
KTtcblx0XHRcdGlmICghYXR0cikgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAoYXR0ci5leHBhbmRv
ICYmICFhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0pe1xuXHRcdFx0XHR2YXIgb3V0ZXIgPSB0aGlz
Lm91dGVySFRNTDtcblx0XHRcdFx0Ly8gc2VnbWVudCBieSB0aGUgb3BlbmluZyB0YWcgYW5kIGZp
bmQgbWVudGlvbiBvZiBhdHRyaWJ1dGUgbmFtZVxuXHRcdFx0XHRpZiAob3V0ZXIuc3Vic3RyKDAs
IG91dGVyLnNlYXJjaCgvXFwvP1snXCJdPz4oPyFbXjxdKjxbJ1wiXSkvKSkuaW5kZXhPZihuYW1l
KSA8IDApIHJldHVybiBudWxsO1xuXHRcdFx0XHRhdHRyaWJ1dGVBbGxvd0xpc3RbbmFtZV0gPSB0
cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiA8L2x0SUU5PiAqL1xuXHRcdHZhciByZXN1bHQg
PSBTbGljay5nZXRBdHRyaWJ1dGUodGhpcywgbmFtZSk7XG5cdFx0cmV0dXJuICghcmVzdWx0ICYm
ICFTbGljay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJlc3VsdDtcblx0fSxc
blxuXHRnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBhcmdzID0gQXJyYXkuY29u
dmVydChhcmd1bWVudHMpO1xuXHRcdHJldHVybiBhcmdzLm1hcCh0aGlzLmdldFByb3BlcnR5LCB0
aGlzKS5hc3NvY2lhdGUoYXJncyk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9u
KG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KG5hbWUsIG51bGwpO1xuXHR9LFxu
XG5cdHJlbW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuZWFjaChhcmd1bWVu
dHMsIHRoaXMucmVtb3ZlUHJvcGVydHksIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxu
XG5cdHNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpe1xuXHRcdHZhciBwcm9wZXJ0eSA9IEVsZW1l
bnQuUHJvcGVydGllc1twcm9wXTtcblx0XHQocHJvcGVydHkgJiYgcHJvcGVydHkuc2V0KSA/IHBy
b3BlcnR5LnNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHRoaXMuc2V0UHJvcGVydHkocHJvcCwgdmFs
dWUpO1xuXHR9Lm92ZXJsb2FkU2V0dGVyKCksXG5cblx0Z2V0OiBmdW5jdGlvbihwcm9wKXtcblx0
XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07XG5cdFx0cmV0dXJuIChw
cm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQpID8gcHJvcGVydHkuZ2V0LmFwcGx5KHRoaXMpIDogdGhp
cy5nZXRQcm9wZXJ0eShwcm9wKTtcblx0fS5vdmVybG9hZEdldHRlcigpLFxuXG5cdGVyYXNlOiBm
dW5jdGlvbihwcm9wKXtcblx0XHR2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJv
cF07XG5cdFx0KHByb3BlcnR5ICYmIHByb3BlcnR5LmVyYXNlKSA/IHByb3BlcnR5LmVyYXNlLmFw
cGx5KHRoaXMpIDogdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcblx0XHRyZXR1cm4gdGhpcztc
blx0fSxcblxuXHRoYXNDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtc
blx0XHRyZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcblx0fSA6IGZ1
bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0cmV0dXJuIGNsYXNzZXModGhpcy5jbGFzc05hbWUpLmNv
bnRhaW5zKGNsYXNzTmFtZSk7XG5cdH0sXG5cblx0YWRkQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1
bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0Y2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goYWRkVG9D
bGFzc0xpc3QsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IDogZnVuY3Rpb24oY2xhc3NO
YW1lKXtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNsYXNzZXMoY2xhc3NOYW1lICsgJyAnICsgdGhp
cy5jbGFzc05hbWUpLmpvaW4oJyAnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1v
dmVDbGFzczogaGFzQ2xhc3NMaXN0ID8gZnVuY3Rpb24oY2xhc3NOYW1lKXtcblx0XHRjbGFzc2Vz
KGNsYXNzTmFtZSkuZm9yRWFjaChyZW1vdmVGcm9tQ2xhc3NMaXN0LCB0aGlzKTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7XG5cdFx0dmFyIGNsYXNzTmFtZXMg
PSBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKTtcblx0XHRjbGFzc2VzKGNsYXNzTmFtZSkuZm9yRWFj
aChjbGFzc05hbWVzLmVyYXNlLCBjbGFzc05hbWVzKTtcblx0XHR0aGlzLmNsYXNzTmFtZSA9IGNs
YXNzTmFtZXMuam9pbignICcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNs
YXNzOiBmdW5jdGlvbihjbGFzc05hbWUsIGZvcmNlKXtcblx0XHRpZiAoZm9yY2UgPT0gbnVsbCkg
Zm9yY2UgPSAhdGhpcy5oYXNDbGFzcyhjbGFzc05hbWUpO1xuXHRcdHJldHVybiAoZm9yY2UpID8g
dGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xu
XHR9LFxuXG5cdGFkb3B0OiBmdW5jdGlvbigpe1xuXHRcdHZhciBwYXJlbnQgPSB0aGlzLCBmcmFn
bWVudCwgZWxlbWVudHMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyksIGxlbmd0aCA9IGVsZW1l
bnRzLmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJhZ21lbnQgPSBkb2N1
bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKXtcblx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudHNb
aV0sIHRydWUpO1xuXHRcdFx0aWYgKGVsZW1lbnQpIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50
KTtcblx0XHR9XG5cblx0XHRpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hpbGQoZnJhZ21lbnQp
O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0YXBwZW5kVGV4dDogZnVuY3Rpb24odGV4
dCwgd2hlcmUpe1xuXHRcdHJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1bWVudCgpLm5ld1Rl
eHROb2RlKHRleHQpLCB3aGVyZSk7XG5cdH0sXG5cblx0Z3JhYjogZnVuY3Rpb24oZWwsIHdoZXJl
KXtcblx0XHRpbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddKGRvY3VtZW50LmlkKGVsLCB0cnVl
KSwgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aW5qZWN0OiBmdW5jdGlvbihl
bCwgd2hlcmUpe1xuXHRcdGluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10odGhpcywgZG9jdW1l
bnQuaWQoZWwsIHRydWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZXBsYWNlczog
ZnVuY3Rpb24oZWwpe1xuXHRcdGVsID0gZG9jdW1lbnQuaWQoZWwsIHRydWUpO1xuXHRcdGVsLnBh
cmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxc
blxuXHR3cmFwczogZnVuY3Rpb24oZWwsIHdoZXJlKXtcblx0XHRlbCA9IGRvY3VtZW50LmlkKGVs
LCB0cnVlKTtcblx0XHRyZXR1cm4gdGhpcy5yZXBsYWNlcyhlbCkuZ3JhYihlbCwgd2hlcmUpO1xu
XHR9LFxuXG5cdGdldFNlbGVjdGVkOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuc2VsZWN0ZWRJbmRl
eDsgLy8gU2FmYXJpIDMuMi4xXG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5jb252ZXJ0
KHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7XG5cdFx0XHRyZXR1cm4gb3B0
aW9uLnNlbGVjdGVkO1xuXHRcdH0pKTtcblx0fSxcblxuXHR0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlv
bigpe1xuXHRcdHZhciBxdWVyeVN0cmluZyA9IFtdO1xuXHRcdHRoaXMuZ2V0RWxlbWVudHMoJ2lu
cHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihlbCl7XG5cdFx0XHR2YXIgdHlw
ZSA9IGVsLnR5cGU7XG5cdFx0XHRpZiAoIWVsLm5hbWUgfHwgZWwuZGlzYWJsZWQgfHwgdHlwZSA9
PSAnc3VibWl0JyB8fCB0eXBlID09ICdyZXNldCcgfHwgdHlwZSA9PSAnZmlsZScgfHwgdHlwZSA9
PSAnaW1hZ2UnKSByZXR1cm47XG5cblx0XHRcdHZhciB2YWx1ZSA9IChlbC5nZXQoJ3RhZycpID09
ICdzZWxlY3QnKSA/IGVsLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKG9wdCl7XG5cdFx0XHRc
dC8vIElFXG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgndmFsdWUnKTtcblx0
XHRcdH0pIDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSAmJiAhZWwu
Y2hlY2tlZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpO1xuXG5cdFx0XHRBcnJheS5jb252ZXJ0
KHZhbHVlKS5lYWNoKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsICE9ICd1
bmRlZmluZWQnKSBxdWVyeVN0cmluZy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChlbC5uYW1lKSAr
ICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRc
dHJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7XG5cdH1cblxufSk7XG5cblxuLy8gYXBwZW5k
SFRNTFxuXG52YXIgYXBwZW5kSW5zZXJ0ZXJzID0ge1xuXHRiZWZvcmU6ICdiZWZvcmVCZWdpbics
XG5cdGFmdGVyOiAnYWZ0ZXJFbmQnLFxuXHRib3R0b206ICdiZWZvcmVFbmQnLFxuXHR0b3A6ICdh
ZnRlckJlZ2luJyxcblx0aW5zaWRlOiAnYmVmb3JlRW5kJ1xufTtcblxuRWxlbWVudC5pbXBsZW1l
bnQoJ2FwcGVuZEhUTUwnLCAoJ2luc2VydEFkamFjZW50SFRNTCcgaW4gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpID8gZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR0aGlzLmluc2VydEFk
amFjZW50SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddLCBodG1sKTtcblx0
cmV0dXJuIHRoaXM7XG59IDogZnVuY3Rpb24oaHRtbCwgd2hlcmUpe1xuXHR2YXIgdGVtcCA9IG5l
dyBFbGVtZW50KCdkaXYnLCB7aHRtbDogaHRtbH0pLFxuXHRcdGNoaWxkcmVuID0gdGVtcC5jaGls
ZE5vZGVzLFxuXHRcdGZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkO1xuXG5cdGlmICghZnJhZ21l
bnQpIHJldHVybiB0aGlzO1xuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSl7XG5cdFx0ZnJhZ21l
bnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9
IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdFx0ZnJhZ21lbnQuYXBw
ZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdGluc2VydGVyc1t3aGVyZSB8
fCAnYm90dG9tJ10oZnJhZ21lbnQsIHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn0pO1xuXG52YXIg
Y29sbGVjdGVkID0ge30sIHN0b3JhZ2UgPSB7fTtcblxudmFyIGdldCA9IGZ1bmN0aW9uKHVpZCl7
XG5cdHJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7fSkpO1xufTtcblxu
dmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSl7XG5cdHZhciB1aWQgPSBpdGVtLnVuaXF1ZU51bWJl
cjtcblx0aWYgKGl0ZW0ucmVtb3ZlRXZlbnRzKSBpdGVtLnJlbW92ZUV2ZW50cygpO1xuXHRpZiAo
aXRlbS5jbGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7XG5cdGlmICh1aWQg
IT0gbnVsbCl7XG5cdFx0ZGVsZXRlIGNvbGxlY3RlZFt1aWRdO1xuXHRcdGRlbGV0ZSBzdG9yYWdl
W3VpZF07XG5cdH1cblx0cmV0dXJuIGl0ZW07XG59O1xuXG52YXIgZm9ybVByb3BzID0ge2lucHV0
OiAnY2hlY2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2YWx1ZSd9O1xuXG5F
bGVtZW50LmltcGxlbWVudCh7XG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKXtcblx0XHR2YXIgY2hp
bGRyZW4gPSBjbGVhbih0aGlzKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xuXHRcdEFycmF5
LmVhY2goY2hpbGRyZW4sIGNsZWFuKTtcblx0XHRFbGVtZW50LmRpc3Bvc2UodGhpcyk7XG5cdFx0
cmV0dXJuIG51bGw7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCl7XG5cdFx0QXJyYXkuY29u
dmVydCh0aGlzLmNoaWxkTm9kZXMpLmVhY2goRWxlbWVudC5kaXNwb3NlKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAodGhpcy5w
YXJlbnROb2RlKSA/IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKSA6IHRoaXM7XG5c
dH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKGNvbnRlbnRzLCBrZWVwaWQpe1xuXHRcdGNvbnRlbnRz
ID0gY29udGVudHMgIT09IGZhbHNlO1xuXHRcdHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGNv
bnRlbnRzKSwgY2UgPSBbY2xvbmVdLCB0ZSA9IFt0aGlzXSwgaTtcblxuXHRcdGlmIChjb250ZW50
cyl7XG5cdFx0XHRjZS5hcHBlbmQoQXJyYXkuY29udmVydChjbG9uZS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpKSk7XG5cdFx0XHR0ZS5hcHBlbmQoQXJyYXkuY29udmVydCh0aGlzLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCcqJykpKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSBjZS5sZW5ndGg7IGkt
LTspe1xuXHRcdFx0dmFyIG5vZGUgPSBjZVtpXSwgZWxlbWVudCA9IHRlW2ldO1xuXHRcdFx0aWYg
KCFrZWVwaWQpIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuXHRcdFx0Lyo8bHRJRTk+Ki9c
blx0XHRcdGlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7XG5cdFx0XHRcdG5vZGUuY2xlYXJBdHRy
aWJ1dGVzKCk7XG5cdFx0XHRcdG5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1lbnQpO1xuXHRcdFx0
XHRub2RlLnJlbW92ZUF0dHJpYnV0ZSgndW5pcXVlTnVtYmVyJyk7XG5cdFx0XHRcdGlmIChub2Rl
Lm9wdGlvbnMpe1xuXHRcdFx0XHRcdHZhciBubyA9IG5vZGUub3B0aW9ucywgZW8gPSBlbGVtZW50
Lm9wdGlvbnM7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaiA9IG5vLmxlbmd0aDsgai0tOykgbm9bal0u
c2VsZWN0ZWQgPSBlb1tqXS5zZWxlY3RlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Lyo8
L2x0SUU5PiovXG5cdFx0XHR2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50LnRhZ05hbWUudG9M
b3dlckNhc2UoKV07XG5cdFx0XHRpZiAocHJvcCAmJiBlbGVtZW50W3Byb3BdKSBub2RlW3Byb3Bd
ID0gZWxlbWVudFtwcm9wXTtcblx0XHR9XG5cblx0XHQvKjxsdElFOT4qL1xuXHRcdGlmIChoYXND
bG9uZUJ1Zyl7XG5cdFx0XHR2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2Jq
ZWN0JyksIHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyk7XG5cdFx0XHRm
b3IgKGkgPSBjby5sZW5ndGg7IGktLTspIGNvW2ldLm91dGVySFRNTCA9IHRvW2ldLm91dGVySFRN
TDtcblx0XHR9XG5cdFx0Lyo8L2x0SUU5PiovXG5cdFx0cmV0dXJuIGRvY3VtZW50LmlkKGNsb25l
KTtcblx0fVxuXG59KTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1w
bGVtZW50Jywge1xuXG5cdGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0aWYg
KHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRcdFx0
Y29sbGVjdGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7XG5cdFx0fVxuXHRcdGlmICh0aGlz
LmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1
bWVudHNbMl0pO1xuXHRcdGVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pO1xu
XHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbih0eXBl
LCBmbil7XG5cdFx0aWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhpcy5yZW1vdmVFdmVu
dExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7XG5cdFx0ZWxzZSB0aGlzLmRldGFj
aEV2ZW50KCdvbicgKyB0eXBlLCBmbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmV0
cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXtcblx0XHR2YXIgc3RvcmFnZSA9IGdldChT
bGljay51aWRPZih0aGlzKSksIHByb3AgPSBzdG9yYWdlW3Byb3BlcnR5XTtcblx0XHRpZiAoZGZs
dCAhPSBudWxsICYmIHByb3AgPT0gbnVsbCkgcHJvcCA9IHN0b3JhZ2VbcHJvcGVydHldID0gZGZs
dDtcblx0XHRyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7XG5cdH0sXG5cblx0c3Rv
cmU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0dmFyIHN0b3JhZ2UgPSBnZXQoU2xp
Y2sudWlkT2YodGhpcykpO1xuXHRcdHN0b3JhZ2VbcHJvcGVydHldID0gdmFsdWU7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0ZWxpbWluYXRlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0
dmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpO1xuXHRcdGRlbGV0ZSBzdG9yYWdl
W3Byb3BlcnR5XTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG59KTtcblxuLyo8bHRJRTk+Ki9c
bmlmICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtcblx0
dmFyIGdjID0gZnVuY3Rpb24oKXtcblx0XHRPYmplY3QuZWFjaChjb2xsZWN0ZWQsIGNsZWFuKTtc
blx0XHRpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFnZSgpO1xuXHRcdHdp
bmRvdy5yZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpO1xuXHR9O1xuXHR3aW5kb3cuYWRkTGlz
dGVuZXIoJ3VubG9hZCcsIGdjKTtcbn1cbi8qPC9sdElFOT4qL1xuXG5FbGVtZW50LlByb3BlcnRp
ZXMgPSB7fTtcblxuXG5cbkVsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHtcblxuXHRzZXQ6IGZ1
bmN0aW9uKHN0eWxlKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHlsZTtcblx0fSxcblxu
XHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuc3R5bGUuY3NzVGV4dDtcblx0fSxc
blxuXHRlcmFzZTogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnN0eWxlLmNzc1RleHQgPSAnJztcblx0
fVxuXG59O1xuXG5FbGVtZW50LlByb3BlcnRpZXMudGFnID0ge1xuXG5cdGdldDogZnVuY3Rpb24o
KXtcblx0XHRyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxufTtcblxu
RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwgPSB7XG5cblx0c2V0OiBmdW5jdGlvbihodG1sKXtcblx0
XHRpZiAoaHRtbCA9PSBudWxsKSBodG1sID0gJyc7XG5cdFx0ZWxzZSBpZiAodHlwZU9mKGh0bWwp
ID09ICdhcnJheScpIGh0bWwgPSBodG1sLmpvaW4oJycpO1xuXG5cdFx0Lyo8bHRJRTk+Ki9cblx0
XHRpZiAodGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwpIHRoaXMuc3R5bGVT
aGVldC5jc3NUZXh0ID0gaHRtbDtcblx0XHRlbHNlIC8qPC9sdElFOT4qL3RoaXMuaW5uZXJIVE1M
ID0gaHRtbDtcblx0fSxcblx0ZXJhc2U6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5zZXQoJ2h0bWwn
LCAnJyk7XG5cdH1cblxufTtcblxudmFyIHN1cHBvcnRzSFRNTDVFbGVtZW50cyA9IHRydWUsIHN1
cHBvcnRzVGFibGVJbm5lckhUTUwgPSB0cnVlLCBzdXBwb3J0c1RSSW5uZXJIVE1MID0gdHJ1ZTtc
blxuLyo8bHRJRTk+Ki9cbi8vIHRlY2huaXF1ZSBieSBqZGJhcmxldHQgLSBodHRwOi8vamRiYXJ0
bGV0dC5jb20vaW5uZXJzaGl2L1xudmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpO1xudmFyIGZyYWdtZW50O1xuZGl2LmlubmVySFRNTCA9ICc8bmF2PjwvbmF2Pic7XG5zdXBw
b3J0c0hUTUw1RWxlbWVudHMgPSAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID09IDEpO1xuaWYgKCFz
dXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXHR2YXIgdGFncyA9ICdhYmJyIGFydGljbGUgYXNpZGUg
YXVkaW8gY2FudmFzIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhl
YWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc3VtbWFy
eSB0aW1lIHZpZGVvJy5zcGxpdCgnICcpO1xuXHRmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoO1xuXHR3aGlsZSAobC0tKSBmcmFnbWVu
dC5jcmVhdGVFbGVtZW50KHRhZ3NbbF0pO1xufVxuZGl2ID0gbnVsbDtcbi8qPC9sdElFOT4qL1xu
XG4vKjxJRT4qL1xuc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IEZ1bmN0aW9uLmF0dGVtcHQoZnVu
Y3Rpb24oKXtcblx0dmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtc
blx0dGFibGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7XG5cdHJldHVybiB0cnVl
O1xufSk7XG5cbi8qPGx0RkY0PiovXG52YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0
cicpLCBodG1sID0gJzx0ZD48L3RkPic7XG50ci5pbm5lckhUTUwgPSBodG1sO1xuc3VwcG9ydHNU
UklubmVySFRNTCA9ICh0ci5pbm5lckhUTUwgPT0gaHRtbCk7XG50ciA9IG51bGw7XG4vKjwvbHRG
RjQ+Ki9cblxuaWYgKCFzdXBwb3J0c1RhYmxlSW5uZXJIVE1MIHx8ICFzdXBwb3J0c1RSSW5uZXJI
VE1MIHx8ICFzdXBwb3J0c0hUTUw1RWxlbWVudHMpe1xuXG5cdEVsZW1lbnQuUHJvcGVydGllcy5o
dG1sLnNldCA9IChmdW5jdGlvbihzZXQpe1xuXG5cdFx0dmFyIHRyYW5zbGF0aW9ucyA9IHtcblx0
XHRcdHRhYmxlOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcblx0XHRcdHNlbGVjdDogWzEs
ICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSxcblx0XHRcdHRib2R5OiBbMiwgJzx0YWJsZT48dGJv
ZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblx0XHRcdHRyOiBbMywgJzx0YWJsZT48dGJvZHk+
PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXVxuXHRcdH07XG5cblx0XHR0cmFuc2xhdGlv
bnMudGhlYWQgPSB0cmFuc2xhdGlvbnMudGZvb3QgPSB0cmFuc2xhdGlvbnMudGJvZHk7XG5cblx0
XHRyZXR1cm4gZnVuY3Rpb24oaHRtbCl7XG5cblx0XHRcdC8qPGx0SUU5PiovXG5cdFx0XHRpZiAo
dGhpcy5zdHlsZVNoZWV0KSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5cdFx0XHQvKjwv
bHRJRTk+Ki9cblx0XHRcdHZhciB3cmFwID0gdHJhbnNsYXRpb25zW3RoaXMuZ2V0KCd0YWcnKV07
XG5cdFx0XHRpZiAoIXdyYXAgJiYgIXN1cHBvcnRzSFRNTDVFbGVtZW50cykgd3JhcCA9IFswLCAn
JywgJyddO1xuXHRcdFx0aWYgKCF3cmFwKSByZXR1cm4gc2V0LmNhbGwodGhpcywgaHRtbCk7XG5c
blx0XHRcdHZhciBsZXZlbCA9IHdyYXBbMF0sIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKSwgdGFyZ2V0ID0gd3JhcHBlcjtcblx0XHRcdGlmICghc3VwcG9ydHNIVE1MNUVs
ZW1lbnRzKSBmcmFnbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcblx0XHRcdHdyYXBwZXIuaW5u
ZXJIVE1MID0gW3dyYXBbMV0sIGh0bWwsIHdyYXBbMl1dLmZsYXR0ZW4oKS5qb2luKCcnKTtcblx0
XHRcdHdoaWxlIChsZXZlbC0tKSB0YXJnZXQgPSB0YXJnZXQuZmlyc3RDaGlsZDtcblx0XHRcdHRo
aXMuZW1wdHkoKS5hZG9wdCh0YXJnZXQuY2hpbGROb2Rlcyk7XG5cdFx0XHRpZiAoIXN1cHBvcnRz
SFRNTDVFbGVtZW50cykgZnJhZ21lbnQucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG5cdFx0XHR3cmFw
cGVyID0gbnVsbDtcblx0XHR9O1xuXG5cdH0pKEVsZW1lbnQuUHJvcGVydGllcy5odG1sLnNldCk7
XG59XG4vKjwvSUU+Ki9cblxuLyo8bHRJRTk+Ki9cbnZhciB0ZXN0Rm9ybSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbnRlc3RGb3JtLmlubmVySFRNTCA9ICc8c2VsZWN0PjxvcHRp
b24+czwvb3B0aW9uPjwvc2VsZWN0Pic7XG5cbmlmICh0ZXN0Rm9ybS5maXJzdENoaWxkLnZhbHVl
ICE9ICdzJykgRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbHVlID0ge1xuXG5cdHNldDogZnVuY3Rpb24o
dmFsdWUpe1xuXHRcdHZhciB0YWcgPSB0aGlzLmdldCgndGFnJyk7XG5cdFx0aWYgKHRhZyAhPSAn
c2VsZWN0JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFsdWUpO1xuXHRcdHZh
ciBvcHRpb25zID0gdGhpcy5nZXRFbGVtZW50cygnb3B0aW9uJyk7XG5cdFx0dmFsdWUgPSBTdHJp
bmcodmFsdWUpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKyl7
XG5cdFx0XHR2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSxcblx0XHRcdFx0YXR0ciA9IG9wdGlvbi5n
ZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpLFxuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IChhdHRyICYm
IGF0dHIuc3BlY2lmaWVkKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi5nZXQoJ3RleHQnKTtcblx0
XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBvcHRpb24uc2VsZWN0ZWQgPSB0
cnVlO1xuXHRcdH1cblx0fSxcblxuXHRnZXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIG9wdGlvbiA9
IHRoaXMsIHRhZyA9IG9wdGlvbi5nZXQoJ3RhZycpO1xuXG5cdFx0aWYgKHRhZyAhPSAnc2VsZWN0
JyAmJiB0YWcgIT0gJ29wdGlvbicpIHJldHVybiB0aGlzLmdldFByb3BlcnR5KCd2YWx1ZScpO1xu
XG5cdFx0aWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlvbi5nZXRTZWxlY3Rl
ZCgpWzBdKSkgcmV0dXJuICcnO1xuXG5cdFx0dmFyIGF0dHIgPSBvcHRpb24uZ2V0QXR0cmlidXRl
Tm9kZSgndmFsdWUnKTtcblx0XHRyZXR1cm4gKGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQpID8gb3B0
aW9uLnZhbHVlIDogb3B0aW9uLmdldCgndGV4dCcpO1xuXHR9XG5cbn07XG50ZXN0Rm9ybSA9IG51
bGw7XG4vKjwvbHRJRTk+Ki9cblxuLyo8SUU+Ki9cbmlmIChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpKSBFbGVtZW50LlByb3BlcnRpZXMuaWQgPSB7
XG5cdHNldDogZnVuY3Rpb24oaWQpe1xuXHRcdHRoaXMuaWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5v
ZGUoJ2lkJykudmFsdWUgPSBpZDtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHJldHVy
biB0aGlzLmlkIHx8IG51bGw7XG5cdH0sXG5cdGVyYXNlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMu
aWQgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykudmFsdWUgPSAnJztcblx0fVxufTtcbi8q
PC9JRT4qL1xuXG59KSgpO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEV2ZW50XG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyB0aGUgRXZlbnQgVHlwZSwgdG8gbWFrZSB0aGUgZXZlbnQgb2JqZWN0IGNyb3Nz
LWJyb3dzZXIuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW1dp
bmRvdywgRG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmplY3RdXG5cbnByb3Zp
ZGVzOiBFdmVudFxuXG4uLi5cbiovXG5cbihmdW5jdGlvbigpe1xuXG52YXIgX2tleXMgPSB7fTtc
bnZhciBub3JtYWxpemVXaGVlbFNwZWVkID0gZnVuY3Rpb24oZXZlbnQpe1xuXHR2YXIgbm9ybWFs
aXplZDtcblx0aWYgKGV2ZW50LndoZWVsRGVsdGEpe1xuXHRcdG5vcm1hbGl6ZWQgPSBldmVudC53
aGVlbERlbHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIwIDogZXZlbnQud2hl
ZWxEZWx0YSAvIDEyO1xuXHR9IGVsc2Uge1xuXHRcdHZhciByYXdBbW91bnQgPSBldmVudC5kZWx0
YVkgfHwgZXZlbnQuZGV0YWlsIHx8IDA7XG5cdFx0bm9ybWFsaXplZCA9IC0ocmF3QW1vdW50ICUg
MyA9PSAwID8gcmF3QW1vdW50IC8gMyA6IHJhd0Ftb3VudCAqIDEwKTtcblx0fVxuXHRyZXR1cm4g
bm9ybWFsaXplZDtcbn07XG5cbnZhciBET01FdmVudCA9IHRoaXMuRE9NRXZlbnQgPSBuZXcgVHlw
ZSgnRE9NRXZlbnQnLCBmdW5jdGlvbihldmVudCwgd2luKXtcblx0aWYgKCF3aW4pIHdpbiA9IHdp
bmRvdztcblx0ZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7XG5cdGlmIChldmVudC4kZXh0ZW5k
ZWQpIHJldHVybiBldmVudDtcblx0dGhpcy5ldmVudCA9IGV2ZW50O1xuXHR0aGlzLiRleHRlbmRl
ZCA9IHRydWU7XG5cdHRoaXMuc2hpZnQgPSBldmVudC5zaGlmdEtleTtcblx0dGhpcy5jb250cm9s
ID0gZXZlbnQuY3RybEtleTtcblx0dGhpcy5hbHQgPSBldmVudC5hbHRLZXk7XG5cdHRoaXMubWV0
YSA9IGV2ZW50Lm1ldGFLZXk7XG5cdHZhciB0eXBlID0gdGhpcy50eXBlID0gZXZlbnQudHlwZTtc
blx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHR3aGls
ZSAodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAzKSB0YXJnZXQgPSB0YXJnZXQucGFyZW50
Tm9kZTtcblx0dGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpO1xuXG5cdGlmICh0eXBl
LmluZGV4T2YoJ2tleScpID09IDApe1xuXHRcdHZhciBjb2RlID0gdGhpcy5jb2RlID0gKGV2ZW50
LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpO1xuXHRcdGlmICghdGhpcy5zaGlmdCB8fCB0eXBlICE9
ICdrZXlwcmVzcycpIHRoaXMua2V5ID0gX2tleXNbY29kZV07XG5cdFx0aWYgKHR5cGUgPT0gJ2tl
eWRvd24nIHx8IHR5cGUgPT0gJ2tleXVwJyl7XG5cdFx0XHRpZiAoY29kZSA+IDExMSAmJiBjb2Rl
IDwgMTI0KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTtcblx0XHRcdGVsc2UgaWYgKGNv
ZGUgPiA5NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5Njtcblx0XHR9XG5cdFx0
aWYgKHRoaXMua2V5ID09IG51bGwpIHRoaXMua2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2Rl
KS50b0xvd2VyQ2FzZSgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT0gJ2NsaWNrJyB8fCB0eXBlID09
ICdkYmxjbGljaycgfHwgdHlwZSA9PSAnY29udGV4dG1lbnUnIHx8IHR5cGUgPT0gJ3doZWVsJyB8
fCB0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZS5pbmRleE9mKCdtb3VzZScpID09IDAp
e1xuXHRcdHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG5cdFx0ZG9jID0gKCFkb2MuY29tcGF0TW9k
ZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9k
eTtcblx0XHR0aGlzLnBhZ2UgPSB7XG5cdFx0XHR4OiAoZXZlbnQucGFnZVggIT0gbnVsbCkgPyBl
dmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2Muc2Nyb2xsTGVmdCxcblx0XHRcdHk6IChl
dmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WSArIGRvYy5z
Y3JvbGxUb3Bcblx0XHR9O1xuXHRcdHRoaXMuY2xpZW50ID0ge1xuXHRcdFx0eDogKGV2ZW50LnBh
Z2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQgOiBldmVudC5jbGll
bnRYLFxuXHRcdFx0eTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgLSB3aW4u
cGFnZVlPZmZzZXQgOiBldmVudC5jbGllbnRZXG5cdFx0fTtcblx0XHRpZiAodHlwZSA9PSAnRE9N
TW91c2VTY3JvbGwnIHx8IHR5cGUgPT0gJ3doZWVsJyB8fCB0eXBlID09ICdtb3VzZXdoZWVsJykg
dGhpcy53aGVlbCA9IG5vcm1hbGl6ZVdoZWVsU3BlZWQoZXZlbnQpO1xuXHRcdHRoaXMucmlnaHRD
bGljayA9IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAyKTtcblx0XHRpZiAo
dHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZW91dCcgfHwgdHlwZSA9PSAnbW91
c2VlbnRlcicgfHwgdHlwZSA9PSAnbW91c2VsZWF2ZScpe1xuXHRcdFx0dmFyIG92ZXJUYXJnZXQg
PSB0eXBlID09ICdtb3VzZW92ZXInIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInO1xuXHRcdFx0dmFy
IHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50WyhvdmVyVGFyZ2V0ID8gJ2Zy
b20nIDogJ3RvJykgKyAnRWxlbWVudCddO1xuXHRcdFx0d2hpbGUgKHJlbGF0ZWQgJiYgcmVsYXRl
ZC5ub2RlVHlwZSA9PSAzKSByZWxhdGVkID0gcmVsYXRlZC5wYXJlbnROb2RlO1xuXHRcdFx0dGhp
cy5yZWxhdGVkVGFyZ2V0ID0gZG9jdW1lbnQuaWQocmVsYXRlZCk7XG5cdFx0fVxuXHR9IGVsc2Ug
aWYgKHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PSAwIHx8IHR5cGUuaW5kZXhPZignZ2VzdHVyZScp
ID09IDApe1xuXHRcdHRoaXMucm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtcblx0XHR0aGlzLnNj
YWxlID0gZXZlbnQuc2NhbGU7XG5cdFx0dGhpcy50YXJnZXRUb3VjaGVzID0gZXZlbnQudGFyZ2V0
VG91Y2hlcztcblx0XHR0aGlzLmNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7
XG5cdFx0dmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3VjaGVzO1xuXHRcdGlm
ICh0b3VjaGVzICYmIHRvdWNoZXNbMF0pe1xuXHRcdFx0dmFyIHRvdWNoID0gdG91Y2hlc1swXTtc
blx0XHRcdHRoaXMucGFnZSA9IHt4OiB0b3VjaC5wYWdlWCwgeTogdG91Y2gucGFnZVl9O1xuXHRc
dFx0dGhpcy5jbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2guY2xpZW50WX07XG5c
dFx0fVxuXHR9XG5cblx0aWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQgPSB7fTtcblx0aWYg
KCF0aGlzLnBhZ2UpIHRoaXMucGFnZSA9IHt9O1xufSk7XG5cbkRPTUV2ZW50LmltcGxlbWVudCh7
XG5cblx0c3RvcDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5wcmV2ZW50RGVmYXVsdCgp
LnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9LFxuXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24o
KXtcblx0XHRpZiAodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pIHRoaXMuZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7XG5cdFx0ZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5c
dFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCl7XG5c
dFx0aWYgKHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQucHJldmVudERlZmF1
bHQoKTtcblx0XHRlbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblx0XHRyZXR1
cm4gdGhpcztcblx0fVxuXG59KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5ID0gZnVuY3Rpb24oY29k
ZSwga2V5KXtcblx0X2tleXNbY29kZV0gPSBrZXk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRE9N
RXZlbnQuZGVmaW5lS2V5cyA9IERPTUV2ZW50LmRlZmluZUtleS5vdmVybG9hZFNldHRlcih0cnVl
KTtcblxuRE9NRXZlbnQuZGVmaW5lS2V5cyh7XG5cdCczOCc6ICd1cCcsICc0MCc6ICdkb3duJywg
JzM3JzogJ2xlZnQnLCAnMzknOiAncmlnaHQnLFxuXHQnMjcnOiAnZXNjJywgJzMyJzogJ3NwYWNl
JywgJzgnOiAnYmFja3NwYWNlJywgJzknOiAndGFiJyxcblx0JzQ2JzogJ2RlbGV0ZScsICcxMyc6
ICdlbnRlcidcbn0pO1xuXG59KSgpO1xuXG5cblxuXG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVu
dC5FdmVudFxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRob2RzIGZvciBkZWFs
aW5nIHdpdGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3VzZWVudGVyIGFuZCBt
b3VzZWxlYXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cywgaWYgbmVjZXNzYXJ5LlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBFdmVudF1cblxucHJv
dmlkZXM6IEVsZW1lbnQuRXZlbnRcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxuRWxlbWVu
dC5Qcm9wZXJ0aWVzLmV2ZW50cyA9IHtzZXQ6IGZ1bmN0aW9uKGV2ZW50cyl7XG5cdHRoaXMuYWRk
RXZlbnRzKGV2ZW50cyk7XG59fTtcblxuW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9r
ZSgnaW1wbGVtZW50Jywge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0
dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTtcblx0XHRpZiAoIWV2ZW50
c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0ge2tleXM6IFtdLCB2YWx1ZXM6IFtdfTtcblx0XHRpZiAo
ZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKSByZXR1cm4gdGhpcztcblx0XHRldmVudHNb
dHlwZV0ua2V5cy5wdXNoKGZuKTtcblx0XHR2YXIgcmVhbFR5cGUgPSB0eXBlLFxuXHRcdFx0Y3Vz
dG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV0sXG5cdFx0XHRjb25kaXRpb24gPSBmbixcblx0XHRc
dHNlbGYgPSB0aGlzO1xuXHRcdGlmIChjdXN0b20pe1xuXHRcdFx0aWYgKGN1c3RvbS5vbkFkZCkg
Y3VzdG9tLm9uQWRkLmNhbGwodGhpcywgZm4sIHR5cGUpO1xuXHRcdFx0aWYgKGN1c3RvbS5jb25k
aXRpb24pe1xuXHRcdFx0XHRjb25kaXRpb24gPSBmdW5jdGlvbihldmVudCl7XG5cdFx0XHRcdFx0
aWYgKGN1c3RvbS5jb25kaXRpb24uY2FsbCh0aGlzLCBldmVudCwgdHlwZSkpIHJldHVybiBmbi5j
YWxsKHRoaXMsIGV2ZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0
XHRcdH1cblx0XHRcdGlmIChjdXN0b20uYmFzZSkgcmVhbFR5cGUgPSBGdW5jdGlvbi5jb252ZXJ0
KGN1c3RvbS5iYXNlKS5jYWxsKHRoaXMsIHR5cGUpO1xuXHRcdH1cblx0XHR2YXIgZGVmbiA9IGZ1
bmN0aW9uKCl7XG5cdFx0XHRyZXR1cm4gZm4uY2FsbChzZWxmKTtcblx0XHR9O1xuXHRcdHZhciBu
YXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTtcblx0XHRpZiAobmF0
aXZlRXZlbnQpe1xuXHRcdFx0aWYgKG5hdGl2ZUV2ZW50ID09IDIpe1xuXHRcdFx0XHRkZWZuID0g
ZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRcdGV2ZW50ID0gbmV3IERPTUV2ZW50KGV2ZW50LCBz
ZWxmLmdldFdpbmRvdygpKTtcblx0XHRcdFx0XHRpZiAoY29uZGl0aW9uLmNhbGwoc2VsZiwgZXZl
bnQpID09PSBmYWxzZSkgZXZlbnQuc3RvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0
dGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJdKTtcblx0XHR9XG5c
dFx0ZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9
LFxuXG5cdHJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7XG5cdFx0dmFyIGV2ZW50cyA9
IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlw
ZV0pIHJldHVybiB0aGlzO1xuXHRcdHZhciBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuXHRcdHZhciBp
bmRleCA9IGxpc3Qua2V5cy5pbmRleE9mKGZuKTtcblx0XHRpZiAoaW5kZXggPT0gLTEpIHJldHVy
biB0aGlzO1xuXHRcdHZhciB2YWx1ZSA9IGxpc3QudmFsdWVzW2luZGV4XTtcblx0XHRkZWxldGUg
bGlzdC5rZXlzW2luZGV4XTtcblx0XHRkZWxldGUgbGlzdC52YWx1ZXNbaW5kZXhdO1xuXHRcdHZh
ciBjdXN0b20gPSBFbGVtZW50LkV2ZW50c1t0eXBlXTtcblx0XHRpZiAoY3VzdG9tKXtcblx0XHRc
dGlmIChjdXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRoaXMsIGZuLCB0eXBl
KTtcblx0XHRcdGlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9t
LmJhc2UpLmNhbGwodGhpcywgdHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiAoRWxlbWVudC5OYXRp
dmVFdmVudHNbdHlwZV0pID8gdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCB2YWx1ZSwgYXJndW1l
bnRzWzJdKSA6IHRoaXM7XG5cdH0sXG5cblx0YWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpe1xu
XHRcdGZvciAodmFyIGV2ZW50IGluIGV2ZW50cykgdGhpcy5hZGRFdmVudChldmVudCwgZXZlbnRz
W2V2ZW50XSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlRXZlbnRzOiBmdW5j
dGlvbihldmVudHMpe1xuXHRcdHZhciB0eXBlO1xuXHRcdGlmICh0eXBlT2YoZXZlbnRzKSA9PSAn
b2JqZWN0Jyl7XG5cdFx0XHRmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5
cGUsIGV2ZW50c1t0eXBlXSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0dmFyIGF0
dGFjaGVkID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFhdHRhY2hlZCkgcmV0
dXJuIHRoaXM7XG5cdFx0aWYgKCFldmVudHMpe1xuXHRcdFx0Zm9yICh0eXBlIGluIGF0dGFjaGVk
KSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTtcblx0XHRcdHRoaXMuZWxpbWluYXRlKCdldmVudHMn
KTtcblx0XHR9IGVsc2UgaWYgKGF0dGFjaGVkW2V2ZW50c10pe1xuXHRcdFx0YXR0YWNoZWRbZXZl
bnRzXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4pe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50KGV2
ZW50cywgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRkZWxldGUgYXR0YWNoZWRbZXZlbnRz
XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmlyZUV2ZW50OiBmdW5jdGlv
bih0eXBlLCBhcmdzLCBkZWxheSl7XG5cdFx0dmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2
ZW50cycpO1xuXHRcdGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xu
XHRcdGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpO1xuXG5cdFx0ZXZlbnRzW3R5cGVdLmtleXMu
ZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlz
LCBhcmdzKTtcblx0XHRcdGVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSwgdGhpcyk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmVFdmVudHM6IGZ1bmN0aW9uKGZyb20s
IHR5cGUpe1xuXHRcdGZyb20gPSBkb2N1bWVudC5pZChmcm9tKTtcblx0XHR2YXIgZXZlbnRzID0g
ZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7XG5cdFx0aWYgKCFldmVudHMpIHJldHVybiB0aGlzO1xu
XHRcdGlmICghdHlwZSl7XG5cdFx0XHRmb3IgKHZhciBldmVudFR5cGUgaW4gZXZlbnRzKSB0aGlz
LmNsb25lRXZlbnRzKGZyb20sIGV2ZW50VHlwZSk7XG5cdFx0fSBlbHNlIGlmIChldmVudHNbdHlw
ZV0pe1xuXHRcdFx0ZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7XG5cdFx0XHRc
dHRoaXMuYWRkRXZlbnQodHlwZSwgZm4pO1xuXHRcdFx0fSwgdGhpcyk7XG5cdFx0fVxuXHRcdHJl
dHVybiB0aGlzO1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50Lk5hdGl2ZUV2ZW50cyA9IHtcblx0Y2xp
Y2s6IDIsIGRibGNsaWNrOiAyLCBtb3VzZXVwOiAyLCBtb3VzZWRvd246IDIsIGNvbnRleHRtZW51
OiAyLCAvL21vdXNlIGJ1dHRvbnNcblx0d2hlZWw6IDIsIG1vdXNld2hlZWw6IDIsIERPTU1vdXNl
U2Nyb2xsOiAyLCAvL21vdXNlIHdoZWVsXG5cdG1vdXNlb3ZlcjogMiwgbW91c2VvdXQ6IDIsIG1v
dXNlbW92ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9tb3VzZSBtb3ZlbWVu
dFxuXHRrZXlkb3duOiAyLCBrZXlwcmVzczogMiwga2V5dXA6IDIsIC8va2V5Ym9hcmRcblx0b3Jp
ZW50YXRpb25jaGFuZ2U6IDIsIC8vIG1vYmlsZVxuXHR0b3VjaHN0YXJ0OiAyLCB0b3VjaG1vdmU6
IDIsIHRvdWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2hcblx0Z2VzdHVyZXN0YXJ0
OiAyLCBnZXN0dXJlY2hhbmdlOiAyLCBnZXN0dXJlZW5kOiAyLCAvLyBnZXN0dXJlXG5cdGZvY3Vz
OiAyLCBibHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIsIHN1Ym1pdDogMiwg
cGFzdGU6IDIsIGlucHV0OiAyLCAvL2Zvcm0gZWxlbWVudHNcblx0bG9hZDogMiwgdW5sb2FkOiAx
LCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29udGVudExvYWRlZDog
MSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3dcblx0aGFzaGNoYW5nZTogMSwgcG9wc3Rh
dGU6IDIsIHBhZ2VzaG93OiAyLCBwYWdlaGlkZTogMiwgLy8gaGlzdG9yeVxuXHRlcnJvcjogMSwg
YWJvcnQ6IDEsIHNjcm9sbDogMSwgbWVzc2FnZTogMiAvL21pc2Ncbn07XG5cbkVsZW1lbnQuRXZl
bnRzID0ge1xuXHRtb3VzZXdoZWVsOiB7XG5cdFx0YmFzZTogJ29ud2hlZWwnIGluIGRvY3VtZW50
ID8gJ3doZWVsJyA6ICdvbm1vdXNld2hlZWwnIGluIGRvY3VtZW50ID8gJ21vdXNld2hlZWwnIDog
J0RPTU1vdXNlU2Nyb2xsJ1xuXHR9XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbihldmVudCl7
XG5cdHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblx0aWYgKHJlbGF0ZWQgPT0g
bnVsbCkgcmV0dXJuIHRydWU7XG5cdGlmICghcmVsYXRlZCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1
cm4gKHJlbGF0ZWQgIT0gdGhpcyAmJiByZWxhdGVkLnByZWZpeCAhPSAneHVsJyAmJiB0eXBlT2Yo
dGhpcykgIT0gJ2RvY3VtZW50JyAmJiAhdGhpcy5jb250YWlucyhyZWxhdGVkKSk7XG59O1xuXG5p
ZiAoJ29ubW91c2VlbnRlcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtcblx0RWxlbWVu
dC5OYXRpdmVFdmVudHMubW91c2VlbnRlciA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlbGVh
dmUgPSAyO1xuXHRFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrO1xufSBlbHNlIHtcblx0
RWxlbWVudC5FdmVudHMubW91c2VlbnRlciA9IHtcblx0XHRiYXNlOiAnbW91c2VvdmVyJyxcblx0
XHRjb25kaXRpb246IGNoZWNrXG5cdH07XG5cblx0RWxlbWVudC5FdmVudHMubW91c2VsZWF2ZSA9
IHtcblx0XHRiYXNlOiAnbW91c2VvdXQnLFxuXHRcdGNvbmRpdGlvbjogY2hlY2tcblx0fTtcbn1c
blxuLyo8bHRJRTk+Ki9cbmlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRFbGVtZW50
Lk5hdGl2ZUV2ZW50cy5wcm9wZXJ0eWNoYW5nZSA9IDI7XG5cdEVsZW1lbnQuRXZlbnRzLmNoYW5n
ZSA9IHtcblx0XHRiYXNlOiBmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7
XG5cdFx0XHRyZXR1cm4gKHRoaXMuZ2V0KCd0YWcnKSA9PSAnaW5wdXQnICYmICh0eXBlID09ICdy
YWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSkgPyAncHJvcGVydHljaGFuZ2UnIDogJ2NoYW5n
ZSc7XG5cdFx0fSxcblx0XHRjb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHRcdHJldHVy
biBldmVudC50eXBlICE9ICdwcm9wZXJ0eWNoYW5nZScgfHwgZXZlbnQuZXZlbnQucHJvcGVydHlO
YW1lID09ICdjaGVja2VkJztcblx0XHR9XG5cdH07XG59XG4vKjwvbHRJRTk+Ki9cblxuXG5cbn0p
KCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uXG5cbmRlc2NyaXB0aW9u
OiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSB0aGUgZGVsZWdh
dGUgbWV0aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50LlxuXG5saWNlbnNl
OiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LkV2ZW50XVxuXG5wcm92
aWRlczogW0VsZW1lbnQuRGVsZWdhdGlvbl1cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxu
dmFyIGV2ZW50TGlzdGVuZXJTdXBwb3J0ID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcjtcblxu
RWxlbWVudC5OYXRpdmVFdmVudHMuZm9jdXNpbiA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3Vz
b3V0ID0gMjtcblxudmFyIGJ1YmJsZVVwID0gZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVu
dCwgdGFyZ2V0KXtcblx0d2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2VsZil7XG5cdFx0aWYg
KG1hdGNoKHRhcmdldCwgZXZlbnQpKSByZXR1cm4gZm4uY2FsbCh0YXJnZXQsIGV2ZW50LCB0YXJn
ZXQpO1xuXHRcdHRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldC5wYXJlbnROb2RlKTtcblx0fVxu
fTtcblxudmFyIG1hcCA9IHtcblx0bW91c2VlbnRlcjoge1xuXHRcdGJhc2U6ICdtb3VzZW92ZXIn
LFxuXHRcdGNvbmRpdGlvbjogRWxlbWVudC5Nb3VzZWVudGVyQ2hlY2tcblx0fSxcblx0bW91c2Vs
ZWF2ZToge1xuXHRcdGJhc2U6ICdtb3VzZW91dCcsXG5cdFx0Y29uZGl0aW9uOiBFbGVtZW50Lk1v
dXNlZW50ZXJDaGVja1xuXHR9LFxuXHRmb2N1czoge1xuXHRcdGJhc2U6ICdmb2N1cycgKyAoZXZl
bnRMaXN0ZW5lclN1cHBvcnQgPyAnJyA6ICdpbicpLFxuXHRcdGNhcHR1cmU6IHRydWVcblx0fSxc
blx0Ymx1cjoge1xuXHRcdGJhc2U6IGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJ2JsdXInIDogJ2Zv
Y3Vzb3V0Jyxcblx0XHRjYXB0dXJlOiB0cnVlXG5cdH1cbn07XG5cbi8qPGx0SUU5PiovXG52YXIg
X2tleSA9ICckZGVsZWdhdGlvbjonO1xudmFyIGZvcm1PYnNlcnZlciA9IGZ1bmN0aW9uKHR5cGUp
e1xuXG5cdHJldHVybiB7XG5cblx0XHRiYXNlOiAnZm9jdXNpbicsXG5cblx0XHRyZW1vdmU6IGZ1
bmN0aW9uKHNlbGYsIHVpZCl7XG5cdFx0XHR2YXIgbGlzdCA9IHNlbGYucmV0cmlldmUoX2tleSAr
IHR5cGUgKyAnbGlzdGVuZXJzJywge30pW3VpZF07XG5cdFx0XHRpZiAobGlzdCAmJiBsaXN0LmZv
cm1zKSBmb3IgKHZhciBpID0gbGlzdC5mb3Jtcy5sZW5ndGg7IGktLTspe1xuXHRcdFx0XHQvLyB0
aGUgZm9ybSBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgd29uJ3QgaGF2ZSB0aGVcblx0
XHRcdFx0Ly8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQgY2FzZSB0aGUgZXZl
bnQgd2FzXG5cdFx0XHRcdC8vIHJlbW92ZWQgYXMgd2VsbC5cblx0XHRcdFx0aWYgKGxpc3QuZm9y
bXNbaV0ucmVtb3ZlRXZlbnQpIGxpc3QuZm9ybXNbaV0ucmVtb3ZlRXZlbnQodHlwZSwgbGlzdC5m
bnNbaV0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1h
dGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKXtcblx0XHRcdHZhciBmb3JtID0gKHRhcmdldC5n
ZXQoJ3RhZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQuZ2V0UGFyZW50KCdm
b3JtJyk7XG5cdFx0XHRpZiAoIWZvcm0pIHJldHVybjtcblxuXHRcdFx0dmFyIGxpc3RlbmVycyA9
IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pLFxuXHRcdFx0XHRs
aXN0ZW5lciA9IGxpc3RlbmVyc1t1aWRdIHx8IHtmb3JtczogW10sIGZuczogW119LFxuXHRcdFx0
XHRmb3JtcyA9IGxpc3RlbmVyLmZvcm1zLCBmbnMgPSBsaXN0ZW5lci5mbnM7XG5cblx0XHRcdGlm
IChmb3Jtcy5pbmRleE9mKGZvcm0pICE9IC0xKSByZXR1cm47XG5cdFx0XHRmb3Jtcy5wdXNoKGZv
cm0pO1xuXG5cdFx0XHR2YXIgX2ZuID0gZnVuY3Rpb24oZXZlbnQpe1xuXHRcdFx0XHRidWJibGVV
cChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpO1xuXHRcdFx0fTtcblx0XHRcdGZvcm0u
YWRkRXZlbnQodHlwZSwgX2ZuKTtcblx0XHRcdGZucy5wdXNoKF9mbik7XG5cblx0XHRcdGxpc3Rl
bmVyc1t1aWRdID0gbGlzdGVuZXI7XG5cdFx0XHRzZWxmLnN0b3JlKF9rZXkgKyB0eXBlICsgJ2xp
c3RlbmVycycsIGxpc3RlbmVycyk7XG5cdFx0fVxuXHR9O1xufTtcblxudmFyIGlucHV0T2JzZXJ2
ZXIgPSBmdW5jdGlvbih0eXBlKXtcblx0cmV0dXJuIHtcblx0XHRiYXNlOiAnZm9jdXNpbicsXG5c
dFx0bGlzdGVuOiBmdW5jdGlvbihzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpe1xuXHRc
dFx0dmFyIGV2ZW50cyA9IHtibHVyOiBmdW5jdGlvbigpe1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2
ZW50cyhldmVudHMpO1xuXHRcdFx0fX07XG5cdFx0XHRldmVudHNbdHlwZV0gPSBmdW5jdGlvbihl
dmVudCl7XG5cdFx0XHRcdGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCk7
XG5cdFx0XHR9O1xuXHRcdFx0ZXZlbnQudGFyZ2V0LmFkZEV2ZW50cyhldmVudHMpO1xuXHRcdH1c
blx0fTtcbn07XG5cbmlmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVjdC5hcHBlbmQobWFw
LCB7XG5cdHN1Ym1pdDogZm9ybU9ic2VydmVyKCdzdWJtaXQnKSxcblx0cmVzZXQ6IGZvcm1PYnNl
cnZlcigncmVzZXQnKSxcblx0Y2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFuZ2UnKSxcblx0c2Vs
ZWN0OiBpbnB1dE9ic2VydmVyKCdzZWxlY3QnKVxufSk7XG4vKjwvbHRJRTk+Ki9cblxudmFyIHBy
b3RvID0gRWxlbWVudC5wcm90b3R5cGUsXG5cdGFkZEV2ZW50ID0gcHJvdG8uYWRkRXZlbnQsXG5c
dHJlbW92ZUV2ZW50ID0gcHJvdG8ucmVtb3ZlRXZlbnQ7XG5cbnZhciByZWxheSA9IGZ1bmN0aW9u
KG9sZCwgbWV0aG9kKXtcblx0cmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGZuLCB1c2VDYXB0dXJlKXtc
blx0XHRpZiAodHlwZS5pbmRleE9mKCc6cmVsYXknKSA9PSAtMSkgcmV0dXJuIG9sZC5jYWxsKHRo
aXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTtcblx0XHR2YXIgcGFyc2VkID0gU2xpY2sucGFyc2Uo
dHlwZSkuZXhwcmVzc2lvbnNbMF1bMF07XG5cdFx0aWYgKHBhcnNlZC5wc2V1ZG9zWzBdLmtleSAh
PSAncmVsYXknKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpO1xu
XHRcdHZhciBuZXdUeXBlID0gcGFyc2VkLnRhZztcblx0XHRwYXJzZWQucHNldWRvcy5zbGljZSgx
KS5lYWNoKGZ1bmN0aW9uKHBzZXVkbyl7XG5cdFx0XHRuZXdUeXBlICs9ICc6JyArIHBzZXVkby5r
ZXkgKyAocHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJyknIDogJycpO1xuXHRc
dH0pO1xuXHRcdG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuKTtcblx0XHRyZXR1cm4gbWV0aG9kLmNh
bGwodGhpcywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZuKTtcblx0fTtcbn07
XG5cbnZhciBkZWxlZ2F0aW9uID0ge1xuXG5cdGFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRj
aCwgZm4pe1xuXHRcdHZhciBzdG9yYWdlID0gdGhpcy5yZXRyaWV2ZSgnJGRlbGVnYXRlcycsIHt9
KSwgc3RvcmVkID0gc3RvcmFnZVt0eXBlXTtcblx0XHRpZiAoc3RvcmVkKSBmb3IgKHZhciBfdWlk
IGluIHN0b3JlZCl7XG5cdFx0XHRpZiAoc3RvcmVkW191aWRdLmZuID09IGZuICYmIHN0b3JlZFtf
dWlkXS5tYXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dmFyIF90eXBl
ID0gdHlwZSwgX21hdGNoID0gbWF0Y2gsIF9mbiA9IGZuLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9
O1xuXHRcdHR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cblx0XHRtYXRjaCA9IGZ1bmN0aW9u
KHRhcmdldCl7XG5cdFx0XHRyZXR1cm4gU2xpY2subWF0Y2godGFyZ2V0LCBfbWF0Y2gpO1xuXHRc
dH07XG5cblx0XHR2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNbX3R5cGVdO1xuXHRc
dGlmIChfbWFwLmNvbmRpdGlvbiB8fCBlbGVtZW50RXZlbnQgJiYgZWxlbWVudEV2ZW50LmNvbmRp
dGlvbil7XG5cdFx0XHR2YXIgX19tYXRjaCA9IG1hdGNoLCBjb25kaXRpb24gPSBfbWFwLmNvbmRp
dGlvbiB8fCBlbGVtZW50RXZlbnQuY29uZGl0aW9uO1xuXHRcdFx0bWF0Y2ggPSBmdW5jdGlvbih0
YXJnZXQsIGV2ZW50KXtcblx0XHRcdFx0cmV0dXJuIF9fbWF0Y2godGFyZ2V0LCBldmVudCkgJiYg
Y29uZGl0aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7XG5cdFx0XHR9O1xuXHRcdH1cblxu
XHRcdHZhciBzZWxmID0gdGhpcywgdWlkID0gU3RyaW5nLnVuaXF1ZUlEKCk7XG5cdFx0dmFyIGRl
bGVnYXRvciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRp
ZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdl
dDtcblx0XHRcdGlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQs
IHRhcmdldCwgdWlkKTtcblx0XHR9IDogZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7XG5cdFx0XHRp
ZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdl
dDtcblx0XHRcdGlmICh0YXJnZXQpIGJ1YmJsZVVwKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRh
cmdldCk7XG5cdFx0fTtcblxuXHRcdGlmICghc3RvcmVkKSBzdG9yZWQgPSB7fTtcblx0XHRzdG9y
ZWRbdWlkXSA9IHtcblx0XHRcdG1hdGNoOiBfbWF0Y2gsXG5cdFx0XHRmbjogX2ZuLFxuXHRcdFx0
ZGVsZWdhdG9yOiBkZWxlZ2F0b3Jcblx0XHR9O1xuXHRcdHN0b3JhZ2VbX3R5cGVdID0gc3RvcmVk
O1xuXHRcdHJldHVybiBhZGRFdmVudC5jYWxsKHRoaXMsIHR5cGUsIGRlbGVnYXRvciwgX21hcC5j
YXB0dXJlKTtcblx0fSxcblxuXHRyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZu
LCBfdWlkKXtcblx0XHR2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7
fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07XG5cdFx0aWYgKCFzdG9yZWQpIHJldHVybiB0aGlz
O1xuXG5cdFx0aWYgKF91aWQpe1xuXHRcdFx0dmFyIF90eXBlID0gdHlwZSwgZGVsZWdhdG9yID0g
c3RvcmVkW191aWRdLmRlbGVnYXRvciwgX21hcCA9IG1hcFt0eXBlXSB8fCB7fTtcblx0XHRcdHR5
cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7XG5cdFx0XHRpZiAoX21hcC5yZW1vdmUpIF9tYXAucmVt
b3ZlKHRoaXMsIF91aWQpO1xuXHRcdFx0ZGVsZXRlIHN0b3JlZFtfdWlkXTtcblx0XHRcdHN0b3Jh
Z2VbX3R5cGVdID0gc3RvcmVkO1xuXHRcdFx0cmV0dXJuIHJlbW92ZUV2ZW50LmNhbGwodGhpcywg
dHlwZSwgZGVsZWdhdG9yLCBfbWFwLmNhcHR1cmUpO1xuXHRcdH1cblxuXHRcdHZhciBfX3VpZCwg
cztcblx0XHRpZiAoZm4pIGZvciAoX191aWQgaW4gc3RvcmVkKXtcblx0XHRcdHMgPSBzdG9yZWRb
X191aWRdO1xuXHRcdFx0aWYgKHMubWF0Y2ggPT0gbWF0Y2ggJiYgcy5mbiA9PSBmbikgcmV0dXJu
IGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBtYXRjaCwgZm4sIF9fdWlk
KTtcblx0XHR9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpe1xuXHRcdFx0cyA9IHN0b3JlZFtf
X3VpZF07XG5cdFx0XHRpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlvbi5yZW1vdmVFdmVu
dC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9XG5cbn07XG5cbltFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2Uo
J2ltcGxlbWVudCcsIHtcblx0YWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBkZWxlZ2F0aW9uLmFk
ZEV2ZW50KSxcblx0cmVtb3ZlRXZlbnQ6IHJlbGF5KHJlbW92ZUV2ZW50LCBkZWxlZ2F0aW9uLnJl
bW92ZUV2ZW50KVxufSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5TdHls
ZVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0
aGUgc3R5bGVzIG9mIEVsZW1lbnRzIGluIGEgZmFzaGlvbmFibGUgd2F5LlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IEVsZW1lbnRcblxucHJvdmlkZXM6IEVsZW1l
bnQuU3R5bGVcblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGh0bWwgPSBkb2N1bWVu
dC5odG1sLCBlbDtcblxuLy88bHRJRTk+XG4vLyBDaGVjayBmb3Igb2xkSUUsIHdoaWNoIGRvZXMg
bm90IHJlbW92ZSBzdHlsZXMgd2hlbiB0aGV5J3JlIHNldCB0byBudWxsXG5lbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuZWwuc3R5bGUuY29sb3IgPSAncmVkJztcbmVsLnN0eWxl
LmNvbG9yID0gbnVsbDtcbnZhciBkb2VzTm90UmVtb3ZlU3R5bGVzID0gZWwuc3R5bGUuY29sb3Ig
PT0gJ3JlZCc7XG5cbi8vIGNoZWNrIGZvciBvbGRJRSwgd2hpY2ggcmV0dXJucyBib3JkZXIqIHNo
b3J0aGFuZCBzdHlsZXMgaW4gdGhlIHdyb25nIG9yZGVyIChjb2xvci13aWR0aC1zdHlsZSBpbnN0
ZWFkIG9mIHdpZHRoLXN0eWxlLWNvbG9yKVxudmFyIGJvcmRlciA9ICcxcHggc29saWQgIzEyM2Fi
Yyc7XG5lbC5zdHlsZS5ib3JkZXIgPSBib3JkZXI7XG52YXIgcmV0dXJuc0JvcmRlcnNJbldyb25n
T3JkZXIgPSBlbC5zdHlsZS5ib3JkZXIgIT0gYm9yZGVyO1xuZWwgPSBudWxsO1xuLy88L2x0SUU5
PlxuXG52YXIgaGFzR2V0Q29tcHV0ZWRTdHlsZSA9ICEhd2luZG93LmdldENvbXB1dGVkU3R5bGUs
XG5cdHN1cHBvcnRCb3JkZXJSYWRpdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5z
dHlsZS5ib3JkZXJSYWRpdXMgIT0gbnVsbDtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlcyA9
IHtzZXQ6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdHRoaXMuc2V0U3R5bGVzKHN0eWxlcyk7XG59fTtc
blxudmFyIGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51bGwpLFxuXHRoYXNG
aWx0ZXIgPSAoaHRtbC5zdHlsZS5maWx0ZXIgIT0gbnVsbCksXG5cdHJlQWxwaGEgPSAvYWxwaGFc
XChvcGFjaXR5PShbXFxkLl0rKVxcKS9pO1xuXG52YXIgc2V0VmlzaWJpbGl0eSA9IGZ1bmN0aW9u
KGVsZW1lbnQsIG9wYWNpdHkpe1xuXHRlbGVtZW50LnN0b3JlKCckb3BhY2l0eScsIG9wYWNpdHkp
O1xuXHRlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBvcGFjaXR5ID4gMCB8fCBvcGFjaXR5ID09
IG51bGwgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn07XG5cbi8vPGx0SUU5PlxudmFyIHNldEZp
bHRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHJlZ2V4cCwgdmFsdWUpe1xuXHR2YXIgc3R5bGUgPSBl
bGVtZW50LnN0eWxlLFxuXHRcdGZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENv
bXB1dGVkU3R5bGUoJ2ZpbHRlcicpIHx8ICcnO1xuXHRzdHlsZS5maWx0ZXIgPSAocmVnZXhwLnRl
c3QoZmlsdGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpIDogZmlsdGVyICsgJyAn
ICsgdmFsdWUpLnRyaW0oKTtcblx0aWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxlLnJlbW92ZUF0dHJp
YnV0ZSgnZmlsdGVyJyk7XG59O1xuLy88L2x0SUU5PlxuXG52YXIgc2V0T3BhY2l0eSA9IChoYXNP
cGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7XG5cdGVsZW1lbnQuc3R5bGUub3Bh
Y2l0eSA9IG9wYWNpdHk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1lbnQsIG9wYWNp
dHkpe1xuXHRpZiAoIWVsZW1lbnQuY3VycmVudFN0eWxlIHx8ICFlbGVtZW50LmN1cnJlbnRTdHls
ZS5oYXNMYXlvdXQpIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XG5cdGlmIChvcGFjaXR5ID09IG51
bGwgfHwgb3BhY2l0eSA9PSAxKXtcblx0XHRzZXRGaWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJycp
O1xuXHRcdGlmIChvcGFjaXR5ID09IDEgJiYgZ2V0T3BhY2l0eShlbGVtZW50KSAhPSAxKSBzZXRG
aWx0ZXIoZWxlbWVudCwgcmVBbHBoYSwgJ2FscGhhKG9wYWNpdHk9MTAwKScpO1xuXHR9IGVsc2Ug
e1xuXHRcdHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0nICsgKG9w
YWNpdHkgKiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKSArICcpJyk7XG5cdH1cbn0gOiBzZXRW
aXNpYmlsaXR5KSk7XG5cbnZhciBnZXRPcGFjaXR5ID0gKGhhc09wYWNpdHkgPyBmdW5jdGlvbihl
bGVtZW50KXtcblx0dmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNpdHkgfHwgZWxlbWVu
dC5nZXRDb21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7XG5cdHJldHVybiAob3BhY2l0eSA9PSAnJykg
PyAxIDogb3BhY2l0eS50b0Zsb2F0KCk7XG59IDogKGhhc0ZpbHRlciA/IGZ1bmN0aW9uKGVsZW1l
bnQpe1xuXHR2YXIgZmlsdGVyID0gKGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0
Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykpLFxuXHRcdG9wYWNpdHk7XG5cdGlmIChmaWx0ZXIpIG9w
YWNpdHkgPSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7XG5cdHJldHVybiAob3BhY2l0eSA9PSBudWxs
IHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7XG59IDogZnVuY3Rp
b24oZWxlbWVudCl7XG5cdHZhciBvcGFjaXR5ID0gZWxlbWVudC5yZXRyaWV2ZSgnJG9wYWNpdHkn
KTtcblx0aWYgKG9wYWNpdHkgPT0gbnVsbCkgb3BhY2l0eSA9IChlbGVtZW50LnN0eWxlLnZpc2li
aWxpdHkgPT0gJ2hpZGRlbicgPyAwIDogMSk7XG5cdHJldHVybiBvcGFjaXR5O1xufSkpO1xuXG52
YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkgPyAnc3R5bGVGbG9h
dCcgOiAnY3NzRmxvYXQnLFxuXHRuYW1lZFBvc2l0aW9ucyA9IHtsZWZ0OiAnMCUnLCB0b3A6ICcw
JScsIGNlbnRlcjogJzUwJScsIHJpZ2h0OiAnMTAwJScsIGJvdHRvbTogJzEwMCUnfSxcblx0aGFz
QmFja2dyb3VuZFBvc2l0aW9uWFkgPSAoaHRtbC5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb25YICE9
IG51bGwpLFxuXHRwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vO1xuXG52YXIgY2FtZWxDYXNlID0g
ZnVuY3Rpb24ocHJvcGVydHkpe1xuXHRyZXR1cm4gcHJvcGVydHkucmVwbGFjZShwcmVmaXhQYXR0
ZXJuLCAnJDEtJykuY2FtZWxDYXNlKCk7XG59O1xuXG4vLzxsdElFOT5cbnZhciByZW1vdmVTdHls
ZSA9IGZ1bmN0aW9uKHN0eWxlLCBwcm9wZXJ0eSl7XG5cdGlmIChwcm9wZXJ0eSA9PSAnYmFja2dy
b3VuZFBvc2l0aW9uJyl7XG5cdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5ICsgJ1gn
KTtcblx0XHRwcm9wZXJ0eSArPSAnWSc7XG5cdH1cblx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKHBy
b3BlcnR5KTtcbn07XG4vLzwvbHRJRTk+XG5cbkVsZW1lbnQuaW1wbGVtZW50KHtcblxuXHRnZXRD
b21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRl
ZFN0eWxlICYmIHRoaXMuY3VycmVudFN0eWxlKSByZXR1cm4gdGhpcy5jdXJyZW50U3R5bGVbY2Ft
ZWxDYXNlKHByb3BlcnR5KV07XG5cdFx0dmFyIGRlZmF1bHRWaWV3ID0gRWxlbWVudC5nZXREb2N1
bWVudCh0aGlzKS5kZWZhdWx0Vmlldyxcblx0XHRcdGNvbXB1dGVkID0gZGVmYXVsdFZpZXcgPyBk
ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVsbDtcblx0XHRyZXR1
cm4gKGNvbXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHByb3BlcnR5ID09IGZs
b2F0TmFtZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDogJyc7XG5cdH0sXG5c
blx0c2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7XG5cdFx0aWYgKHByb3BlcnR5
ID09ICdvcGFjaXR5Jyl7XG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUgPSBwYXJzZUZs
b2F0KHZhbHVlKTtcblx0XHRcdHNldE9wYWNpdHkodGhpcywgdmFsdWUpO1xuXHRcdFx0cmV0dXJu
IHRoaXM7XG5cdFx0fVxuXHRcdHByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9h
dCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7XG5cdFx0aWYgKHR5cGVPZih2YWx1ZSkgIT0gJ3N0
cmluZycpe1xuXHRcdFx0dmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9wZXJ0eV0gfHwgJ0An
KS5zcGxpdCgnICcpO1xuXHRcdFx0dmFsdWUgPSBBcnJheS5jb252ZXJ0KHZhbHVlKS5tYXAoZnVu
Y3Rpb24odmFsLCBpKXtcblx0XHRcdFx0aWYgKCFtYXBbaV0pIHJldHVybiAnJztcblx0XHRcdFx0
cmV0dXJuICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVwbGFjZSgnQCcsIE1h
dGgucm91bmQodmFsKSkgOiB2YWw7XG5cdFx0XHR9KS5qb2luKCcgJyk7XG5cdFx0fSBlbHNlIGlm
ICh2YWx1ZSA9PSBTdHJpbmcoTnVtYmVyKHZhbHVlKSkpe1xuXHRcdFx0dmFsdWUgPSBNYXRoLnJv
dW5kKHZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcblx0
XHQvLzxsdElFOT5cblx0XHRpZiAoKHZhbHVlID09ICcnIHx8IHZhbHVlID09IG51bGwpICYmIGRv
ZXNOb3RSZW1vdmVTdHlsZXMgJiYgdGhpcy5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUpe1xuXHRcdFx0
cmVtb3ZlU3R5bGUodGhpcy5zdHlsZSwgcHJvcGVydHkpO1xuXHRcdH1cblx0XHQvLzwvbHRJRTk+
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5
KXtcblx0XHRpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSByZXR1cm4gZ2V0T3BhY2l0eSh0aGlz
KTtcblx0XHRwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXRO
YW1lIDogcHJvcGVydHkpO1xuXHRcdGlmIChzdXBwb3J0Qm9yZGVyUmFkaXVzICYmIHByb3BlcnR5
LmluZGV4T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXtcblx0XHRcdHJldHVybiBbJ2JvcmRlclRv
cExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRS
YWRpdXMnLCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlvbihjb3JuZXIpe1xu
XHRcdFx0XHRyZXR1cm4gdGhpcy5zdHlsZVtjb3JuZXJdIHx8ICcwcHgnO1xuXHRcdFx0fSwgdGhp
cykuam9pbignICcpO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0gdGhpcy5zdHlsZVtwcm9wZXJ0
eV07XG5cdFx0aWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcpe1xuXHRcdFx0aWYg
KEVsZW1lbnQuU2hvcnRTdHlsZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKXtcblx0XHRcdFx0
cmVzdWx0ID0gW107XG5cdFx0XHRcdGZvciAodmFyIHMgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tw
cm9wZXJ0eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpO1xuXHRcdFx0XHRyZXR1cm4g
cmVzdWx0LmpvaW4oJyAnKTtcblx0XHRcdH1cblx0XHRcdHJlc3VsdCA9IHRoaXMuZ2V0Q29tcHV0
ZWRTdHlsZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHRcdGlmIChoYXNCYWNrZ3JvdW5kUG9zaXRpb25Y
WSAmJiAvXmJhY2tncm91bmRQb3NpdGlvbltYWV0/JC8udGVzdChwcm9wZXJ0eSkpe1xuXHRcdFx0
cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC8odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KS9nLCBmdW5jdGlv
bihwb3NpdGlvbil7XG5cdFx0XHRcdHJldHVybiBuYW1lZFBvc2l0aW9uc1twb3NpdGlvbl07XG5c
dFx0XHR9KSB8fCAnMHB4Jztcblx0XHR9XG5cdFx0aWYgKCFyZXN1bHQgJiYgcHJvcGVydHkgPT0g
J2JhY2tncm91bmRQb3NpdGlvbicpIHJldHVybiAnMHB4IDBweCc7XG5cdFx0aWYgKHJlc3VsdCl7
XG5cdFx0XHRyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTtcblx0XHRcdHZhciBjb2xvciA9IHJlc3Vs
dC5tYXRjaCgvcmdiYT9cXChbXFxkXFxzLF0rXFwpLyk7XG5cdFx0XHRpZiAoY29sb3IpIHJlc3Vs
dCA9IHJlc3VsdC5yZXBsYWNlKGNvbG9yWzBdLCBjb2xvclswXS5yZ2JUb0hleCgpKTtcblx0XHR9
XG5cdFx0aWYgKCFoYXNHZXRDb21wdXRlZFN0eWxlICYmICF0aGlzLnN0eWxlW3Byb3BlcnR5XSl7
XG5cdFx0XHRpZiAoKC9eKGhlaWdodHx3aWR0aCkkLykudGVzdChwcm9wZXJ0eSkgJiYgISgvcHgk
Ly50ZXN0KHJlc3VsdCkpKXtcblx0XHRcdFx0dmFyIHZhbHVlcyA9IChwcm9wZXJ0eSA9PSAnd2lk
dGgnKSA/IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10sIHNpemUgPSAwO1xu
XHRcdFx0XHR2YWx1ZXMuZWFjaChmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRcdFx0c2l6ZSArPSB0
aGlzLmdldFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRvSW50KCkgKyB0aGlz
LmdldFN0eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTtcblx0XHRcdFx0fSwgdGhpcyk7
XG5cdFx0XHRcdHJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2FwaXRhbGl6ZSgpXSAt
IHNpemUgKyAncHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCgvXmJvcmRlciguKylXaWR0aHxtYXJn
aW58cGFkZGluZy8pLnRlc3QocHJvcGVydHkpICYmIGlzTmFOKHBhcnNlRmxvYXQocmVzdWx0KSkp
e1xuXHRcdFx0XHRyZXR1cm4gJzBweCc7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vPGx0SUU5Plxu
XHRcdGlmIChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRlcihUb3B8UmlnaHR8
Qm90dG9tfExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChyZXN1bHQpKXtcblx0
XHRcdHJldHVybiByZXN1bHQucmVwbGFjZSgvXiguKylcXHMoLispXFxzKC4rKSQvLCAnJDIgJDMg
JDEnKTtcblx0XHR9XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxc
blxuXHRzZXRTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcyl7XG5cdFx0Zm9yICh2YXIgc3R5bGUgaW4g
c3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTtcblx0XHRyZXR1cm4g
dGhpcztcblx0fSxcblxuXHRnZXRTdHlsZXM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHJlc3VsdCA9
IHt9O1xuXHRcdEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGtleSl7XG5c
dFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZ2V0U3R5bGUoa2V5KTtcblx0XHR9LCB0aGlzKTtcblx0
XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn0pO1xuXG5FbGVtZW50LlN0eWxlcyA9IHtcblx0bGVm
dDogJ0BweCcsIHRvcDogJ0BweCcsIGJvdHRvbTogJ0BweCcsIHJpZ2h0OiAnQHB4Jyxcblx0d2lk
dGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1heEhlaWdodDogJ0Bw
eCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4Jyxcblx0YmFja2dyb3VuZENvbG9y
OiAncmdiKEAsIEAsIEApJywgYmFja2dyb3VuZFNpemU6ICdAcHgnLCBiYWNrZ3JvdW5kUG9zaXRp
b246ICdAcHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLFxuXHRmb250U2l6ZTogJ0BweCcs
IGxldHRlclNwYWNpbmc6ICdAcHgnLCBsaW5lSGVpZ2h0OiAnQHB4JywgY2xpcDogJ3JlY3QoQHB4
IEBweCBAcHggQHB4KScsXG5cdG1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcsIHBhZGRpbmc6ICdA
cHggQHB4IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAs
IEAsIEApIEBweCBAIHJnYihALCBALCBAKScsXG5cdGJvcmRlcldpZHRoOiAnQHB4IEBweCBAcHgg
QHB4JywgYm9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdyZ2IoQCwgQCwgQCkg
cmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLFxuXHR6SW5kZXg6ICdAJywg
J3pvb20nOiAnQCcsIGZvbnRXZWlnaHQ6ICdAJywgdGV4dEluZGVudDogJ0BweCcsIG9wYWNpdHk6
ICdAJywgYm9yZGVyUmFkaXVzOiAnQHB4IEBweCBAcHggQHB4J1xufTtcblxuXG5cblxuXG5FbGVt
ZW50LlNob3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBib3JkZXI6IHt9LCBi
b3JkZXJXaWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6IHt9fTtcblxuWydU
b3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9uKGRpcmVjdGlvbil7
XG5cdHZhciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7XG5cdHZhciBBbGwgPSBFbGVtZW50
LlN0eWxlcztcblx0WydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rpb24oc3R5bGUpe1xu
XHRcdHZhciBzZCA9IHN0eWxlICsgZGlyZWN0aW9uO1xuXHRcdFNob3J0W3N0eWxlXVtzZF0gPSBB
bGxbc2RdID0gJ0BweCc7XG5cdH0pO1xuXHR2YXIgYmQgPSAnYm9yZGVyJyArIGRpcmVjdGlvbjtc
blx0U2hvcnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAsIEAsIEApJztcblx0
dmFyIGJkdyA9IGJkICsgJ1dpZHRoJywgYmRzID0gYmQgKyAnU3R5bGUnLCBiZGMgPSBiZCArICdD
b2xvcic7XG5cdFNob3J0W2JkXSA9IHt9O1xuXHRTaG9ydC5ib3JkZXJXaWR0aFtiZHddID0gU2hv
cnRbYmRdW2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnO1xuXHRTaG9ydC5ib3JkZXJTdHlsZVtiZHNd
ID0gU2hvcnRbYmRdW2Jkc10gPSBBbGxbYmRzXSA9ICdAJztcblx0U2hvcnQuYm9yZGVyQ29sb3Jb
YmRjXSA9IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAsIEApJztcbn0pO1xu
XG5pZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkpIEVsZW1lbnQuU2hvcnRTdHlsZXMuYmFja2dy
b3VuZFBvc2l0aW9uID0ge2JhY2tncm91bmRQb3NpdGlvblg6ICdAJywgYmFja2dyb3VuZFBvc2l0
aW9uWTogJ0AnfTtcbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogRWxlbWVudC5EaW1lbnNpb25z
XG5cbmRlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0aCBzaXplLCBzY3Jv
bGwsIG9yIHBvc2l0aW9uaW5nIG9mIEVsZW1lbnRzIGFuZCB0aGUgd2luZG93IG9iamVjdC5cblxu
bGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbmNyZWRpdHM6XG4gIC0gRWxlbWVudCBwb3Np
dGlvbmluZyBiYXNlZCBvbiB0aGUgW3Fvb3hkb29dKGh0dHA6Ly9xb294ZG9vLm9yZy8pIGNvZGUg
YW5kIHNtYXJ0IGJyb3dzZXIgZml4ZXMsIFtMR1BMIExpY2Vuc2VdKGh0dHA6Ly93d3cuZ251Lm9y
Zy9saWNlbnNlcy9sZ3BsLmh0bWwpLlxuICAtIFZpZXdwb3J0IGRpbWVuc2lvbnMgYmFzZWQgb24g
W1lVSV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpLykgY29kZSwgW0JTRCBMaWNlbnNl
XShodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1sKS5cblxucmVxdWly
ZXM6IFtFbGVtZW50LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogW0VsZW1lbnQuRGltZW5z
aW9uc11cblxuLi4uXG4qL1xuXG4oZnVuY3Rpb24oKXtcblxudmFyIGVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcblx0Y2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTtcbmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuZWxlbWVudC5hcHBlbmRDaGls
ZChjaGlsZCk7XG52YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9mZnNldFBhcmVudCA9
PT0gZWxlbWVudCk7XG5lbGVtZW50ID0gY2hpbGQgPSBudWxsO1xuXG52YXIgaGVpZ2h0Q29tcG9u
ZW50cyA9IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbScsICdib3JkZXJU
b3BXaWR0aCcsICdib3JkZXJCb3R0b21XaWR0aCddLFxuXHR3aWR0aENvbXBvbmVudHMgPSBbJ3dp
ZHRoJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdib3JkZXJMZWZ0V2lkdGgnLCAn
Ym9yZGVyUmlnaHRXaWR0aCddO1xuXG52YXIgc3ZnQ2FsY3VsYXRlU2l6ZSA9IGZ1bmN0aW9uKGVs
KXtcblxuXHR2YXIgZ0NTID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLFxuXHRcdGJvdW5k
cyA9IHt4OiAwLCB5OiAwfTtcblxuXHRoZWlnaHRDb21wb25lbnRzLmVhY2goZnVuY3Rpb24oY3Nz
KXtcblx0XHRib3VuZHMueSArPSBwYXJzZUZsb2F0KGdDU1tjc3NdKTtcblx0fSk7XG5cdHdpZHRo
Q29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7XG5cdFx0Ym91bmRzLnggKz0gcGFyc2VGbG9h
dChnQ1NbY3NzXSk7XG5cdH0pO1xuXHRyZXR1cm4gYm91bmRzO1xufTtcblxudmFyIGlzT2Zmc2V0
ID0gZnVuY3Rpb24oZWwpe1xuXHRyZXR1cm4gc3R5bGVTdHJpbmcoZWwsICdwb3NpdGlvbicpICE9
ICdzdGF0aWMnIHx8IGlzQm9keShlbCk7XG59O1xuXG52YXIgaXNPZmZzZXRTdGF0aWMgPSBmdW5j
dGlvbihlbCl7XG5cdHJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFibGV8dGR8dGgpJC9p
KS50ZXN0KGVsLnRhZ05hbWUpO1xufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdHNjcm9s
bFRvOiBmdW5jdGlvbih4LCB5KXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKXtcblx0XHRcdHRoaXMu
Z2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2Ny
b2xsTGVmdCA9IHg7XG5cdFx0XHR0aGlzLnNjcm9sbFRvcCA9IHk7XG5cdFx0fVxuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdGdldFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9keSh0
aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2l6ZSgpO1xuXG5cdFx0Ly88bHRJRTk+
XG5cdFx0Ly8gVGhpcyBpZiBjbGF1c2UgaXMgYmVjYXVzZSBJRTgtIGNhbm5vdCBjYWxjdWxhdGUg
Z2V0Qm91bmRpbmdDbGllbnRSZWN0IG9mIGVsZW1lbnRzIHdpdGggdmlzaWJpbGl0eSBoaWRkZW4u
XG5cdFx0aWYgKCF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkgcmV0dXJuIHt4OiB0aGlzLm9mZnNl
dFdpZHRoLCB5OiB0aGlzLm9mZnNldEhlaWdodH07XG5cdFx0Ly88L2x0SUU5PlxuXG5cdFx0Ly8g
VGhpcyBzdmcgc2VjdGlvbiB1bmRlciwgY2FsbGluZyBgc3ZnQ2FsY3VsYXRlU2l6ZSgpYCwgY2Fu
IGJlIHJlbW92ZWQgd2hlbiBGRiBmaXhlZCB0aGUgc3ZnIHNpemUgYnVnLlxuXHRcdC8vIEJ1ZyBp
bmZvOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MzA5ODVc
blx0XHRpZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3ZnQ2FsY3VsYXRlU2l6
ZSh0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYm91bmRzID0gdGhpcy5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKTtcblx0XHRcdHJldHVybiB7eDogYm91bmRzLndpZHRoLCB5OiBib3VuZHMu
aGVpZ2h0fTtcblx0XHR9IGNhdGNoIChlKXtcblx0XHRcdHJldHVybiB7eDogMCwgeTogMH07XG5c
dFx0fVxuXHR9LFxuXG5cdGdldFNjcm9sbFNpemU6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKGlzQm9k
eSh0aGlzKSkgcmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6ZSgpO1xuXHRcdHJl
dHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWlnaHR9O1xuXHR9LFxu
XG5cdGdldFNjcm9sbDogZnVuY3Rpb24oKXtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4g
dGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGwoKTtcblx0XHRyZXR1cm4ge3g6IHRoaXMuc2Nyb2xs
TGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9O1xuXHR9LFxuXG5cdGdldFNjcm9sbHM6IGZ1bmN0aW9u
KCl7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLnBhcmVudE5vZGUsIHBvc2l0aW9uID0ge3g6IDAs
IHk6IDB9O1xuXHRcdHdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpe1xuXHRcdFx0
cG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7XG5cdFx0XHRwb3NpdGlvbi55ICs9IGVs
ZW1lbnQuc2Nyb2xsVG9wO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0
XHR9XG5cdFx0cmV0dXJuIHBvc2l0aW9uO1xuXHR9LFxuXG5cdGdldE9mZnNldFBhcmVudDogYnJv
a2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5c
dFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50LCAncG9zaXRpb24n
KSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciBpc09mZnNldENoZWNrID0gKHN0
eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/IGlzT2Zmc2V0U3Rh
dGljIDogaXNPZmZzZXQ7XG5cdFx0d2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2Rl
KSl7XG5cdFx0XHRpZiAoaXNPZmZzZXRDaGVjayhlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5c
dFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9IDogZnVuY3Rpb24oKXtcblx0XHR2YXIgZWxlbWVu
dCA9IHRoaXM7XG5cdFx0aWYgKGlzQm9keShlbGVtZW50KSB8fCBzdHlsZVN0cmluZyhlbGVtZW50
LCAncG9zaXRpb24nKSA9PSAnZml4ZWQnKSByZXR1cm4gbnVsbDtcblxuXHRcdHRyeSB7XG5cdFx0
XHRyZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0fSBjYXRjaCAoZSl7fVxuXHRcdHJl
dHVybiBudWxsO1xuXHR9LFxuXG5cdGdldE9mZnNldHM6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIGhh
c0dldEJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0O1xuXG5c
dFx0aWYgKGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCl7XG5cdFx0XHR2YXIgYm91bmQgPSB0aGlz
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuXHRcdFx0XHRodG1sID0gZG9jdW1lbnQuaWQodGhp
cy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksXG5cdFx0XHRcdGh0bWxTY3JvbGwgPSBo
dG1sLmdldFNjcm9sbCgpLFxuXHRcdFx0XHRlbGVtU2Nyb2xscyA9IHRoaXMuZ2V0U2Nyb2xscygp
LFxuXHRcdFx0XHRpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3NpdGlvbicpID09ICdm
aXhlZCcpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBib3VuZC5sZWZ0LnRvRmxvYXQo
KSArIGVsZW1TY3JvbGxzLnggKyAoKGlzRml4ZWQpID8gMCA6IGh0bWxTY3JvbGwueCkgLSBodG1s
LmNsaWVudExlZnQsXG5cdFx0XHRcdHk6IGJvdW5kLnRvcC50b0Zsb2F0KCkgKyBlbGVtU2Nyb2xs
cy55ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5jbGllbnRUb3Bcblx0
XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLCBwb3NpdGlvbiA9IHt4OiAw
LCB5OiAwfTtcblx0XHRpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRpb247XG5cblx0XHR3
aGlsZSAoZWxlbWVudCAmJiAhaXNCb2R5KGVsZW1lbnQpKXtcblx0XHRcdHBvc2l0aW9uLnggKz0g
ZWxlbWVudC5vZmZzZXRMZWZ0O1xuXHRcdFx0cG9zaXRpb24ueSArPSBlbGVtZW50Lm9mZnNldFRv
cDtcblxuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXHRcdH1cblxuXHRc
dHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRnZXRQb3NpdGlvbjogZnVuY3Rpb24ocmVsYXRp
dmUpe1xuXHRcdHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSxcblx0XHRcdHNjcm9sbCA9
IHRoaXMuZ2V0U2Nyb2xscygpO1xuXHRcdHZhciBwb3NpdGlvbiA9IHtcblx0XHRcdHg6IG9mZnNl
dC54IC0gc2Nyb2xsLngsXG5cdFx0XHR5OiBvZmZzZXQueSAtIHNjcm9sbC55XG5cdFx0fTtcblxu
XHRcdGlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChyZWxhdGl2ZSkpKXtc
blx0XHRcdHZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9zaXRpb24oKTtcblx0
XHRcdHJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24ueCAtIGxlZnRCb3Jk
ZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlvbi55IC0gdG9wQm9y
ZGVyKHJlbGF0aXZlKX07XG5cdFx0fVxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fSxcblxuXHRn
ZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7XG5cdFx0aWYgKGlzQm9keSh0aGlzKSkg
cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0Q29vcmRpbmF0ZXMoKTtcblx0XHR2YXIgcG9zaXRp
b24gPSB0aGlzLmdldFBvc2l0aW9uKGVsZW1lbnQpLFxuXHRcdFx0c2l6ZSA9IHRoaXMuZ2V0U2l6
ZSgpO1xuXHRcdHZhciBvYmogPSB7XG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi54LFxuXHRcdFx0dG9w
OiBwb3NpdGlvbi55LFxuXHRcdFx0d2lkdGg6IHNpemUueCxcblx0XHRcdGhlaWdodDogc2l6ZS55
XG5cdFx0fTtcblx0XHRvYmoucmlnaHQgPSBvYmoubGVmdCArIG9iai53aWR0aDtcblx0XHRvYmou
Ym90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7XG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxu
XHRjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxl
ZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0JyksXG5cdFx0XHR0b3A6
IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKVxuXHRcdH07XG5cdH0sXG5c
blx0c2V0UG9zaXRpb246IGZ1bmN0aW9uKG9iail7XG5cdFx0cmV0dXJuIHRoaXMuc2V0U3R5bGVz
KHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpO1xuXHR9XG5cbn0pO1xuXG5cbltEb2N1bWVudCwg
V2luZG93XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRTaXplOiBmdW5jdGlvbigpe1xu
XHRcdHZhciBkb2MgPSBnZXRDb21wYXRFbGVtZW50KHRoaXMpO1xuXHRcdHJldHVybiB7eDogZG9j
LmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTtcblx0fSxcblxuXHRnZXRTY3JvbGw6
IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHdpbiA9IHRoaXMuZ2V0V2luZG93KCksIGRvYyA9IGdldENv
bXBhdEVsZW1lbnQodGhpcyk7XG5cdFx0cmV0dXJuIHt4OiB3aW4ucGFnZVhPZmZzZXQgfHwgZG9j
LnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wfTtcblx0fSxc
blxuXHRnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpe1xuXHRcdHZhciBkb2MgPSBnZXRDb21wYXRF
bGVtZW50KHRoaXMpLFxuXHRcdFx0bWluID0gdGhpcy5nZXRTaXplKCksXG5cdFx0XHRib2R5ID0g
dGhpcy5nZXREb2N1bWVudCgpLmJvZHk7XG5cblx0XHRyZXR1cm4ge3g6IE1hdGgubWF4KGRvYy5z
Y3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRoLm1heChkb2Muc2Ny
b2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTtcblx0fSxcblxuXHRnZXRQb3Np
dGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge3g6IDAsIHk6IDB9O1xuXHR9LFxuXG5cdGdl
dENvb3JkaW5hdGVzOiBmdW5jdGlvbigpe1xuXHRcdHZhciBzaXplID0gdGhpcy5nZXRTaXplKCk7
XG5cdFx0cmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogc2l6ZS55LCByaWdodDogc2l6
ZS54LCBoZWlnaHQ6IHNpemUueSwgd2lkdGg6IHNpemUueH07XG5cdH1cblxufSk7XG5cbi8vIHBy
aXZhdGUgbWV0aG9kc1xuXG52YXIgc3R5bGVTdHJpbmcgPSBFbGVtZW50LmdldENvbXB1dGVkU3R5
bGU7XG5cbmZ1bmN0aW9uIHN0eWxlTnVtYmVyKGVsZW1lbnQsIHN0eWxlKXtcblx0cmV0dXJuIHN0
eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7XG59XG5cblxuXG5mdW5jdGlv
biB0b3BCb3JkZXIoZWxlbWVudCl7XG5cdHJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9y
ZGVyLXRvcC13aWR0aCcpO1xufVxuXG5mdW5jdGlvbiBsZWZ0Qm9yZGVyKGVsZW1lbnQpe1xuXHRy
ZXR1cm4gc3R5bGVOdW1iZXIoZWxlbWVudCwgJ2JvcmRlci1sZWZ0LXdpZHRoJyk7XG59XG5cbmZ1
bmN0aW9uIGlzQm9keShlbGVtZW50KXtcblx0cmV0dXJuICgvXig/OmJvZHl8aHRtbCkkL2kpLnRl
c3QoZWxlbWVudC50YWdOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGF0RWxlbWVudChlbGVt
ZW50KXtcblx0dmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTtcblx0cmV0dXJuICghZG9j
LmNvbXBhdE1vZGUgfHwgZG9jLmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKSA/IGRvYy5odG1s
IDogZG9jLmJvZHk7XG59XG5cbn0pKCk7XG5cbi8vYWxpYXNlc1xuRWxlbWVudC5hbGlhcyh7cG9z
aXRpb246ICdzZXRQb3NpdGlvbid9KTsgLy9jb21wYXRhYmlsaXR5XG5cbltXaW5kb3csIERvY3Vt
ZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHtcblxuXHRnZXRIZWlnaHQ6IGZ1bmN0
aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7XG5cdH0sXG5cblx0Z2V0V2lkdGg6
IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7XG5cdH0sXG5cblx0Z2V0
U2Nyb2xsVG9wOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiB0aGlzLmdldFNjcm9sbCgpLnk7XG5c
dH0sXG5cblx0Z2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRT
Y3JvbGwoKS54O1xuXHR9LFxuXG5cdGdldFNjcm9sbEhlaWdodDogZnVuY3Rpb24oKXtcblx0XHRy
ZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTtcblx0fSxcblxuXHRnZXRTY3JvbGxXaWR0aDog
ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueDtcblx0fSxcblxu
XHRnZXRUb3A6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS55O1xu
XHR9LFxuXG5cdGdldExlZnQ6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UG9zaXRp
b24oKS54O1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4XG5cbmRlc2NyaXB0aW9u
OiBDb250YWlucyB0aGUgYmFzaWMgYW5pbWF0aW9uIGxvZ2ljIHRvIGJlIGV4dGVuZGVkIGJ5IGFs
bCBvdGhlciBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5cblxucmVx
dWlyZXM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV1cblxucHJvdmlk
ZXM6IEZ4XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBGeCA9IHRoaXMuRnggPSBu
ZXcgQ2xhc3Moe1xuXG5cdEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFz
cy5UaGVuYWJsZV0sXG5cblx0b3B0aW9uczoge1xuXHRcdC8qXG5cdFx0b25TdGFydDogbmlsLFxu
XHRcdG9uQ2FuY2VsOiBuaWwsXG5cdFx0b25Db21wbGV0ZTogbmlsLFxuXHRcdCovXG5cdFx0ZnBz
OiA2MCxcblx0XHR1bml0OiBmYWxzZSxcblx0XHRkdXJhdGlvbjogNTAwLFxuXHRcdGZyYW1lczog
bnVsbCxcblx0XHRmcmFtZVNraXA6IHRydWUsXG5cdFx0bGluazogJ2lnbm9yZSdcblx0fSxcblxu
XHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR0aGlzLnN1YmplY3QgPSB0aGlz
LnN1YmplY3QgfHwgdGhpcztcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdH0sXG5c
blx0Z2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gZnVuY3Rpb24ocCl7XG5c
dFx0XHRyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJICogcCkgLSAxKSAvIDI7XG5cdFx0fTtcblx0
fSxcblxuXHRzdGVwOiBmdW5jdGlvbihub3cpe1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuZnJhbWVT
a2lwKXtcblx0XHRcdHZhciBkaWZmID0gKHRoaXMudGltZSAhPSBudWxsKSA/IChub3cgLSB0aGlz
LnRpbWUpIDogMCwgZnJhbWVzID0gZGlmZiAvIHRoaXMuZnJhbWVJbnRlcnZhbDtcblx0XHRcdHRo
aXMudGltZSA9IG5vdztcblx0XHRcdHRoaXMuZnJhbWUgKz0gZnJhbWVzO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHR0aGlzLmZyYW1lKys7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZnJhbWUgPCB0aGlz
LmZyYW1lcyl7XG5cdFx0XHR2YXIgZGVsdGEgPSB0aGlzLnRyYW5zaXRpb24odGhpcy5mcmFtZSAv
IHRoaXMuZnJhbWVzKTtcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRo
aXMudG8sIGRlbHRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlzLmZy
YW1lcztcblx0XHRcdHRoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sIHRoaXMudG8sIDEp
KTtcblx0XHRcdHRoaXMuc3RvcCgpO1xuXHRcdH1cblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5v
dyl7XG5cdFx0cmV0dXJuIG5vdztcblx0fSxcblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0
bywgZGVsdGEpe1xuXHRcdHJldHVybiBGeC5jb21wdXRlKGZyb20sIHRvLCBkZWx0YSk7XG5cdH0s
XG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKCF0aGlzLmlzUnVubmluZygpKSByZXR1
cm4gdHJ1ZTtcblx0XHRzd2l0Y2ggKHRoaXMub3B0aW9ucy5saW5rKXtcblx0XHRcdGNhc2UgJ2Nh
bmNlbCc6IHRoaXMuY2FuY2VsKCk7IHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSAnY2hhaW4nOiB0
aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJndW1lbnRzLCB0aGlzKSk7IHJldHVybiBmYWxz
ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0OiBmdW5jdGlvbihm
cm9tLCB0byl7XG5cdFx0aWYgKCF0aGlzLmNoZWNrKGZyb20sIHRvKSkgcmV0dXJuIHRoaXM7XG5c
dFx0dGhpcy5mcm9tID0gZnJvbTtcblx0XHR0aGlzLnRvID0gdG87XG5cdFx0dGhpcy5mcmFtZSA9
ICh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKSA/IDAgOiAtMTtcblx0XHR0aGlzLnRpbWUgPSBudWxs
O1xuXHRcdHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbigpO1xuXHRcdHZhciBm
cmFtZXMgPSB0aGlzLm9wdGlvbnMuZnJhbWVzLCBmcHMgPSB0aGlzLm9wdGlvbnMuZnBzLCBkdXJh
dGlvbiA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbjtcblx0XHR0aGlzLmR1cmF0aW9uID0gRnguRHVy
YXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpO1xuXHRcdHRoaXMuZnJhbWVJbnRl
cnZhbCA9IDEwMDAgLyBmcHM7XG5cdFx0dGhpcy5mcmFtZXMgPSBmcmFtZXMgfHwgTWF0aC5yb3Vu
ZCh0aGlzLmR1cmF0aW9uIC8gdGhpcy5mcmFtZUludGVydmFsKTtcblx0XHRpZiAodGhpcy5nZXRU
aGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7XG5cdFx0XHR0aGlzLnJlc2V0VGhlbmFibGUo
dGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3N0YXJ0JywgdGhpcy5z
dWJqZWN0KTtcblx0XHRwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCl7XG5cdFx0aWYgKHRoaXMuaXNSdW5uaW5n
KCkpe1xuXHRcdFx0dGhpcy50aW1lID0gbnVsbDtcblx0XHRcdHB1bGxJbnN0YW5jZS5jYWxsKHRo
aXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdFx0aWYgKHRoaXMuZnJhbWVzID09IHRoaXMuZnJh
bWUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlzLnN1YmplY3QpO1xu
XHRcdFx0XHRpZiAoIXRoaXMuY2FsbENoYWluKCkpIHRoaXMuZmlyZUV2ZW50KCdjaGFpbkNvbXBs
ZXRlJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZmlyZUV2
ZW50KCdzdG9wJywgdGhpcy5zdWJqZWN0KTtcblx0XHRcdH1cblx0XHRcdHRoaXMucmVzb2x2ZSh0
aGlzLnN1YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTtcblx0XHR9XG5cdFx0
cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2FuY2VsOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFu
Y2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHRcdHRoaXMuZnJhbWUgPSB0aGlz
LmZyYW1lcztcblx0XHRcdHRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlzLnN1YmplY3QpLmNs
ZWFyQ2hhaW4oKTtcblx0XHRcdHRoaXMucmVqZWN0KHRoaXMuc3ViamVjdCk7XG5cdFx0fVxuXHRc
dHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBhdXNlOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlz
LmlzUnVubmluZygpKXtcblx0XHRcdHRoaXMudGltZSA9IG51bGw7XG5cdFx0XHRwdWxsSW5zdGFu
Y2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7
XG5cdH0sXG5cblx0cmVzdW1lOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0aGlzLmlzUGF1c2VkKCkp
IHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9LFxuXG5cdGlzUnVubmluZzogZnVuY3Rpb24oKXtcblx0XHR2YXIgbGlzdCA9IGlu
c3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTtcblx0XHRyZXR1cm4gbGlzdCAmJiBsaXN0LmNvbnRh
aW5zKHRoaXMpO1xuXHR9LFxuXG5cdGlzUGF1c2VkOiBmdW5jdGlvbigpe1xuXHRcdHJldHVybiAo
dGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmcoKTtcblx0fVxuXG59
KTtcblxuRnguY29tcHV0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7XG5cdHJldHVybiAo
dG8gLSBmcm9tKSAqIGRlbHRhICsgZnJvbTtcbn07XG5cbkZ4LkR1cmF0aW9ucyA9IHsnc2hvcnQn
OiAyNTAsICdub3JtYWwnOiA1MDAsICdsb25nJzogMTAwMH07XG5cbi8vIGdsb2JhbCB0aW1lcnNc
blxudmFyIGluc3RhbmNlcyA9IHt9LCB0aW1lcnMgPSB7fTtcblxudmFyIGxvb3AgPSBmdW5jdGlv
bigpe1xuXHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcblx0Zm9yICh2YXIgaSA9IHRoaXMubGVuZ3Ro
OyBpLS07KXtcblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzW2ldO1xuXHRcdGlmIChpbnN0YW5jZSkg
aW5zdGFuY2Uuc3RlcChub3cpO1xuXHR9XG59O1xuXG52YXIgcHVzaEluc3RhbmNlID0gZnVuY3Rp
b24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5jZXNbZnBzXSB8fCAoaW5zdGFuY2VzW2Zwc10g
PSBbXSk7XG5cdGxpc3QucHVzaCh0aGlzKTtcblx0aWYgKCF0aW1lcnNbZnBzXSkgdGltZXJzW2Zw
c10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwgbGlzdCk7XG59O1xu
XG52YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXtcblx0dmFyIGxpc3QgPSBpbnN0YW5j
ZXNbZnBzXTtcblx0aWYgKGxpc3Qpe1xuXHRcdGxpc3QuZXJhc2UodGhpcyk7XG5cdFx0aWYgKCFs
aXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7XG5cdFx0XHRkZWxldGUgaW5zdGFuY2VzW2Zwc107
XG5cdFx0XHR0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zwc10pO1xuXHRcdH1c
blx0fVxufTtcblxufSkoKTtcblxuLypcbi0tLVxuXG5uYW1lOiBGeC5DU1NcblxuZGVzY3JpcHRp
b246IENvbnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5IEZ4LlR3ZWVuLCBG
eC5Nb3JwaCwgRnguRWxlbWVudHMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5y
ZXF1aXJlczogW0Z4LCBFbGVtZW50LlN0eWxlXVxuXG5wcm92aWRlczogRnguQ1NTXG5cbi4uLlxu
Ki9cblxuRnguQ1NTID0gbmV3IENsYXNzKHtcblxuXHRFeHRlbmRzOiBGeCxcblxuXHQvL3ByZXBh
cmVzIHRoZSBiYXNlIGZyb20vdG8gb2JqZWN0XG5cblx0cHJlcGFyZTogZnVuY3Rpb24oZWxlbWVu
dCwgcHJvcGVydHksIHZhbHVlcyl7XG5cdFx0dmFsdWVzID0gQXJyYXkuY29udmVydCh2YWx1ZXMp
O1xuXHRcdHZhciBmcm9tID0gdmFsdWVzWzBdLCB0byA9IHZhbHVlc1sxXTtcblx0XHRpZiAodG8g
PT0gbnVsbCl7XG5cdFx0XHR0byA9IGZyb207XG5cdFx0XHRmcm9tID0gZWxlbWVudC5nZXRTdHls
ZShwcm9wZXJ0eSk7XG5cdFx0XHR2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51bml0O1xuXHRcdFx0
Ly8gYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIvZngvYmxvYi9tYXN0
ZXIvZnguanMjTDI5OVxuXHRcdFx0aWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBlb2YgZnJvbSA9PSAn
c3RyaW5nJyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAmJiBwYXJzZUZsb2F0
KGZyb20pICE9IDApe1xuXHRcdFx0XHRlbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCB0byArIHVu
aXQpO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUocHJvcGVy
dHkpO1xuXHRcdFx0XHQvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExlZnQgb3IgcGl4ZWxX
aWR0aFxuXHRcdFx0XHRpZiAoISgvcHgkLy50ZXN0KHZhbHVlKSkpe1xuXHRcdFx0XHRcdHZhbHVl
ID0gZWxlbWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxDYXNlKCldO1xuXHRc
dFx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKXtcblx0XHRcdFx0XHRcdC8vIGFkYXB0ZWQgZnJvbSBE
ZWFuIEVkd2FyZHMnIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41
NC4xNS8jY29tbWVudC0xMDIyOTFcblx0XHRcdFx0XHRcdHZhciBsZWZ0ID0gZWxlbWVudC5zdHls
ZS5sZWZ0O1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5sZWZ0ID0gdG8gKyB1bml0O1xuXHRc
dFx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnN0eWxlLnBpeGVsTGVmdDtcblx0XHRcdFx0XHRcdGVs
ZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRc
dGZyb20gPSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkgKiAocGFyc2VGbG9h
dChmcm9tKSB8fCAwKTtcblx0XHRcdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgZnJvbSAr
IHVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge2Zyb206IHRoaXMucGFyc2UoZnJv
bSksIHRvOiB0aGlzLnBhcnNlKHRvKX07XG5cdH0sXG5cblx0Ly9wYXJzZXMgYSB2YWx1ZSBpbnRv
IGFuIGFycmF5XG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHR2YWx1ZSA9IEZ1bmN0
aW9uLmNvbnZlcnQodmFsdWUpKCk7XG5cdFx0dmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdzdHJp
bmcnKSA/IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVlKTtcblx0XHRyZXR1
cm4gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7XG5cdFx0XHR2YWwgPSBTdHJpbmcodmFsKTtcblx0
XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0T2JqZWN0LmVhY2goRnguQ1NTLlBhcnNlcnMs
IGZ1bmN0aW9uKHBhcnNlcil7XG5cdFx0XHRcdGlmIChmb3VuZCkgcmV0dXJuO1xuXHRcdFx0XHR2
YXIgcGFyc2VkID0gcGFyc2VyLnBhcnNlKHZhbCk7XG5cdFx0XHRcdGlmIChwYXJzZWQgfHwgcGFy
c2VkID09PSAwKSBmb3VuZCA9IHt2YWx1ZTogcGFyc2VkLCBwYXJzZXI6IHBhcnNlcn07XG5cdFx0
XHR9KTtcblx0XHRcdGZvdW5kID0gZm91bmQgfHwge3ZhbHVlOiB2YWwsIHBhcnNlcjogRnguQ1NT
LlBhcnNlcnMuU3RyaW5nfTtcblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9KTtcblx0fSxcblxu
XHQvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0cywgdXNpbmcgdGhl
aXIgcGFyc2Vycy5cblxuXHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRc
dHZhciBjb21wdXRlZCA9IFtdO1xuXHRcdChNYXRoLm1pbihmcm9tLmxlbmd0aCwgdG8ubGVuZ3Ro
KSkudGltZXMoZnVuY3Rpb24oaSl7XG5cdFx0XHRjb21wdXRlZC5wdXNoKHt2YWx1ZTogZnJvbVtp
XS5wYXJzZXIuY29tcHV0ZShmcm9tW2ldLnZhbHVlLCB0b1tpXS52YWx1ZSwgZGVsdGEpLCBwYXJz
ZXI6IGZyb21baV0ucGFyc2VyfSk7XG5cdFx0fSk7XG5cdFx0Y29tcHV0ZWQuJGZhbWlseSA9IEZ1
bmN0aW9uLmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpO1xuXHRcdHJldHVybiBjb21wdXRlZDtcblx0
fSxcblxuXHQvL3NlcnZlcyB0aGUgdmFsdWUgYXMgc2V0dGFibGVcblxuXHRzZXJ2ZTogZnVuY3Rp
b24odmFsdWUsIHVuaXQpe1xuXHRcdGlmICh0eXBlT2YodmFsdWUpICE9ICdmeDpjc3M6dmFsdWUn
KSB2YWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpO1xuXHRcdHZhciByZXR1cm5lZCA9IFtdO1xuXHRc
dHZhbHVlLmVhY2goZnVuY3Rpb24oYml0KXtcblx0XHRcdHJldHVybmVkID0gcmV0dXJuZWQuY29u
Y2F0KGJpdC5wYXJzZXIuc2VydmUoYml0LnZhbHVlLCB1bml0KSk7XG5cdFx0fSk7XG5cdFx0cmV0
dXJuIHJldHVybmVkO1xuXHR9LFxuXG5cdC8vcmVuZGVycyB0aGUgY2hhbmdlIHRvIGFuIGVsZW1l
bnRcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCl7
XG5cdFx0ZWxlbWVudC5zZXRTdHlsZShwcm9wZXJ0eSwgdGhpcy5zZXJ2ZSh2YWx1ZSwgdW5pdCkp
O1xuXHR9LFxuXG5cdC8vc2VhcmNoZXMgaW5zaWRlIHRoZSBwYWdlIGNzcyB0byBmaW5kIHRoZSB2
YWx1ZXMgZm9yIGEgc2VsZWN0b3JcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKHNlbGVjdG9yKXtcblx0
XHRpZiAoRnguQ1NTLkNhY2hlW3NlbGVjdG9yXSkgcmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rv
cl07XG5cdFx0dmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdFeHAoJ14nICsgc2Vs
ZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpO1xuXG5cdFx0dmFyIHNlYXJjaFN0eWxlcyA9IGZ1
bmN0aW9uKHJ1bGVzKXtcblx0XHRcdEFycmF5LmVhY2gocnVsZXMsIGZ1bmN0aW9uKHJ1bGUpe1xu
XHRcdFx0XHRpZiAocnVsZS5tZWRpYSl7XG5cdFx0XHRcdFx0c2VhcmNoU3R5bGVzKHJ1bGUucnVs
ZXMgfHwgcnVsZS5jc3NSdWxlcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0
XHRcdGlmICghcnVsZS5zdHlsZSkgcmV0dXJuO1xuXHRcdFx0XHR2YXIgc2VsZWN0b3JUZXh0ID0g
KHJ1bGUuc2VsZWN0b3JUZXh0KSA/IHJ1bGUuc2VsZWN0b3JUZXh0LnJlcGxhY2UoL15cXHcrLywg
ZnVuY3Rpb24obSl7XG5cdFx0XHRcdFx0cmV0dXJuIG0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0
fSkgOiBudWxsO1xuXHRcdFx0XHRpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2VsZWN0b3JUZXN0LnRl
c3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuO1xuXHRcdFx0XHRPYmplY3QuZWFjaChFbGVtZW50LlN0
eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXtcblx0XHRcdFx0XHRpZiAoIXJ1bGUuc3R5bGVb
c3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47XG5cdFx0XHRcdFx0
dmFsdWUgPSBTdHJpbmcocnVsZS5zdHlsZVtzdHlsZV0pO1xuXHRcdFx0XHRcdHRvW3N0eWxlXSA9
ICgoL15yZ2IvKS50ZXN0KHZhbHVlKSkgPyB2YWx1ZS5yZ2JUb0hleCgpIDogdmFsdWU7XG5cdFx0
XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdEFycmF5LmVhY2goZG9jdW1lbnQuc3R5
bGVTaGVldHMsIGZ1bmN0aW9uKHNoZWV0KXtcblx0XHRcdHZhciBocmVmID0gc2hlZXQuaHJlZjtc
blx0XHRcdGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAmJiBocmVmLmluZGV4
T2YoZG9jdW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuO1xuXHRcdFx0dmFyIHJ1bGVzID0gc2hl
ZXQucnVsZXMgfHwgc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRzZWFyY2hTdHlsZXMocnVsZXMpO1xu
XHRcdH0pO1xuXHRcdHJldHVybiBGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdID0gdG87XG5cdH1cblxu
fSk7XG5cbkZ4LkNTUy5DYWNoZSA9IHt9O1xuXG5GeC5DU1MuUGFyc2VycyA9IHtcblxuXHRDb2xv
cjoge1xuXHRcdHBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0XHRpZiAodmFsdWUubWF0Y2go
L14jWzAtOWEtZl17Myw2fSQvaSkpIHJldHVybiB2YWx1ZS5oZXhUb1JnYih0cnVlKTtcblx0XHRc
dHJldHVybiAoKHZhbHVlID0gdmFsdWUubWF0Y2goLyhcXGQrKSxcXHMqKFxcZCspLFxccyooXFxk
KykvKSkpID8gW3ZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM11dIDogZmFsc2U7XG5cdFx0fSxc
blx0XHRjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpe1xuXHRcdFx0cmV0dXJuIGZy
b20ubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKXtcblx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoRngu
Y29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0
c2VydmU6IGZ1bmN0aW9uKHZhbHVlKXtcblx0XHRcdHJldHVybiB2YWx1ZS5tYXAoTnVtYmVyKTtc
blx0XHR9XG5cdH0sXG5cblx0TnVtYmVyOiB7XG5cdFx0cGFyc2U6IHBhcnNlRmxvYXQsXG5cdFx0
Y29tcHV0ZTogRnguY29tcHV0ZSxcblx0XHRzZXJ2ZTogZnVuY3Rpb24odmFsdWUsIHVuaXQpe1xu
XHRcdFx0cmV0dXJuICh1bml0KSA/IHZhbHVlICsgdW5pdCA6IHZhbHVlO1xuXHRcdH1cblx0fSxc
blxuXHRTdHJpbmc6IHtcblx0XHRwYXJzZTogRnVuY3Rpb24uY29udmVydChmYWxzZSksXG5cdFx0
Y29tcHV0ZTogZnVuY3Rpb24oemVybywgb25lKXtcblx0XHRcdHJldHVybiBvbmU7XG5cdFx0fSxc
blx0XHRzZXJ2ZTogZnVuY3Rpb24oemVybyl7XG5cdFx0XHRyZXR1cm4gemVybztcblx0XHR9XG5c
dH1cblxufTtcblxuXG5cbi8qXG4tLS1cblxubmFtZTogRnguTW9ycGhcblxuZGVzY3JpcHRpb246
IEZvcm1lcmx5IEZ4LlN0eWxlcywgZWZmZWN0IHRvIHRyYW5zaXRpb24gYW55IG51bWJlciBvZiBD
U1MgcHJvcGVydGllcyBmb3IgYW4gZWxlbWVudCB1c2luZyBhbiBvYmplY3Qgb2YgcnVsZXMsIG9y
IENTUyBiYXNlZCBzZWxlY3RvciBydWxlcy5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cbnJlcXVpcmVzOiBGeC5DU1NcblxucHJvdmlkZXM6IEZ4Lk1vcnBoXG5cbi4uLlxuKi9cblxu
RnguTW9ycGggPSBuZXcgQ2xhc3Moe1xuXG5cdEV4dGVuZHM6IEZ4LkNTUyxcblxuXHRpbml0aWFs
aXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXtcblx0XHR0aGlzLmVsZW1lbnQgPSB0aGlz
LnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTtcblx0XHR0aGlzLnBhcmVudChvcHRpb25z
KTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKG5vdyl7XG5cdFx0aWYgKHR5cGVvZiBub3cgPT0g
J3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7XG5cdFx0Zm9yICh2YXIgcCBpbiBub3cp
IHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcCwgbm93W3BdLCB0aGlzLm9wdGlvbnMudW5pdCk7
XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8s
IGRlbHRhKXtcblx0XHR2YXIgbm93ID0ge307XG5cdFx0Zm9yICh2YXIgcCBpbiBmcm9tKSBub3db
cF0gPSB0aGlzLnBhcmVudChmcm9tW3BdLCB0b1twXSwgZGVsdGEpO1xuXHRcdHJldHVybiBub3c7
XG5cdH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpe1xuXHRcdGlmICghdGhpcy5j
aGVjayhwcm9wZXJ0aWVzKSkgcmV0dXJuIHRoaXM7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0aWVz
ID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVydGllcyk7XG5cdFx0
dmFyIGZyb20gPSB7fSwgdG8gPSB7fTtcblx0XHRmb3IgKHZhciBwIGluIHByb3BlcnRpZXMpe1xu
XHRcdFx0dmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsIHAsIHByb3BlcnRp
ZXNbcF0pO1xuXHRcdFx0ZnJvbVtwXSA9IHBhcnNlZC5mcm9tO1xuXHRcdFx0dG9bcF0gPSBwYXJz
ZWQudG87XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmVudChmcm9tLCB0byk7XG5cdH1cblxu
fSk7XG5cbkVsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9w
dGlvbnMpe1xuXHRcdHRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9u
cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZh
ciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7XG5cdFx0aWYgKCFtb3JwaCl7XG5cdFx0
XHRtb3JwaCA9IG5ldyBGeC5Nb3JwaCh0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRo
aXMuc3RvcmUoJ21vcnBoJywgbW9ycGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9ycGg7XG5cdH1c
blxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdG1vcnBoOiBmdW5jdGlvbihwcm9wcyl7
XG5cdFx0dGhpcy5nZXQoJ21vcnBoJykuc3RhcnQocHJvcHMpO1xuXHRcdHJldHVybiB0aGlzO1xu
XHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEZ4LlRyYW5zaXRpb25zXG5cbmRlc2NyaXB0
aW9uOiBDb250YWlucyBhIHNldCBvZiBhZHZhbmNlZCB0cmFuc2l0aW9ucyB0byBiZSB1c2VkIHdp
dGggYW55IG9mIHRoZSBGeCBDbGFzc2VzLlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxuY3JlZGl0czpcbiAgLSBFYXNpbmcgRXF1YXRpb25zIGJ5IFJvYmVydCBQZW5uZXIsIDxodHRw
Oi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nLz4sIG1vZGlmaWVkIGFuZCBvcHRpbWl6ZWQg
dG8gYmUgdXNlZCB3aXRoIE1vb1Rvb2xzLlxuXG5yZXF1aXJlczogRnhcblxucHJvdmlkZXM6IEZ4
LlRyYW5zaXRpb25zXG5cbi4uLlxuKi9cblxuRnguaW1wbGVtZW50KHtcblxuXHRnZXRUcmFuc2l0
aW9uOiBmdW5jdGlvbigpe1xuXHRcdHZhciB0cmFucyA9IHRoaXMub3B0aW9ucy50cmFuc2l0aW9u
IHx8IEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O1xuXHRcdGlmICh0eXBlb2YgdHJhbnMg
PT0gJ3N0cmluZycpe1xuXHRcdFx0dmFyIGRhdGEgPSB0cmFucy5zcGxpdCgnOicpO1xuXHRcdFx0
dHJhbnMgPSBGeC5UcmFuc2l0aW9ucztcblx0XHRcdHRyYW5zID0gdHJhbnNbZGF0YVswXV0gfHwg
dHJhbnNbZGF0YVswXS5jYXBpdGFsaXplKCldO1xuXHRcdFx0aWYgKGRhdGFbMV0pIHRyYW5zID0g
dHJhbnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsyXSA/IGRhdGFbMl0u
Y2FwaXRhbGl6ZSgpIDogJycpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5zO1xuXHR9XG5cbn0p
O1xuXG5GeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFyYW1zKXtcblx0cGFy
YW1zID0gQXJyYXkuY29udmVydChwYXJhbXMpO1xuXHR2YXIgZWFzZUluID0gZnVuY3Rpb24ocG9z
KXtcblx0XHRyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7XG5cdH07XG5cdHJldHVybiBP
YmplY3QuYXBwZW5kKGVhc2VJbiwge1xuXHRcdGVhc2VJbjogZWFzZUluLFxuXHRcdGVhc2VPdXQ6
IGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gMSAtIHRyYW5zaXRpb24oMSAtIHBvcywgcGFy
YW1zKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dDogZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVy
biAocG9zIDw9IDAuNSA/IHRyYW5zaXRpb24oMiAqIHBvcywgcGFyYW1zKSA6ICgyIC0gdHJhbnNp
dGlvbigyICogKDEgLSBwb3MpLCBwYXJhbXMpKSkgLyAyO1xuXHRcdH1cblx0fSk7XG59O1xuXG5G
eC5UcmFuc2l0aW9ucyA9IHtcblxuXHRsaW5lYXI6IGZ1bmN0aW9uKHplcm8pe1xuXHRcdHJldHVy
biB6ZXJvO1xuXHR9XG5cbn07XG5cblxuXG5GeC5UcmFuc2l0aW9ucy5leHRlbmQgPSBmdW5jdGlv
bih0cmFuc2l0aW9ucyl7XG5cdGZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJhbnNpdGlvbnMpIEZ4
LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24odHJhbnNpdGlvbnNb
dHJhbnNpdGlvbl0pO1xufTtcblxuRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHtcblxuXHRQb3c6IGZ1
bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhbMF0gfHwgNik7XG5c
dH0sXG5cblx0RXhwbzogZnVuY3Rpb24ocCl7XG5cdFx0cmV0dXJuIE1hdGgucG93KDIsIDggKiAo
cCAtIDEpKTtcblx0fSxcblxuXHRDaXJjOiBmdW5jdGlvbihwKXtcblx0XHRyZXR1cm4gMSAtIE1h
dGguc2luKE1hdGguYWNvcyhwKSk7XG5cdH0sXG5cblx0U2luZTogZnVuY3Rpb24ocCl7XG5cdFx0
cmV0dXJuIDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpO1xuXHR9LFxuXG5cdEJhY2s6IGZ1
bmN0aW9uKHAsIHgpe1xuXHRcdHggPSB4ICYmIHhbMF0gfHwgMS42MTg7XG5cdFx0cmV0dXJuIE1h
dGgucG93KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7XG5cdH0sXG5cblx0Qm91bmNlOiBmdW5j
dGlvbihwKXtcblx0XHR2YXIgdmFsdWU7XG5cdFx0Zm9yICh2YXIgYSA9IDAsIGIgPSAxOyAxOyBh
ICs9IGIsIGIgLz0gMil7XG5cdFx0XHRpZiAocCA+PSAoNyAtIDQgKiBhKSAvIDExKXtcblx0XHRc
dFx0dmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEgKiBwKSAvIDQsIDIp
O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9
LFxuXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKHAsIHgpe1xuXHRcdHJldHVybiBNYXRoLnBvdygyLCAx
MCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYgeFswXSB8fCAxKSAv
IDMpO1xuXHR9XG5cbn0pO1xuXG5bJ1F1YWQnLCAnQ3ViaWMnLCAnUXVhcnQnLCAnUXVpbnQnXS5l
YWNoKGZ1bmN0aW9uKHRyYW5zaXRpb24sIGkpe1xuXHRGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9u
XSA9IG5ldyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApe1xuXHRcdHJldHVybiBNYXRoLnBvdyhw
LCBpICsgMik7XG5cdH0pO1xufSk7XG5cbi8qXG4tLS1cblxubmFtZTogRnguVHdlZW5cblxuZGVz
Y3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgQ1NT
IHByb3BlcnR5IGZvciBhbiBlbGVtZW50LlxuXG5saWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS5c
blxucmVxdWlyZXM6IEZ4LkNTU1xuXG5wcm92aWRlczogW0Z4LlR3ZWVuLCBFbGVtZW50LmZhZGUs
IEVsZW1lbnQuaGlnaGxpZ2h0XVxuXG4uLi5cbiovXG5cbkZ4LlR3ZWVuID0gbmV3IENsYXNzKHtc
blxuXHRFeHRlbmRzOiBGeC5DU1MsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwg
b3B0aW9ucyl7XG5cdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQo
ZWxlbWVudCk7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5cdH0sXG5cblx0c2V0OiBmdW5j
dGlvbihwcm9wZXJ0eSwgbm93KXtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKXtcblx0
XHRcdG5vdyA9IHByb3BlcnR5O1xuXHRcdFx0cHJvcGVydHkgPSB0aGlzLnByb3BlcnR5IHx8IHRo
aXMub3B0aW9ucy5wcm9wZXJ0eTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50
LCBwcm9wZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH0sXG5cblx0c3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7XG5cdFx0aWYgKCF0
aGlzLmNoZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzO1xuXHRcdHZhciBhcmdz
ID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO1xuXHRcdHRoaXMucHJvcGVydHkgPSB0aGlzLm9w
dGlvbnMucHJvcGVydHkgfHwgYXJncy5zaGlmdCgpO1xuXHRcdHZhciBwYXJzZWQgPSB0aGlzLnBy
ZXBhcmUodGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTtcblx0XHRyZXR1cm4gdGhp
cy5wYXJlbnQocGFyc2VkLmZyb20sIHBhcnNlZC50byk7XG5cdH1cblxufSk7XG5cbkVsZW1lbnQu
UHJvcGVydGllcy50d2VlbiA9IHtcblxuXHRzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpe1xuXHRcdHRo
aXMuZ2V0KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0cmV0dXJu
IHRoaXM7XG5cdH0sXG5cblx0Z2V0OiBmdW5jdGlvbigpe1xuXHRcdHZhciB0d2VlbiA9IHRoaXMu
cmV0cmlldmUoJ3R3ZWVuJyk7XG5cdFx0aWYgKCF0d2Vlbil7XG5cdFx0XHR0d2VlbiA9IG5ldyBG
eC5Ud2Vlbih0aGlzLCB7bGluazogJ2NhbmNlbCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ3R3ZWVu
JywgdHdlZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHdlZW47XG5cdH1cblxufTtcblxuRWxlbWVu
dC5pbXBsZW1lbnQoe1xuXG5cdHR3ZWVuOiBmdW5jdGlvbihwcm9wZXJ0eSwgZnJvbSwgdG8pe1xu
XHRcdHRoaXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0byk7XG5cdFx0cmV0
dXJuIHRoaXM7XG5cdH0sXG5cblx0ZmFkZTogZnVuY3Rpb24oKXtcblx0XHR2YXIgZmFkZSA9IHRo
aXMuZ2V0KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5hcHBlbmQoYXJndW1l
bnRzKSwgdG9nZ2xlO1xuXHRcdGlmIChhcmdzWzFdID09IG51bGwpIGFyZ3NbMV0gPSAndG9nZ2xl
Jztcblx0XHRzd2l0Y2ggKGFyZ3NbMV0pe1xuXHRcdFx0Y2FzZSAnaW4nOiBtZXRob2QgPSAnc3Rh
cnQnOyBhcmdzWzFdID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdvdXQnOiBtZXRob2QgPSAnc3Rh
cnQnOyBhcmdzWzFdID0gMDsgYnJlYWs7XG5cdFx0XHRjYXNlICdzaG93JzogbWV0aG9kID0gJ3Nl
dCc7IGFyZ3NbMV0gPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2hpZGUnOiBtZXRob2QgPSAnc2V0
JzsgYXJnc1sxXSA9IDA7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndG9nZ2xlJzpcblx0XHRcdFx0dmFy
IGZsYWcgPSB0aGlzLnJldHJpZXZlKCdmYWRlOmZsYWcnLCB0aGlzLmdldFN0eWxlKCdvcGFjaXR5
JykgPT0gMSk7XG5cdFx0XHRcdG1ldGhvZCA9ICdzdGFydCc7XG5cdFx0XHRcdGFyZ3NbMV0gPSBm
bGFnID8gMCA6IDE7XG5cdFx0XHRcdHRoaXMuc3RvcmUoJ2ZhZGU6ZmxhZycsICFmbGFnKTtcblx0
XHRcdFx0dG9nZ2xlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBtZXRo
b2QgPSAnc3RhcnQnO1xuXHRcdH1cblx0XHRpZiAoIXRvZ2dsZSkgdGhpcy5lbGltaW5hdGUoJ2Zh
ZGU6ZmxhZycpO1xuXHRcdGZhZGVbbWV0aG9kXS5hcHBseShmYWRlLCBhcmdzKTtcblx0XHR2YXIg
dG8gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG5cblx0XHRpZiAobWV0aG9kID09ICdzZXQnKXtc
blx0XHRcdHRoaXMuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCB0byA9PSAwID8gJ2hpZGRlbicgOiAn
dmlzaWJsZScpO1xuXHRcdH0gZWxzZSBpZiAodG8gIT0gMCl7XG5cdFx0XHRpZiAoZmFkZS4kY2hh
aW4ubGVuZ3RoKXtcblx0XHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHRo
aXMuZWxlbWVudC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0
dGhpcy5jYWxsQ2hhaW4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0
aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdH1cblx0XHR9IGVs
c2Uge1xuXHRcdFx0ZmFkZS5jaGFpbihmdW5jdGlvbigpe1xuXHRcdFx0XHRpZiAodGhpcy5lbGVt
ZW50LmdldFN0eWxlKCdvcGFjaXR5JykpIHJldHVybjtcblx0XHRcdFx0dGhpcy5lbGVtZW50LnNl
dFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHR0aGlzLmNhbGxDaGFpbigp
O1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0aGlnaGxp
Z2h0OiBmdW5jdGlvbihzdGFydCwgZW5kKXtcblx0XHRpZiAoIWVuZCl7XG5cdFx0XHRlbmQgPSB0
aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0eWxlKCdiYWNrZ3Jv
dW5kLWNvbG9yJykpO1xuXHRcdFx0ZW5kID0gKGVuZCA9PSAndHJhbnNwYXJlbnQnKSA/ICcjZmZm
JyA6IGVuZDtcblx0XHR9XG5cdFx0dmFyIHR3ZWVuID0gdGhpcy5nZXQoJ3R3ZWVuJyk7XG5cdFx0
dHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2ZmZmY4OCcsIGVuZCku
Y2hhaW4oZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3In
LCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7XG5cdFx0XHR0d2Vlbi5jYWxs
Q2hhaW4oKTtcblx0XHR9LmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cbn0p
O1xuXG4vKlxuLS0tXG5cbm5hbWU6IFJlcXVlc3RcblxuZGVzY3JpcHRpb246IFBvd2VyZnVsIGFs
bCBwdXJwb3NlIFJlcXVlc3QgQ2xhc3MuIFVzZXMgWE1MSFRUUFJlcXVlc3QuXG5cbmxpY2Vuc2U6
IE1JVC1zdHlsZSBsaWNlbnNlLlxuXG5yZXF1aXJlczogW09iamVjdCwgRWxlbWVudCwgQ2hhaW4s
IEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGUsIEJyb3dzZXJdXG5cbnByb3ZpZGVzOiBS
ZXF1ZXN0XG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKCl7XG5cbnZhciBlbXB0eSA9IGZ1bmN0aW9u
KCl7fSxcblx0cHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBuZXcgQnJvd3Nlci5S
ZXF1ZXN0KTtcblxudmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcgQ2xhc3Moe1xuXG5c
dEltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBDbGFzcy5UaGVuYWJsZV0sXG5c
blx0b3B0aW9uczogey8qXG5cdFx0b25SZXF1ZXN0OiBmdW5jdGlvbigpe30sXG5cdFx0b25Mb2Fk
c3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sXG5cdFx0b25Qcm9ncmVzczogZnVuY3Rpb24o
ZXZlbnQsIHhocil7fSxcblx0XHRvbkNvbXBsZXRlOiBmdW5jdGlvbigpe30sXG5cdFx0b25DYW5j
ZWw6IGZ1bmN0aW9uKCl7fSxcblx0XHRvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwg
cmVzcG9uc2VYTUwpe30sXG5cdFx0b25GYWlsdXJlOiBmdW5jdGlvbih4aHIpe30sXG5cdFx0b25F
eGNlcHRpb246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LFxuXHRcdG9uVGltZW91dDog
ZnVuY3Rpb24oKXt9LFxuXHRcdHVzZXI6ICcnLFxuXHRcdHBhc3N3b3JkOiAnJyxcblx0XHR3aXRo
Q3JlZGVudGlhbHM6IGZhbHNlLCovXG5cdFx0dXJsOiAnJyxcblx0XHRkYXRhOiAnJyxcblx0XHRo
ZWFkZXJzOiB7XG5cdFx0XHQnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXG5c
dFx0XHQnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94
bWwsIHRleHQveG1sLCAqLyonXG5cdFx0fSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRmb3JtYXQ6
IGZhbHNlLFxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxuXHRcdGxpbms6ICdpZ25vcmUnLFxuXHRcdGlz
U3VjY2VzczogbnVsbCxcblx0XHRlbXVsYXRpb246IHRydWUsXG5cdFx0dXJsRW5jb2RlZDogdHJ1
ZSxcblx0XHRlbmNvZGluZzogJ3V0Zi04Jyxcblx0XHRldmFsU2NyaXB0czogZmFsc2UsXG5cdFx0
ZXZhbFJlc3BvbnNlOiBmYWxzZSxcblx0XHR0aW1lb3V0OiAwLFxuXHRcdG5vQ2FjaGU6IGZhbHNl
XG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy54aHIg
PSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xu
XHRcdHRoaXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzO1xuXHR9LFxuXG5cdG9uU3Rh
dGVDaGFuZ2U6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdGlmICh4
aHIucmVhZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjtcblx0XHR0aGlzLnJ1
bm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXR1cyA9IDA7XG5cdFx0RnVuY3Rpb24uYXR0ZW1w
dChmdW5jdGlvbigpe1xuXHRcdFx0dmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7XG5cdFx0XHR0aGlz
LnN0YXR1cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7XG5cdFx0fS5iaW5kKHRo
aXMpKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dy
ZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0
XHRpZiAodGhpcy50aW1lcil7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG5cdFx0
XHRkZWxldGUgdGhpcy50aW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLnJlc3BvbnNlID0ge3RleHQ6
IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5yZXNwb25zZVhNTH07
XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnN0YXR1cykp
XG5cdFx0XHR0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LCB0aGlzLnJlc3BvbnNlLnht
bCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5mYWlsdXJlKCk7XG5cdH0sXG5cblx0aXNTdWNjZXNz
OiBmdW5jdGlvbigpe1xuXHRcdHZhciBzdGF0dXMgPSB0aGlzLnN0YXR1cztcblx0XHRyZXR1cm4g
KHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTtcblx0fSxcblxuXHRpc1J1bm5pbmc6IGZ1
bmN0aW9uKCl7XG5cdFx0cmV0dXJuICEhdGhpcy5ydW5uaW5nO1xuXHR9LFxuXG5cdHByb2Nlc3NT
Y3JpcHRzOiBmdW5jdGlvbih0ZXh0KXtcblx0XHRpZiAodGhpcy5vcHRpb25zLmV2YWxSZXNwb25z
ZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcignQ29udGVudC10
eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpO1xuXHRcdHJldHVybiB0ZXh0LnN0cmlw
U2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpO1xuXHR9LFxuXG5cdHN1Y2Nlc3M6IGZ1
bmN0aW9uKHRleHQsIHhtbCl7XG5cdFx0dGhpcy5vblN1Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0
cyh0ZXh0KSwgeG1sKTtcblx0XHR0aGlzLnJlc29sdmUoe3RleHQ6IHRleHQsIHhtbDogeG1sfSk7
XG5cdH0sXG5cblx0b25TdWNjZXNzOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50KCdj
b21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJndW1lbnRzKS5jYWxs
Q2hhaW4oKTtcblx0fSxcblxuXHRmYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMub25GYWls
dXJlKCk7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4aHI6IHRoaXMueGhy
fSk7XG5cdH0sXG5cblx0b25GYWlsdXJlOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMuZmlyZUV2ZW50
KCdjb21wbGV0ZScpLmZpcmVFdmVudCgnZmFpbHVyZScsIHRoaXMueGhyKTtcblx0fSxcblxuXHRs
b2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXtcblx0XHR0aGlzLmZpcmVFdmVudCgnbG9hZHN0YXJ0
JywgW2V2ZW50LCB0aGlzLnhocl0pO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBmdW5jdGlvbihldmVu
dCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0aGlzLnhocl0pO1xu
XHR9LFxuXG5cdHRpbWVvdXQ6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5maXJlRXZlbnQoJ3RpbWVv
dXQnLCB0aGlzLnhocik7XG5cdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ3RpbWVvdXQnLCB4aHI6
IHRoaXMueGhyfSk7XG5cdH0sXG5cblx0c2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7
XG5cdFx0dGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0s
XG5cblx0Z2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXtcblx0XHRyZXR1cm4gRnVuY3Rpb24uYXR0
ZW1wdChmdW5jdGlvbigpe1xuXHRcdFx0cmV0dXJuIHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVy
KG5hbWUpO1xuXHRcdH0uYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2hlY2s6IGZ1bmN0aW9uKCl7
XG5cdFx0aWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybiB0cnVlO1xuXHRcdHN3aXRjaCAodGhpcy5v
cHRpb25zLmxpbmspe1xuXHRcdFx0Y2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJu
IHRydWU7XG5cdFx0XHRjYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhh
cmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7
XG5cdH0sXG5cblx0c2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0aWYgKCF0aGlzLmNoZWNr
KG9wdGlvbnMpKSByZXR1cm4gdGhpcztcblxuXHRcdHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgPSB0
aGlzLm9wdGlvbnMuaXNTdWNjZXNzIHx8IHRoaXMuaXNTdWNjZXNzO1xuXHRcdHRoaXMucnVubmlu
ZyA9IHRydWU7XG5cblx0XHR2YXIgdHlwZSA9IHR5cGVPZihvcHRpb25zKTtcblx0XHRpZiAodHlw
ZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9IHtkYXRhOiBvcHRp
b25zfTtcblxuXHRcdHZhciBvbGQgPSB0aGlzLm9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9IE9iamVj
dC5hcHBlbmQoe2RhdGE6IG9sZC5kYXRhLCB1cmw6IG9sZC51cmwsIG1ldGhvZDogb2xkLm1ldGhv
ZH0sIG9wdGlvbnMpO1xuXHRcdHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCB1cmwgPSBTdHJpbmco
b3B0aW9ucy51cmwpLCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuXG5c
dFx0c3dpdGNoICh0eXBlT2YoZGF0YSkpe1xuXHRcdFx0Y2FzZSAnZWxlbWVudCc6IGRhdGEgPSBk
b2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnb2Jq
ZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTtcblx0
XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLmZvcm1hdCl7XG5cdFx0XHR2YXIgZm9ybWF0ID0g
J2Zvcm1hdD0nICsgdGhpcy5vcHRpb25zLmZvcm1hdDtcblx0XHRcdGRhdGEgPSAoZGF0YSkgPyBm
b3JtYXQgKyAnJicgKyBkYXRhIDogZm9ybWF0O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlv
bnMuZW11bGF0aW9uICYmICFbJ2dldCcsICdwb3N0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0
XHR2YXIgX21ldGhvZCA9ICdfbWV0aG9kPScgKyBtZXRob2Q7XG5cdFx0XHRkYXRhID0gKGRhdGEp
ID8gX21ldGhvZCArICcmJyArIGRhdGEgOiBfbWV0aG9kO1xuXHRcdFx0bWV0aG9kID0gJ3Bvc3Qn
O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAmJiBbJ3Bvc3QnLCAn
cHV0J10uY29udGFpbnMobWV0aG9kKSl7XG5cdFx0XHR2YXIgZW5jb2RpbmcgPSAodGhpcy5vcHRp
b25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcn
O1xuXHRcdFx0dGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3
dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7XG5cdFx0fVxuXG5cdFx0aWYgKCF1cmwpIHVy
bCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG5cdFx0dmFyIHRyaW1Qb3NpdGlvbiA9
IHVybC5sYXN0SW5kZXhPZignLycpO1xuXHRcdGlmICh0cmltUG9zaXRpb24gPiAtMSAmJiAodHJp
bVBvc2l0aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJsLnN1YnN0cigwLCB0
cmltUG9zaXRpb24pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NhY2hlKVxuXHRcdFx0dXJs
ICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgU3RyaW5nLnVuaXF1ZUlE
KCk7XG5cblx0XHRpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1ldGhvZCA9PSAnZGVs
ZXRlJykpe1xuXHRcdFx0dXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycp
ICsgZGF0YTtcblx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZhciB4aHIgPSB0aGlz
Lnhocjtcblx0XHRpZiAocHJvZ3Jlc3NTdXBwb3J0KXtcblx0XHRcdHhoci5vbmxvYWRzdGFydCA9
IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7XG5cdFx0XHR4aHIub25wcm9ncmVzcyA9IHRoaXMu
cHJvZ3Jlc3MuYmluZCh0aGlzKTtcblx0XHR9XG5cblx0XHR4aHIub3BlbihtZXRob2QudG9VcHBl
ckNhc2UoKSwgdXJsLCB0aGlzLm9wdGlvbnMuYXN5bmMsIHRoaXMub3B0aW9ucy51c2VyLCB0aGlz
Lm9wdGlvbnMucGFzc3dvcmQpO1xuXHRcdGlmICgodGhpcy5vcHRpb25zLndpdGhDcmVkZW50aWFs
cykgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1
ZTtcblxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmlu
ZCh0aGlzKTtcblxuXHRcdE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVuY3Rpb24odmFsdWUs
IGtleSl7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZh
bHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpe1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudCgnZXhjZXB0
aW9uJywgW2tleSwgdmFsdWVdKTtcblx0XHRcdFx0dGhpcy5yZWplY3Qoe3JlYXNvbjogJ2V4Y2Vw
dGlvbicsIHhocjogeGhyLCBleGNlcHRpb246IGV9KTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtc
blxuXHRcdGlmICh0aGlzLmdldFRoZW5hYmxlU3RhdGUoKSAhPT0gJ3BlbmRpbmcnKXtcblx0XHRc
dHRoaXMucmVzZXRUaGVuYWJsZSh7cmVhc29uOiAnc2VuZCd9KTtcblx0XHR9XG5cdFx0dGhpcy5m
aXJlRXZlbnQoJ3JlcXVlc3QnKTtcblx0XHR4aHIuc2VuZChkYXRhKTtcblx0XHRpZiAoIXRoaXMu
b3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5v
cHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVsYXkodGhpcy5vcHRp
b25zLnRpbWVvdXQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNhbmNlbDog
ZnVuY3Rpb24oKXtcblx0XHRpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRoaXM7XG5cdFx0dGhp
cy5ydW5uaW5nID0gZmFsc2U7XG5cdFx0dmFyIHhociA9IHRoaXMueGhyO1xuXHRcdHhoci5hYm9y
dCgpO1xuXHRcdGlmICh0aGlzLnRpbWVyKXtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVy
KTtcblx0XHRcdGRlbGV0ZSB0aGlzLnRpbWVyO1xuXHRcdH1cblx0XHR4aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gZW1wdHk7XG5cdFx0aWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3Mg
PSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTtcblx0XHR0aGlzLnhociA9IG5ldyBCcm93c2VyLlJl
cXVlc3QoKTtcblx0XHR0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7XG5cdFx0dGhpcy5yZWplY3Qo
e3JlYXNvbjogJ2NhbmNlbCcsIHhocjogeGhyfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbnZhciBtZXRob2RzID0ge307XG5bJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUn
LCAncGF0Y2gnLCAnaGVhZCcsICdHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVMRVRFJywgJ1BBVENI
JywgJ0hFQUQnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG5cdG1ldGhvZHNbbWV0aG9kXSA9IGZ1
bmN0aW9uKGRhdGEpe1xuXHRcdHZhciBvYmplY3QgPSB7XG5cdFx0XHRtZXRob2Q6IG1ldGhvZFxu
XHRcdH07XG5cdFx0aWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBkYXRhO1xuXHRcdHJl
dHVybiB0aGlzLnNlbmQob2JqZWN0KTtcblx0fTtcbn0pO1xuXG5SZXF1ZXN0LmltcGxlbWVudCht
ZXRob2RzKTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7XG5cblx0c2V0OiBmdW5jdGlv
bihvcHRpb25zKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJykuY2FuY2VsKCk7XG5c
dFx0c2VuZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5c
dGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgc2VuZCA9IHRoaXMucmV0cmlldmUoJ3NlbmQnKTtc
blx0XHRpZiAoIXNlbmQpe1xuXHRcdFx0c2VuZCA9IG5ldyBSZXF1ZXN0KHtcblx0XHRcdFx0ZGF0
YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21ldGhvZCcpIHx8ICdw
b3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJylcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zdG9y
ZSgnc2VuZCcsIHNlbmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VuZDtcblx0fVxuXG59O1xuXG5F
bGVtZW50LmltcGxlbWVudCh7XG5cblx0c2VuZDogZnVuY3Rpb24odXJsKXtcblx0XHR2YXIgc2Vu
ZGVyID0gdGhpcy5nZXQoJ3NlbmQnKTtcblx0XHRzZW5kZXIuc2VuZCh7ZGF0YTogdGhpcywgdXJs
OiB1cmwgfHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxu
fSk7XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5IVE1MXG5cbmRlc2NyaXB0
aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRo
b2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLlxuXG5saWNlbnNlOiBNSVQt
c3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0XVxuXG5wcm92aWRl
czogUmVxdWVzdC5IVE1MXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5IVE1MID0gbmV3IENsYXNzKHtc
blxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHR1cGRhdGU6IGZhbHNl
LFxuXHRcdGFwcGVuZDogZmFsc2UsXG5cdFx0ZXZhbFNjcmlwdHM6IHRydWUsXG5cdFx0ZmlsdGVy
OiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6ICd0ZXh0L2h0bWwsIGFwcGxp
Y2F0aW9uL3htbCwgdGV4dC94bWwsICovKidcblx0XHR9XG5cdH0sXG5cblx0c3VjY2VzczogZnVu
Y3Rpb24odGV4dCl7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIHJlc3BvbnNlID0g
dGhpcy5yZXNwb25zZTtcblxuXHRcdHJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0cmlwU2NyaXB0cyhm
dW5jdGlvbihzY3JpcHQpe1xuXHRcdFx0cmVzcG9uc2UuamF2YXNjcmlwdCA9IHNjcmlwdDtcblx0
XHR9KTtcblxuXHRcdHZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2goLzxib2R5W14+XSo+
KFtcXHNcXFNdKj8pPFxcL2JvZHk+L2kpO1xuXHRcdGlmIChtYXRjaCkgcmVzcG9uc2UuaHRtbCA9
IG1hdGNoWzFdO1xuXHRcdHZhciB0ZW1wID0gbmV3IEVsZW1lbnQoJ2RpdicpLnNldCgnaHRtbCcs
IHJlc3BvbnNlLmh0bWwpO1xuXG5cdFx0cmVzcG9uc2UudHJlZSA9IHRlbXAuY2hpbGROb2Rlcztc
blx0XHRyZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMob3B0aW9ucy5maWx0ZXIg
fHwgJyonKTtcblxuXHRcdGlmIChvcHRpb25zLmZpbHRlcikgcmVzcG9uc2UudHJlZSA9IHJlc3Bv
bnNlLmVsZW1lbnRzO1xuXHRcdGlmIChvcHRpb25zLnVwZGF0ZSl7XG5cdFx0XHR2YXIgdXBkYXRl
ID0gZG9jdW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7XG5cdFx0XHRpZiAob3B0aW9u
cy5maWx0ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7XG5cdFx0XHRlbHNlIHVw
ZGF0ZS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTtcblx0XHR9IGVsc2UgaWYgKG9wdGlvbnMu
YXBwZW5kKXtcblx0XHRcdHZhciBhcHBlbmQgPSBkb2N1bWVudC5pZChvcHRpb25zLmFwcGVuZCk7
XG5cdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLmVsZW1lbnRzLnJldmVyc2UoKS5p
bmplY3QoYXBwZW5kKTtcblx0XHRcdGVsc2UgYXBwZW5kLmFkb3B0KHRlbXAuZ2V0Q2hpbGRyZW4o
KSk7XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93c2VyLmV4ZWMocmVz
cG9uc2UuamF2YXNjcmlwdCk7XG5cblx0XHR0aGlzLm9uU3VjY2VzcyhyZXNwb25zZS50cmVlLCBy
ZXNwb25zZS5lbGVtZW50cywgcmVzcG9uc2UuaHRtbCwgcmVzcG9uc2UuamF2YXNjcmlwdCk7XG5c
dFx0dGhpcy5yZXNvbHZlKHt0cmVlOiByZXNwb25zZS50cmVlLCBlbGVtZW50czogcmVzcG9uc2Uu
ZWxlbWVudHMsIGh0bWw6IHJlc3BvbnNlLmh0bWwsIGphdmFzY3JpcHQ6IHJlc3BvbnNlLmphdmFz
Y3JpcHR9KTtcblx0fVxuXG59KTtcblxuRWxlbWVudC5Qcm9wZXJ0aWVzLmxvYWQgPSB7XG5cblx0
c2V0OiBmdW5jdGlvbihvcHRpb25zKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMuZ2V0KCdsb2FkJyku
Y2FuY2VsKCk7XG5cdFx0bG9hZC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlz
O1xuXHR9LFxuXG5cdGdldDogZnVuY3Rpb24oKXtcblx0XHR2YXIgbG9hZCA9IHRoaXMucmV0cmll
dmUoJ2xvYWQnKTtcblx0XHRpZiAoIWxvYWQpe1xuXHRcdFx0bG9hZCA9IG5ldyBSZXF1ZXN0LkhU
TUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMsIG1ldGhvZDogJ2dl
dCd9KTtcblx0XHRcdHRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTtcblx0XHR9XG5cdFx0cmV0dXJu
IGxvYWQ7XG5cdH1cblxufTtcblxuRWxlbWVudC5pbXBsZW1lbnQoe1xuXG5cdGxvYWQ6IGZ1bmN0
aW9uKCl7XG5cdFx0dGhpcy5nZXQoJ2xvYWQnKS5zZW5kKEFycmF5LmxpbmsoYXJndW1lbnRzLCB7
ZGF0YTogVHlwZS5pc09iamVjdCwgdXJsOiBUeXBlLmlzU3RyaW5nfSkpO1xuXHRcdHJldHVybiB0
aGlzO1xuXHR9XG5cbn0pO1xuXG4vKlxuLS0tXG5cbm5hbWU6IEpTT05cblxuZGVzY3JpcHRpb246
IEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2Uu
XG5cblNlZUFsc286IDxodHRwOi8vd3d3Lmpzb24ub3JnLz5cblxucmVxdWlyZXM6IFtBcnJheSwg
U3RyaW5nLCBOdW1iZXIsIEZ1bmN0aW9uXVxuXG5wcm92aWRlczogSlNPTlxuXG4uLi5cbiovXG5c
bmlmICh0eXBlb2YgSlNPTiA9PSAndW5kZWZpbmVkJykgdGhpcy5KU09OID0ge307XG5cblxuXG4o
ZnVuY3Rpb24oKXtcblxudmFyIHNwZWNpYWwgPSB7J1xcYic6ICdcXFxcYicsICdcXHQnOiAnXFxc
XHQnLCAnXFxuJzogJ1xcXFxuJywgJ1xcZic6ICdcXFxcZicsICdcXHInOiAnXFxcXHInLCAnXCIn
IDogJ1xcXFxcIicsICdcXFxcJzogJ1xcXFxcXFxcJ307XG5cbnZhciBlc2NhcGUgPSBmdW5jdGlv
bihjaHIpe1xuXHRyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXFxcdScgKyAoJzAwMDAnICsgY2hy
LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xuXG5KU09OLnZhbGlk
YXRlID0gZnVuY3Rpb24oc3RyaW5nKXtcblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcXFwo
PzpbXCJcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS5cblx0XHRcdFx0XHRy
ZXBsYWNlKC9cIlteXCJcXFxcXFxuXFxyXSpcInx0cnVlfGZhbHNlfG51bGx8LT9cXGQrKD86XFwu
XFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8vZywgJ10nKS5cblx0XHRcdFx0XHRyZXBsYWNlKC8o
PzpefDp8LCkoPzpcXHMqXFxbKSsvZywgJycpO1xuXG5cdHJldHVybiAoL15bXFxdLDp7fVxcc10q
JC8pLnRlc3Qoc3RyaW5nKTtcbn07XG5cbkpTT04uZW5jb2RlID0gSlNPTi5zdHJpbmdpZnkgPyBm
dW5jdGlvbihvYmope1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcbn0gOiBmdW5jdGlv
bihvYmope1xuXHRpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50b0pTT04oKTtcblxu
XHRzd2l0Y2ggKHR5cGVPZihvYmopKXtcblx0XHRjYXNlICdzdHJpbmcnOlxuXHRcdFx0cmV0dXJu
ICdcIicgKyBvYmoucmVwbGFjZSgvW1xceDAwLVxceDFmXFxcXFwiXS9nLCBlc2NhcGUpICsgJ1wi
Jztcblx0XHRjYXNlICdhcnJheSc6XG5cdFx0XHRyZXR1cm4gJ1snICsgb2JqLm1hcChKU09OLmVu
Y29kZSkuY2xlYW4oKSArICddJztcblx0XHRjYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzpcblx0
XHRcdHZhciBzdHJpbmcgPSBbXTtcblx0XHRcdE9iamVjdC5lYWNoKG9iaiwgZnVuY3Rpb24odmFs
dWUsIGtleSl7XG5cdFx0XHRcdHZhciBqc29uID0gSlNPTi5lbmNvZGUodmFsdWUpO1xuXHRcdFx0
XHRpZiAoanNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6JyArIGpzb24pO1xu
XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nO1xuXHRcdGNhc2UgJ251
bWJlcic6IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7XG5cdFx0Y2FzZSAnbnVsbCc6
IHJldHVybiAnbnVsbCc7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkpTT04uc2VjdXJl
ID0gdHJ1ZTtcblxuXG5KU09OLmRlY29kZSA9IGZ1bmN0aW9uKHN0cmluZywgc2VjdXJlKXtcblx0
aWYgKCFzdHJpbmcgfHwgdHlwZU9mKHN0cmluZykgIT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xu
XG5cdGlmIChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7XG5cdGlmIChzZWN1
cmUpe1xuXHRcdGlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpO1xuXHRc
dGlmICghSlNPTi52YWxpZGF0ZShzdHJpbmcpKSB0aHJvdyBuZXcgRXJyb3IoJ0pTT04gY291bGQg
bm90IGRlY29kZSB0aGUgaW5wdXQ7IHNlY3VyaXR5IGlzIGVuYWJsZWQgYW5kIHRoZSB2YWx1ZSBp
cyBub3Qgc2VjdXJlLicpO1xuXHR9XG5cblx0cmV0dXJuIGV2YWwoJygnICsgc3RyaW5nICsgJykn
KTtcbn07XG5cbn0pKCk7XG5cbi8qXG4tLS1cblxubmFtZTogUmVxdWVzdC5KU09OXG5cbmRlc2Ny
aXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBt
ZXRob2RzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgSlNPTiBkYXRhLlxuXG5saWNlbnNlOiBN
SVQtc3R5bGUgbGljZW5zZS5cblxucmVxdWlyZXM6IFtSZXF1ZXN0LCBKU09OXVxuXG5wcm92aWRl
czogUmVxdWVzdC5KU09OXG5cbi4uLlxuKi9cblxuUmVxdWVzdC5KU09OID0gbmV3IENsYXNzKHtc
blxuXHRFeHRlbmRzOiBSZXF1ZXN0LFxuXG5cdG9wdGlvbnM6IHtcblx0XHQvKm9uRXJyb3I6IGZ1
bmN0aW9uKHRleHQsIGVycm9yKXt9LCovXG5cdFx0c2VjdXJlOiB0cnVlXG5cdH0sXG5cblx0aW5p
dGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7XG5cdFx0dGhpcy5wYXJlbnQob3B0aW9ucyk7XG5c
dFx0T2JqZWN0LmFwcGVuZCh0aGlzLmhlYWRlcnMsIHtcblx0XHRcdCdBY2NlcHQnOiAnYXBwbGlj
YXRpb24vanNvbicsXG5cdFx0XHQnWC1SZXF1ZXN0JzogJ0pTT04nXG5cdFx0fSk7XG5cdH0sXG5c
blx0c3VjY2VzczogZnVuY3Rpb24odGV4dCl7XG5cdFx0dmFyIGpzb247XG5cdFx0dHJ5IHtcblx0
XHRcdGpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0ZXh0LCB0aGlzLm9w
dGlvbnMuc2VjdXJlKTtcblx0XHR9IGNhdGNoIChlcnJvcil7XG5cdFx0XHR0aGlzLmZpcmVFdmVu
dCgnZXJyb3InLCBbdGV4dCwgZXJyb3JdKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYg
KGpzb24gPT0gbnVsbCl7XG5cdFx0XHR0aGlzLmZhaWx1cmUoKTtcblx0XHR9IGVsc2Uge1xuXHRc
dFx0dGhpcy5vblN1Y2Nlc3MoanNvbiwgdGV4dCk7XG5cdFx0XHR0aGlzLnJlc29sdmUoe2pzb246
IGpzb24sIHRleHQ6IHRleHR9KTtcblx0XHR9XG5cdH1cblxufSk7XG5cbi8qXG4tLS1cblxubmFt
ZTogQ29va2llXG5cbmRlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcsIHJlYWRpbmcsIGFu
ZCBkZWxldGluZyBicm93c2VyIENvb2tpZXMuXG5cbmxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNl
LlxuXG5jcmVkaXRzOlxuICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkgUGV0ZXItUGF1bCBL
b2NoIChodHRwOi8vcXVpcmtzbW9kZS5vcmcpLlxuXG5yZXF1aXJlczogW09wdGlvbnMsIEJyb3dz
ZXJdXG5cbnByb3ZpZGVzOiBDb29raWVcblxuLi4uXG4qL1xuXG52YXIgQ29va2llID0gbmV3IENs
YXNzKHtcblxuXHRJbXBsZW1lbnRzOiBPcHRpb25zLFxuXG5cdG9wdGlvbnM6IHtcblx0XHRwYXRo
OiAnLycsXG5cdFx0ZG9tYWluOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogZmFsc2UsXG5cdFx0c2Vj
dXJlOiBmYWxzZSxcblx0XHRkb2N1bWVudDogZG9jdW1lbnQsXG5cdFx0ZW5jb2RlOiB0cnVlLFxu
XHRcdGh0dHBPbmx5OiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKGtleSwg
b3B0aW9ucyl7XG5cdFx0dGhpcy5rZXkgPSBrZXk7XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlv
bnMpO1xuXHR9LFxuXG5cdHdyaXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0aWYgKHRoaXMub3B0
aW9ucy5lbmNvZGUpIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRpZiAo
dGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0aGlzLm9wdGlvbnMu
ZG9tYWluO1xuXHRcdGlmICh0aGlzLm9wdGlvbnMucGF0aCkgdmFsdWUgKz0gJzsgcGF0aD0nICsg
dGhpcy5vcHRpb25zLnBhdGg7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7XG5cdFx0
XHR2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1l
KCkgKyB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcblx0XHRc
dHZhbHVlICs9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9HTVRTdHJpbmcoKTtcblx0XHR9XG5cdFx0
aWYgKHRoaXMub3B0aW9ucy5zZWN1cmUpIHZhbHVlICs9ICc7IHNlY3VyZSc7XG5cdFx0aWYgKHRo
aXMub3B0aW9ucy5odHRwT25seSkgdmFsdWUgKz0gJzsgSHR0cE9ubHknO1xuXHRcdHRoaXMub3B0
aW9ucy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVlO1xuXHRcdHJldHVy
biB0aGlzO1xuXHR9LFxuXG5cdHJlYWQ6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHZhbHVlID0gdGhp
cy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxcXFxzKicgKyB0aGlzLmtl
eS5lc2NhcGVSZWdFeHAoKSArICc9KFteO10qKScpO1xuXHRcdHJldHVybiAodmFsdWUpID8gZGVj
b2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVu
Y3Rpb24oKXtcblx0XHRuZXcgQ29va2llKHRoaXMua2V5LCBPYmplY3QubWVyZ2Uoe30sIHRoaXMu
b3B0aW9ucywge2R1cmF0aW9uOiAtMX0pKS53cml0ZSgnJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5c
dH1cblxufSk7XG5cbkNvb2tpZS53cml0ZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUsIG9wdGlvbnMp
e1xuXHRyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZhbHVlKTtcbn07XG5c
bkNvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXtcblx0cmV0dXJuIG5ldyBDb29raWUoa2V5KS5y
ZWFkKCk7XG59O1xuXG5Db29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7XG5c
dHJldHVybiBuZXcgQ29va2llKGtleSwgb3B0aW9ucykuZGlzcG9zZSgpO1xufTtcblxuLypcbi0t
LVxuXG5uYW1lOiBET01SZWFkeVxuXG5kZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIGN1c3RvbSBl
dmVudCBkb21yZWFkeS5cblxubGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuXG5cbnJlcXVpcmVz
OiBbQnJvd3NlciwgRWxlbWVudCwgRWxlbWVudC5FdmVudF1cblxucHJvdmlkZXM6IFtET01SZWFk
eSwgRG9tUmVhZHldXG5cbi4uLlxuKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpe1xu
XG52YXIgcmVhZHksXG5cdGxvYWRlZCxcblx0Y2hlY2tzID0gW10sXG5cdHNob3VsZFBvbGwsXG5c
dHRpbWVyLFxuXHR0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xu
XG52YXIgZG9tcmVhZHkgPSBmdW5jdGlvbigpe1xuXHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRp
ZiAoIXJlYWR5KXtcblx0XHRCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1ZTtcblx0XHRkb2N1
bWVudC5yZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KS5yZW1vdmVM
aXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTtcblx0XHRkb2N1bWVudC5maXJlRXZl
bnQoJ2RvbXJlYWR5Jyk7XG5cdFx0d2luZG93LmZpcmVFdmVudCgnZG9tcmVhZHknKTtcblx0fVxu
XHQvLyBjbGVhbnVwIHNjb3BlIHZhcnNcblx0ZG9jdW1lbnQgPSB3aW5kb3cgPSB0ZXN0RWxlbWVu
dCA9IG51bGw7XG59O1xuXG52YXIgY2hlY2sgPSBmdW5jdGlvbigpe1xuXHRmb3IgKHZhciBpID0g
Y2hlY2tzLmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXtcblx0XHRkb21yZWFkeSgpO1xu
XHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBwb2xsID0g
ZnVuY3Rpb24oKXtcblx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0aWYgKCFjaGVjaygpKSB0aW1l
ciA9IHNldFRpbWVvdXQocG9sbCwgMTApO1xufTtcblxuZG9jdW1lbnQuYWRkTGlzdGVuZXIoJ0RP
TUNvbnRlbnRMb2FkZWQnLCBkb21yZWFkeSk7XG5cbi8qPGx0SUU4PiovXG4vLyBkb1Njcm9sbCB0
ZWNobmlxdWUgYnkgRGllZ28gUGVyaW5pIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNv
bnRlbnRMb2FkZWQvXG4vLyB0ZXN0RWxlbWVudC5kb1Njcm9sbCgpIHRocm93cyB3aGVuIHRoZSBE
T00gaXMgbm90IHJlYWR5LCBvbmx5IGluIHRoZSB0b3Agd2luZG93XG52YXIgZG9TY3JvbGxXb3Jr
cyA9IGZ1bmN0aW9uKCl7XG5cdHRyeSB7XG5cdFx0dGVzdEVsZW1lbnQuZG9TY3JvbGwoKTtcblx0
XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSl7fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuLy8g
SWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0byBkZXRlcm1pbmUg
ZG9tcmVhZHlcbi8vICAgZS5nLiBpbiBhbiBpZnJhbWVcbmlmICh0ZXN0RWxlbWVudC5kb1Njcm9s
bCAmJiAhZG9TY3JvbGxXb3JrcygpKXtcblx0Y2hlY2tzLnB1c2goZG9TY3JvbGxXb3Jrcyk7XG5c
dHNob3VsZFBvbGwgPSB0cnVlO1xufVxuLyo8L2x0SUU4PiovXG5cbmlmIChkb2N1bWVudC5yZWFk
eVN0YXRlKSBjaGVja3MucHVzaChmdW5jdGlvbigpe1xuXHR2YXIgc3RhdGUgPSBkb2N1bWVudC5y
ZWFkeVN0YXRlO1xuXHRyZXR1cm4gKHN0YXRlID09ICdsb2FkZWQnIHx8IHN0YXRlID09ICdjb21w
bGV0ZScpO1xufSk7XG5cbmlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBkb2N1bWVudCkgZG9j
dW1lbnQuYWRkTGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVjayk7XG5lbHNlIHNob3Vs
ZFBvbGwgPSB0cnVlO1xuXG5pZiAoc2hvdWxkUG9sbCkgcG9sbCgpO1xuXG5FbGVtZW50LkV2ZW50
cy5kb21yZWFkeSA9IHtcblx0b25BZGQ6IGZ1bmN0aW9uKGZuKXtcblx0XHRpZiAocmVhZHkpIGZu
LmNhbGwodGhpcyk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSB0aGF0IGRvbXJlYWR5IGZpcmVz
IGJlZm9yZSBsb2FkXG5FbGVtZW50LkV2ZW50cy5sb2FkID0ge1xuXHRiYXNlOiAnbG9hZCcsXG5c
dG9uQWRkOiBmdW5jdGlvbihmbil7XG5cdFx0aWYgKGxvYWRlZCAmJiB0aGlzID09IHdpbmRvdykg
Zm4uY2FsbCh0aGlzKTtcblx0fSxcblx0Y29uZGl0aW9uOiBmdW5jdGlvbigpe1xuXHRcdGlmICh0
aGlzID09IHdpbmRvdyl7XG5cdFx0XHRkb21yZWFkeSgpO1xuXHRcdFx0ZGVsZXRlIEVsZW1lbnQu
RXZlbnRzLmxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG4vLyBUaGlz
IGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudFxud2luZG93LmFkZEV2ZW50KCdsb2Fk
JywgZnVuY3Rpb24oKXtcblx0bG9hZGVkID0gdHJ1ZTtcbn0pO1xuXG59KSh3aW5kb3csIGRvY3Vt
ZW50KTtcbiIKIAogLyoqKi8gfSksCiAvKiA0MTIgKi8KQEAgLTExMzg5NCwxMyArMTEzODk0LDEz
IEBAIG1vZHVsZS5leHBvcnRzID0gIi8qanNoaW50IHF1b3RtYXJrOiBmYWwKIC8qIDQyMCAqLwog
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIv
LyBsaWJzL2pxdWVyeS9qcXVlcnkuZC50c1xuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHly
aWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5z
ZVwiKTsgeW91IG1heSBub3QgdXNlXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxuTGljZW5zZSBhdCBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVEhJUyBDT0RFIElT
IFBST1ZJREVEICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWVxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhP
VVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJ
VExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcbk1FUkNIQU5UQUJMSVRZIE9S
IE5PTi1JTkZSSU5HRU1FTlQuXG5cblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2Ug
Zm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuYW5kIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLy8gVHlw
aW5nIGZvciB0aGUgalF1ZXJ5IGxpYnJhcnksIHZlcnNpb24gMS4xMC54IC8gMi4wLnhcbi8vIFBy
b2plY3Q6IGh0dHA6Ly9qcXVlcnkuY29tL1xuLy8gRGVmaW5pdGlvbnMgYnk6IEJvcmlzIFlhbmtv
diA8aHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292Lz4sIENocmlzdGlhbiBIb2ZmbWVpc3Rl
ciA8aHR0cHM6Ly9naXRodWIuY29tL2Nob2ZmbWVpc3Rlcj4sIFN0ZXZlIEZlbnRvbiwgRGl1bGxl
aSBHb21lcyA8aHR0cHM6Ly9naXRodWIuY29tL0RpdWxsZWk+LCBUYXNzIElsaW9wb3Vsb3MgPGh0
dHBzOi8vZ2l0aHViLmNvbS90YXNvaWxpPiwgSmFzb24gU3dlYXJpbmdlbiwgU2VhbiBIaWxsIDxo
dHRwczovL2dpdGh1Yi5jb20vc2VhbnNraT4sIEd1dXMgR29vc3NlbnMgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9HdXV6PiwgS2VsbHkgU3VtbWVybGluIDxodHRwczovL2dpdGh1Yi5jb20va3N1bW1lcmxp
bj4sIEJhc2FyYXQgQWxpIFN5ZWQgPGh0dHBzOi8vZ2l0aHViLmNvbS9iYXNhcmF0PiwgTmljaG9s
YXMgV29sdmVyc29uIDxodHRwczovL2dpdGh1Yi5jb20vbndvbHZlcnNvbj4sIERlcmVrIENpY2Vy
b25lIDxodHRwczovL2dpdGh1Yi5jb20vZGVyZWtjaWNlcm9uZT4sIEFuZHJldyBHYXNwYXIgPGh0
dHBzOi8vZ2l0aHViLmNvbS9BbmRyZXdHYXNwYXI+LCBKYW1lcyBIYXJyaXNvbiBGaXNoZXIgPGh0
dHBzOi8vZ2l0aHViLmNvbS9qYW1lc2hmaXNoZXI+LCBTZWlraWNoaSBLb25kbyA8aHR0cHM6Ly9n
aXRodWIuY29tL3NlaWtpY2hpPiwgQmVuamFtaW4gSmFja21hbiA8aHR0cHM6Ly9naXRodWIuY29t
L2JlbmphbWluamFja21hbj4sIFBvdWwgU29yZW5zZW4gPGh0dHBzOi8vZ2l0aHViLmNvbS9zMDkz
Mjk0PiwgSm9zaCBTdHJvYmwgPGh0dHBzOi8vZ2l0aHViLmNvbS9Kb3NoU3Ryb2JsPiwgSm9obiBS
ZWlsbHkgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb2hubnlyZWlsbHkvPlxuLy8gRGVmaW5pdGlvbnM6
IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxuLypcbiAg
ICBJbnRlcmZhY2UgZm9yIHRoZSBBSkFYIHNldHRpbmcgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUg
QUpBWCByZXF1ZXN0XG4qL1xuaW50ZXJmYWNlIEpRdWVyeUFqYXhTZXR0aW5ncyB7XG4gICAgLyoq
XG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzZW50IGluIHRoZSByZXF1ZXN0IGhlYWRlciB0aGF0
IHRlbGxzIHRoZSBzZXJ2ZXIgd2hhdCBraW5kIG9mIHJlc3BvbnNlIGl0IHdpbGwgYWNjZXB0IGlu
IHJldHVybi4gSWYgdGhlIGFjY2VwdHMgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRpb24sIGl0IGlz
IHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkgbWV0aG9kLlxu
ICAgICAqL1xuICAgIGFjY2VwdHM/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwg
YWxsIHJlcXVlc3RzIGFyZSBzZW50IGFzeW5jaHJvbm91c2x5IChpLmUuIHRoaXMgaXMgc2V0IHRv
IHRydWUgYnkgZGVmYXVsdCkuIElmIHlvdSBuZWVkIHN5bmNocm9ub3VzIHJlcXVlc3RzLCBzZXQg
dGhpcyBvcHRpb24gdG8gZmFsc2UuIENyb3NzLWRvbWFpbiByZXF1ZXN0cyBhbmQgZGF0YVR5cGU6
IFwianNvbnBcIiByZXF1ZXN0cyBkbyBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24u
IE5vdGUgdGhhdCBzeW5jaHJvbm91cyByZXF1ZXN0cyBtYXkgdGVtcG9yYXJpbHkgbG9jayB0aGUg
YnJvd3NlciwgZGlzYWJsaW5nIGFueSBhY3Rpb25zIHdoaWxlIHRoZSByZXF1ZXN0IGlzIGFjdGl2
ZS4gQXMgb2YgalF1ZXJ5IDEuOCwgdGhlIHVzZSBvZiBhc3luYzogZmFsc2Ugd2l0aCBqcVhIUiAo
JC5EZWZlcnJlZCkgaXMgZGVwcmVjYXRlZDsgeW91IG11c3QgdXNlIHRoZSBzdWNjZXNzL2Vycm9y
L2NvbXBsZXRlIGNhbGxiYWNrIG9wdGlvbnMgaW5zdGVhZCBvZiB0aGUgY29ycmVzcG9uZGluZyBt
ZXRob2RzIG9mIHRoZSBqcVhIUiBvYmplY3Qgc3VjaCBhcyBqcVhIUi5kb25lKCkgb3IgdGhlIGRl
cHJlY2F0ZWQganFYSFIuc3VjY2VzcygpLlxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtc
biAgICAvKipcbiAgICAgKiBBIHByZS1yZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2Fu
IGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVx
dWVzdCkgb2JqZWN0IGJlZm9yZSBpdCBpcyBzZW50LiBVc2UgdGhpcyB0byBzZXQgY3VzdG9tIGhl
YWRlcnMsIGV0Yy4gVGhlIGpxWEhSIGFuZCBzZXR0aW5ncyBvYmplY3RzIGFyZSBwYXNzZWQgYXMg
YXJndW1lbnRzLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuIFJldHVybmluZyBmYWxzZSBpbiB0aGUg
YmVmb3JlU2VuZCBmdW5jdGlvbiB3aWxsIGNhbmNlbCB0aGUgcmVxdWVzdC4gQXMgb2YgalF1ZXJ5
IDEuNSwgdGhlIGJlZm9yZVNlbmQgb3B0aW9uIHdpbGwgYmUgY2FsbGVkIHJlZ2FyZGxlc3Mgb2Yg
dGhlIHR5cGUgb2YgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBiZWZvcmVTZW5kPyAoanFYSFI6IEpR
dWVyeVhIUiwgc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IGFueTtcbiAgICAvKipcbiAg
ICAgKiBJZiBzZXQgdG8gZmFsc2UsIGl0IHdpbGwgZm9yY2UgcmVxdWVzdGVkIHBhZ2VzIG5vdCB0
byBiZSBjYWNoZWQgYnkgdGhlIGJyb3dzZXIuIE5vdGU6IFNldHRpbmcgY2FjaGUgdG8gZmFsc2Ug
d2lsbCBvbmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSEVBRCBhbmQgR0VUIHJlcXVlc3RzLiBJdCB3
b3JrcyBieSBhcHBlbmRpbmcgXCJfPXt0aW1lc3RhbXB9XCIgdG8gdGhlIEdFVCBwYXJhbWV0ZXJz
LiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBuZWVkZWQgZm9yIG90aGVyIHR5cGVzIG9mIHJlcXVlc3Rz
LCBleGNlcHQgaW4gSUU4IHdoZW4gYSBQT1NUIGlzIG1hZGUgdG8gYSBVUkwgdGhhdCBoYXMgYWxy
ZWFkeSBiZWVuIHJlcXVlc3RlZCBieSBhIEdFVC5cbiAgICAgKi9cbiAgICBjYWNoZT86IGJvb2xl
YW47XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVx
dWVzdCBmaW5pc2hlcyAoYWZ0ZXIgc3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVj
dXRlZCkuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3NlZCB0d28gYXJndW1lbnRzOiBUaGUganFYSFIg
KGluIGpRdWVyeSAxLjQueCwgWE1MSFRUUFJlcXVlc3QpIG9iamVjdCBhbmQgYSBzdHJpbmcgY2F0
ZWdvcml6aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgKFwic3VjY2Vzc1wiLCBcIm5vdG1v
ZGlmaWVkXCIsIFwiZXJyb3JcIiwgXCJ0aW1lb3V0XCIsIFwiYWJvcnRcIiwgb3IgXCJwYXJzZXJl
cnJvclwiKS4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIGNvbXBsZXRlIHNldHRpbmcgY2FuIGFjY2Vw
dCBhbiBhcnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4g
dHVybi4gVGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRlPyAoanFY
SFI6IEpRdWVyeVhIUiwgdGV4dFN0YXR1czogc3RyaW5nKTogYW55O1xuICAgIC8qKlxuICAgICAq
IEFuIG9iamVjdCBvZiBzdHJpbmcvcmVndWxhci1leHByZXNzaW9uIHBhaXJzIHRoYXQgZGV0ZXJt
aW5lIGhvdyBqUXVlcnkgd2lsbCBwYXJzZSB0aGUgcmVzcG9uc2UsIGdpdmVuIGl0cyBjb250ZW50
IHR5cGUuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udGVudHM/OiB7IFtr
ZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvL0FjY29yZGluZyB0byBqUXVlcnkuYWpheCBzb3Vy
Y2UgY29kZSwgYWpheCdzIG9wdGlvbiBhY3R1YWxseSBhbGxvd3MgY29udGVudFR5cGUgdG8gc2V0
IHRvIFwiZmFsc2VcIlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZp
bml0ZWx5VHlwZWQvaXNzdWVzLzc0MlxuICAgIC8qKlxuICAgICAqIFdoZW4gc2VuZGluZyBkYXRh
IHRvIHRoZSBzZXJ2ZXIsIHVzZSB0aGlzIGNvbnRlbnQgdHlwZS4gRGVmYXVsdCBpcyBcImFwcGxp
Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLCB3aGljaCBpcyBm
aW5lIGZvciBtb3N0IGNhc2VzLiBJZiB5b3UgZXhwbGljaXRseSBwYXNzIGluIGEgY29udGVudC10
eXBlIHRvICQuYWpheCgpLCB0aGVuIGl0IGlzIGFsd2F5cyBzZW50IHRvIHRoZSBzZXJ2ZXIgKGV2
ZW4gaWYgbm8gZGF0YSBpcyBzZW50KS4gVGhlIFczQyBYTUxIdHRwUmVxdWVzdCBzcGVjaWZpY2F0
aW9uIGRpY3RhdGVzIHRoYXQgdGhlIGNoYXJzZXQgaXMgYWx3YXlzIFVURi04OyBzcGVjaWZ5aW5n
IGFub3RoZXIgY2hhcnNldCB3aWxsIG5vdCBmb3JjZSB0aGUgYnJvd3NlciB0byBjaGFuZ2UgdGhl
IGVuY29kaW5nLlxuICAgICAqL1xuICAgIGNvbnRlbnRUeXBlPzogYW55O1xuICAgIC8qKlxuICAg
ICAqIFRoaXMgb2JqZWN0IHdpbGwgYmUgbWFkZSB0aGUgY29udGV4dCBvZiBhbGwgQWpheC1yZWxh
dGVkIGNhbGxiYWNrcy4gQnkgZGVmYXVsdCwgdGhlIGNvbnRleHQgaXMgYW4gb2JqZWN0IHRoYXQg
cmVwcmVzZW50cyB0aGUgYWpheCBzZXR0aW5ncyB1c2VkIGluIHRoZSBjYWxsICgkLmFqYXhTZXR0
aW5ncyBtZXJnZWQgd2l0aCB0aGUgc2V0dGluZ3MgcGFzc2VkIHRvICQuYWpheCkuXG4gICAgICov
XG4gICAgY29udGV4dD86IGFueTtcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhVHlwZS10by1kYXRhVHlwZSBjb252ZXJ0ZXJzLiBFYWNoIGNvbnZlcnRlcidzIHZhbHVl
IGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBvZiB0aGUg
cmVzcG9uc2UuICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY29udmVydGVycz86
IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3aXNoIHRv
IGZvcmNlIGEgY3Jvc3NEb21haW4gcmVxdWVzdCAoc3VjaCBhcyBKU09OUCkgb24gdGhlIHNhbWUg
ZG9tYWluLCBzZXQgdGhlIHZhbHVlIG9mIGNyb3NzRG9tYWluIHRvIHRydWUuIFRoaXMgYWxsb3dz
LCBmb3IgZXhhbXBsZSwgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24gdG8gYW5vdGhlciBkb21haW4u
ICh2ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgY3Jvc3NEb21haW4/OiBib29sZWFu
O1xuICAgIC8qKlxuICAgICAqIERhdGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLiBJdCBpcyBj
b252ZXJ0ZWQgdG8gYSBxdWVyeSBzdHJpbmcsIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nLiBJdCdz
IGFwcGVuZGVkIHRvIHRoZSB1cmwgZm9yIEdFVC1yZXF1ZXN0cy4gU2VlIHByb2Nlc3NEYXRhIG9w
dGlvbiB0byBwcmV2ZW50IHRoaXMgYXV0b21hdGljIHByb2Nlc3NpbmcuIE9iamVjdCBtdXN0IGJl
IEtleS9WYWx1ZSBwYWlycy4gSWYgdmFsdWUgaXMgYW4gQXJyYXksIGpRdWVyeSBzZXJpYWxpemVz
IG11bHRpcGxlIHZhbHVlcyB3aXRoIHNhbWUga2V5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUg
dHJhZGl0aW9uYWwgc2V0dGluZyAoZGVzY3JpYmVkIGJlbG93KS5cbiAgICAgKi9cbiAgICBkYXRh
PzogYW55O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBoYW5kbGUg
dGhlIHJhdyByZXNwb25zZSBkYXRhIG9mIFhNTEh0dHBSZXF1ZXN0LlRoaXMgaXMgYSBwcmUtZmls
dGVyaW5nIGZ1bmN0aW9uIHRvIHNhbml0aXplIHRoZSByZXNwb25zZS4gWW91IHNob3VsZCByZXR1
cm4gdGhlIHNhbml0aXplZCBkYXRhLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0d28gYXJndW1lbnRz
OiBUaGUgcmF3IGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIGFuZCB0aGUgJ2RhdGFUeXBl
JyBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgZGF0YUZpbHRlcj8gKGRhdGE6IGFueSwgdHk6IGFu
eSk6IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgeW91J3JlIGV4
cGVjdGluZyBiYWNrIGZyb20gdGhlIHNlcnZlci4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIGpRdWVy
eSB3aWxsIHRyeSB0byBpbmZlciBpdCBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlIG9mIHRoZSByZXNw
b25zZSAoYW4gWE1MIE1JTUUgdHlwZSB3aWxsIHlpZWxkIFhNTCwgaW4gMS40IEpTT04gd2lsbCB5
aWVsZCBhIEphdmFTY3JpcHQgb2JqZWN0LCBpbiAxLjQgc2NyaXB0IHdpbGwgZXhlY3V0ZSB0aGUg
c2NyaXB0LCBhbmQgYW55dGhpbmcgZWxzZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nKS5c
biAgICAgKi9cbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBmYWlscy4gVGhlIGZ1bmN0aW9uIHJlY2Vp
dmVzIHRocmVlIGFyZ3VtZW50czogVGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBS
ZXF1ZXN0KSBvYmplY3QsIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZXJyb3IgdGhh
dCBvY2N1cnJlZCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIG9iamVjdCwgaWYgb25lIG9jY3Vy
cmVkLiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKGJlc2lkZXMgbnVs
bCkgYXJlIFwidGltZW91dFwiLCBcImVycm9yXCIsIFwiYWJvcnRcIiwgYW5kIFwicGFyc2VyZXJy
b3JcIi4gV2hlbiBhbiBIVFRQIGVycm9yIG9jY3VycywgZXJyb3JUaHJvd24gcmVjZWl2ZXMgdGhl
IHRleHR1YWwgcG9ydGlvbiBvZiB0aGUgSFRUUCBzdGF0dXMsIHN1Y2ggYXMgXCJOb3QgRm91bmRc
IiBvciBcIkludGVybmFsIFNlcnZlciBFcnJvci5cIiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgZXJy
b3Igc2V0dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlv
biB3aWxsIGJlIGNhbGxlZCBpbiB0dXJuLiBOb3RlOiBUaGlzIGhhbmRsZXIgaXMgbm90IGNhbGxl
ZCBmb3IgY3Jvc3MtZG9tYWluIHNjcmlwdCBhbmQgY3Jvc3MtZG9tYWluIEpTT05QIHJlcXVlc3Rz
LiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgZXJyb3I/IChqcVhIUjogSlF1
ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGVycm9yVGhyb3c6IHN0cmluZyk6IGFueTtcbiAg
ICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHRyaWdnZXIgZ2xvYmFsIEFqYXggZXZlbnQgaGFuZGxl
cnMgZm9yIHRoaXMgcmVxdWVzdC4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIHRv
IHByZXZlbnQgdGhlIGdsb2JhbCBoYW5kbGVycyBsaWtlIGFqYXhTdGFydCBvciBhamF4U3RvcCBm
cm9tIGJlaW5nIHRyaWdnZXJlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMg
QWpheCBFdmVudHMuXG4gICAgICovXG4gICAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgICAvKipcbiAg
ICAgKiBBbiBvYmplY3Qgb2YgYWRkaXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzIHRvIHNl
bmQgYWxvbmcgd2l0aCByZXF1ZXN0cyB1c2luZyB0aGUgWE1MSHR0cFJlcXVlc3QgdHJhbnNwb3J0
LiBUaGUgaGVhZGVyIFgtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBh
ZGRlZCwgYnV0IGl0cyBkZWZhdWx0IFhNTEh0dHBSZXF1ZXN0IHZhbHVlIGNhbiBiZSBjaGFuZ2Vk
IGhlcmUuIFZhbHVlcyBpbiB0aGUgaGVhZGVycyBzZXR0aW5nIGNhbiBhbHNvIGJlIG92ZXJ3cml0
dGVuIGZyb20gd2l0aGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uLiAodmVyc2lvbiBhZGRlZDog
MS41KVxuICAgICAqL1xuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAg
ICAvKipcbiAgICAgKiBBbGxvdyB0aGUgcmVxdWVzdCB0byBiZSBzdWNjZXNzZnVsIG9ubHkgaWYg
dGhlIHJlc3BvbnNlIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJlcXVlc3QuIFRoaXMgaXMg
ZG9uZSBieSBjaGVja2luZyB0aGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIuIERlZmF1bHQgdmFsdWUg
aXMgZmFsc2UsIGlnbm9yaW5nIHRoZSBoZWFkZXIuIEluIGpRdWVyeSAxLjQgdGhpcyB0ZWNobmlx
dWUgYWxzbyBjaGVja3MgdGhlICdldGFnJyBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlciB0byBjYXRj
aCB1bm1vZGlmaWVkIGRhdGEuXG4gICAgICovXG4gICAgaWZNb2RpZmllZD86IGJvb2xlYW47XG4g
ICAgLyoqXG4gICAgICogQWxsb3cgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdG8gYmUgcmVjb2du
aXplZCBhcyBcImxvY2FsLFwiIChlLmcuIHRoZSBmaWxlc3lzdGVtKSwgZXZlbiBpZiBqUXVlcnkg
ZG9lcyBub3QgcmVjb2duaXplIGl0IGFzIHN1Y2ggYnkgZGVmYXVsdC4gVGhlIGZvbGxvd2luZyBw
cm90b2NvbHMgYXJlIGN1cnJlbnRseSByZWNvZ25pemVkIGFzIGxvY2FsOiBmaWxlLCAqLWV4dGVu
c2lvbiwgYW5kIHdpZGdldC4gSWYgdGhlIGlzTG9jYWwgc2V0dGluZyBuZWVkcyBtb2RpZmljYXRp
b24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIHNvIG9uY2UgaW4gdGhlICQuYWpheFNldHVwKCkg
bWV0aG9kLiAodmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgaXNMb2NhbD86IGJv
b2xlYW47XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5h
bWUgaW4gYSBqc29ucCByZXF1ZXN0LiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9m
ICdjYWxsYmFjaycgaW4gdGhlICdjYWxsYmFjaz0/JyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcg
aW4gdGhlIHVybC4gU28ge2pzb25wOidvbkpTT05QTG9hZCd9IHdvdWxkIHJlc3VsdCBpbiAnb25K
U09OUExvYWQ9PycgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIuIEFzIG9mIGpRdWVyeSAxLjUsIHNldHRp
bmcgdGhlIGpzb25wIG9wdGlvbiB0byBmYWxzZSBwcmV2ZW50cyBqUXVlcnkgZnJvbSBhZGRpbmcg
dGhlIFwiP2NhbGxiYWNrXCIgc3RyaW5nIHRvIHRoZSBVUkwgb3IgYXR0ZW1wdGluZyB0byB1c2Ug
XCI9P1wiIGZvciB0cmFuc2Zvcm1hdGlvbi4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIGFsc28g
ZXhwbGljaXRseSBzZXQgdGhlIGpzb25wQ2FsbGJhY2sgc2V0dGluZy4gRm9yIGV4YW1wbGUsIHsg
anNvbnA6IGZhbHNlLCBqc29ucENhbGxiYWNrOiBcImNhbGxiYWNrTmFtZVwiIH1cbiAgICAgKi9c
biAgICBqc29ucD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBjYWxsYmFj
ayBmdW5jdGlvbiBuYW1lIGZvciBhIEpTT05QIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1
c2VkIGluc3RlYWQgb2YgdGhlIHJhbmRvbSBuYW1lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5
IGpRdWVyeS4gSXQgaXMgcHJlZmVyYWJsZSB0byBsZXQgalF1ZXJ5IGdlbmVyYXRlIGEgdW5pcXVl
IG5hbWUgYXMgaXQnbGwgbWFrZSBpdCBlYXNpZXIgdG8gbWFuYWdlIHRoZSByZXF1ZXN0cyBhbmQg
cHJvdmlkZSBjYWxsYmFja3MgYW5kIGVycm9yIGhhbmRsaW5nLiBZb3UgbWF5IHdhbnQgdG8gc3Bl
Y2lmeSB0aGUgY2FsbGJhY2sgd2hlbiB5b3Ugd2FudCB0byBlbmFibGUgYmV0dGVyIGJyb3dzZXIg
Y2FjaGluZyBvZiBHRVQgcmVxdWVzdHMuIEFzIG9mIGpRdWVyeSAxLjUsIHlvdSBjYW4gYWxzbyB1
c2UgYSBmdW5jdGlvbiBmb3IgdGhpcyBzZXR0aW5nLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBv
ZiBqc29ucENhbGxiYWNrIGlzIHNldCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rp
b24uXG4gICAgICovXG4gICAganNvbnBDYWxsYmFjaz86IGFueTtcbiAgICAvKipcbiAgICAgKiBB
IG1pbWUgdHlwZSB0byBvdmVycmlkZSB0aGUgWEhSIG1pbWUgdHlwZS4gKHZlcnNpb24gYWRkZWQ6
IDEuNS4xKVxuICAgICAqL1xuICAgIG1pbWVUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAq
IEEgcGFzc3dvcmQgdG8gYmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRv
IGFuIEhUVFAgYWNjZXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgcGFz
c3dvcmQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGF0YSBwYXNzZWQg
aW4gdG8gdGhlIGRhdGEgb3B0aW9uIGFzIGFuIG9iamVjdCAodGVjaG5pY2FsbHksIGFueXRoaW5n
IG90aGVyIHRoYW4gYSBzdHJpbmcpIHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBp
bnRvIGEgcXVlcnkgc3RyaW5nLCBmaXR0aW5nIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBc
ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLiBJZiB5b3Ugd2FudCB0byBzZW5k
IGEgRE9NRG9jdW1lbnQsIG9yIG90aGVyIG5vbi1wcm9jZXNzZWQgZGF0YSwgc2V0IHRoaXMgb3B0
aW9uIHRvIGZhbHNlLlxuICAgICAqL1xuICAgIHByb2Nlc3NEYXRhPzogYm9vbGVhbjtcbiAgICAv
KipcbiAgICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgXCJzY3JpcHRcIiB0cmFuc3BvcnQgaXMg
dXNlZCAoZS5nLiwgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIHdpdGggXCJqc29ucFwiIG9yIFwic2Ny
aXB0XCIgZGF0YVR5cGUgYW5kIFwiR0VUXCIgdHlwZSkuIFNldHMgdGhlIGNoYXJzZXQgYXR0cmli
dXRlIG9uIHRoZSBzY3JpcHQgdGFnIHVzZWQgaW4gdGhlIHJlcXVlc3QuIFVzZWQgd2hlbiB0aGUg
Y2hhcmFjdGVyIHNldCBvbiB0aGUgbG9jYWwgcGFnZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9u
ZSBvbiB0aGUgcmVtb3RlIHNjcmlwdC5cbiAgICAgKi9cbiAgICBzY3JpcHRDaGFyc2V0Pzogc3Ry
aW5nO1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBudW1lcmljIEhUVFAgY29kZXMgYW5k
IGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzcG9uc2UgaGFzIHRoZSBjb3JyZXNw
b25kaW5nIGNvZGUuIGYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHN0YXR1cyBjb2Rl
IGZ1bmN0aW9ucyB0YWtlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJh
Y2s7IGlmIGl0IHJlc3VsdHMgaW4gYW4gZXJyb3IgKGluY2x1ZGluZyAzeHggcmVkaXJlY3QpLCB0
aGV5IHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZXJyb3IgY2FsbGJhY2suICh2ZXJz
aW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgc3RhdHVzQ29kZT86IHsgW2tleTogc3RyaW5n
XTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRo
ZSByZXF1ZXN0IHN1Y2NlZWRzLiBUaGUgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhyZWUgYXJndW1l
bnRzOiBUaGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIsIGZvcm1hdHRlZCBhY2NvcmRp
bmcgdG8gdGhlIGRhdGFUeXBlIHBhcmFtZXRlcjsgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc3Rh
dHVzOyBhbmQgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40LngsIFhNTEh0dHBSZXF1ZXN0KSBvYmpl
Y3QuIEFzIG9mIGpRdWVyeSAxLjUsIHRoZSBzdWNjZXNzIHNldHRpbmcgY2FuIGFjY2VwdCBhbiBh
cnJheSBvZiBmdW5jdGlvbnMuIEVhY2ggZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdHVybi4g
VGhpcyBpcyBhbiBBamF4IEV2ZW50LlxuICAgICAqL1xuICAgIHN1Y2Nlc3M/IChkYXRhOiBhbnks
IHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUik6IGFueTtcbiAgICAvKipcbiAg
ICAgKiBTZXQgYSB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0aGUgcmVxdWVzdC4gVGhp
cyB3aWxsIG92ZXJyaWRlIGFueSBnbG9iYWwgdGltZW91dCBzZXQgd2l0aCAkLmFqYXhTZXR1cCgp
LiBUaGUgdGltZW91dCBwZXJpb2Qgc3RhcnRzIGF0IHRoZSBwb2ludCB0aGUgJC5hamF4IGNhbGwg
aXMgbWFkZTsgaWYgc2V2ZXJhbCBvdGhlciByZXF1ZXN0cyBhcmUgaW4gcHJvZ3Jlc3MgYW5kIHRo
ZSBicm93c2VyIGhhcyBubyBjb25uZWN0aW9ucyBhdmFpbGFibGUsIGl0IGlzIHBvc3NpYmxlIGZv
ciBhIHJlcXVlc3QgdG8gdGltZSBvdXQgYmVmb3JlIGl0IGNhbiBiZSBzZW50LiBJbiBqUXVlcnkg
MS40LnggYW5kIGJlbG93LCB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IHdpbGwgYmUgaW4gYW4g
aW52YWxpZCBzdGF0ZSBpZiB0aGUgcmVxdWVzdCB0aW1lcyBvdXQ7IGFjY2Vzc2luZyBhbnkgb2Jq
ZWN0IG1lbWJlcnMgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gSW4gRmlyZWZveCAzLjArIG9ubHks
IHNjcmlwdCBhbmQgSlNPTlAgcmVxdWVzdHMgY2Fubm90IGJlIGNhbmNlbGxlZCBieSBhIHRpbWVv
dXQ7IHRoZSBzY3JpcHQgd2lsbCBydW4gZXZlbiBpZiBpdCBhcnJpdmVzIGFmdGVyIHRoZSB0aW1l
b3V0IHBlcmlvZC5cbiAgICAgKi9cbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIC8qKlxuICAg
ICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSB0cmFkaXRpb25hbCBz
dHlsZSBvZiBwYXJhbSBzZXJpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHRyYWRpdGlvbmFsPzog
Ym9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiByZXF1ZXN0IHRvIG1ha2UgKFwi
UE9TVFwiIG9yIFwiR0VUXCIpLCBkZWZhdWx0IGlzIFwiR0VUXCIuIE5vdGU6IE90aGVyIEhUVFAg
cmVxdWVzdCBtZXRob2RzLCBzdWNoIGFzIFBVVCBhbmQgREVMRVRFLCBjYW4gYWxzbyBiZSB1c2Vk
IGhlcmUsIGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAgICAg
Ki9cbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqL1xuICAgIHVy
bD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBIHVzZXJuYW1lIHRvIGJlIHVzZWQgd2l0aCBY
TUxIdHRwUmVxdWVzdCBpbiByZXNwb25zZSB0byBhbiBIVFRQIGFjY2VzcyBhdXRoZW50aWNhdGlv
biByZXF1ZXN0LlxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAg
ICAqIENhbGxiYWNrIGZvciBjcmVhdGluZyB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LiBEZWZh
dWx0cyB0byB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGF2YWlsYWJsZSAoSUUpLCB0aGUgWE1MSHR0
cFJlcXVlc3Qgb3RoZXJ3aXNlLiBPdmVycmlkZSB0byBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVu
dGF0aW9uIGZvciBYTUxIdHRwUmVxdWVzdCBvciBlbmhhbmNlbWVudHMgdG8gdGhlIGZhY3Rvcnku
XG4gICAgICovXG4gICAgeGhyPzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBm
aWVsZE5hbWUtZmllbGRWYWx1ZSBwYWlycyB0byBzZXQgb24gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0
LiBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgaXQgdG8gc2V0IHdpdGhDcmVkZW50aWFscyB0byB0
cnVlIGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMgaWYgbmVlZGVkLiBJbiBqUXVlcnkgMS41LCB0
aGUgd2l0aENyZWRlbnRpYWxzIHByb3BlcnR5IHdhcyBub3QgcHJvcGFnYXRlZCB0byB0aGUgbmF0
aXZlIFhIUiBhbmQgdGh1cyBDT1JTIHJlcXVlc3RzIHJlcXVpcmluZyBpdCB3b3VsZCBpZ25vcmUg
dGhpcyBmbGFnLiBGb3IgdGhpcyByZWFzb24sIHdlIHJlY29tbWVuZCB1c2luZyBqUXVlcnkgMS41
LjErIHNob3VsZCB5b3UgcmVxdWlyZSB0aGUgdXNlIG9mIGl0LiAodmVyc2lvbiBhZGRlZDogMS41
LjEpXG4gICAgICovXG4gICAgeGhyRmllbGRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59
XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUganFYSFIgb2JqZWN0XG4qL1xuaW50ZXJmYWNl
IEpRdWVyeVhIUiBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0LCBKUXVlcnlQcm9taXNlPGFueT4ge1xu
ICAgIG92ZXJyaWRlTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGFueTtcbiAgICBhYm9ydChz
dGF0dXNUZXh0Pzogc3RyaW5nKTogdm9pZDtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRo
ZSBKUXVlcnkgY2FsbGJhY2tcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5Q2FsbGJhY2sge1xuICAgIGFk
ZCguLi5jYWxsYmFja3M6IGFueVtdKTogYW55O1xuICAgIGRpc2FibGUoKTogYW55O1xuICAgIGVt
cHR5KCk6IGFueTtcbiAgICBmaXJlKC4uLmFyZ3VtZW50czogYW55W10pOiBhbnk7XG4gICAgZmly
ZWQoKTogYm9vbGVhbjtcbiAgICBmaXJlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtd
KTogYW55O1xuICAgIGhhcyhjYWxsYmFjazogYW55KTogYm9vbGVhbjtcbiAgICBsb2NrKCk6IGFu
eTtcbiAgICBsb2NrZWQoKTogYm9vbGVhbjtcbiAgICByZW1vdmUoLi4uY2FsbGJhY2tzOiBhbnlb
XSk6IGFueTtcbn1cblxuLypcbiAgICBBbGxvd3MgalF1ZXJ5IFByb21pc2VzIHRvIGludGVyb3Ag
d2l0aCBub24talF1ZXJ5IHByb21pc2VzXG4qL1xuaW50ZXJmYWNlIEpRdWVyeUdlbmVyaWNQcm9t
aXNlPFQ+IHtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBVLCBvblJlamVj
dD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xuICAgIHRo
ZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBv
blJlamVjdD86IChyZWFzb246IGFueSkgPT4gVSk6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xu
ICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKHJlYXNv
bjogYW55KSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNl
PFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblJlamVjdD86IChyZWFzb246IGFueSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT4pOiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2Ug
Zm9yIHRoZSBKUXVlcnkgcHJvbWlzZSwgcGFydCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2Ug
SlF1ZXJ5UHJvbWlzZTxUPiB7XG4gICAgLy8gR2VuZXJpYyB2ZXJzaW9ucyBvZiBjYWxsYmFja3Nc
biAgICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xu
ICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICBm
YWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jl
c3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IFRbXSk6IEpRdWVyeVByb21pc2U8VD47XG5cbiAgICBh
bHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAg
ZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgZmFp
bCguLi5mYWlsQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeVByb21pc2U8VD47XG4gICAgcHJvZ3Jl
c3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAg
IC8vIERlcHJlY2F0ZWQgLSBnaXZlbiBubyB0eXBpbmdzXG4gICAgcGlwZShkb25lRmlsdGVyPzog
KHg6IGFueSkgPT4gYW55LCBmYWlsRmlsdGVyPzogKHg6IGFueSkgPT4gYW55LCBwcm9ncmVzc0Zp
bHRlcj86ICh4OiBhbnkpID0+IGFueSk6IEpRdWVyeVByb21pc2U8YW55PjtcblxuICAgIHRoZW48
VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFu
eVtdKSA9PiBVLCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBK
UXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+
IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQ
cm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQpID0+IFUsIG9uUmVq
ZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25Q
cm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8
VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG5cbiAgICAvLyBCZWNhdXNlIEpRdWVyeSBQcm9taXNlcyBTdWNr
XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVj
dD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lv
bjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZp
bGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWpl
Y3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Np
b246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxm
aWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55
W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNz
aW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVs
ZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJl
amVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9u
UHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNl
PFU+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBkZWZlcnJlZCwgcGFy
dCBvZiBjYWxsYmFja3NcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5RGVmZXJyZWQ8VD4gZXh0ZW5kcyBK
UXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25zIG9mIGNhbGxiYWNrc1xu
ICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAg
ZmFpbCguLi5mYWlsQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBwcm9n
cmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAg
ICBhbHdheXMoLi4uYWx3YXlzQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xu
ICAgIGRvbmUoLi4uZG9uZUNhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAg
ICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAg
cHJvZ3Jlc3MoLi4ucHJvZ3Jlc3NDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47
XG5cbiAgICBub3RpZnkoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICBu
b3RpZnlXaXRoKGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxU
PjtcblxuICAgIHJlamVjdCguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAg
IHJlamVjdFdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuXG4gICAgcmVzb2x2ZSh2YWw6IFQpOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAgICByZXNv
bHZlKC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG4gICAgcmVzb2x2ZVdpdGgo
Y29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuICAgIHN0
YXRlKCk6IHN0cmluZztcblxuICAgIHByb21pc2UodGFyZ2V0PzogYW55KTogSlF1ZXJ5UHJvbWlz
ZTxUPjtcbn1cblxuLypcbiAgICBJbnRlcmZhY2Ugb2YgdGhlIEpRdWVyeSBleHRlbnNpb24gb2Yg
dGhlIFczQyBldmVudCBvYmplY3RcbiovXG5cbmludGVyZmFjZSBCYXNlSlF1ZXJ5RXZlbnRPYmpl
Y3QgZXh0ZW5kcyBFdmVudCB7XG4gICAgZGF0YTogYW55O1xuICAgIGRlbGVnYXRlVGFyZ2V0OiBF
bGVtZW50O1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuO1xuICAgIGlzSW1tZWRp
YXRlUHJvcG9nYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XG4gICAgaXNQcm9wYWdhdGlvblN0b3Bw
ZWQoKTogYm9vbGVhbjtcbiAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICBwcmV2ZW50RGVmYXVs
dCgpOiBhbnk7XG4gICAgcmVsYXRlZFRhcmdldDogRWxlbWVudDtcbiAgICByZXN1bHQ6IGFueTtc
biAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTogdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRp
b24oKTogdm9pZDtcbiAgICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAg
d2hpY2g6IG51bWJlcjtcbiAgICBtZXRhS2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1
ZXJ5SW5wdXRFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCB7XG4gICAg
YWx0S2V5OiBib29sZWFuO1xuICAgIGN0cmxLZXk6IGJvb2xlYW47XG4gICAgbWV0YUtleTogYm9v
bGVhbjtcbiAgICBzaGlmdEtleTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeU1vdXNl
RXZlbnRPYmplY3QgZXh0ZW5kcyBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IHtcbiAgICBidXR0b246
IG51bWJlcjtcbiAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAg
IG9mZnNldFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgcGFnZVg6IG51bWJl
cjtcbiAgICBwYWdlWTogbnVtYmVyO1xuICAgIHNjcmVlblg6IG51bWJlcjtcbiAgICBzY3JlZW5Z
OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBKUXVlcnlLZXlFdmVudE9iamVjdCBleHRlbmRzIEpR
dWVyeUlucHV0RXZlbnRPYmplY3Qge1xuICAgIGNoYXI6IGFueTtcbiAgICBjaGFyQ29kZTogbnVt
YmVyO1xuICAgIGtleTogYW55O1xuICAgIGtleUNvZGU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNl
IEpRdWVyeVBvcFN0YXRlRXZlbnRPYmplY3QgZXh0ZW5kcyBCYXNlSlF1ZXJ5RXZlbnRPYmplY3Qg
e1xuICAgIG9yaWdpbmFsRXZlbnQ6IFBvcFN0YXRlRXZlbnQ7XG59XG5cbmludGVyZmFjZSBKUXVl
cnlFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVlcnlFdmVudE9iamVjdCwgSlF1ZXJ5SW5wdXRF
dmVudE9iamVjdCwgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCwgSlF1ZXJ5S2V5RXZlbnRPYmplY3Qs
IEpRdWVyeVBvcFN0YXRlRXZlbnRPYmplY3Qge1xufVxuXG4vKlxuICAgIENvbGxlY3Rpb24gb2Yg
cHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBicm93c2VyXG4qL1xuXG5pbnRlcmZhY2UgSlF1ZXJ5
U3VwcG9ydCB7XG4gICAgYWpheD86IGJvb2xlYW47XG4gICAgYm94TW9kZWw/OiBib29sZWFuO1xu
ICAgIGNoYW5nZUJ1YmJsZXM/OiBib29sZWFuO1xuICAgIGNoZWNrQ2xvbmU/OiBib29sZWFuO1xu
ICAgIGNoZWNrT24/OiBib29sZWFuO1xuICAgIGNvcnM/OiBib29sZWFuO1xuICAgIGNzc0Zsb2F0
PzogYm9vbGVhbjtcbiAgICBocmVmTm9ybWFsaXplZD86IGJvb2xlYW47XG4gICAgaHRtbFNlcmlh
bGl6ZT86IGJvb2xlYW47XG4gICAgbGVhZGluZ1doaXRlc3BhY2U/OiBib29sZWFuO1xuICAgIG5v
Q2xvbmVDaGVja2VkPzogYm9vbGVhbjtcbiAgICBub0Nsb25lRXZlbnQ/OiBib29sZWFuO1xuICAg
IG9wYWNpdHk/OiBib29sZWFuO1xuICAgIG9wdERpc2FibGVkPzogYm9vbGVhbjtcbiAgICBvcHRT
ZWxlY3RlZD86IGJvb2xlYW47XG4gICAgc2NyaXB0RXZhbD8gKCk6IGJvb2xlYW47XG4gICAgc3R5
bGU/OiBib29sZWFuO1xuICAgIHN1Ym1pdEJ1YmJsZXM/OiBib29sZWFuO1xuICAgIHRib2R5Pzog
Ym9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeVBhcmFtIHtcbiAgICAob2JqOiBhbnkpOiBz
dHJpbmc7XG4gICAgKG9iajogYW55LCB0cmFkaXRpb25hbDogYm9vbGVhbik6IHN0cmluZztcbn1c
blxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gY29uc3RydWN0IGpRdWVyeSBldmVudHMg
KHdpdGggJC5FdmVudCkuIEl0IGlzXG4gKiBkZWZpbmVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBp
bmxpbmUgaW4gSlF1ZXJ5U3RhdGljIHRvIGFsbG93XG4gKiBvdmVycmlkaW5nIHRoZSBjb25zdHJ1
Y3Rpb24gZnVuY3Rpb24gd2l0aCBzcGVjaWZpYyBzdHJpbmdzXG4gKiByZXR1cm5pbmcgc3BlY2lm
aWMgZXZlbnQgb2JqZWN0cy5cbiAqL1xuaW50ZXJmYWNlIEpRdWVyeUV2ZW50Q29uc3RydWN0b3Ig
e1xuICAgIChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVydGllcz86IGFueSk6IEpRdWVyeUV2ZW50
T2JqZWN0O1xuICAgIG5ldyAobmFtZTogc3RyaW5nLCBldmVudFByb3BlcnRpZXM/OiBhbnkpOiBK
UXVlcnlFdmVudE9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIHVzZWQgdG8gc3Bl
Y2lmeSBlYXNpbmcgZnVuY3Rpb25zLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RWFzaW5nIHtcbiAg
ICBsaW5lYXIocDogbnVtYmVyKTogbnVtYmVyO1xuICAgIHN3aW5nKHA6IG51bWJlcik6IG51bWJl
cjtcbn1cblxuLypcbiAgICBTdGF0aWMgbWVtYmVycyBvZiBqUXVlcnkgKHRob3NlIG9uICQgYW5k
IGpRdWVyeSB0aGVtc2VsdmVzKVxuKi9cbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuXG4gICAg
LyoqXG4gICAgICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgSFRUUCAoQWpheCkgcmVxdWVzdC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMg
dGhhdCBjb25maWd1cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25h
bC4gQSBkZWZhdWx0IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgp
LlxuICAgICAqL1xuICAgIGFqYXgoc2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVy
eVhIUjtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChBamF4
KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc2V0
dGluZ3MgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRoZSBBamF4IHJl
cXVlc3QuIEFsbCBzZXR0aW5ncyBhcmUgb3B0aW9uYWwuIEEgZGVmYXVsdCBjYW4gYmUgc2V0IGZv
ciBhbnkgb3B0aW9uIHdpdGggJC5hamF4U2V0dXAoKS5cbiAgICAgKi9cbiAgICBhamF4KHVybDog
c3RyaW5nLCBzZXR0aW5ncz86IEpRdWVyeUFqYXhTZXR0aW5ncyk6IEpRdWVyeVhIUjtcblxuICAg
IC8qKlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlzdGlu
ZyBvcHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkgYXJl
IHByb2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZXMg
QW4gb3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVk
IGRhdGFUeXBlc1xuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciB0byBzZXQgZGVmYXVs
dCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGFqYXhQcmVm
aWx0ZXIoZGF0YVR5cGVzOiBzdHJpbmcsIGhhbmRsZXI6IChvcHRzOiBhbnksIG9yaWdpbmFsT3B0
czogSlF1ZXJ5QWpheFNldHRpbmdzLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiB2b2lkO1xu
ICAgIC8qKlxuICAgICAqIEhhbmRsZSBjdXN0b20gQWpheCBvcHRpb25zIG9yIG1vZGlmeSBleGlz
dGluZyBvcHRpb25zIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudCBhbmQgYmVmb3JlIHRoZXkg
YXJlIHByb2Nlc3NlZCBieSAkLmFqYXgoKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgaGFuZGxlciB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4IHJlcXVlc3Rz
LlxuICAgICAqL1xuICAgIGFqYXhQcmVmaWx0ZXIoaGFuZGxlcjogKG9wdHM6IGFueSwgb3JpZ2lu
YWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IHZv
aWQ7XG5cbiAgICBhamF4U2V0dGluZ3M6IEpRdWVyeUFqYXhTZXR0aW5ncztcblxuICAgICAvKipc
biAgICAgICogU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBmdXR1cmUgQWpheCByZXF1ZXN0cy4gSXRz
IHVzZSBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSBvcHRpb25z
IEEgc2V0IG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBamF4
IHJlcXVlc3QuIEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbC5cbiAgICAgICovXG4gICAgYWpheFNl
dHVwKG9wdGlvbnM6IEpRdWVyeUFqYXhTZXR0aW5ncyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAg
KiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdo
aWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFj
ayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAg
ICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNl
cnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBo
dG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/
OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhl
IHNlcnZlciB1c2luZyBhIEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
dXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBz
ZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlz
IHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNj
ZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBz
dWNjZWVkcy5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3Rl
ZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24s
IHNjcmlwdCwgb3IgaHRtbCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzog
T2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjog
SlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8q
KlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdFVCByZXF1
ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBV
UkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBs
YWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUg
cmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQg
aXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFU
eXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJ
bnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xu
ICAgIGdldCh1cmw6IHN0cmluZywgZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnks
IHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86
IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBk
YXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUg
cmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rp
b24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAgKi9cbiAg
ICBnZXRKU09OKHVybDogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czog
c3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4g
ICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQg
SFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWlu
aW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0g
ZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIg
d2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0
aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4g
ICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0YT86IE9iamVjdCwgc3VjY2Vzcz86IChkYXRhOiBh
bnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5
WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgSlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2Vy
dmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwg
QSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQu
XG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2Vu
dCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mg
QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIGRhdGE/OiBzdHJpbmcsIHN1
Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIp
ID0+IGFueSk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2FkIGEgSmF2YVNjcmlwdCBm
aWxlIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QsIHRoZW4gZXhlY3V0
ZSBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUg
VVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mg
QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLlxuICAgICAqL1xuICAgIGdldFNjcmlwdCh1cmw6IHN0cmluZywgc3VjY2Vzcz86IChzY3Jp
cHQ6IHN0cmluZywgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnkp
OiBKUXVlcnlYSFI7XG5cbiAgICBwYXJhbTogSlF1ZXJ5UGFyYW07XG5cbiAgICAvKipcbiAgICAg
KiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVlc3QuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3
aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJh
Y2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVx
dWlyZWQgaWYgZGF0YVR5cGUgaXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNh
c2UuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJv
bSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3Jp
cHQsIHRleHQsIGh0bWwpLlxuICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIHN1Y2Nlc3M/
OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFu
eSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBk
YXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4g
ICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhl
IHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBz
dHJpbmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAg
KiBAcGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYg
dGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBi
dXQgY2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUg
dHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdl
bnQgR3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBw
b3N0KHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4
dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3Ry
aW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2
ZXIgdXNpbmcgYSBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwg
QSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQu
XG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Igc3RyaW5nIHRoYXQgaXMgc2Vu
dCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mg
QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBudWxsIGlu
IHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBl
Y3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpz
b24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0cmluZywg
ZGF0YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywg
anFYSFI6IEpRdWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtc
blxuICAgIC8qKlxuICAgICAqIEEgbXVsdGktcHVycG9zZSBjYWxsYmFja3MgbGlzdCBvYmplY3Qg
dGhhdCBwcm92aWRlcyBhIHBvd2VyZnVsIHdheSB0byBtYW5hZ2UgY2FsbGJhY2sgbGlzdHMuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZmxhZ3MgQW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBh
cmF0ZWQgZmxhZ3MgdGhhdCBjaGFuZ2UgaG93IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMuXG4g
ICAgICovXG4gICAgQ2FsbGJhY2tzKGZsYWdzPzogc3RyaW5nKTogSlF1ZXJ5Q2FsbGJhY2s7XG5c
biAgICAvKipcbiAgICAgKiBIb2xkcyBvciByZWxlYXNlcyB0aGUgZXhlY3V0aW9uIG9mIGpRdWVy
eSdzIHJlYWR5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvbGQgSW5kaWNhdGVzIHdo
ZXRoZXIgdGhlIHJlYWR5IGhvbGQgaXMgYmVpbmcgcmVxdWVzdGVkIG9yIHJlbGVhc2VkXG4gICAg
ICovXG4gICAgaG9sZFJlYWR5KGhvbGQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgKHNlbGVjdG9y
OiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBKUXVlcnk7XG4gICAgKGVsZW1lbnQ6IEVsZW1lbnQp
OiBKUXVlcnk7XG4gICAgKG9iamVjdDoge30pOiBKUXVlcnk7XG4gICAgKGVsZW1lbnRBcnJheTog
RWxlbWVudFtdKTogSlF1ZXJ5O1xuICAgIChvYmplY3Q6IEpRdWVyeSk6IEpRdWVyeTtcbiAgICAo
ZnVuYzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgKGFycmF5OiBhbnlbXSk6IEpRdWVyeTtcbiAg
ICAoKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVsaW5xdWlzaCBqUXVlcnkncyBjb250
cm9sIG9mIHRoZSAkIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlbW92ZUFsbCBB
IEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSBhbGwgalF1ZXJ5IHZhcmlhYmxl
cyBmcm9tIHRoZSBnbG9iYWwgc2NvcGUgKGluY2x1ZGluZyBqUXVlcnkgaXRzZWxmKS5cbiAgICAg
Ki9cbiAgICBub0NvbmZsaWN0KHJlbW92ZUFsbD86IGJvb2xlYW4pOiBPYmplY3Q7XG5cbiAgICAv
KipcbiAgICAgKiBQcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBi
YXNlZCBvbiBvbmUgb3IgbW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhh
dCByZXByZXNlbnQgYXN5bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBk
ZWZlcnJlZHMgT25lIG9yIG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlw
dCBvYmplY3RzLlxuICAgICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBKUXVlcnlHZW5l
cmljUHJvbWlzZTxUPltdKTogSlF1ZXJ5UHJvbWlzZTxUPjtcbiAgICAvKipcbiAgICAgKiBQcm92
aWRlcyBhIHdheSB0byBleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiYXNlZCBvbiBvbmUgb3Ig
bW9yZSBvYmplY3RzLCB1c3VhbGx5IERlZmVycmVkIG9iamVjdHMgdGhhdCByZXByZXNlbnQgYXN5
bmNocm9ub3VzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWZlcnJlZHMgT25lIG9y
IG1vcmUgRGVmZXJyZWQgb2JqZWN0cywgb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAg
ICAqL1xuICAgIHdoZW48VD4oLi4uZGVmZXJyZWRzOiBUW10pOiBKUXVlcnlQcm9taXNlPFQ+O1xu
ICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rp
b25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0
cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBh
cmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZh
U2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IGFueVtd
KTogSlF1ZXJ5UHJvbWlzZTxUPjtcblxuICAgIGNzc0hvb2tzOiB7IFtrZXk6IHN0cmluZ106IGFu
eTsgfTtcbiAgICBjc3NOdW1iZXI6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGFyYml0
cmFyeSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFJldHVybnMg
dGhlIHZhbHVlIHRoYXQgd2FzIHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRo
ZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0g
a2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQuXG4gICAgICogQHBh
cmFtIHZhbHVlIFRoZSBuZXcgZGF0YSB2YWx1ZS5cbiAgICAgKi9cbiAgICBkYXRhPFQ+KGVsZW1l
bnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFQ7XG4gICAgLyoqXG4gICAgICog
UmV0dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMgc2V0
IGJ5IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0YSBz
dG9yZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUg
RE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICogQHBhcmFtIGtl
eSBBIHN0cmluZyBuYW1pbmcgdGhlIHBpZWNlIG9mIGRhdGEgdG8gc2V0LlxuICAgICAqL1xuICAg
IGRhdGEoZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAg
ICogUmV0dXJucyB2YWx1ZSBhdCBuYW1lZCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudCwgYXMg
c2V0IGJ5IGpRdWVyeS5kYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSwgb3IgdGhlIGZ1bGwgZGF0
YSBzdG9yZSBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBU
aGUgRE9NIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGRhdGEuXG4gICAgICovXG4gICAg
ZGF0YShlbGVtZW50OiBFbGVtZW50KTogYW55O1xuXG4gICAgZGVxdWV1ZShlbGVtZW50OiBFbGVt
ZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnk7XG5cbiAgICBoYXNEYXRhKGVsZW1lbnQ6IEVs
ZW1lbnQpOiBib29sZWFuO1xuXG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1l
Pzogc3RyaW5nKTogYW55W107XG4gICAgcXVldWUoZWxlbWVudDogRWxlbWVudCwgcXVldWVOYW1l
OiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3Zl
RGF0YShlbGVtZW50OiBFbGVtZW50LCBuYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8g
RGVmZXJyZWRcbiAgICBEZWZlcnJlZDxUPihiZWZvcmVTdGFydD86IChkZWZlcnJlZDogSlF1ZXJ5
RGVmZXJyZWQ8VD4pID0+IGFueSk6IEpRdWVyeURlZmVycmVkPFQ+O1xuXG4gICAgLy8gRWZmZWN0
c1xuICAgIGZ4OiB7IHRpY2s6ICgpID0+IHZvaWQ7IGludGVydmFsOiBudW1iZXI7IHN0b3A6ICgp
ID0+IHZvaWQ7IHNwZWVkczogeyBzbG93OiBudW1iZXI7IGZhc3Q6IG51bWJlcjsgfTsgb2ZmOiBi
b29sZWFuOyBzdGVwOiBhbnk7IH07XG5cbiAgICAvLyBFdmVudHNcbiAgICBwcm94eShmbjogKC4u
LmFyZ3M6IGFueVtdKSA9PiBhbnksIGNvbnRleHQ6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnk7
XG4gICAgcHJveHkoY29udGV4dDogYW55LCBuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTog
YW55O1xuXG4gICAgRXZlbnQ6IEpRdWVyeUV2ZW50Q29uc3RydWN0b3I7XG5cbiAgICAvLyBJbnRl
cm5hbHNcbiAgICBlcnJvcihtZXNzYWdlOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBNaXNjZWxs
YW5lb3VzXG4gICAgZXhwcjogYW55O1xuICAgIGZuOiBhbnk7ICAvL1RPRE86IERlY2lkZSBob3cg
d2Ugd2FudCB0byB0eXBlIHRoaXNcbiAgICBpc1JlYWR5OiBib29sZWFuO1xuXG4gICAgLy8gUHJv
cGVydGllc1xuICAgIHN1cHBvcnQ6IEpRdWVyeVN1cHBvcnQ7XG5cbiAgICAvLyBVdGlsaXRpZXNc
biAgICBjb250YWlucyhjb250YWluZXI6IEVsZW1lbnQsIGNvbnRhaW5lZDogRWxlbWVudCk6IGJv
b2xlYW47XG5cbiAgICBlYWNoKGNvbGxlY3Rpb246IGFueSwgY2FsbGJhY2s6IChpbmRleEluQXJy
YXk6IGFueSwgdmFsdWVPZkVsZW1lbnQ6IGFueSkgPT4gYW55KTogYW55O1xuICAgIGVhY2goY29s
bGVjdGlvbjogSlF1ZXJ5LCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2YWx1ZU9m
RWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGFueSk6IGFueTtcbiAgICBlYWNoPFQ+KGNvbGxlY3Rp
b246IFRbXSwgY2FsbGJhY2s6IChpbmRleEluQXJyYXk6IG51bWJlciwgdmFsdWVPZkVsZW1lbnQ6
IFQpID0+IGFueSk6IGFueTtcblxuICAgIGV4dGVuZCh0YXJnZXQ6IGFueSwgLi4ub2JqczogYW55
W10pOiBhbnk7XG4gICAgZXh0ZW5kKGRlZXA6IGJvb2xlYW4sIHRhcmdldDogYW55LCAuLi5vYmpz
OiBhbnlbXSk6IGFueTtcblxuICAgIGdsb2JhbEV2YWwoY29kZTogc3RyaW5nKTogYW55O1xuXG4g
ICAgZ3JlcDxUPihhcnJheTogVFtdLCBmdW5jOiAoZWxlbWVudE9mQXJyYXk6IFQsIGluZGV4SW5B
cnJheTogbnVtYmVyKSA9PiBib29sZWFuLCBpbnZlcnQ/OiBib29sZWFuKTogVFtdO1xuXG4gICAg
aW5BcnJheTxUPih2YWx1ZTogVCwgYXJyYXk6IFRbXSwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVt
YmVyO1xuXG4gICAgaXNBcnJheShvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNFbXB0eU9iamVj
dChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNGdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW47
XG4gICAgaXNOdW1lcmljKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgIGlzUGxhaW5PYmplY3Qo
b2JqOiBhbnkpOiBib29sZWFuO1xuICAgIGlzV2luZG93KG9iajogYW55KTogYm9vbGVhbjtcbiAg
ICBpc1hNTERvYyhub2RlOiBOb2RlKTogYm9vbGVhbjtcblxuICAgIG1ha2VBcnJheShvYmo6IGFu
eSk6IGFueVtdO1xuXG4gICAgbWFwPFQsIFU+KGFycmF5OiBUW10sIGNhbGxiYWNrOiAoZWxlbWVu
dE9mQXJyYXk6IFQsIGluZGV4SW5BcnJheTogbnVtYmVyKSA9PiBVKTogVVtdO1xuICAgIG1hcChh
cnJheTogYW55LCBjYWxsYmFjazogKGVsZW1lbnRPZkFycmF5OiBhbnksIGluZGV4SW5BcnJheTog
YW55KSA9PiBhbnkpOiBhbnk7XG5cbiAgICBtZXJnZTxUPihmaXJzdDogVFtdLCBzZWNvbmQ6IFRb
XSk6IFRbXTtcbiAgICBtZXJnZTxULFU+KGZpcnN0OiBUW10sIHNlY29uZDogVVtdKTogYW55W107
XG5cbiAgICBub29wKCk6IGFueTtcblxuICAgIG5vdygpOiBudW1iZXI7XG5cbiAgICBwYXJzZUpT
T04oanNvbjogc3RyaW5nKTogYW55O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5n
IGludG8gYW4gWE1MIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFhIHdlbGwt
Zm9ybWVkIFhNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICovXG4gICAgcGFyc2VYTUwoZGF0
YTogc3RyaW5nKTogWE1MRG9jdW1lbnQ7XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVtZW50LCBx
dWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWU6IGFueVtdKTogSlF1ZXJ5O1xuXG4gICAgdHJpbShz
dHI6IHN0cmluZyk6IHN0cmluZztcblxuICAgIHR5cGUob2JqOiBhbnkpOiBzdHJpbmc7XG5cbiAg
ICB1bmlxdWUoYXJyOiBhbnlbXSk6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEg
c3RyaW5nIGludG8gYW4gYXJyYXkgb2YgRE9NIG5vZGVzLlxuICAgICAqXG4gICAgICogQHBhcmFt
IGRhdGEgSFRNTCBzdHJpbmcgdG8gYmUgcGFyc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgRE9N
IGVsZW1lbnQgdG8gc2VydmUgYXMgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEhUTUwgZnJhZ21l
bnQgd2lsbCBiZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIGtlZXBTY3JpcHRzIEEgQm9vbGVhbiBp
bmRpY2F0aW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgSFRNTCBz
dHJpbmdcbiAgICAgKi9cbiAgICBwYXJzZUhUTUwoZGF0YTogc3RyaW5nLCBjb250ZXh0PzogSFRN
TEVsZW1lbnQsIGtlZXBTY3JpcHRzPzogYm9vbGVhbik6IGFueVtdO1xuXG4gICAgQW5pbWF0aW9u
KGVsZW06IGFueSwgcHJvcGVydGllczogYW55LCBvcHRpb25zOiBhbnkpOiBhbnk7XG5cbiAgICBl
YXNpbmc6IEpRdWVyeUVhc2luZztcbn1cblxuLypcbiAgICBUaGUgalF1ZXJ5IGluc3RhbmNlIG1l
bWJlcnNcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICAvLyBBSkFYXG4gICAgYWpheENvbXBs
ZXRlKGhhbmRsZXI6IGFueSk6IEpRdWVyeTtcbiAgICBhamF4RXJyb3IoaGFuZGxlcjogKGV2ZW50
OiBhbnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkp
OiBKUXVlcnk7XG4gICAgYWpheFNlbmQoaGFuZGxlcjogKGV2ZW50OiBhbnksIGpxWEhSOiBhbnks
IHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWph
eFN0YXJ0KGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3RvcChoYW5kbGVy
OiAoKSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYWpheFN1Y2Nlc3MoaGFuZGxlcjogKGV2ZW50OiBh
bnksIGpxWEhSOiBhbnksIHNldHRpbmdzOiBhbnksIGV4Y2VwdGlvbjogYW55KSA9PiBhbnkpOiBK
UXVlcnk7XG5cbiAgICBsb2FkKHVybDogc3RyaW5nLCBkYXRhPzogYW55LCBjb21wbGV0ZT86IGFu
eSk6IEpRdWVyeTtcblxuICAgIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG4gICAgc2VyaWFsaXplQXJy
YXkoKTogYW55W107XG5cbiAgICAvLyBBdHRyaWJ1dGVzXG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1l
czogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGFkZENsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjdXJy
ZW50Q2xhc3M6IGFueSkgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLy8gaHR0cDovL2FwaS5q
cXVlcnkuY29tL2FkZEJhY2svXG4gICAgYWRkQmFjayhzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVy
eTtcblxuXG4gICAgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYXR0
cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgYXR0cihh
dHRyaWJ1dGVOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBhdHRyOiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcbiAgICBhdHRyKG1hcDogYW55KTogSlF1ZXJ5O1xuXG4gICAgaGFzQ2xhc3Mo
Y2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgaHRtbCgpOiBzdHJpbmc7XG4gICAg
aHRtbChodG1sU3RyaW5nOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaHRtbChodG1sQ29udGVudDog
KGluZGV4OiBudW1iZXIsIG9sZGh0bWw6IHN0cmluZykgPT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAg
IGh0bWwob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBwcm9wKHByb3BlcnR5TmFtZTogc3Ry
aW5nKTogYW55O1xuICAgIHByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBK
UXVlcnk7XG4gICAgcHJvcChtYXA6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKHByb3BlcnR5TmFt
ZTogc3RyaW5nLCBmdW5jOiAoaW5kZXg6IGFueSwgb2xkUHJvcGVydHlWYWx1ZTogYW55KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEpR
dWVyeTtcblxuICAgIHJlbW92ZUNsYXNzKGNsYXNzTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcbiAg
ICByZW1vdmVDbGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnkpID0+IGFueSk6IEpRdWVy
eTtcblxuICAgIHJlbW92ZVByb3AocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICB0b2dnbGVDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5
O1xuICAgIHRvZ2dsZUNsYXNzKHN3dGNoPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB0b2dnbGVD
bGFzcyhmdW5jOiAoaW5kZXg6IGFueSwgY2xzOiBhbnksIHN3dGNoOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIHZhbCgpOiBhbnk7XG4gICAgdmFsKHZhbHVlOiBzdHJpbmdbXSk6IEpRdWVy
eTtcbiAgICB2YWwodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICB2YWwodmFsdWU6IG51bWJl
cik6IEpRdWVyeTtcbiAgICB2YWwoZnVuYzogKGluZGV4OiBhbnksIHZhbHVlOiBhbnkpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2Ygc3R5bGUgcHJv
cGVydGllcyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1l
bnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eS5c
biAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoq
XG4gICAgICogU2V0IG9uZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1h
dGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NT
IHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0
aGUgcHJvcGVydHkuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1
ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1Mg
cHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJh
bSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNz
cyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0
Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1Mg
cHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRo
ZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVl
OiBzdHJpbmdbXSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NT
IHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFy
YW0gdmFsdWUgQSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBj
c3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXJbXSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9yIHRoZSBzZXQgb2Yg
bWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgQSBD
U1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiByZXR1cm5p
bmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVtZW50LiBSZWNlaXZl
cyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNldCBhbmQgdGhlIG9s
ZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3Ry
aW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9y
IHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9w
ZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5j
dGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIHRvIHNldC4gdGhpcyBpcyB0aGUgY3VycmVudCBlbGVt
ZW50LiBSZWNlaXZlcyB0aGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHNl
dCBhbmQgdGhlIG9sZCB2YWx1ZSBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgY3NzKHByb3Bl
cnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpID0+
IG51bWJlcik6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHBy
b3BlcnRpZXMgZm9yIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBwcm9wZXJ0aWVzIEFuIG9iamVjdCBvZiBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byBz
ZXQuXG4gICAgICovXG4gICAgY3NzKHByb3BlcnRpZXM6IE9iamVjdCk6IEpRdWVyeTtcblxuICAg
IGhlaWdodCgpOiBudW1iZXI7XG4gICAgaGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4g
ICAgaGVpZ2h0KHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgaGVpZ2h0KGZ1bmM6IChpbmRl
eDogYW55LCBoZWlnaHQ6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgaW5uZXJIZWlnaHQo
KTogbnVtYmVyO1xuICAgIGlubmVySGVpZ2h0KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG5cbiAg
ICBpbm5lcldpZHRoKCk6IG51bWJlcjtcbiAgICBpbm5lcldpZHRoKHZhbHVlOiBudW1iZXIpOiBK
UXVlcnk7XG5cbiAgICBvZmZzZXQoKTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB9O1xu
ICAgIG9mZnNldChjb29yZGluYXRlczogYW55KTogSlF1ZXJ5O1xuICAgIG9mZnNldChmdW5jOiAo
aW5kZXg6IGFueSwgY29vcmRzOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIG91dGVySGVp
Z2h0KGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xuICAgIG91dGVySGVpZ2h0KHZh
bHVlOiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgb3V0
ZXJXaWR0aChpbmNsdWRlTWFyZ2luPzogYm9vbGVhbik6IG51bWJlcjtcbiAgICBvdXRlcldpZHRo
KHZhbHVlOiBudW1iZXIsIGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAg
cG9zaXRpb24oKTogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyB9O1xuXG4gICAgc2Nyb2xs
TGVmdCgpOiBudW1iZXI7XG4gICAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xu
XG4gICAgc2Nyb2xsVG9wKCk6IG51bWJlcjtcbiAgICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcik6
IEpRdWVyeTtcblxuICAgIHdpZHRoKCk6IG51bWJlcjtcbiAgICB3aWR0aCh2YWx1ZTogbnVtYmVy
KTogSlF1ZXJ5O1xuICAgIHdpZHRoKHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgd2lkdGgo
ZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
LyBEYXRhXG4gICAgY2xlYXJRdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBkYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogSlF1ZXJ5O1xuICAgIGRhdGEob2JqOiB7
IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAgICBkYXRhKGtleT86IHN0cmluZyk6
IGFueTtcblxuICAgIGRlcXVldWUocXVldWVOYW1lPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
cmVtb3ZlRGF0YShuYW1lT3JMaXN0PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8gRGVmZXJyZWRc
biAgICBwcm9taXNlKHR5cGU/OiBhbnksIHRhcmdldD86IGFueSk6IEpRdWVyeVByb21pc2U8YW55
PjtcblxuICAgIC8vIEVmZmVjdHNcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRp
b24/OiBhbnksIGNvbXBsZXRlPzogRnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9w
ZXJ0aWVzOiBhbnksIGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNvbXBsZXRlPzog
RnVuY3Rpb24pOiBKUXVlcnk7XG4gICAgYW5pbWF0ZShwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6
IHsgZHVyYXRpb24/OiBhbnk7IGVhc2luZz86IHN0cmluZzsgY29tcGxldGU/OiBGdW5jdGlvbjsg
c3RlcD86IEZ1bmN0aW9uOyBxdWV1ZT86IGJvb2xlYW47IHNwZWNpYWxFYXNpbmc/OiBhbnk7IH0p
OiBKUXVlcnk7XG5cbiAgICBkZWxheShkdXJhdGlvbjogbnVtYmVyLCBxdWV1ZU5hbWU/OiBzdHJp
bmcpOiBKUXVlcnk7XG5cbiAgICBmYWRlSW4oZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBj
YWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGZhZGVPdXQoZHVyYXRpb24/OiBhbnksIGVhc2lu
Zz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG8oZHVyYXRp
b246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBm
YWRlVG8oZHVyYXRpb246IGFueSwgb3BhY2l0eTogbnVtYmVyLCBlYXNpbmc/OiBzdHJpbmcsIGNh
bGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwg
ZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIGZpbmlzaCgp
OiBKUXVlcnk7XG5cbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpR
dWVyeTtcbiAgICBoaWRlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNr
PzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBh
bnkpOiBKUXVlcnk7XG4gICAgc2hvdyhkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBj
YWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAgIHNsaWRlRG93bihkdXJhdGlvbj86IGFueSwg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgc2xpZGVEb3duKGR1cmF0aW9uPzogYW55LCBl
YXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVUb2dn
bGUoZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHNsaWRlVG9n
Z2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1
ZXJ5O1xuXG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVl
cnk7XG4gICAgc2xpZGVVcChkdXJhdGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcblxuICAgIHN0b3AoY2xlYXJRdWV1ZT86IGJvb2xlYW4sIGp1bXBU
b0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgc3RvcChxdWV1ZT86IGFueSwgY2xlYXJRdWV1
ZT86IGJvb2xlYW4sIGp1bXBUb0VuZD86IGJvb2xlYW4pOiBKUXVlcnk7XG5cbiAgICB0b2dnbGUo
ZHVyYXRpb24/OiBhbnksIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShkdXJh
dGlvbj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAg
ICB0b2dnbGUoc2hvd09ySGlkZTogYm9vbGVhbik6IEpRdWVyeTtcblxuICAgIC8vIEV2ZW50c1xu
ICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICBiaW5k
KGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE6IGFueSwgcHJldmVudEJ1YmJsZTogYm9vbGVh
bik6IEpRdWVyeTtcbiAgICBiaW5kKGV2ZW50VHlwZTogc3RyaW5nLCBwcmV2ZW50QnViYmxlOiBi
b29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoLi4uZXZlbnRzOiBhbnlbXSk6IEpRdWVyeTtcblxu
ICAgIGJsdXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIGJsdXIoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAg
ICogVHJpZ2dlciB0aGUgXCJjaGFuZ2VcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xu
ICAgIGNoYW5nZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBw
YXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBK
UXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQg
YW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjaGFuZ2VcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhh
dCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFu
ZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgY2hhbmdlKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxu
ICAgICAqIFRyaWdnZXIgdGhlIFwiY2xpY2tcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAq
L1xuICAgIGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhh
bmRsZXIgdG8gdGhlIFwiY2xpY2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBh
c3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjbGljayhoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNsaWNrXCIgSmF2YVNjcmlw
dCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZl
bnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFu
ZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwiZGJsY2xpY2tcIiBldmVudCBvbiBhbiBl
bGVtZW50LlxuICAgICAqL1xuICAgIGRibGNsaWNrKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAg
KiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiZGJsY2xpY2tcIiBKYXZhU2NyaXB0IGV2
ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
ZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZGJsY2xpY2so
aGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlj
a1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNo
IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBkYmxjbGljayhldmVu
dERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBkZWxlZ2F0ZShzZWxlY3RvcjogYW55LCBldmVudFR5cGU6
IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55
KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJmb2N1c1wiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c1wiIEphdmFTY3JpcHQg
ZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1cyho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzXCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmpl
Y3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3VzKGV2ZW50RGF0YT86
IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUg
XCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRs
ZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVk
LlxuICAgICAqL1xuICAgIGZvY3VzaW4oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQg
aGFuZGxlciB0byB0aGUgXCJmb2N1c2luXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAg
ICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBi
ZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAg
ICAqL1xuICAgIGZvY3VzaW4oZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJmb2N1c291dFwiIEphdmFTY3JpcHQgZXZl
bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBl
YWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBmb2N1c291dCho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50
RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHR3byBoYW5kbGVycyB0byB0
aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW91c2UgcG9pbnRl
ciBlbnRlcnMgYW5kIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlckluIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGVu
dGVycyB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlck91dCBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgbW91c2UgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAg
ICovXG4gICAgaG92ZXIoaGFuZGxlckluOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0
KSA9PiBhbnksIGhhbmRsZXJPdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGEgc2luZ2xlIGhhbmRsZXIgdG8g
dGhlIG1hdGNoZWQgZWxlbWVudHMsIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG1vdXNlIHBvaW50
ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlckluT3V0IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVy
IGVudGVycyBvciBsZWF2ZXMgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgaG92ZXIoaGFuZGxl
ckluT3V0OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImtleWRvd25cIiBldmVudCBvbiBhbiBl
bGVtZW50LlxuICAgICAqL1xuICAgIGtleWRvd24oKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlkb3duXCIgSmF2YVNjcmlwdCBldmVu
dFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVh
Y2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUga2V5ZG93blwi
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2gg
dGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnRE
YXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXlwcmVz
c1wiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5cHJlc3MoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXlwcmVz
c1wiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVu
Y3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAg
Ki9cbiAgICBrZXlwcmVzcyhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICog
QHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIGtleXByZXNzKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDog
SlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IFRyaWdnZXIgdGhlIFwia2V5dXBcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IGtleXVwKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIg
dG8gdGhlIFwia2V5dXBcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAga2V5dXAoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlL
ZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdp
bGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVy
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5c
biAgICAgKi9cbiAgICBrZXl1cChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAg
ICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibG9hZFwiIEphdmFTY3JpcHQgZXZl
bnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGxvYWQoaGFuZGxlcjog
KGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIgSmF2YVNjcmlw
dCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbG9hZChldmVudERhdGE/OiBhbnksIGhhbmRsZXI/
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlZG93blwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBC
aW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vkb3duXCIgSmF2YVNjcmlwdCBldmVu
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3
aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGhhbmRs
ZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRv
d25cIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnRE
YXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3Vz
ZWVudGVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmly
ZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhbiBl
bGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWVudGVyKGV2ZW50RGF0YTogT2JqZWN0LCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2VsZWF2ZVwiIGV2ZW50
IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VsZWF2ZSgpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1v
dXNlIGxlYXZlcyBhbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBm
dW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBtb3VzZWxlYXZlKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYW4gZWxlbWVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4g
ICAgICovXG4gICAgbW91c2VsZWF2ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50
T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAv
KipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNlbW92ZVwiIGV2ZW50IG9uIGFuIGVsZW1lbnQu
XG4gICAgICovXG4gICAgbW91c2Vtb3ZlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2Vtb3ZlXCIgSmF2YVNjcmlwdCBldmVudC5c
biAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2Vtb3ZlKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBv
YmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4g
dGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoZXZlbnREYXRh
OiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW91
dFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2VvdXQoKTogSlF1ZXJ5
O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW91
dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1
bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIG1vdXNlb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxl
ciB0byB0aGUgXCJtb3VzZW91dFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBh
c3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IG1vdXNlb3V0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRy
aWdnZXIgdGhlIFwibW91c2VvdmVyXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBtb3VzZW92ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byB0aGUgXCJtb3VzZW92ZXJcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXIoaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAg
ICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQg
ZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWlu
aW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihldmVudERhdGE6IE9iamVjdCwgaGFu
ZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcIm1vdXNldXBcIiBldmVudCBvbiBh
biBlbGVtZW50LlxuICAgICAqL1xuICAgIG1vdXNldXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBl
dmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0
ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2V1cChoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVy
eTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2V1
cFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNldXAoZXZlbnREYXRh
OiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRs
ZXIuXG4gICAgICovXG4gICAgb2ZmKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUg
YW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25lIG9yIG1v
cmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBv
ciBqdXN0IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiLCBcImtleWRvd24ubXlQbHVnaW5c
Iiwgb3IgXCIubXlQbHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciB3
aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24oKSB3aGVu
IGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGhhbmRs
ZXIgZnVuY3Rpb24gcHJldmlvdXNseSBhdHRhY2hlZCBmb3IgdGhlIGV2ZW50KHMpLCBvciB0aGUg
c3BlY2lhbCB2YWx1ZSBmYWxzZS5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIHNl
bGVjdG9yPzogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5k
bGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBh
cmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNw
YWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBs
dWdpblwiLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91
c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZlbnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNl
LlxuICAgICAqL1xuICAgIG9mZihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFJl
bW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBbiBv
YmplY3Qgd2hlcmUgdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBzcGFjZS1z
ZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0aGUgdmFs
dWVzIHJlcHJlc2VudCBoYW5kbGVyIGZ1bmN0aW9ucyBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0
aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igd2hpY2ggc2hv
dWxkIG1hdGNoIHRoZSBvbmUgb3JpZ2luYWxseSBwYXNzZWQgdG8gLm9uKCkgd2hlbiBhdHRhY2hp
bmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogeyBba2V5OiBzdHJp
bmddOiBhbnk7IH0sIHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAg
ICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBvciBtb3JlIGV2ZW50
cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRz
IE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFt
ZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFu
ZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS4gUmVzdCBwYXJh
bWV0ZXIgYXJncyBpcyBmb3Igb3B0aW9uYWwgcGFyYW1ldGVycyBwYXNzZWQgdG8galF1ZXJ5LnRy
aWdnZXIoKS4gTm90ZSB0aGF0IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBvbiB0aGUgZXZlbnQgaGFu
ZGxlciBmdW5jdGlvbiBtdXN0IGJlIG1hcmtlZCBhcyBvcHRpb25hbCAoPyBzeW50YXgpLlxuICAg
ICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVy
eUV2ZW50T2JqZWN0LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBl
dmVudHMgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFs
IG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxu
ICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRl
c2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50
LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlz
IHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRy
aWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBm
b3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAg
ICBvbihldmVudHM6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMg
dG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBP
bmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVz
cGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9yIFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAq
IEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRh
bnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0
aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdn
ZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFt
IGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQuZGF0YSB3aGVu
IGFuIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2Ug
aXMgYWxzbyBhbGxvd2VkIGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5
IGRvZXMgcmV0dXJuIGZhbHNlLlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxl
Y3Rvcjogc3RyaW5nLCBkYXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZl
bnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3Rl
ZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQW4gb2JqZWN0IGluIHdo
aWNoIHRoZSBzdHJpbmcga2V5cyByZXByZXNlbnQgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVk
IGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBhbmQgdGhlIHZhbHVlcyByZXBy
ZXNlbnQgYSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgdGhlIGV2ZW50KHMpLlxu
ICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9yIHN0cmluZyB0byBmaWx0ZXIgdGhlIGRl
c2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyB0aGF0IHdpbGwgY2FsbCB0aGUgaGFu
ZGxlci4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGhhbmRsZXIgaXMg
YWx3YXlzIGNhbGxlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNlbGVjdGVkIGVsZW1lbnQuXG4gICAg
ICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgaW4gZXZlbnQu
ZGF0YSB3aGVuIGFuIGV2ZW50IG9jY3Vycy5cbiAgICAgKi9cbiAgICBvbihldmVudHM6IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IGFueSwgZGF0YT86IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBl
bGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50
IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmluZyBj
b250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMgXCJj
bGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChl
dmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipc
biAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRo
ZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQg
dHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgQSBzdHJpbmcgY29udGFpbmluZyBv
bmUgb3IgbW9yZSBKYXZhU2NyaXB0IGV2ZW50IHR5cGVzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBc
InN1Ym1pdCxcIiBvciBjdXN0b20gZXZlbnQgbmFtZXMuXG4gICAgICogQHBhcmFtIGRhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0
aGUgdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6
IHN0cmluZywgZGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5k
bGVyIHRvIGFuIGV2ZW50IGZvciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVk
IGF0IG1vc3Qgb25jZSBwZXIgZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFu
ZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQ
bHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmls
dGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2Vy
IHRoZSBldmVudC4gSWYgdGhlIHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50
IGlzIGFsd2F5cyB0cmlnZ2VyZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBz
aG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4g
ICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRz
LiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2
ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNl
LXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBc
ImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9y
IEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVj
dGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBu
dWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVh
Y2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJl
IHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRoZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQg
YXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFs
c2UuXG4gICAgICovXG4gICAgb25lKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBk
YXRhOiBhbnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZl
bnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNl
IHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50
cyBBbiBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9y
ZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFu
ZCB0aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZv
ciB0aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5n
IHRvIGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQg
d2lsbCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVk
LCB0aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0
ZWQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUg
aGFuZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAg
IG9uZShldmVudHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCBzZWxlY3Rvcj86IHN0cmluZywg
ZGF0YT86IGFueSk6IEpRdWVyeTtcblxuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgRE9NIGlz
IHJlYWR5LlxuICAgICAqL1xuICAgIHJlYWR5KGhhbmRsZXI6IEZ1bmN0aW9uKTogSlF1ZXJ5O1xu
XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJyZXNpemVcIiBldmVudCBvbiBhbiBlbGVt
ZW50LlxuICAgICAqL1xuICAgIHJlc2l6ZSgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInJlc2l6ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVzaXplKGhhbmRsZXI6
IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNv
bnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhOiBPYmpl
Y3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwic2Nyb2xsXCIgZXZlbnQgb24g
YW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzY3JvbGwoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAg
ICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJzY3JvbGxcIiBKYXZhU2NyaXB0IGV2
ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNjcm9sbCho
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFu
ZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0
aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc2Nyb2xsKGV2ZW50RGF0
YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInNlbGVjdFwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2VsZWN0KCk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwic2VsZWN0XCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBz
ZWxlY3QoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJz
ZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0
YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2
ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHNlbGVjdChl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzdWJt
aXRcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHN1Ym1pdCgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBzdWJtaXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0
aGUgXCJzdWJtaXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgc3Vi
bWl0KGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXIoZXZlbnRUeXBlOiBzdHJpbmcs
IC4uLmV4dHJhUGFyYW1ldGVyczogYW55W10pOiBKUXVlcnk7XG4gICAgdHJpZ2dlcihldmVudDog
SlF1ZXJ5RXZlbnRPYmplY3QpOiBKUXVlcnk7XG5cbiAgICB0cmlnZ2VySGFuZGxlcihldmVudFR5
cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IE9iamVjdDtcblxuICAgIHVu
YmluZChldmVudFR5cGU/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2ZW50VHlwZTogc3RyaW5n
LCBmbHM6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgdW5iaW5kKGV2dDogYW55KTogSlF1ZXJ5O1xu
XG4gICAgdW5kZWxlZ2F0ZSgpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShzZWxlY3RvcjogYW55
LCBldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRP
YmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRlKHNlbGVjdG9yOiBhbnksIGV2
ZW50czogYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUobmFtZXNwYWNlOiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICB1bmxvYWQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVubG9hZChldmVudERhdGE/OiBhbnksIGhhbmRs
ZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvLyBJbnRlcm5hbHNcbiAgICBjb250ZXh0OiBFbGVtZW50O1xuICAgIGpxdWVyeTogc3Ry
aW5nO1xuXG4gICAgZXJyb3IoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGVycm9yKGV2ZW50RGF0YTogYW55LCBoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBw
dXNoU3RhY2soZWxlbWVudHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIHB1c2hTdGFjayhlbGVtZW50
czogYW55W10sIG5hbWU6IGFueSwgYXJndW1lbnRzOiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvLyBN
YW5pcHVsYXRpb25cbiAgICBhZnRlciguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBh
ZnRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgYXBwZW5kKC4u
LmNvbnRlbnQ6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFwcGVuZChmdW5jOiAoaW5kZXg6IGFueSwg
aHRtbDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBhcHBlbmRUbyh0YXJnZXQ6IGFueSk6
IEpRdWVyeTtcblxuICAgIGJlZm9yZSguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBi
ZWZvcmUoZnVuYzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb25lKHdp
dGhEYXRhQW5kRXZlbnRzPzogYm9vbGVhbiwgZGVlcFdpdGhEYXRhQW5kRXZlbnRzPzogYm9vbGVh
bik6IEpRdWVyeTtcblxuICAgIGRldGFjaChzZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAg
IGVtcHR5KCk6IEpRdWVyeTtcblxuICAgIGluc2VydEFmdGVyKHRhcmdldDogYW55KTogSlF1ZXJ5
O1xuICAgIGluc2VydEJlZm9yZSh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBlbmQo
Li4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgcHJlcGVuZChmdW5jOiAoaW5kZXg6IGFu
eSwgaHRtbDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICBwcmVwZW5kVG8odGFyZ2V0OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICByZW1vdmUoc2VsZWN0b3I/OiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICByZXBsYWNlQWxsKHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVwbGFjZVdpdGgoZnVu
YzogYW55KTogSlF1ZXJ5O1xuXG4gICAgdGV4dCgpOiBzdHJpbmc7XG4gICAgdGV4dCh0ZXh0U3Ry
aW5nOiBhbnkpOiBKUXVlcnk7XG4gICAgdGV4dCh0ZXh0U3RyaW5nOiAoaW5kZXg6IG51bWJlciwg
dGV4dDogc3RyaW5nKSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICB0b0FycmF5KCk6IGFueVtd
O1xuXG4gICAgdW53cmFwKCk6IEpRdWVyeTtcblxuICAgIHdyYXAod3JhcHBpbmdFbGVtZW50OiBh
bnkpOiBKUXVlcnk7XG4gICAgd3JhcChmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgd3JhcEFsbCh3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHdy
YXBJbm5lcih3cmFwcGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwSW5uZXIoZnVu
YzogKGluZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8vIE1pc2NlbGxhbmVvdXNc
biAgICBlYWNoKGZ1bmM6IChpbmRleDogYW55LCBlbGVtOiBFbGVtZW50KSA9PiBhbnkpOiBKUXVl
cnk7XG5cbiAgICBnZXQoaW5kZXg/OiBudW1iZXIpOiBhbnk7XG5cbiAgICBpbmRleCgpOiBudW1i
ZXI7XG4gICAgaW5kZXgoc2VsZWN0b3I6IHN0cmluZyk6IG51bWJlcjtcbiAgICBpbmRleChlbGVt
ZW50OiBhbnkpOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgbGVuZ3RoOiBudW1i
ZXI7XG4gICAgc2VsZWN0b3I6IHN0cmluZztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIFt4
OiBudW1iZXJdOiBIVE1MRWxlbWVudDtcblxuICAgIC8vIFRyYXZlcnNpbmdcbiAgICBhZGQoc2Vs
ZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICBhZGQoLi4uZWxlbWVu
dHM6IGFueVtdKTogSlF1ZXJ5O1xuICAgIGFkZChodG1sOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAg
YWRkKG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgY2hpbGRyZW4oc2VsZWN0b3I/OiBhbnkp
OiBKUXVlcnk7XG5cbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAg
Y2xvc2VzdChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogRWxlbWVudCk6IEpRdWVyeTtcbiAg
ICBjbG9zZXN0KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3QoZWxlbWVudDogYW55
KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qoc2VsZWN0b3JzOiBhbnksIGNvbnRleHQ/OiBFbGVtZW50
KTogYW55W107XG5cbiAgICBjb250ZW50cygpOiBKUXVlcnk7XG5cbiAgICBlbmQoKTogSlF1ZXJ5
O1xuXG4gICAgZXEoaW5kZXg6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIGZpbHRlcihzZWxlY3Rv
cjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGZpbHRlcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIGZpbHRlcihlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVy
KG9iajogSlF1ZXJ5KTogSlF1ZXJ5O1xuXG4gICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSlF1
ZXJ5O1xuICAgIGZpbmQoZWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAgIGZpbmQob2JqOiBKUXVl
cnkpOiBKUXVlcnk7XG5cbiAgICBmaXJzdCgpOiBKUXVlcnk7XG5cbiAgICBoYXMoc2VsZWN0b3I6
IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoYXMoY29udGFpbmVkOiBFbGVtZW50KTogSlF1ZXJ5O1xu
XG4gICAgaXMoc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgaXMoZnVuYzogKGluZGV4
OiBhbnkpID0+IGFueSk6IGJvb2xlYW47XG4gICAgaXMoZWxlbWVudDogYW55KTogYm9vbGVhbjtc
biAgICBpcyhvYmo6IEpRdWVyeSk6IGJvb2xlYW47XG5cbiAgICBsYXN0KCk6IEpRdWVyeTtcblxu
ICAgIG1hcChjYWxsYmFjazogKGluZGV4OiBhbnksIGRvbUVsZW1lbnQ6IEVsZW1lbnQpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIG5leHQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBuZXh0QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbmV4dFVudGlsKHNl
bGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVudGls
KGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbmV4dFVu
dGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgbm90KHNl
bGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgbm90KGZ1bmM6IChpbmRleDogYW55KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgbm90KGVsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICBub3Qob2Jq
OiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBvZmZzZXRQYXJlbnQoKTogSlF1ZXJ5O1xuXG4gICAg
cGFyZW50KHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50cyhzZWxlY3Rv
cj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHBhcmVudHNVbnRpbChzZWxlY3Rvcj86IHN0cmlu
ZywgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChlbGVtZW50Pzog
RWxlbWVudCwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHBhcmVudHNVbnRpbChvYmo/
OiBKUXVlcnksIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXYoc2VsZWN0b3I/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2QWxsKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1
ZXJ5O1xuXG4gICAgcHJldlVudGlsKHNlbGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgcHJldlVudGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJp
bmcpOiBKUXVlcnk7XG4gICAgcHJldlVudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5n
KTogSlF1ZXJ5O1xuXG4gICAgc2libGluZ3Moc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICBzbGljZShzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBKUXVlcnk7XG5cbiAgICAv
LyBVdGlsaXRpZXNcblxuICAgIHF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueVtdO1xuICAg
IHF1ZXVlKHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVy
eTtcbiAgICBxdWV1ZShuZXdRdWV1ZU9yQ2FsbGJhY2s6IGFueSk6IEpRdWVyeTtcbn1cbmRlY2xh
cmUgbW9kdWxlIFwianF1ZXJ5XCIge1xuICAgIGV4cG9ydCA9ICQ7XG59XG5kZWNsYXJlIHZhciBq
UXVlcnk6IEpRdWVyeVN0YXRpYztcbmRlY2xhcmUgdmFyICQ6IEpRdWVyeVN0YXRpYztcbi8vIGxp
YnMvYW5ndWxhci9hbmd1bGFyLmQudHNcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIEFuZ3VsYXIg
SlMgMS4wXG4vLyBQcm9qZWN0OiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xuLy8gRGVmaW5pdGlvbnMg
Ynk6IERpZWdvIFZpbGFyIDxodHRwOi8vZ2l0aHViLmNvbS9kaWVnb3ZpbGFyPlxuLy8gRGVmaW5p
dGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3Jpc3lhbmtvdi9EZWZpbml0ZWx5VHlwZWRcblxu
XG5cbmRlY2xhcmUgdmFyIGFuZ3VsYXI6IG5nLklBbmd1bGFyU3RhdGljO1xuXG4vLyBTdXBwb3J0
IGZvciBwYWlubGVzcyBkZXBlbmRlbmN5IGluamVjdGlvblxuaW50ZXJmYWNlIEZ1bmN0aW9uIHtc
biAgICAkaW5qZWN0OnN0cmluZ1tdO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBu
ZyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5kZWNsYXJlIG1v
ZHVsZSBuZyB7XG5cbiAgICAvLyBBbGwgc2VydmljZSBwcm92aWRlcnMgZXh0ZW5kIHRoaXMgaW50
ZXJmYWNlXG4gICAgaW50ZXJmYWNlIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAgICAkZ2V0OiBh
bnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQW5ndWxhclN0YXRp
Y1xuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaVxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5ndWxhclN0YXRpYyB7XG4gICAgICAgIGJpbmQo
Y29udGV4dDogYW55LCBmbjogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogRnVuY3Rpb247XG4g
ICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBzdHJpbmcsIG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8u
SUluamVjdG9yU2VydmljZTtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IEpRdWVyeSwgbW9k
dWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAo
ZWxlbWVudDogRWxlbWVudCwgbW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNl
O1xuICAgICAgICBib290c3RyYXAoZWxlbWVudDogRG9jdW1lbnQsIG1vZHVsZXM/OiBhbnlbXSk6
IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAgICAgY29weShzb3VyY2U6IGFueSwgZGVzdGlu
YXRpb24/OiBhbnkpOiBhbnk7XG4gICAgICAgIGVsZW1lbnQ6IElBdWdtZW50ZWRKUXVlcnlTdGF0
aWM7XG4gICAgICAgIGVxdWFscyh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBib29sZWFuO1xu
ICAgICAgICBleHRlbmQoZGVzdGluYXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7
XG4gICAgICAgIGZvckVhY2gob2JqOiBhbnksIGl0ZXJhdG9yOiAodmFsdWU6IGFueSwga2V5OiBh
bnkpID0+IGFueSwgY29udGV4dD86IGFueSk6IGFueTtcbiAgICAgICAgZnJvbUpzb24oanNvbjog
c3RyaW5nKTogYW55O1xuICAgICAgICBpZGVudGl0eShhcmc/OiBhbnkpOiBhbnk7XG4gICAgICAg
IGluamVjdG9yKG1vZHVsZXM/OiBhbnlbXSk6IGF1dG8uSUluamVjdG9yU2VydmljZTtcbiAgICAg
ICAgaXNBcnJheSh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNEYXRlKHZhbHVlOiBh
bnkpOiBib29sZWFuO1xuICAgICAgICBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW47XG4g
ICAgICAgIGlzRWxlbWVudCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNGdW5jdGlv
bih2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJv
b2xlYW47XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBp
c1N0cmluZyh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNVbmRlZmluZWQodmFsdWU6
IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGxvd2VyY2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztc
biAgICAgICAgLyoqIGNvbnN0cnVjdCB5b3VyIGFuZ3VsYXIgYXBwbGljYXRpb25cblx0XHRvZmZp
Y2lhbCBkb2NzOiBJbnRlcmZhY2UgZm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIgbW9kdWxlcy5cblx0
XHRzZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuTW9kdWxlXG5cdFx0
Ki9cbiAgICAgICAgbW9kdWxlKFxuICAgICAgICAgICAgLyoqIG5hbWUgb2YgeW91ciBtb2R1bGUg
eW91IHdhbnQgdG8gY3JlYXRlICovXG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAg
ICAgICAvKiogbmFtZSBvZiBtb2R1bGVzIHlvdXJzIGRlcGVuZHMgb24gKi9cbiAgICAgICAgICAg
IHJlcXVpcmVzPzogc3RyaW5nW10sXG4gICAgICAgICAgICBjb25maWdGdW5jdGlvbj86IGFueSk6
IElNb2R1bGU7XG4gICAgICAgIG5vb3AoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICB0
b0pzb24ob2JqOiBhbnksIHByZXR0eT86IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgICAgIHVwcGVy
Y2FzZShzdHI6IHN0cmluZyk6IHN0cmluZztcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAg
ICAgZnVsbDogc3RyaW5nO1xuICAgICAgICAgICAgbWFqb3I6IG51bWJlcjtcbiAgICAgICAgICAg
IG1pbm9yOiBudW1iZXI7XG4gICAgICAgICAgICBkb3Q6IG51bWJlcjtcbiAgICAgICAgICAgIGNv
ZGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gTW9kdWxlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL2FuZ3VsYXIuTW9kdWxlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNl
IElNb2R1bGUge1xuICAgICAgICBhbmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb25GYWN0
b3J5OiBGdW5jdGlvbik6IElNb2R1bGU7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcs
IGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGFuaW1h
dGlvbihvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIC8qKiBjb25maWd1cmUgZXhp
c3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hp
Y2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nXG5cdFx0ICovXG4gICAg
ICAgIGNvbmZpZyhjb25maWdGbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICAvKiogY29u
ZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzLlxuXHRcdFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3Rl
ciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZ1xuXHRc
dCAqL1xuICAgICAgICBjb25maWcoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1v
ZHVsZTtcbiAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSU1vZHVs
ZTtcbiAgICAgICAgY29uc3RhbnQob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBj
b250cm9sbGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6
IElNb2R1bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFk
ZWRDb25zdHJ1Y3RvcjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb250cm9sbGVyKG9iamVj
dCA6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRp
cmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5h
bWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAg
ICAgICAgZGlyZWN0aXZlKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9y
eShuYW1lOiBzdHJpbmcsIHNlcnZpY2VGYWN0b3J5RnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVs
ZTtcbiAgICAgICAgZmFjdG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9u
OiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGZhY3Rvcnkob2JqZWN0OiBPYmplY3QpOiBJTW9k
dWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTogc3RyaW5nLCBmaWx0ZXJGYWN0b3J5RnVuY3Rpb246
IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG5hbWU6IHN0cmluZywgaW5saW5l
QW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmlsdGVyKG9iamVj
dDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2
aWNlUHJvdmlkZXJDb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBwcm92
aWRlcihuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElN
b2R1bGU7XG4gICAgICAgIHByb3ZpZGVyKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAg
ICAgcnVuKGluaXRpYWxpemF0aW9uRnVuY3Rpb246IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAg
ICAgcnVuKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAg
IHNlcnZpY2UobmFtZTogc3RyaW5nLCBzZXJ2aWNlQ29uc3RydWN0b3I6IEZ1bmN0aW9uKTogSU1v
ZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZENvbnN0
cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIHNlcnZpY2Uob2JqZWN0OiBPYmplY3Qp
OiBJTW9kdWxlO1xuICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJTW9k
dWxlO1xuICAgICAgICB2YWx1ZShvYmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG5cbiAgICAgICAg
Ly8gUHJvcGVydGllc1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlcXVpcmVzOiBz
dHJpbmdbXTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBdHRyaWJ1
dGVzXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxl
LmRpcmVjdGl2ZS5BdHRyaWJ1dGVzXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElBdHRyaWJ1dGVzIHtcblx0Ly8gdGhpcyBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBh
Y2Nlc3MgdGhlIHNjb3BlZCBhdHRyaWJ1dGVzLiBpdCdzIG5vdCB2ZXJ5IGVsZWdhbnRcblx0Ly8g
YmVjYXVzZSB5b3UgaGF2ZSB0byB1c2UgYXR0cnNbJ2ZvbyddIGluc3RlYWQgb2YgYXR0cnMuZm9v
IGJ1dCBJIGRvbid0IGtub3cgb2YgYSBiZXR0ZXIgd2F5XG5cdC8vIHRoaXMgc2hvdWxkIHJlYWxs
eSBiZSBsaW1pdGVkIHRvIHJldHVybiBzdHJpbmcgYnV0IGl0IGNyZWF0ZXMgdGhpcyBwcm9ibGVt
OiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xNzIwMTg1NC8xNjU2NTZcblx0W25hbWU6IHN0
cmluZ106IGFueTtcblxuICAgICAgICAvLyBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lm
aWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQu
IElmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmln
Z2VyZWRcbiAgICAgICAgLy8gZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi5cbiAgICAgICAgJGFkZENs
YXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgICAgIC8vIFJlbW92ZXMgdGhlIENT
UyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRo
ZVxuICAgICAgICAvLyBlbGVtZW50LiBJZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4g
YW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGZvclxuICAgICAgICAvLyB0aGUgY2xhc3MgcmVt
b3ZhbC5cbiAgICAgICAgJHJlbW92ZUNsYXNzKGNsYXNzVmFsOiBzdHJpbmcpOiB2b2lkO1xuXG4g
ICAgICAgIC8vIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAgICAgICRzZXQo
a2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgICAgIC8vIE9ic2VydmVzIGFu
IGludGVycG9sYXRlZCBhdHRyaWJ1dGUuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZlciBmdW5jdGlv
biB3aWxsIGJlIGludm9rZWQgb25jZSBkdXJpbmcgdGhlIG5leHQgJGRpZ2VzdFxuICAgICAgICAv
LyBmb2xsb3dpbmcgY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hl
bmV2ZXIgdGhlXG4gICAgICAgIC8vIGludGVycG9sYXRlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAg
ICAkb2JzZXJ2ZShuYW1lOiBzdHJpbmcsIGZuOih2YWx1ZT86YW55KT0+YW55KTogRnVuY3Rpb247
XG5cbiAgICAgICAgLy8gQSBtYXAgb2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRo
ZSBub3JtYWxpemVkIG5hbWUuIFRoaXMgaXMgbmVlZGVkXG4gICAgICAgIC8vIHRvIGRvIHJldmVy
c2UgbG9va3VwIGZyb20gbm9ybWFsaXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuXG4gICAg
ICAgICRhdHRyOiBPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
Ly8gRm9ybUNvbnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuZGlyZWN0aXZlOmZvcm0uRm9ybUNvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSUZvcm1Db250cm9sbGVyIHtcbiAgICAgICAgJHByaXN0aW5lOiBi
b29sZWFuO1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVh
bjtcbiAgICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRlcnJvcjogYW55O1xuICAg
ICAgICAkYWRkQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2b2lkO1xu
ICAgICAgICAkcmVtb3ZlQ29udHJvbChjb250cm9sOiBuZy5JTmdNb2RlbENvbnRyb2xsZXIpOiB2
b2lkO1xuICAgICAgICAkc2V0RGlydHkoKTogdm9pZDtcbiAgICAgICAgJHNldFByaXN0aW5lKCk6
IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTmdNb2RlbENv
bnRyb2xsZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuZGly
ZWN0aXZlOm5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSU5nTW9kZWxDb250cm9sbGVyIHtcbiAgICAgICAgJHJlbmRlcigpOiB2
b2lkO1xuICAgICAgICAkc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9yS2V5OiBzdHJpbmcsIGlz
VmFsaWQ6IGJvb2xlYW4pOiB2b2lkO1xuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHN0YXRlcyB2
aWV3VmFsdWUgYW5kIG1vZGVsVmFsdWUgdG8gYmUgYSBzdHJpbmcgYnV0IG90aGVyXG4gICAgICAg
IC8vIHR5cGVzIGRvIHdvcmsgYW5kIGl0J3MgY29tbW9uIHRvIHVzZSB0aGVtLlxuICAgICAgICAk
c2V0Vmlld1ZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgICAgICAkdmlld1ZhbHVlOiBhbnk7
XG5cbiAgICAgICAgJG1vZGVsVmFsdWU6IGFueTtcblxuICAgICAgICAkcGFyc2VyczogSU1vZGVs
UGFyc2VyW107XG4gICAgICAgICRmb3JtYXR0ZXJzOiBJTW9kZWxGb3JtYXR0ZXJbXTtcbiAgICAg
ICAgJGVycm9yOiBhbnk7XG4gICAgICAgICRwcmlzdGluZTogYm9vbGVhbjtcbiAgICAgICAgJGRp
cnR5OiBib29sZWFuO1xuICAgICAgICAkdmFsaWQ6IGJvb2xlYW47XG4gICAgICAgICRpbnZhbGlk
OiBib29sZWFuO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJTW9kZWxQYXJzZXIge1xuICAgICAg
ICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSU1vZGVsRm9ybWF0
dGVyIHtcbiAgICAgICAgKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgLy8gU2NvcGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJHJvb3RTY29wZS5TY29wZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJU2NvcGUge1xuICAgICAgICAkYXBwbHkoKTogYW55O1xuICAgICAgICAkYXBw
bHkoZXhwOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgICRhcHBseShleHA6IChzY29wZTogSVNjb3Bl
KSA9PiBhbnkpOiBhbnk7XG5cbiAgICAgICAgJGJyb2FkY2FzdChuYW1lOiBzdHJpbmcsIC4uLmFy
Z3M6IGFueVtdKTogSUFuZ3VsYXJFdmVudDtcbiAgICAgICAgJGRlc3Ryb3koKTogdm9pZDtcbiAg
ICAgICAgJGRpZ2VzdCgpOiB2b2lkO1xuICAgICAgICAkZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFy
Z3M6IGFueVtdKTogSUFuZ3VsYXJFdmVudDtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNh
eXMgZXhwIGlzIG9wdGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0
XG4gICAgICAgICRldmFsKGV4cHJlc3Npb246IHN0cmluZywgYXJncz86IE9iamVjdCk6IGFueTtc
biAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgYXJncz86
IE9iamVjdCk6IGFueTtcblxuICAgICAgICAvLyBEb2N1bWVudGF0aW9uIHNheXMgZXhwIGlzIG9w
dGlvbmFsLCBidXQgYWN0dWFsIGltcGxlbWVudGF0b24gY291bnRzIG9uIGl0XG4gICAgICAgICRl
dmFsQXN5bmMoZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgJGV2YWxBc3luYyhl
eHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55KTogdm9pZDtcblxuICAgICAgICAvLyBE
ZWZhdWx0cyB0byBmYWxzZSBieSB0aGUgaW1wbGVtZW50YXRpb24gY2hlY2tpbmcgc3RyYXRlZ3lc
biAgICAgICAgJG5ldyhpc29sYXRlPzogYm9vbGVhbik6IElTY29wZTtcblxuICAgICAgICAkb24o
bmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBJQW5ndWxhckV2ZW50LCAuLi5hcmdzOiBh
bnlbXSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lv
bjogc3RyaW5nLCBsaXN0ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTog
RnVuY3Rpb247XG4gICAgICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVu
ZXI/OiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55
LCBvYmplY3RFcXVhbGl0eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdh
dGNoRXhwcmVzc2lvbjogKHNjb3BlOiBJU2NvcGUpID0+IGFueSwgbGlzdGVuZXI/OiBzdHJpbmcs
IG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAgICAgICAkd2F0Y2god2F0
Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5lcj86IChuZXdWYWx1
ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFs
aXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuXG4gICAgICAgICR3YXRjaENvbGxlY3Rpb24od2F0
Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6
IGFueSwgc2NvcGU6IElTY29wZSkgPT4gYW55KTogRnVuY3Rpb247XG4gICAgICAgICR3YXRjaENv
bGxlY3Rpb24od2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0ZW5l
cjogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFueSk6
IEZ1bmN0aW9uO1xuXG4gICAgICAgICRwYXJlbnQ6IElTY29wZTtcblxuICAgICAgICAkaWQ6IG51
bWJlcjtcblxuICAgICAgICAvLyBIaWRkZW4gbWVtYmVyc1xuICAgICAgICAkJGlzb2xhdGVCaW5k
aW5nczogYW55O1xuICAgICAgICAkJHBoYXNlOiBhbnk7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNl
IElBbmd1bGFyRXZlbnQge1xuICAgICAgICB0YXJnZXRTY29wZTogSVNjb3BlO1xuICAgICAgICBj
dXJyZW50U2NvcGU6IElTY29wZTtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwcmV2
ZW50RGVmYXVsdDogRnVuY3Rpb247XG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47
XG5cbiAgICAgICAgLy8gQXZhaWxhYmxlIG9ubHkgZXZlbnRzIHRoYXQgd2VyZSAkZW1pdC10ZWRc
biAgICAgICAgc3RvcFByb3BhZ2F0aW9uPzogRnVuY3Rpb247XG4gICAgfVxuXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgLy8gV2luZG93U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kd2luZG93XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgaW50ZXJmYWNlIElXaW5kb3dTZXJ2aWNlIGV4dGVuZHMgV2luZG93IHt9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBCcm93c2VyU2VydmljZVxuICAgIC8vIFRPRE8gdW5kb2N1
bWVudGVkLCBzbyB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQnJvd3NlclNlcnZpY2Uge31cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFRpbWVvdXRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR0aW1lb3V0XG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElUaW1lb3V0U2VydmljZSB7XG4gICAgICAgIChmdW5jOiBG
dW5jdGlvbiwgZGVsYXk/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNl
PGFueT47XG4gICAgICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtc
biAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbnRlcnZhbFNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVydmFsXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnZhbFNlcnZpY2Uge1xu
ICAgICAgICAoZnVuYzogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIsIGNvdW50PzogbnVtYmVyLCBp
bnZva2VBcHBseT86IGJvb2xlYW4pOiBJUHJvbWlzZTxhbnk+O1xuICAgICAgICBjYW5jZWwocHJv
bWlzZTogSVByb21pc2U8YW55Pik6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gRmlsdGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1
bGFyanMub3JnL2FwaS9uZy4kZmlsdGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJq
cy5vcmcvYXBpL25nLiRmaWx0ZXJQcm92aWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJRmlsdGVyU2VydmljZSB7XG4gICAgICAgIChuYW1lOiBzdHJpbmcpOiBGdW5j
dGlvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUZpbHRlclByb3ZpZGVyIGV4dGVuZHMgSVNl
cnZpY2VQcm92aWRlciB7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZmlsdGVyRmFj
dG9yeTogRnVuY3Rpb24pOiBJU2VydmljZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIExvY2FsZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2FsZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAg
IGludGVyZmFjZSBJTG9jYWxlU2VydmljZSB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAg
ICAgLy8gVGhlc2UgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIC8vIENoZWNrIGFuZ3VsYXIn
cyBpMThuIGZpbGVzIGZvciBleGVtcGxlc1xuICAgICAgICBOVU1CRVJfRk9STUFUUzogSUxvY2Fs
ZU51bWJlckZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIERBVEVUSU1FX0ZPUk1BVFM6IElMb2Nh
bGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3I7XG4gICAgICAgIHBsdXJhbENhdDogKG51bTogYW55
KSA9PiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVOdW1iZXJGb3JtYXRE
ZXNjcmlwdG9yIHtcbiAgICAgICAgREVDSU1BTF9TRVA6IHN0cmluZztcbiAgICAgICAgR1JPVVBf
U0VQOiBzdHJpbmc7XG4gICAgICAgIFBBVFRFUk5TOiBJTG9jYWxlTnVtYmVyUGF0dGVybkRlc2Ny
aXB0b3JbXTtcbiAgICAgICAgQ1VSUkVOQ1lfU1lNOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElMb2NhbGVOdW1iZXJQYXR0ZXJuRGVzY3JpcHRvciB7XG4gICAgICAgIG1pbkludDog
bnVtYmVyO1xuICAgICAgICBtaW5GcmFjOiBudW1iZXI7XG4gICAgICAgIG1heEZyYWM6IG51bWJl
cjtcbiAgICAgICAgcG9zUHJlOiBzdHJpbmc7XG4gICAgICAgIHBvc1N1Zjogc3RyaW5nO1xuICAg
ICAgICBuZWdQcmU6IHN0cmluZztcbiAgICAgICAgbmVnU3VmOiBzdHJpbmc7XG4gICAgICAgIGdT
aXplOiBudW1iZXI7XG4gICAgICAgIGxnU2l6ZTogbnVtYmVyO1xuICAgIH1cblxuICAgIGludGVy
ZmFjZSBJTG9jYWxlRGF0ZVRpbWVGb3JtYXREZXNjcmlwdG9yIHtcbiAgICAgICAgTU9OVEg6IHN0
cmluZ1tdO1xuICAgICAgICBTSE9SVE1PTlRIOiBzdHJpbmdbXTtcbiAgICAgICAgREFZOiBzdHJp
bmdbXTtcbiAgICAgICAgU0hPUlREQVk6IHN0cmluZ1tdO1xuICAgICAgICBBTVBNUzogc3RyaW5n
W107XG4gICAgICAgIG1lZGl1bTogc3RyaW5nO1xuICAgICAgICBzaG9ydDogc3RyaW5nO1xuICAg
ICAgICBmdWxsRGF0ZTogc3RyaW5nO1xuICAgICAgICBsb25nRGF0ZTogc3RyaW5nO1xuICAgICAg
ICBtZWRpdW1EYXRlOiBzdHJpbmc7XG4gICAgICAgIHNob3J0RGF0ZTogc3RyaW5nO1xuICAgICAg
ICBtZWRpdW1UaW1lOiBzdHJpbmc7XG4gICAgICAgIHNob3J0VGltZTogc3RyaW5nO1xuICAgIH1c
blxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIExvZ1NlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvZ1xuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gICAgICAgIGRlYnVnOiBJTG9nQ2Fs
bDtcbiAgICAgICAgZXJyb3I6IElMb2dDYWxsO1xuICAgICAgICBpbmZvOiBJTG9nQ2FsbDtcbiAg
ICAgICAgbG9nOiBJTG9nQ2FsbDtcbiAgICAgICAgd2FybjogSUxvZ0NhbGw7XG4gICAgfVxuXG4g
ICAgLy8gV2UgZGVmaW5lIHRoaXMgYXMgc2VwYXJldGUgaW50ZXJmYWNlIHNvIHdlIGNhbiByZW9w
ZW4gaXQgbGF0ZXIgZm9yXG4gICAgLy8gdGhlIG5nTW9jayBtb2R1bGUuXG4gICAgaW50ZXJmYWNl
IElMb2dDYWxsIHtcbiAgICAgICAgKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBQYXJzZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHBhcnNlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElQYXJzZVNlcnZpY2Uge1xuICAgICAgICAoZXhwcmVzc2lvbjog
c3RyaW5nKTogSUNvbXBpbGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUNv
bXBpbGVkRXhwcmVzc2lvbiB7XG4gICAgICAgIChjb250ZXh0OiBhbnksIGxvY2Fscz86IGFueSk6
IGFueTtcblxuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHVuZGVmaW5lZCBp
cyBnb25uYSBiZSB1c2VkIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyBkb2Vz
IG5vdCBjaGVjayB0aGUgcGFyYW1ldGVyLiBMZXQncyBmb3JjZSBhIHZhbHVlIGZvciBjb25zaXN0
ZW5jeS4gSWYgY29uc3VtZXJcbiAgICAgICAgLy8gd2hhbnRzIHRvIHVuZGVmaW5lIGl0LCBwYXNz
IHRoZSB1bmRlZmluZWQgdmFsdWUgZXhwbGljaXRseS5cbiAgICAgICAgYXNzaWduKGNvbnRleHQ6
IGFueSwgdmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAvLyBMb2NhdGlvblNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGxvY2F0aW9uXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRsb2NhdGlvblByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3Vs
YXJqcy5vcmcvZ3VpZGUvZGV2X2d1aWRlLnNlcnZpY2VzLiRsb2NhdGlvblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTG9jYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgYWJz
VXJsKCk6IHN0cmluZztcbiAgICAgICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgICAgIGhhc2gobmV3
SGFzaDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgaG9zdCgpOiBzdHJpbmc7
XG4gICAgICAgIHBhdGgoKTogc3RyaW5nO1xuICAgICAgICBwYXRoKG5ld1BhdGg6IHN0cmluZyk6
IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHBvcnQoKTogbnVtYmVyO1xuICAgICAgICBwcm90
b2NvbCgpOiBzdHJpbmc7XG4gICAgICAgIHJlcGxhY2UoKTogSUxvY2F0aW9uU2VydmljZTtcbiAg
ICAgICAgc2VhcmNoKCk6IGFueTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRlcnNNYXA6IGFueSk6
IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHNlYXJjaChwYXJhbWV0ZXI6IHN0cmluZywgcGFy
YW1ldGVyVmFsdWU6IGFueSk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgICAgIHVybCgpOiBzdHJp
bmc7XG4gICAgICAgIHVybCh1cmw6IHN0cmluZyk6IElMb2NhdGlvblNlcnZpY2U7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRl
ciB7XG4gICAgICAgIGhhc2hQcmVmaXgoKTogc3RyaW5nO1xuICAgICAgICBoYXNoUHJlZml4KHBy
ZWZpeDogc3RyaW5nKTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgICAgIGh0bWw1TW9kZSgpOiBi
b29sZWFuO1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgcGFyYW1ldGVy
IGlzIHN0cmluZywgYnV0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHRlc3RzIGl0IGFzIGJv
b2xlYW4sIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2VcbiAgICAgICAgLy8gc2luY2UgdGhpcyBpcyBh
IHRvZ2dsZXJcbiAgICAgICAgaHRtbDVNb2RlKGFjdGl2ZTogYm9vbGVhbik6IElMb2NhdGlvblBy
b3ZpZGVyO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERvY3VtZW50
U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kZG9j
dW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSURvY3VtZW50U2Vy
dmljZSBleHRlbmRzIERvY3VtZW50IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBFeGNlcHRpb25IYW5kbGVyU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFy
anMub3JnL2FwaS9uZy4kZXhjZXB0aW9uSGFuZGxlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJRXhjZXB0aW9uSGFuZGxlclNlcnZpY2Uge1xuICAgICAgICAoZXhjZXB0
aW9uOiBFcnJvciwgY2F1c2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vL1xuICAgIC8vIFJvb3RFbGVtZW50U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdEVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICBpbnRlcmZhY2UgSVJvb3RFbGVtZW50U2VydmljZSBleHRlbmRzIEpRdWVyeSB7
fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUVNlcnZpY2VcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHFcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSVFTZXJ2aWNlIHtcbiAgICAgICAgYWxsKHByb21pc2VzOiBJUHJv
bWlzZTxhbnk+W10pOiBJUHJvbWlzZTxhbnlbXT47XG4gICAgICAgIGRlZmVyPFQ+KCk6IElEZWZl
cnJlZDxUPjtcbiAgICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSk6IElQcm9taXNlPHZvaWQ+O1xu
ICAgICAgICB3aGVuPFQ+KHZhbHVlOiBUKTogSVByb21pc2U8VD47XG4gICAgfVxuXG4gICAgaW50
ZXJmYWNlIElQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJh
Y2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxs
YmFjaz86IChyZWFzb246IGFueSkgPT4gYW55LCBub3RpZnlDYWxsYmFjaz86IChzdGF0ZTogYW55
KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhlbjxUUmVzdWx0PihzdWNj
ZXNzQ2FsbGJhY2s6IChwcm9taXNlVmFsdWU6IFQpID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJv
ckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNrPzogKHN0YXRl
OiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVuPFRSZXN1bHQ+
KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gVFJlc3VsdCwgZXJyb3JDYWxs
YmFjaz86IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCwgbm90aWZ5Q2FsbGJhY2s/OiAoc3RhdGU6
IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG5cblxuICAgICAgICBjYXRjaDxUUmVz
dWx0PihvblJlamVjdGVkOiAocmVhc29uOiBhbnkpID0+IElIdHRwUHJvbWlzZTxUUmVzdWx0Pik6
IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICBjYXRjaDxUUmVzdWx0PihvblJlamVjdGVkOiAo
cmVhc29uOiBhbnkpID0+IElQcm9taXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4g
ICAgICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gVFJlc3Vs
dCk6IElQcm9taXNlPFRSZXN1bHQ+O1xuXG4gICAgICAgIGZpbmFsbHk8VFJlc3VsdD4oZmluYWxs
eUNhbGxiYWNrOiAoKT0+YW55KTpJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSURlZmVycmVkPFQ+IHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZT86IFQpOiB2b2lkO1xu
ICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogdm9pZDtcbiAgICAgICAgbm90aWZ5KHN0YXRl
PzphbnkpOiB2b2lkO1xuICAgICAgICBwcm9taXNlOiBJUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBbmNob3JTY3JvbGxTZXJ2aWNlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRhbmNob3JTY3JvbGxcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFNlcnZpY2Uge1xu
ICAgICAgICAoKTogdm9pZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUFuY2hvclNjcm9sbFBy
b3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAgIGRpc2FibGVBdXRvU2Ny
b2xsaW5nKCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8g
Q2FjaGVGYWN0b3J5U2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2FwaS9uZy4kY2FjaGVGYWN0b3J5XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJm
YWNlIElDYWNoZUZhY3RvcnlTZXJ2aWNlIHtcbiAgICAgICAgLy8gTGV0cyBub3QgZm9jZSB0aGUg
b3B0aW9uc01hcCB0byBoYXZlIHRoZSBjYXBhY2l0eSBtZW1iZXIuIEV2ZW4gdGhvdWdoXG4gICAg
ICAgIC8vIGl0J3MgdGhlIE9OTFkgb3B0aW9uIGNvbnNpZGVyZWQgYnkgdGhlIGltcGxlbWVudGF0
aW9uIHRvZGF5LCBhIGNvbnN1bWVyXG4gICAgICAgIC8vIG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRv
IGFzc29jaWF0ZSBzb21lIG90aGVyIG9wdGlvbnMgdG8gdGhlIGNhY2hlIG9iamVjdC5cbiAgICAg
ICAgLy8oY2FjaGVJZDogc3RyaW5nLCBvcHRpb25zTWFwPzogeyBjYXBhY2l0eTogbnVtYmVyOyB9
KTogQ2FjaGVPYmplY3Q7XG4gICAgICAgIChjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7
IGNhcGFjaXR5OiBudW1iZXI7IH0pOiBJQ2FjaGVPYmplY3Q7XG5cbiAgICAgICAgLy8gTWV0aG9k
cyBiZWxsb3cgYXJlIG5vdCBkb2N1bWVudGVkXG4gICAgICAgIGluZm8oKTogYW55O1xuICAgICAg
ICBnZXQgKGNhY2hlSWQ6IHN0cmluZyk6IElDYWNoZU9iamVjdDtcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUNhY2hlT2JqZWN0IHtcbiAgICAgICAgaW5mbygpOiB7XG4gICAgICAgICAgICBpZDog
c3RyaW5nO1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuXG4gICAgICAgICAgICAvLyBOb3Qg
Z2FyYW50ZWVkIHRvIGhhdmUsIHNpbmNlIGl0J3MgYSBub24tbWFuZGF0b3J5IG9wdGlvblxuICAg
ICAgICAgICAgLy9jYXBhY2l0eTogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBwdXQoa2V5
OiBzdHJpbmcsIHZhbHVlPzogYW55KTogdm9pZDtcbiAgICAgICAgZ2V0IChrZXk6IHN0cmluZyk6
IGFueTtcbiAgICAgICAgcmVtb3ZlKGtleTogc3RyaW5nKTogdm9pZDtcbiAgICAgICAgcmVtb3Zl
QWxsKCk6IHZvaWQ7XG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb21waWxlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVxuICAgIC8vIHNlZSBodHRwOi8vZG9j
cy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGlsZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElDb21waWxlU2VydmljZSB7XG4gICAgICAgIChlbGVtZW50
OiBzdHJpbmcsIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFByaW9y
aXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgICAgICAoZWxlbWVu
dDogRWxlbWVudCwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbiwgbWF4UHJp
b3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4gICAgICAgIChlbGVt
ZW50OiBKUXVlcnksIHRyYW5zY2x1ZGU/OiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb24sIG1heFBy
aW9yaXR5PzogbnVtYmVyKTogSVRlbXBsYXRlTGlua2luZ0Z1bmN0aW9uO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJQ29tcGlsZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4g
ICAgICAgIGRpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZUZhY3Rvcnk6IEZ1bmN0aW9u
KTogSUNvbXBpbGVQcm92aWRlcjtcblxuICAgICAgICAvLyBVbmRvY3VtZW50ZWQsIGJ1dCBpdCBp
cyB0aGVyZS4uLlxuICAgICAgICBkaXJlY3RpdmUoZGlyZWN0aXZlc01hcDogYW55KTogSUNvbXBp
bGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSVRlbXBsYXRlTGlua2luZ0Z1bmN0
aW9uIHtcbiAgICAgICAgLy8gTGV0J3MgaGludCBidXQgbm90IGZvcmNlIGNsb25lQXR0YWNoRm4n
cyBzaWduYXR1cmVcbiAgICAgICAgKHNjb3BlOiBJU2NvcGUsIGNsb25lQXR0YWNoRm4/OiAoY2xv
bmVkRWxlbWVudD86IEpRdWVyeSwgc2NvcGU/OiBJU2NvcGUpID0+IGFueSk6IEpRdWVyeTtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb250cm9sbGVyU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29udHJvbGxlclBy
b3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVy
U2VydmljZSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qg
c3RhdGUgdGhpcywgbG9jYWxzIGFyZSBvcHRpb25hbFxuICAgICAgICAoY29udHJvbGxlckNvbnN0
cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICAoY29udHJvbGxl
ck5hbWU6IHN0cmluZywgbG9jYWxzPzogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJQ29udHJvbGxlclByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAgICAg
IHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgY29udHJvbGxlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6
IHZvaWQ7XG4gICAgICAgIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZGVwZW5kZW5jeUFubm90YWRl
ZENvbnN0cnVjdG9yOiBhbnlbXSk6IHZvaWQ7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgLy8gSHR0cFNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGh0dHBcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2Ug
SUh0dHBTZXJ2aWNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgbW9ldGhvZCBhbmQgdXJsIG11c3Qg
YmUgcHJvdmlkZWQuLi5cbiAgICAgICAgKGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiBJSHR0cFBy
b21pc2U8YW55PjtcbiAgICAgICAgZ2V0ICh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFu
eSk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBkZWxldGUgKHVybDogc3RyaW5nLCBSZXF1
ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGhlYWQodXJsOiBz
dHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAg
anNvbnAodXJsOiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55
PjtcbiAgICAgICAgcG9zdCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBSZXF1ZXN0Q29uZmlnPzog
YW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIHB1dCh1cmw6IHN0cmluZywgZGF0YTog
YW55LCBSZXF1ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRl
ZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcblxuICAgICAgICAvLyBGb3IgZGVidWdnaW5nLCBCVVQg
aXQgaXMgZG9jdW1lbnRlZCBhcyBwdWJsaWMsIHNvLi4uXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0
czogYW55W107XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBqdXN0IGZvciBoaW50aW5nLlxuICAg
IC8vIFNvbWUgb3BldGlvbnMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhl
IHJlcXVlc3QuXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRo
dHRwI1VzYWdlIGZvciBvcHRpb25zIGV4cGxhbmF0aW9uc1xuICAgIGludGVyZmFjZSBJUmVxdWVz
dENvbmZpZyB7XG4gICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgICB1cmw6IHN0cmluZztc
biAgICAgICAgcGFyYW1zPzogYW55O1xuXG4gICAgICAgIC8vIFhYWCBpdCBoYXMgaXQncyBvd24g
c3RydWN0dXJlLi4uICBwZXJoYXBzIHdlIHNob3VsZCBkZWZpbmUgaXQgaW4gdGhlIGZ1dHVyZVxu
ICAgICAgICBoZWFkZXJzPzogYW55O1xuXG4gICAgICAgIGNhY2hlPzogYW55O1xuICAgICAgICB3
aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuXG4gICAgICAgIC8vIFRoZXNlIGFjY2VwdCBtdWx0
aXBsZSB0eXBlcywgc28gbGV0J3MgZGVmaW5lIHRoZW0gYXMgYW55XG4gICAgICAgIGRhdGE/OiBh
bnk7XG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q/OiBhbnk7XG4gICAgICAgIHRyYW5zZm9ybVJl
c3BvbnNlPzogYW55O1xuICAgICAgICB0aW1lb3V0PzogYW55OyAvLyBudW1iZXIgfCBwcm9taXNl
XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+IHtcbiAgICAg
ICAgKGRhdGE6IFQsIHN0YXR1czogbnVtYmVyLCBoZWFkZXJzOiAoaGVhZGVyTmFtZTogc3RyaW5n
KSA9PiBzdHJpbmcsIGNvbmZpZzogSVJlcXVlc3RDb25maWcpOiB2b2lkO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPiB7XG4gICAgICAgIGRhdGE/OiBU
O1xuICAgICAgICBzdGF0dXM/OiBudW1iZXI7XG4gICAgICAgIGhlYWRlcnM/OiAoaGVhZGVyTmFt
ZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZz86IElSZXF1ZXN0Q29uZmlnO1xu
ICAgIH1cblxuICAgIGludGVyZmFjZSBJSHR0cFByb21pc2U8VD4gZXh0ZW5kcyBJUHJvbWlzZTxU
PiB7XG4gICAgICAgIHN1Y2Nlc3MoY2FsbGJhY2s6IElIdHRwUHJvbWlzZUNhbGxiYWNrPFQ+KTog
SUh0dHBQcm9taXNlPFQ+O1xuICAgICAgICBlcnJvcihjYWxsYmFjazogSUh0dHBQcm9taXNlQ2Fs
bGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3VjY2Vz
c0NhbGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBUUmVz
dWx0LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNlOiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxU
PikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIHRoZW48VFJlc3VsdD4oc3Vj
Y2Vzc0NhbGxiYWNrOiAocmVzcG9uc2U6IElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+KSA9PiBJ
UHJvbWlzZTxUUmVzdWx0PiwgZXJyb3JDYWxsYmFjaz86IChyZXNwb25zZTogSUh0dHBQcm9taXNl
Q2FsbGJhY2tBcmc8VD4pID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJSHR0cFByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7XG4gICAg
ICAgIGRlZmF1bHRzOiBJUmVxdWVzdENvbmZpZztcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBhbnlb
XTtcbiAgICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvcnM6IGFueVtdO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEh0dHBCYWNrZW5kU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cEJhY2tlbmRcbiAgICAvLyBZb3Ug
c2hvdWxkIG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3RseS5cbiAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUh0dHBCYWNrZW5kU2VydmljZSB7XG4gICAg
ICAgIC8vIFhYWCBQZXJoYXBzIGRlZmluZSBjYWxsYmFjayBzaWduYXR1cmUgaW4gdGhlIGZ1dHVy
ZVxuICAgICAgICAobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBwb3N0PzogYW55LCBjYWxs
YmFjaz86IEZ1bmN0aW9uLCBoZWFkZXJzPzogYW55LCB0aW1lb3V0PzogbnVtYmVyLCB3aXRoQ3Jl
ZGVudGlhbHM/OiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICAvLyBJbnRlcnBvbGF0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL25nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgaW50ZXJmYWNlIElJbnRlcnBvbGF0ZVNlcnZpY2Uge1xuICAgICAgICAodGV4
dDogc3RyaW5nLCBtdXN0SGF2ZUV4cHJlc3Npb24/OiBib29sZWFuKTogSUludGVycG9sYXRpb25G
dW5jdGlvbjtcbiAgICAgICAgZW5kU3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgc3RhcnRTeW1i
b2woKTogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGlvbkZ1bmN0
aW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRl
cmZhY2UgSUludGVycG9sYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAg
ICAgICAgc3RhcnRTeW1ib2woKTogc3RyaW5nO1xuICAgICAgICBzdGFydFN5bWJvbCh2YWx1ZTog
c3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlkZXI7XG4gICAgICAgIGVuZFN5bWJvbCgpOiBzdHJp
bmc7XG4gICAgICAgIGVuZFN5bWJvbCh2YWx1ZTogc3RyaW5nKTogSUludGVycG9sYXRlUHJvdmlk
ZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGVtcGxhdGVDYWNo
ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRl
bXBsYXRlQ2FjaGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRlbXBs
YXRlQ2FjaGVTZXJ2aWNlIGV4dGVuZHMgSUNhY2hlT2JqZWN0IHt9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBSb290U2NvcGVTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290U2NvcGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSVJvb3RTY29wZVNlcnZpY2UgZXh0ZW5kcyBJU2NvcGUge31cblxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
XHRpbnRlcmZhY2UgSVNDRVNlcnZpY2Uge1xuXHRcdGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBt
YXlCZVRydXN0ZWQ6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkQ3NzKHZhbHVlOiBhbnkpOiBh
bnk7XG5cdFx0Z2V0VHJ1c3RlZEh0bWwodmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVk
SnModmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWU6IGFu
eSk6IGFueTtcblx0XHRnZXRUcnVzdGVkVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0cGFyc2Uo
dHlwZTogc3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6
IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNDc3MoZXhwcmVzc2lvbjogc3RyaW5nKTogKGNvbnRl
eHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHRwYXJzZUFzSHRtbChleHByZXNzaW9u
OiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNl
QXNKcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4g
YW55O1xuXHRcdHBhcnNlQXNSZXNvdXJjZVVybChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4
dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNVcmwoZXhwcmVzc2lvbjog
c3RyaW5nKTogKGNvbnRleHQ6IGFueSwgbG9jYWxzOiBhbnkpID0+IGFueTtcblx0XHR0cnVzdEFz
KHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcblx0XHR0cnVzdEFzSHRtbCh2YWx1ZTog
YW55KTogYW55O1xuXHRcdHRydXN0QXNKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNS
ZXNvdXJjZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0QXNVcmwodmFsdWU6IGFueSk6
IGFueTtcblx0XHRpc0VuYWJsZWQoKTogYm9vbGVhbjtcblx0fVxuXG4gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4gICAgLy8gU0NFUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxh
cmpzLm9yZy9hcGkvbmcuJHNjZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElTQ0VQcm92aWRlciBleHRlbmRzIElTZXJ2aWNlUHJvdmlkZXIge1xuICAgICAg
ICBlbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBTQ0VEZWxlZ2F0ZVNlcnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlXG4gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vXG4gICAgaW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVNlcnZpY2Uge1xuICAgICAgICBnZXRUcnVz
dGVkKHR5cGU6IHN0cmluZywgbWF5QmVUcnVzdGVkOiBhbnkpOiBhbnk7XG4gICAgICAgIHRydXN0
QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICAgICAgICB2YWx1ZU9mKHZhbHVl
OiBhbnkpOiBhbnk7XG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBT
Q0VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAg
aW50ZXJmYWNlIElTQ0VEZWxlZ2F0ZVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92aWRlciB7
XG4gICAgICAgIHJlc291cmNlVXJsQmxhY2tsaXN0KGJsYWNrbGlzdDogYW55W10pOiB2b2lkO1xu
ICAgICAgICByZXNvdXJjZVVybFdoaXRlbGlzdCh3aGl0ZWxpc3Q6IGFueVtdKTogdm9pZDtcbiAg
ICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEaXJlY3RpdmVcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGNvbXBpbGVQcm92aWRlciNkaXJl
Y3RpdmVcbiAgICAvLyBhbmQgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kaXJlY3Rp
dmVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGludGVyZmFjZSBJRGlyZWN0aXZle1xu
ICAgICAgICBjb21waWxlPzpcbiAgICAgICAgICAgICh0ZW1wbGF0ZUVsZW1lbnQ6IGFueSxcbiAg
ICAgICAgICAgIHRlbXBsYXRlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB0
cmFuc2NsdWRlOiAoc2NvcGU6IElTY29wZSwgY2xvbmVMaW5raW5nRm46IEZ1bmN0aW9uKSA9PiB2
b2lkXG4gICAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgY29udHJvbGxlcj86IGFueTtcbiAg
ICAgICAgY29udHJvbGxlckFzPzogc3RyaW5nO1xuICAgICAgICBsaW5rPzpcbiAgICAgICAgICAg
IChzY29wZTogSVNjb3BlLFxuICAgICAgICAgICAgaW5zdGFuY2VFbGVtZW50OiBhbnksXG4gICAg
ICAgICAgICBpbnN0YW5jZUF0dHJpYnV0ZXM6IElBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29u
dHJvbGxlcjogYW55XG4gICAgICAgICAgICApID0+IHZvaWQ7XG4gICAgICAgIG5hbWU/OiBzdHJp
bmc7XG4gICAgICAgIHByaW9yaXR5PzogbnVtYmVyO1xuICAgICAgICByZXBsYWNlPzogYm9vbGVh
bjtcbiAgICAgICAgcmVxdWlyZT86IGFueTtcbiAgICAgICAgcmVzdHJpY3Q/OiBzdHJpbmc7XG4g
ICAgICAgIHNjb3BlPzogYW55O1xuICAgICAgICB0ZW1wbGF0ZT86IGFueTtcbiAgICAgICAgdGVt
cGxhdGVVcmw/OiBhbnk7XG4gICAgICAgIHRlcm1pbmFsPzogYm9vbGVhbjtcbiAgICAgICAgdHJh
bnNjbHVkZT86IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBh
bmd1bGFyLmVsZW1lbnRcbiAgICAvLyB3aGVuIGNhbGxpbmcgYW5ndWxhci5lbGVtZW50LCBhbmd1
bGFyIHJldHVybnMgYSBqUXVlcnkgb2JqZWN0LFxuICAgIC8vIGF1Z21lbnRlZCB3aXRoIGFkZGl0
aW9uYWwgbWV0aG9kcyBsaWtlIGUuZy4gc2NvcGUuXG4gICAgLy8gc2VlOiBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9hbmd1bGFyLmVsZW1lbnRcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSUF1Z21lbnRlZEpRdWVyeVN0YXRpYyBleHRlbmRzIEpRdWVyeVN0YXRp
YyB7XG4gICAgICAgIChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSUF1Z21lbnRl
ZEpRdWVyeTtcbiAgICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQpOiBJQXVnbWVudGVkSlF1ZXJ5O1xu
ICAgICAgICAob2JqZWN0OiB7fSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChlbGVtZW50
QXJyYXk6IEVsZW1lbnRbXSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IEpR
dWVyeSk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbik6IElBdWdt
ZW50ZWRKUXVlcnk7XG4gICAgICAgIChhcnJheTogYW55W10pOiBJQXVnbWVudGVkSlF1ZXJ5O1xu
ICAgICAgICAoKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUF1
Z21lbnRlZEpRdWVyeSBleHRlbmRzIEpRdWVyeSB7XG4gICAgICAgIC8vIFRPRE86IGV2ZW50cywg
aG93IHRvIGRlZmluZT9cbiAgICAgICAgLy8kZGVzdHJveVxuXG4gICAgICAgIGZpbmQoc2VsZWN0
b3I6IHN0cmluZyk6IElBdWdtZW50ZWRKUXVlcnk7XG4gICAgICAgIGZpbmQoZWxlbWVudDogYW55
KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmluZChvYmo6IEpRdWVyeSk6IElBdWdtZW50
ZWRKUXVlcnk7XG5cbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAg
ICAgIGluamVjdG9yKCk6IGFueTtcbiAgICAgICAgc2NvcGUoKTogSVNjb3BlO1xuXG4gICAgICAg
IGluaGVyaXRlZERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4gICAgICAg
IGluaGVyaXRlZERhdGEob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSk6IEpRdWVyeTtcbiAg
ICAgICAgaW5oZXJpdGVkRGF0YShrZXk/OiBzdHJpbmcpOiBhbnk7XG5cblxuICAgIH1cblxuXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQVVUTyBtb2R1bGUgKGFuZ3VsYXIuanMpXG4g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgZXhwb3J0IG1vZHVsZSBhdXRvIHtcblxuICAgICAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBJbmplY3RvclNlcnZpY2VcbiAgICAgICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL0FVVE8uJGluamVjdG9yXG4gICAgICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFjZSBJSW5qZWN0b3JTZXJ2aWNlIHtcbiAg
ICAgICAgICAgIGFubm90YXRlKGZuOiBGdW5jdGlvbik6IHN0cmluZ1tdO1xuICAgICAgICAgICAg
YW5ub3RhdGUoaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogc3RyaW5nW107XG4gICAg
ICAgICAgICBnZXQgKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICAgICAgICAgIGluc3RhbnRpYXRl
KHR5cGVDb25zdHJ1Y3RvcjogRnVuY3Rpb24sIGxvY2Fscz86IGFueSk6IGFueTtcbiAgICAgICAg
ICAgIGludm9rZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBhbnk7XG4gICAgICAg
ICAgICBpbnZva2UoZnVuYzogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnksIGxvY2Fscz86IGFueSk6
IGFueTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIFBy
b3ZpZGVTZXJ2aWNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2Fw
aS9BVVRPLiRwcm92aWRlXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGludGVyZmFj
ZSBJUHJvdmlkZVNlcnZpY2Uge1xuICAgICAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzYXlzIGl0
IHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgaW5zdGFuY2UsIGJ1dCBhY3R1YWxcbiAgICAgICAgICAg
IC8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAgICAgICAgICAg
IC8vIGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTtcbiAgICAgICAgICAg
IGNvbnN0YW50KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAgICAg
IGRlY29yYXRvcihuYW1lOiBzdHJpbmcsIGRlY29yYXRvcjogRnVuY3Rpb24pOiB2b2lkO1xuICAg
ICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9ySW5saW5lOiBhbnlbXSk6
IHZvaWQ7XG4gICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlG
dW5jdGlvbjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAgZmFj
dG9yeShuYW1lOiBzdHJpbmcsIGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6IG5nLklT
ZXJ2aWNlUHJvdmlkZXI7XG4gICAgICAgICAgICBwcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3Zp
ZGVyOiBuZy5JU2VydmljZVByb3ZpZGVyKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAg
ICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgc2VydmljZVByb3ZpZGVyQ29uc3RydWN0b3I6IEZ1
bmN0aW9uKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHNlcnZpY2UobmFtZTog
c3RyaW5nLCBjb25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAg
ICAgICAgICAgdmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogbmcuSVNlcnZpY2VQcm92
aWRlcjtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuLy8gbW9kZWxzL1RvZG9JdGVtLnRzXG5cbm1v
ZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0IGNsYXNzIFRvZG9J
dGVtIHtcbiAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBwdWJsaWMgdGl0bGU6IHN0
cmluZyxcbiAgICAgICAgICAgIHB1YmxpYyBjb21wbGV0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAg
ICkgeyB9XG4gICAgfVxufVxuLy8gaW50ZXJmYWNlcy9JVG9kb1Njb3BlLnRzXG5cbm1vZHVsZSB0
b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRvZG9TY29wZSBleHRlbmRzIG5nLklTY29wZSB7
XG5cdFx0dG9kb3M6IFRvZG9JdGVtW107XG5cdFx0bmV3VG9kbzogc3RyaW5nO1xuXHRcdGVkaXRl
ZFRvZG86IFRvZG9JdGVtO1xuXHRcdG9yaWdpbmFsVG9kbzogVG9kb0l0ZW07XG5cdFx0cmVtYWlu
aW5nQ291bnQ6IG51bWJlcjtcblx0XHRkb25lQ291bnQ6IG51bWJlcjtcblx0XHRhbGxDaGVja2Vk
OiBib29sZWFuO1xuXHRcdHJldmVydGVkOiBib29sZWFuO1xuXHRcdHN0YXR1c0ZpbHRlcjogeyBj
b21wbGV0ZWQ/OiBib29sZWFuIH07XG5cdFx0bG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2U7
XG5cdFx0dm06IFRvZG9DdHJsO1xuXHR9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU3RvcmFnZS50
c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHRleHBvcnQgaW50ZXJmYWNlIElUb2RvU3RvcmFnZSB7XG5c
dFx0Z2V0ICgpOiBUb2RvSXRlbVtdO1xuXHRcdHB1dCh0b2RvczogVG9kb0l0ZW1bXSk7XG5cdH1c
bn0vLyBkaXJlY3RpdmVzL1RvZG9Gb2N1cy50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0
cmljdCc7XG5cblx0LyoqXG5cdCAqIERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUg
ZWxlbWVudCBpdCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8g
ZXZhbHVhdGVzIHRvIHRydWUuXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0
aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1cm4g
e1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJp
YnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHQkc2NvcGUuJHdhdGNoKGF0dHJpYnV0ZXMudG9kb0Zv
Y3VzLCBuZXd2YWwgPT4ge1xuXHRcdFx0XHRcdGlmIChuZXd2YWwpIHtcblx0XHRcdFx0XHRcdCR0
aW1lb3V0KCgpID0+IGVsZW1lbnRbMF0uZm9jdXMoKSwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdH1c
blx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHRvZG9Gb2N1cy4kaW5qZWN0
ID0gWyckdGltZW91dCddO1xuXG59Ly8gZGlyZWN0aXZlcy9Ub2RvQmx1ci50c1xuXG5tb2R1bGUg
dG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIERpcmVjdGl2ZSB0
aGF0IGV4ZWN1dGVzIGFuIGV4cHJlc3Npb24gd2hlbiB0aGUgZWxlbWVudCBpdCBpcyBhcHBsaWVk
IHRvIGxvc2VzIGZvY3VzLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b2RvQmx1cigp
OiBuZy5JRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbms6ICgk
c2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkpID0+IHtc
biAgICAgICAgICAgICAgICBlbGVtZW50LmJpbmQoJ2JsdXInLCAoKSA9PiB7ICRzY29wZS4kYXBw
bHkoYXR0cmlidXRlcy50b2RvQmx1cik7IH0pO1xuICAgICAgICAgICAgICAgICRzY29wZS4kb24o
JyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVuYmluZCgnYmx1cicpOyB9KTtcbiAgICAgICAg
ICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyBkaXJlY3RpdmVzL1RvZG9Fc2NhcGUudHNc
blxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVTQ0FQRV9LRVkg
PSAyNztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgY2FuY2VscyBlZGl0aW5nIGEgdG9k
byBpZiB0aGUgdXNlciBwcmVzc2VzIHRoZSBFc2Mga2V5LlxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0
aW9uIHRvZG9Fc2NhcGUoKTogbmcuSURpcmVjdGl2ZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGxp
bms6ICgkc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogSlF1ZXJ5LCBhdHRyaWJ1dGVzOiBhbnkp
ID0+IHtcblx0XHRcdFx0ZWxlbWVudC5iaW5kKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0
XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcblx0XHRcdFx0XHRcdCRz
Y29wZS4kYXBwbHkoYXR0cmlidXRlcy50b2RvRXNjYXBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRc
dH0pO1xuXG5cdFx0XHRcdCRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4geyBlbGVtZW50LnVu
YmluZCgna2V5ZG93bicpOyB9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG4vLyBzZXJ2aWNl
cy9Ub2RvU3RvcmFnZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0Jztcblxu
ICAgIC8qKlxuICAgICAqIFNlcnZpY2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyBUT0RP
cyBmcm9tIGxvY2FsU3RvcmFnZS5cbiAgICAgKi9cbiAgICBleHBvcnQgY2xhc3MgVG9kb1N0b3Jh
Z2UgaW1wbGVtZW50cyBJVG9kb1N0b3JhZ2Uge1xuXG4gICAgICAgIFNUT1JBR0VfSUQgPSAndG9k
b3MtYW5ndWxhcmpzLXR5cGVzY3JpcHQnO1xuXG4gICAgICAgIGdldCAoKTogVG9kb0l0ZW1bXSB7
XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlz
LlNUT1JBR0VfSUQpIHx8ICdbXScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHV0KHRvZG9zOiBU
b2RvSXRlbVtdKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JB
R0VfSUQsIEpTT04uc3RyaW5naWZ5KHRvZG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG59Ly8gY29u
dHJvbGxlcnMvVG9kb0N0cmwudHNcblxubW9kdWxlIHRvZG9zIHtcblx0J3VzZSBzdHJpY3QnO1xu
XG5cdC8qKlxuXHQgKiBUaGUgbWFpbiBjb250cm9sbGVyIGZvciB0aGUgYXBwLiBUaGUgY29udHJv
bGxlcjpcblx0ICogLSByZXRyaWV2ZXMgYW5kIHBlcnNpc3RzIHRoZSBtb2RlbCB2aWEgdGhlIHRv
ZG9TdG9yYWdlIHNlcnZpY2Vcblx0ICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUgdGVtcGxh
dGUgYW5kIHByb3ZpZGVzIGV2ZW50IGhhbmRsZXJzXG5cdCAqL1xuXHRleHBvcnQgY2xhc3MgVG9k
b0N0cmwge1xuXG5cdFx0cHJpdmF0ZSB0b2RvczogVG9kb0l0ZW1bXTtcblxuXHRcdC8vICRpbmpl
Y3QgYW5ub3RhdGlvbi5cblx0XHQvLyBJdCBwcm92aWRlcyAkaW5qZWN0b3Igd2l0aCBpbmZvcm1h
dGlvbiBhYm91dCBkZXBlbmRlbmNpZXMgdG8gYmUgaW5qZWN0ZWQgaW50byBjb25zdHJ1Y3Rvclxu
XHRcdC8vIGl0IGlzIGJldHRlciB0byBoYXZlIGl0IGNsb3NlIHRvIHRoZSBjb25zdHJ1Y3Rvciwg
YmVjYXVzZSB0aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoIGluIGNvdW50IGFuZCB0eXBlLlxuXHRc
dC8vIFNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL2RpXG5cdFx0cHVibGljIHN0
YXRpYyAkaW5qZWN0ID0gW1xuXHRcdFx0JyRzY29wZScsXG5cdFx0XHQnJGxvY2F0aW9uJyxcblx0
XHRcdCd0b2RvU3RvcmFnZScsXG5cdFx0XHQnZmlsdGVyRmlsdGVyJ1xuXHRcdF07XG5cblx0XHQv
LyBkZXBlbmRlbmNpZXMgYXJlIGluamVjdGVkIHZpYSBBbmd1bGFySlMgJGluamVjdG9yXG5cdFx0
Ly8gY29udHJvbGxlcidzIG5hbWUgaXMgcmVnaXN0ZXJlZCBpbiBBcHBsaWNhdGlvbi50cyBhbmQg
c3BlY2lmaWVkIGZyb20gbmctY29udHJvbGxlciBhdHRyaWJ1dGUgaW4gaW5kZXguaHRtbFxuXHRc
dGNvbnN0cnVjdG9yKFxuXHRcdFx0cHJpdmF0ZSAkc2NvcGU6IElUb2RvU2NvcGUsXG5cdFx0XHRw
cml2YXRlICRsb2NhdGlvbjogbmcuSUxvY2F0aW9uU2VydmljZSxcblx0XHRcdHByaXZhdGUgdG9k
b1N0b3JhZ2U6IElUb2RvU3RvcmFnZSxcblx0XHRcdHByaXZhdGUgZmlsdGVyRmlsdGVyXG5cdFx0
KSB7XG5cdFx0XHR0aGlzLnRvZG9zID0gJHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7
XG5cblx0XHRcdCRzY29wZS5uZXdUb2RvID0gJyc7XG5cdFx0XHQkc2NvcGUuZWRpdGVkVG9kbyA9
IG51bGw7XG5cblx0XHRcdC8vICd2bScgc3RhbmRzIGZvciAndmlldyBtb2RlbCcuIFdlJ3JlIGFk
ZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbGxlciB0byB0aGUgc2NvcGVcblx0XHRcdC8v
IGZvciBpdHMgbWV0aG9kcyB0byBiZSBhY2Nlc3NpYmxlIGZyb20gdmlldyAvIEhUTUxcblx0XHRc
dCRzY29wZS52bSA9IHRoaXM7XG5cblx0XHRcdC8vIHdhdGNoaW5nIGZvciBldmVudHMvY2hhbmdl
cyBpbiBzY29wZSwgd2hpY2ggYXJlIGNhdXNlZCBieSB2aWV3L3VzZXIgaW5wdXRcblx0XHRcdC8v
IGlmIHlvdSBzdWJzY3JpYmUgdG8gc2NvcGUgb3IgZXZlbnQgd2l0aCBsaWZldGltZSBsb25nZXIg
dGhhbiB0aGlzIGNvbnRyb2xsZXIsIG1ha2Ugc3VyZSB5b3UgdW5zdWJzY3JpYmUuXG5cdFx0XHQk
c2NvcGUuJHdhdGNoKCd0b2RvcycsICgpID0+IHRoaXMub25Ub2RvcygpLCB0cnVlKTtcblx0XHRc
dCRzY29wZS4kd2F0Y2goJ2xvY2F0aW9uLnBhdGgoKScsIHBhdGggPT4gdGhpcy5vblBhdGgocGF0
aCkpXG5cblx0XHRcdGlmICgkbG9jYXRpb24ucGF0aCgpID09PSAnJykgJGxvY2F0aW9uLnBhdGgo
Jy8nKTtcblx0XHRcdCRzY29wZS5sb2NhdGlvbiA9ICRsb2NhdGlvbjtcblx0XHR9XG5cblx0XHRv
blBhdGgocGF0aDogc3RyaW5nKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5zdGF0dXNGaWx0ZXIgPSAo
cGF0aCA9PT0gJy9hY3RpdmUnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBh
dGggPT09ICcvY29tcGxldGVkJykgP1xuXHRcdFx0XHR7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307
XG5cdFx0fVxuXG5cdFx0b25Ub2RvcygpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnJlbWFpbmluZ0Nv
dW50ID0gdGhpcy5maWx0ZXJGaWx0ZXIodGhpcy50b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0p
Lmxlbmd0aDtcblx0XHRcdHRoaXMuJHNjb3BlLmRvbmVDb3VudCA9IHRoaXMudG9kb3MubGVuZ3Ro
IC0gdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnQ7XG5cdFx0XHR0aGlzLiRzY29wZS5hbGxDaGVj
a2VkID0gIXRoaXMuJHNjb3BlLnJlbWFpbmluZ0NvdW50XG5cdFx0XHR0aGlzLnRvZG9TdG9yYWdl
LnB1dCh0aGlzLnRvZG9zKTtcblx0XHR9XG5cblx0XHRhZGRUb2RvKCkge1xuXHRcdFx0dmFyIG5l
d1RvZG8gOiBzdHJpbmcgPSB0aGlzLiRzY29wZS5uZXdUb2RvLnRyaW0oKTtcblx0XHRcdGlmICgh
bmV3VG9kby5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlz
LnRvZG9zLnB1c2gobmV3IFRvZG9JdGVtKG5ld1RvZG8sIGZhbHNlKSk7XG5cdFx0XHR0aGlzLiRz
Y29wZS5uZXdUb2RvID0gJyc7XG5cdFx0fVxuXG5cdFx0ZWRpdFRvZG8odG9kb0l0ZW06IFRvZG9J
dGVtKSB7XG5cdFx0XHR0aGlzLiRzY29wZS5lZGl0ZWRUb2RvID0gdG9kb0l0ZW07XG5cblx0XHRc
dC8vIENsb25lIHRoZSBvcmlnaW5hbCB0b2RvIGluIGNhc2UgZWRpdGluZyBpcyBjYW5jZWxsZWQu
XG5cdFx0XHR0aGlzLiRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9k
b0l0ZW0pO1xuXHRcdH1cblxuXHRcdHJldmVydEVkaXRzKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xu
XHRcdFx0dGhpcy50b2Rvc1t0aGlzLnRvZG9zLmluZGV4T2YodG9kb0l0ZW0pXSA9IHRoaXMuJHNj
b3BlLm9yaWdpbmFsVG9kbztcblx0XHRcdHRoaXMuJHNjb3BlLnJldmVydGVkID0gdHJ1ZTtcblx0
XHR9XG5cblx0XHRkb25lRWRpdGluZyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMu
JHNjb3BlLmVkaXRlZFRvZG8gPSBudWxsO1xuXHRcdFx0dGhpcy4kc2NvcGUub3JpZ2luYWxUb2Rv
ID0gbnVsbDtcblx0XHRcdGlmICh0aGlzLiRzY29wZS5yZXZlcnRlZCkge1xuXHRcdFx0XHQvLyBU
b2RvIGVkaXRzIHdlcmUgcmV2ZXJ0ZWQsIGRvbid0IHNhdmUuXG5cdFx0XHRcdHRoaXMuJHNjb3Bl
LnJldmVydGVkID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dG9kb0l0
ZW0udGl0bGUgPSB0b2RvSXRlbS50aXRsZS50cmltKCk7XG5cdFx0XHRpZiAoIXRvZG9JdGVtLnRp
dGxlKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlVG9kbyh0b2RvSXRlbSk7XG5cdFx0XHR9XG5cdFx0
fVxuXG5cdFx0cmVtb3ZlVG9kbyh0b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMudG9k
b3Muc3BsaWNlKHRoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRlbSksIDEpO1xuXHRcdH1cblxuXHRc
dGNsZWFyRG9uZVRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2NvcGUudG9kb3MgPSB0aGlzLnRvZG9z
ID0gdGhpcy50b2Rvcy5maWx0ZXIodG9kb0l0ZW0gPT4gIXRvZG9JdGVtLmNvbXBsZXRlZCk7XG5c
dFx0fVxuXG5cdFx0bWFya0FsbChjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcblx0XHRcdHRoaXMudG9k
b3MuZm9yRWFjaCh0b2RvSXRlbSA9PiB7IHRvZG9JdGVtLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsg
fSk7XG5cdFx0fVxuXHR9XG5cbn1cbi8vIEFwcGxpY2F0aW9uLnRzXG5cbi8qKlxuICogVGhlIG1h
aW4gVG9kb01WQyBhcHAgbW9kdWxlLlxuICpcbiAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX1cbiAq
L1xubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG9kb212YyA9
IGFuZ3VsYXIubW9kdWxlKCd0b2RvbXZjJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcign
dG9kb0N0cmwnLCBUb2RvQ3RybClcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9CbHVyJywg
dG9kb0JsdXIpXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCB0b2RvRm9jdXMp
XG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgdG9kb0VzY2FwZSlcbiAgICAg
ICAgICAgIC5zZXJ2aWNlKCd0b2RvU3RvcmFnZScsIFRvZG9TdG9yYWdlKTtcbn1cbiIKK21vZHVs
ZS5leHBvcnRzID0gIi8vIGxpYnMvanF1ZXJ5L2pxdWVyeS5kLnRzXG4vKiAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
XG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxu
XG5USElTIENPREUgSVMgUFJPVklERUQgKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJ
TkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVS
Q0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lv
biAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
XG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiAqL1xuXG4vLyBUeXBpbmcgZm9yIHRoZSBqUXVlcnkgbGlicmFyeSwgdmVyc2lvbiAxLjEwLngg
LyAyLjAueFxuLy8gUHJvamVjdDogaHR0cDovL2pxdWVyeS5jb20vXG4vLyBEZWZpbml0aW9ucyBi
eTogQm9yaXMgWWFua292IDxodHRwczovL2dpdGh1Yi5jb20vYm9yaXN5YW5rb3YvPiwgQ2hyaXN0
aWFuIEhvZmZtZWlzdGVyIDxodHRwczovL2dpdGh1Yi5jb20vY2hvZmZtZWlzdGVyPiwgU3RldmUg
RmVudG9uLCBEaXVsbGVpIEdvbWVzIDxodHRwczovL2dpdGh1Yi5jb20vRGl1bGxlaT4sIFRhc3Mg
SWxpb3BvdWxvcyA8aHR0cHM6Ly9naXRodWIuY29tL3Rhc29pbGk+LCBKYXNvbiBTd2VhcmluZ2Vu
LCBTZWFuIEhpbGwgPGh0dHBzOi8vZ2l0aHViLmNvbS9zZWFuc2tpPiwgR3V1cyBHb29zc2VucyA8
aHR0cHM6Ly9naXRodWIuY29tL0d1dXo+LCBLZWxseSBTdW1tZXJsaW4gPGh0dHBzOi8vZ2l0aHVi
LmNvbS9rc3VtbWVybGluPiwgQmFzYXJhdCBBbGkgU3llZCA8aHR0cHM6Ly9naXRodWIuY29tL2Jh
c2FyYXQ+LCBOaWNob2xhcyBXb2x2ZXJzb24gPGh0dHBzOi8vZ2l0aHViLmNvbS9ud29sdmVyc29u
PiwgRGVyZWsgQ2ljZXJvbmUgPGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJla2NpY2Vyb25lPiwgQW5k
cmV3IEdhc3BhciA8aHR0cHM6Ly9naXRodWIuY29tL0FuZHJld0dhc3Bhcj4sIEphbWVzIEhhcnJp
c29uIEZpc2hlciA8aHR0cHM6Ly9naXRodWIuY29tL2phbWVzaGZpc2hlcj4sIFNlaWtpY2hpIEtv
bmRvIDxodHRwczovL2dpdGh1Yi5jb20vc2Vpa2ljaGk+LCBCZW5qYW1pbiBKYWNrbWFuIDxodHRw
czovL2dpdGh1Yi5jb20vYmVuamFtaW5qYWNrbWFuPiwgUG91bCBTb3JlbnNlbiA8aHR0cHM6Ly9n
aXRodWIuY29tL3MwOTMyOTQ+LCBKb3NoIFN0cm9ibCA8aHR0cHM6Ly9naXRodWIuY29tL0pvc2hT
dHJvYmw+LCBKb2huIFJlaWxseSA8aHR0cHM6Ly9naXRodWIuY29tL2pvaG5ueXJlaWxseS8+XG4v
LyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmluaXRlbHlU
eXBlZFxuXG4vKlxuICAgIEludGVyZmFjZSBmb3IgdGhlIEFKQVggc2V0dGluZyB0aGF0IHdpbGwg
Y29uZmlndXJlIHRoZSBBSkFYIHJlcXVlc3RcbiovXG5pbnRlcmZhY2UgSlF1ZXJ5QWpheFNldHRp
bmdzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNlbnQgaW4gdGhlIHJlcXVl
c3QgaGVhZGVyIHRoYXQgdGVsbHMgdGhlIHNlcnZlciB3aGF0IGtpbmQgb2YgcmVzcG9uc2UgaXQg
d2lsbCBhY2NlcHQgaW4gcmV0dXJuLiBJZiB0aGUgYWNjZXB0cyBzZXR0aW5nIG5lZWRzIG1vZGlm
aWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUgJC5hamF4U2V0
dXAoKSBtZXRob2QuXG4gICAgICovXG4gICAgYWNjZXB0cz86IGFueTtcbiAgICAvKipcbiAgICAg
KiBCeSBkZWZhdWx0LCBhbGwgcmVxdWVzdHMgYXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgKGkuZS4g
dGhpcyBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0KS4gSWYgeW91IG5lZWQgc3luY2hyb25vdXMg
cmVxdWVzdHMsIHNldCB0aGlzIG9wdGlvbiB0byBmYWxzZS4gQ3Jvc3MtZG9tYWluIHJlcXVlc3Rz
IGFuZCBkYXRhVHlwZTogXCJqc29ucFwiIHJlcXVlc3RzIGRvIG5vdCBzdXBwb3J0IHN5bmNocm9u
b3VzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHN5bmNocm9ub3VzIHJlcXVlc3RzIG1heSB0ZW1wb3Jh
cmlseSBsb2NrIHRoZSBicm93c2VyLCBkaXNhYmxpbmcgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHJl
cXVlc3QgaXMgYWN0aXZlLiBBcyBvZiBqUXVlcnkgMS44LCB0aGUgdXNlIG9mIGFzeW5jOiBmYWxz
ZSB3aXRoIGpxWEhSICgkLkRlZmVycmVkKSBpcyBkZXByZWNhdGVkOyB5b3UgbXVzdCB1c2UgdGhl
IHN1Y2Nlc3MvZXJyb3IvY29tcGxldGUgY2FsbGJhY2sgb3B0aW9ucyBpbnN0ZWFkIG9mIHRoZSBj
b3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgdGhlIGpxWEhSIG9iamVjdCBzdWNoIGFzIGpxWEhSLmRv
bmUoKSBvciB0aGUgZGVwcmVjYXRlZCBqcVhIUi5zdWNjZXNzKCkuXG4gICAgICovXG4gICAgYXN5
bmM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEEgcHJlLXJlcXVlc3QgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIGpxWEhSIChpbiBqUXVlcnkgMS40
LngsIFhNTEhUVFBSZXF1ZXN0KSBvYmplY3QgYmVmb3JlIGl0IGlzIHNlbnQuIFVzZSB0aGlzIHRv
IHNldCBjdXN0b20gaGVhZGVycywgZXRjLiBUaGUganFYSFIgYW5kIHNldHRpbmdzIG9iamVjdHMg
YXJlIHBhc3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC4gUmV0dXJuaW5n
IGZhbHNlIGluIHRoZSBiZWZvcmVTZW5kIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIHRoZSByZXF1ZXN0
LiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgYmVmb3JlU2VuZCBvcHRpb24gd2lsbCBiZSBjYWxsZWQg
cmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiByZXF1ZXN0LlxuICAgICAqL1xuICAgIGJlZm9yZVNl
bmQ/IChqcVhIUjogSlF1ZXJ5WEhSLCBzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogYW55
O1xuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBmYWxzZSwgaXQgd2lsbCBmb3JjZSByZXF1ZXN0
ZWQgcGFnZXMgbm90IHRvIGJlIGNhY2hlZCBieSB0aGUgYnJvd3Nlci4gTm90ZTogU2V0dGluZyBj
YWNoZSB0byBmYWxzZSB3aWxsIG9ubHkgd29yayBjb3JyZWN0bHkgd2l0aCBIRUFEIGFuZCBHRVQg
cmVxdWVzdHMuIEl0IHdvcmtzIGJ5IGFwcGVuZGluZyBcIl89e3RpbWVzdGFtcH1cIiB0byB0aGUg
R0VUIHBhcmFtZXRlcnMuIFRoZSBwYXJhbWV0ZXIgaXMgbm90IG5lZWRlZCBmb3Igb3RoZXIgdHlw
ZXMgb2YgcmVxdWVzdHMsIGV4Y2VwdCBpbiBJRTggd2hlbiBhIFBPU1QgaXMgbWFkZSB0byBhIFVS
TCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGJ5IGEgR0VULlxuICAgICAqL1xuICAg
IGNhY2hlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxl
ZCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzIChhZnRlciBzdWNjZXNzIGFuZCBlcnJvciBjYWxs
YmFja3MgYXJlIGV4ZWN1dGVkKS4gVGhlIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHR3byBhcmd1bWVu
dHM6IFRoZSBqcVhIUiAoaW4galF1ZXJ5IDEuNC54LCBYTUxIVFRQUmVxdWVzdCkgb2JqZWN0IGFu
ZCBhIHN0cmluZyBjYXRlZ29yaXppbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCAoXCJzdWNj
ZXNzXCIsIFwibm90bW9kaWZpZWRcIiwgXCJlcnJvclwiLCBcInRpbWVvdXRcIiwgXCJhYm9ydFwi
LCBvciBcInBhcnNlcmVycm9yXCIpLiBBcyBvZiBqUXVlcnkgMS41LCB0aGUgY29tcGxldGUgc2V0
dGluZyBjYW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxs
IGJlIGNhbGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAg
Y29tcGxldGU/IChqcVhIUjogSlF1ZXJ5WEhSLCB0ZXh0U3RhdHVzOiBzdHJpbmcpOiBhbnk7XG4g
ICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIHN0cmluZy9yZWd1bGFyLWV4cHJlc3Npb24gcGFp
cnMgdGhhdCBkZXRlcm1pbmUgaG93IGpRdWVyeSB3aWxsIHBhcnNlIHRoZSByZXNwb25zZSwgZ2l2
ZW4gaXRzIGNvbnRlbnQgdHlwZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBj
b250ZW50cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIC8vQWNjb3JkaW5nIHRvIGpR
dWVyeS5hamF4IHNvdXJjZSBjb2RlLCBhamF4J3Mgb3B0aW9uIGFjdHVhbGx5IGFsbG93cyBjb250
ZW50VHlwZSB0byBzZXQgdG8gXCJmYWxzZVwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jv
cmlzeWFua292L0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvNzQyXG4gICAgLyoqXG4gICAgICogV2hl
biBzZW5kaW5nIGRhdGEgdG8gdGhlIHNlcnZlciwgdXNlIHRoaXMgY29udGVudCB0eXBlLiBEZWZh
dWx0IGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04
XCIsIHdoaWNoIGlzIGZpbmUgZm9yIG1vc3QgY2FzZXMuIElmIHlvdSBleHBsaWNpdGx5IHBhc3Mg
aW4gYSBjb250ZW50LXR5cGUgdG8gJC5hamF4KCksIHRoZW4gaXQgaXMgYWx3YXlzIHNlbnQgdG8g
dGhlIHNlcnZlciAoZXZlbiBpZiBubyBkYXRhIGlzIHNlbnQpLiBUaGUgVzNDIFhNTEh0dHBSZXF1
ZXN0IHNwZWNpZmljYXRpb24gZGljdGF0ZXMgdGhhdCB0aGUgY2hhcnNldCBpcyBhbHdheXMgVVRG
LTg7IHNwZWNpZnlpbmcgYW5vdGhlciBjaGFyc2V0IHdpbGwgbm90IGZvcmNlIHRoZSBicm93c2Vy
IHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcuXG4gICAgICovXG4gICAgY29udGVudFR5cGU/OiBhbnk7
XG4gICAgLyoqXG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSBtYWRlIHRoZSBjb250ZXh0IG9m
IGFsbCBBamF4LXJlbGF0ZWQgY2FsbGJhY2tzLiBCeSBkZWZhdWx0LCB0aGUgY29udGV4dCBpcyBh
biBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBhamF4IHNldHRpbmdzIHVzZWQgaW4gdGhlIGNh
bGwgKCQuYWpheFNldHRpbmdzIG1lcmdlZCB3aXRoIHRoZSBzZXR0aW5ncyBwYXNzZWQgdG8gJC5h
amF4KS5cbiAgICAgKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKlxuICAgICAqIEFuIG9i
amVjdCBjb250YWluaW5nIGRhdGFUeXBlLXRvLWRhdGFUeXBlIGNvbnZlcnRlcnMuIEVhY2ggY29u
dmVydGVyJ3MgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVk
IHZhbHVlIG9mIHRoZSByZXNwb25zZS4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAg
ICBjb252ZXJ0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICog
SWYgeW91IHdpc2ggdG8gZm9yY2UgYSBjcm9zc0RvbWFpbiByZXF1ZXN0IChzdWNoIGFzIEpTT05Q
KSBvbiB0aGUgc2FtZSBkb21haW4sIHNldCB0aGUgdmFsdWUgb2YgY3Jvc3NEb21haW4gdG8gdHJ1
ZS4gVGhpcyBhbGxvd3MsIGZvciBleGFtcGxlLCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbiB0byBh
bm90aGVyIGRvbWFpbi4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBjcm9zc0Rv
bWFpbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRGF0YSB0byBiZSBzZW50IHRvIHRoZSBz
ZXJ2ZXIuIEl0IGlzIGNvbnZlcnRlZCB0byBhIHF1ZXJ5IHN0cmluZywgaWYgbm90IGFscmVhZHkg
YSBzdHJpbmcuIEl0J3MgYXBwZW5kZWQgdG8gdGhlIHVybCBmb3IgR0VULXJlcXVlc3RzLiBTZWUg
cHJvY2Vzc0RhdGEgb3B0aW9uIHRvIHByZXZlbnQgdGhpcyBhdXRvbWF0aWMgcHJvY2Vzc2luZy4g
T2JqZWN0IG11c3QgYmUgS2V5L1ZhbHVlIHBhaXJzLiBJZiB2YWx1ZSBpcyBhbiBBcnJheSwgalF1
ZXJ5IHNlcmlhbGl6ZXMgbXVsdGlwbGUgdmFsdWVzIHdpdGggc2FtZSBrZXkgYmFzZWQgb24gdGhl
IHZhbHVlIG9mIHRoZSB0cmFkaXRpb25hbCBzZXR0aW5nIChkZXNjcmliZWQgYmVsb3cpLlxuICAg
ICAqL1xuICAgIGRhdGE/OiBhbnk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBiZSB1
c2VkIHRvIGhhbmRsZSB0aGUgcmF3IHJlc3BvbnNlIGRhdGEgb2YgWE1MSHR0cFJlcXVlc3QuVGhp
cyBpcyBhIHByZS1maWx0ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlLiBZ
b3Ugc2hvdWxkIHJldHVybiB0aGUgc2FuaXRpemVkIGRhdGEuIFRoZSBmdW5jdGlvbiBhY2NlcHRz
IHR3byBhcmd1bWVudHM6IFRoZSByYXcgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgYW5k
IHRoZSAnZGF0YVR5cGUnIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBkYXRhRmlsdGVyPyAoZGF0
YTogYW55LCB0eTogYW55KTogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGRhdGEg
dGhhdCB5b3UncmUgZXhwZWN0aW5nIGJhY2sgZnJvbSB0aGUgc2VydmVyLiBJZiBub25lIGlzIHNw
ZWNpZmllZCwgalF1ZXJ5IHdpbGwgdHJ5IHRvIGluZmVyIGl0IGJhc2VkIG9uIHRoZSBNSU1FIHR5
cGUgb2YgdGhlIHJlc3BvbnNlIChhbiBYTUwgTUlNRSB0eXBlIHdpbGwgeWllbGQgWE1MLCBpbiAx
LjQgSlNPTiB3aWxsIHlpZWxkIGEgSmF2YVNjcmlwdCBvYmplY3QsIGluIDEuNCBzY3JpcHQgd2ls
bCBleGVjdXRlIHRoZSBzY3JpcHQsIGFuZCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcmV0dXJuZWQg
YXMgYSBzdHJpbmcpLlxuICAgICAqL1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIC8qKlxu
ICAgICAqIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBUaGUg
ZnVuY3Rpb24gcmVjZWl2ZXMgdGhyZWUgYXJndW1lbnRzOiBUaGUganFYSFIgKGluIGpRdWVyeSAx
LjQueCwgWE1MSHR0cFJlcXVlc3QpIG9iamVjdCwgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlw
ZSBvZiBlcnJvciB0aGF0IG9jY3VycmVkIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gb2JqZWN0
LCBpZiBvbmUgb2NjdXJyZWQuIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVu
dCAoYmVzaWRlcyBudWxsKSBhcmUgXCJ0aW1lb3V0XCIsIFwiZXJyb3JcIiwgXCJhYm9ydFwiLCBh
bmQgXCJwYXJzZXJlcnJvclwiLiBXaGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzLCBlcnJvclRocm93
biByZWNlaXZlcyB0aGUgdGV4dHVhbCBwb3J0aW9uIG9mIHRoZSBIVFRQIHN0YXR1cywgc3VjaCBh
cyBcIk5vdCBGb3VuZFwiIG9yIFwiSW50ZXJuYWwgU2VydmVyIEVycm9yLlwiIEFzIG9mIGpRdWVy
eSAxLjUsIHRoZSBlcnJvciBzZXR0aW5nIGNhbiBhY2NlcHQgYW4gYXJyYXkgb2YgZnVuY3Rpb25z
LiBFYWNoIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHR1cm4uIE5vdGU6IFRoaXMgaGFuZGxl
ciBpcyBub3QgY2FsbGVkIGZvciBjcm9zcy1kb21haW4gc2NyaXB0IGFuZCBjcm9zcy1kb21haW4g
SlNPTlAgcmVxdWVzdHMuIFRoaXMgaXMgYW4gQWpheCBFdmVudC5cbiAgICAgKi9cbiAgICBlcnJv
cj8gKGpxWEhSOiBKUXVlcnlYSFIsIHRleHRTdGF0dXM6IHN0cmluZywgZXJyb3JUaHJvdzogc3Ry
aW5nKTogYW55O1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdHJpZ2dlciBnbG9iYWwgQWph
eCBldmVudCBoYW5kbGVycyBmb3IgdGhpcyByZXF1ZXN0LiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBT
ZXQgdG8gZmFsc2UgdG8gcHJldmVudCB0aGUgZ2xvYmFsIGhhbmRsZXJzIGxpa2UgYWpheFN0YXJ0
IG9yIGFqYXhTdG9wIGZyb20gYmVpbmcgdHJpZ2dlcmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNv
bnRyb2wgdmFyaW91cyBBamF4IEV2ZW50cy5cbiAgICAgKi9cbiAgICBnbG9iYWw/OiBib29sZWFu
O1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFs
dWUgcGFpcnMgdG8gc2VuZCBhbG9uZyB3aXRoIHJlcXVlc3RzIHVzaW5nIHRoZSBYTUxIdHRwUmVx
dWVzdCB0cmFuc3BvcnQuIFRoZSBoZWFkZXIgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVl
c3QgaXMgYWx3YXlzIGFkZGVkLCBidXQgaXRzIGRlZmF1bHQgWE1MSHR0cFJlcXVlc3QgdmFsdWUg
Y2FuIGJlIGNoYW5nZWQgaGVyZS4gVmFsdWVzIGluIHRoZSBoZWFkZXJzIHNldHRpbmcgY2FuIGFs
c28gYmUgb3ZlcndyaXR0ZW4gZnJvbSB3aXRoaW4gdGhlIGJlZm9yZVNlbmQgZnVuY3Rpb24uICh2
ZXJzaW9uIGFkZGVkOiAxLjUpXG4gICAgICovXG4gICAgaGVhZGVycz86IHsgW2tleTogc3RyaW5n
XTogYW55OyB9O1xuICAgIC8qKlxuICAgICAqIEFsbG93IHRoZSByZXF1ZXN0IHRvIGJlIHN1Y2Nl
c3NmdWwgb25seSBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVx
dWVzdC4gVGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlci4g
RGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgaWdub3JpbmcgdGhlIGhlYWRlci4gSW4galF1ZXJ5IDEu
NCB0aGlzIHRlY2huaXF1ZSBhbHNvIGNoZWNrcyB0aGUgJ2V0YWcnIHNwZWNpZmllZCBieSB0aGUg
c2VydmVyIHRvIGNhdGNoIHVubW9kaWZpZWQgZGF0YS5cbiAgICAgKi9cbiAgICBpZk1vZGlmaWVk
PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCBlbnZpcm9ubWVu
dCB0byBiZSByZWNvZ25pemVkIGFzIFwibG9jYWwsXCIgKGUuZy4gdGhlIGZpbGVzeXN0ZW0pLCBl
dmVuIGlmIGpRdWVyeSBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgc3VjaCBieSBkZWZhdWx0LiBU
aGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYXMgbG9jYWw6
IGZpbGUsICotZXh0ZW5zaW9uLCBhbmQgd2lkZ2V0LiBJZiB0aGUgaXNMb2NhbCBzZXR0aW5nIG5l
ZWRzIG1vZGlmaWNhdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28gb25jZSBpbiB0aGUg
JC5hamF4U2V0dXAoKSBtZXRob2QuICh2ZXJzaW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAg
ICBpc0xvY2FsPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgY2FsbGJh
Y2sgZnVuY3Rpb24gbmFtZSBpbiBhIGpzb25wIHJlcXVlc3QuIFRoaXMgdmFsdWUgd2lsbCBiZSB1
c2VkIGluc3RlYWQgb2YgJ2NhbGxiYWNrJyBpbiB0aGUgJ2NhbGxiYWNrPT8nIHBhcnQgb2YgdGhl
IHF1ZXJ5IHN0cmluZyBpbiB0aGUgdXJsLiBTbyB7anNvbnA6J29uSlNPTlBMb2FkJ30gd291bGQg
cmVzdWx0IGluICdvbkpTT05QTG9hZD0/JyBwYXNzZWQgdG8gdGhlIHNlcnZlci4gQXMgb2YgalF1
ZXJ5IDEuNSwgc2V0dGluZyB0aGUganNvbnAgb3B0aW9uIHRvIGZhbHNlIHByZXZlbnRzIGpRdWVy
eSBmcm9tIGFkZGluZyB0aGUgXCI/Y2FsbGJhY2tcIiBzdHJpbmcgdG8gdGhlIFVSTCBvciBhdHRl
bXB0aW5nIHRvIHVzZSBcIj0/XCIgZm9yIHRyYW5zZm9ybWF0aW9uLiBJbiB0aGlzIGNhc2UsIHlv
dSBzaG91bGQgYWxzbyBleHBsaWNpdGx5IHNldCB0aGUganNvbnBDYWxsYmFjayBzZXR0aW5nLiBG
b3IgZXhhbXBsZSwgeyBqc29ucDogZmFsc2UsIGpzb25wQ2FsbGJhY2s6IFwiY2FsbGJhY2tOYW1l
XCIgfVxuICAgICAqL1xuICAgIGpzb25wPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNp
ZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgZm9yIGEgSlNPTlAgcmVxdWVzdC4gVGhpcyB2
YWx1ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgcmFuZG9tIG5hbWUgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgYnkgalF1ZXJ5LiBJdCBpcyBwcmVmZXJhYmxlIHRvIGxldCBqUXVlcnkgZ2Vu
ZXJhdGUgYSB1bmlxdWUgbmFtZSBhcyBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgdGhl
IHJlcXVlc3RzIGFuZCBwcm92aWRlIGNhbGxiYWNrcyBhbmQgZXJyb3IgaGFuZGxpbmcuIFlvdSBt
YXkgd2FudCB0byBzcGVjaWZ5IHRoZSBjYWxsYmFjayB3aGVuIHlvdSB3YW50IHRvIGVuYWJsZSBi
ZXR0ZXIgYnJvd3NlciBjYWNoaW5nIG9mIEdFVCByZXF1ZXN0cy4gQXMgb2YgalF1ZXJ5IDEuNSwg
eW91IGNhbiBhbHNvIHVzZSBhIGZ1bmN0aW9uIGZvciB0aGlzIHNldHRpbmcsIGluIHdoaWNoIGNh
c2UgdGhlIHZhbHVlIG9mIGpzb25wQ2FsbGJhY2sgaXMgc2V0IHRvIHRoZSByZXR1cm4gdmFsdWUg
b2YgdGhhdCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBqc29ucENhbGxiYWNrPzogYW55O1xuICAg
IC8qKlxuICAgICAqIEEgbWltZSB0eXBlIHRvIG92ZXJyaWRlIHRoZSBYSFIgbWltZSB0eXBlLiAo
dmVyc2lvbiBhZGRlZDogMS41LjEpXG4gICAgICovXG4gICAgbWltZVR5cGU/OiBzdHJpbmc7XG4g
ICAgLyoqXG4gICAgICogQSBwYXNzd29yZCB0byBiZSB1c2VkIHdpdGggWE1MSHR0cFJlcXVlc3Qg
aW4gcmVzcG9uc2UgdG8gYW4gSFRUUCBhY2Nlc3MgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAg
ICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0
LCBkYXRhIHBhc3NlZCBpbiB0byB0aGUgZGF0YSBvcHRpb24gYXMgYW4gb2JqZWN0ICh0ZWNobmlj
YWxseSwgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZykgd2lsbCBiZSBwcm9jZXNzZWQgYW5k
IHRyYW5zZm9ybWVkIGludG8gYSBxdWVyeSBzdHJpbmcsIGZpdHRpbmcgdG8gdGhlIGRlZmF1bHQg
Y29udGVudC10eXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuIElmIHlv
dSB3YW50IHRvIHNlbmQgYSBET01Eb2N1bWVudCwgb3Igb3RoZXIgbm9uLXByb2Nlc3NlZCBkYXRh
LCBzZXQgdGhpcyBvcHRpb24gdG8gZmFsc2UuXG4gICAgICovXG4gICAgcHJvY2Vzc0RhdGE/OiBi
b29sZWFuO1xuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBcInNjcmlwdFwi
IHRyYW5zcG9ydCBpcyB1c2VkIChlLmcuLCBjcm9zcy1kb21haW4gcmVxdWVzdHMgd2l0aCBcImpz
b25wXCIgb3IgXCJzY3JpcHRcIiBkYXRhVHlwZSBhbmQgXCJHRVRcIiB0eXBlKS4gU2V0cyB0aGUg
Y2hhcnNldCBhdHRyaWJ1dGUgb24gdGhlIHNjcmlwdCB0YWcgdXNlZCBpbiB0aGUgcmVxdWVzdC4g
VXNlZCB3aGVuIHRoZSBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBsb2NhbCBwYWdlIGlzIG5vdCB0aGUg
c2FtZSBhcyB0aGUgb25lIG9uIHRoZSByZW1vdGUgc2NyaXB0LlxuICAgICAqL1xuICAgIHNjcmlw
dENoYXJzZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IG9mIG51bWVyaWMg
SFRUUCBjb2RlcyBhbmQgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXNwb25zZSBo
YXMgdGhlIGNvcnJlc3BvbmRpbmcgY29kZS4gZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCB0
aGUgc3RhdHVzIGNvZGUgZnVuY3Rpb25zIHRha2UgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUg
c3VjY2VzcyBjYWxsYmFjazsgaWYgaXQgcmVzdWx0cyBpbiBhbiBlcnJvciAoaW5jbHVkaW5nIDN4
eCByZWRpcmVjdCksIHRoZXkgdGFrZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBlcnJvciBj
YWxsYmFjay4gKHZlcnNpb24gYWRkZWQ6IDEuNSlcbiAgICAgKi9cbiAgICBzdGF0dXNDb2RlPzog
eyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBi
ZSBjYWxsZWQgaWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMuIFRoZSBmdW5jdGlvbiBnZXRzIHBhc3Nl
ZCB0aHJlZSBhcmd1bWVudHM6IFRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgZm9y
bWF0dGVkIGFjY29yZGluZyB0byB0aGUgZGF0YVR5cGUgcGFyYW1ldGVyOyBhIHN0cmluZyBkZXNj
cmliaW5nIHRoZSBzdGF0dXM7IGFuZCB0aGUganFYSFIgKGluIGpRdWVyeSAxLjQueCwgWE1MSHR0
cFJlcXVlc3QpIG9iamVjdC4gQXMgb2YgalF1ZXJ5IDEuNSwgdGhlIHN1Y2Nlc3Mgc2V0dGluZyBj
YW4gYWNjZXB0IGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiB3aWxsIGJlIGNh
bGxlZCBpbiB0dXJuLiBUaGlzIGlzIGFuIEFqYXggRXZlbnQuXG4gICAgICovXG4gICAgc3VjY2Vz
cz8gKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKTogYW55
O1xuICAgIC8qKlxuICAgICAqIFNldCBhIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHRo
ZSByZXF1ZXN0LiBUaGlzIHdpbGwgb3ZlcnJpZGUgYW55IGdsb2JhbCB0aW1lb3V0IHNldCB3aXRo
ICQuYWpheFNldHVwKCkuIFRoZSB0aW1lb3V0IHBlcmlvZCBzdGFydHMgYXQgdGhlIHBvaW50IHRo
ZSAkLmFqYXggY2FsbCBpcyBtYWRlOyBpZiBzZXZlcmFsIG90aGVyIHJlcXVlc3RzIGFyZSBpbiBw
cm9ncmVzcyBhbmQgdGhlIGJyb3dzZXIgaGFzIG5vIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSwgaXQg
aXMgcG9zc2libGUgZm9yIGEgcmVxdWVzdCB0byB0aW1lIG91dCBiZWZvcmUgaXQgY2FuIGJlIHNl
bnQuIEluIGpRdWVyeSAxLjQueCBhbmQgYmVsb3csIHRoZSBYTUxIdHRwUmVxdWVzdCBvYmplY3Qg
d2lsbCBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIHRoZSByZXF1ZXN0IHRpbWVzIG91dDsgYWNj
ZXNzaW5nIGFueSBvYmplY3QgbWVtYmVycyBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLiBJbiBGaXJl
Zm94IDMuMCsgb25seSwgc2NyaXB0IGFuZCBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2Vs
bGVkIGJ5IGEgdGltZW91dDsgdGhlIHNjcmlwdCB3aWxsIHJ1biBldmVuIGlmIGl0IGFycml2ZXMg
YWZ0ZXIgdGhlIHRpbWVvdXQgcGVyaW9kLlxuICAgICAqL1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7
XG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhl
IHRyYWRpdGlvbmFsIHN0eWxlIG9mIHBhcmFtIHNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAg
dHJhZGl0aW9uYWw/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJlcXVl
c3QgdG8gbWFrZSAoXCJQT1NUXCIgb3IgXCJHRVRcIiksIGRlZmF1bHQgaXMgXCJHRVRcIi4gTm90
ZTogT3RoZXIgSFRUUCByZXF1ZXN0IG1ldGhvZHMsIHN1Y2ggYXMgUFVUIGFuZCBERUxFVEUsIGNh
biBhbHNvIGJlIHVzZWQgaGVyZSwgYnV0IHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJy
b3dzZXJzLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQSBz
dHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4g
ICAgICovXG4gICAgdXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEEgdXNlcm5hbWUgdG8g
YmUgdXNlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IGluIHJlc3BvbnNlIHRvIGFuIEhUVFAgYWNjZXNz
IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4gICAgICovXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7
XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIGNyZWF0aW5nIHRoZSBYTUxIdHRwUmVxdWVz
dCBvYmplY3QuIERlZmF1bHRzIHRvIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gYXZhaWxhYmxlIChJ
RSksIHRoZSBYTUxIdHRwUmVxdWVzdCBvdGhlcndpc2UuIE92ZXJyaWRlIHRvIHByb3ZpZGUgeW91
ciBvd24gaW1wbGVtZW50YXRpb24gZm9yIFhNTEh0dHBSZXF1ZXN0IG9yIGVuaGFuY2VtZW50cyB0
byB0aGUgZmFjdG9yeS5cbiAgICAgKi9cbiAgICB4aHI/OiBhbnk7XG4gICAgLyoqXG4gICAgICog
QW4gb2JqZWN0IG9mIGZpZWxkTmFtZS1maWVsZFZhbHVlIHBhaXJzIHRvIHNldCBvbiB0aGUgbmF0
aXZlIFhIUiBvYmplY3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBpdCB0byBzZXQgd2l0aENy
ZWRlbnRpYWxzIHRvIHRydWUgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBpZiBuZWVkZWQuIElu
IGpRdWVyeSAxLjUsIHRoZSB3aXRoQ3JlZGVudGlhbHMgcHJvcGVydHkgd2FzIG5vdCBwcm9wYWdh
dGVkIHRvIHRoZSBuYXRpdmUgWEhSIGFuZCB0aHVzIENPUlMgcmVxdWVzdHMgcmVxdWlyaW5nIGl0
IHdvdWxkIGlnbm9yZSB0aGlzIGZsYWcuIEZvciB0aGlzIHJlYXNvbiwgd2UgcmVjb21tZW5kIHVz
aW5nIGpRdWVyeSAxLjUuMSsgc2hvdWxkIHlvdSByZXF1aXJlIHRoZSB1c2Ugb2YgaXQuICh2ZXJz
aW9uIGFkZGVkOiAxLjUuMSlcbiAgICAgKi9cbiAgICB4aHJGaWVsZHM/OiB7IFtrZXk6IHN0cmlu
Z106IGFueTsgfTtcbn1cblxuLypcbiAgICBJbnRlcmZhY2UgZm9yIHRoZSBqcVhIUiBvYmplY3Rc
biovXG5pbnRlcmZhY2UgSlF1ZXJ5WEhSIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3QsIEpRdWVyeVBy
b21pc2U8YW55PiB7XG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lVHlwZTogc3RyaW5nKTogYW55
O1xuICAgIGFib3J0KHN0YXR1c1RleHQ/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKlxuICAgIElu
dGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBjYWxsYmFja1xuKi9cbmludGVyZmFjZSBKUXVlcnlDYWxs
YmFjayB7XG4gICAgYWRkKC4uLmNhbGxiYWNrczogYW55W10pOiBhbnk7XG4gICAgZGlzYWJsZSgp
OiBhbnk7XG4gICAgZW1wdHkoKTogYW55O1xuICAgIGZpcmUoLi4uYXJndW1lbnRzOiBhbnlbXSk6
IGFueTtcbiAgICBmaXJlZCgpOiBib29sZWFuO1xuICAgIGZpcmVXaXRoKGNvbnRleHQ6IGFueSwg
Li4uYXJnczogYW55W10pOiBhbnk7XG4gICAgaGFzKGNhbGxiYWNrOiBhbnkpOiBib29sZWFuO1xu
ICAgIGxvY2soKTogYW55O1xuICAgIGxvY2tlZCgpOiBib29sZWFuO1xuICAgIHJlbW92ZSguLi5j
YWxsYmFja3M6IGFueVtdKTogYW55O1xufVxuXG4vKlxuICAgIEFsbG93cyBqUXVlcnkgUHJvbWlz
ZXMgdG8gaW50ZXJvcCB3aXRoIG5vbi1qUXVlcnkgcHJvbWlzZXNcbiovXG5pbnRlcmZhY2UgSlF1
ZXJ5R2VuZXJpY1Byb21pc2U8VD4ge1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAodmFsdWU6IFQp
ID0+IFUsIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJpY1Byb21p
c2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBVKTogSlF1ZXJ5R2VuZXJp
Y1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25S
ZWplY3Q/OiAocmVhc29uOiBhbnkpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+KTogSlF1ZXJ5
R2VuZXJpY1Byb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4g
SlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUmVqZWN0PzogKHJlYXNvbjogYW55KSA9PiBKUXVl
cnlHZW5lcmljUHJvbWlzZTxVPik6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+O1xufVxuXG4vKlxu
ICAgIEludGVyZmFjZSBmb3IgdGhlIEpRdWVyeSBwcm9taXNlLCBwYXJ0IG9mIGNhbGxiYWNrc1xu
Ki9cbmludGVyZmFjZSBKUXVlcnlQcm9taXNlPFQ+IHtcbiAgICAvLyBHZW5lcmljIHZlcnNpb25z
IG9mIGNhbGxiYWNrc1xuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IFRbXSk6IEpRdWVy
eVByb21pc2U8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlQcm9t
aXNlPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlzZTxU
PjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5UHJvbWlz
ZTxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJv
bWlzZTxUPjtcbiAgICBkb25lKC4uLmRvbmVDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlz
ZTxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5UHJvbWlzZTxU
PjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVlcnlQcm9t
aXNlPFQ+O1xuXG4gICAgLy8gRGVwcmVjYXRlZCAtIGdpdmVuIG5vIHR5cGluZ3NcbiAgICBwaXBl
KGRvbmVGaWx0ZXI/OiAoeDogYW55KSA9PiBhbnksIGZhaWxGaWx0ZXI/OiAoeDogYW55KSA9PiBh
bnksIHByb2dyZXNzRmlsdGVyPzogKHg6IGFueSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxhbnk+
O1xuXG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTogVCkgPT4gVSwgb25SZWplY3Q/OiAo
Li4ucmVhc29uczogYW55W10pID0+IFUsIG9uUHJvZ3Jlc3M/OiAoLi4ucHJvZ3Jlc3Npb246IGFu
eVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAgIHRoZW48VT4ob25GdWxmaWxsOiAo
dmFsdWU6IFQpID0+IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFz
b25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+
IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAgdGhlbjxVPihvbkZ1bGZpbGw6ICh2YWx1ZTog
VCkgPT4gVSwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQ
cm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTog
SlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKHZhbHVlOiBUKSA9PiBK
UXVlcnlHZW5lcmljUHJvbWlzZTxVPiwgb25SZWplY3Q/OiAoLi4ucmVhc29uczogYW55W10pID0+
IEpRdWVyeUdlbmVyaWNQcm9taXNlPFU+LCBvblByb2dyZXNzPzogKC4uLnByb2dyZXNzaW9uOiBh
bnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcblxuICAgIC8vIEJlY2F1c2UgSlF1ZXJ5
IFByb21pc2VzIFN1Y2tcbiAgICB0aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10p
ID0+IFUsIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBVLCBvblByb2dyZXNzPzog
KC4uLnByb2dyZXNzaW9uOiBhbnlbXSkgPT4gYW55KTogSlF1ZXJ5UHJvbWlzZTxVPjtcbiAgICB0
aGVuPFU+KG9uRnVsZmlsbDogKC4uLnZhbHVlczogYW55W10pID0+IEpRdWVyeUdlbmVyaWNQcm9t
aXNlPFU+LCBvblJlamVjdD86ICguLi5yZWFzb25zOiBhbnlbXSkgPT4gVSwgb25Qcm9ncmVzcz86
ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6IEpRdWVyeVByb21pc2U8VT47XG4gICAg
dGhlbjxVPihvbkZ1bGZpbGw6ICguLi52YWx1ZXM6IGFueVtdKSA9PiBVLCBvblJlamVjdD86ICgu
Li5yZWFzb25zOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1Byb21pc2U8VT4sIG9uUHJvZ3Jlc3M/
OiAoLi4ucHJvZ3Jlc3Npb246IGFueVtdKSA9PiBhbnkpOiBKUXVlcnlQcm9taXNlPFU+O1xuICAg
IHRoZW48VT4ob25GdWxmaWxsOiAoLi4udmFsdWVzOiBhbnlbXSkgPT4gSlF1ZXJ5R2VuZXJpY1By
b21pc2U8VT4sIG9uUmVqZWN0PzogKC4uLnJlYXNvbnM6IGFueVtdKSA9PiBKUXVlcnlHZW5lcmlj
UHJvbWlzZTxVPiwgb25Qcm9ncmVzcz86ICguLi5wcm9ncmVzc2lvbjogYW55W10pID0+IGFueSk6
IEpRdWVyeVByb21pc2U8VT47XG59XG5cbi8qXG4gICAgSW50ZXJmYWNlIGZvciB0aGUgSlF1ZXJ5
IGRlZmVycmVkLCBwYXJ0IG9mIGNhbGxiYWNrc1xuKi9cbmludGVyZmFjZSBKUXVlcnlEZWZlcnJl
ZDxUPiBleHRlbmRzIEpRdWVyeVByb21pc2U8VD4ge1xuICAgIC8vIEdlbmVyaWMgdmVyc2lvbnMg
b2YgY2FsbGJhY2tzXG4gICAgYWx3YXlzKC4uLmFsd2F5c0NhbGxiYWNrczogVFtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcbiAgICBmYWlsKC4uLmZhaWxDYWxsYmFja3M6IFRbXSk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIHByb2dyZXNzKC4uLnByb2dyZXNzQ2FsbGJhY2tzOiBUW10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcblxuICAgIGFsd2F5cyguLi5hbHdheXNDYWxsYmFja3M6IGFueVtdKTogSlF1ZXJ5
RGVmZXJyZWQ8VD47XG4gICAgZG9uZSguLi5kb25lQ2FsbGJhY2tzOiBhbnlbXSk6IEpRdWVyeURl
ZmVycmVkPFQ+O1xuICAgIGZhaWwoLi4uZmFpbENhbGxiYWNrczogYW55W10pOiBKUXVlcnlEZWZl
cnJlZDxUPjtcbiAgICBwcm9ncmVzcyguLi5wcm9ncmVzc0NhbGxiYWNrczogYW55W10pOiBKUXVl
cnlEZWZlcnJlZDxUPjtcblxuICAgIG5vdGlmeSguLi5hcmdzOiBhbnlbXSk6IEpRdWVyeURlZmVy
cmVkPFQ+O1xuICAgIG5vdGlmeVdpdGgoY29udGV4dDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IEpR
dWVyeURlZmVycmVkPFQ+O1xuXG4gICAgcmVqZWN0KC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVm
ZXJyZWQ8VD47XG4gICAgcmVqZWN0V2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTog
SlF1ZXJ5RGVmZXJyZWQ8VD47XG5cbiAgICByZXNvbHZlKHZhbDogVCk6IEpRdWVyeURlZmVycmVk
PFQ+O1xuICAgIHJlc29sdmUoLi4uYXJnczogYW55W10pOiBKUXVlcnlEZWZlcnJlZDxUPjtcbiAg
ICByZXNvbHZlV2l0aChjb250ZXh0OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogSlF1ZXJ5RGVmZXJy
ZWQ8VD47XG4gICAgc3RhdGUoKTogc3RyaW5nO1xuXG4gICAgcHJvbWlzZSh0YXJnZXQ/OiBhbnkp
OiBKUXVlcnlQcm9taXNlPFQ+O1xufVxuXG4vKlxuICAgIEludGVyZmFjZSBvZiB0aGUgSlF1ZXJ5
IGV4dGVuc2lvbiBvZiB0aGUgVzNDIGV2ZW50IG9iamVjdFxuKi9cblxuaW50ZXJmYWNlIEJhc2VK
UXVlcnlFdmVudE9iamVjdCBleHRlbmRzIEV2ZW50IHtcbiAgICBkYXRhOiBhbnk7XG4gICAgZGVs
ZWdhdGVUYXJnZXQ6IEVsZW1lbnQ7XG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47
XG4gICAgaXNJbW1lZGlhdGVQcm9wb2dhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcbiAgICBpc1By
b3BhZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAg
IHByZXZlbnREZWZhdWx0KCk6IGFueTtcbiAgICByZWxhdGVkVGFyZ2V0OiBFbGVtZW50O1xuICAg
IHJlc3VsdDogYW55O1xuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAg
IHN0b3BQcm9wYWdhdGlvbigpOiB2b2lkO1xuICAgIHBhZ2VYOiBudW1iZXI7XG4gICAgcGFnZVk6
IG51bWJlcjtcbiAgICB3aGljaDogbnVtYmVyO1xuICAgIG1ldGFLZXk6IGJvb2xlYW47XG59XG5c
bmludGVyZmFjZSBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50
T2JqZWN0IHtcbiAgICBhbHRLZXk6IGJvb2xlYW47XG4gICAgY3RybEtleTogYm9vbGVhbjtcbiAg
ICBtZXRhS2V5OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5OiBib29sZWFuO1xufVxuXG5pbnRlcmZh
Y2UgSlF1ZXJ5TW91c2VFdmVudE9iamVjdCBleHRlbmRzIEpRdWVyeUlucHV0RXZlbnRPYmplY3Qg
e1xuICAgIGJ1dHRvbjogbnVtYmVyO1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZ
OiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAg
ICBwYWdlWDogbnVtYmVyO1xuICAgIHBhZ2VZOiBudW1iZXI7XG4gICAgc2NyZWVuWDogbnVtYmVy
O1xuICAgIHNjcmVlblk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEpRdWVyeUtleUV2ZW50T2Jq
ZWN0IGV4dGVuZHMgSlF1ZXJ5SW5wdXRFdmVudE9iamVjdCB7XG4gICAgY2hhcjogYW55O1xuICAg
IGNoYXJDb2RlOiBudW1iZXI7XG4gICAga2V5OiBhbnk7XG4gICAga2V5Q29kZTogbnVtYmVyO1xu
fVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCBleHRlbmRzIEJhc2VKUXVl
cnlFdmVudE9iamVjdCB7XG4gICAgb3JpZ2luYWxFdmVudDogUG9wU3RhdGVFdmVudDtcbn1cblxu
aW50ZXJmYWNlIEpRdWVyeUV2ZW50T2JqZWN0IGV4dGVuZHMgQmFzZUpRdWVyeUV2ZW50T2JqZWN0
LCBKUXVlcnlJbnB1dEV2ZW50T2JqZWN0LCBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0LCBKUXVlcnlL
ZXlFdmVudE9iamVjdCwgSlF1ZXJ5UG9wU3RhdGVFdmVudE9iamVjdCB7XG59XG5cbi8qXG4gICAg
Q29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzZXJcbiovXG5cbmlu
dGVyZmFjZSBKUXVlcnlTdXBwb3J0IHtcbiAgICBhamF4PzogYm9vbGVhbjtcbiAgICBib3hNb2Rl
bD86IGJvb2xlYW47XG4gICAgY2hhbmdlQnViYmxlcz86IGJvb2xlYW47XG4gICAgY2hlY2tDbG9u
ZT86IGJvb2xlYW47XG4gICAgY2hlY2tPbj86IGJvb2xlYW47XG4gICAgY29ycz86IGJvb2xlYW47
XG4gICAgY3NzRmxvYXQ/OiBib29sZWFuO1xuICAgIGhyZWZOb3JtYWxpemVkPzogYm9vbGVhbjtc
biAgICBodG1sU2VyaWFsaXplPzogYm9vbGVhbjtcbiAgICBsZWFkaW5nV2hpdGVzcGFjZT86IGJv
b2xlYW47XG4gICAgbm9DbG9uZUNoZWNrZWQ/OiBib29sZWFuO1xuICAgIG5vQ2xvbmVFdmVudD86
IGJvb2xlYW47XG4gICAgb3BhY2l0eT86IGJvb2xlYW47XG4gICAgb3B0RGlzYWJsZWQ/OiBib29s
ZWFuO1xuICAgIG9wdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBzY3JpcHRFdmFsPyAoKTogYm9v
bGVhbjtcbiAgICBzdHlsZT86IGJvb2xlYW47XG4gICAgc3VibWl0QnViYmxlcz86IGJvb2xlYW47
XG4gICAgdGJvZHk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSlF1ZXJ5UGFyYW0ge1xuICAg
IChvYmo6IGFueSk6IHN0cmluZztcbiAgICAob2JqOiBhbnksIHRyYWRpdGlvbmFsOiBib29sZWFu
KTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb25zdHJ1Y3Qg
alF1ZXJ5IGV2ZW50cyAod2l0aCAkLkV2ZW50KS4gSXQgaXNcbiAqIGRlZmluZWQgc2VwYXJhdGVs
eSBpbnN0ZWFkIG9mIGlubGluZSBpbiBKUXVlcnlTdGF0aWMgdG8gYWxsb3dcbiAqIG92ZXJyaWRp
bmcgdGhlIGNvbnN0cnVjdGlvbiBmdW5jdGlvbiB3aXRoIHNwZWNpZmljIHN0cmluZ3NcbiAqIHJl
dHVybmluZyBzcGVjaWZpYyBldmVudCBvYmplY3RzLlxuICovXG5pbnRlcmZhY2UgSlF1ZXJ5RXZl
bnRDb25zdHJ1Y3RvciB7XG4gICAgKG5hbWU6IHN0cmluZywgZXZlbnRQcm9wZXJ0aWVzPzogYW55
KTogSlF1ZXJ5RXZlbnRPYmplY3Q7XG4gICAgbmV3IChuYW1lOiBzdHJpbmcsIGV2ZW50UHJvcGVy
dGllcz86IGFueSk6IEpRdWVyeUV2ZW50T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZh
Y2UgdXNlZCB0byBzcGVjaWZ5IGVhc2luZyBmdW5jdGlvbnMuXG4gKi9cbmludGVyZmFjZSBKUXVl
cnlFYXNpbmcge1xuICAgIGxpbmVhcihwOiBudW1iZXIpOiBudW1iZXI7XG4gICAgc3dpbmcocDog
bnVtYmVyKTogbnVtYmVyO1xufVxuXG4vKlxuICAgIFN0YXRpYyBtZW1iZXJzIG9mIGpRdWVyeSAo
dGhvc2Ugb24gJCBhbmQgalF1ZXJ5IHRoZW1zZWx2ZXMpXG4qL1xuaW50ZXJmYWNlIEpRdWVyeVN0
YXRpYyB7XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBIVFRQIChB
amF4KSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIEEgc2V0IG9mIGtl
eS92YWx1ZSBwYWlycyB0aGF0IGNvbmZpZ3VyZSB0aGUgQWpheCByZXF1ZXN0LiBBbGwgc2V0dGlu
Z3MgYXJlIG9wdGlvbmFsLiBBIGRlZmF1bHQgY2FuIGJlIHNldCBmb3IgYW55IG9wdGlvbiB3aXRo
ICQuYWpheFNldHVwKCkuXG4gICAgICovXG4gICAgYWpheChzZXR0aW5nczogSlF1ZXJ5QWpheFNl
dHRpbmdzKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYXN5bmNocm9u
b3VzIEhUVFAgKEFqYXgpIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAg
ICAqIEBwYXJhbSBzZXR0aW5ncyBBIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMgdGhhdCBjb25maWd1
cmUgdGhlIEFqYXggcmVxdWVzdC4gQWxsIHNldHRpbmdzIGFyZSBvcHRpb25hbC4gQSBkZWZhdWx0
IGNhbiBiZSBzZXQgZm9yIGFueSBvcHRpb24gd2l0aCAkLmFqYXhTZXR1cCgpLlxuICAgICAqL1xu
ICAgIGFqYXgodXJsOiBzdHJpbmcsIHNldHRpbmdzPzogSlF1ZXJ5QWpheFNldHRpbmdzKTogSlF1
ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMgb3Ig
bW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFuZCBi
ZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICogQHBh
cmFtIGRhdGFUeXBlcyBBbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBz
cGFjZS1zZXBhcmF0ZWQgZGF0YVR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVy
IHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJlIEFqYXggcmVxdWVzdHMuXG4gICAgICov
XG4gICAgYWpheFByZWZpbHRlcihkYXRhVHlwZXM6IHN0cmluZywgaGFuZGxlcjogKG9wdHM6IGFu
eSwgb3JpZ2luYWxPcHRzOiBKUXVlcnlBamF4U2V0dGluZ3MsIGpxWEhSOiBKUXVlcnlYSFIpID0+
IGFueSk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGN1c3RvbSBBamF4IG9wdGlvbnMg
b3IgbW9kaWZ5IGV4aXN0aW5nIG9wdGlvbnMgYmVmb3JlIGVhY2ggcmVxdWVzdCBpcyBzZW50IGFu
ZCBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5ICQuYWpheCgpLlxuICAgICAqXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZnV0dXJl
IEFqYXggcmVxdWVzdHMuXG4gICAgICovXG4gICAgYWpheFByZWZpbHRlcihoYW5kbGVyOiAob3B0
czogYW55LCBvcmlnaW5hbE9wdHM6IEpRdWVyeUFqYXhTZXR0aW5ncywganFYSFI6IEpRdWVyeVhI
UikgPT4gYW55KTogdm9pZDtcblxuICAgIGFqYXhTZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdz
O1xuXG4gICAgIC8qKlxuICAgICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGZ1dHVyZSBBamF4
IHJlcXVlc3RzLiBJdHMgdXNlIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgICpcbiAgICAgICog
QHBhcmFtIG9wdGlvbnMgQSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgY29uZmlndXJlIHRo
ZSBkZWZhdWx0IEFqYXggcmVxdWVzdC4gQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLlxuICAgICAg
Ki9cbiAgICBhamF4U2V0dXAob3B0aW9uczogSlF1ZXJ5QWpheFNldHRpbmdzKTogdm9pZDtcblxu
ICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIEdF
VCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5n
IHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gc3Vj
Y2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhlIHJlcXVlc3Qg
c3VjY2VlZHMuXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0
ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZhdWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29u
LCBzY3JpcHQsIG9yIGh0bWwpLlxuICAgICAqL1xuICAgIGdldCh1cmw6IHN0cmluZywgc3VjY2Vz
cz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpRdWVyeVhIUikgPT4g
YW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipcbiAgICAgKiBMb2Fk
IGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJMIHRvIHdoaWNoIHRo
ZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIGRhdGEgQSBwbGFpbiBvYmplY3Qgb3Ig
c3RyaW5nIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyIHdpdGggdGhlIHJlcXVlc3QuXG4gICAg
ICogQHBhcmFtIHN1Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlm
IHRoZSByZXF1ZXN0IHN1Y2NlZWRzLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlwZSBv
ZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQgR3Vl
c3MgKHhtbCwganNvbiwgc2NyaXB0LCBvciBodG1sKS5cbiAgICAgKi9cbiAgICBnZXQodXJsOiBz
dHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAoZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBz
dHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwgZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVl
cnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNlcnZlciB1c2luZyBh
IEhUVFAgR0VUIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBw
YXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNl
cnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sg
ZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy5cbiAgICAg
KiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2
ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4bWwsIGpzb24sIHNjcmlwdCwgb3IgaHRt
bCkuXG4gICAgICovXG4gICAgZ2V0KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNz
PzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBh
bnksIGRhdGFUeXBlPzogc3RyaW5nKTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQg
SlNPTi1lbmNvZGVkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVz
dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVJM
IHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1Y2Nlc3MgQSBj
YWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRz
LlxuICAgICAqL1xuICAgIGdldEpTT04odXJsOiBzdHJpbmcsIHN1Y2Nlc3M/OiAoZGF0YTogYW55
LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSk6IEpRdWVyeVhI
UjtcbiAgICAvKipcbiAgICAgKiBMb2FkIEpTT04tZW5jb2RlZCBkYXRhIGZyb20gdGhlIHNlcnZl
ciB1c2luZyBhIEdFVCBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVSTCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50Llxu
ICAgICAqIEBwYXJhbSBkYXRhIEEgcGxhaW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQg
dG8gdGhlIHNlcnZlciB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEg
Y2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVk
cy5cbiAgICAgKi9cbiAgICBnZXRKU09OKHVybDogc3RyaW5nLCBkYXRhPzogT2JqZWN0LCBzdWNj
ZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9
PiBhbnkpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBKU09OLWVuY29kZWQgZGF0
YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBHRVQgSFRUUCByZXF1ZXN0LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJl
cXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJp
bmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBA
cGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0SlNPTih1cmw6IHN0cmluZywgZGF0
YT86IHN0cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFY
SFI6IEpRdWVyeVhIUikgPT4gYW55KTogSlF1ZXJ5WEhSO1xuICAgIC8qKlxuICAgICAqIExvYWQg
YSBKYXZhU2NyaXB0IGZpbGUgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgR0VUIEhUVFAgcmVxdWVz
dCwgdGhlbiBleGVjdXRlIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIHN0cmluZyBj
b250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJlcXVlc3QgaXMgc2VudC5cbiAgICAgKiBA
cGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAgICovXG4gICAgZ2V0U2NyaXB0KHVybDogc3RyaW5nLCBz
dWNjZXNzPzogKHNjcmlwdDogc3RyaW5nLCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVl
cnlYSFIpID0+IGFueSk6IEpRdWVyeVhIUjtcblxuICAgIHBhcmFtOiBKUXVlcnlQYXJhbTtcblxu
ICAgIC8qKlxuICAgICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdXNpbmcgYSBIVFRQIFBP
U1QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgVVJMIHRvIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHNlbnQuXG4gICAgICogQHBhcmFtIHN1
Y2Nlc3MgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGlmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLiBSZXF1aXJlZCBpZiBkYXRhVHlwZSBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSBu
dWxsIGluIHRoYXQgY2FzZS5cbiAgICAgKiBAcGFyYW0gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0
YSBleHBlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIuIERlZmF1bHQ6IEludGVsbGlnZW50IEd1ZXNzICh4
bWwsIGpzb24sIHNjcmlwdCwgdGV4dCwgaHRtbCkuXG4gICAgICovXG4gICAgcG9zdCh1cmw6IHN0
cmluZywgc3VjY2Vzcz86IChkYXRhOiBhbnksIHRleHRTdGF0dXM6IHN0cmluZywganFYSFI6IEpR
dWVyeVhIUikgPT4gYW55LCBkYXRhVHlwZT86IHN0cmluZyk6IEpRdWVyeVhIUjtcbiAgICAvKipc
biAgICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc2VydmVyIHVzaW5nIGEgSFRUUCBQT1NUIHJlcXVl
c3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVS
TCB0byB3aGljaCB0aGUgcmVxdWVzdCBpcyBzZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIEEgcGxh
aW4gb2JqZWN0IG9yIHN0cmluZyB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBy
ZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBp
cyBleGVjdXRlZCBpZiB0aGUgcmVxdWVzdCBzdWNjZWVkcy4gUmVxdWlyZWQgaWYgZGF0YVR5cGUg
aXMgcHJvdmlkZWQsIGJ1dCBjYW4gYmUgbnVsbCBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFt
IGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgZXhwZWN0ZWQgZnJvbSB0aGUgc2VydmVyLiBEZWZh
dWx0OiBJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIHRleHQsIGh0bWwpLlxu
ICAgICAqL1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGRhdGE/OiBPYmplY3QsIHN1Y2Nlc3M/OiAo
ZGF0YTogYW55LCB0ZXh0U3RhdHVzOiBzdHJpbmcsIGpxWEhSOiBKUXVlcnlYSFIpID0+IGFueSwg
ZGF0YVR5cGU/OiBzdHJpbmcpOiBKUXVlcnlYSFI7XG4gICAgLyoqXG4gICAgICogTG9hZCBkYXRh
IGZyb20gdGhlIHNlcnZlciB1c2luZyBhIEhUVFAgUE9TVCByZXF1ZXN0LlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHVybCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkwgdG8gd2hpY2ggdGhlIHJl
cXVlc3QgaXMgc2VudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBBIHBsYWluIG9iamVjdCBvciBzdHJp
bmcgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKiBA
cGFyYW0gc3VjY2VzcyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgaWYgdGhl
IHJlcXVlc3Qgc3VjY2VlZHMuIFJlcXVpcmVkIGlmIGRhdGFUeXBlIGlzIHByb3ZpZGVkLCBidXQg
Y2FuIGJlIG51bGwgaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgdHlw
ZSBvZiBkYXRhIGV4cGVjdGVkIGZyb20gdGhlIHNlcnZlci4gRGVmYXVsdDogSW50ZWxsaWdlbnQg
R3Vlc3MgKHhtbCwganNvbiwgc2NyaXB0LCB0ZXh0LCBodG1sKS5cbiAgICAgKi9cbiAgICBwb3N0
KHVybDogc3RyaW5nLCBkYXRhPzogc3RyaW5nLCBzdWNjZXNzPzogKGRhdGE6IGFueSwgdGV4dFN0
YXR1czogc3RyaW5nLCBqcVhIUjogSlF1ZXJ5WEhSKSA9PiBhbnksIGRhdGFUeXBlPzogc3RyaW5n
KTogSlF1ZXJ5WEhSO1xuXG4gICAgLyoqXG4gICAgICogQSBtdWx0aS1wdXJwb3NlIGNhbGxiYWNr
cyBsaXN0IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgcG93ZXJmdWwgd2F5IHRvIG1hbmFnZSBjYWxs
YmFjayBsaXN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbGFncyBBbiBvcHRpb25hbCBsaXN0
IG9mIHNwYWNlLXNlcGFyYXRlZCBmbGFncyB0aGF0IGNoYW5nZSBob3cgdGhlIGNhbGxiYWNrIGxp
c3QgYmVoYXZlcy5cbiAgICAgKi9cbiAgICBDYWxsYmFja3MoZmxhZ3M/OiBzdHJpbmcpOiBKUXVl
cnlDYWxsYmFjaztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIG9yIHJlbGVhc2VzIHRoZSBleGVj
dXRpb24gb2YgalF1ZXJ5J3MgcmVhZHkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG9s
ZCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVhZHkgaG9sZCBpcyBiZWluZyByZXF1ZXN0ZWQgb3Ig
cmVsZWFzZWRcbiAgICAgKi9cbiAgICBob2xkUmVhZHkoaG9sZDogYm9vbGVhbik6IHZvaWQ7XG5c
biAgICAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dD86IGFueSk6IEpRdWVyeTtcbiAgICAoZWxl
bWVudDogRWxlbWVudCk6IEpRdWVyeTtcbiAgICAob2JqZWN0OiB7fSk6IEpRdWVyeTtcbiAgICAo
ZWxlbWVudEFycmF5OiBFbGVtZW50W10pOiBKUXVlcnk7XG4gICAgKG9iamVjdDogSlF1ZXJ5KTog
SlF1ZXJ5O1xuICAgIChmdW5jOiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICAoYXJyYXk6IGFueVtd
KTogSlF1ZXJ5O1xuICAgICgpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZWxpbnF1aXNo
IGpRdWVyeSdzIGNvbnRyb2wgb2YgdGhlICQgdmFyaWFibGUuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gcmVtb3ZlQWxsIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmVtb3ZlIGFsbCBq
UXVlcnkgdmFyaWFibGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZSAoaW5jbHVkaW5nIGpRdWVyeSBp
dHNlbGYpLlxuICAgICAqL1xuICAgIG5vQ29uZmxpY3QocmVtb3ZlQWxsPzogYm9vbGVhbik6IE9i
amVjdDtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJh
Y2sgZnVuY3Rpb25zIGJhc2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJy
ZWQgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4g
ICAgICogQHBhcmFtIGRlZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBw
bGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJl
ZHM6IEpRdWVyeUdlbmVyaWNQcm9taXNlPFQ+W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuICAgIC8q
KlxuICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJh
c2VkIG9uIG9uZSBvciBtb3JlIG9iamVjdHMsIHVzdWFsbHkgRGVmZXJyZWQgb2JqZWN0cyB0aGF0
IHJlcHJlc2VudCBhc3luY2hyb25vdXMgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRl
ZmVycmVkcyBPbmUgb3IgbW9yZSBEZWZlcnJlZCBvYmplY3RzLCBvciBwbGFpbiBKYXZhU2NyaXB0
IG9iamVjdHMuXG4gICAgICovXG4gICAgd2hlbjxUPiguLi5kZWZlcnJlZHM6IFRbXSk6IEpRdWVy
eVByb21pc2U8VD47XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBj
YWxsYmFjayBmdW5jdGlvbnMgYmFzZWQgb24gb25lIG9yIG1vcmUgb2JqZWN0cywgdXN1YWxseSBE
ZWZlcnJlZCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGFzeW5jaHJvbm91cyBldmVudHMuXG4gICAg
ICpcbiAgICAgKiBAcGFyYW0gZGVmZXJyZWRzIE9uZSBvciBtb3JlIERlZmVycmVkIG9iamVjdHMs
IG9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICAgKi9cbiAgICB3aGVuPFQ+KC4uLmRl
ZmVycmVkczogYW55W10pOiBKUXVlcnlQcm9taXNlPFQ+O1xuXG4gICAgY3NzSG9va3M6IHsgW2tl
eTogc3RyaW5nXTogYW55OyB9O1xuICAgIGNzc051bWJlcjogYW55O1xuXG4gICAgLyoqXG4gICAg
ICogU3RvcmUgYXJiaXRyYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxl
bWVudC4gUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0LlxuICAgICAqXG4gICAgICogQHBh
cmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkYXRhLlxu
ICAgICAqIEBwYXJhbSBrZXkgQSBzdHJpbmcgbmFtaW5nIHRoZSBwaWVjZSBvZiBkYXRhIHRvIHNl
dC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyBkYXRhIHZhbHVlLlxuICAgICAqL1xuICAg
IGRhdGE8VD4oZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogVDtcbiAg
ICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRoZSBl
bGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBvciB0
aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5cbiAg
ICAgKiBAcGFyYW0ga2V5IEEgc3RyaW5nIG5hbWluZyB0aGUgcGllY2Ugb2YgZGF0YSB0byBzZXQu
XG4gICAgICovXG4gICAgZGF0YShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGFueTtc
biAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGF0IG5hbWVkIGRhdGEgc3RvcmUgZm9yIHRo
ZSBlbGVtZW50LCBhcyBzZXQgYnkgalF1ZXJ5LmRhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpLCBv
ciB0aGUgZnVsbCBkYXRhIHN0b3JlIGZvciB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBw
YXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGF0YS5c
biAgICAgKi9cbiAgICBkYXRhKGVsZW1lbnQ6IEVsZW1lbnQpOiBhbnk7XG5cbiAgICBkZXF1ZXVl
KGVsZW1lbnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZT86IHN0cmluZyk6IGFueTtcblxuICAgIGhhc0Rh
dGEoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW47XG5cbiAgICBxdWV1ZShlbGVtZW50OiBFbGVt
ZW50LCBxdWV1ZU5hbWU/OiBzdHJpbmcpOiBhbnlbXTtcbiAgICBxdWV1ZShlbGVtZW50OiBFbGVt
ZW50LCBxdWV1ZU5hbWU6IHN0cmluZywgbmV3UXVldWVPckNhbGxiYWNrOiBhbnkpOiBKUXVlcnk7
XG5cbiAgICByZW1vdmVEYXRhKGVsZW1lbnQ6IEVsZW1lbnQsIG5hbWU/OiBzdHJpbmcpOiBKUXVl
cnk7XG5cbiAgICAvLyBEZWZlcnJlZFxuICAgIERlZmVycmVkPFQ+KGJlZm9yZVN0YXJ0PzogKGRl
ZmVycmVkOiBKUXVlcnlEZWZlcnJlZDxUPikgPT4gYW55KTogSlF1ZXJ5RGVmZXJyZWQ8VD47XG5c
biAgICAvLyBFZmZlY3RzXG4gICAgZng6IHsgdGljazogKCkgPT4gdm9pZDsgaW50ZXJ2YWw6IG51
bWJlcjsgc3RvcDogKCkgPT4gdm9pZDsgc3BlZWRzOiB7IHNsb3c6IG51bWJlcjsgZmFzdDogbnVt
YmVyOyB9OyBvZmY6IGJvb2xlYW47IHN0ZXA6IGFueTsgfTtcblxuICAgIC8vIEV2ZW50c1xuICAg
IHByb3h5KGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSwgY29udGV4dDogYW55LCAuLi5hcmdz
OiBhbnlbXSk6IGFueTtcbiAgICBwcm94eShjb250ZXh0OiBhbnksIG5hbWU6IHN0cmluZywgLi4u
YXJnczogYW55W10pOiBhbnk7XG5cbiAgICBFdmVudDogSlF1ZXJ5RXZlbnRDb25zdHJ1Y3Rvcjtc
blxuICAgIC8vIEludGVybmFsc1xuICAgIGVycm9yKG1lc3NhZ2U6IGFueSk6IEpRdWVyeTtcblxu
ICAgIC8vIE1pc2NlbGxhbmVvdXNcbiAgICBleHByOiBhbnk7XG4gICAgZm46IGFueTsgIC8vVE9E
TzogRGVjaWRlIGhvdyB3ZSB3YW50IHRvIHR5cGUgdGhpc1xuICAgIGlzUmVhZHk6IGJvb2xlYW47
XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgc3VwcG9ydDogSlF1ZXJ5U3VwcG9ydDtcblxuICAg
IC8vIFV0aWxpdGllc1xuICAgIGNvbnRhaW5zKGNvbnRhaW5lcjogRWxlbWVudCwgY29udGFpbmVk
OiBFbGVtZW50KTogYm9vbGVhbjtcblxuICAgIGVhY2goY29sbGVjdGlvbjogYW55LCBjYWxsYmFj
azogKGluZGV4SW5BcnJheTogYW55LCB2YWx1ZU9mRWxlbWVudDogYW55KSA9PiBhbnkpOiBhbnk7
XG4gICAgZWFjaChjb2xsZWN0aW9uOiBKUXVlcnksIGNhbGxiYWNrOiAoaW5kZXhJbkFycmF5OiBu
dW1iZXIsIHZhbHVlT2ZFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYW55KTogYW55O1xuICAgIGVh
Y2g8VD4oY29sbGVjdGlvbjogVFtdLCBjYWxsYmFjazogKGluZGV4SW5BcnJheTogbnVtYmVyLCB2
YWx1ZU9mRWxlbWVudDogVCkgPT4gYW55KTogYW55O1xuXG4gICAgZXh0ZW5kKHRhcmdldDogYW55
LCAuLi5vYmpzOiBhbnlbXSk6IGFueTtcbiAgICBleHRlbmQoZGVlcDogYm9vbGVhbiwgdGFyZ2V0
OiBhbnksIC4uLm9ianM6IGFueVtdKTogYW55O1xuXG4gICAgZ2xvYmFsRXZhbChjb2RlOiBzdHJp
bmcpOiBhbnk7XG5cbiAgICBncmVwPFQ+KGFycmF5OiBUW10sIGZ1bmM6IChlbGVtZW50T2ZBcnJh
eTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IGJvb2xlYW4sIGludmVydD86IGJvb2xlYW4p
OiBUW107XG5cbiAgICBpbkFycmF5PFQ+KHZhbHVlOiBULCBhcnJheTogVFtdLCBmcm9tSW5kZXg/
OiBudW1iZXIpOiBudW1iZXI7XG5cbiAgICBpc0FycmF5KG9iajogYW55KTogYm9vbGVhbjtcbiAg
ICBpc0VtcHR5T2JqZWN0KG9iajogYW55KTogYm9vbGVhbjtcbiAgICBpc0Z1bmN0aW9uKG9iajog
YW55KTogYm9vbGVhbjtcbiAgICBpc051bWVyaWModmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAg
aXNQbGFpbk9iamVjdChvYmo6IGFueSk6IGJvb2xlYW47XG4gICAgaXNXaW5kb3cob2JqOiBhbnkp
OiBib29sZWFuO1xuICAgIGlzWE1MRG9jKG5vZGU6IE5vZGUpOiBib29sZWFuO1xuXG4gICAgbWFr
ZUFycmF5KG9iajogYW55KTogYW55W107XG5cbiAgICBtYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2Fs
bGJhY2s6IChlbGVtZW50T2ZBcnJheTogVCwgaW5kZXhJbkFycmF5OiBudW1iZXIpID0+IFUpOiBV
W107XG4gICAgbWFwKGFycmF5OiBhbnksIGNhbGxiYWNrOiAoZWxlbWVudE9mQXJyYXk6IGFueSwg
aW5kZXhJbkFycmF5OiBhbnkpID0+IGFueSk6IGFueTtcblxuICAgIG1lcmdlPFQ+KGZpcnN0OiBU
W10sIHNlY29uZDogVFtdKTogVFtdO1xuICAgIG1lcmdlPFQsVT4oZmlyc3Q6IFRbXSwgc2Vjb25k
OiBVW10pOiBhbnlbXTtcblxuICAgIG5vb3AoKTogYW55O1xuXG4gICAgbm93KCk6IG51bWJlcjtc
blxuICAgIHBhcnNlSlNPTihqc29uOiBzdHJpbmcpOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBQ
YXJzZXMgYSBzdHJpbmcgaW50byBhbiBYTUwgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZGF0YWEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKi9cbiAg
ICBwYXJzZVhNTChkYXRhOiBzdHJpbmcpOiBYTUxEb2N1bWVudDtcblxuICAgIHF1ZXVlKGVsZW1l
bnQ6IEVsZW1lbnQsIHF1ZXVlTmFtZTogc3RyaW5nLCBuZXdRdWV1ZTogYW55W10pOiBKUXVlcnk7
XG5cbiAgICB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgdHlwZShvYmo6IGFueSk6
IHN0cmluZztcblxuICAgIHVuaXF1ZShhcnI6IGFueVtdKTogYW55W107XG5cbiAgICAvKipcbiAg
ICAgKiBQYXJzZXMgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBET00gbm9kZXMuXG4gICAgICpc
biAgICAgKiBAcGFyYW0gZGF0YSBIVE1MIHN0cmluZyB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFy
YW0gY29udGV4dCBET00gZWxlbWVudCB0byBzZXJ2ZSBhcyB0aGUgY29udGV4dCBpbiB3aGljaCB0
aGUgSFRNTCBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ga2VlcFNjcmlw
dHMgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIHNjcmlwdHMgcGFzc2Vk
IGluIHRoZSBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlSFRNTChkYXRhOiBzdHJpbmcs
IGNvbnRleHQ/OiBIVE1MRWxlbWVudCwga2VlcFNjcmlwdHM/OiBib29sZWFuKTogYW55W107XG5c
biAgICBBbmltYXRpb24oZWxlbTogYW55LCBwcm9wZXJ0aWVzOiBhbnksIG9wdGlvbnM6IGFueSk6
IGFueTtcblxuICAgIGVhc2luZzogSlF1ZXJ5RWFzaW5nO1xufVxuXG4vKlxuICAgIFRoZSBqUXVl
cnkgaW5zdGFuY2UgbWVtYmVyc1xuKi9cbmludGVyZmFjZSBKUXVlcnkge1xuICAgIC8vIEFKQVhc
biAgICBhamF4Q29tcGxldGUoaGFuZGxlcjogYW55KTogSlF1ZXJ5O1xuICAgIGFqYXhFcnJvciho
YW5kbGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9u
OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U2VuZChoYW5kbGVyOiAoZXZlbnQ6IGFu
eSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcbiAgICBhamF4U3RhcnQoaGFuZGxlcjogKCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGFq
YXhTdG9wKGhhbmRsZXI6ICgpID0+IGFueSk6IEpRdWVyeTtcbiAgICBhamF4U3VjY2VzcyhoYW5k
bGVyOiAoZXZlbnQ6IGFueSwganFYSFI6IGFueSwgc2V0dGluZ3M6IGFueSwgZXhjZXB0aW9uOiBh
bnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGxvYWQodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnks
IGNvbXBsZXRlPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAg
ICBzZXJpYWxpemVBcnJheSgpOiBhbnlbXTtcblxuICAgIC8vIEF0dHJpYnV0ZXNcbiAgICBhZGRD
bGFzcyhjbGFzc05hbWVzOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgYWRkQ2xhc3MoZnVuYzogKGlu
ZGV4OiBhbnksIGN1cnJlbnRDbGFzczogYW55KSA9PiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICAv
LyBodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRkQmFjay9cbiAgICBhZGRCYWNrKHNlbGVjdG9yPzog
c3RyaW5nKTogSlF1ZXJ5O1xuXG5cbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHN0
cmluZztcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEpRdWVy
eTtcbiAgICBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgZnVuYzogKGluZGV4OiBhbnksIGF0
dHI6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIGF0dHIobWFwOiBhbnkpOiBKUXVlcnk7XG5c
biAgICBoYXNDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBodG1sKCk6
IHN0cmluZztcbiAgICBodG1sKGh0bWxTdHJpbmc6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBodG1s
KGh0bWxDb250ZW50OiAoaW5kZXg6IG51bWJlciwgb2xkaHRtbDogc3RyaW5nKSA9PiBzdHJpbmcp
OiBKUXVlcnk7XG4gICAgaHRtbChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIHByb3AocHJv
cGVydHlOYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgcHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZywg
dmFsdWU6IGFueSk6IEpRdWVyeTtcbiAgICBwcm9wKG1hcDogYW55KTogSlF1ZXJ5O1xuICAgIHBy
b3AocHJvcGVydHlOYW1lOiBzdHJpbmcsIGZ1bmM6IChpbmRleDogYW55LCBvbGRQcm9wZXJ0eVZh
bHVlOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZUF0dHIoYXR0cmlidXRlTmFt
ZTogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5n
KTogSlF1ZXJ5O1xuICAgIHJlbW92ZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSkg
PT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgcmVtb3ZlUHJvcChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBzd3RjaD86IGJv
b2xlYW4pOiBKUXVlcnk7XG4gICAgdG9nZ2xlQ2xhc3Moc3d0Y2g/OiBib29sZWFuKTogSlF1ZXJ5
O1xuICAgIHRvZ2dsZUNsYXNzKGZ1bmM6IChpbmRleDogYW55LCBjbHM6IGFueSwgc3d0Y2g6IGFu
eSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdmFsKCk6IGFueTtcbiAgICB2YWwodmFsdWU6IHN0
cmluZ1tdKTogSlF1ZXJ5O1xuICAgIHZhbCh2YWx1ZTogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIHZh
bCh2YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuICAgIHZhbChmdW5jOiAoaW5kZXg6IGFueSwgdmFs
dWU6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB2YWx1
ZSBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2V0IG9m
IG1hdGNoZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEg
Q1NTIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0
cmluZztcbiAgICAvKipcbiAgICAgKiBTZXQgb25lIG9yIG1vcmUgQ1NTIHByb3BlcnRpZXMgZm9y
IHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9w
ZXJ0eU5hbWUgQSBDU1MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1
ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydHlOYW1l
OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogU2V0IG9u
ZSBvciBtb3JlIENTUyBwcm9wZXJ0aWVzIGZvciB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIEEgQ1NTIHByb3BlcnR5IG5hbWUu
XG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gc2V0IGZvciB0aGUgcHJvcGVydHkuXG4g
ICAgICovXG4gICAgY3NzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3Ig
dGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bl
cnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVl
IHRvIHNldCBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6
IHN0cmluZywgdmFsdWU6IHN0cmluZ1tdKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBv
bmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRz
LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1l
LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIHNldCBmb3IgdGhlIHByb3BlcnR5Llxu
ICAgICAqL1xuICAgIGNzcyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcltdKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1MgcHJvcGVydGllcyBm
b3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBy
b3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIGZ1
bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRoZSBjdXJyZW50IGVs
ZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUg
c2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBjc3MocHJv
cGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykg
PT4gc3RyaW5nKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUgb3IgbW9yZSBDU1Mg
cHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAg
ICogQHBhcmFtIHByb3BlcnR5TmFtZSBBIENTUyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJh
bSB2YWx1ZSBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdmFsdWUgdG8gc2V0LiB0aGlzIGlzIHRo
ZSBjdXJyZW50IGVsZW1lbnQuIFJlY2VpdmVzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgZWxl
bWVudCBpbiB0aGUgc2V0IGFuZCB0aGUgb2xkIHZhbHVlIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9c
biAgICBjc3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiAoaW5kZXg6IG51bWJlciwgdmFs
dWU6IG51bWJlcikgPT4gbnVtYmVyKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIFNldCBvbmUg
b3IgbW9yZSBDU1MgcHJvcGVydGllcyBmb3IgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IG9mIHByb3BlcnR5LXZh
bHVlIHBhaXJzIHRvIHNldC5cbiAgICAgKi9cbiAgICBjc3MocHJvcGVydGllczogT2JqZWN0KTog
SlF1ZXJ5O1xuXG4gICAgaGVpZ2h0KCk6IG51bWJlcjtcbiAgICBoZWlnaHQodmFsdWU6IG51bWJl
cik6IEpRdWVyeTtcbiAgICBoZWlnaHQodmFsdWU6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBoZWln
aHQoZnVuYzogKGluZGV4OiBhbnksIGhlaWdodDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICBpbm5lckhlaWdodCgpOiBudW1iZXI7XG4gICAgaW5uZXJIZWlnaHQodmFsdWU6IG51bWJlcik6
IEpRdWVyeTtcblxuICAgIGlubmVyV2lkdGgoKTogbnVtYmVyO1xuICAgIGlubmVyV2lkdGgodmFs
dWU6IG51bWJlcik6IEpRdWVyeTtcblxuICAgIG9mZnNldCgpOiB7IGxlZnQ6IG51bWJlcjsgdG9w
OiBudW1iZXI7IH07XG4gICAgb2Zmc2V0KGNvb3JkaW5hdGVzOiBhbnkpOiBKUXVlcnk7XG4gICAg
b2Zmc2V0KGZ1bmM6IChpbmRleDogYW55LCBjb29yZHM6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgb3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBudW1iZXI7XG4gICAg
b3V0ZXJIZWlnaHQodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBKUXVl
cnk7XG5cbiAgICBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW4/OiBib29sZWFuKTogbnVtYmVyO1xu
ICAgIG91dGVyV2lkdGgodmFsdWU6IG51bWJlciwgaW5jbHVkZU1hcmdpbj86IGJvb2xlYW4pOiBK
UXVlcnk7XG5cbiAgICBwb3NpdGlvbigpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IH07
XG5cbiAgICBzY3JvbGxMZWZ0KCk6IG51bWJlcjtcbiAgICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1i
ZXIpOiBKUXVlcnk7XG5cbiAgICBzY3JvbGxUb3AoKTogbnVtYmVyO1xuICAgIHNjcm9sbFRvcCh2
YWx1ZTogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIHdpZHRo
KHZhbHVlOiBudW1iZXIpOiBKUXVlcnk7XG4gICAgd2lkdGgodmFsdWU6IHN0cmluZyk6IEpRdWVy
eTtcbiAgICB3aWR0aChmdW5jOiAoaW5kZXg6IGFueSwgaGVpZ2h0OiBhbnkpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8vIERhdGFcbiAgICBjbGVhclF1ZXVlKHF1ZXVlTmFtZT86IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIGRhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBKUXVlcnk7XG4g
ICAgZGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KTogSlF1ZXJ5O1xuICAgIGRhdGEo
a2V5Pzogc3RyaW5nKTogYW55O1xuXG4gICAgZGVxdWV1ZShxdWV1ZU5hbWU/OiBzdHJpbmcpOiBK
UXVlcnk7XG5cbiAgICByZW1vdmVEYXRhKG5hbWVPckxpc3Q/OiBhbnkpOiBKUXVlcnk7XG5cbiAg
ICAvLyBEZWZlcnJlZFxuICAgIHByb21pc2UodHlwZT86IGFueSwgdGFyZ2V0PzogYW55KTogSlF1
ZXJ5UHJvbWlzZTxhbnk+O1xuXG4gICAgLy8gRWZmZWN0c1xuICAgIGFuaW1hdGUocHJvcGVydGll
czogYW55LCBkdXJhdGlvbj86IGFueSwgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAg
ICBhbmltYXRlKHByb3BlcnRpZXM6IGFueSwgZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmlu
ZywgY29tcGxldGU/OiBGdW5jdGlvbik6IEpRdWVyeTtcbiAgICBhbmltYXRlKHByb3BlcnRpZXM6
IGFueSwgb3B0aW9uczogeyBkdXJhdGlvbj86IGFueTsgZWFzaW5nPzogc3RyaW5nOyBjb21wbGV0
ZT86IEZ1bmN0aW9uOyBzdGVwPzogRnVuY3Rpb247IHF1ZXVlPzogYm9vbGVhbjsgc3BlY2lhbEVh
c2luZz86IGFueTsgfSk6IEpRdWVyeTtcblxuICAgIGRlbGF5KGR1cmF0aW9uOiBudW1iZXIsIHF1
ZXVlTmFtZT86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIGZhZGVJbihkdXJhdGlvbj86IGFueSwg
Y2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZUluKGR1cmF0aW9uPzogYW55LCBlYXNp
bmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgZmFkZU91dChkdXJh
dGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4gICAgZmFkZU91dChkdXJhdGlv
bj86IGFueSwgZWFzaW5nPzogc3RyaW5nLCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcblxuICAg
IGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGNhbGxiYWNrPzogYW55KTog
SlF1ZXJ5O1xuICAgIGZhZGVUbyhkdXJhdGlvbjogYW55LCBvcGFjaXR5OiBudW1iZXIsIGVhc2lu
Zz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBmYWRlVG9nZ2xlKGR1
cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBmYWRlVG9nZ2xlKGR1
cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xu
XG4gICAgZmluaXNoKCk6IEpRdWVyeTtcblxuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGNhbGxi
YWNrPzogYW55KTogSlF1ZXJ5O1xuICAgIGhpZGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0
cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzaG93KGR1cmF0aW9uPzogYW55
LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzaG93KGR1cmF0aW9uPzogYW55LCBlYXNp
bmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc2xpZGVEb3duKGR1
cmF0aW9uPzogYW55LCBjYWxsYmFjaz86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZURvd24oZHVy
YXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG5c
biAgICBzbGlkZVRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7
XG4gICAgc2xpZGVUb2dnbGUoZHVyYXRpb24/OiBhbnksIGVhc2luZz86IHN0cmluZywgY2FsbGJh
Y2s/OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBjYWxsYmFj
az86IGFueSk6IEpRdWVyeTtcbiAgICBzbGlkZVVwKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBz
dHJpbmcsIGNhbGxiYWNrPzogYW55KTogSlF1ZXJ5O1xuXG4gICAgc3RvcChjbGVhclF1ZXVlPzog
Ym9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtcbiAgICBzdG9wKHF1ZXVlPzog
YW55LCBjbGVhclF1ZXVlPzogYm9vbGVhbiwganVtcFRvRW5kPzogYm9vbGVhbik6IEpRdWVyeTtc
blxuICAgIHRvZ2dsZShkdXJhdGlvbj86IGFueSwgY2FsbGJhY2s/OiBhbnkpOiBKUXVlcnk7XG4g
ICAgdG9nZ2xlKGR1cmF0aW9uPzogYW55LCBlYXNpbmc/OiBzdHJpbmcsIGNhbGxiYWNrPzogYW55
KTogSlF1ZXJ5O1xuICAgIHRvZ2dsZShzaG93T3JIaWRlOiBib29sZWFuKTogSlF1ZXJ5O1xuXG4g
ICAgLy8gRXZlbnRzXG4gICAgYmluZChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhPzogYW55
LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIGV2ZW50RGF0YTogYW55LCBwcmV2ZW50
QnViYmxlOiBib29sZWFuKTogSlF1ZXJ5O1xuICAgIGJpbmQoZXZlbnRUeXBlOiBzdHJpbmcsIHBy
ZXZlbnRCdWJibGU6IGJvb2xlYW4pOiBKUXVlcnk7XG4gICAgYmluZCguLi5ldmVudHM6IGFueVtd
KTogSlF1ZXJ5O1xuXG4gICAgYmx1cihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgYmx1cihldmVudERhdGE/OiBhbnksIGhhbmRs
ZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcImNoYW5nZVwiIGV2ZW50IG9uIGFuIGVsZW1l
bnQuXG4gICAgICovXG4gICAgY2hhbmdlKCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2hhbmdlXCIgSmF2YVNjcmlwdCBldmVudFxuICAg
ICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGNoYW5nZShoYW5kbGVyOiAo
ZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoq
XG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImNoYW5nZVwiIEphdmFTY3Jp
cHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRh
aW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAg
ICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2
ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBjaGFuZ2UoZXZlbnREYXRhPzogYW55LCBo
YW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5
O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJjbGlja1wiIGV2ZW50IG9uIGFuIGVs
ZW1lbnQuXG4gICAgICovXG4gICAgY2xpY2soKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJp
bmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJjbGlja1wiIEphdmFTY3JpcHQgZXZlbnRcbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0
aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNs
aWNrKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwiY2xp
Y2tcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFj
aCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgY2xpY2soZXZlbnRE
YXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4g
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJkYmxjbGlja1wi
IGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGJsY2xpY2soKTogSlF1ZXJ5O1xu
ICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJkYmxjbGlja1wi
IEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9c
biAgICBkYmxjbGljayhoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImRibGNsaWNrXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAg
IGRibGNsaWNrKGV2ZW50RGF0YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGRlbGVnYXRlKHNlbGVjdG9yOiBh
bnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50
T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBc
ImZvY3VzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vz
XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAq
L1xuICAgIGZvY3VzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwiZm9jdXNcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0
aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4
ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9j
dXMoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9i
amVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBo
YW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAg
KiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVu
dCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihoYW5kbGVyOiAoZXZlbnRPYmpl
Y3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICog
QmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3VzaW5cIiBKYXZhU2NyaXB0IGV2ZW50
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0
cmlnZ2VyZWQuXG4gICAgICovXG4gICAgZm9jdXNpbihldmVudERhdGE6IE9iamVjdCwgaGFuZGxl
cjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImZvY3Vzb3V0XCIg
SmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xu
ICAgIGZvY3Vzb3V0KGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwiZm9jdXNvdXRcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
Zm9jdXNvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5
RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgdHdv
IGhhbmRsZXJzIHRvIHRoZSBtYXRjaGVkIGVsZW1lbnRzLCB0byBiZSBleGVjdXRlZCB3aGVuIHRo
ZSBtb3VzZSBwb2ludGVyIGVudGVycyBhbmQgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVySW4gQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIG1v
dXNlIHBvaW50ZXIgZW50ZXJzIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyT3V0
IEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGxlYXZlcyB0aGUg
ZWxlbWVudC5cbiAgICAgKi9cbiAgICBob3ZlcihoYW5kbGVySW46IChldmVudE9iamVjdDogSlF1
ZXJ5RXZlbnRPYmplY3QpID0+IGFueSwgaGFuZGxlck91dDogKGV2ZW50T2JqZWN0OiBKUXVlcnlF
dmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBzaW5n
bGUgaGFuZGxlciB0byB0aGUgbWF0Y2hlZCBlbGVtZW50cywgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0
aGUgbW91c2UgcG9pbnRlciBlbnRlcnMgb3IgbGVhdmVzIHRoZSBlbGVtZW50cy5cbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVySW5PdXQgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhl
IG1vdXNlIHBvaW50ZXIgZW50ZXJzIG9yIGxlYXZlcyB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAg
ICBob3ZlcihoYW5kbGVySW5PdXQ6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwia2V5ZG93blwi
IGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAga2V5ZG93bigpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleWRvd25cIiBK
YXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAga2V5ZG93bihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBrZXlkb3duXCJcIiBKYXZhU2NyaXB0IGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
a2V5ZG93bihldmVudERhdGE/OiBhbnksIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUtl
eUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcImtleXByZXNzXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBrZXlw
cmVzcygpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcImtleXByZXNzXCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFt
IGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkLlxuICAgICAqL1xuICAgIGtleXByZXNzKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1
ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5k
IGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwia2V5cHJlc3NcIiBKYXZhU2NyaXB0IGV2ZW50XG4g
ICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEg
dGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0g
aGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmln
Z2VyZWQuXG4gICAgICovXG4gICAga2V5cHJlc3MoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzog
KGV2ZW50T2JqZWN0OiBKUXVlcnlLZXlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4g
ICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJrZXl1cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQu
XG4gICAgICovXG4gICAga2V5dXAoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4g
ZXZlbnQgaGFuZGxlciB0byB0aGUgXCJrZXl1cFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxu
ICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhl
IGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBrZXl1cChoYW5kbGVyOiAoZXZlbnRP
YmplY3Q6IEpRdWVyeUtleUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4g
ICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImtleXVwXCIgSmF2YVNjcmlwdCBl
dmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFpbmlu
ZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICog
QHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQg
aXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50RGF0YT86IGFueSwgaGFuZGxl
cj86IChldmVudE9iamVjdDogSlF1ZXJ5S2V5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
blxuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJsb2FkXCIg
SmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAg
bG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBK
UXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcImxv
YWRcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBB
biBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50
IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdo
ZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBsb2FkKGV2ZW50RGF0YT86
IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vkb3duXCIgZXZl
bnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oKTogSlF1ZXJ5O1xuICAg
IC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZWRvd25cIiBK
YXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlv
biB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBt
b3VzZWRvd24oaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9
PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcIm1vdXNlZG93blwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3Nl
ZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1v
dXNlZG93bihldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlN
b3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmln
Z2VyIHRoZSBcIm1vdXNlZW50ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAg
IG1vdXNlZW50ZXIoKTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFu
ZGxlciB0byBiZSBmaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYW4gZWxlbWVudC5cbiAgICAg
KlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VlbnRlcihoYW5kbGVyOiAoZXZl
bnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmlyZWQgd2hlbiB0aGUgbW91
c2UgZW50ZXJzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFu
IG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQg
aGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlZW50ZXIoZXZlbnRE
YXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3Vz
ZWxlYXZlXCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKCk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gYmUgZmly
ZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIG1vdXNlbGVhdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVl
cnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIGJlIGZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBl
bGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBbiBvYmplY3QgY29udGFp
bmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAg
ICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlz
IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3VzZWxlYXZlKGV2ZW50RGF0YTogT2JqZWN0LCBo
YW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2Vtb3ZlXCIgZXZlbnQg
b24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3VzZW1vdmUoKTogSlF1ZXJ5O1xuICAgIC8q
KlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJtb3VzZW1vdmVcIiBKYXZh
U2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW1vdmUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3VzZUV2ZW50T2JqZWN0KSA9PiBh
bnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRo
ZSBcIm1vdXNlbW92ZVwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0g
ZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRv
IGV4ZWN1dGUgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNl
bW92ZShldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2Vy
IHRoZSBcIm1vdXNlb3V0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBtb3Vz
ZW91dCgpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRv
IHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2Vy
ZWQuXG4gICAgICovXG4gICAgbW91c2VvdXQoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlN
b3VzZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBh
biBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3V0XCIgSmF2YVNjcmlwdCBldmVudC5cbiAg
ICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0
aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQu
XG4gICAgICovXG4gICAgbW91c2VvdXQoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAg
LyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJtb3VzZW92ZXJcIiBldmVudCBvbiBhbiBlbGVtZW50
LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcigpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmlu
ZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNlb3ZlclwiIEphdmFTY3JpcHQgZXZlbnQu
XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG1vdXNlb3ZlcihoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtc
biAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwibW91c2VvdmVy
XCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQW4g
b2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBldmVudCBo
YW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVu
IHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91c2VvdmVyKGV2ZW50RGF0
YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeU1vdXNlRXZlbnRPYmplY3Qp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIFwibW91c2V1
cFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgbW91c2V1cCgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcIm1vdXNldXBc
IiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5j
dGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAg
ICBtb3VzZXVwKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5TW91c2VFdmVudE9iamVjdCkg
PT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0
byB0aGUgXCJtb3VzZXVwXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJh
bSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2Vk
IHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24g
dG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgbW91
c2V1cChldmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlNb3Vz
ZUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUg
YW4gZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBvZmYoKTogSlF1ZXJ5O1xuICAgIC8qKlxu
ICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2
ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFs
IG5hbWVzcGFjZXMsIG9yIGp1c3QgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIsIFwia2V5
ZG93bi5teVBsdWdpblwiLCBvciBcIi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rv
ciBBIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBtYXRjaCB0aGUgb25lIG9yaWdpbmFsbHkgcGFzc2Vk
IHRvIC5vbigpIHdoZW4gYXR0YWNoaW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgICAqIEBwYXJhbSBo
YW5kbGVyIEEgaGFuZGxlciBmdW5jdGlvbiBwcmV2aW91c2x5IGF0dGFjaGVkIGZvciB0aGUgZXZl
bnQocyksIG9yIHRoZSBzcGVjaWFsIHZhbHVlIGZhbHNlLlxuICAgICAqL1xuICAgIG9mZihldmVu
dHM6IHN0cmluZywgc2VsZWN0b3I/OiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogUmVtb3Zl
IGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBt
b3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywg
b3IganVzdCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiwgXCJrZXlkb3duLm15UGx1Z2lu
XCIsIG9yIFwiLm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1
bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKSwgb3IgdGhlIHNwZWNp
YWwgdmFsdWUgZmFsc2UuXG4gICAgICovXG4gICAgb2ZmKGV2ZW50czogc3RyaW5nLCBoYW5kbGVy
OiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAg
LyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFy
YW0gZXZlbnRzIEFuIG9iamVjdCB3aGVyZSB0aGUgc3RyaW5nIGtleXMgcmVwcmVzZW50IG9uZSBv
ciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNl
cywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGhhbmRsZXIgZnVuY3Rpb25zIHByZXZpb3VzbHkg
YXR0YWNoZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBzZWxl
Y3RvciB3aGljaCBzaG91bGQgbWF0Y2ggdGhlIG9uZSBvcmlnaW5hbGx5IHBhc3NlZCB0byAub24o
KSB3aGVuIGF0dGFjaGluZyBldmVudCBoYW5kbGVycy5cbiAgICAgKi9cbiAgICBvZmYoZXZlbnRz
OiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5c
biAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25l
IG9yIG1vcmUgZXZlbnRzIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAq
IEBwYXJhbSBldmVudHMgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFu
ZCBvcHRpb25hbCBuYW1lc3BhY2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQ
bHVnaW5cIi5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hl
biB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2Vk
IGFzIGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZh
bHNlLiBSZXN0IHBhcmFtZXRlciBhcmdzIGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzIHBhc3Nl
ZCB0byBqUXVlcnkudHJpZ2dlcigpLiBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIG9u
IHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG11c3QgYmUgbWFya2VkIGFzIG9wdGlvbmFsICg/
IHN5bnRheCkuXG4gICAgICovXG4gICAgb24oZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI6IChldmVu
dE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBKUXVl
cnk7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9y
IG9uZSBvciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAg
ICAgKiBAcGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBl
cyBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3du
Lm15UGx1Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRv
IGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJp
Z2dlciB0aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBl
dmVudCBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxl
bWVudC5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0
aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGUgdmFsdWUgZmFsc2UgaXMgYWxzbyBhbGxvd2VkIGFz
IGEgc2hvcnRoYW5kIGZvciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IGRvZXMgcmV0dXJuIGZhbHNl
LlxuICAgICAqL1xuICAgIG9uKGV2ZW50czogc3RyaW5nLCBzZWxlY3Rvcjogc3RyaW5nLCBoYW5k
bGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4g
ICAgLyoqXG4gICAgICogQXR0YWNoIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIG9uZSBv
ciBtb3JlIGV2ZW50cyB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnRzIE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQg
b3B0aW9uYWwgbmFtZXNwYWNlcywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJrZXlkb3duLm15UGx1
Z2luXCIuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRvIGZpbHRl
ciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgdHJpZ2dlciB0
aGUgZXZlbnQuIElmIHRoZSBzZWxlY3RvciBpcyBudWxsIG9yIG9taXR0ZWQsIHRoZSBldmVudCBp
cyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudC5c
biAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBpbiBl
dmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBoYW5k
bGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuIFRo
ZSB2YWx1ZSBmYWxzZSBpcyBhbHNvIGFsbG93ZWQgYXMgYSBzaG9ydGhhbmQgZm9yIGEgZnVuY3Rp
b24gdGhhdCBzaW1wbHkgZG9lcyByZXR1cm4gZmFsc2UuXG4gICAgICovXG4gICAgb24oZXZlbnRz
OiBzdHJpbmcsIHNlbGVjdG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2Jq
ZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIC8qKlxuICAgICAq
IEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMg
dG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBB
biBvYmplY3QgaW4gd2hpY2ggdGhlIHN0cmluZyBrZXlzIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBz
cGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIGFuZCB0
aGUgdmFsdWVzIHJlcHJlc2VudCBhIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciB0
aGUgZXZlbnQocykuXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIEEgc2VsZWN0b3Igc3RyaW5nIHRv
IGZpbHRlciB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIHRoYXQgd2ls
bCBjYWxsIHRoZSBoYW5kbGVyLiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0dGVkLCB0
aGUgaGFuZGxlciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgc2VsZWN0ZWQg
ZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFu
ZGxlciBpbiBldmVudC5kYXRhIHdoZW4gYW4gZXZlbnQgb2NjdXJzLlxuICAgICAqL1xuICAgIG9u
KGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVjdG9yPzogYW55LCBkYXRhPzog
YW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFuZGxlciB0byBhbiBl
dmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRlZCBhdCBtb3N0IG9u
Y2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZl
bnRzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgSmF2YVNjcmlwdCBldmVudCB0eXBl
cywgc3VjaCBhcyBcImNsaWNrXCIgb3IgXCJzdWJtaXQsXCIgb3IgY3VzdG9tIGV2ZW50IG5hbWVz
LlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhdCB0aGUgdGlt
ZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIG9uZShldmVudHM6IHN0cmlu
ZywgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1
ZXJ5O1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRo
ZSBlbGVtZW50cy4gVGhlIGhhbmRsZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVt
ZW50IHBlciBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBBIHN0cmlu
ZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEphdmFTY3JpcHQgZXZlbnQgdHlwZXMsIHN1Y2ggYXMg
XCJjbGlja1wiIG9yIFwic3VibWl0LFwiIG9yIGN1c3RvbSBldmVudCBuYW1lcy5cbiAgICAgKiBA
cGFyYW0gZGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQg
dG8gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4g
ICAgb25lKGV2ZW50czogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVj
dDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAq
IEF0dGFjaCBhIGhhbmRsZXIgdG8gYW4gZXZlbnQgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGhhbmRs
ZXIgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlIHBlciBlbGVtZW50IHBlciBldmVudCB0eXBlLlxu
ICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50cyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQg
ZXZlbnQgdHlwZXMgYW5kIG9wdGlvbmFsIG5hbWVzcGFjZXMsIHN1Y2ggYXMgXCJjbGlja1wiIG9y
IFwia2V5ZG93bi5teVBsdWdpblwiLlxuICAgICAqIEBwYXJhbSBzZWxlY3RvciBBIHNlbGVjdG9y
IHN0cmluZyB0byBmaWx0ZXIgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50
cyB0aGF0IHRyaWdnZXIgdGhlIGV2ZW50LiBJZiB0aGUgc2VsZWN0b3IgaXMgbnVsbCBvciBvbWl0
dGVkLCB0aGUgZXZlbnQgaXMgYWx3YXlzIHRyaWdnZXJlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIHNl
bGVjdGVkIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVj
dXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlzIGFsc28g
YWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBkb2VzIHJl
dHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVjdG9yOiBz
dHJpbmcsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6
IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYSBoYW5kbGVyIHRvIGFuIGV2ZW50IGZv
ciB0aGUgZWxlbWVudHMuIFRoZSBoYW5kbGVyIGlzIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBwZXIg
ZWxlbWVudCBwZXIgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudHMgT25l
IG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIGFuZCBvcHRpb25hbCBuYW1lc3Bh
Y2VzLCBzdWNoIGFzIFwiY2xpY2tcIiBvciBcImtleWRvd24ubXlQbHVnaW5cIi5cbiAgICAgKiBA
cGFyYW0gc2VsZWN0b3IgQSBzZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50
cyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgdGhhdCB0cmlnZ2VyIHRoZSBldmVudC4gSWYgdGhl
IHNlbGVjdG9yIGlzIG51bGwgb3Igb21pdHRlZCwgdGhlIGV2ZW50IGlzIGFsd2F5cyB0cmlnZ2Vy
ZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBk
YXRhIERhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBh
biBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0
byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gVGhlIHZhbHVlIGZhbHNlIGlz
IGFsc28gYWxsb3dlZCBhcyBhIHNob3J0aGFuZCBmb3IgYSBmdW5jdGlvbiB0aGF0IHNpbXBseSBk
b2VzIHJldHVybiBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmUoZXZlbnRzOiBzdHJpbmcsIHNlbGVj
dG9yOiBzdHJpbmcsIGRhdGE6IGFueSwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVu
dE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgaGFu
ZGxlciB0byBhbiBldmVudCBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgaGFuZGxlciBpcyBleGVjdXRl
ZCBhdCBtb3N0IG9uY2UgcGVyIGVsZW1lbnQgcGVyIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAg
KiBAcGFyYW0gZXZlbnRzIEFuIG9iamVjdCBpbiB3aGljaCB0aGUgc3RyaW5nIGtleXMgcmVwcmVz
ZW50IG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlcyBhbmQgb3B0aW9uYWwg
bmFtZXNwYWNlcywgYW5kIHRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgaGFuZGxlciBmdW5jdGlvbiB0
byBiZSBjYWxsZWQgZm9yIHRoZSBldmVudChzKS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0b3IgQSBz
ZWxlY3RvciBzdHJpbmcgdG8gZmlsdGVyIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgc2VsZWN0ZWQg
ZWxlbWVudHMgdGhhdCB3aWxsIGNhbGwgdGhlIGhhbmRsZXIuIElmIHRoZSBzZWxlY3RvciBpcyBu
dWxsIG9yIG9taXR0ZWQsIHRoZSBoYW5kbGVyIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBpdCByZWFj
aGVzIHRoZSBzZWxlY3RlZCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUg
cGFzc2VkIHRvIHRoZSBoYW5kbGVyIGluIGV2ZW50LmRhdGEgd2hlbiBhbiBldmVudCBvY2N1cnMu
XG4gICAgICovXG4gICAgb25lKGV2ZW50czogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sIHNlbGVj
dG9yPzogc3RyaW5nLCBkYXRhPzogYW55KTogSlF1ZXJ5O1xuXG5cbiAgICAvKipcbiAgICAgKiBT
cGVjaWZ5IGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBET00gaXMgZnVsbHkgbG9hZGVk
LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGFm
dGVyIHRoZSBET00gaXMgcmVhZHkuXG4gICAgICovXG4gICAgcmVhZHkoaGFuZGxlcjogRnVuY3Rp
b24pOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSBcInJlc2l6ZVwiIGV2
ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVzaXplKCk6IEpRdWVyeTtcbiAgICAv
KipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIFwicmVzaXplXCIgSmF2YVNj
cmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBy
ZXNpemUoaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJy
ZXNpemVcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0
YSBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV2
ZW50IGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRl
IGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlc2l6ZShl
dmVudERhdGE6IE9iamVjdCwgaGFuZGxlcjogKGV2ZW50T2JqZWN0OiBKUXVlcnlFdmVudE9iamVj
dCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgXCJzY3Jv
bGxcIiBldmVudCBvbiBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIHNjcm9sbCgpOiBKUXVlcnk7
XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBcInNjcm9sbFwi
IEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgc2Nyb2xsKGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+
IGFueSk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwic2Nyb2xsXCIgSmF2YVNjcmlwdCBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBl
dmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRv
IHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBz
Y3JvbGwoZXZlbnREYXRhOiBPYmplY3QsIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZl
bnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhl
IFwic2VsZWN0XCIgZXZlbnQgb24gYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZWxlY3QoKTog
SlF1ZXJ5O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgXCJz
ZWxlY3RcIiBKYXZhU2NyaXB0IGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGhhbmRsZXIg
QSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxu
ICAgICAqL1xuICAgIHNlbGVjdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2ZW50T2Jq
ZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVudCBoYW5k
bGVyIHRvIHRoZSBcInNlbGVjdFwiIEphdmFTY3JpcHQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBA
cGFyYW0gZXZlbnREYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgdGhhdCB3aWxsIGJlIHBh
c3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBBIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICov
XG4gICAgc2VsZWN0KGV2ZW50RGF0YTogT2JqZWN0LCBoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBUcmln
Z2VyIHRoZSBcInN1Ym1pdFwiIGV2ZW50IG9uIGFuIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3Vi
bWl0KCk6IEpRdWVyeTtcbiAgICAvKipcbiAgICAgKiBCaW5kIGFuIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIFwic3VibWl0XCIgSmF2YVNjcmlwdCBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIGhh
bmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgZXZlbnQgaXMgdHJpZ2dl
cmVkLlxuICAgICAqL1xuICAgIHN1Ym1pdChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpRdWVyeUV2
ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgLyoqXG4gICAgICogQmluZCBhbiBldmVu
dCBoYW5kbGVyIHRvIHRoZSBcInN1Ym1pdFwiIEphdmFTY3JpcHQgZXZlbnRcbiAgICAgKlxuICAg
ICAqIEBwYXJhbSBldmVudERhdGEgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAg
ICAgKi9cbiAgICBzdWJtaXQoZXZlbnREYXRhPzogYW55LCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgdHJpZ2dlcihldmVu
dFR5cGU6IHN0cmluZywgLi4uZXh0cmFQYXJhbWV0ZXJzOiBhbnlbXSk6IEpRdWVyeTtcbiAgICB0
cmlnZ2VyKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCk6IEpRdWVyeTtcblxuICAgIHRyaWdnZXJI
YW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCAuLi5leHRyYVBhcmFtZXRlcnM6IGFueVtdKTogT2Jq
ZWN0O1xuXG4gICAgdW5iaW5kKGV2ZW50VHlwZT86IHN0cmluZywgaGFuZGxlcj86IChldmVudE9i
amVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZl
bnRUeXBlOiBzdHJpbmcsIGZsczogYm9vbGVhbik6IEpRdWVyeTtcbiAgICB1bmJpbmQoZXZ0OiBh
bnkpOiBKUXVlcnk7XG5cbiAgICB1bmRlbGVnYXRlKCk6IEpRdWVyeTtcbiAgICB1bmRlbGVnYXRl
KHNlbGVjdG9yOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyPzogKGV2ZW50T2JqZWN0
OiBKUXVlcnlFdmVudE9iamVjdCkgPT4gYW55KTogSlF1ZXJ5O1xuICAgIHVuZGVsZWdhdGUoc2Vs
ZWN0b3I6IGFueSwgZXZlbnRzOiBhbnkpOiBKUXVlcnk7XG4gICAgdW5kZWxlZ2F0ZShuYW1lc3Bh
Y2U6IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHVubG9hZChoYW5kbGVyOiAoZXZlbnRPYmplY3Q6
IEpRdWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgdW5sb2FkKGV2ZW50RGF0
YT86IGFueSwgaGFuZGxlcj86IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFu
eSk6IEpRdWVyeTtcblxuICAgIC8vIEludGVybmFsc1xuICAgIGNvbnRleHQ6IEVsZW1lbnQ7XG4g
ICAganF1ZXJ5OiBzdHJpbmc7XG5cbiAgICBlcnJvcihoYW5kbGVyOiAoZXZlbnRPYmplY3Q6IEpR
dWVyeUV2ZW50T2JqZWN0KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZXJyb3IoZXZlbnREYXRhOiBh
bnksIGhhbmRsZXI6IChldmVudE9iamVjdDogSlF1ZXJ5RXZlbnRPYmplY3QpID0+IGFueSk6IEpR
dWVyeTtcblxuICAgIHB1c2hTdGFjayhlbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgcHVz
aFN0YWNrKGVsZW1lbnRzOiBhbnlbXSwgbmFtZTogYW55LCBhcmd1bWVudHM6IGFueSk6IEpRdWVy
eTtcblxuICAgIC8vIE1hbmlwdWxhdGlvblxuICAgIGFmdGVyKC4uLmNvbnRlbnQ6IGFueVtdKTog
SlF1ZXJ5O1xuICAgIGFmdGVyKGZ1bmM6IChpbmRleDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG5c
biAgICBhcHBlbmQoLi4uY29udGVudDogYW55W10pOiBKUXVlcnk7XG4gICAgYXBwZW5kKGZ1bmM6
IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGFwcGVuZFRv
KHRhcmdldDogYW55KTogSlF1ZXJ5O1xuXG4gICAgYmVmb3JlKC4uLmNvbnRlbnQ6IGFueVtdKTog
SlF1ZXJ5O1xuICAgIGJlZm9yZShmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xu
XG4gICAgY2xvbmUod2l0aERhdGFBbmRFdmVudHM/OiBib29sZWFuLCBkZWVwV2l0aERhdGFBbmRF
dmVudHM/OiBib29sZWFuKTogSlF1ZXJ5O1xuXG4gICAgZGV0YWNoKHNlbGVjdG9yPzogYW55KTog
SlF1ZXJ5O1xuXG4gICAgZW1wdHkoKTogSlF1ZXJ5O1xuXG4gICAgaW5zZXJ0QWZ0ZXIodGFyZ2V0
OiBhbnkpOiBKUXVlcnk7XG4gICAgaW5zZXJ0QmVmb3JlKHRhcmdldDogYW55KTogSlF1ZXJ5O1xu
XG4gICAgcHJlcGVuZCguLi5jb250ZW50OiBhbnlbXSk6IEpRdWVyeTtcbiAgICBwcmVwZW5kKGZ1
bmM6IChpbmRleDogYW55LCBodG1sOiBhbnkpID0+IGFueSk6IEpRdWVyeTtcblxuICAgIHByZXBl
bmRUbyh0YXJnZXQ6IGFueSk6IEpRdWVyeTtcblxuICAgIHJlbW92ZShzZWxlY3Rvcj86IGFueSk6
IEpRdWVyeTtcblxuICAgIHJlcGxhY2VBbGwodGFyZ2V0OiBhbnkpOiBKUXVlcnk7XG5cbiAgICBy
ZXBsYWNlV2l0aChmdW5jOiBhbnkpOiBKUXVlcnk7XG5cbiAgICB0ZXh0KCk6IHN0cmluZztcbiAg
ICB0ZXh0KHRleHRTdHJpbmc6IGFueSk6IEpRdWVyeTtcbiAgICB0ZXh0KHRleHRTdHJpbmc6IChp
bmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHRv
QXJyYXkoKTogYW55W107XG5cbiAgICB1bndyYXAoKTogSlF1ZXJ5O1xuXG4gICAgd3JhcCh3cmFw
cGluZ0VsZW1lbnQ6IGFueSk6IEpRdWVyeTtcbiAgICB3cmFwKGZ1bmM6IChpbmRleDogYW55KSA9
PiBhbnkpOiBKUXVlcnk7XG5cbiAgICB3cmFwQWxsKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1
ZXJ5O1xuXG4gICAgd3JhcElubmVyKHdyYXBwaW5nRWxlbWVudDogYW55KTogSlF1ZXJ5O1xuICAg
IHdyYXBJbm5lcihmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgLy8g
TWlzY2VsbGFuZW91c1xuICAgIGVhY2goZnVuYzogKGluZGV4OiBhbnksIGVsZW06IEVsZW1lbnQp
ID0+IGFueSk6IEpRdWVyeTtcblxuICAgIGdldChpbmRleD86IG51bWJlcik6IGFueTtcblxuICAg
IGluZGV4KCk6IG51bWJlcjtcbiAgICBpbmRleChzZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyO1xu
ICAgIGluZGV4KGVsZW1lbnQ6IGFueSk6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAg
ICBsZW5ndGg6IG51bWJlcjtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIFt4OiBzdHJpbmdd
OiBhbnk7XG4gICAgW3g6IG51bWJlcl06IEhUTUxFbGVtZW50O1xuXG4gICAgLy8gVHJhdmVyc2lu
Z1xuICAgIGFkZChzZWxlY3Rvcjogc3RyaW5nLCBjb250ZXh0PzogYW55KTogSlF1ZXJ5O1xuICAg
IGFkZCguLi5lbGVtZW50czogYW55W10pOiBKUXVlcnk7XG4gICAgYWRkKGh0bWw6IHN0cmluZyk6
IEpRdWVyeTtcbiAgICBhZGQob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBjaGlsZHJlbihz
ZWxlY3Rvcj86IGFueSk6IEpRdWVyeTtcblxuICAgIGNsb3Nlc3Qoc2VsZWN0b3I6IHN0cmluZyk6
IEpRdWVyeTtcbiAgICBjbG9zZXN0KHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBFbGVtZW50
KTogSlF1ZXJ5O1xuICAgIGNsb3Nlc3Qob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG4gICAgY2xvc2Vz
dChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAgY2xvc2VzdChzZWxlY3RvcnM6IGFueSwgY29u
dGV4dD86IEVsZW1lbnQpOiBhbnlbXTtcblxuICAgIGNvbnRlbnRzKCk6IEpRdWVyeTtcblxuICAg
IGVuZCgpOiBKUXVlcnk7XG5cbiAgICBlcShpbmRleDogbnVtYmVyKTogSlF1ZXJ5O1xuXG4gICAg
ZmlsdGVyKHNlbGVjdG9yOiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGZ1bmM6IChpbmRl
eDogYW55KSA9PiBhbnkpOiBKUXVlcnk7XG4gICAgZmlsdGVyKGVsZW1lbnQ6IGFueSk6IEpRdWVy
eTtcbiAgICBmaWx0ZXIob2JqOiBKUXVlcnkpOiBKUXVlcnk7XG5cbiAgICBmaW5kKHNlbGVjdG9y
OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgZmluZChlbGVtZW50OiBhbnkpOiBKUXVlcnk7XG4gICAg
ZmluZChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIGZpcnN0KCk6IEpRdWVyeTtcblxuICAg
IGhhcyhzZWxlY3Rvcjogc3RyaW5nKTogSlF1ZXJ5O1xuICAgIGhhcyhjb250YWluZWQ6IEVsZW1l
bnQpOiBKUXVlcnk7XG5cbiAgICBpcyhzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBp
cyhmdW5jOiAoaW5kZXg6IGFueSkgPT4gYW55KTogYm9vbGVhbjtcbiAgICBpcyhlbGVtZW50OiBh
bnkpOiBib29sZWFuO1xuICAgIGlzKG9iajogSlF1ZXJ5KTogYm9vbGVhbjtcblxuICAgIGxhc3Qo
KTogSlF1ZXJ5O1xuXG4gICAgbWFwKGNhbGxiYWNrOiAoaW5kZXg6IGFueSwgZG9tRWxlbWVudDog
RWxlbWVudCkgPT4gYW55KTogSlF1ZXJ5O1xuXG4gICAgbmV4dChzZWxlY3Rvcj86IHN0cmluZyk6
IEpRdWVyeTtcblxuICAgIG5leHRBbGwoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAg
ICBuZXh0VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtc
biAgICBuZXh0VW50aWwoZWxlbWVudD86IEVsZW1lbnQsIGZpbHRlcj86IHN0cmluZyk6IEpRdWVy
eTtcbiAgICBuZXh0VW50aWwob2JqPzogSlF1ZXJ5LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7
XG5cbiAgICBub3Qoc2VsZWN0b3I6IHN0cmluZyk6IEpRdWVyeTtcbiAgICBub3QoZnVuYzogKGlu
ZGV4OiBhbnkpID0+IGFueSk6IEpRdWVyeTtcbiAgICBub3QoZWxlbWVudDogYW55KTogSlF1ZXJ5
O1xuICAgIG5vdChvYmo6IEpRdWVyeSk6IEpRdWVyeTtcblxuICAgIG9mZnNldFBhcmVudCgpOiBK
UXVlcnk7XG5cbiAgICBwYXJlbnQoc2VsZWN0b3I/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBw
YXJlbnRzKHNlbGVjdG9yPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAgcGFyZW50c1VudGlsKHNl
bGVjdG9yPzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFyZW50c1Vu
dGlsKGVsZW1lbnQ/OiBFbGVtZW50LCBmaWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG4gICAgcGFy
ZW50c1VudGlsKG9iaj86IEpRdWVyeSwgZmlsdGVyPzogc3RyaW5nKTogSlF1ZXJ5O1xuXG4gICAg
cHJldihzZWxlY3Rvcj86IHN0cmluZyk6IEpRdWVyeTtcblxuICAgIHByZXZBbGwoc2VsZWN0b3I/
OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBwcmV2VW50aWwoc2VsZWN0b3I/OiBzdHJpbmcsIGZp
bHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwoZWxlbWVudD86IEVsZW1lbnQs
IGZpbHRlcj86IHN0cmluZyk6IEpRdWVyeTtcbiAgICBwcmV2VW50aWwob2JqPzogSlF1ZXJ5LCBm
aWx0ZXI/OiBzdHJpbmcpOiBKUXVlcnk7XG5cbiAgICBzaWJsaW5ncyhzZWxlY3Rvcj86IHN0cmlu
Zyk6IEpRdWVyeTtcblxuICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcik6IEpR
dWVyeTtcblxuICAgIC8vIFV0aWxpdGllc1xuXG4gICAgcXVldWUocXVldWVOYW1lPzogc3RyaW5n
KTogYW55W107XG4gICAgcXVldWUocXVldWVOYW1lOiBzdHJpbmcsIG5ld1F1ZXVlT3JDYWxsYmFj
azogYW55KTogSlF1ZXJ5O1xuICAgIHF1ZXVlKG5ld1F1ZXVlT3JDYWxsYmFjazogYW55KTogSlF1
ZXJ5O1xufVxuZGVjbGFyZSBtb2R1bGUgXCJqcXVlcnlcIiB7XG4gICAgZXhwb3J0ID0gJDtcbn1c
bmRlY2xhcmUgdmFyIGpRdWVyeTogSlF1ZXJ5U3RhdGljO1xuZGVjbGFyZSB2YXIgJDogSlF1ZXJ5
U3RhdGljO1xuLy8gbGlicy9hbmd1bGFyL2FuZ3VsYXIuZC50c1xuLy8gVHlwZSBkZWZpbml0aW9u
cyBmb3IgQW5ndWxhciBKUyAxLjBcbi8vIFByb2plY3Q6IGh0dHA6Ly9hbmd1bGFyanMub3JnXG4v
LyBEZWZpbml0aW9ucyBieTogRGllZ28gVmlsYXIgPGh0dHA6Ly9naXRodWIuY29tL2RpZWdvdmls
YXI+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2JvcmlzeWFua292L0RlZmlu
aXRlbHlUeXBlZFxuXG5cblxuZGVjbGFyZSB2YXIgYW5ndWxhcjogbmcuSUFuZ3VsYXJTdGF0aWM7
XG5cbi8vIFN1cHBvcnQgZm9yIHBhaW5sZXNzIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG5pbnRlcmZh
Y2UgRnVuY3Rpb24ge1xuICAgICRpbmplY3Q6c3RyaW5nW107XG59XG5cbi8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbi8vIG5nIG1vZHVsZSAoYW5ndWxhci5qcylcbi8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbmRlY2xhcmUgbW9kdWxlIG5nIHtcblxuICAgIC8vIEFsbCBzZXJ2aWNlIHByb3ZpZGVycyBl
eHRlbmQgdGhpcyBpbnRlcmZhY2VcbiAgICBpbnRlcmZhY2UgSVNlcnZpY2VQcm92aWRlciB7XG4g
ICAgICAgICRnZXQ6IGFueTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBBbmd1bGFyU3RhdGljXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElBbmd1bGFyU3RhdGljIHtc
biAgICAgICAgYmluZChjb250ZXh0OiBhbnksIGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10p
OiBGdW5jdGlvbjtcbiAgICAgICAgYm9vdHN0cmFwKGVsZW1lbnQ6IHN0cmluZywgbW9kdWxlcz86
IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBib290c3RyYXAoZWxlbWVu
dDogSlF1ZXJ5LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJbmplY3RvclNlcnZpY2U7XG4gICAg
ICAgIGJvb3RzdHJhcChlbGVtZW50OiBFbGVtZW50LCBtb2R1bGVzPzogYW55W10pOiBhdXRvLklJ
bmplY3RvclNlcnZpY2U7XG4gICAgICAgIGJvb3RzdHJhcChlbGVtZW50OiBEb2N1bWVudCwgbW9k
dWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JTZXJ2aWNlO1xuICAgICAgICBjb3B5KHNvdXJj
ZTogYW55LCBkZXN0aW5hdGlvbj86IGFueSk6IGFueTtcbiAgICAgICAgZWxlbWVudDogSUF1Z21l
bnRlZEpRdWVyeVN0YXRpYztcbiAgICAgICAgZXF1YWxzKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFu
eSk6IGJvb2xlYW47XG4gICAgICAgIGV4dGVuZChkZXN0aW5hdGlvbjogYW55LCAuLi5zb3VyY2Vz
OiBhbnlbXSk6IGFueTtcbiAgICAgICAgZm9yRWFjaChvYmo6IGFueSwgaXRlcmF0b3I6ICh2YWx1
ZTogYW55LCBrZXk6IGFueSkgPT4gYW55LCBjb250ZXh0PzogYW55KTogYW55O1xuICAgICAgICBm
cm9tSnNvbihqc29uOiBzdHJpbmcpOiBhbnk7XG4gICAgICAgIGlkZW50aXR5KGFyZz86IGFueSk6
IGFueTtcbiAgICAgICAgaW5qZWN0b3IobW9kdWxlcz86IGFueVtdKTogYXV0by5JSW5qZWN0b3JT
ZXJ2aWNlO1xuICAgICAgICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBp
c0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW47XG4gICAgICAgIGlzRGVmaW5lZCh2YWx1ZTogYW55
KTogYm9vbGVhbjtcbiAgICAgICAgaXNFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAg
ICAgICBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc051bWJlcih2
YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xl
YW47XG4gICAgICAgIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuO1xuICAgICAgICBpc1Vu
ZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbjtcbiAgICAgICAgbG93ZXJjYXNlKHN0cjogc3Ry
aW5nKTogc3RyaW5nO1xuICAgICAgICAvKiogY29uc3RydWN0IHlvdXIgYW5ndWxhciBhcHBsaWNh
dGlvblxuXHRcdG9mZmljaWFsIGRvY3M6IEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxh
ciBtb2R1bGVzLlxuXHRcdHNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxh
ci5Nb2R1bGVcblx0XHQqL1xuICAgICAgICBtb2R1bGUoXG4gICAgICAgICAgICAvKiogbmFtZSBv
ZiB5b3VyIG1vZHVsZSB5b3Ugd2FudCB0byBjcmVhdGUgKi9cbiAgICAgICAgICAgIG5hbWU6IHN0
cmluZyxcbiAgICAgICAgICAgIC8qKiBuYW1lIG9mIG1vZHVsZXMgeW91cnMgZGVwZW5kcyBvbiAq
L1xuICAgICAgICAgICAgcmVxdWlyZXM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgIGNvbmZpZ0Z1
bmN0aW9uPzogYW55KTogSU1vZHVsZTtcbiAgICAgICAgbm9vcCguLi5hcmdzOiBhbnlbXSk6IHZv
aWQ7XG4gICAgICAgIHRvSnNvbihvYmo6IGFueSwgcHJldHR5PzogYm9vbGVhbik6IHN0cmluZztc
biAgICAgICAgdXBwZXJjYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgICAgICB2ZXJzaW9u
OiB7XG4gICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBtYWpvcjogbnVtYmVy
O1xuICAgICAgICAgICAgbWlub3I6IG51bWJlcjtcbiAgICAgICAgICAgIGRvdDogbnVtYmVyO1xu
ICAgICAgICAgICAgY29kZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBNb2R1bGVcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5Nb2R1bGVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICBpbnRlcmZhY2UgSU1vZHVsZSB7XG4gICAgICAgIGFuaW1hdGlvbihuYW1lOiBzdHJpbmcs
IGFuaW1hdGlvbkZhY3Rvcnk6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgYW5pbWF0aW9u
KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtc
biAgICAgICAgYW5pbWF0aW9uKG9iamVjdDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgLyoq
IGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcy5cblx0XHRVc2UgdGhpcyBtZXRob2QgdG8gcmVn
aXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmdc
blx0XHQgKi9cbiAgICAgICAgY29uZmlnKGNvbmZpZ0ZuOiBGdW5jdGlvbik6IElNb2R1bGU7XG4g
ICAgICAgIC8qKiBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMuXG5cdFx0VXNlIHRoaXMgbWV0
aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVs
ZSBsb2FkaW5nXG5cdFx0ICovXG4gICAgICAgIGNvbmZpZyhpbmxpbmVBbm5vdGFkZWRGdW5jdGlv
bjogYW55W10pOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChuYW1lOiBzdHJpbmcsIHZhbHVl
OiBhbnkpOiBJTW9kdWxlO1xuICAgICAgICBjb25zdGFudChvYmplY3Q6IE9iamVjdCk6IElNb2R1
bGU7XG4gICAgICAgIGNvbnRyb2xsZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0
b3I6IEZ1bmN0aW9uKTogSU1vZHVsZTtcbiAgICAgICAgY29udHJvbGxlcihuYW1lOiBzdHJpbmcs
IGlubGluZUFubm90YWRlZENvbnN0cnVjdG9yOiBhbnlbXSk6IElNb2R1bGU7XG4gICAgICAgIGNv
bnRyb2xsZXIob2JqZWN0IDogT2JqZWN0KTogSU1vZHVsZTtcbiAgICAgICAgZGlyZWN0aXZlKG5h
bWU6IHN0cmluZywgZGlyZWN0aXZlRmFjdG9yeTogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAg
ICBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10p
OiBJTW9kdWxlO1xuICAgICAgICBkaXJlY3RpdmUob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xu
ICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgc2VydmljZUZhY3RvcnlGdW5jdGlvbjogRnVu
Y3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5u
b3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgZmFjdG9yeShvYmplY3Q6
IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIGZpbHRlcihuYW1lOiBzdHJpbmcsIGZpbHRlckZh
Y3RvcnlGdW5jdGlvbjogRnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBmaWx0ZXIobmFtZTog
c3RyaW5nLCBpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBJTW9kdWxlO1xuICAgICAg
ICBmaWx0ZXIob2JqZWN0OiBPYmplY3QpOiBJTW9kdWxlO1xuICAgICAgICBwcm92aWRlcihuYW1l
OiBzdHJpbmcsIHNlcnZpY2VQcm92aWRlckNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IElNb2R1bGU7
XG4gICAgICAgIHByb3ZpZGVyKG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkQ29uc3RydWN0
b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgcHJvdmlkZXIob2JqZWN0OiBPYmplY3QpOiBJ
TW9kdWxlO1xuICAgICAgICBydW4oaW5pdGlhbGl6YXRpb25GdW5jdGlvbjogRnVuY3Rpb24pOiBJ
TW9kdWxlO1xuICAgICAgICBydW4oaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246IGFueVtdKTogSU1v
ZHVsZTtcbiAgICAgICAgc2VydmljZShuYW1lOiBzdHJpbmcsIHNlcnZpY2VDb25zdHJ1Y3Rvcjog
RnVuY3Rpb24pOiBJTW9kdWxlO1xuICAgICAgICBzZXJ2aWNlKG5hbWU6IHN0cmluZywgaW5saW5l
QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogSU1vZHVsZTtcbiAgICAgICAgc2VydmljZShv
YmplY3Q6IE9iamVjdCk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG5hbWU6IHN0cmluZywgdmFs
dWU6IGFueSk6IElNb2R1bGU7XG4gICAgICAgIHZhbHVlKG9iamVjdDogT2JqZWN0KTogSU1vZHVs
ZTtcblxuICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAg
ICAgcmVxdWlyZXM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9h
cGkvbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXNcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSUF0dHJpYnV0ZXMge1xuXHQvLyB0aGlzIGlzIG5lY2Vzc2FyeSB0
byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2NvcGVkIGF0dHJpYnV0ZXMuIGl0J3Mgbm90IHZlcnkg
ZWxlZ2FudFxuXHQvLyBiZWNhdXNlIHlvdSBoYXZlIHRvIHVzZSBhdHRyc1snZm9vJ10gaW5zdGVh
ZCBvZiBhdHRycy5mb28gYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGJldHRlciB3YXlcblx0Ly8gdGhp
cyBzaG91bGQgcmVhbGx5IGJlIGxpbWl0ZWQgdG8gcmV0dXJuIHN0cmluZyBidXQgaXQgY3JlYXRl
cyB0aGlzIHByb2JsZW06IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE3MjAxODU0LzE2NTY1
NlxuXHRbbmFtZTogc3RyaW5nXTogYW55O1xuXG4gICAgICAgIC8vIEFkZHMgdGhlIENTUyBjbGFz
cyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGVcbiAgICAg
ICAgLy8gZWxlbWVudC4gSWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlv
biB3aWxsIGJlIHRyaWdnZXJlZFxuICAgICAgICAvLyBmb3IgdGhlIGNsYXNzIGFkZGl0aW9uLlxu
ICAgICAgICAkYWRkQ2xhc3MoY2xhc3NWYWw6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICAgICAgLy8g
UmVtb3ZlcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY2xhc3NWYWwgcGFy
YW1ldGVyIGZyb20gdGhlXG4gICAgICAgIC8vIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMgYXJlIGVu
YWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yXG4gICAgICAgIC8v
IHRoZSBjbGFzcyByZW1vdmFsLlxuICAgICAgICAkcmVtb3ZlQ2xhc3MoY2xhc3NWYWw6IHN0cmlu
Zyk6IHZvaWQ7XG5cbiAgICAgICAgLy8gU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5c
biAgICAgICAgJHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICAgICAg
Ly8gT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gVGhlIG9i
c2VydmVyIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGR1cmluZyB0aGUgbmV4dCAkZGln
ZXN0XG4gICAgICAgIC8vIGZvbGxvd2luZyBjb21waWxhdGlvbi4gVGhlIG9ic2VydmVyIGlzIHRo
ZW4gaW52b2tlZCB3aGVuZXZlciB0aGVcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHZhbHVlIGNo
YW5nZXMuXG4gICAgICAgICRvYnNlcnZlKG5hbWU6IHN0cmluZywgZm46KHZhbHVlPzphbnkpPT5h
bnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAvLyBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1
dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpcyBuZWVkZWRcbiAgICAgICAg
Ly8gdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1
YWwgbmFtZS5cbiAgICAgICAgJGF0dHI6IE9iamVjdDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICAvLyBGb3JtQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5h
bmd1bGFyanMub3JnL2FwaS9uZy5kaXJlY3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlclxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJRm9ybUNvbnRyb2xsZXIge1xuICAgICAg
ICAkcHJpc3RpbmU6IGJvb2xlYW47XG4gICAgICAgICRkaXJ0eTogYm9vbGVhbjtcbiAgICAgICAg
JHZhbGlkOiBib29sZWFuO1xuICAgICAgICAkaW52YWxpZDogYm9vbGVhbjtcbiAgICAgICAgJGVy
cm9yOiBhbnk7XG4gICAgICAgICRhZGRDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVsQ29udHJv
bGxlcik6IHZvaWQ7XG4gICAgICAgICRyZW1vdmVDb250cm9sKGNvbnRyb2w6IG5nLklOZ01vZGVs
Q29udHJvbGxlcik6IHZvaWQ7XG4gICAgICAgICRzZXREaXJ0eSgpOiB2b2lkO1xuICAgICAgICAk
c2V0UHJpc3RpbmUoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAvLyBOZ01vZGVsQ29udHJvbGxlclxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlclxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJTmdNb2RlbENvbnRyb2xsZXIge1xuICAgICAg
ICAkcmVuZGVyKCk6IHZvaWQ7XG4gICAgICAgICRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JL
ZXk6IHN0cmluZywgaXNWYWxpZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgICAgIC8vIERvY3VtZW50
YXRpb24gc3RhdGVzIHZpZXdWYWx1ZSBhbmQgbW9kZWxWYWx1ZSB0byBiZSBhIHN0cmluZyBidXQg
b3RoZXJcbiAgICAgICAgLy8gdHlwZXMgZG8gd29yayBhbmQgaXQncyBjb21tb24gdG8gdXNlIHRo
ZW0uXG4gICAgICAgICRzZXRWaWV3VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgICAgICR2
aWV3VmFsdWU6IGFueTtcblxuICAgICAgICAkbW9kZWxWYWx1ZTogYW55O1xuXG4gICAgICAgICRw
YXJzZXJzOiBJTW9kZWxQYXJzZXJbXTtcbiAgICAgICAgJGZvcm1hdHRlcnM6IElNb2RlbEZvcm1h
dHRlcltdO1xuICAgICAgICAkZXJyb3I6IGFueTtcbiAgICAgICAgJHByaXN0aW5lOiBib29sZWFu
O1xuICAgICAgICAkZGlydHk6IGJvb2xlYW47XG4gICAgICAgICR2YWxpZDogYm9vbGVhbjtcbiAg
ICAgICAgJGludmFsaWQ6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElNb2RlbFBh
cnNlciB7XG4gICAgICAgICh2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFj
ZSBJTW9kZWxGb3JtYXR0ZXIge1xuICAgICAgICAodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5c
biAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTY29wZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcm9vdFNjb3BlLlNjb3BlXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElTY29wZSB7XG4gICAgICAgICRhcHBseSgpOiBhbnk7
XG4gICAgICAgICRhcHBseShleHA6IHN0cmluZyk6IGFueTtcbiAgICAgICAgJGFwcGx5KGV4cDog
KHNjb3BlOiBJU2NvcGUpID0+IGFueSk6IGFueTtcblxuICAgICAgICAkYnJvYWRjYXN0KG5hbWU6
IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuICAgICAgICAkZGVzdHJv
eSgpOiB2b2lkO1xuICAgICAgICAkZGlnZXN0KCk6IHZvaWQ7XG4gICAgICAgICRlbWl0KG5hbWU6
IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJQW5ndWxhckV2ZW50O1xuXG4gICAgICAgIC8vIERv
Y3VtZW50YXRpb24gc2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRv
biBjb3VudHMgb24gaXRcbiAgICAgICAgJGV2YWwoZXhwcmVzc2lvbjogc3RyaW5nLCBhcmdzPzog
T2JqZWN0KTogYW55O1xuICAgICAgICAkZXZhbChleHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkg
PT4gYW55LCBhcmdzPzogT2JqZWN0KTogYW55O1xuXG4gICAgICAgIC8vIERvY3VtZW50YXRpb24g
c2F5cyBleHAgaXMgb3B0aW9uYWwsIGJ1dCBhY3R1YWwgaW1wbGVtZW50YXRvbiBjb3VudHMgb24g
aXRcbiAgICAgICAgJGV2YWxBc3luYyhleHByZXNzaW9uOiBzdHJpbmcpOiB2b2lkO1xuICAgICAg
ICAkZXZhbEFzeW5jKGV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnkpOiB2b2lkO1xu
XG4gICAgICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGVj
a2luZyBzdHJhdGVneVxuICAgICAgICAkbmV3KGlzb2xhdGU/OiBib29sZWFuKTogSVNjb3BlO1xu
XG4gICAgICAgICRvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IElBbmd1bGFyRXZl
bnQsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBGdW5jdGlvbjtcblxuICAgICAgICAkd2F0Y2go
d2F0Y2hFeHByZXNzaW9uOiBzdHJpbmcsIGxpc3RlbmVyPzogc3RyaW5nLCBvYmplY3RFcXVhbGl0
eT86IGJvb2xlYW4pOiBGdW5jdGlvbjtcbiAgICAgICAgJHdhdGNoKHdhdGNoRXhwcmVzc2lvbjog
c3RyaW5nLCBsaXN0ZW5lcj86IChuZXdWYWx1ZTogYW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTog
SVNjb3BlKSA9PiBhbnksIG9iamVjdEVxdWFsaXR5PzogYm9vbGVhbik6IEZ1bmN0aW9uO1xuICAg
ICAgICAkd2F0Y2god2F0Y2hFeHByZXNzaW9uOiAoc2NvcGU6IElTY29wZSkgPT4gYW55LCBsaXN0
ZW5lcj86IHN0cmluZywgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG4gICAg
ICAgICR3YXRjaCh3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9PiBhbnksIGxpc3Rl
bmVyPzogKG5ld1ZhbHVlOiBhbnksIG9sZFZhbHVlOiBhbnksIHNjb3BlOiBJU2NvcGUpID0+IGFu
eSwgb2JqZWN0RXF1YWxpdHk/OiBib29sZWFuKTogRnVuY3Rpb247XG5cbiAgICAgICAgJHdhdGNo
Q29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IHN0cmluZywgbGlzdGVuZXI6IChuZXdWYWx1ZTog
YW55LCBvbGRWYWx1ZTogYW55LCBzY29wZTogSVNjb3BlKSA9PiBhbnkpOiBGdW5jdGlvbjtcbiAg
ICAgICAgJHdhdGNoQ29sbGVjdGlvbih3YXRjaEV4cHJlc3Npb246IChzY29wZTogSVNjb3BlKSA9
PiBhbnksIGxpc3RlbmVyOiAobmV3VmFsdWU6IGFueSwgb2xkVmFsdWU6IGFueSwgc2NvcGU6IElT
Y29wZSkgPT4gYW55KTogRnVuY3Rpb247XG5cbiAgICAgICAgJHBhcmVudDogSVNjb3BlO1xuXG4g
ICAgICAgICRpZDogbnVtYmVyO1xuXG4gICAgICAgIC8vIEhpZGRlbiBtZW1iZXJzXG4gICAgICAg
ICQkaXNvbGF0ZUJpbmRpbmdzOiBhbnk7XG4gICAgICAgICQkcGhhc2U6IGFueTtcbiAgICB9XG5c
biAgICBpbnRlcmZhY2UgSUFuZ3VsYXJFdmVudCB7XG4gICAgICAgIHRhcmdldFNjb3BlOiBJU2Nv
cGU7XG4gICAgICAgIGN1cnJlbnRTY29wZTogSVNjb3BlO1xuICAgICAgICBuYW1lOiBzdHJpbmc7
XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBGdW5jdGlvbjtcbiAgICAgICAgZGVmYXVsdFByZXZl
bnRlZDogYm9vbGVhbjtcblxuICAgICAgICAvLyBBdmFpbGFibGUgb25seSBldmVudHMgdGhhdCB3
ZXJlICRlbWl0LXRlZFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24/OiBGdW5jdGlvbjtcbiAgICB9
XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBXaW5kb3dTZXJ2aWNlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiR3aW5kb3dcbiAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVdpbmRvd1NlcnZpY2UgZXh0ZW5kcyBXaW5kb3cg
e31cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEJyb3dzZXJTZXJ2aWNlXG4gICAg
Ly8gVE9ETyB1bmRvY3VtZW50ZWQsIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHNvdXJj
ZSBjb2RlXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElCcm93c2VyU2Vy
dmljZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVGltZW91dFNlcnZpY2Vc
biAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHRpbWVvdXRcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVRpbWVvdXRTZXJ2aWNlIHtcbiAg
ICAgICAgKGZ1bmM6IEZ1bmN0aW9uLCBkZWxheT86IG51bWJlciwgaW52b2tlQXBwbHk/OiBib29s
ZWFuKTogSVByb21pc2U8YW55PjtcbiAgICAgICAgY2FuY2VsKHByb21pc2U6IElQcm9taXNlPGFu
eT4pOiBib29sZWFuO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIElu
dGVydmFsU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9u
Zy4kaW50ZXJ2YWxcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVy
dmFsU2VydmljZSB7XG4gICAgICAgIChmdW5jOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlciwgY291
bnQ/OiBudW1iZXIsIGludm9rZUFwcGx5PzogYm9vbGVhbik6IElQcm9taXNlPGFueT47XG4gICAg
ICAgIGNhbmNlbChwcm9taXNlOiBJUHJvbWlzZTxhbnk+KTogYm9vbGVhbjtcbiAgICB9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaWx0ZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0
dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRmaWx0ZXJcbiAgICAvLyBzZWUgaHR0cDov
L2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGZpbHRlclByb3ZpZGVyXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElGaWx0ZXJTZXJ2aWNlIHtcbiAgICAgICAgKG5hbWU6
IHN0cmluZyk6IEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJRmlsdGVyUHJvdmlk
ZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3Ry
aW5nLCBmaWx0ZXJGYWN0b3J5OiBGdW5jdGlvbik6IElTZXJ2aWNlUHJvdmlkZXI7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWxlU2VydmljZVxuICAgIC8vIHNl
ZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYWxlXG4gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhbGVTZXJ2aWNlIHtcbiAgICAgICAgaWQ6IHN0
cmluZztcblxuICAgICAgICAvLyBUaGVzZSBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgLy8g
Q2hlY2sgYW5ndWxhcidzIGkxOG4gZmlsZXMgZm9yIGV4ZW1wbGVzXG4gICAgICAgIE5VTUJFUl9G
T1JNQVRTOiBJTG9jYWxlTnVtYmVyRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgREFURVRJTUVf
Rk9STUFUUzogSUxvY2FsZURhdGVUaW1lRm9ybWF0RGVzY3JpcHRvcjtcbiAgICAgICAgcGx1cmFs
Q2F0OiAobnVtOiBhbnkpID0+IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2Fs
ZU51bWJlckZvcm1hdERlc2NyaXB0b3Ige1xuICAgICAgICBERUNJTUFMX1NFUDogc3RyaW5nO1xu
ICAgICAgICBHUk9VUF9TRVA6IHN0cmluZztcbiAgICAgICAgUEFUVEVSTlM6IElMb2NhbGVOdW1i
ZXJQYXR0ZXJuRGVzY3JpcHRvcltdO1xuICAgICAgICBDVVJSRU5DWV9TWU06IHN0cmluZztcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2FsZU51bWJlclBhdHRlcm5EZXNjcmlwdG9yIHtcbiAg
ICAgICAgbWluSW50OiBudW1iZXI7XG4gICAgICAgIG1pbkZyYWM6IG51bWJlcjtcbiAgICAgICAg
bWF4RnJhYzogbnVtYmVyO1xuICAgICAgICBwb3NQcmU6IHN0cmluZztcbiAgICAgICAgcG9zU3Vm
OiBzdHJpbmc7XG4gICAgICAgIG5lZ1ByZTogc3RyaW5nO1xuICAgICAgICBuZWdTdWY6IHN0cmlu
ZztcbiAgICAgICAgZ1NpemU6IG51bWJlcjtcbiAgICAgICAgbGdTaXplOiBudW1iZXI7XG4gICAg
fVxuXG4gICAgaW50ZXJmYWNlIElMb2NhbGVEYXRlVGltZUZvcm1hdERlc2NyaXB0b3Ige1xuICAg
ICAgICBNT05USDogc3RyaW5nW107XG4gICAgICAgIFNIT1JUTU9OVEg6IHN0cmluZ1tdO1xuICAg
ICAgICBEQVk6IHN0cmluZ1tdO1xuICAgICAgICBTSE9SVERBWTogc3RyaW5nW107XG4gICAgICAg
IEFNUE1TOiBzdHJpbmdbXTtcbiAgICAgICAgbWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHNob3J0
OiBzdHJpbmc7XG4gICAgICAgIGZ1bGxEYXRlOiBzdHJpbmc7XG4gICAgICAgIGxvbmdEYXRlOiBz
dHJpbmc7XG4gICAgICAgIG1lZGl1bURhdGU6IHN0cmluZztcbiAgICAgICAgc2hvcnREYXRlOiBz
dHJpbmc7XG4gICAgICAgIG1lZGl1bVRpbWU6IHN0cmluZztcbiAgICAgICAgc2hvcnRUaW1lOiBz
dHJpbmc7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9nU2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9nXG4gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2dTZXJ2aWNlIHtcbiAgICAgICAg
ZGVidWc6IElMb2dDYWxsO1xuICAgICAgICBlcnJvcjogSUxvZ0NhbGw7XG4gICAgICAgIGluZm86
IElMb2dDYWxsO1xuICAgICAgICBsb2c6IElMb2dDYWxsO1xuICAgICAgICB3YXJuOiBJTG9nQ2Fs
bDtcbiAgICB9XG5cbiAgICAvLyBXZSBkZWZpbmUgdGhpcyBhcyBzZXBhcmV0ZSBpbnRlcmZhY2Ug
c28gd2UgY2FuIHJlb3BlbiBpdCBsYXRlciBmb3JcbiAgICAvLyB0aGUgbmdNb2NrIG1vZHVsZS5c
biAgICBpbnRlcmZhY2UgSUxvZ0NhbGwge1xuICAgICAgICAoLi4uYXJnczogYW55W10pOiB2b2lk
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBhcnNlU2VydmljZVxu
ICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcGFyc2VcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVBhcnNlU2VydmljZSB7XG4gICAgICAg
IChleHByZXNzaW9uOiBzdHJpbmcpOiBJQ29tcGlsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJQ29tcGlsZWRFeHByZXNzaW9uIHtcbiAgICAgICAgKGNvbnRleHQ6IGFueSwg
bG9jYWxzPzogYW55KTogYW55O1xuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBwcm92aWRl
ZCwgdW5kZWZpbmVkIGlzIGdvbm5hIGJlIHVzZWQgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uXG4g
ICAgICAgIC8vIGRvZXMgbm90IGNoZWNrIHRoZSBwYXJhbWV0ZXIuIExldCdzIGZvcmNlIGEgdmFs
dWUgZm9yIGNvbnNpc3RlbmN5LiBJZiBjb25zdW1lclxuICAgICAgICAvLyB3aGFudHMgdG8gdW5k
ZWZpbmUgaXQsIHBhc3MgdGhlIHVuZGVmaW5lZCB2YWx1ZSBleHBsaWNpdGx5LlxuICAgICAgICBh
c3NpZ24oY29udGV4dDogYW55LCB2YWx1ZTogYW55KTogYW55O1xuICAgIH1cblxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIC8vIExvY2F0aW9uU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kbG9jYXRpb25cbiAgICAvLyBzZWUgaHR0cDovL2Rv
Y3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGxvY2F0aW9uUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9ndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9u
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElMb2NhdGlvblNlcnZpY2Ug
e1xuICAgICAgICBhYnNVcmwoKTogc3RyaW5nO1xuICAgICAgICBoYXNoKCk6IHN0cmluZztcbiAg
ICAgICAgaGFzaChuZXdIYXNoOiBzdHJpbmcpOiBJTG9jYXRpb25TZXJ2aWNlO1xuICAgICAgICBo
b3N0KCk6IHN0cmluZztcbiAgICAgICAgcGF0aCgpOiBzdHJpbmc7XG4gICAgICAgIHBhdGgobmV3
UGF0aDogc3RyaW5nKTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgcG9ydCgpOiBudW1iZXI7
XG4gICAgICAgIHByb3RvY29sKCk6IHN0cmluZztcbiAgICAgICAgcmVwbGFjZSgpOiBJTG9jYXRp
b25TZXJ2aWNlO1xuICAgICAgICBzZWFyY2goKTogYW55O1xuICAgICAgICBzZWFyY2gocGFyYW1l
dGVyc01hcDogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAgICAgc2VhcmNoKHBhcmFtZXRl
cjogc3RyaW5nLCBwYXJhbWV0ZXJWYWx1ZTogYW55KTogSUxvY2F0aW9uU2VydmljZTtcbiAgICAg
ICAgdXJsKCk6IHN0cmluZztcbiAgICAgICAgdXJsKHVybDogc3RyaW5nKTogSUxvY2F0aW9uU2Vy
dmljZTtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUxvY2F0aW9uUHJvdmlkZXIgZXh0ZW5kcyBJ
U2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAgaGFzaFByZWZpeCgpOiBzdHJpbmc7XG4gICAgICAg
IGhhc2hQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBJTG9jYXRpb25Qcm92aWRlcjtcbiAgICAgICAg
aHRtbDVNb2RlKCk6IGJvb2xlYW47XG5cbiAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBzdGF0ZXMg
dGhhdCBwYXJhbWV0ZXIgaXMgc3RyaW5nLCBidXRcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24g
dGVzdHMgaXQgYXMgYm9vbGVhbiwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgICAvLyBz
aW5jZSB0aGlzIGlzIGEgdG9nZ2xlclxuICAgICAgICBodG1sNU1vZGUoYWN0aXZlOiBib29sZWFu
KTogSUxvY2F0aW9uUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4g
ICAgLy8gRG9jdW1lbnRTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5v
cmcvYXBpL25nLiRkb2N1bWVudFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFj
ZSBJRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMgRG9jdW1lbnQge31cblxuICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vL1xuICAgIC8vIEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6
Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRleGNlcHRpb25IYW5kbGVyXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG4gICAgaW50ZXJmYWNlIElFeGNlcHRpb25IYW5kbGVyU2VydmljZSB7XG4g
ICAgICAgIChleGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxu
XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUm9vdEVsZW1lbnRTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRyb290RWxlbWVudFxuICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdEVsZW1lbnRTZXJ2aWNlIGV4
dGVuZHMgSlF1ZXJ5IHt9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRU2Vydmlj
ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kcVxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUVNlcnZpY2Uge1xuICAgICAgICBhbGwo
cHJvbWlzZXM6IElQcm9taXNlPGFueT5bXSk6IElQcm9taXNlPGFueVtdPjtcbiAgICAgICAgZGVm
ZXI8VD4oKTogSURlZmVycmVkPFQ+O1xuICAgICAgICByZWplY3QocmVhc29uPzogYW55KTogSVBy
b21pc2U8dm9pZD47XG4gICAgICAgIHdoZW48VD4odmFsdWU6IFQpOiBJUHJvbWlzZTxUPjtcbiAg
ICB9XG5cbiAgICBpbnRlcmZhY2UgSVByb21pc2U8VD4ge1xuICAgICAgICB0aGVuPFRSZXN1bHQ+
KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSUh0dHBQcm9taXNlPFRSZXN1
bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBhbnksIG5vdGlmeUNhbGxiYWNr
PzogKHN0YXRlOiBhbnkpID0+IGFueSk6IElQcm9taXNlPFRSZXN1bHQ+O1xuICAgICAgICB0aGVu
PFRSZXN1bHQ+KHN1Y2Nlc3NDYWxsYmFjazogKHByb21pc2VWYWx1ZTogVCkgPT4gSVByb21pc2U8
VFJlc3VsdD4sIGVycm9yQ2FsbGJhY2s/OiAocmVhc29uOiBhbnkpID0+IGFueSwgbm90aWZ5Q2Fs
bGJhY2s/OiAoc3RhdGU6IGFueSkgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAg
IHRoZW48VFJlc3VsdD4oc3VjY2Vzc0NhbGxiYWNrOiAocHJvbWlzZVZhbHVlOiBUKSA9PiBUUmVz
dWx0LCBlcnJvckNhbGxiYWNrPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0LCBub3RpZnlDYWxs
YmFjaz86IChzdGF0ZTogYW55KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcblxuXG4gICAg
ICAgIGNhdGNoPFRSZXN1bHQ+KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSUh0dHBQcm9t
aXNlPFRSZXN1bHQ+KTogSVByb21pc2U8VFJlc3VsdD47XG4gICAgICAgIGNhdGNoPFRSZXN1bHQ+
KG9uUmVqZWN0ZWQ6IChyZWFzb246IGFueSkgPT4gSVByb21pc2U8VFJlc3VsdD4pOiBJUHJvbWlz
ZTxUUmVzdWx0PjtcbiAgICAgICAgY2F0Y2g8VFJlc3VsdD4ob25SZWplY3RlZDogKHJlYXNvbjog
YW55KSA9PiBUUmVzdWx0KTogSVByb21pc2U8VFJlc3VsdD47XG5cbiAgICAgICAgZmluYWxseTxU
UmVzdWx0PihmaW5hbGx5Q2FsbGJhY2s6ICgpPT5hbnkpOklQcm9taXNlPFRSZXN1bHQ+O1xuICAg
IH1cblxuICAgIGludGVyZmFjZSBJRGVmZXJyZWQ8VD4ge1xuICAgICAgICByZXNvbHZlKHZhbHVl
PzogVCk6IHZvaWQ7XG4gICAgICAgIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xuICAgICAg
ICBub3RpZnkoc3RhdGU/OmFueSk6IHZvaWQ7XG4gICAgICAgIHByb21pc2U6IElQcm9taXNlPFQ+
O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFuY2hvclNjcm9sbFNl
cnZpY2VcbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGFuY2hv
clNjcm9sbFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQW5jaG9yU2Ny
b2xsU2VydmljZSB7XG4gICAgICAgICgpOiB2b2lkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJ
QW5jaG9yU2Nyb2xsUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAgICAg
ZGlzYWJsZUF1dG9TY3JvbGxpbmcoKTogdm9pZDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy9cbiAgICAvLyBDYWNoZUZhY3RvcnlTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2Nz
LmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjYWNoZUZhY3RvcnlcbiAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly9cbiAgICBpbnRlcmZhY2UgSUNhY2hlRmFjdG9yeVNlcnZpY2Uge1xuICAgICAgICAvLyBMZXRz
IG5vdCBmb2NlIHRoZSBvcHRpb25zTWFwIHRvIGhhdmUgdGhlIGNhcGFjaXR5IG1lbWJlci4gRXZl
biB0aG91Z2hcbiAgICAgICAgLy8gaXQncyB0aGUgT05MWSBvcHRpb24gY29uc2lkZXJlZCBieSB0
aGUgaW1wbGVtZW50YXRpb24gdG9kYXksIGEgY29uc3VtZXJcbiAgICAgICAgLy8gbWlnaHQgZmlu
ZCBpdCB1c2VmdWwgdG8gYXNzb2NpYXRlIHNvbWUgb3RoZXIgb3B0aW9ucyB0byB0aGUgY2FjaGUg
b2JqZWN0LlxuICAgICAgICAvLyhjYWNoZUlkOiBzdHJpbmcsIG9wdGlvbnNNYXA/OiB7IGNhcGFj
aXR5OiBudW1iZXI7IH0pOiBDYWNoZU9iamVjdDtcbiAgICAgICAgKGNhY2hlSWQ6IHN0cmluZywg
b3B0aW9uc01hcD86IHsgY2FwYWNpdHk6IG51bWJlcjsgfSk6IElDYWNoZU9iamVjdDtcblxuICAg
ICAgICAvLyBNZXRob2RzIGJlbGxvdyBhcmUgbm90IGRvY3VtZW50ZWRcbiAgICAgICAgaW5mbygp
OiBhbnk7XG4gICAgICAgIGdldCAoY2FjaGVJZDogc3RyaW5nKTogSUNhY2hlT2JqZWN0O1xuICAg
IH1cblxuICAgIGludGVyZmFjZSBJQ2FjaGVPYmplY3Qge1xuICAgICAgICBpbmZvKCk6IHtcbiAg
ICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG5cbiAgICAg
ICAgICAgIC8vIE5vdCBnYXJhbnRlZWQgdG8gaGF2ZSwgc2luY2UgaXQncyBhIG5vbi1tYW5kYXRv
cnkgb3B0aW9uXG4gICAgICAgICAgICAvL2NhcGFjaXR5OiBudW1iZXI7XG4gICAgICAgIH07XG4g
ICAgICAgIHB1dChrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkO1xuICAgICAgICBnZXQg
KGtleTogc3RyaW5nKTogYW55O1xuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkO1xu
ICAgICAgICByZW1vdmVBbGwoKTogdm9pZDtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAg
IH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbXBpbGVTZXJ2aWNlXG4gICAg
Ly8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlXG4gICAgLy8g
c2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRjb21waWxlUHJvdmlkZXJcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUNvbXBpbGVTZXJ2aWNlIHtcbiAg
ICAgICAgKGVsZW1lbnQ6IHN0cmluZywgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdGdW5j
dGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247XG4g
ICAgICAgIChlbGVtZW50OiBFbGVtZW50LCB0cmFuc2NsdWRlPzogSVRlbXBsYXRlTGlua2luZ0Z1
bmN0aW9uLCBtYXhQcmlvcml0eT86IG51bWJlcik6IElUZW1wbGF0ZUxpbmtpbmdGdW5jdGlvbjtc
biAgICAgICAgKGVsZW1lbnQ6IEpRdWVyeSwgdHJhbnNjbHVkZT86IElUZW1wbGF0ZUxpbmtpbmdG
dW5jdGlvbiwgbWF4UHJpb3JpdHk/OiBudW1iZXIpOiBJVGVtcGxhdGVMaW5raW5nRnVuY3Rpb247
XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElDb21waWxlUHJvdmlkZXIgZXh0ZW5kcyBJU2Vydmlj
ZVByb3ZpZGVyIHtcbiAgICAgICAgZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlRmFj
dG9yeTogRnVuY3Rpb24pOiBJQ29tcGlsZVByb3ZpZGVyO1xuXG4gICAgICAgIC8vIFVuZG9jdW1l
bnRlZCwgYnV0IGl0IGlzIHRoZXJlLi4uXG4gICAgICAgIGRpcmVjdGl2ZShkaXJlY3RpdmVzTWFw
OiBhbnkpOiBJQ29tcGlsZVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBJVGVtcGxh
dGVMaW5raW5nRnVuY3Rpb24ge1xuICAgICAgICAvLyBMZXQncyBoaW50IGJ1dCBub3QgZm9yY2Ug
Y2xvbmVBdHRhY2hGbidzIHNpZ25hdHVyZVxuICAgICAgICAoc2NvcGU6IElTY29wZSwgY2xvbmVB
dHRhY2hGbj86IChjbG9uZWRFbGVtZW50PzogSlF1ZXJ5LCBzY29wZT86IElTY29wZSkgPT4gYW55
KTogSlF1ZXJ5O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnRy
b2xsZXJTZXJ2aWNlXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRjb250cm9sbGVyXG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25n
LiRjb250cm9sbGVyUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZh
Y2UgSUNvbnRyb2xsZXJTZXJ2aWNlIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50
YXRpb24gZG9lc24ndCBzdGF0ZSB0aGlzLCBsb2NhbHMgYXJlIG9wdGlvbmFsXG4gICAgICAgIChj
b250cm9sbGVyQ29uc3RydWN0b3I6IEZ1bmN0aW9uLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAg
ICAgIChjb250cm9sbGVyTmFtZTogc3RyaW5nLCBsb2NhbHM/OiBhbnkpOiBhbnk7XG4gICAgfVxu
XG4gICAgaW50ZXJmYWNlIElDb250cm9sbGVyUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVByb3Zp
ZGVyIHtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb250cm9sbGVyQ29uc3RydWN0
b3I6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICAgICAgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBkZXBl
bmRlbmN5QW5ub3RhZGVkQ29uc3RydWN0b3I6IGFueVtdKTogdm9pZDtcbiAgICB9XG5cbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIdHRwU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8v
ZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaHR0cFxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xu
ICAgIGludGVyZmFjZSBJSHR0cFNlcnZpY2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBtb2V0aG9k
IGFuZCB1cmwgbXVzdCBiZSBwcm92aWRlZC4uLlxuICAgICAgICAoY29uZmlnOiBJUmVxdWVzdENv
bmZpZyk6IElIdHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBnZXQgKHVybDogc3RyaW5nLCBSZXF1
ZXN0Q29uZmlnPzogYW55KTogSUh0dHBQcm9taXNlPGFueT47XG4gICAgICAgIGRlbGV0ZSAodXJs
OiBzdHJpbmcsIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAg
ICAgaGVhZCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElIdHRwUHJvbWlzZTxh
bnk+O1xuICAgICAgICBqc29ucCh1cmw6IHN0cmluZywgUmVxdWVzdENvbmZpZz86IGFueSk6IElI
dHRwUHJvbWlzZTxhbnk+O1xuICAgICAgICBwb3N0KHVybDogc3RyaW5nLCBkYXRhOiBhbnksIFJl
cXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55PjtcbiAgICAgICAgcHV0KHVybDog
c3RyaW5nLCBkYXRhOiBhbnksIFJlcXVlc3RDb25maWc/OiBhbnkpOiBJSHR0cFByb21pc2U8YW55
PjtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuXG4gICAgICAgIC8vIEZvciBk
ZWJ1Z2dpbmcsIEJVVCBpdCBpcyBkb2N1bWVudGVkIGFzIHB1YmxpYywgc28uLi5cbiAgICAgICAg
cGVuZGluZ1JlcXVlc3RzOiBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGp1c3QgZm9y
IGhpbnRpbmcuXG4gICAgLy8gU29tZSBvcGV0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGRl
cGVuZGluZyBvbiB0aGUgcmVxdWVzdC5cbiAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpz
Lm9yZy9hcGkvbmcuJGh0dHAjVXNhZ2UgZm9yIG9wdGlvbnMgZXhwbGFuYXRpb25zXG4gICAgaW50
ZXJmYWNlIElSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAg
IHVybDogc3RyaW5nO1xuICAgICAgICBwYXJhbXM/OiBhbnk7XG5cbiAgICAgICAgLy8gWFhYIGl0
IGhhcyBpdCdzIG93biBzdHJ1Y3R1cmUuLi4gIHBlcmhhcHMgd2Ugc2hvdWxkIGRlZmluZSBpdCBp
biB0aGUgZnV0dXJlXG4gICAgICAgIGhlYWRlcnM/OiBhbnk7XG5cbiAgICAgICAgY2FjaGU/OiBh
bnk7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gVGhl
c2UgYWNjZXB0IG11bHRpcGxlIHR5cGVzLCBzbyBsZXQncyBkZWZpbmUgdGhlbSBhcyBhbnlcbiAg
ICAgICAgZGF0YT86IGFueTtcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD86IGFueTtcbiAgICAg
ICAgdHJhbnNmb3JtUmVzcG9uc2U/OiBhbnk7XG4gICAgICAgIHRpbWVvdXQ/OiBhbnk7IC8vIG51
bWJlciB8IHByb21pc2VcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSUh0dHBQcm9taXNlQ2FsbGJh
Y2s8VD4ge1xuICAgICAgICAoZGF0YTogVCwgc3RhdHVzOiBudW1iZXIsIGhlYWRlcnM6IChoZWFk
ZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZywgY29uZmlnOiBJUmVxdWVzdENvbmZpZyk6IHZvaWQ7
XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+IHtcbiAg
ICAgICAgZGF0YT86IFQ7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgaGVhZGVy
cz86IChoZWFkZXJOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgY29uZmlnPzogSVJl
cXVlc3RDb25maWc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvbWlzZTxUPiBleHRl
bmRzIElQcm9taXNlPFQ+IHtcbiAgICAgICAgc3VjY2VzcyhjYWxsYmFjazogSUh0dHBQcm9taXNl
Q2FsbGJhY2s8VD4pOiBJSHR0cFByb21pc2U8VD47XG4gICAgICAgIGVycm9yKGNhbGxiYWNrOiBJ
SHR0cFByb21pc2VDYWxsYmFjazxUPik6IElIdHRwUHJvbWlzZTxUPjtcbiAgICAgICAgdGhlbjxU
UmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJhY2tB
cmc8VD4pID0+IFRSZXN1bHQsIGVycm9yQ2FsbGJhY2s/OiAocmVzcG9uc2U6IElIdHRwUHJvbWlz
ZUNhbGxiYWNrQXJnPFQ+KSA9PiBhbnkpOiBJUHJvbWlzZTxUUmVzdWx0PjtcbiAgICAgICAgdGhl
bjxUUmVzdWx0PihzdWNjZXNzQ2FsbGJhY2s6IChyZXNwb25zZTogSUh0dHBQcm9taXNlQ2FsbGJh
Y2tBcmc8VD4pID0+IElQcm9taXNlPFRSZXN1bHQ+LCBlcnJvckNhbGxiYWNrPzogKHJlc3BvbnNl
OiBJSHR0cFByb21pc2VDYWxsYmFja0FyZzxUPikgPT4gYW55KTogSVByb21pc2U8VFJlc3VsdD47
XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElIdHRwUHJvdmlkZXIgZXh0ZW5kcyBJU2VydmljZVBy
b3ZpZGVyIHtcbiAgICAgICAgZGVmYXVsdHM6IElSZXF1ZXN0Q29uZmlnO1xuICAgICAgICBpbnRl
cmNlcHRvcnM6IGFueVtdO1xuICAgICAgICByZXNwb25zZUludGVyY2VwdG9yczogYW55W107XG4g
ICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSHR0cEJhY2tlbmRTZXJ2aWNl
XG4gICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRodHRwQmFja2Vu
ZFxuICAgIC8vIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVj
dGx5LlxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJSHR0cEJhY2tlbmRT
ZXJ2aWNlIHtcbiAgICAgICAgLy8gWFhYIFBlcmhhcHMgZGVmaW5lIGNhbGxiYWNrIHNpZ25hdHVy
ZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBv
c3Q/OiBhbnksIGNhbGxiYWNrPzogRnVuY3Rpb24sIGhlYWRlcnM/OiBhbnksIHRpbWVvdXQ/OiBu
dW1iZXIsIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxuICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVycG9sYXRlU2VydmljZVxuICAgIC8vIHNlZSBo
dHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kaW50ZXJwb2xhdGVcbiAgICAvLyBzZWUg
aHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJGludGVycG9sYXRlUHJvdmlkZXJcbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSUludGVycG9sYXRlU2VydmljZSB7
XG4gICAgICAgICh0ZXh0OiBzdHJpbmcsIG11c3RIYXZlRXhwcmVzc2lvbj86IGJvb2xlYW4pOiBJ
SW50ZXJwb2xhdGlvbkZ1bmN0aW9uO1xuICAgICAgICBlbmRTeW1ib2woKTogc3RyaW5nO1xuICAg
ICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIElJbnRl
cnBvbGF0aW9uRnVuY3Rpb24ge1xuICAgICAgICAoY29udGV4dDogYW55KTogc3RyaW5nO1xuICAg
IH1cblxuICAgIGludGVyZmFjZSBJSW50ZXJwb2xhdGVQcm92aWRlciBleHRlbmRzIElTZXJ2aWNl
UHJvdmlkZXIge1xuICAgICAgICBzdGFydFN5bWJvbCgpOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0
U3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50ZXJwb2xhdGVQcm92aWRlcjtcbiAgICAgICAgZW5k
U3ltYm9sKCk6IHN0cmluZztcbiAgICAgICAgZW5kU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBJSW50
ZXJwb2xhdGVQcm92aWRlcjtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAv
LyBUZW1wbGF0ZUNhY2hlU2VydmljZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMu
b3JnL2FwaS9uZy4kdGVtcGxhdGVDYWNoZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGlu
dGVyZmFjZSBJVGVtcGxhdGVDYWNoZVNlcnZpY2UgZXh0ZW5kcyBJQ2FjaGVPYmplY3Qge31cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJvb3RTY29wZVNlcnZpY2VcbiAgICAvLyBz
ZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHJvb3RTY29wZVxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJUm9vdFNjb3BlU2VydmljZSBleHRlbmRzIElT
Y29wZSB7fVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU0NFU2VydmljZVxuICAg
IC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXG4gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vXG5cdGludGVyZmFjZSBJU0NFU2VydmljZSB7XG5cdFx0Z2V0VHJ1c3RlZCh0
eXBlOiBzdHJpbmcsIG1heUJlVHJ1c3RlZDogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRDc3Mo
dmFsdWU6IGFueSk6IGFueTtcblx0XHRnZXRUcnVzdGVkSHRtbCh2YWx1ZTogYW55KTogYW55O1xu
XHRcdGdldFRydXN0ZWRKcyh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRSZXNvdXJj
ZVVybCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGdldFRydXN0ZWRVcmwodmFsdWU6IGFueSk6IGFu
eTtcblx0XHRwYXJzZSh0eXBlOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0
OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc0NzcyhleHByZXNzaW9uOiBz
dHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55O1xuXHRcdHBhcnNlQXNI
dG1sKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBh
bnk7XG5cdFx0cGFyc2VBc0pzKGV4cHJlc3Npb246IHN0cmluZyk6IChjb250ZXh0OiBhbnksIGxv
Y2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Jlc291cmNlVXJsKGV4cHJlc3Npb246IHN0
cmluZyk6IChjb250ZXh0OiBhbnksIGxvY2FsczogYW55KSA9PiBhbnk7XG5cdFx0cGFyc2VBc1Vy
bChleHByZXNzaW9uOiBzdHJpbmcpOiAoY29udGV4dDogYW55LCBsb2NhbHM6IGFueSkgPT4gYW55
O1xuXHRcdHRydXN0QXModHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuXHRcdHRydXN0
QXNIdG1sKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc0pzKHZhbHVlOiBhbnkpOiBhbnk7
XG5cdFx0dHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlOiBhbnkpOiBhbnk7XG5cdFx0dHJ1c3RBc1Vy
bCh2YWx1ZTogYW55KTogYW55O1xuXHRcdGlzRW5hYmxlZCgpOiBib29sZWFuO1xuXHR9XG5cbiAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBTQ0VQcm92aWRlclxuICAgIC8vIHNlZSBodHRw
Oi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRVByb3ZpZGVyIGV4dGVuZHMgSVNlcnZpY2VQcm92
aWRlciB7XG4gICAgICAgIGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIH1cblxu
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNDRURlbGVnYXRlU2VydmljZVxuICAgIC8v
IHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlRGVsZWdhdGVcbiAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlU2VydmljZSB7XG4g
ICAgICAgIGdldFRydXN0ZWQodHlwZTogc3RyaW5nLCBtYXlCZVRydXN0ZWQ6IGFueSk6IGFueTtc
biAgICAgICAgdHJ1c3RBcyh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgICAg
IHZhbHVlT2YodmFsdWU6IGFueSk6IGFueTtcbiAgICB9XG5cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIFNDRURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLyBzZWUgaHR0cDovL2RvY3Mu
YW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZURlbGVnYXRlUHJvdmlkZXJcbiAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiAgICBpbnRlcmZhY2UgSVNDRURlbGVnYXRlUHJvdmlkZXIgZXh0ZW5kcyBJU2Vy
dmljZVByb3ZpZGVyIHtcbiAgICAgICAgcmVzb3VyY2VVcmxCbG9ja2xpc3QoYmxvY2tsaXN0OiBh
bnlbXSk6IHZvaWQ7XG4gICAgICAgIHJlc291cmNlVXJsQWxsb3dsaXN0KGFsbG93bGlzdDogYW55
W10pOiB2b2lkO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERpcmVj
dGl2ZVxuICAgIC8vIHNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kY29tcGls
ZVByb3ZpZGVyI2RpcmVjdGl2ZVxuICAgIC8vIGFuZCBodHRwOi8vZG9jcy5hbmd1bGFyanMub3Jn
L2d1aWRlL2RpcmVjdGl2ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaW50ZXJmYWNl
IElEaXJlY3RpdmV7XG4gICAgICAgIGNvbXBpbGU/OlxuICAgICAgICAgICAgKHRlbXBsYXRlRWxl
bWVudDogYW55LFxuICAgICAgICAgICAgdGVtcGxhdGVBdHRyaWJ1dGVzOiBJQXR0cmlidXRlcyxc
biAgICAgICAgICAgIHRyYW5zY2x1ZGU6IChzY29wZTogSVNjb3BlLCBjbG9uZUxpbmtpbmdGbjog
RnVuY3Rpb24pID0+IHZvaWRcbiAgICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICBjb250cm9s
bGVyPzogYW55O1xuICAgICAgICBjb250cm9sbGVyQXM/OiBzdHJpbmc7XG4gICAgICAgIGxpbms/
OlxuICAgICAgICAgICAgKHNjb3BlOiBJU2NvcGUsXG4gICAgICAgICAgICBpbnN0YW5jZUVsZW1l
bnQ6IGFueSxcbiAgICAgICAgICAgIGluc3RhbmNlQXR0cmlidXRlczogSUF0dHJpYnV0ZXMsXG4g
ICAgICAgICAgICBjb250cm9sbGVyOiBhbnlcbiAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAg
ICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXI7XG4gICAgICAgIHJl
cGxhY2U/OiBib29sZWFuO1xuICAgICAgICByZXF1aXJlPzogYW55O1xuICAgICAgICByZXN0cmlj
dD86IHN0cmluZztcbiAgICAgICAgc2NvcGU/OiBhbnk7XG4gICAgICAgIHRlbXBsYXRlPzogYW55
O1xuICAgICAgICB0ZW1wbGF0ZVVybD86IGFueTtcbiAgICAgICAgdGVybWluYWw/OiBib29sZWFu
O1xuICAgICAgICB0cmFuc2NsdWRlPzogYW55O1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vL1xuICAgIC8vIGFuZ3VsYXIuZWxlbWVudFxuICAgIC8vIHdoZW4gY2FsbGluZyBhbmd1bGFy
LmVsZW1lbnQsIGFuZ3VsYXIgcmV0dXJucyBhIGpRdWVyeSBvYmplY3QsXG4gICAgLy8gYXVnbWVu
dGVkIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGxpa2UgZS5nLiBzY29wZS5cbiAgICAvLyBzZWU6
IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudFxuICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vL1xuICAgIGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5U3RhdGljIGV4dGVu
ZHMgSlF1ZXJ5U3RhdGljIHtcbiAgICAgICAgKHNlbGVjdG9yOiBzdHJpbmcsIGNvbnRleHQ/OiBh
bnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICAoZWxlbWVudDogRWxlbWVudCk6IElBdWdt
ZW50ZWRKUXVlcnk7XG4gICAgICAgIChvYmplY3Q6IHt9KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAg
ICAgICAgKGVsZW1lbnRBcnJheTogRWxlbWVudFtdKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAg
ICAgKG9iamVjdDogSlF1ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGZ1bmM6IEZ1
bmN0aW9uKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgKGFycmF5OiBhbnlbXSk6IElBdWdt
ZW50ZWRKUXVlcnk7XG4gICAgICAgICgpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgIH1cblxuICAg
IGludGVyZmFjZSBJQXVnbWVudGVkSlF1ZXJ5IGV4dGVuZHMgSlF1ZXJ5IHtcbiAgICAgICAgLy8g
VE9ETzogZXZlbnRzLCBob3cgdG8gZGVmaW5lP1xuICAgICAgICAvLyRkZXN0cm95XG5cbiAgICAg
ICAgZmluZChzZWxlY3Rvcjogc3RyaW5nKTogSUF1Z21lbnRlZEpRdWVyeTtcbiAgICAgICAgZmlu
ZChlbGVtZW50OiBhbnkpOiBJQXVnbWVudGVkSlF1ZXJ5O1xuICAgICAgICBmaW5kKG9iajogSlF1
ZXJ5KTogSUF1Z21lbnRlZEpRdWVyeTtcblxuICAgICAgICBjb250cm9sbGVyKG5hbWU6IHN0cmlu
Zyk6IGFueTtcbiAgICAgICAgaW5qZWN0b3IoKTogYW55O1xuICAgICAgICBzY29wZSgpOiBJU2Nv
cGU7XG5cbiAgICAgICAgaW5oZXJpdGVkRGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEpR
dWVyeTtcbiAgICAgICAgaW5oZXJpdGVkRGF0YShvYmo6IHsgW2tleTogc3RyaW5nXTogYW55OyB9
KTogSlF1ZXJ5O1xuICAgICAgICBpbmhlcml0ZWREYXRhKGtleT86IHN0cmluZyk6IGFueTtcblxu
XG4gICAgfVxuXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBVVRPIG1vZHVsZSAo
YW5ndWxhci5qcylcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBleHBvcnQgbW9kdWxlIGF1
dG8ge1xuXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIEluamVjdG9yU2Vydmlj
ZVxuICAgICAgICAvLyBzZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvQVVUTy4kaW5q
ZWN0b3JcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgaW50ZXJmYWNlIElJbmplY3Rv
clNlcnZpY2Uge1xuICAgICAgICAgICAgYW5ub3RhdGUoZm46IEZ1bmN0aW9uKTogc3RyaW5nW107
XG4gICAgICAgICAgICBhbm5vdGF0ZShpbmxpbmVBbm5vdGFkZWRGdW5jdGlvbjogYW55W10pOiBz
dHJpbmdbXTtcbiAgICAgICAgICAgIGdldCAobmFtZTogc3RyaW5nKTogYW55O1xuICAgICAgICAg
ICAgaW5zdGFudGlhdGUodHlwZUNvbnN0cnVjdG9yOiBGdW5jdGlvbiwgbG9jYWxzPzogYW55KTog
YW55O1xuICAgICAgICAgICAgaW52b2tlKGlubGluZUFubm90YWRlZEZ1bmN0aW9uOiBhbnlbXSk6
IGFueTtcbiAgICAgICAgICAgIGludm9rZShmdW5jOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSwg
bG9jYWxzPzogYW55KTogYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9c
biAgICAgICAgLy8gUHJvdmlkZVNlcnZpY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly9kb2NzLmFu
Z3VsYXJqcy5vcmcvYXBpL0FVVE8uJHByb3ZpZGVcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAg
ICAgICAgaW50ZXJmYWNlIElQcm92aWRlU2VydmljZSB7XG4gICAgICAgICAgICAvLyBEb2N1bWVu
dGF0aW9uIHNheXMgaXQgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBpbnN0YW5jZSwgYnV0IGFjdHVh
bFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5n
LlxuICAgICAgICAgICAgLy8gY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55
O1xuICAgICAgICAgICAgY29uc3RhbnQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtc
blxuICAgICAgICAgICAgZGVjb3JhdG9yKG5hbWU6IHN0cmluZywgZGVjb3JhdG9yOiBGdW5jdGlv
bik6IHZvaWQ7XG4gICAgICAgICAgICBkZWNvcmF0b3IobmFtZTogc3RyaW5nLCBkZWNvcmF0b3JJ
bmxpbmU6IGFueVtdKTogdm9pZDtcbiAgICAgICAgICAgIGZhY3RvcnkobmFtZTogc3RyaW5nLCBz
ZXJ2aWNlRmFjdG9yeUZ1bmN0aW9uOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNlUHJvdmlkZXI7XG4g
ICAgICAgICAgICBmYWN0b3J5KG5hbWU6IHN0cmluZywgaW5saW5lQW5ub3RhZGVkRnVuY3Rpb246
IGFueVtdKTogbmcuSVNlcnZpY2VQcm92aWRlcjtcbiAgICAgICAgICAgIHByb3ZpZGVyKG5hbWU6
IHN0cmluZywgcHJvdmlkZXI6IG5nLklTZXJ2aWNlUHJvdmlkZXIpOiBuZy5JU2VydmljZVByb3Zp
ZGVyO1xuICAgICAgICAgICAgcHJvdmlkZXIobmFtZTogc3RyaW5nLCBzZXJ2aWNlUHJvdmlkZXJD
b25zdHJ1Y3RvcjogRnVuY3Rpb24pOiBuZy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICAgICAg
c2VydmljZShuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBGdW5jdGlvbik6IG5nLklTZXJ2aWNl
UHJvdmlkZXI7XG4gICAgICAgICAgICB2YWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBu
Zy5JU2VydmljZVByb3ZpZGVyO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4vLyBtb2RlbHMvVG9k
b0l0ZW0udHNcblxubW9kdWxlIHRvZG9zIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBv
cnQgY2xhc3MgVG9kb0l0ZW0ge1xuICAgICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgIHB1
YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAgICAgICAgcHVibGljIGNvbXBsZXRlZDogYm9vbGVh
blxuICAgICAgICAgICAgKSB7IH1cbiAgICB9XG59XG4vLyBpbnRlcmZhY2VzL0lUb2RvU2NvcGUu
dHNcblxubW9kdWxlIHRvZG9zIHtcblx0ZXhwb3J0IGludGVyZmFjZSBJVG9kb1Njb3BlIGV4dGVu
ZHMgbmcuSVNjb3BlIHtcblx0XHR0b2RvczogVG9kb0l0ZW1bXTtcblx0XHRuZXdUb2RvOiBzdHJp
bmc7XG5cdFx0ZWRpdGVkVG9kbzogVG9kb0l0ZW07XG5cdFx0b3JpZ2luYWxUb2RvOiBUb2RvSXRl
bTtcblx0XHRyZW1haW5pbmdDb3VudDogbnVtYmVyO1xuXHRcdGRvbmVDb3VudDogbnVtYmVyO1xu
XHRcdGFsbENoZWNrZWQ6IGJvb2xlYW47XG5cdFx0cmV2ZXJ0ZWQ6IGJvb2xlYW47XG5cdFx0c3Rh
dHVzRmlsdGVyOiB7IGNvbXBsZXRlZD86IGJvb2xlYW4gfTtcblx0XHRsb2NhdGlvbjogbmcuSUxv
Y2F0aW9uU2VydmljZTtcblx0XHR2bTogVG9kb0N0cmw7XG5cdH1cbn1cbi8vIGludGVyZmFjZXMv
SVRvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG5cdGV4cG9ydCBpbnRlcmZhY2UgSVRv
ZG9TdG9yYWdlIHtcblx0XHRnZXQgKCk6IFRvZG9JdGVtW107XG5cdFx0cHV0KHRvZG9zOiBUb2Rv
SXRlbVtdKTtcblx0fVxufS8vIGRpcmVjdGl2ZXMvVG9kb0ZvY3VzLnRzXG5cbm1vZHVsZSB0b2Rv
cyB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHQvKipcblx0ICogRGlyZWN0aXZlIHRoYXQgcGxhY2Vz
IGZvY3VzIG9uIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lv
biBpdCBiaW5kcyB0byBldmFsdWF0ZXMgdG8gdHJ1ZS5cblx0ICovXG5cdGV4cG9ydCBmdW5jdGlv
biB0b2RvRm9jdXMoJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSk6IG5nLklEaXJlY3RpdmUg
e1xuXHRcdHJldHVybiB7XG5cdFx0XHRsaW5rOiAoJHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6
IEpRdWVyeSwgYXR0cmlidXRlczogYW55KSA9PiB7XG5cdFx0XHRcdCRzY29wZS4kd2F0Y2goYXR0
cmlidXRlcy50b2RvRm9jdXMsIG5ld3ZhbCA9PiB7XG5cdFx0XHRcdFx0aWYgKG5ld3ZhbCkge1xu
XHRcdFx0XHRcdFx0JHRpbWVvdXQoKCkgPT4gZWxlbWVudFswXS5mb2N1cygpLCAwLCBmYWxzZSk7
XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0dG9k
b0ZvY3VzLiRpbmplY3QgPSBbJyR0aW1lb3V0J107XG5cbn0vLyBkaXJlY3RpdmVzL1RvZG9CbHVy
LnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAg
ICogRGlyZWN0aXZlIHRoYXQgZXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50
IGl0IGlzIGFwcGxpZWQgdG8gbG9zZXMgZm9jdXMuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0
aW9uIHRvZG9CbHVyKCk6IG5nLklEaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAg
ICAgICAgbGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0dHJpYnV0
ZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1cicsICgpID0+
IHsgJHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9CbHVyKTsgfSk7XG4gICAgICAgICAgICAg
ICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7IGVsZW1lbnQudW5iaW5kKCdibHVyJyk7
IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGRpcmVjdGl2ZXMv
VG9kb0VzY2FwZS50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQndXNlIHN0cmljdCc7XG5cblx0Y29u
c3QgRVNDQVBFX0tFWSA9IDI3O1xuXG5cdC8qKlxuXHQgKiBEaXJlY3RpdmUgdGhhdCBjYW5jZWxz
IGVkaXRpbmcgYSB0b2RvIGlmIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVzYyBrZXkuXG5cdCAqL1xu
XHRleHBvcnQgZnVuY3Rpb24gdG9kb0VzY2FwZSgpOiBuZy5JRGlyZWN0aXZlIHtcblx0XHRyZXR1
cm4ge1xuXHRcdFx0bGluazogKCRzY29wZTogbmcuSVNjb3BlLCBlbGVtZW50OiBKUXVlcnksIGF0
dHJpYnV0ZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRlbGVtZW50LmJpbmQoJ2tleWRvd24nLCAoZXZl
bnQpID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWSkge1xu
XHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShhdHRyaWJ1dGVzLnRvZG9Fc2NhcGUpO1xuXHRcdFx0
XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9
PiB7IGVsZW1lbnQudW5iaW5kKCdrZXlkb3duJyk7IH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1c
bn1cbi8vIHNlcnZpY2VzL1RvZG9TdG9yYWdlLnRzXG5cbm1vZHVsZSB0b2RvcyB7XG4gICAgJ3Vz
ZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZXMgdGhhdCBwZXJzaXN0cyBhbmQg
cmV0cmlldmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIGV4cG9ydCBj
bGFzcyBUb2RvU3RvcmFnZSBpbXBsZW1lbnRzIElUb2RvU3RvcmFnZSB7XG5cbiAgICAgICAgU1RP
UkFHRV9JRCA9ICd0b2Rvcy1hbmd1bGFyanMtdHlwZXNjcmlwdCc7XG5cbiAgICAgICAgZ2V0ICgp
OiBUb2RvSXRlbVtdIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFn
ZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9JRCkgfHwgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAg
ICBwdXQodG9kb3M6IFRvZG9JdGVtW10pIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJ
dGVtKHRoaXMuU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTtcbiAgICAgICAgfVxu
ICAgIH1cbn0vLyBjb250cm9sbGVycy9Ub2RvQ3RybC50c1xuXG5tb2R1bGUgdG9kb3Mge1xuXHQn
dXNlIHN0cmljdCc7XG5cblx0LyoqXG5cdCAqIFRoZSBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBh
cHAuIFRoZSBjb250cm9sbGVyOlxuXHQgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1v
ZGVsIHZpYSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZVxuXHQgKiAtIGV4cG9zZXMgdGhlIG1vZGVs
IHRvIHRoZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnNcblx0ICovXG5cdGV4
cG9ydCBjbGFzcyBUb2RvQ3RybCB7XG5cblx0XHRwcml2YXRlIHRvZG9zOiBUb2RvSXRlbVtdO1xu
XG5cdFx0Ly8gJGluamVjdCBhbm5vdGF0aW9uLlxuXHRcdC8vIEl0IHByb3ZpZGVzICRpbmplY3Rv
ciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyB0byBiZSBpbmplY3RlZCBpbnRv
IGNvbnN0cnVjdG9yXG5cdFx0Ly8gaXQgaXMgYmV0dGVyIHRvIGhhdmUgaXQgY2xvc2UgdG8gdGhl
IGNvbnN0cnVjdG9yLCBiZWNhdXNlIHRoZSBwYXJhbWV0ZXJzIG11c3QgbWF0Y2ggaW4gY291bnQg
YW5kIHR5cGUuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvZGlc
blx0XHRwdWJsaWMgc3RhdGljICRpbmplY3QgPSBbXG5cdFx0XHQnJHNjb3BlJyxcblx0XHRcdCck
bG9jYXRpb24nLFxuXHRcdFx0J3RvZG9TdG9yYWdlJyxcblx0XHRcdCdmaWx0ZXJGaWx0ZXInXG5c
dFx0XTtcblxuXHRcdC8vIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQgdmlhIEFuZ3VsYXJKUyAk
aW5qZWN0b3Jcblx0XHQvLyBjb250cm9sbGVyJ3MgbmFtZSBpcyByZWdpc3RlcmVkIGluIEFwcGxp
Y2F0aW9uLnRzIGFuZCBzcGVjaWZpZWQgZnJvbSBuZy1jb250cm9sbGVyIGF0dHJpYnV0ZSBpbiBp
bmRleC5odG1sXG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHRwcml2YXRlICRzY29wZTogSVRvZG9T
Y29wZSxcblx0XHRcdHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxuXHRc
dFx0cHJpdmF0ZSB0b2RvU3RvcmFnZTogSVRvZG9TdG9yYWdlLFxuXHRcdFx0cHJpdmF0ZSBmaWx0
ZXJGaWx0ZXJcblx0XHQpIHtcblx0XHRcdHRoaXMudG9kb3MgPSAkc2NvcGUudG9kb3MgPSB0b2Rv
U3RvcmFnZS5nZXQoKTtcblxuXHRcdFx0JHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHRcdCRzY29w
ZS5lZGl0ZWRUb2RvID0gbnVsbDtcblxuXHRcdFx0Ly8gJ3ZtJyBzdGFuZHMgZm9yICd2aWV3IG1v
ZGVsJy4gV2UncmUgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIHRvIHRoZSBz
Y29wZVxuXHRcdFx0Ly8gZm9yIGl0cyBtZXRob2RzIHRvIGJlIGFjY2Vzc2libGUgZnJvbSB2aWV3
IC8gSFRNTFxuXHRcdFx0JHNjb3BlLnZtID0gdGhpcztcblxuXHRcdFx0Ly8gd2F0Y2hpbmcgZm9y
IGV2ZW50cy9jaGFuZ2VzIGluIHNjb3BlLCB3aGljaCBhcmUgY2F1c2VkIGJ5IHZpZXcvdXNlciBp
bnB1dFxuXHRcdFx0Ly8gaWYgeW91IHN1YnNjcmliZSB0byBzY29wZSBvciBldmVudCB3aXRoIGxp
ZmV0aW1lIGxvbmdlciB0aGFuIHRoaXMgY29udHJvbGxlciwgbWFrZSBzdXJlIHlvdSB1bnN1YnNj
cmliZS5cblx0XHRcdCRzY29wZS4kd2F0Y2goJ3RvZG9zJywgKCkgPT4gdGhpcy5vblRvZG9zKCks
IHRydWUpO1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgcGF0aCA9PiB0
aGlzLm9uUGF0aChwYXRoKSlcblxuXHRcdFx0aWYgKCRsb2NhdGlvbi5wYXRoKCkgPT09ICcnKSAk
bG9jYXRpb24ucGF0aCgnLycpO1xuXHRcdFx0JHNjb3BlLmxvY2F0aW9uID0gJGxvY2F0aW9uO1xu
XHRcdH1cblxuXHRcdG9uUGF0aChwYXRoOiBzdHJpbmcpIHtcblx0XHRcdHRoaXMuJHNjb3BlLnN0
YXR1c0ZpbHRlciA9IChwYXRoID09PSAnL2FjdGl2ZScpID9cblx0XHRcdFx0eyBjb21wbGV0ZWQ6
IGZhbHNlIH0gOiAocGF0aCA9PT0gJy9jb21wbGV0ZWQnKSA/XG5cdFx0XHRcdHsgY29tcGxldGVk
OiB0cnVlIH0gOiB7fTtcblx0XHR9XG5cblx0XHRvblRvZG9zKCkge1xuXHRcdFx0dGhpcy4kc2Nv
cGUucmVtYWluaW5nQ291bnQgPSB0aGlzLmZpbHRlckZpbHRlcih0aGlzLnRvZG9zLCB7IGNvbXBs
ZXRlZDogZmFsc2UgfSkubGVuZ3RoO1xuXHRcdFx0dGhpcy4kc2NvcGUuZG9uZUNvdW50ID0gdGhp
cy50b2Rvcy5sZW5ndGggLSB0aGlzLiRzY29wZS5yZW1haW5pbmdDb3VudDtcblx0XHRcdHRoaXMu
JHNjb3BlLmFsbENoZWNrZWQgPSAhdGhpcy4kc2NvcGUucmVtYWluaW5nQ291bnRcblx0XHRcdHRo
aXMudG9kb1N0b3JhZ2UucHV0KHRoaXMudG9kb3MpO1xuXHRcdH1cblxuXHRcdGFkZFRvZG8oKSB7
XG5cdFx0XHR2YXIgbmV3VG9kbyA6IHN0cmluZyA9IHRoaXMuJHNjb3BlLm5ld1RvZG8udHJpbSgp
O1xuXHRcdFx0aWYgKCFuZXdUb2RvLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9
XG5cblx0XHRcdHRoaXMudG9kb3MucHVzaChuZXcgVG9kb0l0ZW0obmV3VG9kbywgZmFsc2UpKTtc
blx0XHRcdHRoaXMuJHNjb3BlLm5ld1RvZG8gPSAnJztcblx0XHR9XG5cblx0XHRlZGl0VG9kbyh0
b2RvSXRlbTogVG9kb0l0ZW0pIHtcblx0XHRcdHRoaXMuJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2Rv
SXRlbTtcblxuXHRcdFx0Ly8gQ2xvbmUgdGhlIG9yaWdpbmFsIHRvZG8gaW4gY2FzZSBlZGl0aW5n
IGlzIGNhbmNlbGxlZC5cblx0XHRcdHRoaXMuJHNjb3BlLm9yaWdpbmFsVG9kbyA9IGFuZ3VsYXIu
ZXh0ZW5kKHt9LCB0b2RvSXRlbSk7XG5cdFx0fVxuXG5cdFx0cmV2ZXJ0RWRpdHModG9kb0l0ZW06
IFRvZG9JdGVtKSB7XG5cdFx0XHR0aGlzLnRvZG9zW3RoaXMudG9kb3MuaW5kZXhPZih0b2RvSXRl
bSldID0gdGhpcy4kc2NvcGUub3JpZ2luYWxUb2RvO1xuXHRcdFx0dGhpcy4kc2NvcGUucmV2ZXJ0
ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGRvbmVFZGl0aW5nKHRvZG9JdGVtOiBUb2RvSXRlbSkg
e1xuXHRcdFx0dGhpcy4kc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7XG5cdFx0XHR0aGlzLiRzY29w
ZS5vcmlnaW5hbFRvZG8gPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuJHNjb3BlLnJldmVydGVkKSB7
XG5cdFx0XHRcdC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRlZCwgZG9uJ3Qgc2F2ZS5cblx0XHRc
dFx0dGhpcy4kc2NvcGUucmV2ZXJ0ZWQgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9
XG5cdFx0XHR0b2RvSXRlbS50aXRsZSA9IHRvZG9JdGVtLnRpdGxlLnRyaW0oKTtcblx0XHRcdGlm
ICghdG9kb0l0ZW0udGl0bGUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2RvKHRvZG9JdGVtKTtc
blx0XHRcdH1cblx0XHR9XG5cblx0XHRyZW1vdmVUb2RvKHRvZG9JdGVtOiBUb2RvSXRlbSkge1xu
XHRcdFx0dGhpcy50b2Rvcy5zcGxpY2UodGhpcy50b2Rvcy5pbmRleE9mKHRvZG9JdGVtKSwgMSk7
XG5cdFx0fVxuXG5cdFx0Y2xlYXJEb25lVG9kb3MoKSB7XG5cdFx0XHR0aGlzLiRzY29wZS50b2Rv
cyA9IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcih0b2RvSXRlbSA9PiAhdG9kb0l0ZW0u
Y29tcGxldGVkKTtcblx0XHR9XG5cblx0XHRtYXJrQWxsKGNvbXBsZXRlZDogYm9vbGVhbikge1xu
XHRcdFx0dGhpcy50b2Rvcy5mb3JFYWNoKHRvZG9JdGVtID0+IHsgdG9kb0l0ZW0uY29tcGxldGVk
ID0gY29tcGxldGVkOyB9KTtcblx0XHR9XG5cdH1cblxufVxuLy8gQXBwbGljYXRpb24udHNcblxu
LyoqXG4gKiBUaGUgbWFpbiBUb2RvTVZDIGFwcCBtb2R1bGUuXG4gKlxuICogQHR5cGUge2FuZ3Vs
YXIuTW9kdWxlfVxuICovXG5tb2R1bGUgdG9kb3Mge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAg
IHZhciB0b2RvbXZjID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSlcbiAgICAgICAgICAg
IC5jb250cm9sbGVyKCd0b2RvQ3RybCcsIFRvZG9DdHJsKVxuICAgICAgICAgICAgLmRpcmVjdGl2
ZSgndG9kb0JsdXInLCB0b2RvQmx1cilcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1
cycsIHRvZG9Gb2N1cylcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RvZG9Fc2NhcGUnLCB0b2Rv
RXNjYXBlKVxuICAgICAgICAgICAgLnNlcnZpY2UoJ3RvZG9TdG9yYWdlJywgVG9kb1N0b3JhZ2Up
O1xufVxuIgogCiAvKioqLyB9KSwKIC8qIDQyMSAqLwogLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cykgewogCi1tb2R1bGUuZXhwb3J0cyA9ICIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjgu
M1xuLy8gICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBK
ZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJz
ICYgRWRpdG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1
bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBz
ZXR1cFxuICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmpl
Y3QsIGB3aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5c
biAgdmFyIHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRo
ZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAg
Ly8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpc
biAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnBy
b3RvdHlwZSwgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBx
dWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5
cGVzLlxuICB2YXJcbiAgICBwdXNoICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAg
IHNsaWNlICAgICAgICAgICAgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAg
ICAgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8u
aGFzT3duUHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0
aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJl
ZCBoZXJlLlxuICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxu
ICAgIG5hdGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAg
ICAgICA9IEZ1bmNQcm90by5iaW5kLFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5j
cmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJv
dG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVh
dGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxv
dy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykg
cmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhv
YmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBV
bmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNv
bXBhdGliaWxpdHkgZm9yIHRoZSBvbGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAv
LyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2Yg
ZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3Vu
ZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhw
b3J0cyA9IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9v
dC5fID0gXztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEu
OC4zJztcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50
IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2Fs
bGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8v
IGZ1bmN0aW9ucy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBh
cmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAg
IHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAx
OiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250
ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFs
dWUsIG90aGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90
aGVyKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1
ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1
bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAg
cmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xs
ZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAg
IHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxu
ICAvLyBBIG1vc3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhh
dCBjYW4gYmUgYXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCBy
ZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFu
IGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFj
Y2Vzc29yLlxuICB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtc
biAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNG
dW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3Vu
dCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtc
biAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5j
dGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5m
aW5pdHkpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBh
c3NpZ25lciBmdW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNG
dW5jLCB1bmRlZmluZWRPbmx5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAg
dmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBv
YmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXgg
PCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRl
eF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwg
PSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAg
ICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkg
fHwgb2JqW2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAg
fVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGlu
dGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBm
cm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4g
ICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZl
Q3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5
cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJv
dG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0
eSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJl
dHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAg
Ly8gSGVscGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBj
b2xsZWN0aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBv
YmplY3RcbiAgLy8gUmVsYXRlZDogaHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3Jm
Zi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBp
T1MgOCBKSVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1h
dGgucG93KDIsIDUzKSAtIDE7XG4gIHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7
XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVu
Z3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09
ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4g
IH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWth
IGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJh
eS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3
ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVl
LCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0
KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAg
ICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAg
ICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4g
ICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0g
a2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5
c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4g
IH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0
byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVy
YXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xu
ICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAg
IGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXko
bGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsr
KSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xu
ICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRL
ZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0
ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlv
biBjcmVhdGVSZWR1Y2UoZGlyKSB7XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9u
IGFzIHVzaW5nIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3
aWxsIGRlb3B0aW1pemUgdGhlLCBzZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2Jq
LCBpdGVyYXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGlu
ZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIg
Y3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0g
aXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAg
fVxuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwg
aXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihp
dGVyYXRlZSwgY29udGV4dCwgNCk7XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmop
ICYmIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3Ro
LFxuICAgICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8g
RGV0ZXJtaW5lIHRoZSBpbml0aWFsIHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBp
ZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5
c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAg
IHJldHVybiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3Ro
KTtcbiAgICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVz
dWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxg
LlxuICBfLnJlZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxu
ICAvLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24g
YXMgYGZvbGRyYC5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEp
O1xuXG4gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVz
dC4gQWxpYXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihv
YmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlM
aWtlKG9iaikpIHtcbiAgICAgIGtleSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250
ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRl
LCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEp
IHJldHVybiBvYmpba2V5XTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0
aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZp
bHRlciA9IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAg
ICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4
dCk7XG4gICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAg
ICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7
XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0
aGUgZWxlbWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBm
dW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihv
YmosIF8ubmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRl
cm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAg
Ly8gQWxpYXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRl
eHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4g
ICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4
ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0g
a2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3Vy
cmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0
dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50
IGluIHRoZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFu
eWAuXG4gIF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQp
IHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlz
ID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChr
ZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5n
dGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhd
IDogaW5kZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtl
eSwgb2JqKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxu
ICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0
ZW0gKHVzaW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVk
ZWAuXG4gIF8uY29udGFpbnMgPSBfLmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2Jq
LCBpdGVtLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBv
YmogPSBfLnZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXIn
IHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVt
LCBmcm9tSW5kZXgpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFy
Z3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVu
Y3Rpb24ob2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRz
LCAyKTtcbiAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJu
IF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8g
bWV0aG9kIDogdmFsdWVbbWV0aG9kXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5j
IDogZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVu
aWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBw
cm9wZXJ0eS5cbiAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8u
bWFwKG9iaiwgXy5wcm9wZXJ0eShrZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJz
aW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmpl
Y3RzXG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hl
cmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5t
YXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNv
bW1vbiB1c2UgY2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBj
b250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1
bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0
dHJzKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1l
bnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAt
SW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0g
bnVsbCAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9i
aiA6IF8udmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxl
bmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAg
ICBpZiAodmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAg
ICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVl
LCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlz
dCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4g
ICAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmlu
aXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7
XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0p
O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWlu
aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBm
dW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmlu
aXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xu
ICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBp
c0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkg
PSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFs
dWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJl
c3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0
ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rp
b24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFs
dWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8
IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAg
ICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4g
ICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4g
IC8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhl
XG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lr
aS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgdmFyIHNldCA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xu
ICAgIHZhciBsZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxl
bmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5k
ZXgrKykge1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5k
ICE9PSBpbmRleCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVm
ZmxlZFtyYW5kXSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAg
fTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5c
biAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20g
ZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRv
IHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7
XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShv
YmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmou
bGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwg
TWF0aC5tYXgoMCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBi
eSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5j
dGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1
ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxc
biAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUs
IGluZGV4LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0
KSB7XG4gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNy
aXRlcmlhO1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09
IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJl
dHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7
XG4gICAgfSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVz
ZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0g
ZnVuY3Rpb24oYmVoYXZpb3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihp
dGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAg
ICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0
dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFs
dWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8g
dG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4g
IF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlm
IChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3Vs
dFtrZXldID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFs
dWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3
aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8u
aW5kZXhCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3Vs
dFtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2Jq
ZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIg
YSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyB0aGVcbiAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1
bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5
XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBh
IHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0g
ZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0Fy
cmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9i
aikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhv
YmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9i
amVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSBy
ZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtl
eXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdv
IGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBw
cmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBw
cmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRl
eHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBw
YXNzID0gW10sIGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5
LCBvYmopIHtcbiAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWls
KS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xu
XG4gIC8vIEFycmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQg
dGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4g
dGhlIGZpcnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAg
YW5kIGB0YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3
aXRoIGBfLm1hcGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJh
eSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAg
ICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8u
aW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBl
dmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNl
ZnVsIG9uXG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0
dXJuIGFsbCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0
IE4uXG4gIF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVy
biBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBu
dWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1l
bnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAv
LyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3Vh
cmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9
PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0
dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xu
XG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJh
eS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwg
b24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAg
Ly8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBf
LmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2Fs
bChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0g
b3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rp
b24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9
O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVu
YCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3Ry
aWN0LCBzdGFydEluZGV4KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZv
ciAodmFyIGkgPSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkg
PCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAo
aXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHMo
dmFsdWUpKSkge1xuICAgICAgICAvL2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBh
cmd1bWVudHMgb2JqZWN0XG4gICAgICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZh
bHVlLCBzaGFsbG93LCBzdHJpY3QpO1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxl
bmd0aDtcbiAgICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwg
bGVuKSB7XG4gICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1c
biAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFs
dWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxh
dHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1
c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xu
ICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBz
cGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAg
cmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAg
fTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXku
IElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhl
IG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVu
aXF1ZWAuXG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBp
dGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4g
ICAgICBjb250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAg
ICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0
ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAg
ICB2YXIgc2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgo
YXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxu
ICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkp
IDogdmFsdWU7XG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4g
IT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRl
ZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5z
KHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAg
ICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFf
LmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtc
biAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNl
IGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQg
ZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5j
dGlvbigpIHtcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVl
KSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0
ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmlu
dGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAg
IHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIg
aXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29u
dGludWU7XG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAg
ICAgICBpZiAoIV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9
XG4gICAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxu
ICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3
ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRo
ZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxu
ICBfLmRpZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRl
bihhcmd1bWVudHMsIHRydWUsIHRydWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwg
ZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtc
biAgICB9KTtcbiAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBh
IHNpbmdsZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRv
Z2V0aGVyLlxuICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3Vt
ZW50cyk7XG4gIH07XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBh
biBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMg
b24gc2hhcmVkIGluZGljZXNcbiAgXy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFy
IGxlbmd0aCA9IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xu
ICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1
Y2soYXJyYXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAv
LyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5
IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9m
IHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29y
cmVzcG9uZGluZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7
XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRM
ZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAg
ICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAg
ICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICBy
ZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUg
dGhlIGZpbmRJbmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3Jl
YXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5
LCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwg
Y29udGV4dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZh
ciBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+
PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRp
Y2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1c
biAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qg
aW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8u
ZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJ
bmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21w
YXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNo
XG4gIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3Jk
ZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5
LCBvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwg
Y29udGV4dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93
ID0gMCwgaGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtc
biAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYg
KGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9
IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVu
Y3Rpb24gdG8gY3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAg
ZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRl
eCkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIg
aSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9
PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlk
eCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNl
IHtcbiAgICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVu
Z3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29y
dGVkSW5kZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChh
cnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDog
LTE7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBw
cmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAg
ICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3Ig
KGlkeCA9IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3Ro
OyBpZHggKz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4g
aWR4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1
cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4g
YXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJy
YXkuXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVy
LCBwYXNzIGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNo
LlxuICBfLmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0
ZWRJbmRleCk7XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5k
TGFzdEluZGV4KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcg
YW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0
aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRp
b25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSku
XG4gIF8ucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9w
ID09IG51bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xu
ICAgIH1cbiAgICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4
KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBB
cnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgr
Kywgc3RhcnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxu
ICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25z
XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBl
eGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5j
dGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1
bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFy
Z3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJl
dHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFz
ZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1
bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJu
IHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlv
biBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50
cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0
aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0
aW9uKGZ1bmMsIGNvbnRleHQpIHtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09
IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBl
RXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdz
ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkg
e1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywg
YXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4g
Ym91bmQ7XG4gIH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRp
bmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJl
LWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBh
Y3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBh
cmd1bWVudHMgdG8gYmUgcHJlLWZpbGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykg
e1xuICAgIHZhciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFy
IGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBi
b3VuZEFyZ3MubGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91
bmRBcmdzW2ldID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xu
ICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5w
dXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1
bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtc
biAgfTtcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhh
dCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMg
dG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8v
IGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAg
ICBpZiAobGVuZ3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3Nl
ZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xu
ICAgICAga2V5ID0gYXJndW1lbnRzW2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tl
eV0sIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBh
biBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXpl
ID0gZnVuY3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihr
ZXkpIHtcbiAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVz
cyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtc
biAgICAgIGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMu
YXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAg
ICB9O1xuICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtc
blxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNl
Y29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGll
ZC5cbiAgXy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNs
aWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigp
e1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4g
IH07XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVy
IHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBf
LnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0
LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8v
IGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBm
dW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdv
aW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3Un
ZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNz
XG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRy
YWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwg
b3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVv
dXQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRp
b25zID0ge307XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9
IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQg
PSBudWxsO1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAg
IGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJu
IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZp
b3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAg
dmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9
IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAw
IHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAg
ICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAg
ICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBw
bHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3Mg
PSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9
PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5n
KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBS
ZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGlu
dm9rZWQsIHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUg
Y2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29u
ZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhl
XG4gIC8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3Vu
Y2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwg
YXJncywgY29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5j
dGlvbigpIHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAg
aWYgKGxhc3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGlt
ZW91dChsYXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91
dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0g
ZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRl
eHQgPSBhcmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1
cm4gZnVuY3Rpb24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1
bWVudHM7XG4gICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBp
bW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRU
aW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3Vs
dCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0g
bnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4g
IC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0
aGUgc2Vjb25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNv
ZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUg
b3JpZ2luYWwgZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtc
biAgICByZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVy
bnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVn
YXRlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAg
ICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9
O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBh
IGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVl
IG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkg
e1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3Ro
IC0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAg
ICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAg
ICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAg
IHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24g
dGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAg
Xy5hZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkg
e1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEg
ZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVk
aW5nKSB0aGUgTnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtc
biAgICB2YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1l
cyA+IDApIHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAg
ICAgIH1cbiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBt
ZW1vO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBi
ZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlv
dSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8u
cGFydGlhbChfLmJlZm9yZSwgMik7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0t
LS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRl
ZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcg
PSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAg
dmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3Rv
U3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAn
aGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0
Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVy
YWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7
XG4gICAgdmFyIHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0
b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3Bl
Y2lhbCBjYXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMo
b2JqLCBwcm9wKSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xu
XG4gICAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQ
cm9wc1tub25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09
IHByb3RvW3Byb3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMu
cHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFt
ZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVD
TUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0
aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAg
IGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkp
O1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVu
dW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJp
ZXZlIGFsbCB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBm
dW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAg
IHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7
XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51
bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmll
dmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1
bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0
aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtr
ZXlzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5z
IHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2Yg
dGhlIG9iamVjdFxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVj
dFxuICBfLm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAg
ICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtl
eXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1
bHRzID0ge30sXG4gICAgICAgICAgY3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNb
aW5kZXhdO1xuICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJl
bnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7
XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZh
bHVlXWAgcGFpcnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9
IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFp
cnMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHtcbiAgICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAg
IHJldHVybiBwYWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBv
ZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0
ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0g
Xy5rZXlzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBp
IDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtc
biAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQg
bGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8v
IEFsaWFzZWQgYXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikg
e1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAg
ICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZl
biBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5c
biAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMg
YSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQt
aW4gb2JqZWN0KHMpXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dl
Yi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBf
LmV4dGVuZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBS
ZXR1cm5zIHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRl
IHRlc3RcbiAgXy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtc
biAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0g
Xy5rZXlzKG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5n
dGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChw
cmVkaWNhdGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5c
biAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hp
dGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0
ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0
ZWUsIGtleXM7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChf
LmlzRnVuY3Rpb24ob2l0ZXJhdGVlKSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xu
ICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBl
bHNlIHtcbiAgICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtc
biAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkg
aW4gb2JqOyB9O1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2
YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYg
KGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxu
ICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9i
amVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5j
dGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVy
YXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxz
ZSB7XG4gICAgICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFs
c2UsIDEpLCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7
XG4gICAgICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9
XG4gICAgcmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAv
LyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRl
ZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVz
IGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3Qu
XG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdp
bGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1
bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShw
cm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4g
ICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQp
IGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAg
ICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5
KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIElu
dm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAg
Ly8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIg
YSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBp
bnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9u
KG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBv
Ymo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBz
ZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwg
YXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVu
Z3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9i
aiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9i
altrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJu
IHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5j
dGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJT
dGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwg
YnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2Fs
YCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9u
eTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEg
LyBiO1xuICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51
bGwgPT0gdW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJu
IGEgPT09IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEg
aW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIg
PSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFy
IGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9T
dHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4g
ICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5k
IGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVn
RXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBh
cmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBT
dHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBv
YmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAg
Ly8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycg
KyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAv
LyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBP
YmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSBy
ZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJm
b3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAg
PyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRl
XSc6XG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRh
dGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBj
b21wYXJlZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMu
IE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25z
XG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJu
ICthID09PSArYjtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAn
W29iamVjdCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9m
IGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxu
ICAgICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVp
dmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVu
dCBmcmFtZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBi
LmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlv
bihhQ3RvcikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3Rv
cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAn
Y29uc3RydWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAg
ICB9XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFs
Z29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRl
ZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxu
XG4gICAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8v
IEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBh
cnJheXMgY29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNr
ID0gYlN0YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdo
aWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMg
aW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUg
bmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVy
biBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9i
amVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2go
YSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9i
amVjdHMgYW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJl
IGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vz
c2FyeS5cbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5s
ZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMs
IGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0p
IHtcbiAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2sp
KSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29t
cGFyZSBvYmplY3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxl
bmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNv
bnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVw
IGVxdWFsaXR5LlxuICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJu
IGZhbHNlO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFy
ZSBlYWNoIG1lbWJlclxuICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICgh
KF8uaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJl
dHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmpl
Y3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgp
O1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJm
b3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5c
biAgXy5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAg
Ly8gQW4gXCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5c
biAgXy5pc0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1
cm4gdHJ1ZTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwg
Xy5pc1N0cmluZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3Ro
ID09PSAwO1xuICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAg
Ly8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAg
fTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8g
RUNNQTUncyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5
IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdb
b2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmpl
Y3Q/XG4gIF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVv
ZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVj
dCcgJiYgISFvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJn
dW1lbnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAs
IGlzRXJyb3IuXG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAn
TnVtYmVyJywgJ0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAg
ICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5n
LmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5c
biAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJz
IChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUg
XCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xu
ICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhv
YmosICdjYWxsZWUnKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25g
IGlmIGFwcHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxc
biAgLy8gSUUgMTEgKCMxNjIxKSwgYW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBl
b2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xu
ICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBv
YmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZl
biBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7
XG4gICAgcmV0dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4g
IH07XG5cbiAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51
bWJlciB3aGljaCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24o
b2JqKSB7XG4gICAgcmV0dXJuIF8uaXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07
XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8
IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8v
IElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihv
YmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4g
dmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4g
ICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9u
IGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlc
biAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAg
Xy5oYXMgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBo
YXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0
aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGlu
ICpub0NvbmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAg
Ly8gcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUg
b2JqZWN0LlxuICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2
aW91c1VuZGVyc2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUg
aWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVu
dGl0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8v
IFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2Yg
VW5kZXJzY29yZS5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJu
IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5u
b29wID0gZnVuY3Rpb24oKXt9O1xuXG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBH
ZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2
ZW4gcHJvcGVydHkuXG4gIF8ucHJvcGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVy
biBvYmogPT0gbnVsbCA/IGZ1bmN0aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0
dXJuIG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBm
b3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBr
ZXk6dmFsdWVgIHBhaXJzLlxuICBfLm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRy
cykge1xuICAgIGF0dHJzID0gXy5leHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVu
Y3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07
XG4gIH07XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBm
dW5jdGlvbihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1h
dGgubWF4KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRl
eHQsIDEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJh
dGVlKGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20g
aW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1
bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBt
aW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihN
YXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJs
eSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIu
XG4gIF8ubm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRl
KCkuZ2V0VGltZSgpO1xuICB9O1xuXG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVz
Y2FwaW5nLlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6
ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidc
IjogJyYjeDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAg
PSBfLmludmVydChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5k
IHVuZXNjYXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNy
ZWF0ZUVzY2FwZXIgPSBmdW5jdGlvbihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9u
KG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4
ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZh
ciBzb3VyY2UgPSAnKD86JyArIF8ua2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIg
dGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVn
RXhwKHNvdXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBz
dHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4g
dGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBl
c2NhcGVyKSA6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2Fw
ZXIoZXNjYXBlTWFwKTtcbiAgXy51bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXAp
O1xuXG4gIC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0
aW9uIHRoZW4gaW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90
aGVyd2lzZSwgcmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVy
dHksIGZhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAg
OiBvYmplY3RbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2
YWx1ZSA9IGZhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/
IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5p
cXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbiku
XG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAw
O1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENv
dW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtc
blxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRl
bGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRv
IHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4g
ICAgZXZhbHVhdGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDog
LzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8p
JT4vZ1xuICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBp
ZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVh
dGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50
ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFp
biBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBp
bnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wi
OiAgICAgIFwiJ1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdy
JyxcbiAgICAnXFxuJzogICAgICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xc
dTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58
XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkg
e1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZh
U2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVu
dGF0aW9uLlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVs
aW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBl
cyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdz
YCBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUg
PSBmdW5jdGlvbih0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRp
bmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdz
ID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAv
LyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRl
cm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNj
YXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBu
b01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291
cmNlXG4gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUg
dGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5c
biAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRl
eHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwg
ZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9m
ZnNldCkucmVwbGFjZShlc2NhcGVyLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0
ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSAr
PSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3Qp
KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJj
ZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkr
XFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0g
XCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAv
LyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVj
dCBvZmZlc3QuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwi
JztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2Ug
ZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkg
c291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNv
dXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAg
ICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5c
IiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAg
IHZhciByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdf
Jywgc291cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtc
biAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0
YSkge1xuICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5c
biAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3Ig
cHJlY29tcGlsYXRpb24uXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwg
J29iaic7XG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcp
e1xcbicgKyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAg
Ly8gQWRkIGEgXCJjaGFpblwiIGZ1bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5k
ZXJzY29yZSBvYmplY3QuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5z
dGFuY2UgPSBfKG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4g
aW5zdGFuY2U7XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJ
ZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBl
ZCBvYmplY3QgdGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhv
bGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9u
cy4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlv
biB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3Vs
dCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWlu
ID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3Rv
bSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rp
b24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtc
biAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBl
W25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRd
O1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBy
ZXN1bHQodGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9
O1xuXG4gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFw
cGVyIG9iamVjdC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkg
ZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZl
cnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFt
ZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBl
W25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAg
ICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdz
aGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBv
YmpbMF07XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5c
biAgLy8gQWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4g
IF8uZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAg
ICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9
IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhp
cy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMg
dGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90
eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07
XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBp
biBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3Ry
aW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09O
ID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlv
bigpIHtcbiAgICByZXR1cm4gJycgKyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCBy
ZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1E
IGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBv
biBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVn
aXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8g
YXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJy
YXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJk
IHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3Qu
IFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnlt
b3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlm
ICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZp
bmUoJ3VuZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9
KTtcbiAgfVxufS5jYWxsKHRoaXMpKTtcbiIKK21vZHVsZS5leHBvcnRzID0gIi8vICAgICBVbmRl
cnNjb3JlLmpzIDEuOC4zXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAo
YykgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdh
dGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4g
IC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNo
IHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBv
biB0aGUgc2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlv
dXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9
IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlw
cGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJv
dG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5c
biAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0
byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVBy
b3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAg
dG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5
ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUq
KiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAg
Ly8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFy
cmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAg
bmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsXG4gICAgbmF0aXZlQ3JlYXRlICAg
ICAgID0gT2JqZWN0LmNyZWF0ZTtcblxuICAvLyBOYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9y
IHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIHZhciBDdG9yID0gZnVuY3Rpb24oKXt9
O1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVj
dCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmog
aW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkg
cmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAv
LyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAv
LyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElm
IHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5c
biAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2Yg
bW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0
cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBl
bHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBf
LlZFUlNJT04gPSAnMS44LjMnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhl
IHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVu
ZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIgb3B0aW1pemVDYiA9IGZ1bmN0aW9uKGZ1
bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0
dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7
XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4g
ZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDI6IHJldHVy
biBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250
ZXh0LCB2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxs
KGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2Fz
ZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlv
bikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1
ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0
aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAg
ICB9O1xuICB9O1xuXG4gIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRl
IGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gIC8vIHRvIGVhY2ggZWxlbWVudCBpbiBh
IGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlclxuICAv
LyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9y
IGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0
LCBhcmdDb3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5pZGVudGl0eTtc
biAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNv
bnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1h
dGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcbiAgXy5p
dGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNiKHZhbHVl
LCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24g
Zm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgdmFyIGNyZWF0ZUFzc2lnbmVyID0g
ZnVuY3Rpb24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24o
b2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChs
ZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5k
ZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0g
YXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxu
ICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGw7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICgh
dW5kZWZpbmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtr
ZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH07
XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0
aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgdmFyIGJhc2VDcmVhdGUgPSBmdW5jdGlvbihw
cm90b3R5cGUpIHtcbiAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xu
ICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAg
ICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7
XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5c
biAgdmFyIHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9i
aikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAg
fTtcbiAgfTtcblxuICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1p
bmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFy
cmF5IG9yIGFzIGFuIG9iamVjdFxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEu
b3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMg
YSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FS
UkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHByb3Bl
cnR5KCdsZW5ndGgnKTtcbiAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29sbGVjdGlvbikg
e1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHR5
cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3RoIDw9IE1BWF9B
UlJBWV9JTkRFWDtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxl
bWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFk
ZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtl
cyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9u
KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRl
cmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtl
KG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4g
ICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBmb3IgKGkg
PSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0
ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAg
cmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcg
dGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5j
dGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRl
ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMo
b2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJl
c3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBs
ZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5k
ZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50
S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07
XG5cbiAgLy8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxlZnQgb3Igcmln
aHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBPcHRpbWl6ZWQgaXRl
cmF0b3IgZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aFxuICAgIC8vIGluIHRoZSBt
YWluIGZ1bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS5cbiAgICBmdW5jdGlv
biBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKSB7XG4g
ICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7
XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4g
ICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXks
IG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9XG5cbiAgICByZXR1cm4g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgaXRlcmF0ZWUg
PSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICAgIHZhciBrZXlzID0gIWlz
QXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMg
fHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAt
IDE7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9uZSBpcyBwcm92
aWRlZC5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgICBtZW1vID0g
b2JqW2tleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xu
ICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMs
IGluZGV4LCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1
cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4g
IC8vIG9yIGBmb2xkbGAuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gY3JlYXRl
UmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVj
ZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGNy
ZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNz
ZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVj
dCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleTtcbiAg
ICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAga2V5ID0gXy5maW5kSW5kZXgob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBfLmZpbmRLZXko
b2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAg
JiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwg
dGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYHNl
bGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwg
Y29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJl
ZGljYXRlLCBjb250ZXh0KTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgs
IGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0
cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAv
LyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxu
ICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0
dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9
O1xuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0
cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBm
dW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHBy
ZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBf
LmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFy
IGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJl
ZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xu
ICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVh
c3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8g
QWxpYXNlZCBhcyBgYW55YC5cbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRp
Y2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7
XG4gICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSxcbiAgICAg
ICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlz
ID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRL
ZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZh
bHNlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRh
aW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRl
c2AgYW5kIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBfLmluY2x1ZGUg
PSBmdW5jdGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJy
YXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5k
ZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIF8uaW5k
ZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfTtcblxuICAvLyBJbnZva2UgYSBt
ZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAg
Xy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9k
KTtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGZ1
bmMgPSBpc0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdO1xuICAgICAgcmV0dXJuIGZ1bmMg
PT0gbnVsbCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtc
blxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBg
OiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtc
biAgICByZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENv
bnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVj
dGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBw
YWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5m
aWx0ZXIob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2
ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qg
b2JqZWN0XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8u
ZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2Jq
LCBfLm1hdGNoZXIoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxl
bWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWF4ID0gZnVuY3Rpb24o
b2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxh
c3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlm
IChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5
TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBv
YmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9
IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVl
ID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFs
dWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGlu
ZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1
dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICBy
ZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAg
ICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8g
UmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24p
LlxuICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIg
cmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1
ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtc
biAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAg
ICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
e1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7
XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVs
c2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVh
Y2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQg
PSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBs
YXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5p
dHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQg
PSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1
bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4g
dmVyc2lvbiBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICBfLnNodWZmbGUgPSBm
dW5jdGlvbihvYmopIHtcbiAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8u
dmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7XG4gICAgdmFyIHNodWZm
bGVkID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJhbmQ7IGluZGV4
IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByYW5kID0gXy5yYW5kb20oMCwgaW5kZXgpO1xu
ICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5k
XTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJu
IHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20g
YSBjb2xsZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEg
c2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVu
dCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9i
aiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAo
IWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2Jq
W18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUo
b2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2Jq
ZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBf
LnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRl
ZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmos
IGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAg
dmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBp
dGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rp
b24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZh
ciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAo
YSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIg
PT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXgg
LSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJu
YWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxu
ICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihv
YmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBp
dGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGlu
ZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAg
fSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRo
ZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0
dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhl
IGNyaXRlcmlvbi5cbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwg
a2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1
ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRo
ZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdyb3VwQnlgLCBi
dXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJl
IHVuaXF1ZS5cbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5
KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3Rh
bmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNz
XG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rp
b24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGdyb3Vw
KGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtl
eSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBT
YWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxu
ICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xu
ICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAo
aXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0
dXJuIF8udmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxl
bWVudHMgaW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAo
b2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2Jq
Lmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBTcGxpdCBhIGNvbGxl
Y3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNhdGlzZnkgdGhl
IGdpdmVuXG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90
IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAgXy5wYXJ0aXRpb24gPSBmdW5jdGlvbihvYmosIHBy
ZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4
dCk7XG4gICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBrZXksIG9iaikge1xuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmop
ID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywg
ZmFpbF07XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0t
LVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4q
KiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlh
c2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93
cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9
IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1
cm4gdm9pZCAwO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtc
biAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxu
ICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4g
RXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3Npbmcg
KipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNs
dWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJk
KSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxl
bmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQg
dGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0
aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9u
KGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAw
O1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGgg
LSAxXTtcbiAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGgg
LSBuKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50
cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3Bl
Y2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3
aWxsIHJldHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ucmVz
dCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJl
dHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07
XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNv
bXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5p
ZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1
cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0
LCBzaGFsbG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgb3V0cHV0ID0gW10sIGlk
eCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3RoID0gZ2V0TGVu
Z3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtp
XTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2YWx1ZSkgfHwg
Xy5pc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIC8vZmxhdHRlbiBjdXJyZW50IGxldmVs
IG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3RcbiAgICAgICAgaWYgKCFzaGFsbG93KSB2YWx1
ZSA9IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7XG4gICAgICAgIHZhciBqID0gMCwg
bGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxlbjtcbiAgICAg
ICAgd2hpbGUgKGogPCBsZW4pIHtcbiAgICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisr
XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1
dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAg
fTtcblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBk
ZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5
LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlKTtc
biAgfTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90
IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24o
YXJyYXkpIHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9u
IG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVk
LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8g
QWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJh
eSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihp
c1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0g
aXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0
ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJl
c3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVl
ID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZh
bHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgICBp
ZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAg
c2VlbiA9IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBp
ZiAoIV8uY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNv
bXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAg
IH0gZWxzZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0
LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xu
XG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlz
dGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAg
Xy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVu
dHMsIHRydWUsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29u
dGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBh
cnJheXMuXG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVz
dWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZv
ciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKysp
IHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoXy5jb250YWlucyhyZXN1
bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0
aDsgaisrKSB7XG4gICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBi
cmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChp
dGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMu
XG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkg
d2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFy
IHJlc3QgPSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7XG4gICAgcmV0dXJuIF8u
ZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMo
cmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBs
ZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8g
YW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJu
IF8udW56aXAoYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBDb21wbGVtZW50IG9mIF8uemlwLiBV
bnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJy
YXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlc1xuICBfLnVuemlwID0gZnVuY3Rpb24oYXJy
YXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdldExlbmd0aCku
bGVuZ3RoIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRb
aW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0
O1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIg
YSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJh
bGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9m
XG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihs
aXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAs
IGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAo
dmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0g
ZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9
XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0
aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1bmN0aW9uc1xu
ICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4g
ZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0g
Y2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJy
YXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAg
Zm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAg
ICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGlu
ZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1
cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgcHJlZGlj
YXRlIHRlc3RcbiAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtc
biAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4g
IC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3Qg
aW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0
byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0g
ZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9
IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmop
O1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAo
bG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8g
Mik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsg
MTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8v
IEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxhc3RJbmRleE9m
IGZ1bmN0aW9uc1xuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZp
bmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgp
IHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlm
ICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAg
ICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xu
ICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1p
bihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAg
fSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9
IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09
IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4g
ICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwg
Xy5pc05hTik7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAg
IH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAm
JiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09
IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAg
fVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2Yg
YW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1
ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5
IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNl
IGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmlu
ZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4Rmlu
ZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJy
YXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8g
dGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRo
b24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9u
cy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7
XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAg
ICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG5cbiAgICB2YXIgbGVu
Z3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAg
IHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHgg
PCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3Rh
cnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChh
aGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5l
cyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9y
IGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c1xuICB2YXIgZXhl
Y3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxs
aW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2Yg
Ym91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAg
dmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVz
dWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoXy5pc09iamVjdChy
ZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIC8vIENy
ZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNg
LCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNj
cmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAg
Xy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIGlmIChuYXRpdmVCaW5kICYm
IGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywg
c2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkg
dGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7
XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGJvdW5k
ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBj
b250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICB9
O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5j
dGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8v
IGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlz
YCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNv
bWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBm
dW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRz
LCAxKTtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9
IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxl
bmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAg
IGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBi
b3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMu
bGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBl
eGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAg
cmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3Mg
bWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhl
IG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBj
YWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJp
bmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaSwgbGVuZ3RoID0gYXJndW1lbnRzLmxl
bmd0aCwga2V5O1xuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxs
IG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbaV07XG4gICAgICBvYmpba2V5XSA9
IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxu
ICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRz
LlxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6
ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAg
ICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cykgOiBrZXkpO1xuICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2Fk
ZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hl
W2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBt
ZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVt
YmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJn
dW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAg
IHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAg
ICB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBp
dCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5c
biAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTtcblxuICAvLyBSZXR1cm5zIGEg
ZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBt
b3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0
aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3
aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAg
Ly8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFk
aW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1
dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlv
bihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtc
biAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAo
IW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAg
ICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xu
ICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQs
IGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAg
fTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAg
ICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMg
PSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4g
ICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAo
cmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91
dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0
ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVz
dWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBj
b250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlv
bnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxh
dGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xu
ICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250
aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVu
Y3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAv
LyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBm
dW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGlu
Zy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAg
IHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZh
ciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0
YW1wO1xuXG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7XG4gICAgICAgIHRp
bWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xu
ICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAg
ICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGlmICgh
dGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAg
fTtcblxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAg
ICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7XG4gICAgICB2
YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGlmICghdGltZW91dCkg
dGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHtc
biAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29u
dGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAg
IH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFu
IGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJn
dW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxs
eSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVu
Yywgd3JhcHBlcikge1xuICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH07
XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRp
Y2F0ZS5cbiAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNv
bXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRo
ZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgXy5jb21wb3Nl
ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0
ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBp
ID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJn
dW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCBy
ZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVy
bnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhl
IE50aCBjYWxsLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1
cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJu
IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4g
IC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAo
YnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC5cbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0
aW1lcywgZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAg
ICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBh
cmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xu
ICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rp
b24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dc
biAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5c
biAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rp
b25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdv
bid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2
YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0
b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJv
dG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlz
RW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIGZ1
bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAgdmFyIG5vbkVudW1J
ZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9i
ai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9y
KSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3Ry
dWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xu
ICAgIGlmIChfLmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlz
LnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0g
bm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYm
IG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtc
biAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJl
dHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVs
ZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtl
eXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtd
O1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBr
ZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkg
a2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVn
KSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07
XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4g
IF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSBy
ZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBr
ZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcp
IGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtc
blxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4g
IF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtc
biAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxl
bmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFs
dWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xu
XG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVh
Y2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0XG4gIC8vIEluIGNvbnRyYXN0IHRvIF8ubWFwIGl0IHJl
dHVybnMgYW4gb2JqZWN0XG4gIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwg
Y29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZh
ciBrZXlzID0gIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxu
ICAgICAgICAgIHJlc3VsdHMgPSB7fSxcbiAgICAgICAgICBjdXJyZW50S2V5O1xuICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjdXJy
ZW50S2V5ID0ga2V5c1tpbmRleF07XG4gICAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVy
YXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICBy
ZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlz
dCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xu
ICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3Ro
O1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1d
XTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5
cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJs
ZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4g
ICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
a2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ld
XV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJl
dHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhl
IG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1l
dGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZh
ciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMu
cHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8v
IEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQt
aW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxsS2V5cyk7XG5c
biAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMg
aW4gdGhlIHBhc3NlZC1pbiBvYmplY3QocylcbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVj
dC9hc3NpZ24pXG4gIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihfLmtl
eXMpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNz
ZXMgYSBwcmVkaWNhdGUgdGVzdFxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0
ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4g
ICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5n
dGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ld
O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xu
ICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250
YWluaW5nIHRoZSBhbGxvd2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihv
YmplY3QsIG9pdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgb2JqID0g
b2JqZWN0LCBpdGVyYXRlZSwga2V5cztcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1
bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7XG4gICAgICBrZXlzID0gXy5h
bGxLZXlzKG9iaik7XG4gICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJhdGVlLCBjb250
ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxz
ZSwgZmFsc2UsIDEpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmop
IHsgcmV0dXJuIGtleSBpbiBvYmo7IH07XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9
XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tl
eV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2
YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEg
Y29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsb2NrbGlzdGVkIHByb3BlcnRpZXMuXG4g
IF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5p
c0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0ZShpdGVyYXRl
ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRlbihhcmd1bWVu
dHMsIGZhbHNlLCBmYWxzZSwgMSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9u
KHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4g
ICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQp
O1xuICB9O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3Bl
cnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMsIHRydWUpO1xu
XG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJv
dG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRl
ZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4g
IF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQg
PSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBfLmV4dGVuZE93bihyZXN1
bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChz
aGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0
aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJl
dHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4g
IH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJl
dHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRv
IFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBv
cGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8u
dGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7
XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0
IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5pc01hdGNoID0gZnVu
Y3Rpb24ob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKGF0dHJzKSwgbGVu
Z3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0
aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoYXR0
cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAg
IH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBj
b21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIHZhciBlcSA9IGZ1bmN0aW9uKGEs
IGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFs
LiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUg
W0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1
LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8
fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9
PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0
cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGlu
c3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBu
YW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xh
c3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChj
bGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lv
bnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2Fz
ZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3Ry
aW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBj
YXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBj
b3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwi
YCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAg
ICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVy
XSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUu
XG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXG4gICAgICAgIGlm
ICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21w
YXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJl
dHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNl
ICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAg
ICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVl
cy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJl
cHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCBy
ZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50Llxu
ICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBj
bGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAg
ICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0
dXJuIGZhbHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9y
cyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8v
IGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVj
dG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYm
ICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3RvciBp
bnN0YW5jZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVj
dG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNl
O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1
Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0
dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3Bl
cmF0aW9uIGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9i
amVjdHMuXG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9y
IG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBb
XTtcbiAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5s
ZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQ
ZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAg
ICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3Ro
XSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFk
ZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAg
ICBhU3RhY2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2
ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAg
ICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBh
cmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAo
bGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJl
IHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdo
aWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBh
U3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAg
ICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhhKSwg
a2V5O1xuICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBi
b3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUg
Y29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAhPT0g
bGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAg
Ly8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtc
biAgICAgICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNr
LCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUg
dGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAg
ICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9
O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVj
dHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJu
IGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2Jq
ZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93
bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2Jq
ID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlz
QXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0
dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0g
MDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNF
bGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5
cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8v
IERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9
IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNh
bGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZh
cmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZh
ciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0
eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUg
bWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNE
YXRlLCBpc1JlZ0V4cCwgaXNFcnJvci5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9u
JywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InXSwgZnVuY3Rp
b24obmFtZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBy
ZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAg
ICB9O1xuICB9KTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRo
b2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFu
eSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhh
cmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAg
cmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6
ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1
Z3MgaW4gb2xkIHY4LFxuICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5
KS5cbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9
ICdvYmplY3QnKSB7XG4gICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBy
ZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxu
ICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBm
dW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VG
bG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4g
aXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNO
YU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAh
PT0gK29iajtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgXy5p
c0Jvb2xlYW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9i
aiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7
XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVs
bCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAg
Ly8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5j
dGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hv
cnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9w
ZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBw
cm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9i
aiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8v
IFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVu
ZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlh
YmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0
aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAg
IHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxu
ICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0
ZWVzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7
XG4gIH07XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2Vm
dWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUp
IHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtc
biAgfTtcblxuICBfLm5vb3AgPSBmdW5jdGlvbigpe307XG5cbiAgXy5wcm9wZXJ0eSA9IHByb3Bl
cnR5O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0
IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2Jq
KSB7XG4gICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5
KSB7XG4gICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5z
IGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBz
ZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9
IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xu
ICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBh
dHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5c
biAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFj
Y3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihp
dGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFj
Y3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJl
dHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4g
IF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtc
biAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4g
KyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4g
IC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAg
YXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICBy
ZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgIC8vIExpc3Qgb2YgSFRNTCBl
bnRpdGllcyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFt
cDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVv
dDsnLFxuICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG4gIHZh
ciB1bmVzY2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb25zIGZv
ciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0
aW9uLlxuICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciBlc2Nh
cGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07
XG4gICAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBl
c2NhcGVkXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsg
JyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxh
Y2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJp
bmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztc
biAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJl
cGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBl
ID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBl
cih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVy
dHlgIGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAg
YXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24o
b2JqZWN0LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0g
bnVsbCA/IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlID09PSB2b2lk
IDApIHtcbiAgICAgIHZhbHVlID0gZmFsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBfLmlzRnVu
Y3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8g
R2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNs
aWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFy
IGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2
YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBp
ZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5
bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxh
dGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVT
ZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAg
aW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88
JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxh
dGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBv
bGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlz
XG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztc
blxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhl
eSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMg
PSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAg
ICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHUyMDI4JzogJ3Uy
MDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9c
XFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICB2YXIgZXNjYXBlQ2hhciA9IGZ1
bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9
O1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJl
c2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVz
IGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNv
cnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5C
OiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5c
biAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xu
ICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7
XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRp
bmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJl
c3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAg
IChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmlu
dGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8
fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAv
LyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBh
cHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19w
Kz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUs
IGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5z
bGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZXIsIGVzY2FwZUNoYXIpO1xuICAgICAg
aW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAg
ICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycn
Ol8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtc
biAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9
PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAg
ICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAg
ICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9k
dWNlIHRoZSBjb3JyZWN0IG9mZmVzdC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAg
ICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3Bl
Y2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRp
bmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31c
XG4nO1xuXG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBl
LmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1l
bnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAg
ICB0cnkge1xuICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJs
ZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291
cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUg
PSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwg
Xyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNv
bnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5n
cy52YXJpYWJsZSB8fCAnb2JqJztcbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyAr
IGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0
ZTtcbiAgfTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5n
IGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikg
e1xuICAgIHZhciBpbnN0YW5jZSA9IF8ob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVl
O1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0t
LS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJl
dHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBU
aGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVy
c2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRz
LlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBp
bnN0YW5jZS5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQg
eW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8u
bWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVu
Y3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAg
ICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBb
dGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAg
ICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07
XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlv
bnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwg
bXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcs
ICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCdd
LCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4g
ICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlz
Ll93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlm
ICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9
PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTtcbiAg
ICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0
aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rp
b24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJv
dG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1l
dGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxu
ICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVj
dC5cbiAgXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5f
d3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUg
bWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRp
YyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnBy
b3RvdHlwZS50b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTtcblxuICBfLnByb3RvdHlwZS50b1N0
cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7XG4gIH07
XG5cbiAgLy8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGli
aWxpdHkgd2l0aCBBTUQgbG9hZGVyc1xuICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1
cm4gc2VtYW50aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWxcbiAgLy8gcHJhY3Rp
Y2UgZm9yIEFNRCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJl
Z2lzdGVyc1xuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQg
aXMgYSBiYXNlIGxpYnJhcnkgdGhhdCBpc1xuICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5k
bGVkIGluIGEgdGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2ZcbiAgLy8gYW4gQU1E
IGxvYWQgcmVxdWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBh
blxuICAvLyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIg
cmVxdWVzdC5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFt
ZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJl
dHVybiBfO1xuICAgIH0pO1xuICB9XG59LmNhbGwodGhpcykpO1xuIgogCiAvKioqLyB9KSwKIC8q
IDQyMiAqLwpAQCAtMTQ5MDI4LDcgKzE0OTAyOCw3IEBAIHZhciBKU0hJTlQgPSAoZnVuY3Rpb24o
KSB7CiAKICAgZnVuY3Rpb24gY29tYmluZShkZXN0LCBzcmMpIHsKICAgICBPYmplY3Qua2V5cyhz
cmMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgaWYgKF8uaGFzKEpTSElOVC5ibGFj
a2xpc3QsIG5hbWUpKSByZXR1cm47CisgICAgICBpZiAoXy5oYXMoSlNISU5ULmJsb2NrbGlzdCwg
bmFtZSkpIHJldHVybjsKICAgICAgIGRlc3RbbmFtZV0gPSBzcmNbbmFtZV07CiAgICAgfSk7CiAg
IH0KQEAgLTE0OTMxMyw3ICsxNDkzMTMsNyBAQCB2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewog
ICAgICAgICAgIGtleSA9IGtleS5zbGljZSgxKTsKICAgICAgICAgICB2YWwgPSBmYWxzZTsKIAot
ICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rba2V5XSA9IGtleTsKKyAgICAgICAgICBKU0hJTlQu
YmxvY2tsaXN0W2tleV0gPSBrZXk7CiAgICAgICAgICAgZGVsZXRlIHByZWRlZmluZWRba2V5XTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBwcmVkZWZba2V5XSA9ICh2YWwgPT09ICJ0cnVl
Iik7CkBAIC0xNTQxMjAsNyArMTU0MTIwLDcgQEAgdmFyIEpTSElOVCA9IChmdW5jdGlvbigpIHsK
ICAgICAgIEpTSElOVC5lcnJvcnMgPSBbXTsKICAgICAgIEpTSElOVC51bmRlZnMgPSBbXTsKICAg
ICAgIEpTSElOVC5pbnRlcm5hbHMgPSBbXTsKLSAgICAgIEpTSElOVC5ibGFja2xpc3QgPSB7fTsK
KyAgICAgIEpTSElOVC5ibG9ja2xpc3QgPSB7fTsKICAgICAgIEpTSElOVC5zY29wZSA9ICIobWFp
bikiOwogICAgIH0KIApAQCAtMTU0MTQ5LDcgKzE1NDE0OSw3IEBAIHZhciBKU0hJTlQgPSAoZnVu
Y3Rpb24oKSB7CiAKICAgICAgICAgaWYgKGl0ZW1bMF0gPT09ICItIikgewogICAgICAgICAgIHNs
aWNlID0gaXRlbS5zbGljZSgxKTsKLSAgICAgICAgICBKU0hJTlQuYmxhY2tsaXN0W3NsaWNlXSA9
IHNsaWNlOworICAgICAgICAgIEpTSElOVC5ibG9ja2xpc3Rbc2xpY2VdID0gc2xpY2U7CiAgICAg
ICAgICAgLy8gcmVtb3ZlIGZyb20gcHJlZGVmaW5lZCBpZiB0aGVyZQogICAgICAgICAgIGRlbGV0
ZSBwcmVkZWZpbmVkW3NsaWNlXTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE5NTgyOSw3ICsxOTU4
MjksNyBAQCBmdW5jdGlvbiBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobm9kZSkgCiAJdmFyIHJl
Z2V4U2luZ2xlRXNjYXBlID0gL1siJ1xcXGJcZlxuXHJcdF0vOwogCiAJdmFyIHJlZ2V4RGlnaXQg
PSAvWzAtOV0vOwotCXZhciByZWdleFdoaXRlbGlzdCA9IC9bICEjLSZcKC1cW1xdLX5dLzsKKwl2
YXIgcmVnZXhBbGxvd2xpc3QgPSAvWyAhIy0mXCgtXFtcXS1+XS87CiAKIAl2YXIganNlc2MgPSBm
dW5jdGlvbihhcmd1bWVudCwgb3B0aW9ucykgewogCQkvLyBIYW5kbGUgb3B0aW9ucwpAQCAtMTk2
MDA0LDcgKzE5NjAwNCw3IEBAIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2Rl
KSAKIAkJCQl9CiAJCQl9CiAJCQlpZiAoIW9wdGlvbnMuZXNjYXBlRXZlcnl0aGluZykgewotCQkJ
CWlmIChyZWdleFdoaXRlbGlzdC50ZXN0KGNoYXJhY3RlcikpIHsKKwkJCQlpZiAocmVnZXhBbGxv
d2xpc3QudGVzdChjaGFyYWN0ZXIpKSB7CiAJCQkJCS8vIEl04oCZcyBhIHByaW50YWJsZSBBU0NJ
SSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYCJgLCBgJ2Agb3IgYFxgLAogCQkJCQkvLyBzbyBkb27i
gJl0IGVzY2FwZSBpdC4KIAkJCQkJcmVzdWx0ICs9IGNoYXJhY3RlcjsKQEAgLTIwOTMzNCw3ICsy
MDkzMzQsNyBAQCB2YXIgX2dldEl0ZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1CiAKIGV4
cG9ydHMuY2FsbCA9IGNhbGw7CiBleHBvcnRzLl9jYWxsID0gX2NhbGw7Ci1leHBvcnRzLmlzQmxh
Y2tsaXN0ZWQgPSBpc0JsYWNrbGlzdGVkOworZXhwb3J0cy5pc0Jsb2NrbGlzdGVkID0gaXNCbG9j
a2xpc3RlZDsKIGV4cG9ydHMudmlzaXQgPSB2aXNpdDsKIGV4cG9ydHMuc2tpcCA9IHNraXA7CiBl
eHBvcnRzLnNraXBLZXkgPSBza2lwS2V5OwpAQCAtMjA5NDEwLDkgKzIwOTQxMCw5IEBAIGZ1bmN0
aW9uIF9jYWxsKGZucykgewogICByZXR1cm4gZmFsc2U7CiB9CiAKLWZ1bmN0aW9uIGlzQmxhY2ts
aXN0ZWQoKSB7Ci0gIHZhciBibGFja2xpc3QgPSB0aGlzLm9wdHMuYmxhY2tsaXN0OwotICByZXR1
cm4gYmxhY2tsaXN0ICYmIGJsYWNrbGlzdC5pbmRleE9mKHRoaXMubm9kZS50eXBlKSA+IC0xOwor
ZnVuY3Rpb24gaXNCbG9ja2xpc3RlZCgpIHsKKyAgdmFyIGJsb2NrbGlzdCA9IHRoaXMub3B0cy5i
bG9ja2xpc3Q7CisgIHJldHVybiBibG9ja2xpc3QgJiYgYmxvY2tsaXN0LmluZGV4T2YodGhpcy5u
b2RlLnR5cGUpID4gLTE7CiB9CiAKIGZ1bmN0aW9uIHZpc2l0KCkgewpAQCAtMjA5NDIwLDcgKzIw
OTQyMCw3IEBAIGZ1bmN0aW9uIHZpc2l0KCkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0g
IGlmICh0aGlzLmlzQmxhY2tsaXN0ZWQoKSkgeworICBpZiAodGhpcy5pc0Jsb2NrbGlzdGVkKCkp
IHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIApAQCAtMjExMDc4LDcgKzIxMTA3OCw3IEBAIGZ1
bmN0aW9uIHNob3VsZElnbm9yZUtleShrZXkpIHsKIAogICBpZiAoa2V5ID09PSAiZW50ZXIiIHx8
IGtleSA9PT0gImV4aXQiIHx8IGtleSA9PT0gInNob3VsZFNraXAiKSByZXR1cm4gdHJ1ZTsKIAot
ICBpZiAoa2V5ID09PSAiYmxhY2tsaXN0IiB8fCBrZXkgPT09ICJub1Njb3BlIiB8fCBrZXkgPT09
ICJza2lwS2V5cyIpIHJldHVybiB0cnVlOworICBpZiAoa2V5ID09PSAiYmxvY2tsaXN0IiB8fCBr
ZXkgPT09ICJub1Njb3BlIiB8fCBrZXkgPT09ICJza2lwS2V5cyIpIHJldHVybiB0cnVlOwogCiAg
IHJldHVybiBmYWxzZTsKIH0KQEAgLTIyMjc2OCw3ICsyMjI3NjgsNyBAQCBmdW5jdGlvbiBfaW50
ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgCiAKIGNvbnN0IGxpZmVjeWNsZU1ldGhvZHMgPSBu
ZXcgU2V0KFsiY29tcG9uZW50V2lsbFVubW91bnQiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiY29t
cG9uZW50V2lsbE1vdW50IiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJjb21wb25lbnRXaWxsVXBk
YXRlIiwgImNvbXBvbmVudERpZENhdGNoIiwgImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiXSk7
CiAKLWNvbnN0IHdoaXRlbGlzdGVkUHJvcGVydGllcyA9IG5ldyBTZXQoWyJwcm9wcyIsICJjb250
ZXh0IiwgInJlZnMiXSk7Citjb25zdCBhbGxvd2xpc3RlZFByb3BlcnRpZXMgPSBuZXcgU2V0KFsi
cHJvcHMiLCAiY29udGV4dCIsICJyZWZzIl0pOwogCiBmdW5jdGlvbiBnZXRJbml0aWFsUHJvcHMo
cmVhbG0sIGNvbXBvbmVudFR5cGUpIHsKICAgbGV0IHByb3BzTmFtZSA9IG51bGw7CkBAIC0yMjI5
MzgsNyArMjIyOTM4LDcgQEAgZnVuY3Rpb24gZXZhbHVhdGVDbGFzc0NvbnN0cnVjdG9yKHJlYWxt
LAogICAgIGxldCBpbnN0YW5jZSA9ICgwLCBfaW5kZXgyLkNvbnN0cnVjdCkocmVhbG0sIGNvbnN0
cnVjdG9yRnVuYywgW3Byb3BzLCBjb250ZXh0XSk7CiAgICAgKDAsIF9pbnZhcmlhbnQyLmRlZmF1
bHQpKGluc3RhbmNlIGluc3RhbmNlb2YgX2luZGV4Lk9iamVjdFZhbHVlKTsKICAgICBmb3IgKGxl
dCBbcHJvcGVydHlOYW1lXSBvZiBpbnN0YW5jZS5wcm9wZXJ0aWVzKSB7Ci0gICAgICBpZiAoIXdo
aXRlbGlzdGVkUHJvcGVydGllcy5oYXMocHJvcGVydHlOYW1lKSkgeworICAgICAgaWYgKCFhbGxv
d2xpc3RlZFByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaW5zdGFuY2VQ
cm9wZXJ0aWVzLmFkZChwcm9wZXJ0eU5hbWUpOwogICAgICAgfQogICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>